mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
sys-kernel/vanilla-kernel: New package providing built kernel
New package whose primary purpose is to provide a zero-effort way of ensuring that your system is running a working distribution kernel that gets cleanly upgraded as part of @world upgrades. The secondary goal is to make it possible to build universal binary packages that can be afterwards installed on variety of systems with different hardware, /boot layouts and bootloaders. Closes: https://github.com/gentoo/gentoo/pull/13871 Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
# Copyright 1999-2019 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
# Michał Górny <mgorny@gentoo.org> (2019-12-06)
|
||||
# Non-initramfs builds do not work with the default .config. Force
|
||||
# the mask, so that users don't brick their systems. If somebody wants
|
||||
# to avoid initramfs, he needs to use a custom .config and unforce
|
||||
# the flag.
|
||||
sys-kernel/vanilla-kernel initramfs
|
||||
|
||||
# Sergei Trofimovich <slyfox@gentoo.org> (2019-11-06)
|
||||
# Upstream plans to drop libcrypt.so.1/crypt.h from glibc
|
||||
# distribution and rely on external providers lke libxcrypt.
|
||||
|
||||
2
sys-kernel/vanilla-kernel/Manifest
Normal file
2
sys-kernel/vanilla-kernel/Manifest
Normal file
@@ -0,0 +1,2 @@
|
||||
DIST linux-5.4.1.arch1-1.config 241587 BLAKE2B 71db76bf30a8d7f4dc680399b9f9fbb4236d1938bb86e23eb1ab236a667a959fc1cff788f7e432c43a6173e1bac4e20f3a6c3391d84275d46f1f66bd338bf538 SHA512 34d66658963dbd72fa3e96f2c5d5bccafb781fa14f6ebafe7859953929ba2fbb112f1435ca68cec8389d789cf0efa81d5fc0f5ac6dfa23a704348ab83709e9db
|
||||
DIST linux-5.4.2.tar.xz 109441848 BLAKE2B 126e00ef6a084049089f6733e480e68271083cc5f88bd2c64cba198c983c78c3e5f61a9cded8357d1767c4faadec5ab81c1a7231cc65f41913de2820e02a3467 SHA512 42bd0e1887555cf92d424243d85bb39911669da814b0201503319604f1d45f7f0b45d535ee08ca7831f47047db96125496159945c3cd05dac491e0f5e0685854
|
||||
15
sys-kernel/vanilla-kernel/metadata.xml
Normal file
15
sys-kernel/vanilla-kernel/metadata.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<maintainer type="person">
|
||||
<email>mgorny@gentoo.org</email>
|
||||
<name>Michał Górny</name>
|
||||
</maintainer>
|
||||
<maintainer type="person">
|
||||
<email>zlogene@gentoo.org</email>
|
||||
<name>Mikle Kolyada</name>
|
||||
</maintainer>
|
||||
<use>
|
||||
<flag name='initramfs'>Build initramfs along with the kernel.</flag>
|
||||
</use>
|
||||
</pkgmetadata>
|
||||
168
sys-kernel/vanilla-kernel/vanilla-kernel-5.4.2.ebuild
Normal file
168
sys-kernel/vanilla-kernel/vanilla-kernel-5.4.2.ebuild
Normal file
@@ -0,0 +1,168 @@
|
||||
# Copyright 2019 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=7
|
||||
|
||||
inherit mount-boot savedconfig toolchain-funcs
|
||||
|
||||
MY_P=linux-${PV}
|
||||
CONFIG_VER=5.4.1.arch1-1
|
||||
CONFIG_HASH=d6bbb261bd2c8f83b9c93041dae9aa4175e20e6e
|
||||
|
||||
DESCRIPTION="Linux kernel built from vanilla upstream sources"
|
||||
HOMEPAGE="https://www.kernel.org/"
|
||||
SRC_URI="https://cdn.kernel.org/pub/linux/kernel/v5.x/${MY_P}.tar.xz
|
||||
https://git.archlinux.org/svntogit/packages.git/plain/trunk/config?h=packages/linux&id=${CONFIG_HASH}
|
||||
-> linux-${CONFIG_VER}.config"
|
||||
S=${WORKDIR}/${MY_P}
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="${PV}"
|
||||
KEYWORDS="~amd64"
|
||||
IUSE="+initramfs"
|
||||
|
||||
# install-DEPEND actually
|
||||
# note: we need installkernel with initramfs support!
|
||||
RDEPEND="
|
||||
|| (
|
||||
sys-kernel/installkernel-gentoo
|
||||
sys-kernel/installkernel-systemd-boot
|
||||
)
|
||||
initramfs? ( sys-kernel/dracut )"
|
||||
|
||||
pkg_pretend() {
|
||||
mount-boot_pkg_pretend
|
||||
|
||||
ewarn "This is an experimental package. The built kernel and/or initramfs"
|
||||
ewarn "may not work at all or fail with your bootloader configuration. Please"
|
||||
ewarn "make sure to keep a backup kernel available before testing it."
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# force ld.bfd if we can find it easily
|
||||
local LD="$(tc-getLD)"
|
||||
if type -P "${LD}.bfd" &>/dev/null; then
|
||||
LD+=.bfd
|
||||
fi
|
||||
|
||||
MAKEARGS=(
|
||||
V=1
|
||||
|
||||
HOSTCC="$(tc-getCC)"
|
||||
HOSTCXX="$(tc-getCXX)"
|
||||
HOSTCFLAGS="${CFLAGS}"
|
||||
HOSTLDFLAGS="${LDFLAGS}"
|
||||
|
||||
AS="$(tc-getAS)"
|
||||
CC="$(tc-getCC)"
|
||||
LD="${LD}"
|
||||
AR="$(tc-getAR)"
|
||||
NM="$(tc-getNM)"
|
||||
STRIP=":"
|
||||
OBJCOPY="$(tc-getOBJCOPY)"
|
||||
OBJDUMP="$(tc-getOBJDUMP)"
|
||||
|
||||
# we need to pass it to override colliding Gentoo envvar
|
||||
ARCH=x86
|
||||
)
|
||||
|
||||
cp "${DISTDIR}"/linux-${CONFIG_VER}.config .config || die
|
||||
# while Arch config is cool, we don't want gcc plugins as they
|
||||
# break distcc
|
||||
sed -i -e '/GCC_PLUGIN/d' .config || die
|
||||
# module compression prevents us from stripping them post-inst
|
||||
sed -i -e '/MODULE_COMPRESS/d' .config || die
|
||||
# shove our theft under the carpet!
|
||||
sed -i -e '/HOSTNAME/s:archlinux:gentoo:' .config || die
|
||||
restore_config .config
|
||||
|
||||
mkdir -p "${WORKDIR}"/modprep || die
|
||||
mv .config "${WORKDIR}"/modprep/ || die
|
||||
emake O="${WORKDIR}"/modprep "${MAKEARGS[@]}" olddefconfig
|
||||
emake O="${WORKDIR}"/modprep "${MAKEARGS[@]}" modules_prepare
|
||||
cp -pR "${WORKDIR}"/modprep "${WORKDIR}"/build || die
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
emake O="${WORKDIR}"/build "${MAKEARGS[@]}" all
|
||||
}
|
||||
|
||||
src_test() {
|
||||
:
|
||||
}
|
||||
|
||||
src_install() {
|
||||
# do not use 'make install' as it behaves differently based
|
||||
# on what kind of installkernel is installed
|
||||
emake O="${WORKDIR}"/build "${MAKEARGS[@]}" \
|
||||
INSTALL_MOD_PATH="${ED}" modules_install
|
||||
|
||||
# install headers and prepared objects on top of them
|
||||
# note: we're using mv rather than doins to save space and time
|
||||
find -name '*.c' -delete || die
|
||||
rm -r Documentation || die
|
||||
dodir /usr/src
|
||||
cd "${WORKDIR}" || die
|
||||
mv "${S}" "${ED}"/usr/src/ || die
|
||||
# strip out-of-source build stuffs from modprep
|
||||
find modprep -type f '(' \
|
||||
-name Makefile -o \
|
||||
-name '*.[ao]' -o \
|
||||
'(' -name '.*' -a -not -name '.config' ')' \
|
||||
')' -delete || die
|
||||
rm modprep/source || die
|
||||
cp -pR modprep/. "${ED}/usr/src/linux-${PV}"/ || die
|
||||
|
||||
# install the kernel and files needed for module builds
|
||||
cp build/{arch/x86/boot/bzImage,System.map,Module.symvers} \
|
||||
"${ED}/usr/src/linux-${PV}"/ || die
|
||||
|
||||
# fix source tree and build dir symlinks
|
||||
dosym ../../../usr/src/linux-${PV} /lib/modules/${PV}/build
|
||||
dosym ../../../usr/src/linux-${PV} /lib/modules/${PV}/source
|
||||
|
||||
save_config build/.config
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
:
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
if [[ -z ${ROOT} ]]; then
|
||||
mount-boot_pkg_preinst
|
||||
|
||||
local fail=
|
||||
|
||||
if use initramfs; then
|
||||
ebegin "Building initramfs via dracut"
|
||||
# putting it alongside kernel image as 'initrd' makes
|
||||
# kernel-install happier
|
||||
dracut --force "${EROOT}/usr/src/linux-${PV}/initrd" "${PV}"
|
||||
eend || die "Building initramfs failed"
|
||||
fi
|
||||
|
||||
ebegin "Installing the kernel via installkernel"
|
||||
# note: .config is taken relatively to System.map;
|
||||
# initrd relatively to bzImage
|
||||
installkernel "${PV}" \
|
||||
"${EROOT}/usr/src/linux-${PV}/bzImage" \
|
||||
"${EROOT}/usr/src/linux-${PV}/System.map"
|
||||
eend || fail=1
|
||||
|
||||
[[ ${fail} ]] && die "Installing the kernel failed"
|
||||
|
||||
# TODO: update /usr/src/linux symlink?
|
||||
fi
|
||||
|
||||
savedconfig_pkg_postinst
|
||||
}
|
||||
|
||||
pkg_prerm() {
|
||||
:
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
rm -f "${EROOT}/usr/src/linux-${PV}/initrd" &&
|
||||
rmdir --ignore-fail-on-non-empty "${EROOT}/usr/src/linux-${PV}"
|
||||
}
|
||||
Reference in New Issue
Block a user