blob: dd2b30d0b35172f5b1ecc9737b0652e6ca371f70 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit flag-o-matic linux-mod
if [[ "${PV}" == "9999" ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/dynup/${PN}.git"
else
SRC_URI="https://github.com/dynup/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
KEYWORDS="~amd64"
fi
DESCRIPTION="Dynamic kernel patching for Linux"
HOMEPAGE="https://github.com/dynup/kpatch"
LICENSE="GPL-2+"
SLOT="0"
IUSE="contrib +kpatch +kpatch-build kmod test"
RDEPEND="
app-crypt/pesign
sys-libs/zlib
sys-apps/pciutils
"
DEPEND="
${RDEPEND}
dev-libs/elfutils
sys-devel/bison
test? ( dev-util/shellcheck-bin )
"
pkg_setup() {
if use kmod; then
if kernel_is gt 3 9 0; then
if ! linux_config_exists; then
eerror "Unable to check the currently running kernel for kpatch support"
eerror "Please be sure a .config file is available in the kernel src dir"
eerror "and ensure the kernel has been built."
else
# Fail to build if these kernel options are not enabled (see kpatch/kmod/core/Makefile)
CONFIG_CHECK="FUNCTION_TRACER HAVE_FENTRY MODULES SYSFS KALLSYMS_ALL"
ERROR_FUNCTION_TRACER="CONFIG_FUNCTION_TRACER must be enabled in the kernel's config file"
ERROR_HAVE_FENTRY="CONFIG_HAVE_FENTRY must be enabled in the kernel's config file"
ERROR_MODULES="CONFIG_MODULES must be enabled in the kernel's config file"
ERROR_SYSFS="CONFIG_SYSFS must be enabled in the kernel's config file"
ERROR_KALLSYMS_ALL="CONFIG_KALLSYMS_ALL must be enabled in the kernel's config file"
fi
else
eerror
eerror "kpatch is not available for Linux kernels below 4.0.0"
eerror
die "Upgrade the kernel sources before installing kpatch."
fi
check_extra_config
fi
}
src_prepare() {
replace-flags '-O?' '-O1'
default
}
src_compile() {
use kpatch-build && emake -C kpatch-build
use kpatch && emake -C kpatch
use kmod && set_arch_to_kernel && emake -C kmod
use contrib && emake -C contrib
use test && emake check
}
src_install() {
if use kpatch-build; then
emake DESTDIR="${D}" PREFIX="/usr" install -C kpatch-build
insinto /usr/share/${PN}/patch
doins kmod/patch/kpatch{.lds.S,-macros.h,-patch.h,-patch-hook.c}
doins kmod/patch/{livepatch-patch-hook.c,Makefile,patch-hook.c}
doins kmod/core/kpatch.h
doman man/kpatch-build.1
fi
if use kpatch; then
emake DESTDIR="${D}" PREFIX="/usr" install -C kpatch
doman man/kpatch.1
fi
use kmod && set_arch_to_kernel && emake DESTDIR="${D}" PREFIX="/usr" install -C kmod
use contrib && emake DESTDIR="${D}" PREFIX="/usr" install -C contrib
dodoc README.md doc/patch-author-guide.md
}
|