From cbefdc59f4331d3aa25152c37ddeb73b6e71f339 Mon Sep 17 00:00:00 2001
From: V3n3RiX <venerix@rogentos.ro>
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 <alexander@tsoy.me>
+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 <harald@redhat.com>
+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 <floppym@gentoo.org>
+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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>chutzpah@gentoo.org</email>
+		<name>Patrick McLean</name>
+	</maintainer>
+	<maintainer type="person">
+		<email>alexander@tsoy.me</email>
+		<name>Alexander Tsoy</name>
+	</maintainer>
+	<maintainer type="person">
+		<email>aidecoe@gentoo.org</email>
+		<name>Amadeusz Żołnowski</name>
+	</maintainer>
+	<use>
+		<flag name="debug">Module installing additional tools like strace, file
+			editor, ssh and more</flag>
+	</use>
+	<longdescription lang="en">
+	Generic, modular initramfs generation tool that can be used across various
+	distributions.
+	</longdescription>
+</pkgmetadata>
-- 
cgit v1.2.3