[dracut/f17] dracut-017-39.git20120308

Harald Hoyer harald at fedoraproject.org
Thu Mar 8 12:53:10 UTC 2012


commit ee76a087a9baab9ef268d6126d2efe4c0d17e6bd
Author: Harald Hoyer <harald at redhat.com>
Date:   Thu Mar 8 13:52:09 2012 +0100

    dracut-017-39.git20120308
    
    - kill dhclient silently
    - cleanup and fix network config writeout to /run/initramfs/state
    Resolves: rhbz#799989
    - various cleanups

 ...k-kill-dhclient.sh-kill-dhclient-silently.patch |   29 ++
 0023-write-ifcfg.sh-cleanups.patch                 |   34 ++
 ....sh-add-UUID-.-and-save-the-lease-files-w.patch |   62 ++++
 ...ive-updates-failing-because-of-lib-symlin.patch |   40 +++
 ...et-genrules.sh-move-ifup-in-the-initqueue.patch |   47 +++
 ...tions.sh-check-for-.kernelmodseen-dir-bef.patch |   24 ++
 0028-ifup.sh-check-for-m-to-set-manualup.patch     |   22 ++
 0029-get-rid-of-tmp-root.info.patch                |  130 ++++++++
 ...FS-use-ext3-on-server-and-fsck-after-kill.patch |   47 +++
 ...ue-to-hookdirs-and-create-them-in-dracut-.patch |   60 ++++
 ...-factored-out-the-ugly-cdrom-polling-in-t.patch |   90 ++++++
 0033-move-wait_for_loginit-to-dracut-lib.sh.patch  |   88 ++++++
 ...actor-stuff-from-netroot-parse-ip-opts-to.patch |  322 ++++++++++++++++++++
 0035-add-initqueue-env-and-online-hook.patch       |  109 +++++++
 0036-TEST-20-NFS-test.sh-fsck-with-a.patch         |   22 ++
 0037-95iscsi-iscsiroot.sh-fix-for-empty-root.patch |   50 +++
 0038-dracut.spec-add-98pollcdrom.patch             |   21 ++
 dracut.spec                                        |   26 ++-
 18 files changed, 1222 insertions(+), 1 deletions(-)
---
diff --git a/0022-40network-kill-dhclient.sh-kill-dhclient-silently.patch b/0022-40network-kill-dhclient.sh-kill-dhclient-silently.patch
new file mode 100644
index 0000000..78e0946
--- /dev/null
+++ b/0022-40network-kill-dhclient.sh-kill-dhclient-silently.patch
@@ -0,0 +1,29 @@
+From a3f00efc99ac4736be3a1e24259d691bb9a9e19d Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Thu, 8 Mar 2012 10:58:16 +0100
+Subject: [PATCH] 40network/kill-dhclient.sh: kill dhclient silently
+
+---
+ modules.d/40network/kill-dhclient.sh |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/40network/kill-dhclient.sh b/modules.d/40network/kill-dhclient.sh
+index 2f834c1..78060f5 100755
+--- a/modules.d/40network/kill-dhclient.sh
++++ b/modules.d/40network/kill-dhclient.sh
+@@ -5,7 +5,7 @@
+ for f in /tmp/dhclient.*.pid; do
+     [ -e $f ] || continue
+     read PID < $f;
+-    kill $PID;
++    kill $PID >/dev/null 2>&1
+ done
+ 
+ sleep 0.1
+@@ -13,5 +13,5 @@ sleep 0.1
+ for f in /tmp/dhclient.*.pid; do
+     [ -e $f ] || continue
+     read PID < $f;
+-    kill -9 $PID;
++    kill -9 $PID >/dev/null 2>&1
+ done
diff --git a/0023-write-ifcfg.sh-cleanups.patch b/0023-write-ifcfg.sh-cleanups.patch
new file mode 100644
index 0000000..75234a2
--- /dev/null
+++ b/0023-write-ifcfg.sh-cleanups.patch
@@ -0,0 +1,34 @@
+From d37ad6aea04932196df06139b27d3869385617f9 Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Wed, 7 Mar 2012 17:21:53 -0500
+Subject: [PATCH] write-ifcfg.sh: cleanups
+
+mkdir -p creates intermediate directories and never returns an error, so
+we don't need to create the intermediate directories ourself.
+---
+ modules.d/45ifcfg/write-ifcfg.sh |   15 +++++++--------
+ 1 files changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
+index d633a96..0f431e3 100755
+--- a/modules.d/45ifcfg/write-ifcfg.sh
++++ b/modules.d/45ifcfg/write-ifcfg.sh
+@@ -134,11 +134,10 @@ for netif in $IFACES ; do
+ done
+ 
+ # Pass network opts
+-[ -d /run/initramfs ] || mkdir -m 0755 -p /run/initramfs
+-cp /tmp/net.* /run/initramfs/ >/dev/null 2>&1
+-for i in /run/initramfs/state /run/initramfs/state/etc/ /run/initramfs/state/etc/sysconfig /run/initramfs/state/etc/sysconfig/network-scripts; do
+-    [ -d $i ] || mkdir -m 0755 -p $i
+-done
+-cp /tmp/net.$netif.resolv.conf /run/initramfs/state/etc/ >/dev/null 2>&1
+-echo "files /etc/sysconfig/network-scripts" > /run/initramfs/rwtab
+-cp -a -t /run/initramfs/state/etc/sysconfig/network-scripts/ /tmp/ifcfg/* >/dev/null 2>&1
++mkdir -m 0755 -p /run/initramfs/state/etc/sysconfig/network-scripts
++echo "files /etc/sysconfig/network-scripts" >> /run/initramfs/rwtab
++{
++    cp /tmp/net.* /run/initramfs/
++    cp /tmp/net.$netif.resolv.conf /run/initramfs/state/etc/
++    cp -a -t /run/initramfs/state/etc/sysconfig/network-scripts/ /tmp/ifcfg/*
++} > /dev/null 2>&1
diff --git a/0024-write-ifcfg.sh-add-UUID-.-and-save-the-lease-files-w.patch b/0024-write-ifcfg.sh-add-UUID-.-and-save-the-lease-files-w.patch
new file mode 100644
index 0000000..67388e4
--- /dev/null
+++ b/0024-write-ifcfg.sh-add-UUID-.-and-save-the-lease-files-w.patch
@@ -0,0 +1,62 @@
+From 66666c670a462548df4ea4c8069d54b8c309ecf4 Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Wed, 7 Mar 2012 17:21:54 -0500
+Subject: [PATCH] write-ifcfg.sh: add UUID=.. and save the lease files with
+ the same uuid
+
+As described in https://bugzilla.redhat.com/show_bug.cgi?id=541410#c2,
+if you want NetworkManager to take over an interface that you're using
+for NFS root (or other network root device), you need to:
+
+a) set UUID=<uuid> in ifcfg-<iface>, and
+b) save the lease file as /var/lib/dhclient-<uuid>-<iface>.lease
+
+This patch should make write-ifcfg handle both these things.
+---
+ modules.d/45ifcfg/write-ifcfg.sh |    7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
+index 0f431e3..fe986df 100755
+--- a/modules.d/45ifcfg/write-ifcfg.sh
++++ b/modules.d/45ifcfg/write-ifcfg.sh
+@@ -18,11 +18,13 @@ if [ -e /tmp/bridge.info ]; then
+ fi
+ 
+ mkdir -m 0755 -p /tmp/ifcfg/
++mkdir -m 0755 -p /tmp/ifcfg-leases/
+ 
+ for netif in $IFACES ; do
+     # bridge?
+     unset bridge
+     unset bond
++    uuid=$(cat /proc/sys/kernel/random/uuid)
+     if [ "$netif" = "$bridgename" ]; then
+         bridge=yes
+     elif [ "$netif" = "$bondname" ]; then
+@@ -35,10 +37,12 @@ for netif in $IFACES ; do
+         echo "DEVICE=$netif"
+         echo "ONBOOT=yes"
+         echo "NETBOOT=yes"
++        echo "UUID=$uuid"
+         if [ -f /tmp/net.$netif.lease ]; then
+             strstr "$ip" '*:*:*' &&
+             echo "DHCPV6C=yes"
+             echo "BOOTPROTO=dhcp"
++            cp /tmp/net.$netif.lease /tmp/ifcfg-leases/dhclient-$uuid-$netif.lease
+         else
+             echo "BOOTPROTO=none"
+         # If we've booted with static ip= lines, the override file is there
+@@ -135,9 +139,12 @@ done
+ 
+ # Pass network opts
+ mkdir -m 0755 -p /run/initramfs/state/etc/sysconfig/network-scripts
++mkdir -m 0755 -p /run/initramfs/state/var/lib/dhclient
+ echo "files /etc/sysconfig/network-scripts" >> /run/initramfs/rwtab
++echo "files /var/lib/dhclient" >> /run/initramfs/rwtab
+ {
+     cp /tmp/net.* /run/initramfs/
+     cp /tmp/net.$netif.resolv.conf /run/initramfs/state/etc/
+     cp -a -t /run/initramfs/state/etc/sysconfig/network-scripts/ /tmp/ifcfg/*
++    cp /tmp/ifcfg-leases/* /run/initramfs/state/var/lib/dhclient
+ } > /dev/null 2>&1
diff --git a/0025-fix-apply-live-updates-failing-because-of-lib-symlin.patch b/0025-fix-apply-live-updates-failing-because-of-lib-symlin.patch
new file mode 100644
index 0000000..b3b431f
--- /dev/null
+++ b/0025-fix-apply-live-updates-failing-because-of-lib-symlin.patch
@@ -0,0 +1,40 @@
+From b43d651511df184fcdc1677e11166bae2f61073a Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Wed, 7 Mar 2012 17:22:18 -0500
+Subject: [PATCH] fix apply-live-updates failing because of /lib symlink
+
+Since cp won't copy a directory over a symlink, any updates that were
+supposed to go into e.g. /lib would get dropped if you had /updates/lib
+as an actual directory, but the target system had /lib->/usr/lib.
+---
+ modules.d/90dmsquash-live/apply-live-updates.sh |   20 ++++++++++++++------
+ 1 files changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/90dmsquash-live/apply-live-updates.sh b/modules.d/90dmsquash-live/apply-live-updates.sh
+index f840d1a..144e8b9 100755
+--- a/modules.d/90dmsquash-live/apply-live-updates.sh
++++ b/modules.d/90dmsquash-live/apply-live-updates.sh
+@@ -1,9 +1,17 @@
+ #!/bin/sh
+-if [ -b /dev/mapper/live-rw ]; then
+-    if [ -d /updates ]; then
+-        echo "Applying updates to live image..."
++
++. /tmp/root.info
++
++if [ -b /dev/mapper/live-rw ] && [ -d /updates ]; then
++    info "Applying updates to live image..."
++    # avoid overwriting symlinks (e.g. /lib -> /usr/lib) with directories
++    (
+         cd /updates
+-        /bin/cp -a -t $NEWROOT .
+-        cd -
+-    fi
++        find . -depth -type d | while read dir; do
++            [ -d "$NEWROOT/$dir" ] || mkdir -p "$NEWROOT/$dir"
++        done
++        find . -depth \! -type d | while read file; do
++            cp -a "$file" "$NEWROOT/$file"
++        done
++    )
+ fi
diff --git a/0026-40network-net-genrules.sh-move-ifup-in-the-initqueue.patch b/0026-40network-net-genrules.sh-move-ifup-in-the-initqueue.patch
new file mode 100644
index 0000000..23e49ff
--- /dev/null
+++ b/0026-40network-net-genrules.sh-move-ifup-in-the-initqueue.patch
@@ -0,0 +1,47 @@
+From af8c8ed9f651b1617296a2d7654a981f006c5ad3 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 11:39:11 +0100
+Subject: [PATCH] 40network/net-genrules.sh: move ifup in the initqueue
+
+---
+ modules.d/40network/net-genrules.sh |   12 ++++++------
+ 1 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
+index 323d185..6c46d9a 100755
+--- a/modules.d/40network/net-genrules.sh
++++ b/modules.d/40network/net-genrules.sh
+@@ -36,27 +36,27 @@ fix_bootif() {
+     if [ -n "$BOOTIF" ] ; then
+         BOOTIF=$(fix_bootif "$BOOTIF")
+         if [ -n "$netroot" ]; then
+-            printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/ifup $env{INTERFACE}"\n' "$BOOTIF"
++            printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE}"\n' "$BOOTIF"
+         else
+-            printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/ifup $env{INTERFACE} -m"\n' "$BOOTIF"
++            printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE} -m"\n' "$BOOTIF"
+         fi
+ 
+     # If we have to handle multiple interfaces, handle only them.
+     elif [ -n "$IFACES" ] ; then
+         for iface in $IFACES ; do
+             if [ -n "$netroot" ]; then
+-                printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/ifup $env{INTERFACE}"\n' "$iface"
++                printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE}"\n' "$iface"
+             else
+-                printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/ifup $env{INTERFACE} -m"\n' "$iface"
++                printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE} -m"\n' "$iface"
+             fi
+         done
+ 
+     # Default: We don't know the interface to use, handle all
+     else
+         if [ -n "$netroot" ]; then
+-            printf 'SUBSYSTEM=="net", OPTIONS+="event_timeout=360", RUN+="/sbin/ifup $env{INTERFACE}"\n'
++            printf 'SUBSYSTEM=="net", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE}"\n'
+         else
+-            printf 'SUBSYSTEM=="net", OPTIONS+="event_timeout=360", RUN+="/sbin/ifup $env{INTERFACE} -m"\n'
++            printf 'SUBSYSTEM=="net", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE} -m"\n'
+         fi
+     fi
+ 
diff --git a/0027-dracut-functions.sh-check-for-.kernelmodseen-dir-bef.patch b/0027-dracut-functions.sh-check-for-.kernelmodseen-dir-bef.patch
new file mode 100644
index 0000000..1923c0a
--- /dev/null
+++ b/0027-dracut-functions.sh-check-for-.kernelmodseen-dir-bef.patch
@@ -0,0 +1,24 @@
+From 6a2c23d12521c564a3c8bbfc349c677b0e9ac3ad Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 12:01:49 +0100
+Subject: [PATCH] dracut-functions.sh: check for .kernelmodseen dir, before
+ using it
+
+---
+ dracut-functions.sh |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 20fc6e1..5cf24a7 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -994,7 +994,8 @@ install_kmod_with_fw() {
+         fi
+     fi
+ 
+-    > "$initdir/.kernelmodseen/${1##*/}"
++    [ -d "$initdir/.kernelmodseen" ] && \
++        > "$initdir/.kernelmodseen/${1##*/}"
+ 
+     inst_simple "$1" "/lib/modules/$kernel/${1##*/lib/modules/$kernel/}" \
+         || return $?
diff --git a/0028-ifup.sh-check-for-m-to-set-manualup.patch b/0028-ifup.sh-check-for-m-to-set-manualup.patch
new file mode 100644
index 0000000..790ddc4
--- /dev/null
+++ b/0028-ifup.sh-check-for-m-to-set-manualup.patch
@@ -0,0 +1,22 @@
+From 5861184e87e9d9164c093d3600d85c670c828886 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 12:03:38 +0100
+Subject: [PATCH] ifup.sh: check for "-m" to set manualup
+
+---
+ modules.d/40network/ifup.sh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index b138e8e..b55362c 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -50,7 +50,7 @@ fi
+ 
+ # disable manual ifup while netroot is set for simplifying our logic
+ # in netroot case we prefer netroot to bringup $netif automaticlly
+-[ -n "$2" ] && [ -z "$netroot" ] && manualup="$2"
++[ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2"
+ [ -z "$netroot" ] && [ -z "$manualup" ] && exit 0
+ [ -n "$manualup" ] && >/tmp/net.$netif.manualup
+ 
diff --git a/0029-get-rid-of-tmp-root.info.patch b/0029-get-rid-of-tmp-root.info.patch
new file mode 100644
index 0000000..554baab
--- /dev/null
+++ b/0029-get-rid-of-tmp-root.info.patch
@@ -0,0 +1,130 @@
+From 2c0317213ebe3a6cd0f0db5fb5b7a3da0d42cdda Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 14:25:57 +0100
+Subject: [PATCH] get rid of /tmp/root.info
+
+---
+ modules.d/40network/ifup.sh                     |    2 --
+ modules.d/40network/netroot.sh                  |    2 --
+ modules.d/90dmsquash-live/apply-live-updates.sh |    2 --
+ modules.d/90dmsquash-live/dmsquash-live-root.sh |    2 --
+ modules.d/90livenet/livenetroot.sh              |    1 -
+ modules.d/95iscsi/iscsiroot.sh                  |    5 +----
+ modules.d/99base/init.sh                        |   11 ++---------
+ 7 files changed, 3 insertions(+), 22 deletions(-)
+
+diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
+index b55362c..ffae15c 100755
+--- a/modules.d/40network/ifup.sh
++++ b/modules.d/40network/ifup.sh
+@@ -45,8 +45,6 @@ fi
+ # bail immediately if the interface is already up
+ # or we don't need the network
+ [ -f "/tmp/net.$netif.up" ] && exit 0
+-[ -f "/tmp/root.info" ] || exit 0
+-. /tmp/root.info
+ 
+ # disable manual ifup while netroot is set for simplifying our logic
+ # in netroot case we prefer netroot to bringup $netif automaticlly
+diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh
+index f44a97b..c5ee84c 100755
+--- a/modules.d/40network/netroot.sh
++++ b/modules.d/40network/netroot.sh
+@@ -15,8 +15,6 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+ # instead of real netroot; If It's called without $2, then there's
+ # no sense in doing something if no (net)root info is available
+ # or root is already there
+-[ -e /tmp/root.info ] || exit 1
+-. /tmp/root.info
+ if [ -z "$2" ]; then
+     [ -d $NEWROOT/proc ] && exit 0
+     [ -z "$netroot" ] && exit 1
+diff --git a/modules.d/90dmsquash-live/apply-live-updates.sh b/modules.d/90dmsquash-live/apply-live-updates.sh
+index 144e8b9..61da4bf 100755
+--- a/modules.d/90dmsquash-live/apply-live-updates.sh
++++ b/modules.d/90dmsquash-live/apply-live-updates.sh
+@@ -1,7 +1,5 @@
+ #!/bin/sh
+ 
+-. /tmp/root.info
+-
+ if [ -b /dev/mapper/live-rw ] && [ -d /updates ]; then
+     info "Applying updates to live image..."
+     # avoid overwriting symlinks (e.g. /lib -> /usr/lib) with directories
+diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+index e3606cf..8a21e44 100755
+--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh
++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh
+@@ -5,8 +5,6 @@
+ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+ type det_fs >/dev/null 2>&1 || . /lib/fs-lib.sh
+ 
+-[ -f /tmp/root.info ] && . /tmp/root.info
+-
+ PATH=/usr/sbin:/usr/bin:/sbin:/bin
+ 
+ if getargbool 0 rd.live.debug -y rdlivedebug; then
+diff --git a/modules.d/90livenet/livenetroot.sh b/modules.d/90livenet/livenetroot.sh
+index bc62760..617be62 100755
+--- a/modules.d/90livenet/livenetroot.sh
++++ b/modules.d/90livenet/livenetroot.sh
+@@ -2,7 +2,6 @@
+ # livenetroot - fetch a live image from the network and run it
+ 
+ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
+-[ -f /tmp/root.info ] && . /tmp/root.info
+ 
+ . /lib/url-lib.sh
+ 
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 7b8f63e..1bd6dd3 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -37,9 +37,6 @@ iroot=${iroot#iscsi:}
+ # figured out a way how to check whether this is built-in or not
+ modprobe crc32c 2>/dev/null
+ 
+-
+-[ -e /tmp/root.info ] && . /tmp/root.info
+-
+ [ -e /sys/module/bnx2i ] && iscsiuio
+ 
+ if getargbool 0 rd.iscsi.firmware -y iscsi_firmware ; then
+@@ -54,7 +51,7 @@ fi
+ 
+ unset iscsi_initiator iscsi_target_name iscsi_target_ip iscsi_target_port
+ unset iscsi_target_group iscsi_protocol iscsirw iscsi_lun
+-unset iscsi_username iscsi_password 
++unset iscsi_username iscsi_password
+ unset iscsi_in_username iscsi_in_password
+ 
+ # override conf settings by command line options
+diff --git a/modules.d/99base/init.sh b/modules.d/99base/init.sh
+index d197497..96fd5f2 100755
+--- a/modules.d/99base/init.sh
++++ b/modules.d/99base/init.sh
+@@ -131,15 +131,7 @@ source_hook cmdline
+ [ -z "$root" ] && die "No or empty root= argument"
+ [ -z "$rootok" ] && die "Don't know how to handle 'root=$root'"
+ 
+-# Network root scripts may need updated root= options,
+-# so deposit them where they can see them (udev purges the env)
+-{
+-    echo "root='$root'"
+-    echo "rflags='$rflags'"
+-    echo "fstype='$fstype'"
+-    echo "netroot='$netroot'"
+-    echo "NEWROOT='$NEWROOT'"
+-} > /tmp/root.info
++export root rflags fstype netroot NEWROOT
+ 
+ # pre-udev scripts run before udev starts, and are run only once.
+ getarg 'rd.break=pre-udev' 'rdbreak=pre-udev' && emergency_shell -n pre-udev "Break before pre-udev"
+@@ -314,6 +306,7 @@ else
+ fi
+ 
+ export RD_TIMESTAMP
++export -n root rflags fstype netroot NEWROOT
+ set +x # Turn off debugging for this section
+ # Clean up the environment
+ for i in $(export -p); do
diff --git a/0030-TEST-20-NFS-use-ext3-on-server-and-fsck-after-kill.patch b/0030-TEST-20-NFS-use-ext3-on-server-and-fsck-after-kill.patch
new file mode 100644
index 0000000..05fa279
--- /dev/null
+++ b/0030-TEST-20-NFS-use-ext3-on-server-and-fsck-after-kill.patch
@@ -0,0 +1,47 @@
+From b8a9dc2d3fdd7596d4d968f761f56f6ced06e9db Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 13:58:48 +0100
+Subject: [PATCH] TEST-20-NFS: use ext3 on server and fsck after kill
+
+---
+ test/TEST-20-NFS/test.sh |   11 ++++++-----
+ 1 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh
+index c6a9670..fcd424f 100755
+--- a/test/TEST-20-NFS/test.sh
++++ b/test/TEST-20-NFS/test.sh
+@@ -12,8 +12,9 @@ run_server() {
+     # Start server first
+     echo "NFS TEST SETUP: Starting DHCP/NFS server"
+ 
++    fsck $TESTDIR/server.ext3 || return 1
+     $testdir/run-qemu \
+-	-hda $TESTDIR/server.ext2 -m 256M -nographic \
++	-hda $TESTDIR/server.ext3 -m 256M -nographic \
+ 	-net nic,macaddr=52:54:00:12:34:56,model=e1000 \
+ 	-net socket,listen=127.0.0.1:12320 \
+ 	-serial $SERIAL \
+@@ -203,10 +204,10 @@ test_run() {
+ 
+ test_setup() {
+     # Make server root
+-    dd if=/dev/null of=$TESTDIR/server.ext2 bs=1M seek=60
+-    mke2fs -F $TESTDIR/server.ext2
++    dd if=/dev/null of=$TESTDIR/server.ext3 bs=1M seek=60
++    mke2fs -j -F $TESTDIR/server.ext3
+     mkdir $TESTDIR/mnt
+-    sudo mount -o loop $TESTDIR/server.ext2 $TESTDIR/mnt
++    sudo mount -o loop $TESTDIR/server.ext3 $TESTDIR/mnt
+ 
+     kernel=$KVERSION
+     (
+@@ -307,7 +308,7 @@ test_setup() {
+     # Make server's dracut image
+     $basedir/dracut.sh -l -i $TESTDIR/overlay / \
+ 	-m "dash udev-rules base rootfs-block debug kernel-modules" \
+-	-d "piix ide-gd_mod ata_piix ext2 sd_mod e1000" \
++	-d "piix ide-gd_mod ata_piix ext3 sd_mod e1000" \
+ 	-f $TESTDIR/initramfs.server $KVERSION || return 1
+ 
+     # Make client's dracut image
diff --git a/0031-add-initqueue-to-hookdirs-and-create-them-in-dracut-.patch b/0031-add-initqueue-to-hookdirs-and-create-them-in-dracut-.patch
new file mode 100644
index 0000000..4ec1d08
--- /dev/null
+++ b/0031-add-initqueue-to-hookdirs-and-create-them-in-dracut-.patch
@@ -0,0 +1,60 @@
+From 4fed3ddf16431524f07fc8bbad6aec913b6c0777 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 14:46:11 +0100
+Subject: [PATCH] add "initqueue/*" to hookdirs and create them in dracut
+ itsself
+
+now we can just use
+    inst_hook initqueue/settled 99 "$moddir/pollcdrom.sh"
+---
+ dracut-functions.sh              |    6 ++++--
+ dracut.sh                        |    3 +++
+ modules.d/99base/module-setup.sh |    4 ----
+ 3 files changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 5cf24a7..05c1d3a 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -34,8 +34,10 @@ fi
+ 
+ # export standard hookdirs
+ [[ $hookdirs ]] || {
+-    hookdirs="cmdline pre-udev pre-trigger netroot initqueue pre-mount"
+-    hookdirs+=" pre-pivot mount emergency shutdown-emergency shutdown cleanup"
++    hookdirs="cmdline pre-udev pre-trigger netroot "
++    hookdirs+="initqueue initqueue/settled initqueue/finished initqueue/timeout "
++    hookdirs+="pre-mount pre-pivot mount "
++    hookdirs+="emergency shutdown-emergency shutdown cleanup "
+     export hookdirs
+ }
+ 
+diff --git a/dracut.sh b/dracut.sh
+index 88691ae..417008c 100755
+--- a/dracut.sh
++++ b/dracut.sh
+@@ -674,6 +674,9 @@ fi
+ 
+ if [[ $kernel_only != yes ]]; then
+     mkdir -p "${initdir}/etc/cmdline.d"
++    for _d in $hookdirs; do
++        mkdir -m 0755 -p ${initdir}/lib/dracut/hooks/$_d
++    done
+ fi
+ 
+ mkdir -p "$initdir/.kernelmodseen"
+diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh
+index fd92644..5a97770 100755
+--- a/modules.d/99base/module-setup.sh
++++ b/modules.d/99base/module-setup.sh
+@@ -33,10 +33,6 @@ install() {
+     [ -e "${initdir}/lib" ] || mkdir -m 0755 -p ${initdir}/lib
+     mkdir -m 0755 -p ${initdir}/lib/dracut
+     mkdir -m 0755 -p ${initdir}/lib/dracut/hooks
+-    for _d in $hookdirs emergency \
+-        initqueue initqueue/timeout initqueue/finished initqueue/settled; do
+-        mkdir -m 0755 -p ${initdir}/lib/dracut/hooks/$_d
+-    done
+ 
+     mkdir -p ${initdir}/tmp
+ 
diff --git a/0032-98pollcdrom-factored-out-the-ugly-cdrom-polling-in-t.patch b/0032-98pollcdrom-factored-out-the-ugly-cdrom-polling-in-t.patch
new file mode 100644
index 0000000..8091033
--- /dev/null
+++ b/0032-98pollcdrom-factored-out-the-ugly-cdrom-polling-in-t.patch
@@ -0,0 +1,90 @@
+From 74db72dd0b22973cfd9f3cbe832b09096c4e7ab9 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 14:53:22 +0100
+Subject: [PATCH] 98pollcdrom: factored out the ugly cdrom polling in the main
+ loop
+
+---
+ modules.d/98pollcdrom/module-setup.sh |   16 ++++++++++++++++
+ modules.d/98pollcdrom/pollcdrom.sh    |   23 +++++++++++++++++++++++
+ modules.d/99base/init.sh              |   14 --------------
+ 3 files changed, 39 insertions(+), 14 deletions(-)
+ create mode 100755 modules.d/98pollcdrom/module-setup.sh
+ create mode 100644 modules.d/98pollcdrom/pollcdrom.sh
+
+diff --git a/modules.d/98pollcdrom/module-setup.sh b/modules.d/98pollcdrom/module-setup.sh
+new file mode 100755
+index 0000000..e80ae16
+--- /dev/null
++++ b/modules.d/98pollcdrom/module-setup.sh
+@@ -0,0 +1,16 @@
++#!/bin/bash
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++
++check() {
++    return 255
++}
++
++depends() {
++    return 0
++}
++
++install() {
++    inst_hook initqueue/settled 99 "$moddir/pollcdrom.sh"
++}
++
+diff --git a/modules.d/98pollcdrom/pollcdrom.sh b/modules.d/98pollcdrom/pollcdrom.sh
+new file mode 100644
+index 0000000..4abc9d7
+--- /dev/null
++++ b/modules.d/98pollcdrom/pollcdrom.sh
+@@ -0,0 +1,23 @@
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++#
++# Licensed under the GPLv2
++#
++# Copyright 2008-2012, Red Hat, Inc.
++# Harald Hoyer <harald at redhat.com>
++
++if [ ! -e /sys/module/block/parameters/events_dfl_poll_msecs ]; then
++    # if the kernel does not support autopolling
++    # then we have to do a
++    # dirty hack for some cdrom drives,
++    # which report no medium for quiet
++    # some time.
++    for cdrom in /sys/block/sr*; do
++        [ -e "$cdrom" ] || continue
++        # skip, if cdrom medium was already found
++        strstr "$(udevadm info --query=env --path=${cdrom##/sys})" \
++            ID_CDROM_MEDIA && continue
++        echo change > "$cdrom/uevent"
++    done
++fi
+diff --git a/modules.d/99base/init.sh b/modules.d/99base/init.sh
+index 96fd5f2..f6e4027 100755
+--- a/modules.d/99base/init.sh
++++ b/modules.d/99base/init.sh
+@@ -199,20 +199,6 @@ while :; do
+     # no more udev jobs and queues empty.
+     sleep 0.5
+ 
+-    if [ ! -e /sys/module/block/parameters/events_dfl_poll_msecs ]; then
+-        # if the kernel does not support autopolling
+-        # then we have to do a
+-        # dirty hack for some cdrom drives,
+-        # which report no medium for quiet
+-        # some time.
+-        for cdrom in /sys/block/sr*; do
+-            [ -e "$cdrom" ] || continue
+-            # skip, if cdrom medium was already found
+-            strstr "$(udevadm info --query=env --path=${cdrom##/sys})" \
+-                ID_CDROM_MEDIA && continue
+-            echo change > "$cdrom/uevent"
+-        done
+-    fi
+ 
+     if [ $main_loop -gt $(($RDRETRY/2)) ]; then
+         for job in $hookdir/initqueue/timeout/*.sh; do
diff --git a/0033-move-wait_for_loginit-to-dracut-lib.sh.patch b/0033-move-wait_for_loginit-to-dracut-lib.sh.patch
new file mode 100644
index 0000000..e022898
--- /dev/null
+++ b/0033-move-wait_for_loginit-to-dracut-lib.sh.patch
@@ -0,0 +1,88 @@
+From 4d518aec8614cafe96f585458f97e43d80fe3aa5 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Fri, 2 Mar 2012 15:08:25 +0100
+Subject: [PATCH] move wait_for_loginit() to dracut-lib.sh
+
+---
+ modules.d/99base/dracut-lib.sh |   28 ++++++++++++++++++++++++++++
+ modules.d/99base/init.sh       |   28 ----------------------------
+ 2 files changed, 28 insertions(+), 28 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index c31854e..80e093b 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -754,6 +754,34 @@ need_shutdown() {
+     >/run/initramfs/.need_shutdown
+ }
+ 
++wait_for_loginit()
++{
++    set +x
++    [ "$RD_DEBUG" = "yes" ] || return
++    [ -e /run/initramfs/loginit.pipe ] || return
++    echo "DRACUT_LOG_END"
++    exec 0<>/dev/console 1<>/dev/console 2<>/dev/console
++        # wait for loginit
++    i=0
++    while [ $i -lt 10 ]; do
++        if [ ! -e /run/initramfs/loginit.pipe ]; then
++            j=$(jobs)
++            [ -z "$j" ] && break
++            [ -z "${j##*Running*}" ] || break
++        fi
++        sleep 0.1
++        i=$(($i+1))
++    done
++
++    if [ $i -eq 10 ]; then
++        kill %1 >/dev/null 2>&1
++        kill $(while read line;do echo $line;done</run/initramfs/loginit.pid)
++    fi
++
++    set -x
++    rm -f /run/initramfs/loginit.pipe /run/initramfs/loginit.pid
++}
++
+ emergency_shell()
+ {
+     local _ctty
+diff --git a/modules.d/99base/init.sh b/modules.d/99base/init.sh
+index f6e4027..5d51c9d 100755
+--- a/modules.d/99base/init.sh
++++ b/modules.d/99base/init.sh
+@@ -10,34 +10,6 @@
+ 
+ export -p > /tmp/export.orig
+ 
+-wait_for_loginit()
+-{
+-    set +x
+-    [ "$RD_DEBUG" = "yes" ] || return
+-    [ -e /run/initramfs/loginit.pipe ] || return
+-    echo "DRACUT_LOG_END"
+-    exec 0<>/dev/console 1<>/dev/console 2<>/dev/console
+-        # wait for loginit
+-    i=0
+-    while [ $i -lt 10 ]; do
+-        if [ ! -e /run/initramfs/loginit.pipe ]; then
+-            j=$(jobs)
+-            [ -z "$j" ] && break
+-            [ -z "${j##*Running*}" ] || break
+-        fi
+-        sleep 0.1
+-        i=$(($i+1))
+-    done
+-
+-    if [ $i -eq 10 ]; then
+-        kill %1 >/dev/null 2>&1
+-        kill $(while read line;do echo $line;done</run/initramfs/loginit.pid)
+-    fi
+-
+-    set -x
+-    rm -f /run/initramfs/loginit.pipe /run/initramfs/loginit.pid
+-}
+-
+ NEWROOT="/sysroot"
+ [ -d $NEWROOT ] || mkdir -p -m 0755 $NEWROOT
+ 
diff --git a/0034-network-refactor-stuff-from-netroot-parse-ip-opts-to.patch b/0034-network-refactor-stuff-from-netroot-parse-ip-opts-to.patch
new file mode 100644
index 0000000..e490f78
--- /dev/null
+++ b/0034-network-refactor-stuff-from-netroot-parse-ip-opts-to.patch
@@ -0,0 +1,322 @@
+From 25aa3c5a6eb48d14972b5c658cc7231d8f100ea8 Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Tue, 6 Mar 2012 18:25:24 -0500
+Subject: [PATCH] network: refactor stuff from netroot/parse-ip-opts to
+ net-lib
+
+Add new functions: all_ifaces_up, get_netroot_ip, ip_is_local, ifdown,
+setup_net, set_ifname, ibft_to_cmdline
+
+Use them in netroot.sh and parse-ip-opts.sh.
+
+There's also a couple little unrelated cleanups.
+---
+ modules.d/40network/net-lib.sh       |  108 ++++++++++++++++++++++++++++++++++
+ modules.d/40network/netroot.sh       |   71 ++--------------------
+ modules.d/40network/parse-ip-opts.sh |   46 ++-------------
+ 3 files changed, 120 insertions(+), 105 deletions(-)
+
+diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
+index e3987a4..e51ce94 100644
+--- a/modules.d/40network/net-lib.sh
++++ b/modules.d/40network/net-lib.sh
+@@ -31,3 +31,111 @@ iface_has_link() {
+     [ "$(cat $interface/carrier)" = 1 ] || return 1
+     # XXX Do we need to reset the flags here? anaconda never bothered..
+ }
++
++all_ifaces_up() {
++    local iface="" IFACES=""
++    [ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces
++    for iface in $IFACES; do
++        [ -e /tmp/net.$iface.up ] || return 1
++    done
++}
++
++get_netroot_ip() {
++    local prefix="" server="" rest=""
++    splitsep "$1" ":" prefix server rest
++    case $server in
++        [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) echo "$server"; return 0 ;;
++    esac
++    return 1
++}
++
++ip_is_local() {
++    strstr "$(ip route get $1 2>/dev/null)" " via "
++}
++
++ifdown() {
++    local netif="$1"
++    # ip down/flush ensures that routing info goes away as well
++    ip link set $netif down
++    ip addr flush dev $netif
++    echo "#empty" > /etc/resolv.conf
++    # TODO: send "offline" uevent?
++}
++
++setup_net() {
++    local netif="$1" f="" gw_ip="" netroot_ip="" iface="" IFACES=""
++    [ -e /tmp/net.$netif.up ] || return 1
++    [ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces
++    [ -z "$IFACES" ] && IFACES="$netif"
++    for iface in $IFACES ; do
++        . /tmp/net.$iface.up
++    done
++    # run the scripts written by ifup
++    [ -e /tmp/net.$netif.gw ]            && . /tmp/net.$netif.gw
++    [ -e /tmp/net.$netif.hostname ]      && . /tmp/net.$netif.hostname
++    [ -e /tmp/net.$netif.override ]      && . /tmp/net.$netif.override
++    [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
++    # set up resolv.conf
++    [ -e /tmp/net.$netif.resolv.conf ] && \
++        cp -f /tmp/net.$netif.resolv.conf /etc/resolv.conf
++
++    # Handle STP Timeout: arping the default gateway.
++    # (or the root server, if a) it's local or b) there's no gateway.)
++    # Note: This assumes that if no router is present the
++    # root server is on the same subnet.
++
++    # Get DHCP-provided router IP, or the cmdline-provided "gw=" argument
++    [ -n "$new_routers" ] && gw_ip=${new_routers%%,*}
++    [ -n "$gw" ] && gw_ip=$gw
++
++    # Get the "netroot" IP (if there's an IP address in there)
++    netroot_ip=$(get_netroot_ip $netroot)
++
++    # try netroot if it's local (or there's no gateway)
++    if ip_is_local $netroot_ip || [ -z "$gw_ip" ]; then
++        dest="$netroot_ip"
++    else
++        dest="$gw_ip"
++    fi
++    if [ -n "$dest" ] && ! arping -q -f -w 60 -I $netif $dest ; then
++        info "Resolving $dest via ARP on $netif failed"
++    fi
++}
++
++set_ifname() {
++    local name="$1" mac="$2" num=0 n=""
++    # if it's already set, return the existing name
++    for n in $(getargs ifname=); do
++        strstr "$n" "$mac" && echo ${n%%:*} && return
++    done
++    # otherwise, pick a new name and use that
++    while [ -e /sys/class/$name$num ]; do num=$(($num+1)); done
++    echo "ifname=$name$num:$mac" >> /etc/cmdline.d/45-ifname.conf
++    echo "$name$num"
++}
++
++ibft_to_cmdline() {
++    local iface="" mac="" dev=""
++    local dhcp="" ip="" gw="" mask="" hostname=""
++    modprobe -q iscsi_ibft
++    (
++        for iface in /sys/firmware/ibft/ethernet*; do
++            [ -e ${iface}/mac ] || continue
++            mac=$(read a < ${iface}/mac; echo $a)
++            [ -z "$ifname_mac" ] && continue
++            dev=$(set_ifname ibft $ifname_mac)
++            dhcp=$(read a < ${iface}/dhcp; echo $a)
++            if [ -n "$dhcp" ]; then
++                echo "ip=$dev:dhcp"
++            else
++                ip=$(read a < ${iface}/ip-addr; echo $a)
++                gw=$(read a < ${iface}/gateway; echo $a)
++                mask=$(read a < ${iface}/subnet-mask; echo $a)
++                hostname=$(read a < ${iface}/hostname; echo $a)
++                echo "ip=$ip::$gw:$mask:$hostname:$dev:none"
++            fi
++        done
++    ) >> /etc/cmdline.d/40-ibft.conf
++    # reread cmdline
++    unset CMDLINE
++}
+diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh
+index c5ee84c..ac1c215 100755
+--- a/modules.d/40network/netroot.sh
++++ b/modules.d/40network/netroot.sh
+@@ -3,14 +3,12 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ 
+ PATH=/usr/sbin:/usr/bin:/sbin:/bin
+-type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
++command -v getarg >/dev/null    || . /lib/dracut-lib.sh
++command -v setup_net >/dev/null || . /lib/net-lib.sh
+ 
+ # Huh? Empty $1?
+ [ -z "$1" ] && exit 1
+ 
+-# Huh? No interface config?
+-[ ! -e /tmp/net.$1.up ] && exit 1
+-
+ # [ ! -z $2 ] means this is for manually bringing up network
+ # instead of real netroot; If It's called without $2, then there's
+ # no sense in doing something if no (net)root info is available
+@@ -23,10 +21,7 @@ fi
+ # Let's see if we have to wait for other interfaces
+ # Note: exit works just fine, since the last interface to be
+ #       online'd should see all files
+-[ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces
+-for iface in $IFACES ; do
+-    [ -e /tmp/net.$iface.up ] || exit 1
+-done
++all_ifaces_up || exit 1
+ 
+ # Set or override primary interface
+ netif=$1
+@@ -78,62 +73,13 @@ if [ -z "$2" ]; then
+ fi
+ 
+ # We're here, so we can assume that upping interfaces is now ok
+-[ -z "$IFACES" ] && IFACES="$netif"
+-for iface in $IFACES ; do
+-    . /tmp/net.$iface.up
+-done
+-
+-[ -e /tmp/net.$netif.gw ]          && . /tmp/net.$netif.gw
+-[ -e /tmp/net.$netif.hostname ]    && . /tmp/net.$netif.hostname
+-[ -e /tmp/net.$netif.resolv.conf ] && cp -f /tmp/net.$netif.resolv.conf /etc/resolv.conf
+-
+-# Load interface options
+-[ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override
+-[ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts
+-
+-# Handle STP Timeout: arping the default router if root server is
+-# unknown or not local, or if not available the root server.
+-# Note: This assumes that if no router is present the
+-# root server is on the same subnet.
+-#
+-# TODO There's some netroot variants that don't (yet) have their
+-# server-ip netroot
+-
+-# Get router IP if set
+-[ -n "$new_routers" ] && gw_ip=${new_routers%%,*}
+-[ -n "$gw" ] && gw_ip=$gw
+-# Get root server IP if set
+-if [ -n "$netroot" ]; then
+-    dummy=${netroot#*:}
+-    dummy=${dummy%%:*}
+-    case "$dummy" in
+-        [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) netroot_ip=$dummy;;
+-    esac
+-fi
+-# Default arping dest to router
+-dest="$gw_ip"
+-# Change to arping root server if appropriate
+-if [ -n "$netroot_ip" ]; then
+-    if [ -z "$dest" ]; then
+-         # no gateway so check root server
+-        dest="$netroot_ip"
+-    else
+-        r=$(ip route get "$netroot_ip")
+-        if ! strstr "$r" ' via ' ; then
+-            # local root server, so don't arping gateway
+-            dest="$netroot_ip"
+-        fi
+-    fi
+-fi
+-if [ -n "$dest" ] && ! arping -q -f -w 60 -I $netif $dest ; then
+-    dinfo "Resolving $dest via ARP on $netif failed"
+-fi
++setup_net $netif
+ 
+ # exit in case manually bring up network
+ [ -n "$2" ] && exit 0
+ 
+ # Source netroot hooks before we start the handler
+-source_all $hookdir/netroot
++source_hook netroot
+ 
+ # Run the handler; don't store the root, it may change from device to device
+ # XXX other variables to export?
+@@ -149,11 +95,6 @@ if $handler $netif $netroot $NEWROOT; then
+ else
+     warn "Mounting root via '$netif' failed"
+     # If we're trying with multiple interfaces, put that one down.
+-    # ip down/flush ensures that routeing info goes away as well
+-    if [ -z "$BOOTDEV" ] ; then
+-        ip link set $netif down
+-        ip addr flush dev $netif
+-        echo "#empty" > /etc/resolv.conf
+-    fi
++    [ -z "$BOOTDEV" ] && ifdown $netif
+ fi
+ exit 0
+diff --git a/modules.d/40network/parse-ip-opts.sh b/modules.d/40network/parse-ip-opts.sh
+index c97941e..7851329 100755
+--- a/modules.d/40network/parse-ip-opts.sh
++++ b/modules.d/40network/parse-ip-opts.sh
+@@ -14,7 +14,8 @@
+ # routing,dns,dhcp-options,etc.
+ #
+ 
+-type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
++command -v getarg >/dev/null          || . /lib/dracut-lib.sh
++command -v ibft_to_cmdline >/dev/null || . /lib/net-lib.sh
+ 
+ # Check if ip= lines should be used
+ if getarg ip= >/dev/null ; then
+@@ -52,50 +53,15 @@ if [ -n "$NEEDBOOTDEV" ] ; then
+     [ -z "$BOOTDEV" ] && die "Bootdev argument is empty"
+ fi
+ 
+-if [ "ibft" = "$(getarg ip=)" ]; then
+-    modprobe iscsi_ibft
+-    num=0
+-    (
+-	for iface in /sys/firmware/ibft/ethernet*; do
+-	    [ -e ${iface}/mac ] || continue
+-            ifname_mac=$(read a < ${iface}/mac; echo $a)
+-	    [ -z "$ifname_mac" ] && continue
+-            unset dev
+-            for ifname in $(getargs ifname=); do
+-		if strstr "$ifname" "$ifname_mac"; then
+-		    dev=${ifname%%:*}
+-                    break
+-                fi
+-	    done
+-            if [ -z "$dev" ]; then
+-		ifname_if=ibft$num
+-		num=$(( $num + 1 ))
+-		echo "ifname=$ifname_if:$ifname_mac"
+-		dev=$ifname_if
+-	    fi
+-
+-	    dhcp=$(read a < ${iface}/dhcp; echo $a)
+-	    if [ -n "$dhcp" ]; then
+-		echo "ip=$dev:dhcp"
+-	    else
+-		ip=$(read a < ${iface}/ip-addr; echo $a)
+-		gw=$(read a < ${iface}/gateway; echo $a)
+-		mask=$(read a < ${iface}/subnet-mask; echo $a)
+-		hostname=$(read a < ${iface}/hostname; echo $a)
+-		echo "ip=$ip::$gw:$mask:$hostname:$dev:none"
+-	    fi
+-	done
+-    ) >> /etc/cmdline
+-    # reread cmdline
+-    unset CMDLINE
+-fi
++# If ibft is requested, read ibft vals and write ip=XXX cmdline args
++[ "ibft" = "$(getarg ip=)" ] && ibft_to_cmdline
+ 
+ # Check ip= lines
+ # XXX Would be nice if we could errorcheck ip addresses here as well
+ for p in $(getargs ip=); do
+     ip_to_var $p
+ 
+-    # skip ibft
++    # skip ibft since we did it above
+     [ "$autoconf" = "ibft" ] && continue
+ 
+     # We need to have an ip= line for the specified bootdev
+@@ -111,7 +77,7 @@ for p in $(getargs ip=); do
+     case $autoconf in
+         error) die "Error parsing option 'ip=$p'";;
+         bootp|rarp|both) die "Sorry, ip=$autoconf is currenty unsupported";;
+-        none|off) \
++        none|off)
+             [ -z "$ip" ] && \
+             die "For argument 'ip=$p'\nValue '$autoconf' without static configuration does not make sense"
+             [ -z "$mask" ] && \
diff --git a/0035-add-initqueue-env-and-online-hook.patch b/0035-add-initqueue-env-and-online-hook.patch
new file mode 100644
index 0000000..f2bda1d
--- /dev/null
+++ b/0035-add-initqueue-env-and-online-hook.patch
@@ -0,0 +1,109 @@
+From 6e3cc00f4882edbabea75945308f8ae7c353bf82 Mon Sep 17 00:00:00 2001
+From: Will Woods <wwoods at redhat.com>
+Date: Tue, 6 Mar 2012 18:25:25 -0500
+Subject: [PATCH] add initqueue --env and "online" hook
+
+The "online" hook runs whenever a network interface comes online (that
+is, once it's actually up and configured).
+
+The initqueue --env argument is used to set "$netif" to the name of the
+newly-online network interface.
+---
+ dracut-functions.sh                 |    2 +-
+ modules.d/40network/net-genrules.sh |   24 +++++++++---------------
+ modules.d/99base/initqueue.sh       |   15 +++++++--------
+ 3 files changed, 17 insertions(+), 24 deletions(-)
+
+diff --git a/dracut-functions.sh b/dracut-functions.sh
+index 05c1d3a..f4ccf53 100755
+--- a/dracut-functions.sh
++++ b/dracut-functions.sh
+@@ -35,7 +35,7 @@ fi
+ # export standard hookdirs
+ [[ $hookdirs ]] || {
+     hookdirs="cmdline pre-udev pre-trigger netroot "
+-    hookdirs+="initqueue initqueue/settled initqueue/finished initqueue/timeout "
++    hookdirs+="initqueue initqueue/settled initqueue/online initqueue/finished initqueue/timeout "
+     hookdirs+="pre-mount pre-pivot mount "
+     hookdirs+="emergency shutdown-emergency shutdown cleanup "
+     export hookdirs
+diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
+index 6c46d9a..84fd3ac 100755
+--- a/modules.d/40network/net-genrules.sh
++++ b/modules.d/40network/net-genrules.sh
+@@ -31,33 +31,27 @@ fix_bootif() {
+         IFACES=${bondslaves%% *}
+     fi
+ 
++    ifup='/sbin/ifup $env{INTERFACE}'
++    [ -z "$netroot" ] && ifup="$ifup -m"
++
+     # BOOTIF says everything, use only that one
+     BOOTIF=$(getarg 'BOOTIF=')
+     if [ -n "$BOOTIF" ] ; then
+         BOOTIF=$(fix_bootif "$BOOTIF")
+-        if [ -n "$netroot" ]; then
+-            printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE}"\n' "$BOOTIF"
+-        else
+-            printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE} -m"\n' "$BOOTIF"
+-        fi
++        printf 'ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="%s", RUN+="%s"\n' "$BOOTIF" "/sbin/initqueue --onetime $ifup"
+ 
+     # If we have to handle multiple interfaces, handle only them.
+     elif [ -n "$IFACES" ] ; then
+         for iface in $IFACES ; do
+-            if [ -n "$netroot" ]; then
+-                printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE}"\n' "$iface"
+-            else
+-                printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE} -m"\n' "$iface"
+-            fi
++            printf 'SUBSYSTEM=="net", ENV{INTERFACE}=="%s", RUN+="%s"\n' "$iface" "/sbin/initqueue --onetime $ifup"
+         done
+ 
+     # Default: We don't know the interface to use, handle all
+     else
+-        if [ -n "$netroot" ]; then
+-            printf 'SUBSYSTEM=="net", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE}"\n'
+-        else
+-            printf 'SUBSYSTEM=="net", OPTIONS+="event_timeout=360", RUN+="/sbin/initqueue --onetime /sbin/ifup $env{INTERFACE} -m"\n'
+-        fi
++        printf 'SUBSYSTEM=="net", RUN+="%s"\n' "/sbin/initqueue --onetime $ifup"
+     fi
+ 
++    # Run the "online" hook
++    printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$env{INTERFACE} source_hook initqueue/online"\n'
++
+ } > /etc/udev/rules.d/60-net.rules
+diff --git a/modules.d/99base/initqueue.sh b/modules.d/99base/initqueue.sh
+index 2c06a0b..3387e88 100755
+--- a/modules.d/99base/initqueue.sh
++++ b/modules.d/99base/initqueue.sh
+@@ -25,6 +25,8 @@ while [ $# -gt 0 ]; do
+             unique="yes";;
+         --name)
+             name="$2";shift;;
++        --env)
++            env="$2"; shift;;
+         *)
+             break;;
+     esac
+@@ -43,14 +45,11 @@ shift
+ 
+ [ -x "$exe" ] || exe=$(command -v $exe)
+ 
+-if [ -n "$onetime" ]; then
+-    {
+-        echo '[ -e "$job" ] && rm "$job"'
+-        echo "$exe $@"
+-    } > "/tmp/$$-${job}.sh"
+-else
+-    echo "$exe $@" > "/tmp/$$-${job}.sh"
+-fi
++{
++    [ -n "$onetime" ] && echo '[ -e "$job" ] && rm "$job"'
++    [ -n "$env" ] && echo "$env"
++    echo "$exe $@"
++} > "/tmp/$$-${job}.sh"
+ 
+ mv -f "/tmp/$$-${job}.sh" "$hookdir/initqueue${qname}/${job}.sh"
+ [ -z "$qname" ] && >> $hookdir/initqueue/work
diff --git a/0036-TEST-20-NFS-test.sh-fsck-with-a.patch b/0036-TEST-20-NFS-test.sh-fsck-with-a.patch
new file mode 100644
index 0000000..ad5b997
--- /dev/null
+++ b/0036-TEST-20-NFS-test.sh-fsck-with-a.patch
@@ -0,0 +1,22 @@
+From 0635530dda6e12e2475b43bd65ca4943ce36a7e7 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Thu, 8 Mar 2012 12:25:30 +0100
+Subject: [PATCH] TEST-20-NFS/test.sh: fsck with "-a"
+
+---
+ test/TEST-20-NFS/test.sh |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh
+index fcd424f..a6bde0e 100755
+--- a/test/TEST-20-NFS/test.sh
++++ b/test/TEST-20-NFS/test.sh
+@@ -12,7 +12,7 @@ run_server() {
+     # Start server first
+     echo "NFS TEST SETUP: Starting DHCP/NFS server"
+ 
+-    fsck $TESTDIR/server.ext3 || return 1
++    fsck -a $TESTDIR/server.ext3 || return 1
+     $testdir/run-qemu \
+ 	-hda $TESTDIR/server.ext3 -m 256M -nographic \
+ 	-net nic,macaddr=52:54:00:12:34:56,model=e1000 \
diff --git a/0037-95iscsi-iscsiroot.sh-fix-for-empty-root.patch b/0037-95iscsi-iscsiroot.sh-fix-for-empty-root.patch
new file mode 100644
index 0000000..4a7b94a
--- /dev/null
+++ b/0037-95iscsi-iscsiroot.sh-fix-for-empty-root.patch
@@ -0,0 +1,50 @@
+From f8208d682fad279bebb2019c5df57f8d42b133c6 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Thu, 8 Mar 2012 12:26:00 +0100
+Subject: [PATCH] 95iscsi/iscsiroot.sh: fix for empty $root
+
+---
+ modules.d/95iscsi/iscsiroot.sh |   15 ++++++---------
+ 1 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
+index 1bd6dd3..7fa2715 100755
+--- a/modules.d/95iscsi/iscsiroot.sh
++++ b/modules.d/95iscsi/iscsiroot.sh
+@@ -40,7 +40,7 @@ modprobe crc32c 2>/dev/null
+ [ -e /sys/module/bnx2i ] && iscsiuio
+ 
+ if getargbool 0 rd.iscsi.firmware -y iscsi_firmware ; then
+-    if [ -n "${root%%block:*}" ]; then
++    if [ -z "$root" -o -n "${root%%block:*}" ]; then
+         # if root is not specified try to mount the whole iSCSI LUN
+         printf 'ENV{DEVTYPE}!="partition", SYMLINK=="disk/by-path/*-iscsi-*-*", SYMLINK+="root"\n' >> /etc/udev/rules.d/99-iscsi-root.rules
+         udevadm control --reload
+@@ -167,9 +167,12 @@ handle_netroot()
+ 
+ # FIXME $iscsi_protocol??
+ 
+-    if [ -n "${root%%block:*}" ]; then
+-    # if root is not specified try to mount the whole iSCSI LUN
++    if [ -z "$root" -o -n "${root%%block:*}" ]; then
++        # if root is not specified try to mount the whole iSCSI LUN
+         printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' $iscsi_lun >> /etc/udev/rules.d/99-iscsi-root.rules
++
++        # install mount script
++        echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh
+     fi
+ 
+     # inject new exit_if_exists
+@@ -185,12 +188,6 @@ handle_netroot()
+         ${iscsi_password+-w $iscsi_password} \
+         ${iscsi_in_username+-U $iscsi_in_username} \
+         ${iscsi_in_password+-W $iscsi_in_password} || :
+-
+-# install mount script
+-    if [ -n "${root%%block:*}" ]; then
+-    # if root is not specified try to mount the whole iSCSI LUN
+-        echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh
+-    fi
+ }
+ 
+ # loop over all netroot parameter
diff --git a/0038-dracut.spec-add-98pollcdrom.patch b/0038-dracut.spec-add-98pollcdrom.patch
new file mode 100644
index 0000000..6b9e5aa
--- /dev/null
+++ b/0038-dracut.spec-add-98pollcdrom.patch
@@ -0,0 +1,21 @@
+From d33d60774f38f43053c2cd1811b78c4f1af0fdc9 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Thu, 8 Mar 2012 13:40:21 +0100
+Subject: [PATCH] dracut.spec: add 98pollcdrom
+
+---
+ dracut.spec |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/dracut.spec b/dracut.spec
+index 91b3451..0275af3 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -272,6 +272,7 @@ rm -rf $RPM_BUILD_ROOT
+ %{dracutlibdir}/modules.d/97masterkey
+ %{dracutlibdir}/modules.d/98ecryptfs
+ %{dracutlibdir}/modules.d/98integrity
++%{dracutlibdir}/modules.d/98pollcdrom
+ %{dracutlibdir}/modules.d/98selinux
+ %{dracutlibdir}/modules.d/98syslog
+ %{dracutlibdir}/modules.d/98usrmount
diff --git a/dracut.spec b/dracut.spec
index 5d2d072..f7f3dba 100644
--- a/dracut.spec
+++ b/dracut.spec
@@ -10,7 +10,7 @@
 
 Name: dracut
 Version: 017
-Release: 22.git20120302%{?dist}
+Release: 39.git20120308%{?dist}
 
 Summary: Initramfs generator using udev
 %if 0%{?fedora} || 0%{?rhel}
@@ -45,6 +45,23 @@ Patch18: 0018-dracut-functions.sh-install_kmod_with_fw-delay-.kern.patch
 Patch19: 0019-Fix-correct-nfs-path.patch
 Patch20: 0020-move-emergency_shell-to-dracut-lib.sh.patch
 Patch21: 0021-url-lib-make-nfs-support-optional.patch
+Patch22: 0022-40network-kill-dhclient.sh-kill-dhclient-silently.patch
+Patch23: 0023-write-ifcfg.sh-cleanups.patch
+Patch24: 0024-write-ifcfg.sh-add-UUID-.-and-save-the-lease-files-w.patch
+Patch25: 0025-fix-apply-live-updates-failing-because-of-lib-symlin.patch
+Patch26: 0026-40network-net-genrules.sh-move-ifup-in-the-initqueue.patch
+Patch27: 0027-dracut-functions.sh-check-for-.kernelmodseen-dir-bef.patch
+Patch28: 0028-ifup.sh-check-for-m-to-set-manualup.patch
+Patch29: 0029-get-rid-of-tmp-root.info.patch
+Patch30: 0030-TEST-20-NFS-use-ext3-on-server-and-fsck-after-kill.patch
+Patch31: 0031-add-initqueue-to-hookdirs-and-create-them-in-dracut-.patch
+Patch32: 0032-98pollcdrom-factored-out-the-ugly-cdrom-polling-in-t.patch
+Patch33: 0033-move-wait_for_loginit-to-dracut-lib.sh.patch
+Patch34: 0034-network-refactor-stuff-from-netroot-parse-ip-opts-to.patch
+Patch35: 0035-add-initqueue-env-and-online-hook.patch
+Patch36: 0036-TEST-20-NFS-test.sh-fsck-with-a.patch
+Patch37: 0037-95iscsi-iscsiroot.sh-fix-for-empty-root.patch
+Patch38: 0038-dracut.spec-add-98pollcdrom.patch
 
 
 BuildArch: noarch
@@ -294,6 +311,7 @@ rm -rf $RPM_BUILD_ROOT
 %{dracutlibdir}/modules.d/97masterkey
 %{dracutlibdir}/modules.d/98ecryptfs
 %{dracutlibdir}/modules.d/98integrity
+%{dracutlibdir}/modules.d/98pollcdrom
 %{dracutlibdir}/modules.d/98selinux
 %{dracutlibdir}/modules.d/98syslog
 %{dracutlibdir}/modules.d/98usrmount
@@ -348,6 +366,12 @@ rm -rf $RPM_BUILD_ROOT
 %dir /var/lib/dracut/overlay
 
 %changelog
+* Thu Mar 08 2012 Harald Hoyer <harald at redhat.com> 017-39.git20120308
+- kill dhclient silently
+- cleanup and fix network config writeout to /run/initramfs/state
+Resolves: rhbz#799989
+- various cleanups
+
 * Fri Mar 02 2012 Harald Hoyer <harald at redhat.com> 017-22.git20120302
 - nfs path fixes for live image over nfs
   root=live:nfs://10.10.10.10:/srv/all/install.img ip=dhcp rd.neednet


More information about the scm-commits mailing list