[dracut] "eject" is optional now refined shutdown procedure
Harald Hoyer
harald at fedoraproject.org
Wed Jul 20 19:58:23 UTC 2011
commit f3160a5b6cd3895fd92dcd8deac3f5521168c595
Author: Harald Hoyer <harald at redhat.com>
Date: Wed Jul 20 21:58:17 2011 +0200
"eject" is optional now
refined shutdown procedure
...ut.spec-remove-noreplace-for-01-dist.conf.patch | 22 +++
0002-add-TEST-15-BTRFSRAID.patch | 192 ++++++++++++++++++++
0003-dracut.logrotate-remove-yearly.patch | 21 ++
...gger-create-logfile-with-0600-permissions.patch | 32 ++++
...-90dmsquash-live-optionally-install-eject.patch | 22 +++
0006-enable-shutdown-module-by-default.patch | 35 ++++
...m-dm-shutdown.sh-put-shutdown-in-function.patch | 31 +++
...d-md-shutdown.sh-put-shutdown-in-function.patch | 30 +++
...TEST-10-RAID-extend-test-case-to-shutdown.patch | 99 ++++++++++
...AID-test-init-turn-off-debug-for-shutdown.patch | 21 ++
0011-shutdown-fixed-check_shutdown-loop.patch | 98 ++++++++++
0012-dracut-lib.sh-fixed-getargs.patch | 73 ++++++++
...-dracut-lib.sh-fix-previous-getargs-patch.patch | 24 +++
...D-test-init-add-comment-for-rd.break-shut.patch | 23 +++
dracut.spec | 36 ++++-
15 files changed, 757 insertions(+), 2 deletions(-)
---
diff --git a/0001-dracut.spec-remove-noreplace-for-01-dist.conf.patch b/0001-dracut.spec-remove-noreplace-for-01-dist.conf.patch
new file mode 100644
index 0000000..f01132a
--- /dev/null
+++ b/0001-dracut.spec-remove-noreplace-for-01-dist.conf.patch
@@ -0,0 +1,22 @@
+From 8e702c3d0facbe4f6381068b74efb56bdc0c1653 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 12:39:58 +0200
+Subject: [PATCH] dracut.spec: remove noreplace for 01-dist.conf
+
+---
+ dracut.spec | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/dracut.spec b/dracut.spec
+index 26263d8..30741cd 100644
+--- a/dracut.spec
++++ b/dracut.spec
+@@ -215,7 +215,7 @@ rm -rf $RPM_BUILD_ROOT
+ %{_datadir}/dracut/dracut-logger
+ %config(noreplace) /etc/dracut.conf
+ %if 0%{?fedora} || 0%{?suse_version}
+-%config(noreplace) /etc/dracut.conf.d/01-dist.conf
++%config /etc/dracut.conf.d/01-dist.conf
+ %endif
+ %dir /etc/dracut.conf.d
+ %{_mandir}/man8/dracut.8*
diff --git a/0002-add-TEST-15-BTRFSRAID.patch b/0002-add-TEST-15-BTRFSRAID.patch
new file mode 100644
index 0000000..2f0768a
--- /dev/null
+++ b/0002-add-TEST-15-BTRFSRAID.patch
@@ -0,0 +1,192 @@
+From 54703a719f49b3c4aafb60d49b265e2cde9bb16f Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 14:10:30 +0200
+Subject: [PATCH] add TEST-15-BTRFSRAID
+
+---
+ test/TEST-15-BTRFSRAID/99-idesymlinks.rules | 8 +++
+ test/TEST-15-BTRFSRAID/Makefile | 10 +++
+ test/TEST-15-BTRFSRAID/create-root.sh | 22 +++++++
+ test/TEST-15-BTRFSRAID/hard-off.sh | 3 +
+ test/TEST-15-BTRFSRAID/test-init | 11 ++++
+ test/TEST-15-BTRFSRAID/test.sh | 82 +++++++++++++++++++++++++++
+ 6 files changed, 136 insertions(+), 0 deletions(-)
+ create mode 100644 test/TEST-15-BTRFSRAID/99-idesymlinks.rules
+ create mode 100644 test/TEST-15-BTRFSRAID/Makefile
+ create mode 100755 test/TEST-15-BTRFSRAID/create-root.sh
+ create mode 100755 test/TEST-15-BTRFSRAID/hard-off.sh
+ create mode 100755 test/TEST-15-BTRFSRAID/test-init
+ create mode 100755 test/TEST-15-BTRFSRAID/test.sh
+
+diff --git a/test/TEST-15-BTRFSRAID/99-idesymlinks.rules b/test/TEST-15-BTRFSRAID/99-idesymlinks.rules
+new file mode 100644
+index 0000000..d557790
+--- /dev/null
++++ b/test/TEST-15-BTRFSRAID/99-idesymlinks.rules
+@@ -0,0 +1,8 @@
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hda", SYMLINK+="sda"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hda*", SYMLINK+="sda$env{MINOR}"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdb", SYMLINK+="sdb"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdb*", SYMLINK+="sdb$env{MINOR}"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdc", SYMLINK+="sdc"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdc*", SYMLINK+="sdc$env{MINOR}"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="hdd", SYMLINK+="sdd"
++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", KERNEL=="hdd*", SYMLINK+="sdd$env{MINOR}"
+diff --git a/test/TEST-15-BTRFSRAID/Makefile b/test/TEST-15-BTRFSRAID/Makefile
+new file mode 100644
+index 0000000..bc0ddb6
+--- /dev/null
++++ b/test/TEST-15-BTRFSRAID/Makefile
+@@ -0,0 +1,10 @@
++all:
++ @make -s --no-print-directory -C ../.. all
++ @basedir=../.. testdir=../ ./test.sh --all
++setup:
++ @make --no-print-directory -C ../.. all
++ @basedir=../.. testdir=../ ./test.sh --setup
++clean:
++ @basedir=../.. testdir=../ ./test.sh --clean
++run:
++ @basedir=../.. testdir=../ ./test.sh --run
+diff --git a/test/TEST-15-BTRFSRAID/create-root.sh b/test/TEST-15-BTRFSRAID/create-root.sh
+new file mode 100755
+index 0000000..60dd319
+--- /dev/null
++++ b/test/TEST-15-BTRFSRAID/create-root.sh
+@@ -0,0 +1,22 @@
++#!/bin/sh
++# don't let udev and this script step on eachother's toes
++for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do
++ > "/etc/udev/rules.d/$x"
++done
++udevadm control --reload-rules
++# save a partition at the beginning for future flagging purposes
++sfdisk -C 524288 -H 2 -S 32 -L /dev/sda <<EOF
++,16
++,10240
++,10240
++,10240
++EOF
++mkfs.btrfs -mraid10 -L root /dev/sda2 /dev/sda3 /dev/sda4
++btrfs device scan
++set -e
++mkdir -p /sysroot
++mount /dev/sda4 /sysroot
++cp -a -t /sysroot /source/*
++umount /sysroot
++echo "dracut-root-block-created" >/dev/sda1
++poweroff -f
+diff --git a/test/TEST-15-BTRFSRAID/hard-off.sh b/test/TEST-15-BTRFSRAID/hard-off.sh
+new file mode 100755
+index 0000000..12c3d5a
+--- /dev/null
++++ b/test/TEST-15-BTRFSRAID/hard-off.sh
+@@ -0,0 +1,3 @@
++#!/bin/sh
++getarg rd.shell || poweroff -f
++getarg failme && poweroff -f
+diff --git a/test/TEST-15-BTRFSRAID/test-init b/test/TEST-15-BTRFSRAID/test-init
+new file mode 100755
+index 0000000..8f7cdf3
+--- /dev/null
++++ b/test/TEST-15-BTRFSRAID/test-init
+@@ -0,0 +1,11 @@
++#!/bin/sh
++export PATH=/sbin:/bin:/usr/sbin:/usr/bin
++exec >/dev/console 2>&1
++echo "dracut-root-block-success" >/dev/sda1
++export TERM=linux
++export PS1='initramfs-test:\w\$ '
++[ -f /etc/fstab ] || ln -s /proc/mounts /etc/fstab
++stty sane
++echo "made it to the rootfs! Powering down."
++mount -n -o remount,ro /
++poweroff -f
+diff --git a/test/TEST-15-BTRFSRAID/test.sh b/test/TEST-15-BTRFSRAID/test.sh
+new file mode 100755
+index 0000000..96ecd2e
+--- /dev/null
++++ b/test/TEST-15-BTRFSRAID/test.sh
+@@ -0,0 +1,82 @@
++#!/bin/bash
++TEST_DESCRIPTION="root filesystem on multiple device btrfs"
++
++KVERSION=${KVERSION-$(uname -r)}
++
++# Uncomment this to debug failures
++#DEBUGFAIL="rd.shell"
++DISKIMAGE=/var/tmp/TEST-15-BTRFSRAID-root.img
++test_run() {
++ $testdir/run-qemu -hda $DISKIMAGE -m 256M -nographic \
++ -net none -kernel /boot/vmlinuz-$KVERSION \
++ -append "root=LABEL=root rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
++ -initrd initramfs.testing
++ grep -m 1 -q dracut-root-block-success $DISKIMAGE || return 1
++}
++
++test_setup() {
++ # Create the blank file to use as a root filesystem
++ dd if=/dev/null of=$DISKIMAGE bs=1M seek=1024
++
++ kernel=$KVERSION
++ # Create what will eventually be our root filesystem onto an overlay
++ (
++ initdir=overlay/source
++ . $basedir/dracut-functions
++ dracut_install sh df free ls shutdown poweroff stty cat ps ln ip route \
++ /lib/terminfo/l/linux mount dmesg ifconfig dhclient mkdir cp ping dhclient
++ inst "$basedir/modules.d/40network/dhclient-script" "/sbin/dhclient-script"
++ inst "$basedir/modules.d/40network/ifup" "/sbin/ifup"
++ dracut_install grep
++ inst ./test-init /sbin/init
++ find_binary plymouth >/dev/null && dracut_install plymouth
++ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
++ cp -a /etc/ld.so.conf* $initdir/etc
++ sudo ldconfig -r "$initdir"
++ )
++
++ # second, install the files needed to make the root filesystem
++ (
++ initdir=overlay
++ . $basedir/dracut-functions
++ dracut_install sfdisk mkfs.btrfs poweroff cp umount
++ inst_hook initqueue 01 ./create-root.sh
++ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
++ )
++
++ # create an initramfs that will create the target root filesystem.
++ # We do it this way so that we do not risk trashing the host mdraid
++ # devices, volume groups, encrypted partitions, etc.
++ $basedir/dracut -l -i overlay / \
++ -m "dash btrfs udev-rules base rootfs-block kernel-modules" \
++ -d "piix ide-gd_mod ata_piix btrfs sd_mod" \
++ --nomdadmconf \
++ -f initramfs.makeroot $KVERSION || return 1
++ rm -rf overlay
++ # Invoke KVM and/or QEMU to actually create the target filesystem.
++ $testdir/run-qemu -hda $DISKIMAGE -m 256M -nographic -net none \
++ -kernel "/boot/vmlinuz-$kernel" \
++ -append "root=LABEL=root rw quiet console=ttyS0,115200n81 selinux=0" \
++ -initrd initramfs.makeroot || return 1
++ grep -m 1 -q dracut-root-block-created $DISKIMAGE || return 1
++ (
++ initdir=overlay
++ . $basedir/dracut-functions
++ dracut_install poweroff shutdown
++ inst_hook emergency 000 ./hard-off.sh
++ inst ./cryptroot-ask /sbin/cryptroot-ask
++ inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
++ )
++ sudo $basedir/dracut -l -i overlay / \
++ -o "plymouth network" \
++ -a "debug" \
++ -d "piix ide-gd_mod ata_piix btrfs sd_mod" \
++ -f initramfs.testing $KVERSION || return 1
++}
++
++test_cleanup() {
++ rm -fr overlay mnt
++ rm -f $DISKIMAGE initramfs.makeroot initramfs.testing
++}
++
++. $testdir/test-functions
diff --git a/0003-dracut.logrotate-remove-yearly.patch b/0003-dracut.logrotate-remove-yearly.patch
new file mode 100644
index 0000000..940af79
--- /dev/null
+++ b/0003-dracut.logrotate-remove-yearly.patch
@@ -0,0 +1,21 @@
+From 8a29368bf1077757d160535e381c6f6de32a95fb Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 17:21:02 +0200
+Subject: [PATCH] dracut.logrotate: remove "yearly"
+
+logrotate would only rotate yearly with it
+---
+ dracut.logrotate | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/dracut.logrotate b/dracut.logrotate
+index e7d4f0a..76bdd80 100644
+--- a/dracut.logrotate
++++ b/dracut.logrotate
+@@ -2,6 +2,5 @@
+ missingok
+ notifempty
+ size 30k
+- yearly
+ create 0600 root root
+ }
diff --git a/0004-dracut-logger-create-logfile-with-0600-permissions.patch b/0004-dracut-logger-create-logfile-with-0600-permissions.patch
new file mode 100644
index 0000000..41df5c5
--- /dev/null
+++ b/0004-dracut-logger-create-logfile-with-0600-permissions.patch
@@ -0,0 +1,32 @@
+From e45ffb5d1fddf751f50bc268846d81659120be62 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 17:24:33 +0200
+Subject: [PATCH] dracut-logger: create logfile with 0600 permissions
+
+---
+ dracut-logger | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/dracut-logger b/dracut-logger
+index 3bcce83..a5a3ee9 100755
+--- a/dracut-logger
++++ b/dracut-logger
+@@ -106,6 +106,7 @@ __DRACUT_LOGGER__=1
+ # @warning Function sets global variables @var maxloglvl and @syslogfacility.
+ # See file doc comment for details.
+ dlog_init() {
++ local __oldumask
+ # Skip initialization if it's already done.
+ [ -n "$maxloglvl" ] && return 0
+
+@@ -118,7 +119,10 @@ dlog_init() {
+ if [ -z "$fileloglvl" ]; then
+ [ -w "$logfile" ] && fileloglvl=4 || fileloglvl=0
+ elif [ $fileloglvl -gt 0 ]; then
++ __oldumask=$(umask)
++ umask 0377
+ ! [ -e "$logfile" ] && >"$logfile"
++ umask $__oldumask
+ if [ -w "$logfile" -a -f "$logfile" ]; then
+ # Mark new run in the log file
+ echo >>"$logfile"
diff --git a/0005-90dmsquash-live-optionally-install-eject.patch b/0005-90dmsquash-live-optionally-install-eject.patch
new file mode 100644
index 0000000..96636b7
--- /dev/null
+++ b/0005-90dmsquash-live-optionally-install-eject.patch
@@ -0,0 +1,22 @@
+From 34b22d6049e416c12f75e53bfc8a142024751d0e Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 17:49:29 +0200
+Subject: [PATCH] 90dmsquash-live: optionally install eject
+
+---
+ modules.d/90dmsquash-live/module-setup.sh | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/modules.d/90dmsquash-live/module-setup.sh b/modules.d/90dmsquash-live/module-setup.sh
+index e1a8996..8ed633f 100755
+--- a/modules.d/90dmsquash-live/module-setup.sh
++++ b/modules.d/90dmsquash-live/module-setup.sh
+@@ -27,7 +27,7 @@ install() {
+ inst losetup
+ inst grep
+
+- dracut_install eject
++ dracut_install -o eject
+
+ inst blockdev
+ type -P checkisomd5 >/dev/null && inst checkisomd5
diff --git a/0006-enable-shutdown-module-by-default.patch b/0006-enable-shutdown-module-by-default.patch
new file mode 100644
index 0000000..cc1784e
--- /dev/null
+++ b/0006-enable-shutdown-module-by-default.patch
@@ -0,0 +1,35 @@
+From 2560da6be28e244ddf5c84ab3ada69c1dfacc796 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 19:04:54 +0200
+Subject: [PATCH] enable shutdown module by default
+
+---
+ dracut.conf.d/fedora.conf.example | 2 +-
+ modules.d/99shutdown/module-setup.sh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/dracut.conf.d/fedora.conf.example b/dracut.conf.d/fedora.conf.example
+index 8ca67d4..eddbf0f 100644
+--- a/dracut.conf.d/fedora.conf.example
++++ b/dracut.conf.d/fedora.conf.example
+@@ -2,6 +2,6 @@
+
+ # i18n
+ i18n_vars="/etc/sysconfig/keyboard:KEYTABLE-KEYMAP /etc/sysconfig/i18n:SYSFONT-FONT,FONTACM-FONT_MAP,FONT_UNIMAP"
+-add_dracutmodules+=" rpmversion shutdown "
++add_dracutmodules+=" rpmversion "
+ stdloglvl=3
+ prefix=/run/initramfs
+diff --git a/modules.d/99shutdown/module-setup.sh b/modules.d/99shutdown/module-setup.sh
+index c4d2bb5..ae402ef 100755
+--- a/modules.d/99shutdown/module-setup.sh
++++ b/modules.d/99shutdown/module-setup.sh
+@@ -3,7 +3,7 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+
+ check() {
+- return 255
++ return 0
+ }
+
+ depends() {
diff --git a/0007-90dm-dm-shutdown.sh-put-shutdown-in-function.patch b/0007-90dm-dm-shutdown.sh-put-shutdown-in-function.patch
new file mode 100644
index 0000000..1193bda
--- /dev/null
+++ b/0007-90dm-dm-shutdown.sh-put-shutdown-in-function.patch
@@ -0,0 +1,31 @@
+From 4456861f7edc8861a32bdd8ca3d3e49f602837e8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 19:06:08 +0200
+Subject: [PATCH] 90dm/dm-shutdown.sh: put shutdown in function
+
+---
+ modules.d/90dm/dm-shutdown.sh | 17 +++++++++++++++--
+ 1 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/90dm/dm-shutdown.sh b/modules.d/90dm/dm-shutdown.sh
+index 026eb26..3e668f8 100644
+--- a/modules.d/90dm/dm-shutdown.sh
++++ b/modules.d/90dm/dm-shutdown.sh
+@@ -1,2 +1,15 @@
+-echo "Disassembling device-mapper devices"
+-dmsetup -v remove_all
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++_do_dm_shutdown() {
++ local ret
++ info "Disassembling device-mapper devices"
++ dmsetup -v remove_all
++ ret=$?
++#info "dmsetup ls --tree"
++#dmsetup ls --tree 2>&1 | vinfo
++ return $ret
++}
++
++_do_dm_shutdown
++
diff --git a/0008-90mdraid-md-shutdown.sh-put-shutdown-in-function.patch b/0008-90mdraid-md-shutdown.sh-put-shutdown-in-function.patch
new file mode 100644
index 0000000..cf046c2
--- /dev/null
+++ b/0008-90mdraid-md-shutdown.sh-put-shutdown-in-function.patch
@@ -0,0 +1,30 @@
+From 8e448cadf9fe979ac951b3ca6b5d3a5eecc150c2 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 19:06:26 +0200
+Subject: [PATCH] 90mdraid/md-shutdown.sh: put shutdown in function
+
+---
+ modules.d/90mdraid/md-shutdown.sh | 16 ++++++++++++++--
+ 1 files changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/90mdraid/md-shutdown.sh b/modules.d/90mdraid/md-shutdown.sh
+index f07f621..aa89bf6 100644
+--- a/modules.d/90mdraid/md-shutdown.sh
++++ b/modules.d/90mdraid/md-shutdown.sh
+@@ -1,2 +1,14 @@
+-echo "Disassembling mdraid devices."
+-mdadm -v --stop --scan
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=8 sw=4 sts=4 et filetype=sh
++_do_md_shutdown() {
++ local ret
++ info "Disassembling mdraid devices."
++ mdadm -v --stop --scan
++ ret=$?
++#info "cat /proc/mdstat"
++# cat /proc/mdstat | vinfo
++ return $ret
++}
++
++_do_md_shutdown
diff --git a/0009-TEST-10-RAID-extend-test-case-to-shutdown.patch b/0009-TEST-10-RAID-extend-test-case-to-shutdown.patch
new file mode 100644
index 0000000..20937be
--- /dev/null
+++ b/0009-TEST-10-RAID-extend-test-case-to-shutdown.patch
@@ -0,0 +1,99 @@
+From ceaf49d735b2395897253ae05f6a3b55e09eb252 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 19:08:25 +0200
+Subject: [PATCH] TEST-10-RAID: extend test case to shutdown
+
+---
+ test/TEST-10-RAID/test-init | 13 +++++++++++--
+ test/TEST-10-RAID/test.sh | 17 +++++++++--------
+ 2 files changed, 20 insertions(+), 10 deletions(-)
+
+diff --git a/test/TEST-10-RAID/test-init b/test/TEST-10-RAID/test-init
+index 8f7cdf3..029084a 100755
+--- a/test/TEST-10-RAID/test-init
++++ b/test/TEST-10-RAID/test-init
+@@ -1,11 +1,20 @@
+ #!/bin/sh
+ export PATH=/sbin:/bin:/usr/sbin:/usr/bin
++strstr() { [ "${1#*$2*}" != "$1" ]; }
++CMDLINE=$(while read line; do echo $line;done < /proc/cmdline)
++plymouth --quit
+ exec >/dev/console 2>&1
+ echo "dracut-root-block-success" >/dev/sda1
+ export TERM=linux
+ export PS1='initramfs-test:\w\$ '
+-[ -f /etc/fstab ] || ln -s /proc/mounts /etc/fstab
++[ -f /etc/mtab ] || ln -sfn /proc/mounts /etc/mtab
++[ -f /etc/fstab ] || ln -sfn /proc/mounts /etc/fstab
+ stty sane
+-echo "made it to the rootfs! Powering down."
++echo "made it to the rootfs!"
++strstr "$CMDLINE" "rd.shell" && sh -i
++echo "Powering down."
+ mount -n -o remount,ro /
++if [ -e /lib/systemd/systemd-shutdown ]; then
++ exec /lib/systemd/systemd-shutdown poweroff
++fi
+ poweroff -f
+diff --git a/test/TEST-10-RAID/test.sh b/test/TEST-10-RAID/test.sh
+index 0b3fc0c..fe95437 100755
+--- a/test/TEST-10-RAID/test.sh
++++ b/test/TEST-10-RAID/test.sh
+@@ -5,18 +5,18 @@ KVERSION=${KVERSION-$(uname -r)}
+
+ # Uncomment this to debug failures
+ #DEBUGFAIL="rd.shell"
+-
++DISKIMAGE=/var/tmp/TEST-10-RAID-root.img
+ test_run() {
+- $testdir/run-qemu -hda root.ext2 -m 256M -nographic \
++ $testdir/run-qemu -hda $DISKIMAGE -m 256M -nographic \
+ -net none -kernel /boot/vmlinuz-$KVERSION \
+ -append "root=/dev/dracut/root rw quiet rd.retry=3 rd.info console=ttyS0,115200n81 selinux=0 rd.debug $DEBUGFAIL" \
+ -initrd initramfs.testing
+- grep -m 1 -q dracut-root-block-success root.ext2 || return 1
++ grep -m 1 -q dracut-root-block-success $DISKIMAGE || return 1
+ }
+
+ test_setup() {
+ # Create the blank file to use as a root filesystem
+- dd if=/dev/zero of=root.ext2 bs=1M count=40
++ dd if=/dev/null of=$DISKIMAGE bs=1M seek=40
+
+ kernel=$KVERSION
+ # Create what will eventually be our root filesystem onto an overlay
+@@ -28,9 +28,10 @@ test_setup() {
+ inst "$basedir/modules.d/40network/dhclient-script" "/sbin/dhclient-script"
+ inst "$basedir/modules.d/40network/ifup" "/sbin/ifup"
+ dracut_install grep
++ dracut_install /lib/systemd/systemd-shutdown
+ inst ./test-init /sbin/init
+ find_binary plymouth >/dev/null && dracut_install plymouth
+- (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp )
++ (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp run)
+ cp -a /etc/ld.so.conf* $initdir/etc
+ sudo ldconfig -r "$initdir"
+ )
+@@ -54,11 +55,11 @@ test_setup() {
+ -f initramfs.makeroot $KVERSION || return 1
+ rm -rf overlay
+ # Invoke KVM and/or QEMU to actually create the target filesystem.
+- $testdir/run-qemu -hda root.ext2 -m 256M -nographic -net none \
++ $testdir/run-qemu -hda $DISKIMAGE -m 256M -nographic -net none \
+ -kernel "/boot/vmlinuz-$kernel" \
+ -append "root=/dev/dracut/root rw rootfstype=ext2 quiet console=ttyS0,115200n81 selinux=0" \
+ -initrd initramfs.makeroot || return 1
+- grep -m 1 -q dracut-root-block-created root.ext2 || return 1
++ grep -m 1 -q dracut-root-block-created $DISKIMAGE || return 1
+ (
+ initdir=overlay
+ . $basedir/dracut-functions
+@@ -76,7 +77,7 @@ test_setup() {
+
+ test_cleanup() {
+ rm -fr overlay mnt
+- rm -f root.ext2 initramfs.makeroot initramfs.testing
++ rm -f $DISKIMAGE initramfs.makeroot initramfs.testing
+ }
+
+ . $testdir/test-functions
diff --git a/0010-TEST-10-RAID-test-init-turn-off-debug-for-shutdown.patch b/0010-TEST-10-RAID-test-init-turn-off-debug-for-shutdown.patch
new file mode 100644
index 0000000..76f00a9
--- /dev/null
+++ b/0010-TEST-10-RAID-test-init-turn-off-debug-for-shutdown.patch
@@ -0,0 +1,21 @@
+From 00d89f51701a89543c67715beedc70b903244f08 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 21:10:58 +0200
+Subject: [PATCH] TEST-10-RAID/test-init: turn off debug for shutdown
+
+---
+ test/TEST-10-RAID/test-init | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/test/TEST-10-RAID/test-init b/test/TEST-10-RAID/test-init
+index 029084a..4c8c9e1 100755
+--- a/test/TEST-10-RAID/test-init
++++ b/test/TEST-10-RAID/test-init
+@@ -14,6 +14,7 @@ echo "made it to the rootfs!"
+ strstr "$CMDLINE" "rd.shell" && sh -i
+ echo "Powering down."
+ mount -n -o remount,ro /
++echo " rd.debug=0 " > /run/initramfs/etc/cmdline
+ if [ -e /lib/systemd/systemd-shutdown ]; then
+ exec /lib/systemd/systemd-shutdown poweroff
+ fi
diff --git a/0011-shutdown-fixed-check_shutdown-loop.patch b/0011-shutdown-fixed-check_shutdown-loop.patch
new file mode 100644
index 0000000..c723f0d
--- /dev/null
+++ b/0011-shutdown-fixed-check_shutdown-loop.patch
@@ -0,0 +1,98 @@
+From f47e0234987e7e6cfb2439e90658cb5c3b8bdef8 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 21:11:36 +0200
+Subject: [PATCH] shutdown: fixed check_shutdown loop
+
+---
+ modules.d/90dm/dm-shutdown.sh | 11 ++++++-----
+ modules.d/90mdraid/md-shutdown.sh | 9 ++++++---
+ modules.d/99shutdown/shutdown | 24 ++++++++++++++----------
+ 3 files changed, 26 insertions(+), 18 deletions(-)
+
+diff --git a/modules.d/90dm/dm-shutdown.sh b/modules.d/90dm/dm-shutdown.sh
+index 3e668f8..80d80d0 100644
+--- a/modules.d/90dm/dm-shutdown.sh
++++ b/modules.d/90dm/dm-shutdown.sh
+@@ -3,13 +3,14 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ _do_dm_shutdown() {
+ local ret
++ local final=$1
+ info "Disassembling device-mapper devices"
+ dmsetup -v remove_all
+ ret=$?
+-#info "dmsetup ls --tree"
+-#dmsetup ls --tree 2>&1 | vinfo
++ if [ "x$final" != "x" ]; then
++ info "dmsetup ls --tree"
++ dmsetup ls --tree 2>&1 | vinfo
++ fi
+ return $ret
+ }
+-
+-_do_dm_shutdown
+-
++_do_dm_shutdown $1
+diff --git a/modules.d/90mdraid/md-shutdown.sh b/modules.d/90mdraid/md-shutdown.sh
+index aa89bf6..bc36166 100644
+--- a/modules.d/90mdraid/md-shutdown.sh
++++ b/modules.d/90mdraid/md-shutdown.sh
+@@ -3,12 +3,15 @@
+ # ex: ts=8 sw=4 sts=4 et filetype=sh
+ _do_md_shutdown() {
+ local ret
++ local final=$1
+ info "Disassembling mdraid devices."
+ mdadm -v --stop --scan
+ ret=$?
+-#info "cat /proc/mdstat"
+-# cat /proc/mdstat | vinfo
++ if [ "x$final" != "x" ]; then
++ info "cat /proc/mdstat"
++ cat /proc/mdstat | vinfo
++ fi
+ return $ret
+ }
+
+-_do_md_shutdown
++_do_md_shutdown $1
+diff --git a/modules.d/99shutdown/shutdown b/modules.d/99shutdown/shutdown
+index bff29b9..a31a95d 100755
+--- a/modules.d/99shutdown/shutdown
++++ b/modules.d/99shutdown/shutdown
+@@ -64,21 +64,25 @@ while [ $_cnt -le 40 ]; do
+ done
+ [ $_cnt -ge 40 ] && umount_a
+
+-check_finished() {
+- local f
+- for f in $hookdir/shutdown/*.sh; do
+- [ -e "$f" ] || continue
+- ( . "$f" ) || return 1
++_check_shutdown() {
++ local __f
++ local __s=1
++ for __f in $hookdir/shutdown/*.sh; do
++ [ -e "$__f" ] || continue
++ ( . "$__f" $1 )
++ if [ $? -eq 0 ]; then
++ rm -f $__f
++ __s=0
++ fi
+ done
+- return 0
++ return $__s
+ }
+
+ _cnt=0
+-while [ $_cnt -le 40 ]; do
+- check_finished 2>/dev/null && break
+- _cnt=$(($_cnt+1))
++while _check_shutdown; do
++:
+ done
+-[ $_cnt -ge 40 ] && check_finished
++_check_shutdown final
+
+ getarg 'rd.break=shutdown' && emergency_shell -n cmdline "Break before shutdown"
+ [ "$1" = "reboot" ] && reboot -f -d -n --no-wall
diff --git a/0012-dracut-lib.sh-fixed-getargs.patch b/0012-dracut-lib.sh-fixed-getargs.patch
new file mode 100644
index 0000000..7f9cfc2
--- /dev/null
+++ b/0012-dracut-lib.sh-fixed-getargs.patch
@@ -0,0 +1,73 @@
+From 9e7f4955895c1064e3bdd03f5f781efc9b98d5d6 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 21:12:17 +0200
+Subject: [PATCH] dracut-lib.sh: fixed getargs()
+
+if $1 has a "=<value>", we want the exact match
+if cmdline argument has no "=<value>", we assume "=1"
+---
+ modules.d/99base/dracut-lib.sh | 31 ++++++++++++++++++++++++-------
+ 1 files changed, 24 insertions(+), 7 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index 10025bd..c2202f1 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -45,19 +45,36 @@ _getcmdline() {
+ }
+
+ _dogetarg() {
+- local _o _val
++ local _o _val _doecho
+ unset _val
+ unset _o
++ unset _doecho
+ _getcmdline
+
+ for _o in $CMDLINE; do
+- if [ "$_o" = "$1" ]; then
+- return 0;
++ if [ "${_o%%=*}" = "${1%=}" ]; then
++ if [ -n "${1#*=}" -a "${1#*=*}" != "${1}" ]; then
++ # if $1 has a "=<value>", we want the exact match
++ if [ "$_o" = "$1" ]; then
++ _val="1";
++ unset _doecho
++ fi
++ continue
++ fi
++
++ if [ "${_o#*=}" = "$_o" ]; then
++ # if cmdline argument has no "=<value>", we assume "=1"
++ _val="1";
++ unset _doecho
++ continue
++ fi
++
++ _val=${_o#*=};
++ _doecho=1
+ fi
+- [ "${_o%%=*}" = "${1%=}" ] && _val=${_o#*=};
+ done
+ if [ -n "$_val" ]; then
+- echo $_val;
++ [ "x$_doecho" != "x" ] && echo $_val;
+ return 0;
+ fi
+ return 1;
+@@ -67,13 +84,13 @@ getarg() {
+ set +x
+ while [ $# -gt 0 ]; do
+ case $1 in
+- -y) if _dogetarg $2; then
++ -y) if _dogetarg $2 >/dev/null; then
+ echo 1
+ [ "$RD_DEBUG" = "yes" ] && set -x
+ return 0
+ fi
+ shift 2;;
+- -n) if _dogetarg $2; then
++ -n) if _dogetarg $2 >/dev/null; then
+ echo 0;
+ [ "$RD_DEBUG" = "yes" ] && set -x
+ return 1
diff --git a/0013-99base-dracut-lib.sh-fix-previous-getargs-patch.patch b/0013-99base-dracut-lib.sh-fix-previous-getargs-patch.patch
new file mode 100644
index 0000000..487ec9b
--- /dev/null
+++ b/0013-99base-dracut-lib.sh-fix-previous-getargs-patch.patch
@@ -0,0 +1,24 @@
+From b1b678427e0a158487a2a3ef5a1be39f891a1cc3 Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 21:38:07 +0200
+Subject: [PATCH] 99base/dracut-lib.sh: fix previous getargs patch
+
+patch 9e7f4955895c1064e3bdd03f5f781efc9b98d5d6 ignored
+"getargs key=value"
+---
+ modules.d/99base/dracut-lib.sh | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
+index c2202f1..6807b53 100755
+--- a/modules.d/99base/dracut-lib.sh
++++ b/modules.d/99base/dracut-lib.sh
+@@ -52,7 +52,7 @@ _dogetarg() {
+ _getcmdline
+
+ for _o in $CMDLINE; do
+- if [ "${_o%%=*}" = "${1%=}" ]; then
++ if [ "${_o%%=*}" = "${1%%=*}" ]; then
+ if [ -n "${1#*=}" -a "${1#*=*}" != "${1}" ]; then
+ # if $1 has a "=<value>", we want the exact match
+ if [ "$_o" = "$1" ]; then
diff --git a/0014-TEST-10-RAID-test-init-add-comment-for-rd.break-shut.patch b/0014-TEST-10-RAID-test-init-add-comment-for-rd.break-shut.patch
new file mode 100644
index 0000000..ddf8f97
--- /dev/null
+++ b/0014-TEST-10-RAID-test-init-add-comment-for-rd.break-shut.patch
@@ -0,0 +1,23 @@
+From 8570b544e96d150263c639b9411270488a95ad2b Mon Sep 17 00:00:00 2001
+From: Harald Hoyer <harald at redhat.com>
+Date: Wed, 20 Jul 2011 21:40:50 +0200
+Subject: [PATCH] TEST-10-RAID/test-init: add comment for rd.break=shutdown
+
+---
+ test/TEST-10-RAID/test-init | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/test/TEST-10-RAID/test-init b/test/TEST-10-RAID/test-init
+index 4c8c9e1..02c0d1d 100755
+--- a/test/TEST-10-RAID/test-init
++++ b/test/TEST-10-RAID/test-init
+@@ -14,7 +14,8 @@ echo "made it to the rootfs!"
+ strstr "$CMDLINE" "rd.shell" && sh -i
+ echo "Powering down."
+ mount -n -o remount,ro /
+-echo " rd.debug=0 " > /run/initramfs/etc/cmdline
++#echo " rd.break=shutdown " >> /run/initramfs/etc/cmdline
++echo " rd.debug=0 " >> /run/initramfs/etc/cmdline
+ if [ -e /lib/systemd/systemd-shutdown ]; then
+ exec /lib/systemd/systemd-shutdown poweroff
+ fi
diff --git a/dracut.spec b/dracut.spec
index 7a11602..4638b23 100644
--- a/dracut.spec
+++ b/dracut.spec
@@ -8,7 +8,7 @@
Name: dracut
Version: 011
-Release: 1
+Release: 15.git20110720
Summary: Initramfs generator using udev
%if 0%{?fedora}
@@ -22,6 +22,20 @@ URL: https://dracut.wiki.kernel.org/
# Source can be generated by
# http://git.kernel.org/?p=boot/dracut/dracut.git;a=snapshot;h=%{version};sf=tgz
Source0: http://www.kernel.org/pub/linux/utils/boot/dracut/dracut-%{version}.tar.bz2
+Patch1: 0001-dracut.spec-remove-noreplace-for-01-dist.conf.patch
+Patch2: 0002-add-TEST-15-BTRFSRAID.patch
+Patch3: 0003-dracut.logrotate-remove-yearly.patch
+Patch4: 0004-dracut-logger-create-logfile-with-0600-permissions.patch
+Patch5: 0005-90dmsquash-live-optionally-install-eject.patch
+Patch6: 0006-enable-shutdown-module-by-default.patch
+Patch7: 0007-90dm-dm-shutdown.sh-put-shutdown-in-function.patch
+Patch8: 0008-90mdraid-md-shutdown.sh-put-shutdown-in-function.patch
+Patch9: 0009-TEST-10-RAID-extend-test-case-to-shutdown.patch
+Patch10: 0010-TEST-10-RAID-test-init-turn-off-debug-for-shutdown.patch
+Patch11: 0011-shutdown-fixed-check_shutdown-loop.patch
+Patch12: 0012-dracut-lib.sh-fixed-getargs.patch
+Patch13: 0013-99base-dracut-lib.sh-fix-previous-getargs-patch.patch
+Patch14: 0014-TEST-10-RAID-test-init-add-comment-for-rd.break-shut.patch
BuildArch: noarch
@@ -156,6 +170,20 @@ This package contains tools to assemble the local initrd and host configuration.
%prep
%setup -q -n %{name}-%{version}
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
%build
@@ -217,7 +245,7 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/dracut/dracut-logger
%config(noreplace) /etc/dracut.conf
%if 0%{?fedora} || 0%{?suse_version}
-%config(noreplace) /etc/dracut.conf.d/01-dist.conf
+%config /etc/dracut.conf.d/01-dist.conf
%endif
%dir /etc/dracut.conf.d
%{_mandir}/man8/dracut.8*
@@ -290,6 +318,10 @@ rm -rf $RPM_BUILD_ROOT
%dir /var/lib/dracut/overlay
%changelog
+* Wed Jul 20 2011 Harald Hoyer <harald at redhat.com> 011-15.git20110720
+- "eject" is optional now
+- refined shutdown procedure
+
* Mon Jul 18 2011 Harald Hoyer <harald at redhat.com> 011-1
- version 011
More information about the scm-commits
mailing list