net-vpn/amneziawg-linux-kernel-module: add 1.0.20251009

Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
This commit is contained in:
Alexander Miroshnichenko 2025-10-11 22:20:26 +03:00
parent e5074df07d
commit 4f2be050e9
2 changed files with 130 additions and 0 deletions

View File

@ -1 +1,2 @@
DIST amneziawg-linux-kernel-module-1.0.20241112.tar.gz 417511 BLAKE2B 8ae2a320d1ed3e46a27636f14255161d773c66e856602842526a2656c440ddfb34d40e47745b78f4f41674a9e813d906aab663455e353473e93678c9f4bf14de SHA512 0d0dde7324088f2f3eff2cff9679e7f25b20d9796462da9949e6fc97af320a43ace27f9dfbd32cc2995449a68b313d6877ced6aa0ad3fbd02f15b1338e62fdff
DIST amneziawg-linux-kernel-module-1.0.20251009.tar.gz 406841 BLAKE2B ed7649619506d16f10e79e8ea13f24f7b22bd65c3cbbf66a19391ebc3b9fe3db744dee09ebf2b538bf1881c6b79084e16b5871d9b76a9673f45395d8291c0366 SHA512 1c807df0e54fa79f50c055229fe75a4289febd272c304528f5cfe57271aecfe2fb5a8c4480c82f527e1b0272bfae73e03b5b06119769e98d37bb4df65844f2ff

View File

@ -0,0 +1,129 @@
# Distributed under the terms of the GNU General Public License v2
EAPI=8
MODULES_OPTIONAL_IUSE="module"
inherit linux-mod-r1
DESCRIPTION="AmneziaWG kernel module"
HOMEPAGE="https://github.com/amnezia-vpn/amneziawg-linux-kernel-module"
if [[ ${PV} == 9999 ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git"
else
SRC_URI="https://github.com/amnezia-vpn/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
# Please don't stabilize this package. Stable users should use gentoo-sources 5.4 or 5.10.
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86"
fi
LICENSE="GPL-2"
SLOT="0"
IUSE="debug +module module-src"
CONFIG_CHECK="NET INET NET_UDP_TUNNEL CRYPTO_ALGAPI"
# On modern kernels AmneziaWG needs Wireguard sources from kernel to generate
# own sources from. On a typical Gentoo installation 'sys-kernel/*-sources'
# package contains needed kernel sources. But installations based on
# distribution kernel (sys-kernel/*-kernel) have no kernel sources installed.
# That is why this ebuild has a build dependency on gentoo-sources or vanilla-sources.
BDEPEND="|| ( sys-kernel/gentoo-sources sys-kernel/vanilla-sources )"
pkg_setup() {
if use module; then
linux-mod-r1_pkg_setup
if kernel_is -lt 3 10 0; then
die "This version of ${PN} requires Linux >= 3.10"
fi
fi
}
src_prepare() {
default
if kernel_is -ge 5 6 0; then
# We need to select a directory with kernel sources.
# Usually, /usr/src/linux is the right choise, so we check it first.
# If /usr/src/linux contains no sources (distribution kernel), we check
# other subdirectories in /usr/src sorted by version in reverse order.
echo "Searching for kernel sources..."
dirs=$(find /usr/src -maxdepth 1 -name 'linux-*' -type d | sort --reverse --version-sort --field-separator=- --key=2,2)
dirs="/usr/src/linux ${dirs}"
for kernel_dir in ${dirs}; do
[ -d "$kernel_dir" ] || continue
if [[ -f ${kernel_dir}/drivers/net/wireguard/main.c ]]; then
echo "- ${kernel_dir} -> found"
KERNEL_SOURCES_DIR=${KERNEL_SOURCES_DIR:-${kernel_dir}}
else
echo "- ${kernel_dir} -> not found"
fi
done
if [[ -d ${KERNEL_SOURCES_DIR} ]]; then
einfo "Using kernel sources in ${KERNEL_SOURCES_DIR}"
else
die "Kernel sources not found, but required for building."
fi
sed -i "s@^KERNELRELEASE ?= .*@KERNELRELEASE ?= ${KV_FULL}@" src/Makefile || die "Fail to set desired kernel verion in the Makefile"
ln -s ${KERNEL_SOURCES_DIR} src/kernel || die "Creation link to kernel sources directory fail"
emake -C ${S}/src apply-patches || die "Fail to apply amnezia patches over wireguard"
fi
}
src_compile() {
local modlist=( amneziawg=net:src::module )
local modargs=(
KERNELDIR=${KV_OUT_DIR}
)
use debug && modargs+=( CONFIG_WIREGUARD_DEBUG=y )
use module && linux-mod-r1_src_compile
}
src_install() {
use module && linux-mod-r1_src_install
use module-src && emake DESTDIR="${D}" PREFIX="${EPREFIX}/usr" -C src dkms-install
}
pkg_postinst() {
if use module-src && ! use module; then
einfo
einfo "You have enabled the module-src USE flag without the module USE"
einfo "flag. This means that sources are installed to"
einfo "${ROOT}/usr/src/amneziawg instead of having the"
einfo "kernel module compiled. You will need to compile the module"
einfo "yourself. Most likely, you don't want this USE flag, and should"
einfo "rather use USE=module"
einfo
fi
if use module; then
linux-mod-r1_pkg_postinst
local old new
if [[ $(uname -r) != "${KV_FULL}" ]]; then
ewarn
ewarn "You have just built AmneziaWG for kernel ${KV_FULL}, yet the currently running"
ewarn "kernel is $(uname -r). If you intend to use this AmneziaWG module on the currently"
ewarn "running machine, you will first need to reboot it into the kernel ${KV_FULL}, for"
ewarn "which this module was built."
ewarn
elif [[ -f /sys/module/amneziawg/version ]] && \
old="$(< /sys/module/amneziawg/version)" && \
new="$(modinfo -F version "${ROOT}/lib/modules/${KV_FULL}/net/amneziawg.ko" 2>/dev/null)" && \
[[ $old != "$new" ]]; then
ewarn
ewarn "You appear to have just upgraded AmneziaWG from version v$old to v$new."
ewarn "However, the old version is still running on your system. In order to use the"
ewarn "new version, you will need to remove the old module and load the new one. As"
ewarn "root, you can accomplish this with the following commands:"
ewarn
ewarn " # rmmod amneziawg"
ewarn " # modprobe amneziawg"
ewarn
ewarn "Do note that doing this will remove current AmneziaWG interfaces, so you may want"
ewarn "to gracefully remove them yourself prior."
ewarn
fi
fi
}