[dracut] dracut-026-15.git20130311

Harald Hoyer harald at fedoraproject.org
Mon Mar 11 18:26:53 UTC 2013


commit 52ce144d06cd2bef813a20f2cd81d58dcdb48b32
Author: Harald Hoyer <harald at redhat.com>
Date:   Mon Mar 11 19:26:29 2013 +0100

    dracut-026-15.git20130311
    
    - update to recent git

 ...ule-setup.sh-call-systemd-in-private-dir-.patch |   23 ++
 ...kernel-install.d-51-dracut-rescue.install.patch |  118 ++++++
 ....example-make-hostonly-default-for-fedora.patch |   51 +++
 0004-dracut.sh-remove-default-marker-in-help.patch |   57 +++
 ...dd-new-default-path-to-initramfs-accordin.patch |   40 ++
 0006-add-rescue-dracut-module.patch                |   35 ++
 ...ut.sh-move-cleanup-trap-just-after-mktemp.patch |   37 ++
 0008-dracut.spec-add-rescue-module.patch           |   21 +
 ...escue.install-do-not-unset-installonly-on.patch |   26 ++
 ...-fix-for-default-initrd-not-found-but-ima.patch |   39 ++
 0011-lsinitrd.sh-removed-trailing.patch            |   22 +
 0012-make-host_fs_types-a-hashmap.patch            |  406 ++++++++++++++++++++
 ...sh-add-swap-partitions-to-host-only-setup.patch |   37 ++
 0014-add-51-dracut-rescue-postinst.sh.patch        |  247 ++++++++++++
 dracut.spec                                        |   46 ++-
 15 files changed, 1195 insertions(+), 10 deletions(-)
---
diff --git a/0001-systemd-module-setup.sh-call-systemd-in-private-dir-.patch b/0001-systemd-module-setup.sh-call-systemd-in-private-dir-.patch
new file mode 100644
index 0000000..bc61cbd
--- /dev/null
+++ b/0001-systemd-module-setup.sh-call-systemd-in-private-dir-.patch
@@ -0,0 +1,23 @@
+From 900e15da342db2675d7ccd3ca17907bc6ec8cfc5 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 8 Mar 2013 11:50:03 +0100
+Subject: [PATCH] systemd/module-setup.sh: call systemd in private dir for
+ version
+
+---
+ modules.d/98systemd/module-setup.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh
+index 3ce1705..32d4be5 100755
+--- a/modules.d/98systemd/module-setup.sh
++++ b/modules.d/98systemd/module-setup.sh
+@@ -17,7 +17,7 @@ depends() {
+ 
+ install() {
+ 
+-    SYSTEMD_VERSION=$(systemd --version | { read a b a; echo $b; })
++    SYSTEMD_VERSION=$($systemdutildir/systemd --version | { read a b a; echo $b; })
+     if (( $SYSTEMD_VERSION < 198 )); then
+         dfatal "systemd version $SYSTEMD_VERSION is too low. Need at least version 198."
+         exit 1
diff --git a/0002-add-lib-kernel-install.d-51-dracut-rescue.install.patch b/0002-add-lib-kernel-install.d-51-dracut-rescue.install.patch
new file mode 100644
index 0000000..424d889
--- /dev/null
+++ b/0002-add-lib-kernel-install.d-51-dracut-rescue.install.patch
@@ -0,0 +1,118 @@
+From d837ac398492cc2f6683cb8e2cbb80475ba232d5 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:09:55 +0100
+Subject: [PATCH] add /lib/kernel/install.d/51-dracut-rescue.install
+
+Upon installation of a kernel, check if a rescue image is already
+available and if not, create a non-hostonly generic initramfs image with
+the rescue module added.
+---
+ 51-dracut-rescue.install | 73 ++++++++++++++++++++++++++++++++++++++++++++++++
+ Makefile                 |  1 +
+ dracut.spec              |  1 +
+ 3 files changed, 75 insertions(+)
+ create mode 100755 51-dracut-rescue.install
+
+diff --git a/51-dracut-rescue.install b/51-dracut-rescue.install
+new file mode 100755
+index 0000000..844e578
+--- /dev/null
++++ b/51-dracut-rescue.install
+@@ -0,0 +1,73 @@
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++export LANG=C
++
++COMMAND="$1"
++KERNEL_VERSION="$2"
++BOOT_DIR_ABS="$3"
++BOOT_DIR="${3#/boot}"
++
++[[ -f /etc/os-release ]] && . /etc/os-release
++[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
++if [[ -f /etc/kernel/cmdline ]]; then
++    readarray -t BOOT_OPTIONS < /etc/kernel/cmdline
++fi
++if ! [[ "${BOOT_OPTIONS[@]}" ]]; then
++    readarray -t BOOT_OPTIONS < /proc/cmdline
++fi
++if ! [[ $BOOT_OPTIONS ]]; then
++    exit 1
++fi
++
++LOADER_ENTRY="/boot/loader/entries/${MACHINE_ID}-00-${KERNEL_VERSION}-rescue.conf"
++
++ret=0
++
++case "$COMMAND" in
++    add)
++        for i in "/boot/loader/entries/${MACHINE_ID}-00-"*"-rescue.conf"; do
++            [[ -f $i ]] && exit 0
++        done
++
++	dracut --no-hostonly  -a "rescue" "$3"/initrd-rescue "$2"
++        ((ret+=$?))
++
++        {
++            echo "title      $PRETTY_NAME - Rescue Image"
++            echo "version    $KERNEL_VERSION"
++            echo "machine-id $MACHINE_ID"
++            echo "options    ${BOOT_OPTIONS[@]} rd.auto=1"
++            echo "linux      $BOOT_DIR/linux"
++            echo "initrd     $BOOT_DIR/initrd-rescue"
++        } > $LOADER_ENTRY
++        ((ret+=$?))
++
++        if (( $ret == 0 )); then
++            command -v yumdb &>/dev/null && \
++                yumdb set installonly keep kernel-$KERNEL_VERSION >/dev/null
++        fi
++
++        ;;
++
++    remove)
++        [[ -f $LOADER_ENTRY ]] || exit 0
++
++        rm -f "$LOADER_ENTRY" "$3"/initrd-rescue
++
++        if command -v yumdb &>/dev/null; then
++            if [[ $(yumdb get installonly kernel-$KERNEL_VERSION 2>/dev/null) == *installonly\ \=\ keep* ]]; then
++                yumdb del installonly kernel-$KERNEL_VERSION >/dev/null
++            fi
++        fi
++        ;;
++
++    *)
++        usage
++        ret=1;;
++esac
++
++((ret+=$?))
++
++exit $ret
+diff --git a/Makefile b/Makefile
+index 7546ac6..a11689c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -118,6 +118,7 @@ endif
+ 	fi
+ 	mkdir -p $(DESTDIR)${prefix}/lib/kernel/install.d
+ 	install -m 0755 50-dracut.install $(DESTDIR)${prefix}/lib/kernel/install.d/50-dracut.install
++	install -m 0755 51-dracut-rescue.install $(DESTDIR)${prefix}/lib/kernel/install.d/51-dracut-rescue.install
+ 
+ dracut-version.sh:
+ 	@echo "DRACUT_VERSION=$(VERSION)-$(GITVERSION)" > dracut-version.sh
+diff --git a/dracut.spec b/dracut.spec
+index 707e66a..6d30e57 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -338,6 +338,7 @@ rm -rf $RPM_BUILD_ROOT
+ %endif
+ %if 0%{?fedora} || 0%{?rhel} > 6
+ %{_prefix}/lib/kernel/install.d/50-dracut.install
++%{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
+ %endif
+ 
+ %files network
diff --git a/0003-fedora.conf.example-make-hostonly-default-for-fedora.patch b/0003-fedora.conf.example-make-hostonly-default-for-fedora.patch
new file mode 100644
index 0000000..caa7ad7
--- /dev/null
+++ b/0003-fedora.conf.example-make-hostonly-default-for-fedora.patch
@@ -0,0 +1,51 @@
+From bcd352dfa105544a7531d999301c84bf88e850ed Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:10:23 +0100
+Subject: [PATCH] fedora.conf.example: make hostonly default for fedora
+
+---
+ dracut.conf.d/fedora.conf.example | 1 +
+ dracut.spec                       | 7 +++----
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/dracut.conf.d/fedora.conf.example b/dracut.conf.d/fedora.conf.example
+index 6266921..8448fc3 100644
+--- a/dracut.conf.d/fedora.conf.example
++++ b/dracut.conf.d/fedora.conf.example
+@@ -12,3 +12,4 @@ systemdutildir=/usr/lib/systemd
+ systemdsystemunitdir=/usr/lib/systemd/system
+ udevdir=/usr/lib/udev
+ add_dracutmodules+=" systemd "
++hostonly="yes"
+diff --git a/dracut.spec b/dracut.spec
+index 6d30e57..6906d68 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -132,7 +132,7 @@ Requires: nss-softokn-freebl
+ 
+ %description fips
+ This package requires everything which is needed to build an
+-all purpose initramfs with dracut, which does an integrity check.
++initramfs with dracut, which does an integrity check.
+ %endif
+ 
+ %package fips-aesni
+@@ -141,8 +141,7 @@ Requires: %{name}-fips = %{version}-%{release}
+ 
+ %description fips-aesni
+ This package requires everything which is needed to build an
+-all purpose initramfs with dracut, which does an integrity check
+-and adds the aesni-intel kernel module.
++initramfs with dracut, which does an integrity check and adds the aesni-intel kernel module.
+ 
+ %package caps
+ Summary: dracut modules to build a dracut initramfs which drops capabilities
+@@ -151,7 +150,7 @@ Requires: libcap
+ 
+ %description caps
+ This package requires everything which is needed to build an
+-all purpose initramfs with dracut, which drops capabilities.
++initramfs with dracut, which drops capabilities.
+ 
+ %package tools
+ Summary: dracut tools to build the local initramfs
diff --git a/0004-dracut.sh-remove-default-marker-in-help.patch b/0004-dracut.sh-remove-default-marker-in-help.patch
new file mode 100644
index 0000000..727f14f
--- /dev/null
+++ b/0004-dracut.sh-remove-default-marker-in-help.patch
@@ -0,0 +1,57 @@
+From 54e7d7c32daf14f7174dd852c64924cb4f2daa69 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:11:12 +0100
+Subject: [PATCH] dracut.sh: remove (default) marker in --help
+
+---
+ dracut.sh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 28ed4f1..7243078 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -69,11 +69,11 @@ Creates initial ramdisk images for preloading modules
+ 
+   --kver [VERSION]      Set kernel version to [VERSION].
+   -f, --force           Overwrite existing initramfs file.
++  -a, --add [LIST]      Add a space-separated list of dracut modules.
+   -m, --modules [LIST]  Specify a space-separated list of dracut modules to
+                          call when building the initramfs. Modules are located
+                          in /usr/lib/dracut/modules.d.
+   -o, --omit [LIST]     Omit a space-separated list of dracut modules.
+-  -a, --add [LIST]      Add a space-separated list of dracut modules.
+   -d, --drivers [LIST]  Specify a space-separated list of kernel modules to
+                         exclusively include in the initramfs.
+   --add-drivers [LIST] Specify a space-separated list of kernel
+@@ -90,12 +90,12 @@ Creates initial ramdisk images for preloading modules
+   --kernel-only         Only install kernel drivers and firmware files
+   --no-kernel           Do not install kernel drivers and firmware files
+   --kernel-cmdline [PARAMETERS] Specify default kernel command line parameters
+-  --strip               Strip binaries in the initramfs (default)
++  --strip               Strip binaries in the initramfs
+   --nostrip             Do not strip binaries in the initramfs
+-  --hardlink            Hardlink files in the initramfs (default)
++  --hardlink            Hardlink files in the initramfs
+   --nohardlink          Do not hardlink files in the initramfs
+   --prefix [DIR]        Prefix initramfs files with [DIR]
+-  --noprefix            Do not prefix initramfs files (default)
++  --noprefix            Do not prefix initramfs files
+   --mdadmconf           Include local /etc/mdadm.conf
+   --nomdadmconf         Do not include local /etc/mdadm.conf
+   --lvmconf             Include local /etc/lvm/lvm.conf
+@@ -111,11 +111,11 @@ Creates initial ramdisk images for preloading modules
+                          1 - only fatal errors
+                          2 - all errors
+                          3 - warnings
+-                         4 - info (default)
++                         4 - info
+                          5 - debug info (here starts lots of output)
+                          6 - trace info (and even more)
+-  -v, --verbose         Increase verbosity level (default is info(4))
+-  -q, --quiet           Decrease verbosity level (default is info(4))
++  -v, --verbose         Increase verbosity level
++  -q, --quiet           Decrease verbosity level
+   -c, --conf [FILE]     Specify configuration file to use.
+                          Default: /etc/dracut.conf
+   --confdir [DIR]       Specify configuration directory to use *.conf files
diff --git a/0005-dracut.sh-add-new-default-path-to-initramfs-accordin.patch b/0005-dracut.sh-add-new-default-path-to-initramfs-accordin.patch
new file mode 100644
index 0000000..0cd7394
--- /dev/null
+++ b/0005-dracut.sh-add-new-default-path-to-initramfs-accordin.patch
@@ -0,0 +1,40 @@
+From cc2303001e713f2f7c3f70161c28aa95f4d339d1 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:11:39 +0100
+Subject: [PATCH] dracut.sh: add new default path to initramfs according to
+ bootloader spec
+
+see kernel-install(8) and
+http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec
+---
+ dracut.sh | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 7243078..8f3e5d2 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -442,7 +442,13 @@ if ! [[ $kernel ]]; then
+ fi
+ 
+ if ! [[ $outfile ]]; then
+-    outfile="/boot/initramfs-$kernel.img"
++    [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
++
++    if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then
++        outfile="/boot/${MACHINE_ID}/$kernel/initrd"
++    else
++        outfile="/boot/initramfs-$kernel.img"
++    fi
+ fi
+ 
+ for i in /usr/sbin /sbin /usr/bin /bin; do
+@@ -726,7 +732,7 @@ outdir=${outfile%/*}
+ [[ $outdir ]] || outdir="/"
+ 
+ if [[ ! -d "$outdir" ]]; then
+-    dfatal "Can't write $outfile: Directory $outdir does not exist."
++    dfatal "Can't write to $outdir: Directory $outdir does not exist or is not accessible."
+     exit 1
+ elif [[ ! -w "$outdir" ]]; then
+     dfatal "No permission to write to $outdir."
diff --git a/0006-add-rescue-dracut-module.patch b/0006-add-rescue-dracut-module.patch
new file mode 100644
index 0000000..711d834
--- /dev/null
+++ b/0006-add-rescue-dracut-module.patch
@@ -0,0 +1,35 @@
+From aede120c92e08712e5ab93b283b12ab5f3df510d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:15:41 +0100
+Subject: [PATCH] add rescue dracut module
+
+---
+ modules.d/03rescue/module-setup.sh | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+ create mode 100755 modules.d/03rescue/module-setup.sh
+
+diff --git a/modules.d/03rescue/module-setup.sh b/modules.d/03rescue/module-setup.sh
+new file mode 100755
+index 0000000..3f10b7c
+--- /dev/null
++++ b/modules.d/03rescue/module-setup.sh
+@@ -0,0 +1,19 @@
++#!/bin/bash
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++check() {
++    # do not add this module by default
++    return 255
++}
++
++depends() {
++    return 0
++}
++
++install() {
++    dracut_install -o ps grep more cat rm strace free showmount \
++        ping netstat rpcinfo vi scp ping6 ssh \
++        fsck fsck.ext2 fsck.ext4 fsck.ext3 fsck.ext4dev fsck.vfat e2fsck
++}
++
diff --git a/0007-dracut.sh-move-cleanup-trap-just-after-mktemp.patch b/0007-dracut.sh-move-cleanup-trap-just-after-mktemp.patch
new file mode 100644
index 0000000..2cf98cf
--- /dev/null
+++ b/0007-dracut.sh-move-cleanup-trap-just-after-mktemp.patch
@@ -0,0 +1,37 @@
+From d008b6b89f69772a119da779c9e934e9bdd426ec Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:30:44 +0100
+Subject: [PATCH] dracut.sh: move cleanup trap, just after mktemp
+
+---
+ dracut.sh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/dracut.sh b/dracut.sh
+index 8f3e5d2..860cfb5 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -623,6 +623,11 @@ readonly initdir=$(mktemp --tmpdir="$TMPDIR/" -d -t initramfs.XXXXXX)
+     exit 1
+ }
+ 
++# clean up after ourselves no matter how we die.
++trap 'ret=$?;[[ $keep ]] && echo "Not removing $initdir." >&2 || { [[ $initdir ]] && rm -rf "$initdir";exit $ret; };' EXIT
++# clean up after ourselves no matter how we die.
++trap 'exit 1;' SIGINT
++
+ export DRACUT_KERNEL_LAZY="1"
+ export DRACUT_RESOLVE_LAZY="1"
+ 
+@@ -742,11 +747,6 @@ elif [[ -f "$outfile" && ! -w "$outfile" ]]; then
+     exit 1
+ fi
+ 
+-# clean up after ourselves no matter how we die.
+-trap 'ret=$?;[[ $keep ]] && echo "Not removing $initdir." >&2 || rm -rf "$initdir";exit $ret;' EXIT
+-# clean up after ourselves no matter how we die.
+-trap 'exit 1;' SIGINT
+-
+ # Need to be able to have non-root users read stuff (rpcbind etc)
+ chmod 755 "$initdir"
+ 
diff --git a/0008-dracut.spec-add-rescue-module.patch b/0008-dracut.spec-add-rescue-module.patch
new file mode 100644
index 0000000..5d22ba6
--- /dev/null
+++ b/0008-dracut.spec-add-rescue-module.patch
@@ -0,0 +1,21 @@
+From fba5fbbdad0f59ce06fde71441832952cdefe546 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sat, 9 Mar 2013 15:32:32 +0100
+Subject: [PATCH] dracut.spec: add rescue module
+
+---
+ dracut.spec | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/dracut.spec b/dracut.spec
+index 6906d68..14ce0d0 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -282,6 +282,7 @@ rm -rf $RPM_BUILD_ROOT
+ %else
+ %{dracutlibdir}/modules.d/00bootchart
+ %endif
++%{dracutlibdir}/modules.d/03rescue
+ %{dracutlibdir}/modules.d/04watchdog
+ %{dracutlibdir}/modules.d/05busybox
+ %{dracutlibdir}/modules.d/10i18n
diff --git a/0009-51-dracut-rescue.install-do-not-unset-installonly-on.patch b/0009-51-dracut-rescue.install-do-not-unset-installonly-on.patch
new file mode 100644
index 0000000..c6e7b00
--- /dev/null
+++ b/0009-51-dracut-rescue.install-do-not-unset-installonly-on.patch
@@ -0,0 +1,26 @@
+From 8d28614e4f6d270e57371cde4ea9f1fe776cdb35 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sun, 10 Mar 2013 14:44:16 +0100
+Subject: [PATCH] 51-dracut-rescue.install: do not unset installonly on remove
+
+---
+ 51-dracut-rescue.install | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/51-dracut-rescue.install b/51-dracut-rescue.install
+index 844e578..e5781d3 100755
+--- a/51-dracut-rescue.install
++++ b/51-dracut-rescue.install
+@@ -55,12 +55,6 @@ case "$COMMAND" in
+         [[ -f $LOADER_ENTRY ]] || exit 0
+ 
+         rm -f "$LOADER_ENTRY" "$3"/initrd-rescue
+-
+-        if command -v yumdb &>/dev/null; then
+-            if [[ $(yumdb get installonly kernel-$KERNEL_VERSION 2>/dev/null) == *installonly\ \=\ keep* ]]; then
+-                yumdb del installonly kernel-$KERNEL_VERSION >/dev/null
+-            fi
+-        fi
+         ;;
+ 
+     *)
diff --git a/0010-lsinitrd.sh-fix-for-default-initrd-not-found-but-ima.patch b/0010-lsinitrd.sh-fix-for-default-initrd-not-found-but-ima.patch
new file mode 100644
index 0000000..03d7485
--- /dev/null
+++ b/0010-lsinitrd.sh-fix-for-default-initrd-not-found-but-ima.patch
@@ -0,0 +1,39 @@
+From 727e68d0b5cb93eb6c6e00f0541b8519657a2597 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Sun, 10 Mar 2013 14:44:32 +0100
+Subject: [PATCH] lsinitrd.sh: fix for default initrd not found, but image
+ given
+
+---
+ lsinitrd.sh | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/lsinitrd.sh b/lsinitrd.sh
+index 7a09423..4b8a7e2 100755
+--- a/lsinitrd.sh
++++ b/lsinitrd.sh
+@@ -54,16 +54,17 @@ if [[ "$1" ]]; then
+         usage
+         exit 1
+     fi
+-fi
+-
+-[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
+-
+-if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then
+-    image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
+ else
+-    image="/boot/initramfs-${KERNEL_VERSION}.img}"
++    [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
++
++    if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then
++        image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
++    else
++        image="/boot/initramfs-${KERNEL_VERSION}.img}"
++    fi
+ fi
+ 
++
+ if ! [[ -f "$image" ]]; then
+     {
+         echo "No <initramfs file> specified and the default image '$image' cannot be accessed!"
diff --git a/0011-lsinitrd.sh-removed-trailing.patch b/0011-lsinitrd.sh-removed-trailing.patch
new file mode 100644
index 0000000..b36e399
--- /dev/null
+++ b/0011-lsinitrd.sh-removed-trailing.patch
@@ -0,0 +1,22 @@
+From d928724c3cf464a495c11162042951887b80f5e6 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Mon, 11 Mar 2013 15:46:37 +0100
+Subject: [PATCH] lsinitrd.sh: removed trailing "}"
+
+---
+ lsinitrd.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lsinitrd.sh b/lsinitrd.sh
+index 4b8a7e2..5cd8c2a 100755
+--- a/lsinitrd.sh
++++ b/lsinitrd.sh
+@@ -60,7 +60,7 @@ else
+     if [[ $MACHINE_ID ]] && ( [[ -d /boot/${MACHINE_ID} ]] || [[ -L /boot/${MACHINE_ID} ]] ); then
+         image="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
+     else
+-        image="/boot/initramfs-${KERNEL_VERSION}.img}"
++        image="/boot/initramfs-${KERNEL_VERSION}.img"
+     fi
+ fi
+ 
diff --git a/0012-make-host_fs_types-a-hashmap.patch b/0012-make-host_fs_types-a-hashmap.patch
new file mode 100644
index 0000000..955a930
--- /dev/null
+++ b/0012-make-host_fs_types-a-hashmap.patch
@@ -0,0 +1,406 @@
+From d351541ee625f8a1b42446448214f200f19c2631 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Mon, 11 Mar 2013 16:32:16 +0100
+Subject: [PATCH] make host_fs_types a hashmap
+
+This requires bash >= 4, but hash maps are so much more comfortable
+---
+ dracut-functions.sh                | 14 +++---------
+ dracut.sh                          | 23 +++++++++----------
+ modules.d/90btrfs/module-setup.sh  |  6 ++---
+ modules.d/90crypt/module-setup.sh  | 39 +++++++++++++++++++--------------
+ modules.d/90dmraid/module-setup.sh | 34 ++++++++++++++++------------
+ modules.d/90lvm/module-setup.sh    | 36 +++++++++++++++++-------------
+ modules.d/90mdraid/module-setup.sh | 45 +++++++++++++++++++++-----------------
+ modules.d/95cifs/module-setup.sh   |  2 +-
+ modules.d/95nfs/module-setup.sh    |  6 ++---
+ modules.d/95virtfs/module-setup.sh |  4 ++--
+ 10 files changed, 112 insertions(+), 97 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 2a84d17..c6a5c7e 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -450,23 +450,15 @@ find_mp_fstype() {
+ find_root_block_device() { find_block_device /; }
+ 
+ # for_each_host_dev_fs <func>
+-# Execute "<func> <dev> <filesystem>" for every "<dev>|<fs>" pair found
++# Execute "<func> <dev> <filesystem>" for every "<dev> <fs>" pair found
+ # in ${host_fs_types[@]}
+ for_each_host_dev_fs()
+ {
+     local _func="$1"
+     local _dev
+-    local _fs
+     local _ret=1
+-    for f in ${host_fs_types[@]}; do
+-        OLDIFS="$IFS"
+-        IFS="|"
+-        set -- $f
+-        IFS="$OLDIFS"
+-        _dev="$1"
+-        [[ -b "$_dev" ]] || continue
+-        _fs="$2"
+-        $_func $_dev $_fs && _ret=0
++    for _dev in "${!host_fs_types[@]}"; do
++        $_func "$_dev" "${host_fs_types[$_dev]}" && _ret=0
+     done
+     return $_ret
+ }
+diff --git a/dracut.sh b/dracut.sh
+index 860cfb5..8306733 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -750,11 +750,13 @@ fi
+ # Need to be able to have non-root users read stuff (rpcbind etc)
+ chmod 755 "$initdir"
+ 
++declare -A host_fs_types
++
+ for line in "${fstab_lines[@]}"; do
+     set -- $line
+     #dev mp fs fsopts
+     push host_devs "$1"
+-    push host_fs_types "$1|$3"
++    host_fs_types["$1"]="$3"
+ done
+ 
+ for f in $add_fstab; do
+@@ -797,28 +799,27 @@ fi
+ _get_fs_type() (
+     [[ $1 ]] || return
+     if [[ -b $1 ]] && get_fs_env $1; then
+-        echo "$(readlink -f $1)|$ID_FS_TYPE"
++        echo "$(readlink -f $1) $ID_FS_TYPE"
+         return 1
+     fi
+     if [[ -b /dev/block/$1 ]] && get_fs_env /dev/block/$1; then
+-        echo "$(readlink -f /dev/block/$1)|$ID_FS_TYPE"
++        echo "$(readlink -f /dev/block/$1) $ID_FS_TYPE"
+         return 1
+     fi
+     if fstype=$(find_dev_fstype $1); then
+-        echo "$1|$fstype"
++        echo "$1 $fstype"
+         return 1
+     fi
+     return 1
+ )
+ 
+ for dev in "${host_devs[@]}"; do
+-    unset fs_type
+-    for fstype in $(_get_fs_type $dev) \
+-        $(check_block_and_slaves _get_fs_type $(get_maj_min $dev)); do
+-        if ! strstr " ${host_fs_types[*]} " " $fstype ";then
+-            push host_fs_types "$fstype"
+-        fi
+-    done
++    while read key val; do
++        host_fs_types["$key"]="$val"
++    done < <(
++        _get_fs_type $dev
++        check_block_and_slaves_all _get_fs_type $(get_maj_min $dev)
++    )
+ done
+ 
+ [[ -d $udevdir ]] \
+diff --git a/modules.d/90btrfs/module-setup.sh b/modules.d/90btrfs/module-setup.sh
+index 0f79f5e..4a7c01d 100755
+--- a/modules.d/90btrfs/module-setup.sh
++++ b/modules.d/90btrfs/module-setup.sh
+@@ -9,12 +9,10 @@ check() {
+     type -P btrfs >/dev/null || return 1
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+-        local _found
+         for fs in ${host_fs_types[@]}; do
+-            strstr "$fs" "\|btrfs" && _found="1"
++            [[ "$fs" == "btrfs" ]] && return 0
+         done
+-        [[ $_found ]] || return 1
+-        unset _found
++        return 255
+     }
+ 
+     return 0
+diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
+index 2b4456b..b76f6ae 100755
+--- a/modules.d/90crypt/module-setup.sh
++++ b/modules.d/90crypt/module-setup.sh
+@@ -7,8 +7,30 @@ check() {
+     # if cryptsetup is not installed, then we cannot support encrypted devices.
+     type -P cryptsetup >/dev/null || return 1
+ 
++    [[ $hostonly ]] || [[ $mount_needs ]] && {
++        for fs in "${host_fs_types[@]}"; do
++            [[ $fs = "crypto_LUKS" ]] && return 0
++        done
++        return 255
++    }
++
++    return 0
++}
++
++depends() {
++    echo dm rootfs-block
++    return 0
++}
++
++installkernel() {
++    instmods dm_crypt =crypto
++}
++
++install() {
++
+     check_crypt() {
+         local dev=$1 fs=$2
++
+         [[ $fs = "crypto_LUKS" ]] || return 1
+         ID_FS_UUID=$(udevadm info --query=property --name=$dev \
+             | while read line; do
+@@ -24,23 +46,8 @@ check() {
+         return 0
+     }
+ 
+-    [[ $hostonly ]] || [[ $mount_needs ]] && {
+-        for_each_host_dev_and_slaves_all check_crypt || return 1
+-    }
+-
+-    return 0
+-}
+-
+-depends() {
+-    echo dm rootfs-block
+-    return 0
+-}
+-
+-installkernel() {
+-    instmods dm_crypt =crypto
+-}
++    for_each_host_dev_fs check_crypt
+ 
+-install() {
+     dracut_install cryptsetup rmdir readlink umount
+     inst_script "$moddir"/cryptroot-ask.sh /sbin/cryptroot-ask
+     inst_script "$moddir"/probe-keydev.sh /sbin/probe-keydev
+diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh
+index c315961..76daa4a 100755
+--- a/modules.d/90dmraid/module-setup.sh
++++ b/modules.d/90dmraid/module-setup.sh
+@@ -8,9 +8,27 @@ check() {
+     # in trying to support it in the initramfs.
+     type -P dmraid >/dev/null || return 1
+ 
++    [[ $hostonly ]] || [[ $mount_needs ]] && {
++        for fs in "${host_fs_types[@]}"; do
++            [[ $fs = *_raid_member ]] && return 0
++        done
++        return 255
++    }
++
++    return 0
++}
++
++depends() {
++    echo dm rootfs-block
++    return 0
++}
++
++install() {
++    local _i
++
+     check_dmraid() {
+         local dev=$1 fs=$2 holder DEVPATH DM_NAME
+-        [[ "$fs" = "${fs%%_raid_member}" ]] && return 1
++        [[ "$fs" != *_raid_member ]] && return 1
+ 
+         DEVPATH=$(udevadm info --query=property --name=$dev \
+             | while read line; do
+@@ -37,20 +55,8 @@ check() {
+         return 0
+     }
+ 
+-    [[ $hostonly ]] || [[ $mount_needs ]] && {
+-        for_each_host_dev_and_slaves_all check_dmraid || return 1
+-    }
++    for_each_host_dev_fs check_dmraid
+ 
+-    return 0
+-}
+-
+-depends() {
+-    echo dm rootfs-block
+-    return 0
+-}
+-
+-install() {
+-    local _i
+     dracut_install dmraid
+     dracut_install -o kpartx
+     inst $(command -v partx) /sbin/partx
+diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
+index e0e4043..22186f4 100755
+--- a/modules.d/90lvm/module-setup.sh
++++ b/modules.d/90lvm/module-setup.sh
+@@ -7,22 +7,11 @@ check() {
+     # No point trying to support lvm if the binaries are missing
+     type -P lvm >/dev/null || return 1
+ 
+-    check_lvm() {
+-        local DM_VG_NAME DM_LV_NAME DM_UDEV_DISABLE_DISK_RULES_FLAG
+-        eval $(udevadm info --query=property --name=/dev/block/$1|egrep '(DM_VG_NAME|DM_LV_NAME|DM_UDEV_DISABLE_DISK_RULES_FLAG)=')
+-        [[ "$DM_UDEV_DISABLE_DISK_RULES_FLAG" = "1" ]] && return 1
+-        [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1
+-        if ! strstr " ${_activated[*]} " " ${DM_VG_NAME}/${DM_LV_NAME} "; then
+-            if ! [[ $kernel_only ]]; then
+-                echo " rd.lvm.lv=${DM_VG_NAME}/${DM_LV_NAME} " >> "${initdir}/etc/cmdline.d/90lvm.conf"
+-            fi
+-            push _activated "${DM_VG_NAME}/${DM_LV_NAME}"
+-        fi
+-        return 0
+-    }
+-
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+-        for_each_host_dev_and_slaves_all check_lvm || return 1
++        for fs in "${host_fs_types[@]}"; do
++            [[ $fs = LVM*_member ]] && return 0
++        done
++        return 255
+     }
+ 
+     return 0
+@@ -38,6 +27,23 @@ install() {
+     local _i
+     inst lvm
+ 
++    check_lvm() {
++        local DM_VG_NAME DM_LV_NAME DM_UDEV_DISABLE_DISK_RULES_FLAG
++
++        eval $(udevadm info --query=property --name=$1 | egrep '(DM_VG_NAME|DM_LV_NAME|DM_UDEV_DISABLE_DISK_RULES_FLAG)=')
++        [[ "$DM_UDEV_DISABLE_DISK_RULES_FLAG" = "1" ]] && return 1
++        [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || return 1
++        if ! strstr " ${_activated[*]} " " ${DM_VG_NAME}/${DM_LV_NAME} "; then
++            if ! [[ $kernel_only ]]; then
++                echo " rd.lvm.lv=${DM_VG_NAME}/${DM_LV_NAME} " >> "${initdir}/etc/cmdline.d/90lvm.conf"
++            fi
++            push _activated "${DM_VG_NAME}/${DM_LV_NAME}"
++        fi
++        return 0
++    }
++
++    for_each_host_dev_fs check_lvm
++
+     inst_rules "$moddir/64-lvm.rules"
+ 
+     if [[ $hostonly ]] || [[ $lvmconf = "yes" ]]; then
+diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh
+index 0efffbb..70c27dd 100755
+--- a/modules.d/90mdraid/module-setup.sh
++++ b/modules.d/90mdraid/module-setup.sh
+@@ -7,27 +7,11 @@ check() {
+     # No mdadm?  No mdraid support.
+     type -P mdadm >/dev/null || return 1
+ 
+-    check_mdraid() {
+-        local dev=$1 fs=$2 holder DEVPATH MD_UUID
+-        [[ "$fs" = "${fs%%_raid_member}" ]] && return 1
+-
+-        MD_UUID=$(/sbin/mdadm --examine --export $dev \
+-            | while read line; do
+-                [[ ${line#MD_UUID} = $line ]] && continue
+-                eval "$line"
+-                echo $MD_UUID
+-                break
+-                done)
+-
+-        [[ ${MD_UUID} ]] || return 1
+-        if ! [[ $kernel_only ]]; then
+-            echo " rd.md.uuid=${MD_UUID} " >> "${initdir}/etc/cmdline.d/90mdraid.conf"
+-        fi
+-        return 0
+-    }
+-
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+-        for_each_host_dev_and_slaves_all check_mdraid || return 1
++        for fs in "${host_fs_types[@]}"; do
++            [[ "$fs" == *_raid_member ]] && return 0
++        done
++        return 255
+     }
+ 
+     return 0
+@@ -48,6 +32,27 @@ install() {
+     inst $(command -v partx) /sbin/partx
+     inst $(command -v mdadm) /sbin/mdadm
+ 
++    check_mdraid() {
++        local dev=$1 fs=$2 holder DEVPATH MD_UUID
++        [[ "$fs" != *_raid_member ]] && return 1
++
++        MD_UUID=$(/sbin/mdadm --examine --export $dev \
++            | while read line; do
++                [[ ${line#MD_UUID} = $line ]] && continue
++                eval "$line"
++                echo $MD_UUID
++                break
++                done)
++
++        [[ ${MD_UUID} ]] || return 1
++        if ! [[ $kernel_only ]]; then
++            echo " rd.md.uuid=${MD_UUID} " >> "${initdir}/etc/cmdline.d/90mdraid.conf"
++        fi
++        return 0
++    }
++
++    for_each_host_dev_fs check_mdraid
++
+     inst_rules 64-md-raid.rules
+     # remove incremental assembly from stock rules, so they don't shadow
+     # 65-md-inc*.rules and its fine-grained controls, or cause other problems
+diff --git a/modules.d/95cifs/module-setup.sh b/modules.d/95cifs/module-setup.sh
+index 1c7d0be..bf0eddf 100755
+--- a/modules.d/95cifs/module-setup.sh
++++ b/modules.d/95cifs/module-setup.sh
+@@ -8,7 +8,7 @@ check() {
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in ${host_fs_types[@]}; do
+-            strstr "$fs" "\|cifs"  && return 0
++            [[ "$fs" == "cifs" ]] && return 0
+         done
+         return 255
+     }
+diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
+index 38ee5d7..7c3a64d 100755
+--- a/modules.d/95nfs/module-setup.sh
++++ b/modules.d/95nfs/module-setup.sh
+@@ -9,9 +9,9 @@ check() {
+ 
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in ${host_fs_types[@]}; do
+-            strstr "$fs" "\|nfs"  && return 0
+-            strstr "$fs" "\|nfs3" && return 0
+-            strstr "$fs" "\|nfs4" && return 0
++            [[ "$fs" == "nfs" ]] && return 0
++            [[ "$fs" == "nfs3" ]] && return 0
++            [[ "$fs" == "nfs4" ]] && return 0
+         done
+         return 255
+     }
+diff --git a/modules.d/95virtfs/module-setup.sh b/modules.d/95virtfs/module-setup.sh
+index 0b961a8..12bd354 100755
+--- a/modules.d/95virtfs/module-setup.sh
++++ b/modules.d/95virtfs/module-setup.sh
+@@ -5,9 +5,9 @@
+ check() {
+     [[ $hostonly ]] || [[ $mount_needs ]] && {
+         for fs in ${host_fs_types[@]}; do
+-            strstr "$fs" "\|9p" && return 0
++            [[ "$fs" == "9p" ]] && return 0
+         done
+-        return 1
++        return 255
+     }
+ 
+     if type -P systemd-detect-virt >/dev/null 2>&1; then
diff --git a/0013-dracut.sh-add-swap-partitions-to-host-only-setup.patch b/0013-dracut.sh-add-swap-partitions-to-host-only-setup.patch
new file mode 100644
index 0000000..b41fec2
--- /dev/null
+++ b/0013-dracut.sh-add-swap-partitions-to-host-only-setup.patch
@@ -0,0 +1,37 @@
+From dd5875499ece9dbc90e10eafd0073ee15d0c86a4 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Mon, 11 Mar 2013 16:31:48 +0100
+Subject: [PATCH] dracut.sh: add swap partitions to host-only setup
+
+---
+ dracut.sh | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/dracut.sh b/dracut.sh
+index 8306733..bb49299 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -794,6 +794,23 @@ if [[ $hostonly ]]; then
+         mountpoint "$mp" >/dev/null 2>&1 || continue
+         push host_devs $(readlink -f "/dev/block/$(find_block_device "$mp")")
+     done
++
++    while read dev type rest; do
++        [[ -b $dev ]] || continue
++        [[ "$type" == "partition" ]] || continue
++        while read _d _m _t _o _r; do
++            [[ "$_d" == \#* ]] && continue
++            [[ $_d ]] || continue
++            [[ $_t != "swap" ]] || [[ $_m != "swap" ]] && continue
++            [[ "$_o" == *noauto* ]] && continue
++            [[ "$_d" == UUID\=* ]] && _d="/dev/disk/by-uuid/${_d#UUID=}"
++            [[ "$_d" == LABEL\=* ]] && _d="/dev/disk/by-label/$_d#LABEL=}"
++            [[ "$_d" -ef "$dev" ]] || continue
++            push host_devs $(readlink -f $dev)
++            break
++        done < /etc/fstab
++    done < /proc/swaps
++
+ fi
+ 
+ _get_fs_type() (
diff --git a/0014-add-51-dracut-rescue-postinst.sh.patch b/0014-add-51-dracut-rescue-postinst.sh.patch
new file mode 100644
index 0000000..0adfeb1
--- /dev/null
+++ b/0014-add-51-dracut-rescue-postinst.sh.patch
@@ -0,0 +1,247 @@
+From 2fa6fd3aaa3015ad80b2b16f68c9b6de6724f202 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Mon, 11 Mar 2013 15:59:13 +0100
+Subject: [PATCH] add 51-dracut-rescue-postinst.sh
+
+also fixup 51-dracut-rescue.install to read in dracut conf
+---
+ 51-dracut-rescue-postinst.sh      | 58 +++++++++++++++++++++++++++++++++++++++
+ 51-dracut-rescue.install          | 58 ++++++++++++++++++++++++++++-----------
+ dracut.conf.d/fedora.conf.example |  1 +
+ dracut.spec                       | 18 ++++++++----
+ 4 files changed, 114 insertions(+), 21 deletions(-)
+ create mode 100755 51-dracut-rescue-postinst.sh
+
+diff --git a/51-dracut-rescue-postinst.sh b/51-dracut-rescue-postinst.sh
+new file mode 100755
+index 0000000..5c0fe2c
+--- /dev/null
++++ b/51-dracut-rescue-postinst.sh
+@@ -0,0 +1,58 @@
++#!/bin/bash
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++export LANG=C
++
++KERNEL_VERSION="$1"
++KERNEL_IMAGE="$2"
++
++[[ -f /etc/os-release ]] && . /etc/os-release
++[[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
++
++INITRDFILE="/boot/initramfs-${MACHINE_ID}-rescue.img"
++[[ -f $INITRDFILE ]] && exit 0
++
++dropindirs_sort()
++{
++    suffix=$1; shift
++    args=("$@")
++    files=$(
++        while (( $# > 0 )); do
++            for i in ${1}/*${suffix}; do
++                [[ -f $i ]] && echo ${i##*/}
++            done
++            shift
++        done | sort -Vu
++    )
++
++    for f in $files; do
++        for d in "${args[@]}"; do
++            if [[ -f "$d/$f" ]]; then
++                echo "$d/$f"
++                continue 2
++            fi
++        done
++    done
++}
++
++# source our config dir
++for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
++    [[ -e $f ]] && . "$f"
++done
++
++[[ $dracut_rescue_image != "yes" ]] && exit 0
++
++dracut --no-hostonly  -a "rescue" "$INITRDFILE" "$KERNEL_VERSION"
++((ret+=$?))
++
++cp "$KERNEL_IMAGE" "${KERNEL_IMAGE%/*}/vmlinuz-${MACHINE_ID}-rescue"
++((ret+=$?))
++
++KERNEL_IMAGE="${KERNEL_IMAGE%/*}/vmlinuz-${MACHINE_ID}-rescue"
++
++new-kernel-image --install "$KERNEL_VERSION" --kernel-image "$KERNEL_IMAGE" --initrdfile "$INITRDFILE" --banner "$PRETTY_NAME Rescue"
++
++((ret+=$?))
++
++exit $ret
+diff --git a/51-dracut-rescue.install b/51-dracut-rescue.install
+index e5781d3..94f064c 100755
+--- a/51-dracut-rescue.install
++++ b/51-dracut-rescue.install
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+@@ -6,8 +6,29 @@ export LANG=C
+ 
+ COMMAND="$1"
+ KERNEL_VERSION="$2"
+-BOOT_DIR_ABS="$3"
+-BOOT_DIR="${3#/boot}"
++
++dropindirs_sort()
++{
++    suffix=$1; shift
++    args=("$@")
++    files=$(
++        while (( $# > 0 )); do
++            for i in ${1}/*${suffix}; do
++                [[ -f $i ]] && echo ${i##*/}
++            done
++            shift
++        done | sort -Vu
++    )
++
++    for f in $files; do
++        for d in "${args[@]}"; do
++            if [[ -f "$d/$f" ]]; then
++                echo "$d/$f"
++                continue 2
++            fi
++        done
++    done
++}
+ 
+ [[ -f /etc/os-release ]] && . /etc/os-release
+ [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id
+@@ -21,17 +42,30 @@ if ! [[ $BOOT_OPTIONS ]]; then
+     exit 1
+ fi
+ 
+-LOADER_ENTRY="/boot/loader/entries/${MACHINE_ID}-00-${KERNEL_VERSION}-rescue.conf"
++LOADER_ENTRY="/boot/loader/entries/${MACHINE_ID}-0-rescue.conf"
++BOOT_DIR="/${MACHINE_ID}/0-rescue"
++BOOT_DIR_ABS="/boot${BOOT_DIR}"
+ 
+ ret=0
+ 
+ case "$COMMAND" in
+     add)
+-        for i in "/boot/loader/entries/${MACHINE_ID}-00-"*"-rescue.conf"; do
++        for i in "/boot/loader/entries/${MACHINE_ID}-0-rescue.conf"; do
+             [[ -f $i ]] && exit 0
+         done
+ 
+-	dracut --no-hostonly  -a "rescue" "$3"/initrd-rescue "$2"
++        # source our config dir
++        for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do
++            [[ -e $f ]] && . "$f"
++        done
++
++        [[ $dracut_rescue_image != "yes" ]] && exit 0
++
++        if ! cp --preserve "$KERNEL_IMAGE" "$BOOT_DIR_ABS"/linux; then
++            echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'!" >&2
++        fi
++
++        dracut --no-hostonly  -a "rescue" "$BOOT_DIR_ABS"/initrd "$2"
+         ((ret+=$?))
+ 
+         {
+@@ -40,21 +74,13 @@ case "$COMMAND" in
+             echo "machine-id $MACHINE_ID"
+             echo "options    ${BOOT_OPTIONS[@]} rd.auto=1"
+             echo "linux      $BOOT_DIR/linux"
+-            echo "initrd     $BOOT_DIR/initrd-rescue"
++            echo "initrd     $BOOT_DIR/initrd"
+         } > $LOADER_ENTRY
+         ((ret+=$?))
+-
+-        if (( $ret == 0 )); then
+-            command -v yumdb &>/dev/null && \
+-                yumdb set installonly keep kernel-$KERNEL_VERSION >/dev/null
+-        fi
+-
+         ;;
+ 
+     remove)
+-        [[ -f $LOADER_ENTRY ]] || exit 0
+-
+-        rm -f "$LOADER_ENTRY" "$3"/initrd-rescue
++        exit 0
+         ;;
+ 
+     *)
+diff --git a/dracut.conf.d/fedora.conf.example b/dracut.conf.d/fedora.conf.example
+index 8448fc3..ba7857c 100644
+--- a/dracut.conf.d/fedora.conf.example
++++ b/dracut.conf.d/fedora.conf.example
+@@ -13,3 +13,4 @@ systemdsystemunitdir=/usr/lib/systemd/system
+ udevdir=/usr/lib/udev
+ add_dracutmodules+=" systemd "
+ hostonly="yes"
++dracut_rescue_image="yes"
+diff --git a/dracut.spec b/dracut.spec
+index 14ce0d0..940d364 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -84,6 +84,7 @@ Requires: file
+ Requires: kpartx
+ Requires: udev > 166
+ Requires: kbd kbd-misc
++
+ %if 0%{?fedora} || 0%{?rhel} > 6
+ Requires: util-linux >= 2.21
+ Conflicts: systemd < 198
+@@ -234,8 +235,14 @@ rm $RPM_BUILD_ROOT%{_bindir}/mkinitrd
+ rm $RPM_BUILD_ROOT%{_bindir}/lsinitrd
+ %endif
+ 
+-mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
+-install -m 0644 dracut.logrotate $RPM_BUILD_ROOT/etc/logrotate.d/dracut_log
++# FIXME: remove after F19
++%if 0%{?fedora} || 0%{?rhel} > 6
++mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d
++install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
++%endif
++
++mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
++install -m 0644 dracut.logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/dracut_log
+ 
+ # create compat symlink
+ mkdir -p $RPM_BUILD_ROOT/sbin
+@@ -262,11 +269,11 @@ rm -rf $RPM_BUILD_ROOT
+ %{dracutlibdir}/dracut-logger.sh
+ %{dracutlibdir}/dracut-initramfs-restore
+ %{dracutlibdir}/dracut-install
+-%config(noreplace) /etc/dracut.conf
++%config(noreplace) %{_sysconfdir}/dracut.conf
+ %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel}
+ %{dracutlibdir}/dracut.conf.d/01-dist.conf
+ %endif
+-%dir /etc/dracut.conf.d
++%dir %{_sysconfdir}/dracut.conf.d
+ %dir %{dracutlibdir}/dracut.conf.d
+ %{_mandir}/man8/dracut.8*
+ %{_mandir}/man8/*service.8*
+@@ -329,7 +336,7 @@ rm -rf $RPM_BUILD_ROOT
+ %{dracutlibdir}/modules.d/99fs-lib
+ %{dracutlibdir}/modules.d/99img-lib
+ %{dracutlibdir}/modules.d/99shutdown
+-%config(noreplace) /etc/logrotate.d/dracut_log
++%config(noreplace) %{_sysconfdir}/logrotate.d/dracut_log
+ %attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log
+ %dir %{_sharedstatedir}/initramfs
+ %if %{defined _unitdir}
+@@ -339,6 +346,7 @@ rm -rf $RPM_BUILD_ROOT
+ %if 0%{?fedora} || 0%{?rhel} > 6
+ %{_prefix}/lib/kernel/install.d/50-dracut.install
+ %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
++%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
+ %endif
+ 
+ %files network
diff --git a/dracut.spec b/dracut.spec
index 0661565..0c68e22 100644
--- a/dracut.spec
+++ b/dracut.spec
@@ -10,7 +10,7 @@
 
 Name: dracut
 Version: 026
-Release: 1%{?dist}
+Release: 15.git20130311%{?dist}
 
 Summary: Initramfs generator using udev
 %if 0%{?fedora} || 0%{?rhel}
@@ -29,6 +29,20 @@ URL: https://dracut.wiki.kernel.org/
 # Source can be generated by
 # http://git.kernel.org/?p=boot/dracut/dracut.git;a=snapshot;h=%{version};sf=tgz
 Source0: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar.bz2
+Patch1: 0001-systemd-module-setup.sh-call-systemd-in-private-dir-.patch
+Patch2: 0002-add-lib-kernel-install.d-51-dracut-rescue.install.patch
+Patch3: 0003-fedora.conf.example-make-hostonly-default-for-fedora.patch
+Patch4: 0004-dracut.sh-remove-default-marker-in-help.patch
+Patch5: 0005-dracut.sh-add-new-default-path-to-initramfs-accordin.patch
+Patch6: 0006-add-rescue-dracut-module.patch
+Patch7: 0007-dracut.sh-move-cleanup-trap-just-after-mktemp.patch
+Patch8: 0008-dracut.spec-add-rescue-module.patch
+Patch9: 0009-51-dracut-rescue.install-do-not-unset-installonly-on.patch
+Patch10: 0010-lsinitrd.sh-fix-for-default-initrd-not-found-but-ima.patch
+Patch11: 0011-lsinitrd.sh-removed-trailing.patch
+Patch12: 0012-make-host_fs_types-a-hashmap.patch
+Patch13: 0013-dracut.sh-add-swap-partitions-to-host-only-setup.patch
+Patch14: 0014-add-51-dracut-rescue-postinst.sh.patch
 
 
 BuildRequires: dash bash git
@@ -85,6 +99,7 @@ Requires: file
 Requires: kpartx
 Requires: udev > 166
 Requires: kbd kbd-misc
+
 %if 0%{?fedora} || 0%{?rhel} > 6
 Requires: util-linux >= 2.21
 Conflicts: systemd < 198
@@ -133,7 +148,7 @@ Requires: nss-softokn-freebl
 
 %description fips
 This package requires everything which is needed to build an
-all purpose initramfs with dracut, which does an integrity check.
+initramfs with dracut, which does an integrity check.
 %endif
 
 %package fips-aesni
@@ -142,8 +157,7 @@ Requires: %{name}-fips = %{version}-%{release}
 
 %description fips-aesni
 This package requires everything which is needed to build an
-all purpose initramfs with dracut, which does an integrity check
-and adds the aesni-intel kernel module.
+initramfs with dracut, which does an integrity check and adds the aesni-intel kernel module.
 
 %package caps
 Summary: dracut modules to build a dracut initramfs which drops capabilities
@@ -152,7 +166,7 @@ Requires: libcap
 
 %description caps
 This package requires everything which is needed to build an
-all purpose initramfs with dracut, which drops capabilities.
+initramfs with dracut, which drops capabilities.
 
 %package tools
 Summary: dracut tools to build the local initramfs
@@ -236,8 +250,14 @@ rm $RPM_BUILD_ROOT%{_bindir}/mkinitrd
 rm $RPM_BUILD_ROOT%{_bindir}/lsinitrd
 %endif
 
-mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
-install -m 0644 dracut.logrotate $RPM_BUILD_ROOT/etc/logrotate.d/dracut_log
+# FIXME: remove after F19
+%if 0%{?fedora} || 0%{?rhel} > 6
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d
+install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
+%endif
+
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
+install -m 0644 dracut.logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/dracut_log
 
 # create compat symlink
 mkdir -p $RPM_BUILD_ROOT/sbin
@@ -264,11 +284,11 @@ rm -rf $RPM_BUILD_ROOT
 %{dracutlibdir}/dracut-logger.sh
 %{dracutlibdir}/dracut-initramfs-restore
 %{dracutlibdir}/dracut-install
-%config(noreplace) /etc/dracut.conf
+%config(noreplace) %{_sysconfdir}/dracut.conf
 %if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel}
 %{dracutlibdir}/dracut.conf.d/01-dist.conf
 %endif
-%dir /etc/dracut.conf.d
+%dir %{_sysconfdir}/dracut.conf.d
 %dir %{dracutlibdir}/dracut.conf.d
 %{_mandir}/man8/dracut.8*
 %{_mandir}/man8/*service.8*
@@ -284,6 +304,7 @@ rm -rf $RPM_BUILD_ROOT
 %else
 %{dracutlibdir}/modules.d/00bootchart
 %endif
+%{dracutlibdir}/modules.d/03rescue
 %{dracutlibdir}/modules.d/04watchdog
 %{dracutlibdir}/modules.d/05busybox
 %{dracutlibdir}/modules.d/10i18n
@@ -330,7 +351,7 @@ rm -rf $RPM_BUILD_ROOT
 %{dracutlibdir}/modules.d/99fs-lib
 %{dracutlibdir}/modules.d/99img-lib
 %{dracutlibdir}/modules.d/99shutdown
-%config(noreplace) /etc/logrotate.d/dracut_log
+%config(noreplace) %{_sysconfdir}/logrotate.d/dracut_log
 %attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log
 %dir %{_sharedstatedir}/initramfs
 %if %{defined _unitdir}
@@ -339,6 +360,8 @@ rm -rf $RPM_BUILD_ROOT
 %endif
 %if 0%{?fedora} || 0%{?rhel} > 6
 %{_prefix}/lib/kernel/install.d/50-dracut.install
+%{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
+%{_sysconfdir}/kernel/postinst.d/51-dracut-rescue-postinst.sh
 %endif
 
 %files network
@@ -380,6 +403,9 @@ rm -rf $RPM_BUILD_ROOT
 %dir /var/lib/dracut/overlay
 
 %changelog
+* Mon Mar 11 2013 Harald Hoyer <harald at redhat.com> 026-15.git20130311
+- update to recent git
+
 * Fri Mar 08 2013 Harald Hoyer <harald at redhat.com> 026-1
 - version 026
 


More information about the scm-commits mailing list