diff --git a/net-vpn/amneziawg-linux-kernel-module/Manifest b/net-vpn/amneziawg-linux-kernel-module/Manifest index efbad67..8be2792 100644 --- a/net-vpn/amneziawg-linux-kernel-module/Manifest +++ b/net-vpn/amneziawg-linux-kernel-module/Manifest @@ -1 +1,2 @@ DIST amneziawg-linux-kernel-module-1.0.20251104.tar.gz 407287 BLAKE2B 551a729900a0b8e6df8cc206f35ebfce5d7c98eb2ab64e2758119aca63e403de0016c04caf054e182bd794037711cd6f51798ef055aac7b6abb88d3833309bc0 SHA512 5a6962d6cf49b97facd0ffa724a7a15b8736f7774086e0cc260ceac86d728ad8d72b42f8e6df4912bdd64ec17bbc732ba0540592996bda10221dfa87b1414bc9 +DIST amneziawg-linux-kernel-module-1.0.20260329.tar.gz 407483 BLAKE2B fdb5d53eee29d19530fe36835f8780bd5505acb92c4c947300424d1fc8f763d11a723c0adbfb7bfa7703058de02426b49ed581f2f0e495108105291ead074be1 SHA512 7ceda29b2280ee101fdda5428e5136f823032cb6e663f23816d43ded7c0199cfcc3c3a301cadb5817a6d94650a49e13fd9e0dcb74b3ba8e5fbb2df13fc87a233 diff --git a/net-vpn/amneziawg-linux-kernel-module/amneziawg-linux-kernel-module-1.0.20260329.ebuild b/net-vpn/amneziawg-linux-kernel-module/amneziawg-linux-kernel-module-1.0.20260329.ebuild new file mode 100644 index 0000000..fcf4c2d --- /dev/null +++ b/net-vpn/amneziawg-linux-kernel-module/amneziawg-linux-kernel-module-1.0.20260329.ebuild @@ -0,0 +1,116 @@ +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +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="~amd64 ~arm ~arm64 ~ppc64 ~x86" +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="debug" + +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() { + linux-mod-r1_pkg_setup + if kernel_is -lt 3 10 0; then + die "This version of ${PN} requires Linux >= 3.10" + fi +} + +src_prepare() { + default + + sed -i "/^WIREGUARD_VERSION =/Id" "${S}/src/Makefile" || die + + 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 ) + linux-mod-r1_src_compile +} + +src_install() { + linux-mod-r1_src_install +} + +pkg_postinst() { + 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 +}