public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: profiles/base/, sys-kernel/vanilla-kernel/
@ 2019-12-11 16:17 Michał Górny
  0 siblings, 0 replies; only message in thread
From: Michał Górny @ 2019-12-11 16:17 UTC (permalink / raw
  To: gentoo-commits

commit:     2e3196fdf784103c6669dba80bee017790a12f96
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Dec  4 14:50:45 2019 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Dec 11 16:17:12 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2e3196fd

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 <AT> gentoo.org>

 profiles/base/package.use.force                    |   7 +
 sys-kernel/vanilla-kernel/Manifest                 |   2 +
 sys-kernel/vanilla-kernel/metadata.xml             |  15 ++
 .../vanilla-kernel/vanilla-kernel-5.4.2.ebuild     | 168 +++++++++++++++++++++
 4 files changed, 192 insertions(+)

diff --git a/profiles/base/package.use.force b/profiles/base/package.use.force
index 2da9ae37b65..e8205d6ded6 100644
--- a/profiles/base/package.use.force
+++ b/profiles/base/package.use.force
@@ -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.

diff --git a/sys-kernel/vanilla-kernel/Manifest b/sys-kernel/vanilla-kernel/Manifest
new file mode 100644
index 00000000000..0b508f74fae
--- /dev/null
+++ b/sys-kernel/vanilla-kernel/Manifest
@@ -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

diff --git a/sys-kernel/vanilla-kernel/metadata.xml b/sys-kernel/vanilla-kernel/metadata.xml
new file mode 100644
index 00000000000..cd6a1d01518
--- /dev/null
+++ b/sys-kernel/vanilla-kernel/metadata.xml
@@ -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>

diff --git a/sys-kernel/vanilla-kernel/vanilla-kernel-5.4.2.ebuild b/sys-kernel/vanilla-kernel/vanilla-kernel-5.4.2.ebuild
new file mode 100644
index 00000000000..ef5bf85d7eb
--- /dev/null
+++ b/sys-kernel/vanilla-kernel/vanilla-kernel-5.4.2.ebuild
@@ -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}"
+}


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-12-11 16:17 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-11 16:17 [gentoo-commits] repo/gentoo:master commit in: profiles/base/, sys-kernel/vanilla-kernel/ Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox