From cbefdc59f4331d3aa25152c37ddeb73b6e71f339 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Thu, 24 Nov 2016 00:29:28 +0000 Subject: preconfigure dracut, so we don't have to patch calamares, or pass ubercomplicated arguments while building the initramfs --- sys-kernel/dracut/Manifest | 4 + sys-kernel/dracut/dracut-044-r1.ebuild | 267 +++++++++++++++++++++ ...-lib.sh-dev_unit_name-guard-against-dev-b.patch | 32 +++ ...temd-initrd-add-initrd-root-device.target.patch | 24 ++ ...03-50-dracut.install-use-bin-bash-shebang.patch | 23 ++ ...004-redcore-change-default-initramfs-name.patch | 20 ++ sys-kernel/dracut/files/redcore-dracut.conf | 8 + sys-kernel/dracut/metadata.xml | 24 ++ 8 files changed, 402 insertions(+) create mode 100644 sys-kernel/dracut/Manifest create mode 100644 sys-kernel/dracut/dracut-044-r1.ebuild create mode 100644 sys-kernel/dracut/files/044-0001-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch create mode 100644 sys-kernel/dracut/files/044-0002-systemd-initrd-add-initrd-root-device.target.patch create mode 100644 sys-kernel/dracut/files/044-0003-50-dracut.install-use-bin-bash-shebang.patch create mode 100644 sys-kernel/dracut/files/044-0004-redcore-change-default-initramfs-name.patch create mode 100644 sys-kernel/dracut/files/redcore-dracut.conf create mode 100644 sys-kernel/dracut/metadata.xml diff --git a/sys-kernel/dracut/Manifest b/sys-kernel/dracut/Manifest new file mode 100644 index 00000000..8d50caa9 --- /dev/null +++ b/sys-kernel/dracut/Manifest @@ -0,0 +1,4 @@ +DIST dracut-040.tar.xz 263944 SHA256 b6e743353804b46e350177b9ecb9a8511df7e8c4ff9e0b4f3b4f72bc509c98a3 SHA512 6bc6a714572cc18c4cf9f9c1af4bc787287554ead1e39fbec8a1b8986585cf8c7c7ef476f87fc361f565eb344fe2594d63185ffe02cc5fa7cc3eaa03bcb4b72b WHIRLPOOL d8dbdbf6cb7705a0b7793f82a0323c49b4ac0dc3d61cf0073e3061f34af0b5c92dd21a7dc080f2a8d24d3eef3abc99df91f113675721267352f934f1319c66ba +DIST dracut-041.tar.xz 268288 SHA256 8ece6c2240bf0e9283e5f717b65dfcd6830b3ef7f8d1c01b60014052f1063251 SHA512 358444588febfc482627eb5423b8a87b588ed3842ae814b9f88d8c5dfec28419f2aea92cd54c11c4949b9968d60d7e05ba9cfea78d26d2dc6f2a943a38b28dac WHIRLPOOL ab538fe1ffeb3d43185c6222a6e65af8c684b292be571e0571fdd69011f654c3093f3a2256f3003d5dbaf07d0a26f83d82055885bae1868738ad15dc74982e72 +DIST dracut-043.tar.xz 272744 SHA256 1484b558ed20330125aa04dcccab84da15c5689e19068285aa011f7177889cd1 SHA512 a36271e1ed4c1205a01bece7652095a8bfd722bcf7239a93baeb21e7e0a60fa86dd6657aa69b594241981056c87c6fe9d372f18ac045785122a9cafe8b0c31eb WHIRLPOOL d1efd59e2c41478e489d4707114b141e8bb0501c54209e364edc2060d3ffac7f2e1afd640b0812a452e7fbe7f9134e5e96436f0f1f2a54613d9468f9dca61a0c +DIST dracut-044.tar.xz 280004 SHA256 84b97c9b0120e9fde06c3b9cf2ede1c4632cccd8e085e980b9ec9c788655af05 SHA512 bc788076e425b223d98cf0e0b15ff57d75d423991d7a67fb564a2857c38d5c3a21d846d2ca4523f9d4b0128bb981d09b5c26031435c5fc5e30f53080bca19b3d WHIRLPOOL 684591df596fa902447e671adfaeeb8cdc469c257f756616e42747835b71be7caaac9c72bd4b1a5ba5728ec4332baaba1d265cddb1c30cbfa65cf4dce0690bc0 diff --git a/sys-kernel/dracut/dracut-044-r1.ebuild b/sys-kernel/dracut/dracut-044-r1.ebuild new file mode 100644 index 00000000..5f60eddc --- /dev/null +++ b/sys-kernel/dracut/dracut-044-r1.ebuild @@ -0,0 +1,267 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit bash-completion-r1 eutils linux-info multilib systemd + +DESCRIPTION="Generic initramfs generation tool" +HOMEPAGE="https://dracut.wiki.kernel.org" +SRC_URI="mirror://kernel/linux/utils/boot/${PN}/${P}.tar.xz" +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~ppc ~ppc64 ~sparc ~x86" +IUSE="debug selinux systemd" + +RESTRICT="test" + +CDEPEND="virtual/udev + systemd? ( >=sys-apps/systemd-199 ) + " +RDEPEND="${CDEPEND} + app-arch/cpio + >=app-shells/bash-4.0 + >sys-apps/kmod-5[tools] + || ( + >=sys-apps/sysvinit-2.87-r3 + sys-apps/systemd[sysv-utils] + sys-apps/systemd-sysv-utils + ) + >=sys-apps/util-linux-2.21 + + debug? ( dev-util/strace ) + selinux? ( + sys-libs/libselinux + sys-libs/libsepol + sec-policy/selinux-dracut + ) + " +DEPEND="${CDEPEND} + app-text/asciidoc + >=dev-libs/libxslt-1.1.26 + app-text/docbook-xml-dtd:4.5 + >=app-text/docbook-xsl-stylesheets-1.75.2 + virtual/pkgconfig + " + +DOCS=( AUTHORS HACKING NEWS README README.generic README.kernel README.modules + README.testsuite TODO ) +MY_LIBDIR=/usr/lib +QA_MULTILIB_PATHS=" + usr/lib/dracut/dracut-install + usr/lib/dracut/skipcpio + " + +PATCHES=( + "${FILESDIR}"/044-0001-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch + "${FILESDIR}"/044-0002-systemd-initrd-add-initrd-root-device.target.patch + "${FILESDIR}"/044-0003-50-dracut.install-use-bin-bash-shebang.patch + "${FILESDIR}"/044-0004-redcore-change-default-initramfs-name.patch +) + +# +# Helper functions +# + +# Removes module from modules.d. +# $1 = module name +# Module name can be specified without number prefix. +rm_module() { + local force m + [[ $1 = -f ]] && force=-f + + for m in $@; do + if [[ $m =~ ^[0-9][0-9][^\ ]*$ ]]; then + rm ${force} --interactive=never -r "${modules_dir}"/$m + else + rm ${force} --interactive=never -r "${modules_dir}"/[0-9][0-9]$m + fi + done +} + +src_prepare() { + local libdirs="/$(get_libdir) /usr/$(get_libdir)" + if [[ ${SYMLINK_LIB} = yes ]]; then + # Preserve lib -> lib64 symlinks in initramfs + [[ $libdirs =~ /lib\ ]] || libdirs+=" /lib /usr/lib" + fi + einfo "Setting libdirs to \"${libdirs}\" ..." + sed -e "3alibdirs=\"${libdirs}\"" \ + -i "${S}/dracut.conf.d/gentoo.conf.example" || die + + local udevdir="$("$(tc-getPKG_CONFIG)" udev --variable=udevdir)" + einfo "Setting udevdir to ${udevdir}..." + sed -r -e "s|^(udevdir=).*$|\1${udevdir}|" \ + -i "${S}/dracut.conf.d/gentoo.conf.example" || die + + if use systemd; then + local systemdutildir="$(systemd_get_utildir)" + local systemdsystemunitdir="$(systemd_get_unitdir)" + local systemdsystemconfdir="$("$(tc-getPKG_CONFIG)" systemd \ + --variable=systemdsystemconfdir)" + [[ ${systemdsystemconfdir} ]] \ + || systemdsystemconfdir=/etc/systemd/system + einfo "Setting systemdutildir to ${systemdutildir} and ..." + sed -e "5asystemdutildir=\"${systemdutildir}\"" \ + -i "${S}/dracut.conf.d/gentoo.conf.example" || die + einfo "Setting systemdsystemunitdir to ${systemdsystemunitdir} and..." + sed -e "6asystemdsystemunitdir=\"${systemdsystemunitdir}\"" \ + -i "${S}/dracut.conf.d/gentoo.conf.example" || die + einfo "Setting systemdsystemconfdir to ${systemdsystemconfdir}..." + sed -e "7asystemdsystemconfdir=\"${systemdsystemconfdir}\"" \ + -i "${S}/dracut.conf.d/gentoo.conf.example" || die + else + local systemdutildir="/lib/systemd" + einfo "Setting systemdutildir for standalone udev to" \ + "${systemdutildir}..." + sed -e "5asystemdutildir=\"${systemdutildir}\"" \ + -i "${S}/dracut.conf.d/gentoo.conf.example" || die + fi + + epatch "${PATCHES[@]}" + + epatch_user +} + +src_configure() { + local myconf=( + --libdir="${MY_LIBDIR}" + --bashcompletiondir="$(get_bashcompdir)" + ) + + if use systemd; then + myconf+=( --systemdsystemunitdir="$(systemd_get_unitdir)" ) + fi + + econf "${myconf[@]}" +} + +src_compile() { + tc-export CC + emake doc install/dracut-install skipcpio/skipcpio +} + +src_install() { + default + + local my_libdir="${MY_LIBDIR}" + local dracutlibdir="${my_libdir#/}/dracut" + + echo "DRACUT_VERSION=$PVR" > "${D%/}/${dracutlibdir}/dracut-version.sh" + + insinto "${dracutlibdir}/dracut.conf.d/" + newins dracut.conf.d/gentoo.conf.example gentoo.conf + + insinto /etc/logrotate.d + newins dracut.logrotate dracut + + insinto /etc/dracut.conf.d + doins "${FILESDIR}"/redcore-dracut.conf + + dodir /var/lib/dracut/overlay + + dohtml dracut.html + + if ! use systemd; then + # Scripts in kernel/install.d are systemd-specific + rm -r "${D%/}/${my_libdir}/kernel" || die + fi + + # + # Modules + # + local module + modules_dir="${D%/}/${dracutlibdir}/modules.d" + + use debug || rm_module 95debug + use selinux || rm_module 98selinux + + if use systemd; then + # With systemd following modules do not make sense + rm_module 96securityfs 97masterkey 98integrity + else + rm_module 00systemd 98dracut-systemd + # Without systemd following modules do not make sense + rm_module 00systemd-bootchart 01systemd-initrd 02systemd-networkd + fi + + # Remove modules which won't work for sure + rm_module 95fcoe # no tools + # fips module depends on masked app-crypt/hmaccalc + rm_module 01fips 02fips-aesni +} + +pkg_postinst() { + if linux-info_get_any_version && linux_config_exists; then + ewarn "" + ewarn "If the following test report contains a missing kernel" + ewarn "configuration option, you should reconfigure and rebuild your" + ewarn "kernel before booting image generated with this Dracut version." + ewarn "" + + local CONFIG_CHECK="~BLK_DEV_INITRD ~DEVTMPFS" + + # Kernel configuration options descriptions: + local desc_DEVTMPFS="Maintain a devtmpfs filesystem to mount at /dev" + local desc_BLK_DEV_INITRD="Initial RAM filesystem and RAM disk "\ +"(initramfs/initrd) support" + + local opt desc + + # Generate ERROR_* variables for check_extra_config. + for opt in ${CONFIG_CHECK}; do + opt=${opt#\~} + desc=desc_${opt} + eval "local ERROR_${opt}='CONFIG_${opt}: \"${!desc}\"" \ + "is missing and REQUIRED'" + done + + check_extra_config + echo + else + ewarn "" + ewarn "Your kernel configuration couldn't be checked. Do you have" + ewarn "/usr/src/linux/.config file there? Please check manually if" + ewarn "following options are enabled:" + ewarn "" + ewarn " CONFIG_BLK_DEV_INITRD" + ewarn " CONFIG_DEVTMPFS" + ewarn "" + fi + + elog "To get additional features, a number of optional runtime" + elog "dependencies may be installed:" + elog "" + optfeature "Networking support" net-misc/curl "net-misc/dhcp[client]" \ + sys-apps/iproute2 + optfeature \ + "Measure performance of the boot process for later visualisation" \ + app-benchmarks/bootchart2 app-admin/killproc sys-process/acct + optfeature "Scan for Btrfs on block devices" sys-fs/btrfs-progs + optfeature "Load kernel modules and drop this privilege for real init" \ + sys-libs/libcap + optfeature "Support CIFS" net-fs/cifs-utils + optfeature "Decrypt devices encrypted with cryptsetup/LUKS" \ + "sys-fs/cryptsetup[-static-libs]" + optfeature "Support for GPG-encrypted keys for crypt module" \ + app-crypt/gnupg + optfeature \ + "Allows use of dash instead of default bash (on your own risk)" \ + app-shells/dash + optfeature "Framebuffer splash (media-gfx/splashutils)" \ + media-gfx/splashutils + optfeature "Support iSCSI" sys-block/open-iscsi + optfeature "Support Logical Volume Manager" sys-fs/lvm2 + optfeature "Support MD devices, also known as software RAID devices" \ + sys-fs/mdadm + optfeature "Support Device Mapper multipathing" sys-fs/multipath-tools + optfeature "Plymouth boot splash" '>=sys-boot/plymouth-0.8.5-r5' + optfeature "Support network block devices" sys-block/nbd + optfeature "Support NFS" net-fs/nfs-utils net-nds/rpcbind + optfeature \ + "Install ssh and scp along with config files and specified keys" \ + net-misc/openssh + optfeature "Enable logging with syslog-ng or rsyslog" app-admin/syslog-ng \ + app-admin/rsyslog +} diff --git a/sys-kernel/dracut/files/044-0001-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch b/sys-kernel/dracut/files/044-0001-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch new file mode 100644 index 00000000..fd6f1185 --- /dev/null +++ b/sys-kernel/dracut/files/044-0001-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch @@ -0,0 +1,32 @@ +From c41df7e1db1adc51399ab2c22f251b15eb2065b1 Mon Sep 17 00:00:00 2001 +From: Alexander Tsoy +Date: Tue, 5 Jan 2016 22:11:57 +0300 +Subject: [PATCH] base/dracut-lib.sh:dev_unit_name() guard against $dev + beginning with "-" + +crypt/parse-crypt.sh generate initqueue job which always call +dev_unit_name() with an argument beginning with "-". This results +in the following error: + +dracut-initqueue[307]: + systemd-escape -p -cfb4aa43-2f02-4c6b-a313-60ea99288087 +dracut-initqueue[307]: systemd-escape: invalid option -- 'c' +--- + modules.d/99base/dracut-lib.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index ad03394..0a0b1b9 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -874,7 +874,7 @@ dev_unit_name() + local dev="$1" + + if command -v systemd-escape >/dev/null; then +- systemd-escape -p "$dev" ++ systemd-escape -p -- "$dev" + return + fi + +-- +2.10.2 + diff --git a/sys-kernel/dracut/files/044-0002-systemd-initrd-add-initrd-root-device.target.patch b/sys-kernel/dracut/files/044-0002-systemd-initrd-add-initrd-root-device.target.patch new file mode 100644 index 00000000..21cb6792 --- /dev/null +++ b/sys-kernel/dracut/files/044-0002-systemd-initrd-add-initrd-root-device.target.patch @@ -0,0 +1,24 @@ +From d4efc0aeeecc470d9a267b7f3c130f472488905c Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 25 May 2016 15:06:29 +0200 +Subject: [PATCH] systemd-initrd: add initrd-root-device.target + +--- + modules.d/01systemd-initrd/module-setup.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/modules.d/01systemd-initrd/module-setup.sh b/modules.d/01systemd-initrd/module-setup.sh +index fb6a9ea..c1ccd2a 100755 +--- a/modules.d/01systemd-initrd/module-setup.sh ++++ b/modules.d/01systemd-initrd/module-setup.sh +@@ -28,6 +28,7 @@ install() { + inst_multiple -o \ + $systemdsystemunitdir/initrd.target \ + $systemdsystemunitdir/initrd-fs.target \ ++ $systemdsystemunitdir/initrd-root-device.target \ + $systemdsystemunitdir/initrd-root-fs.target \ + $systemdsystemunitdir/initrd-switch-root.target \ + $systemdsystemunitdir/initrd-switch-root.service \ +-- +2.10.2 + diff --git a/sys-kernel/dracut/files/044-0003-50-dracut.install-use-bin-bash-shebang.patch b/sys-kernel/dracut/files/044-0003-50-dracut.install-use-bin-bash-shebang.patch new file mode 100644 index 00000000..85ebc7e6 --- /dev/null +++ b/sys-kernel/dracut/files/044-0003-50-dracut.install-use-bin-bash-shebang.patch @@ -0,0 +1,23 @@ +From 69395a528aed99ec04b16c14ebacf4c2e10afd26 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Fri, 4 Nov 2016 13:09:28 -0400 +Subject: [PATCH] 50-dracut.install: use /bin/bash shebang + +This script utilizes several bash-specific constructs. +--- + 50-dracut.install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/50-dracut.install b/50-dracut.install +index 7d081d5..54c71d4 100755 +--- a/50-dracut.install ++++ b/50-dracut.install +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + COMMAND="$1" + KERNEL_VERSION="$2" +-- +2.10.2 + diff --git a/sys-kernel/dracut/files/044-0004-redcore-change-default-initramfs-name.patch b/sys-kernel/dracut/files/044-0004-redcore-change-default-initramfs-name.patch new file mode 100644 index 00000000..1551ed35 --- /dev/null +++ b/sys-kernel/dracut/files/044-0004-redcore-change-default-initramfs-name.patch @@ -0,0 +1,20 @@ +diff -Nur a/dracut.sh b/dracut.sh +--- a/dracut.sh 2015-11-25 13:22:28.000000000 +0000 ++++ b/dracut.sh 2016-11-24 00:24:59.601507598 +0000 +@@ -613,6 +613,7 @@ + + if ! [[ $kernel ]]; then + kernel=$(uname -r) ++ kernelarch=$(uname -r) + fi + + if [[ $kernel ]]; then +@@ -627,7 +628,7 @@ + if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then + outfile="/boot/${MACHINE_ID}/$kernel/initrd" + else +- outfile="/boot/initramfs-$kernel.img" ++ outfile="/boot/initramfs-genkernel-$kernelarch-$kernel.img" + fi + fi + diff --git a/sys-kernel/dracut/files/redcore-dracut.conf b/sys-kernel/dracut/files/redcore-dracut.conf new file mode 100644 index 00000000..0009cc16 --- /dev/null +++ b/sys-kernel/dracut/files/redcore-dracut.conf @@ -0,0 +1,8 @@ +# Host-Only mode: Install only what is needed for booting the local host instead of a generic host and generate host-specific configuration. +hostonly="yes" + +# Combine early microcode with ramdisk +early_microcode="yes" + +# Omit including systemd dracut modules when building the initramfs. +omit_dracutmodules+=" systemd systemd-initrd systemd-networkd dracut-systemd " diff --git a/sys-kernel/dracut/metadata.xml b/sys-kernel/dracut/metadata.xml new file mode 100644 index 00000000..bc57bc2d --- /dev/null +++ b/sys-kernel/dracut/metadata.xml @@ -0,0 +1,24 @@ + + + + + chutzpah@gentoo.org + Patrick McLean + + + alexander@tsoy.me + Alexander Tsoy + + + aidecoe@gentoo.org + Amadeusz Żołnowski + + + Module installing additional tools like strace, file + editor, ssh and more + + + Generic, modular initramfs generation tool that can be used across various + distributions. + + -- cgit v1.2.3