dracut-017-39.git20120308

- kill dhclient silently
- cleanup and fix network config writeout to /run/initramfs/state
Resolves: rhbz#799989
- various cleanups
This commit is contained in:
Harald Hoyer 2012-03-08 13:52:09 +01:00
parent 65a3b7477c
commit ee76a087a9
18 changed files with 1222 additions and 1 deletions

View File

@ -0,0 +1,29 @@
From a3f00efc99ac4736be3a1e24259d691bb9a9e19d Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,34 @@
From d37ad6aea04932196df06139b27d3869385617f9 Mon Sep 17 00:00:00 2001
From: Will Woods <wwoods@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

View File

@ -0,0 +1,62 @@
From 66666c670a462548df4ea4c8069d54b8c309ecf4 Mon Sep 17 00:00:00 2001
From: Will Woods <wwoods@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

View File

@ -0,0 +1,40 @@
From b43d651511df184fcdc1677e11166bae2f61073a Mon Sep 17 00:00:00 2001
From: Will Woods <wwoods@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

View File

@ -0,0 +1,47 @@
From af8c8ed9f651b1617296a2d7654a981f006c5ad3 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,24 @@
From 6a2c23d12521c564a3c8bbfc349c677b0e9ac3ad Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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 $?

View File

@ -0,0 +1,22 @@
From 5861184e87e9d9164c093d3600d85c670c828886 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,130 @@
From 2c0317213ebe3a6cd0f0db5fb5b7a3da0d42cdda Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,47 @@
From b8a9dc2d3fdd7596d4d968f761f56f6ced06e9db Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,60 @@
From 4fed3ddf16431524f07fc8bbad6aec913b6c0777 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,90 @@
From 74db72dd0b22973cfd9f3cbe832b09096c4e7ab9 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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@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

View File

@ -0,0 +1,88 @@
From 4d518aec8614cafe96f585458f97e43d80fe3aa5 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,322 @@
From 25aa3c5a6eb48d14972b5c658cc7231d8f100ea8 Mon Sep 17 00:00:00 2001
From: Will Woods <wwoods@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" ] && \

View File

@ -0,0 +1,109 @@
From 6e3cc00f4882edbabea75945308f8ae7c353bf82 Mon Sep 17 00:00:00 2001
From: Will Woods <wwoods@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

View File

@ -0,0 +1,22 @@
From 0635530dda6e12e2475b43bd65ca4943ce36a7e7 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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 \

View File

@ -0,0 +1,50 @@
From f8208d682fad279bebb2019c5df57f8d42b133c6 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -0,0 +1,21 @@
From d33d60774f38f43053c2cd1811b78c4f1af0fdc9 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@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

View File

@ -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@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@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