From 64b87c0c955a171fd6b5b504708fe42f0da74f54 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 19 2015 16:07:17 +0000 Subject: import dracut-033-359.el7 --- diff --git a/SOURCES/0241-do-not-symlink-var-log-to-run-log.patch b/SOURCES/0241-do-not-symlink-var-log-to-run-log.patch new file mode 100644 index 0000000..0a00e8b --- /dev/null +++ b/SOURCES/0241-do-not-symlink-var-log-to-run-log.patch @@ -0,0 +1,86 @@ +From 9eb6db5b9ac5372793aa2fc6f479a2a82a369695 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 1 Dec 2014 12:36:20 +0100 +Subject: [PATCH] do not symlink /var/log to /run/log + +some programs e.g. systemd-journald expect a directory in /var/log as +the marker to do some actions. Here journald tries to flush +/run/log/journal to /var/log/journal, if the directory is seen. + +/var/log is now a symlink to /run/initramfs/log. + +(cherry picked from commit 99d4fd6bb791ca8ce07e07e13b58445f3e20894a) +--- + dracut.sh | 1 - + modules.d/98systemd/dracut-tmpfiles.conf | 3 +++ + modules.d/98systemd/module-setup.sh | 5 +++++ + modules.d/99base/dracut-lib.sh | 11 +++++++++++ + 4 files changed, 19 insertions(+), 1 deletion(-) + create mode 100644 modules.d/98systemd/dracut-tmpfiles.conf + +diff --git a/dracut.sh b/dracut.sh +index 74c59a0..27c2bf4 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1217,7 +1217,6 @@ if [[ $kernel_only != yes ]]; then + + ln -sfn ../run "$initdir/var/run" + ln -sfn ../run/lock "$initdir/var/lock" +- ln -sfn ../run/log "$initdir/var/log" + else + for d in lib "$libdir"; do + [[ -e "${initdir}${prefix}/$d" ]] && continue +diff --git a/modules.d/98systemd/dracut-tmpfiles.conf b/modules.d/98systemd/dracut-tmpfiles.conf +new file mode 100644 +index 0000000..3c21ce8 +--- /dev/null ++++ b/modules.d/98systemd/dracut-tmpfiles.conf +@@ -0,0 +1,3 @@ ++d /run/initramfs 0755 root root - ++d /run/initramfs/log 0755 root root - ++L /var/log - - - - ../run/initramfs/log +diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh +index f62f551..aae0319 100755 +--- a/modules.d/98systemd/module-setup.sh ++++ b/modules.d/98systemd/module-setup.sh +@@ -121,6 +121,8 @@ install() { + $systemdsystemunitdir/slices.target \ + $systemdsystemunitdir/system.slice \ + \ ++ $tmpfilesdir/systemd.conf \ ++ \ + journalctl systemctl echo swapoff systemd-cgls systemd-tmpfiles + + inst_multiple -o \ +@@ -230,6 +232,9 @@ install() { + ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/initrd.target.wants/${i}" + done + ++ inst_simple "$moddir/dracut-tmpfiles.conf" "$tmpfilesdir/dracut-tmpfiles.conf" ++ ++ + mkdir -p "$initdir/etc/systemd" + # turn off RateLimit for journal + { +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index b0ac08a..b490e82 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -4,6 +4,17 @@ + + export DRACUT_SYSTEMD + export NEWROOT ++if [ -n "$NEWROOT" ]; then ++ [ -d $NEWROOT ] || mkdir -p -m 0755 $NEWROOT ++fi ++ ++if ! [ -d /run/initramfs ]; then ++ mkdir -p -m 0755 /run/initramfs/log ++ ln -sfn /run/initramfs/log /var/log ++fi ++ ++[ -d /run/lock ] || mkdir -p -m 0755 /run/lock ++[ -d /run/log ] || mkdir -p -m 0755 /run/log + + debug_off() { + set +x diff --git a/SOURCES/0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch b/SOURCES/0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch new file mode 100644 index 0000000..201ab36 --- /dev/null +++ b/SOURCES/0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch @@ -0,0 +1,40 @@ +From cf3098064c490486e867c389509a11908661fe9a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 1 Dec 2014 12:34:54 +0100 +Subject: [PATCH] dracut.sh: add $tmpfilesdir to install files to + /usr/lib/tmpfiles.d + +(cherry picked from commit 3a04bddeed15c810865aa49a2575bf13e651272d) +--- + dracut.sh | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/dracut.sh b/dracut.sh +index 27c2bf4..6e56af5 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1152,6 +1152,14 @@ fi + + [[ -d "$systemdsystemconfdir" ]] || systemdsystemconfdir=/etc/systemd/system + ++[[ -d $tmpfilesdir ]] \ ++ || tmpfilesdir=$(pkg-config systemd --variable=tmpfilesdir 2>/dev/null) ++ ++if ! [[ -d "$tmpfilesdir" ]]; then ++ [[ -f /lib/tmpfiles.d ]] && tmpfilesdir=/lib/tmpfiles.d ++ [[ -f /usr/lib/tmpfiles.d ]] && tmpfilesdir=/usr/lib/tmpfiles.d ++fi ++ + export initdir dracutbasedir \ + dracutmodules force_add_dracutmodules add_dracutmodules omit_dracutmodules \ + mods_to_load \ +@@ -1162,7 +1170,8 @@ export initdir dracutbasedir \ + debug host_fs_types host_devs sshkey add_fstab \ + DRACUT_VERSION udevdir prefix filesystems drivers \ + systemdutildir systemdsystemunitdir systemdsystemconfdir \ +- host_modalias host_modules hostonly_cmdline ++ host_modalias host_modules hostonly_cmdline loginstall \ ++ tmpfilesdir + + mods_to_load="" + # check all our modules to see if they should be sourced. diff --git a/SOURCES/0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch b/SOURCES/0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch new file mode 100644 index 0000000..99d062c --- /dev/null +++ b/SOURCES/0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch @@ -0,0 +1,38 @@ +From 10e5b14705e5bb732e66e8f08317529aa7bc8017 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 7 May 2015 14:42:10 +0200 +Subject: [PATCH] network:dhcp:wait_for_ipv6_dad() in PREINIT6 + +--- + modules.d/40network/dhclient-script.sh | 3 ++- + modules.d/40network/net-lib.sh | 2 +- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index 885303a..aef94d6 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -95,8 +95,9 @@ case $reason in + ;; + + PREINIT6) +- echo "dhcp: PREINIT $netif up" ++ echo "dhcp: PREINIT6 $netif up" + linkup $netif ++ wait_for_ipv6_dad $netif + ;; + + BOUND) +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 89b1101..220480b 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -522,7 +522,7 @@ wait_for_ipv6_dad() { + local cnt=0 + local li + while [ $cnt -lt 500 ]; do +- li=$(ip -6 addr show dev $1) ++ li=$(ip -6 addr show dev $1 scope link) + strstr "$li" "tentative" || return 0 + sleep 0.1 + cnt=$(($cnt+1)) diff --git a/SOURCES/0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch b/SOURCES/0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch new file mode 100644 index 0000000..59aec8b --- /dev/null +++ b/SOURCES/0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch @@ -0,0 +1,36 @@ +From e863891c154419932617e101ef5549dda41f6e62 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 7 May 2015 14:47:58 +0200 +Subject: [PATCH] network/net-lib.sh:iface_has_link() wait 5s for the carrier + to appear + +https://bugzilla.redhat.com/show_bug.cgi?id=1088808 +--- + modules.d/40network/net-lib.sh | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 220480b..1f77a15 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -556,13 +556,18 @@ hostname() { + } + + iface_has_link() { ++ local cnt=0 + local interface="$1" flags="" + [ -n "$interface" ] || return 2 + interface="/sys/class/net/$interface" + [ -d "$interface" ] || return 2 + linkup "$1" +- [ "$(cat $interface/carrier)" = 1 ] || return 1 +- # XXX Do we need to reset the flags here? anaconda never bothered.. ++ while [ $cnt -lt 50 ]; do ++ [ "$(cat $interface/carrier)" = 1 ] && return 0 ++ sleep 0.1 ++ cnt=$(($cnt+1)) ++ done ++ return 1 + } + + find_iface_with_link() { diff --git a/SOURCES/0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch b/SOURCES/0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch new file mode 100644 index 0000000..52e6115 --- /dev/null +++ b/SOURCES/0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch @@ -0,0 +1,51 @@ +From 1ad2884d82f15e9d1a6f3e24da42d56f47ebe949 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 16 Jun 2015 13:28:48 +0200 +Subject: [PATCH] dracut-pre-pivot: call udevadm settle one last time + +Some Hardware needs initialization and killing modprobe or modprobe +scripts would harm the process. +--- + modules.d/98systemd/dracut-pre-pivot.service | 7 ------- + modules.d/98systemd/dracut-pre-pivot.sh | 12 ++++++++++++ + 2 files changed, 12 insertions(+), 7 deletions(-) + +diff --git a/modules.d/98systemd/dracut-pre-pivot.service b/modules.d/98systemd/dracut-pre-pivot.service +index d7c7b1d..f453900 100644 +--- a/modules.d/98systemd/dracut-pre-pivot.service ++++ b/modules.d/98systemd/dracut-pre-pivot.service +@@ -16,13 +16,6 @@ Before=initrd-cleanup.service + Wants=remote-fs.target + After=remote-fs.target + ConditionPathExists=/etc/initrd-release +-ConditionDirectoryNotEmpty=|/lib/dracut/hooks/pre-pivot +-ConditionDirectoryNotEmpty=|/lib/dracut/hooks/cleanup +-ConditionKernelCommandLine=|rd.break=pre-pivot +-ConditionKernelCommandLine=|rd.break=cleanup +-ConditionKernelCommandLine=|rd.break +-ConditionPathExists=|/dev/root +-ConditionPathExists=|/dev/nfs + + [Service] + Environment=DRACUT_SYSTEMD=1 +diff --git a/modules.d/98systemd/dracut-pre-pivot.sh b/modules.d/98systemd/dracut-pre-pivot.sh +index e62a1ce..afe3466 100755 +--- a/modules.d/98systemd/dracut-pre-pivot.sh ++++ b/modules.d/98systemd/dracut-pre-pivot.sh +@@ -26,4 +26,16 @@ getarg rd.break -d rdbreak && emergency_shell -n switch_root "Break before switc + [ -h /dev/root ] && rm -f -- /dev/root + [ -h /dev/nfs ] && rm -f -- /dev/nfs + ++udevadm settle ++ ++cnt=0 ++while ! udevadm settle --timeout=0; do ++ info "udev still not settled. Waiting." ++ udevadm settle ++ cnt=$(($cnt+1)) ++ [ $cnt -gt 10 ] && break ++done ++ ++udevadm control --exit ++ + exit 0 diff --git a/SOURCES/0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch b/SOURCES/0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch new file mode 100644 index 0000000..66dca53 --- /dev/null +++ b/SOURCES/0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch @@ -0,0 +1,38 @@ +From 90b5b48734b8738fac217df1b2846997f532a0ea Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 2 Jul 2015 14:55:31 +0200 +Subject: [PATCH] dracut.sh: add devices with x-initrd.mount in /etc/fstab to + host_devs + +otherwise dracut might not even be able to mount those. + +(cherry picked from commit 916559e073a49eedbc7b0c58b399d303fb8c2a05) +--- + dracut.sh | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/dracut.sh b/dracut.sh +index 6e56af5..0e60022 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1061,6 +1061,20 @@ if [[ $hostonly ]]; then + done < /etc/fstab + done < /proc/swaps + fi ++ ++ # collect all "x-initrd.mount" entries from /etc/fstab ++ if [[ -f /etc/fstab ]]; then ++ while read _d _m _t _o _r || [ -n "$_d" ]; do ++ [[ "$_d" == \#* ]] && continue ++ [[ $_d ]] || continue ++ [[ "$_o" != *x-initrd.mount* ]] && continue ++ _dev=$(expand_persistent_dev "$_d") ++ _dev="$(readlink -f "$_dev")" ++ [[ -b $_dev ]] && push host_devs "$_dev" ++ done < /etc/fstab ++ fi ++ ++ + # record all host modaliases + declare -A host_modalias + find /sys/devices/ -name uevent -print > "$initdir/.modalias" diff --git a/SOURCES/0250-dracut-lib.sh-info-output-info-to-stderr.patch b/SOURCES/0250-dracut-lib.sh-info-output-info-to-stderr.patch new file mode 100644 index 0000000..1d0e192 --- /dev/null +++ b/SOURCES/0250-dracut-lib.sh-info-output-info-to-stderr.patch @@ -0,0 +1,34 @@ +From e2b5b450e7aac101d12149fdf0623106799933ff Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 2 Jul 2015 15:02:31 +0200 +Subject: [PATCH] dracut-lib.sh:info() output info to stderr + +otherwise it might collide with stdout redirection + +(cherry picked from commit 57fb6e67de0cc58b9d188439b0ceb0d0d5dbbd6f) +--- + modules.d/99base/dracut-lib.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index b490e82..69f7079 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -51,7 +51,7 @@ if [ -z "$DRACUT_SYSTEMD" ]; then + check_quiet + echo "<30>dracut: $*" > /dev/kmsg + [ "$DRACUT_QUIET" != "yes" ] && \ +- echo "dracut: $*" ++ echo "dracut: $*" >&2 + } + + else +@@ -61,7 +61,7 @@ else + } + + info() { +- echo "$*" ++ echo "$*" >&2 + } + + fi diff --git a/SOURCES/0251-Factor-out-all-the-type-V-commands.patch b/SOURCES/0251-Factor-out-all-the-type-V-commands.patch new file mode 100644 index 0000000..4928403 --- /dev/null +++ b/SOURCES/0251-Factor-out-all-the-type-V-commands.patch @@ -0,0 +1,696 @@ +From da3dacfa5e63ca00d4c8efd8c3c603bce7937cdd Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 6 Feb 2014 16:45:20 +0100 +Subject: [PATCH] Factor out all the "type -V" commands + +Add new functions require_binaries() and require_any_binary() to be used +in the check() section of module-setup.sh. + +These functions print a warning line telling the user, which binary is +missing for the specific dracut module. + +This unifies the way of checking for binaries and makes the life of an +initramfs creator easier, if he wants to find out why a specific dracut +module is not included in the initramfs. + +(cherry picked from commit 30e6e809ed8d189cc8374df3c28cfbcab5a299b9) +--- + dracut-functions.sh | 57 ++++++++++++++++++++++++--- + modules.d/00bash/module-setup.sh | 2 +- + modules.d/00bootchart/module-setup.sh | 2 +- + modules.d/00dash/module-setup.sh | 2 +- + modules.d/00systemd-bootchart/module-setup.sh | 2 +- + modules.d/02caps/module-setup.sh | 14 ++++--- + modules.d/03modsign/module-setup.sh | 2 +- + modules.d/05busybox/module-setup.sh | 2 +- + modules.d/10i18n/module-setup.sh | 4 +- + modules.d/40network/module-setup.sh | 7 +--- + modules.d/45url-lib/module-setup.sh | 2 +- + modules.d/50plymouth/module-setup.sh | 2 +- + modules.d/90btrfs/module-setup.sh | 2 +- + modules.d/90crypt/module-setup.sh | 2 +- + modules.d/90dm/module-setup.sh | 2 +- + modules.d/90dmraid/module-setup.sh | 2 +- + modules.d/90lvm/module-setup.sh | 2 +- + modules.d/90mdraid/module-setup.sh | 2 +- + modules.d/90multipath/module-setup.sh | 2 +- + modules.d/91crypt-gpg/module-setup.sh | 2 +- + modules.d/91crypt-loop/module-setup.sh | 21 ++++++---- + modules.d/95cifs/module-setup.sh | 2 +- + modules.d/95dasd/module-setup.sh | 1 + + modules.d/95dasd_mod/module-setup.sh | 1 + + modules.d/95fcoe-uefi/module-setup.sh | 4 +- + modules.d/95fcoe/module-setup.sh | 5 +-- + modules.d/95iscsi/module-setup.sh | 2 +- + modules.d/95nbd/module-setup.sh | 2 +- + modules.d/95nfs/module-setup.sh | 4 +- + modules.d/95ssh-client/module-setup.sh | 6 +-- + modules.d/95udev-rules/module-setup.sh | 2 +- + modules.d/95zfcp/module-setup.sh | 2 + + modules.d/95znet/module-setup.sh | 2 + + modules.d/97biosdevname/module-setup.sh | 2 +- + modules.d/97masterkey/module-setup.sh | 2 +- + modules.d/98systemd/module-setup.sh | 2 +- + modules.d/99img-lib/module-setup.sh | 4 +- + 37 files changed, 112 insertions(+), 66 deletions(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 89438b2..4ea3204 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -35,6 +35,51 @@ fi + # Generic substring function. If $2 is in $1, return 0. + strstr() { [[ $1 = *$2* ]]; } + ++# helper function for check() in module-setup.sh ++# to check for required installed binaries ++# issues a standardized warning message ++require_binaries() { ++ local _module_name="${moddir##*/}" ++ local _ret=0 ++ ++ if [[ "$1" = "-m" ]]; then ++ _module_name="$2" ++ shift 2 ++ fi ++ ++ for cmd in "$@"; do ++ if ! find_binary "$cmd" &>/dev/null; then ++ dwarning "$_module_name: Could not find command '$cmd'!" ++ ((_ret++)) ++ fi ++ done ++ return $_ret ++} ++ ++require_any_binary() { ++ local _module_name="${moddir##*/}" ++ local _ret=1 ++ ++ if [[ "$1" = "-m" ]]; then ++ _module_name="$2" ++ shift 2 ++ fi ++ ++ for cmd in "$@"; do ++ if find_binary "$cmd" &>/dev/null; then ++ _ret=0 ++ break ++ fi ++ done ++ ++ if (( $_ret != 0 )); then ++ dwarning "$_module_name: Could not find any command of '$@'!" ++ return 1 ++ fi ++ ++ return 0 ++} ++ + # find a binary. If we were not passed the full path directly, + # search in the usual places to find the binary. + find_binary() { +@@ -1055,7 +1100,7 @@ module_check() { + . $_moddir/module-setup.sh + is_func check || return 0 + [ $_forced -ne 0 ] && unset hostonly +- check $hostonly ++ moddir=$_moddir check $hostonly + _ret=$? + unset check depends cmdline install installkernel + fi +@@ -1081,7 +1126,7 @@ module_check_mount() { + unset check depends cmdline install installkernel + check() { false; } + . $_moddir/module-setup.sh +- check 0 ++ moddir=$_moddir check 0 + _ret=$? + unset check depends cmdline install installkernel + fi +@@ -1105,7 +1150,7 @@ module_depends() { + unset check depends cmdline install installkernel + depends() { true; } + . $_moddir/module-setup.sh +- depends ++ moddir=$_moddir depends + _ret=$? + unset check depends cmdline install installkernel + return $_ret +@@ -1126,7 +1171,7 @@ module_cmdline() { + unset check depends cmdline install installkernel + cmdline() { true; } + . $_moddir/module-setup.sh +- cmdline ++ moddir=$_moddir cmdline + _ret=$? + unset check depends cmdline install installkernel + return $_ret +@@ -1147,7 +1192,7 @@ module_install() { + unset check depends cmdline install installkernel + install() { true; } + . $_moddir/module-setup.sh +- install ++ moddir=$_moddir install + _ret=$? + unset check depends cmdline install installkernel + return $_ret +@@ -1168,7 +1213,7 @@ module_installkernel() { + unset check depends cmdline install installkernel + installkernel() { true; } + . $_moddir/module-setup.sh +- installkernel ++ moddir=$_moddir installkernel + _ret=$? + unset check depends cmdline install installkernel + return $_ret +diff --git a/modules.d/00bash/module-setup.sh b/modules.d/00bash/module-setup.sh +index e874e73..109642a 100755 +--- a/modules.d/00bash/module-setup.sh ++++ b/modules.d/00bash/module-setup.sh +@@ -3,7 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- [ -x /bin/bash ] ++ require_binaries /bin/bash + } + + depends() { +diff --git a/modules.d/00bootchart/module-setup.sh b/modules.d/00bootchart/module-setup.sh +index 72b6063..f03fc54 100755 +--- a/modules.d/00bootchart/module-setup.sh ++++ b/modules.d/00bootchart/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + [[ "$mount_needs" ]] && return 1 +- [ -x /sbin/bootchartd ] || return 1 ++ require_binaries /sbin/bootchartd || return 1 + return 255 + } + +diff --git a/modules.d/00dash/module-setup.sh b/modules.d/00dash/module-setup.sh +index dfd4d7b..9a2a92f 100755 +--- a/modules.d/00dash/module-setup.sh ++++ b/modules.d/00dash/module-setup.sh +@@ -3,7 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- [ -x /bin/dash ] ++ require_binaries /bin/dash + } + + depends() { +diff --git a/modules.d/00systemd-bootchart/module-setup.sh b/modules.d/00systemd-bootchart/module-setup.sh +index 3eb4de1..eb6f383 100755 +--- a/modules.d/00systemd-bootchart/module-setup.sh ++++ b/modules.d/00systemd-bootchart/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + [[ "$mount_needs" ]] && return 1 +- [ -x $systemdutildir/systemd-bootchart ] || return 1 ++ require_binaries $systemdutildir/systemd-bootchart || return 1 + return 255 + } + +diff --git a/modules.d/02caps/module-setup.sh b/modules.d/02caps/module-setup.sh +index c9d94ee..73eb215 100755 +--- a/modules.d/02caps/module-setup.sh ++++ b/modules.d/02caps/module-setup.sh +@@ -3,7 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- type -P capsh >/dev/null 2>&1 ++ require_binaries capsh + } + + depends() { +@@ -11,9 +11,13 @@ depends() { + } + + install() { +- inst_hook pre-pivot 00 "$moddir/caps.sh" +- inst $(type -P capsh 2>/dev/null) /usr/sbin/capsh +- # capsh wants bash and we need bash also +- inst /bin/bash ++ if ! dracut_module_included "systemd"; then ++ inst_hook pre-pivot 00 "$moddir/caps.sh" ++ inst $(type -P capsh 2>/dev/null) /usr/sbin/capsh ++ # capsh wants bash and we need bash also ++ inst /bin/bash ++ else ++ dwarning "caps: does not work with systemd in the initramfs" ++ fi + } + +diff --git a/modules.d/03modsign/module-setup.sh b/modules.d/03modsign/module-setup.sh +index 730cd86..bed5cfe 100755 +--- a/modules.d/03modsign/module-setup.sh ++++ b/modules.d/03modsign/module-setup.sh +@@ -8,7 +8,7 @@ + # Peter Jones + + check() { +- [[ -x /usr/bin/keyctl ]] || return 1 ++ require_binaries keyctl || return 1 + + # do not include module in hostonly mode, + # if no keys are present +diff --git a/modules.d/05busybox/module-setup.sh b/modules.d/05busybox/module-setup.sh +index edcc8da..c35ab2e 100755 +--- a/modules.d/05busybox/module-setup.sh ++++ b/modules.d/05busybox/module-setup.sh +@@ -3,7 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- type -P busybox >/dev/null || return 1 ++ require_binaries busybox || return 1 + + return 255 + } +diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh +index 413ee12..2c0a275 100755 +--- a/modules.d/10i18n/module-setup.sh ++++ b/modules.d/10i18n/module-setup.sh +@@ -5,9 +5,7 @@ + check() { + [[ "$mount_needs" ]] && return 1 + +- for i in setfont loadkeys kbd_mode; do +- type -P "$i" >/dev/null || return 1 +- done ++ require_binaries setfont loadkeys kbd_mode || return 1 + + return 0 + } +diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh +index a52e881..3134b5f 100755 +--- a/modules.d/40network/module-setup.sh ++++ b/modules.d/40network/module-setup.sh +@@ -5,12 +5,7 @@ + check() { + local _program + +- for _program in ip arping dhclient ; do +- if ! type -P $_program >/dev/null; then +- derror "Could not find program \"$_program\" required by network." +- return 1 +- fi +- done ++ require_binaries ip arping dhclient || return 1 + + return 255 + } +diff --git a/modules.d/45url-lib/module-setup.sh b/modules.d/45url-lib/module-setup.sh +index b5cf36f..f2d068b 100755 +--- a/modules.d/45url-lib/module-setup.sh ++++ b/modules.d/45url-lib/module-setup.sh +@@ -2,7 +2,7 @@ + # module-setup for url-lib + + check() { +- command -v curl >/dev/null || return 1 ++ require_binaries curl || return 1 + return 255 + } + +diff --git a/modules.d/50plymouth/module-setup.sh b/modules.d/50plymouth/module-setup.sh +index e0e6936..961c1e3 100755 +--- a/modules.d/50plymouth/module-setup.sh ++++ b/modules.d/50plymouth/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + [[ "$mount_needs" ]] && return 1 +- type -P plymouthd >/dev/null && type -P plymouth >/dev/null ++ require_binaries plymouthd plymouth + } + + depends() { +diff --git a/modules.d/90btrfs/module-setup.sh b/modules.d/90btrfs/module-setup.sh +index a280594..4804f58 100755 +--- a/modules.d/90btrfs/module-setup.sh ++++ b/modules.d/90btrfs/module-setup.sh +@@ -6,7 +6,7 @@ check() { + local _rootdev + # if we don't have btrfs installed on the host system, + # no point in trying to support it in the initramfs. +- type -P btrfs >/dev/null || return 1 ++ require_binaries btrfs || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for fs in ${host_fs_types[@]}; do +diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh +index 272e527..dbc87a4 100755 +--- a/modules.d/90crypt/module-setup.sh ++++ b/modules.d/90crypt/module-setup.sh +@@ -5,7 +5,7 @@ + check() { + local _rootdev + # if cryptsetup is not installed, then we cannot support encrypted devices. +- type -P cryptsetup >/dev/null || return 1 ++ require_binaries cryptsetup || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for fs in "${host_fs_types[@]}"; do +diff --git a/modules.d/90dm/module-setup.sh b/modules.d/90dm/module-setup.sh +index 1fd9298..ed94f43 100755 +--- a/modules.d/90dm/module-setup.sh ++++ b/modules.d/90dm/module-setup.sh +@@ -3,7 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- type -P dmsetup >/dev/null || return 1 ++ require_binaries dmsetup || return 1 + return 255 + } + +diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh +index b230cb0..8ca69aa 100755 +--- a/modules.d/90dmraid/module-setup.sh ++++ b/modules.d/90dmraid/module-setup.sh +@@ -6,7 +6,7 @@ check() { + local _rootdev + # if we don't have dmraid installed on the host system, no point + # in trying to support it in the initramfs. +- type -P dmraid >/dev/null || return 1 ++ require_binaries dmraid || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for dev in "${!host_fs_types[@]}"; do +diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh +index 0c5890a..5ec6281 100755 +--- a/modules.d/90lvm/module-setup.sh ++++ b/modules.d/90lvm/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + # No point trying to support lvm if the binaries are missing +- type -P lvm >/dev/null || return 1 ++ require_binaries lvm || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for fs in "${host_fs_types[@]}"; do +diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh +index 815a3eb..2092dae 100755 +--- a/modules.d/90mdraid/module-setup.sh ++++ b/modules.d/90mdraid/module-setup.sh +@@ -5,7 +5,7 @@ + check() { + local _rootdev + # No mdadm? No mdraid support. +- type -P mdadm >/dev/null || return 1 ++ require_binaries mdadm || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for dev in "${!host_fs_types[@]}"; do +diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh +index feb58dc..d37f958 100755 +--- a/modules.d/90multipath/module-setup.sh ++++ b/modules.d/90multipath/module-setup.sh +@@ -5,7 +5,7 @@ + check() { + local _rootdev + # if there's no multipath binary, no go. +- type -P multipath >/dev/null || return 1 ++ require_binaries multipath || return 1 + + is_mpath() { + local _dev=$1 +diff --git a/modules.d/91crypt-gpg/module-setup.sh b/modules.d/91crypt-gpg/module-setup.sh +index 43a5a00..17b58f1 100755 +--- a/modules.d/91crypt-gpg/module-setup.sh ++++ b/modules.d/91crypt-gpg/module-setup.sh +@@ -4,7 +4,7 @@ + + # GPG support is optional + check() { +- type -P gpg >/dev/null || return 1 ++ require_binaries gpg || return 1 + + return 255 + } +diff --git a/modules.d/91crypt-loop/module-setup.sh b/modules.d/91crypt-loop/module-setup.sh +index c14fd45..d0a4956 100644 +--- a/modules.d/91crypt-loop/module-setup.sh ++++ b/modules.d/91crypt-loop/module-setup.sh +@@ -1,19 +1,24 @@ ++#!/bin/bash ++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- ++# ex: ts=8 sw=4 sts=4 et filetype=sh ++ ++# called by dracut + check() { +- type -P losetup >/dev/null || return 1 +- +- return 255 ++ require_binaries losetup || return 1 ++ ++ return 255 + } + + depends() { +- echo crypt ++ echo crypt + } + + installkernel() { +- instmods loop ++ instmods loop + } + + install() { +- inst_multiple losetup +- inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh" +- dracut_need_initqueue ++ inst_multiple losetup ++ inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh" ++ dracut_need_initqueue + } +diff --git a/modules.d/95cifs/module-setup.sh b/modules.d/95cifs/module-setup.sh +index c17b973..9e36f87 100755 +--- a/modules.d/95cifs/module-setup.sh ++++ b/modules.d/95cifs/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + # If our prerequisites are not met, fail anyways. +- type -P mount.cifs >/dev/null || return 1 ++ require_binaries mount.cifs || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for fs in ${host_fs_types[@]}; do +diff --git a/modules.d/95dasd/module-setup.sh b/modules.d/95dasd/module-setup.sh +index 3b8396d..70b2fcc 100755 +--- a/modules.d/95dasd/module-setup.sh ++++ b/modules.d/95dasd/module-setup.sh +@@ -5,6 +5,7 @@ + check() { + local _arch=$(uname -m) + [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1 ++ require_binaries normalize_dasd_arg || return 1 + return 0 + } + +diff --git a/modules.d/95dasd_mod/module-setup.sh b/modules.d/95dasd_mod/module-setup.sh +index 9c9eeea..d20764e 100755 +--- a/modules.d/95dasd_mod/module-setup.sh ++++ b/modules.d/95dasd_mod/module-setup.sh +@@ -5,6 +5,7 @@ + check() { + local _arch=$(uname -m) + [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1 ++ require_binaries grep sed seq + + return 0 + } +diff --git a/modules.d/95fcoe-uefi/module-setup.sh b/modules.d/95fcoe-uefi/module-setup.sh +index c91f775..0fb06e2 100755 +--- a/modules.d/95fcoe-uefi/module-setup.sh ++++ b/modules.d/95fcoe-uefi/module-setup.sh +@@ -4,9 +4,7 @@ + + # called by dracut + check() { +- for i in dcbtool fipvlan lldpad ip readlink; do +- type -P $i >/dev/null || return 1 +- done ++ require_binaries dcbtool fipvlan lldpad ip readlink || return 1 + return 0 + } + +diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh +index 3ffaf5a..8c6290d 100755 +--- a/modules.d/95fcoe/module-setup.sh ++++ b/modules.d/95fcoe/module-setup.sh +@@ -3,10 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- for i in dcbtool fipvlan lldpad ip readlink; do +- type -P $i >/dev/null || return 1 +- done +- ++ require_binaries dcbtool fipvlan lldpad ip readlink || return 1 + return 0 + } + +diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh +index c6901c0..49f9a0e 100755 +--- a/modules.d/95iscsi/module-setup.sh ++++ b/modules.d/95iscsi/module-setup.sh +@@ -5,7 +5,7 @@ + check() { + local _rootdev + # If our prerequisites are not met, fail anyways. +- type -P iscsistart hostname iscsi-iname >/dev/null || return 1 ++ require_binaries iscsistart hostname iscsi-iname || return 1 + + # If hostonly was requested, fail the check if we are not actually + # booting from root. +diff --git a/modules.d/95nbd/module-setup.sh b/modules.d/95nbd/module-setup.sh +index 3ac00f6..7e8a416 100755 +--- a/modules.d/95nbd/module-setup.sh ++++ b/modules.d/95nbd/module-setup.sh +@@ -5,7 +5,7 @@ + check() { + local _rootdev + # If our prerequisites are not met, fail. +- type -P nbd-client >/dev/null || return 1 ++ require_binaries nbd-client || return 1 + + # if an nbd device is not somewhere in the chain of devices root is + # mounted on, fail the hostonly check. +diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh +index 75beb74..02838a4 100755 +--- a/modules.d/95nfs/module-setup.sh ++++ b/modules.d/95nfs/module-setup.sh +@@ -4,8 +4,8 @@ + + check() { + # If our prerequisites are not met, fail anyways. +- type -P rpcbind >/dev/null || type -P portmap >/dev/null || return 1 +- type -P rpc.statd mount.nfs mount.nfs4 umount >/dev/null || return 1 ++ require_any_binary rpcbind portmap || return 1 ++ require_binaries rpc.statd mount.nfs mount.nfs4 umount || return 1 + + [[ $hostonly ]] || [[ $mount_needs ]] && { + for fs in ${host_fs_types[@]}; do +diff --git a/modules.d/95ssh-client/module-setup.sh b/modules.d/95ssh-client/module-setup.sh +index c7d8ee2..6b44107 100755 +--- a/modules.d/95ssh-client/module-setup.sh ++++ b/modules.d/95ssh-client/module-setup.sh +@@ -5,11 +5,11 @@ + # fixme: assume user is root + + check() { +- # If our prerequisites are not met, fail. +- type -P ssh >/dev/null || return 1 +- type -P scp >/dev/null || return 1 + [[ $mount_needs ]] && return 1 + ++ # If our prerequisites are not met, fail. ++ require_binaries ssh scp || return 1 ++ + if [[ $sshkey ]]; then + [ ! -f $sshkey ] && { + derror "ssh key: $sshkey is not found!" +diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh +index 094479a..fdea8c6 100755 +--- a/modules.d/95udev-rules/module-setup.sh ++++ b/modules.d/95udev-rules/module-setup.sh +@@ -5,7 +5,7 @@ + install() { + local _i + +- # Fixme: would be nice if we didn't have to know which rules to grab.... ++ # Fixme: would be nice if we didn't have to guess, which rules to grab.... + # ultimately, /lib/initramfs/rules.d or somesuch which includes links/copies + # of the rules we want so that we just copy those in would be best + inst_multiple udevadm cat uname blkid \ +diff --git a/modules.d/95zfcp/module-setup.sh b/modules.d/95zfcp/module-setup.sh +index 9906695..d19eba4 100755 +--- a/modules.d/95zfcp/module-setup.sh ++++ b/modules.d/95zfcp/module-setup.sh +@@ -6,6 +6,8 @@ check() { + arch=$(uname -m) + [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1 + ++ require_binaries zfcp_cio_free grep sed seq || return 1 ++ + return 0 + } + +diff --git a/modules.d/95znet/module-setup.sh b/modules.d/95znet/module-setup.sh +index 16f8493..b052ec3 100755 +--- a/modules.d/95znet/module-setup.sh ++++ b/modules.d/95znet/module-setup.sh +@@ -6,6 +6,8 @@ check() { + arch=$(uname -m) + [ "$arch" = "s390" -o "$arch" = "s390x" ] || return 1 + ++ require_binaries znet_cio_free grep sed seq readlink || return 1 ++ + return 0 + } + +diff --git a/modules.d/97biosdevname/module-setup.sh b/modules.d/97biosdevname/module-setup.sh +index 4a0b4f4..fd4d463 100755 +--- a/modules.d/97biosdevname/module-setup.sh ++++ b/modules.d/97biosdevname/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + [[ "$mount_needs" ]] && return 1 +- type -P biosdevname >/dev/null || return 1 ++ require_binaries biosdevname || return 1 + return 0 + } + +diff --git a/modules.d/97masterkey/module-setup.sh b/modules.d/97masterkey/module-setup.sh +index a94c4f5..cda6e80 100755 +--- a/modules.d/97masterkey/module-setup.sh ++++ b/modules.d/97masterkey/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + [[ $hostonly ]] && { +- [ -x "/bin/keyctl" ] || return 1 ++ require_binaries keyctl uname || return 1 + } + + return 255 +diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh +index aae0319..d0271f1 100755 +--- a/modules.d/98systemd/module-setup.sh ++++ b/modules.d/98systemd/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + [[ $mount_needs ]] && return 1 +- if [[ -x $systemdutildir/systemd ]]; then ++ if require_binaries $systemdutildir/systemd; then + SYSTEMD_VERSION=$($systemdutildir/systemd --version | { read a b a; echo $b; }) + (( $SYSTEMD_VERSION >= 198 )) && return 0 + return 255 +diff --git a/modules.d/99img-lib/module-setup.sh b/modules.d/99img-lib/module-setup.sh +index 28bfc2a..a951b93 100755 +--- a/modules.d/99img-lib/module-setup.sh ++++ b/modules.d/99img-lib/module-setup.sh +@@ -2,9 +2,7 @@ + # module-setup for img-lib + + check() { +- for cmd in tar gzip dd; do +- command -v $cmd >/dev/null || return 1 +- done ++ require_binaries tar gzip dd bash || return 1 + return 255 + } + diff --git a/SOURCES/0252-network-dhclient-script.sh-add-RENEW-REBIND.patch b/SOURCES/0252-network-dhclient-script.sh-add-RENEW-REBIND.patch new file mode 100644 index 0000000..15e71f5 --- /dev/null +++ b/SOURCES/0252-network-dhclient-script.sh-add-RENEW-REBIND.patch @@ -0,0 +1,51 @@ +From efe5301ab91a0e871f2c68faf1f835f306388690 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 1 Jul 2015 14:53:33 +0200 +Subject: [PATCH] network/dhclient-script.sh: add RENEW/REBIND + +(cherry picked from commit cf627b20d039c527f4de167e38978d4984e4d727) +--- + modules.d/40network/dhclient-script.sh | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index aef94d6..d96f7d9 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -131,6 +131,17 @@ case $reason in + >/tmp/net.$netif.up + ;; + ++ RENEW|REBIND) ++ unset lease_time ++ [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time ++ [ -n "$new_max_life" ] && lease_time=$new_max_life ++ preferred_lft=$lease_time ++ [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life ++ ip -4 addr change ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \ ++ ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \ ++ >/dev/null 2>&1 ++ ;; ++ + BOUND6) + echo "dhcp: BOND6 setting $netif" + setup_interface6 +@@ -151,6 +162,18 @@ case $reason in + echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh + >/tmp/net.$netif.up + ;; ++ ++ RENEW6|REBIND6) ++ unset lease_time ++ [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time ++ [ -n "$new_max_life" ] && lease_time=$new_max_life ++ preferred_lft=$lease_time ++ [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life ++ ip -6 addr change ${new_ip6_address}/${new_ip6_prefixlen} dev ${interface} scope global \ ++ ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \ ++ >/dev/null 2>&1 ++ ;; ++ + *) echo "dhcp: $reason";; + esac + diff --git a/SOURCES/0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch b/SOURCES/0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch new file mode 100644 index 0000000..86a866a --- /dev/null +++ b/SOURCES/0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch @@ -0,0 +1,44 @@ +From 4ec362ce0ba3fc8b10df83c015d88e002f8ccd36 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 1 Jul 2015 14:57:15 +0200 +Subject: [PATCH] network/dhclient-script.sh: make IPv4 DHCP lease time + optionally + +If bootp is used, no lease time is provided in the packet from the bootp +server. + +(cherry picked from commit 0f89ec314b062a410199251db0356a55b4773173) +--- + modules.d/40network/dhclient-script.sh | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index d96f7d9..7972af9 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -23,7 +23,11 @@ setup_interface() { + search=$(printf -- "$new_domain_search") + namesrv=$new_domain_name_servers + hostname=$new_host_name +- lease_time=$new_dhcp_lease_time ++ ++ [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time ++ [ -n "$new_max_life" ] && lease_time=$new_max_life ++ preferred_lft=$lease_time ++ [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life + + [ -f /tmp/net.$netif.override ] && . /tmp/net.$netif.override + +@@ -41,9 +45,9 @@ setup_interface() { + fi + fi + +- ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} \ +- valid_lft ${lease_time} preferred_lft ${lease_time} \ +- dev $netif ++ ip addr add $ip${mask:+/$mask} ${bcast:+broadcast $bcast} dev $netif \ ++ ${lease_time:+valid_lft $lease_time} \ ++ ${preferred_lft:+preferred_lft ${preferred_lft}} + + [ -n "$gw" ] && echo ip route replace default via $gw dev $netif > /tmp/net.$netif.gw + diff --git a/SOURCES/0254-network-don-t-use-ifup-m.patch b/SOURCES/0254-network-don-t-use-ifup-m.patch new file mode 100644 index 0000000..d17aaef --- /dev/null +++ b/SOURCES/0254-network-don-t-use-ifup-m.patch @@ -0,0 +1,46 @@ +From 00c118a93a154d8ee7469331da2868db6c76fcd2 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 2 Jul 2015 11:32:08 +0200 +Subject: [PATCH] network: don't use "ifup -m" + +"ifup -m" was thought to be used by humans in the emergency shell. +Using it programatically shows some other flaw in the execution logic. + +Also, "ifup -m" was configuring the interface multiple times on "add" +and "change" uevent, because the "$netif.did-setup" test was not +executed. + +(cherry picked from commit 7cca5efdcea4f1431331cf7663fc6fb48a365cdf) +--- + modules.d/40network/ifup.sh | 3 ++- + modules.d/40network/net-genrules.sh | 1 - + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index bd7db02..3cff725 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -82,9 +82,10 @@ fi + # disable manual ifup while netroot is set for simplifying our logic + # in netroot case we prefer netroot to bringup $netif automaticlly + [ -n "$2" -a "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2" +-[ -z "$netroot" ] && [ -z "$manualup" ] && exit 0 ++ + if [ -n "$manualup" ]; then + >/tmp/net.$netif.manualup ++ rm -f /tmp/net.${netif}.did-setup + else + [ -e /tmp/net.${netif}.did-setup ] && exit 0 + [ -e /sys/class/net/$netif/address ] && \ +diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh +index 3664984..750a4d7 100755 +--- a/modules.d/40network/net-genrules.sh ++++ b/modules.d/40network/net-genrules.sh +@@ -55,7 +55,6 @@ command -v fix_bootif >/dev/null || . /lib/net-lib.sh + fi + + ifup='/sbin/ifup $env{INTERFACE}' +- [ -z "$netroot" ] && ifup="$ifup -m" + + runcmd="RUN+=\"/sbin/initqueue --name ifup-\$env{INTERFACE} --unique --onetime $ifup\"" + diff --git a/SOURCES/0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch b/SOURCES/0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch new file mode 100644 index 0000000..1e180d8 --- /dev/null +++ b/SOURCES/0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch @@ -0,0 +1,30 @@ +From fe15c6b6cb03f518c79d990b7054792e1d23c7ba Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 20 Mar 2015 15:48:15 +0100 +Subject: [PATCH] nfs/parse-nfsroot.sh: don't unset netroot, if not nfs + +(cherry picked from commit afcc697cb8c588eef68bb635f790991411209089) +--- + modules.d/95nfs/parse-nfsroot.sh | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh +index 9fc2a8c..a84cd43 100755 +--- a/modules.d/95nfs/parse-nfsroot.sh ++++ b/modules.d/95nfs/parse-nfsroot.sh +@@ -59,7 +59,14 @@ fi + + case "$netroot" in + /dev/nfs) netroot=nfs;; +- /dev/*) unset netroot; return;; ++ /dev/*) ++ if [ -n "$oldnetroot" ]; then ++ netroot="$oldnetroot" ++ else ++ unset netroot ++ fi ++ return ++ ;; + # LEGACY: root=:/ +Date: Wed, 20 May 2015 18:07:14 +0800 +Subject: [PATCH] Change the fs_passno of nfs to 0 + +There is a bug that kdump-initrd contains entry requesting nfs dump +filesystem to get filesystemchecked. And there is an erro message said +that nfs need be checked. But there's no fsck for nfs utility, e.g +fsck.nfs like other file system. Whatever fs_passno 0 or 2 are passed, +no fsck is executed at all for nfs mount.But in dracut, set it to be 2 +always, so the erro message appear and it should be set to 0. + +In the fstab,the sixth variable fs_passno stands for that the device need +checked or not,and dracut set it to "2".To fix this issue, it should +be "0" when the device is nfs.The third variable stands for the type of +the filesystem and we can use it to judge whether the device is nfs. +So when the third variable of fstab contains "nfs", the sixth variable +fs_passno should be set to "0". + +Signed-off-by: Chao Fan +(cherry picked from commit 3586a7aa770016aeadb23257c27916fd009bec42) +--- + dracut.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/dracut.sh b/dracut.sh +index 0e60022..cc22a14 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1348,6 +1348,7 @@ if [[ $kernel_only != yes ]]; then + [ -z "${line[3]}" ] && line[3]="defaults" + [ -z "${line[4]}" ] && line[4]="0" + [ -z "${line[5]}" ] && line[5]="2" ++ strstr "${line[2]}" "nfs" && line[5]="0" + echo "${line[@]}" >> "${initdir}/etc/fstab" + done + diff --git a/SOURCES/0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch b/SOURCES/0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch new file mode 100644 index 0000000..168ca64 --- /dev/null +++ b/SOURCES/0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch @@ -0,0 +1,49 @@ +From 4350c73199b3d2ac1e22b5e2e093de12ca5ad598 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 2 Jul 2015 15:21:35 +0200 +Subject: [PATCH] nfs/nfs-lib.sh: add anaconda_nfsv6_to_var() + +add "nfs:[[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]]/path" style parsing + +https://bugzilla.redhat.com/show_bug.cgi?id=1190098 +(cherry picked from commit ba665de454e7d6ef1da4ba95308fb9f65c7a9497) +--- + modules.d/95nfs/nfs-lib.sh | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/modules.d/95nfs/nfs-lib.sh b/modules.d/95nfs/nfs-lib.sh +index bf7d044..4f24f69 100755 +--- a/modules.d/95nfs/nfs-lib.sh ++++ b/modules.d/95nfs/nfs-lib.sh +@@ -17,6 +17,7 @@ nfs_to_var() { + # FIXME: local netif=${2:-$netif}? + case "$1" in + nfs://*) rfc2224_nfs_to_var "$1" ;; ++ nfs:*[*) anaconda_nfsv6_to_var "$1" ;; + nfs:*:*:/*) anaconda_nfs_to_var "$1" ;; + *) nfsroot_to_var "$1" ;; + esac +@@ -86,6 +87,23 @@ anaconda_nfs_to_var() { + path="/${1##*:/}" + } + ++# IPv6 nfs path will be treated separately ++anaconda_nfsv6_to_var() { ++ nfs="nfs" ++ path="$1:" ++ options="${path#*:/}" ++ path="/${options%%:*}" ++ server="${1#*nfs:}" ++ if str_starts $server '['; then ++ server="${server%:/*}" ++ options="${options#*:*}" ++ else ++ server="${server%:/*}" ++ options="${server%%:*}" ++ server="${server#*:}" ++ fi ++} ++ + # nfsroot_from_dhcp NETIF + # fill in missing server/path from DHCP options. + nfsroot_from_dhcp() { diff --git a/SOURCES/0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch b/SOURCES/0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch new file mode 100644 index 0000000..40e8d03 --- /dev/null +++ b/SOURCES/0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch @@ -0,0 +1,660 @@ +From 1211a10b959fea039f4c8718c3901ad63e4816d3 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 2 Jul 2015 15:40:13 +0200 +Subject: [PATCH] splitup dracut-init.sh from dracut-functions.sh + +other tools want to source dracut-functions.sh without any mkdir side +effects. + +(cherry picked from commit 777f2db0373ccbc1a44fc2d960ecefbe50195055) +--- + Makefile | 1 + + dracut-functions.sh | 9 ++------- + dracut-init.sh | 34 ++++++++++++++++++++++++++++++++++ + dracut.sh | 8 ++++---- + dracut.spec | 1 + + test/TEST-01-BASIC/test.sh | 6 +++--- + test/TEST-02-SYSTEMD/test.sh | 6 +++--- + test/TEST-03-USR-MOUNT/test.sh | 6 +++--- + test/TEST-04-FULL-SYSTEMD/test.sh | 6 +++--- + test/TEST-10-RAID/test.sh | 6 +++--- + test/TEST-11-LVM/test.sh | 6 +++--- + test/TEST-12-RAID-DEG/test.sh | 6 +++--- + test/TEST-13-ENC-RAID-LVM/test.sh | 6 +++--- + test/TEST-14-IMSM/test.sh | 6 +++--- + test/TEST-15-BTRFSRAID/test.sh | 6 +++--- + test/TEST-16-DMSQUASH/test.sh | 4 ++-- + test/TEST-17-LVM-THIN/test.sh | 6 +++--- + test/TEST-20-NFS/test.sh | 6 +++--- + test/TEST-30-ISCSI/test.sh | 8 ++++---- + test/TEST-40-NBD/test.sh | 10 +++++----- + test/TEST-50-MULTINIC/test.sh | 6 +++--- + 21 files changed, 92 insertions(+), 61 deletions(-) + create mode 100644 dracut-init.sh + +diff --git a/Makefile b/Makefile +index 5441d8f..18f5a88 100644 +--- a/Makefile ++++ b/Makefile +@@ -106,6 +106,7 @@ install: dracut-version.sh + install -m 0644 dracut.conf $(DESTDIR)$(sysconfdir)/dracut.conf + mkdir -p $(DESTDIR)$(sysconfdir)/dracut.conf.d + mkdir -p $(DESTDIR)$(pkglibdir)/dracut.conf.d ++ install -m 0755 dracut-init.sh $(DESTDIR)$(pkglibdir)/dracut-init.sh + install -m 0755 dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions.sh + install -m 0755 dracut-version.sh $(DESTDIR)$(pkglibdir)/dracut-version.sh + ln -fs dracut-functions.sh $(DESTDIR)$(pkglibdir)/dracut-functions +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 4ea3204..31586ca 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -22,14 +22,9 @@ + export LC_MESSAGES=C + + if [[ $DRACUT_KERNEL_LAZY ]] && ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then +- if ! [[ -d "$initdir/.kernelmodseen" ]]; then +- mkdir -p "$initdir/.kernelmodseen" ++ if [[ -d "$initdir/.kernelmodseen" ]]; then ++ DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen" + fi +- DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen" +-fi +- +-if [[ $initdir ]] && ! [[ -d $initdir ]]; then +- mkdir -p "$initdir" + fi + + # Generic substring function. If $2 is in $1, return 0. +diff --git a/dracut-init.sh b/dracut-init.sh +new file mode 100644 +index 0000000..469e42a +--- /dev/null ++++ b/dracut-init.sh +@@ -0,0 +1,34 @@ ++#!/bin/bash ++# ++# functions used by dracut and other tools. ++# ++# Copyright 2005-2009 Red Hat, Inc. All rights reserved. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++# ++export LC_MESSAGES=C ++ ++if [[ $DRACUT_KERNEL_LAZY ]] && ! [[ $DRACUT_KERNEL_LAZY_HASHDIR ]]; then ++ if ! [[ -d "$initdir/.kernelmodseen" ]]; then ++ mkdir -p "$initdir/.kernelmodseen" ++ fi ++ DRACUT_KERNEL_LAZY_HASHDIR="$initdir/.kernelmodseen" ++fi ++ ++if [[ $initdir ]] && ! [[ -d $initdir ]]; then ++ mkdir -p "$initdir" ++fi ++ ++[[ $dracutbasedir ]] || export dracutbasedir=${BASH_SOURCE%/*} ++. $dracutbasedir/dracut-functions.sh +diff --git a/dracut.sh b/dracut.sh +index cc22a14..a214f81 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -519,7 +519,7 @@ while :; do + -q|--quiet) ((verbosity_mod_l--));; + -l|--local) + allowlocal="yes" +- [[ -f "$(readlink -f "${0%/*}")/dracut-functions.sh" ]] \ ++ [[ -f "$(readlink -f "${0%/*}")/dracut-init.sh" ]] \ + && dracutbasedir="$(readlink -f "${0%/*}")" + ;; + -H|--hostonly|--host-only) +@@ -841,10 +841,10 @@ if [[ $print_cmdline ]]; then + kmsgloglvl=0 + fi + +-if [[ -f $dracutbasedir/dracut-functions.sh ]]; then +- . $dracutbasedir/dracut-functions.sh ++if [[ -f $dracutbasedir/dracut-init.sh ]]; then ++ . $dracutbasedir/dracut-init.sh + else +- printf "%s\n" "dracut: Cannot find $dracutbasedir/dracut-functions.sh." >&2 ++ printf "%s\n" "dracut: Cannot find $dracutbasedir/dracut-init.sh." >&2 + printf "%s\n" "dracut: Are you running from a git checkout?" >&2 + printf "%s\n" "dracut: Try passing -l as an argument to $0" >&2 + exit 1 +diff --git a/dracut.spec b/dracut.spec +index 302cfc5..d22f586 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -296,6 +296,7 @@ rm -rf -- $RPM_BUILD_ROOT + %endif + %dir %{dracutlibdir} + %dir %{dracutlibdir}/modules.d ++%{dracutlibdir}/dracut-init.sh + %{dracutlibdir}/dracut-functions.sh + %{dracutlibdir}/dracut-functions + %{dracutlibdir}/dracut-version.sh +diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh +index 02ebc23..642b250 100755 +--- a/test/TEST-01-BASIC/test.sh ++++ b/test/TEST-01-BASIC/test.sh +@@ -29,7 +29,7 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay/source + mkdir -p $initdir +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient \ + umount strace less setsid +@@ -51,7 +51,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -80,7 +80,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-02-SYSTEMD/test.sh b/test/TEST-02-SYSTEMD/test.sh +index 2a8ed6b..4ebff83 100755 +--- a/test/TEST-02-SYSTEMD/test.sh ++++ b/test/TEST-02-SYSTEMD/test.sh +@@ -25,7 +25,7 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay/source + mkdir -p $initdir +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient \ + umount strace less setsid +@@ -47,7 +47,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mkfs.ext3 poweroff cp umount + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -76,7 +76,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-03-USR-MOUNT/test.sh b/test/TEST-03-USR-MOUNT/test.sh +index b8231fe..e772352 100755 +--- a/test/TEST-03-USR-MOUNT/test.sh ++++ b/test/TEST-03-USR-MOUNT/test.sh +@@ -55,7 +55,7 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay/source + mkdir -p $initdir +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient \ + umount strace less setsid +@@ -78,7 +78,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -114,7 +114,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-04-FULL-SYSTEMD/test.sh b/test/TEST-04-FULL-SYSTEMD/test.sh +index aa83122..3834238 100755 +--- a/test/TEST-04-FULL-SYSTEMD/test.sh ++++ b/test/TEST-04-FULL-SYSTEMD/test.sh +@@ -57,7 +57,7 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay/source + mkdir -p $initdir +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + + for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run; do + if [ -L "/$d" ]; then +@@ -221,7 +221,7 @@ EOF + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mkfs.btrfs btrfs poweroff cp umount sync + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -256,7 +256,7 @@ EOF + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-10-RAID/test.sh b/test/TEST-10-RAID/test.sh +index d79d5cd..cf474df 100755 +--- a/test/TEST-10-RAID/test.sh ++++ b/test/TEST-10-RAID/test.sh +@@ -28,7 +28,7 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay/source + (mkdir -p "$initdir"; cd "$initdir"; mkdir -p dev sys proc etc var/run tmp run) +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -49,7 +49,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mke2fs poweroff cp umount + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -77,7 +77,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst ./cryptroot-ask.sh /sbin/cryptroot-ask +diff --git a/test/TEST-11-LVM/test.sh b/test/TEST-11-LVM/test.sh +index 732d0c8..c3c27bc 100755 +--- a/test/TEST-11-LVM/test.sh ++++ b/test/TEST-11-LVM/test.sh +@@ -24,7 +24,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -46,7 +46,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mke2fs poweroff cp umount + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -69,7 +69,7 @@ test_setup() { + grep -F -m 1 -q dracut-root-block-created $TESTDIR/root.ext2 || return 1 + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-12-RAID-DEG/test.sh b/test/TEST-12-RAID-DEG/test.sh +index 87fe542..11f66b2 100755 +--- a/test/TEST-12-RAID-DEG/test.sh ++++ b/test/TEST-12-RAID-DEG/test.sh +@@ -66,7 +66,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -87,7 +87,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mke2fs poweroff cp umount dd grep + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -120,7 +120,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-13-ENC-RAID-LVM/test.sh b/test/TEST-13-ENC-RAID-LVM/test.sh +index 129620b..993f71d 100755 +--- a/test/TEST-13-ENC-RAID-LVM/test.sh ++++ b/test/TEST-13-ENC-RAID-LVM/test.sh +@@ -62,7 +62,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -83,7 +83,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mke2fs poweroff cp umount grep + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -113,7 +113,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-14-IMSM/test.sh b/test/TEST-14-IMSM/test.sh +index ad0cf7b..9465965 100755 +--- a/test/TEST-14-IMSM/test.sh ++++ b/test/TEST-14-IMSM/test.sh +@@ -54,7 +54,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -76,7 +76,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mke2fs poweroff cp umount grep + inst_hook initqueue 01 ./create-root.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +@@ -104,7 +104,7 @@ test_setup() { + echo $MD_UUID > $TESTDIR/mduuid + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-15-BTRFSRAID/test.sh b/test/TEST-15-BTRFSRAID/test.sh +index 71f5703..9b97136 100755 +--- a/test/TEST-15-BTRFSRAID/test.sh ++++ b/test/TEST-15-BTRFSRAID/test.sh +@@ -26,7 +26,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -47,7 +47,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mkfs.btrfs poweroff cp umount + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -77,7 +77,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-16-DMSQUASH/test.sh b/test/TEST-16-DMSQUASH/test.sh +index 252e845..c08a2a4 100755 +--- a/test/TEST-16-DMSQUASH/test.sh ++++ b/test/TEST-16-DMSQUASH/test.sh +@@ -30,7 +30,7 @@ test_setup() { + mkdir -p -- "$TESTDIR"/overlay + ( + export initdir="$TESTDIR"/overlay +- . "$basedir"/dracut-functions.sh ++ . "$basedir"/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +@@ -48,7 +48,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir="$TESTDIR"/root-source +- . "$basedir"/dracut-functions.sh ++ . "$basedir"/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient \ + umount strace less +diff --git a/test/TEST-17-LVM-THIN/test.sh b/test/TEST-17-LVM-THIN/test.sh +index 4c904b0..79e224e 100755 +--- a/test/TEST-17-LVM-THIN/test.sh ++++ b/test/TEST-17-LVM-THIN/test.sh +@@ -24,7 +24,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip route \ + mount dmesg ifconfig dhclient mkdir cp ping dhclient + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -46,7 +46,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mke2fs poweroff cp umount + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -69,7 +69,7 @@ test_setup() { + grep -F -m 1 -q dracut-root-block-created $TESTDIR/root.ext2 || return 1 + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-20-NFS/test.sh b/test/TEST-20-NFS/test.sh +index 7b5e3c5..14350e9 100755 +--- a/test/TEST-20-NFS/test.sh ++++ b/test/TEST-20-NFS/test.sh +@@ -221,7 +221,7 @@ test_setup() { + + ( + export initdir=$TESTDIR/mnt +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + + for _f in modules.builtin.bin modules.builtin; do + [[ $srcmods/$_f ]] && break +@@ -287,7 +287,7 @@ test_setup() { + # Make client root inside server root + ( + export initdir=$TESTDIR/mnt/nfs/client +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + + inst_multiple sh shutdown poweroff stty cat ps ln ip \ + mount dmesg mkdir cp ping grep +@@ -331,7 +331,7 @@ test_setup() { + # Make an overlay with needed tools for the test harness + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + mkdir $TESTDIR/overlay + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh +diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh +index f597783..a258c04 100755 +--- a/test/TEST-30-ISCSI/test.sh ++++ b/test/TEST-30-ISCSI/test.sh +@@ -104,7 +104,7 @@ test_setup() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sh shutdown poweroff stty cat ps ln ip \ + mount dmesg mkdir cp ping grep + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -121,7 +121,7 @@ test_setup() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple sfdisk mkfs.ext3 poweroff cp umount + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh +@@ -157,7 +157,7 @@ test_setup() { + rm -- $TESTDIR/client.img + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +@@ -177,7 +177,7 @@ test_setup() { + kernel=$KVERSION + ( + export initdir=$TESTDIR/mnt +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + ( + cd "$initdir"; + mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi +diff --git a/test/TEST-40-NBD/test.sh b/test/TEST-40-NBD/test.sh +index 59494ed..abf1a4f 100755 +--- a/test/TEST-40-NBD/test.sh ++++ b/test/TEST-40-NBD/test.sh +@@ -195,7 +195,7 @@ make_encrypted_root() { + # Create what will eventually be our root filesystem onto an overlay + ( + export initdir=$TESTDIR/overlay/source +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + mkdir -p "$initdir" + (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp ) + inst_multiple sh df free ls shutdown poweroff stty cat ps ln ip \ +@@ -214,7 +214,7 @@ make_encrypted_root() { + # second, install the files needed to make the root filesystem + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple mke2fs poweroff cp umount tune2fs + inst_hook emergency 000 ./hard-off.sh + inst_hook initqueue 01 ./create-root.sh +@@ -253,7 +253,7 @@ make_client_root() { + kernel=$KVERSION + ( + export initdir=$TESTDIR/mnt +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + mkdir -p "$initdir" + (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp ) + inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ +@@ -288,7 +288,7 @@ make_server_root() { + kernel=$KVERSION + ( + export initdir=$TESTDIR/mnt +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + mkdir -p "$initdir" + ( + cd "$initdir"; +@@ -335,7 +335,7 @@ test_setup() { + # Make the test image + ( + export initdir=$TESTDIR/overlay +- . $basedir/dracut-functions.sh ++ . $basedir/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +diff --git a/test/TEST-50-MULTINIC/test.sh b/test/TEST-50-MULTINIC/test.sh +index 3c6003b..4f73203 100755 +--- a/test/TEST-50-MULTINIC/test.sh ++++ b/test/TEST-50-MULTINIC/test.sh +@@ -150,7 +150,7 @@ test_setup() { + + ( + export initdir="$TESTDIR"/mnt +- . "$basedir"/dracut-functions.sh ++ . "$basedir"/dracut-init.sh + + ( + cd "$initdir"; +@@ -216,7 +216,7 @@ test_setup() { + # Make client root inside server root + ( + export initdir="$TESTDIR"/mnt/nfs/client +- . "$basedir"/dracut-functions.sh ++ . "$basedir"/dracut-init.sh + inst_multiple sh shutdown poweroff stty cat ps ln ip \ + mount dmesg mkdir cp ping grep ls + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do +@@ -256,7 +256,7 @@ test_setup() { + # Make an overlay with needed tools for the test harness + ( + export initdir="$TESTDIR"/overlay +- . "$basedir"/dracut-functions.sh ++ . "$basedir"/dracut-init.sh + inst_multiple poweroff shutdown + inst_hook emergency 000 ./hard-off.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules diff --git a/SOURCES/0259-Adding-support-for-read-write-filesystem-images.patch b/SOURCES/0259-Adding-support-for-read-write-filesystem-images.patch new file mode 100644 index 0000000..8ca30d5 --- /dev/null +++ b/SOURCES/0259-Adding-support-for-read-write-filesystem-images.patch @@ -0,0 +1,173 @@ +From b9c6d2b2afa94dcba7129390edb7b1a2eaf2c31c Mon Sep 17 00:00:00 2001 +From: Major Hayden +Date: Mon, 4 Aug 2014 10:27:36 -0500 +Subject: [PATCH] Adding support for read/write filesystem images + +A user can provide a filesystem image (rootfs.img) inside a compressed +tarball and that filesystem image will be mounted read/write. This provides +some benefits over a device mapper snapshot overlay, especially when the +live system becomes full. The boot command line simple needs +"rd.writable.fsimg" added to utilize this feature. + +Additional documentation for this option as well as other live boot +options is included. + +Signed-off-by: Major Hayden +(cherry picked from commit 504c0a8feca7d7ef470e4483a68cbaf9cb7df2bf) +--- + dracut.cmdline.7.asc | 82 ++++++++++++++++++++++++- + modules.d/90dmsquash-live/dmsquash-live-root.sh | 16 ++++- + modules.d/90dmsquash-live/module-setup.sh | 2 +- + 3 files changed, 96 insertions(+), 4 deletions(-) + +diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc +index bce8608..0493dcd 100644 +--- a/dracut.cmdline.7.asc ++++ b/dracut.cmdline.7.asc +@@ -729,10 +729,90 @@ rd.znet=qeth,0.0.0600,0.0.0601,0.0.0602,layer2=1,portname=foo + rd.znet=ctc,0.0.0600,0.0.0601,protocol=bar + -- + ++Booting live images ++~~~~~~~~~~~~~~~~~~~ ++Dracut offers multiple options for live booted images: ++ ++===================== ++squashfs with read-only filesystem image::: The system will boot with a read ++only filesystem from the squashfs and apply a writable device mapper snapshot ++over the read only filesystem. Using this method ensures a relatively fast ++boot and lower RAM usage. Users **must be careful** to avoid writing too many ++blocks to the snapshot volume. Once the blocks of the snapshot are exhaused, ++the live filesystem becomes unusable and requires a reboot. +++ ++The filesystem structure is expected to be: +++ ++[listing] ++-- ++squashfs.img | Squashfs downloaded via network ++ !(mount) ++ /LiveOS ++ |- ext3fs.img | Filesystem image to mount read-only ++ !(mount) ++ /bin | Live filesystem ++ /boot | ++ /dev | ++ ... | ++-- +++ ++Dracut uses this method of live booting by default. No additional command line ++options are required other than **root=live:** to specify the location ++of your squashed filesystem. +++ ++writable filesystem image::: The system will retrieve a compressed filesystem ++image, connect it to a loopback device, and mount it as a writable volume. More ++RAM is required during boot but the live filesystem is easier to manage if it ++becomes full. Users can make a filesystem image of any size and that size will ++be maintained when the system boots. +++ ++The filesystem structure is expected to be: +++ ++[listing] ++-- ++rootfs.tgz | Compressed tarball containing fileystem image ++ !(unpack) ++ /rootfs.img | Filesystem image ++ !(mount) ++ /bin | Live filesystem ++ /boot | ++ /dev | ++ ... | ++-- +++ ++To use this boot option, ensure that **rd.writable_fsimg=1** is in your kernel ++command line and add the **root=live:** to specify the location ++of your compressed filesystem image tarball. ++===================== ++ ++**root=**live:____:: ++Boots a live image retrieved from ____. Valid handlers: __http, httpd, ftp, tftp__. +++ ++[listing] ++.Example ++-- ++root=live:http://example.com/liveboot.img ++root=live:ftp://ftp.example.com/liveboot.img ++-- ++ ++**rd.live.debug=**1:: ++Enables debug output from the live boot process. ++ ++**rd.live.dir=**____:: ++Specifies the directory within the squashfs where the ext3fs.img or rootfs.img ++can be found. By default, this is __LiveOS__. ++ ++**rd.writable.fsimg=**1:: ++Enables writable filesystem support. The system will boot with a fully ++writable filesystem without snapshots __(see notes above about available live boot options)__. ++You can use the **rootflags** option to set mount options for the live ++filesystem as well __(see documentation about rootflags in the **Standard** section above)__. ++ ++ + Plymouth Boot Splash + ~~~~~~~~~~~~~~~~~~~~ + **plymouth.enable=0**:: +- disable the plymouth bootsplash completly. ++ disable the plymouth bootsplash completely. + + **rd.plymouth=0**:: + disable the plymouth bootsplash only for the initramfs. +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh +index 5705e8d..c6c02c7 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh +@@ -4,6 +4,8 @@ + + type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + ++command -v unpack_archive >/dev/null || . /lib/img-lib.sh ++ + PATH=/usr/sbin:/usr/bin:/sbin:/bin + + if getargbool 0 rd.live.debug -n -y rdlivedebug; then +@@ -26,6 +28,7 @@ getargbool 0 rd.live.ram -d -y live_ram && live_ram="yes" + getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes" + getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay="" + overlay=$(getarg rd.live.overlay -d overlay) ++getargbool 0 rd.writable.fsimg -d -y writable_fsimg && writable_fsimg="yes" + + # CD/DVD media check + [ -b $livedev ] && fs=$(blkid -s TYPE -o value $livedev) +@@ -180,9 +183,18 @@ fi + + if [ -n "$FSIMG" ] ; then + BASE_LOOPDEV=$( losetup -f ) +- losetup -r $BASE_LOOPDEV $FSIMG + +- do_live_from_base_loop ++ if [ -n "$writable_fsimg" ] ; then ++ # mount the provided fileysstem read/write ++ echo "Unpacking live filesystem (may take some time)" ++ unpack_archive $FSIMG /tmp/fsimg/ ++ losetup $BASE_LOOPDEV /tmp/fsimg/rootfs.img ++ echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw ++ else ++ # mount the filesystem read-only and add a dm snapshot for writes ++ losetup -r $BASE_LOOPDEV $FSIMG ++ do_live_from_base_loop ++ fi + fi + + # we might have an embedded fs image on squashfs (compressed live) +diff --git a/modules.d/90dmsquash-live/module-setup.sh b/modules.d/90dmsquash-live/module-setup.sh +index c6d1f9d..f52717d 100755 +--- a/modules.d/90dmsquash-live/module-setup.sh ++++ b/modules.d/90dmsquash-live/module-setup.sh +@@ -11,7 +11,7 @@ check() { + depends() { + # if dmsetup is not installed, then we cannot support fedora/red hat + # style live images +- echo dm rootfs-block ++ echo dm rootfs-block img-lib + return 0 + } + diff --git a/SOURCES/0260-dmsquash-Add-rd.live.overlay.thin.patch b/SOURCES/0260-dmsquash-Add-rd.live.overlay.thin.patch new file mode 100644 index 0000000..33b2569 --- /dev/null +++ b/SOURCES/0260-dmsquash-Add-rd.live.overlay.thin.patch @@ -0,0 +1,82 @@ +From db1e692c13290fba4d1c9a5e81b7374c677cb421 Mon Sep 17 00:00:00 2001 +From: Fabian Deutsch +Date: Wed, 18 Feb 2015 14:31:40 +0100 +Subject: [PATCH] dmsquash: Add rd.live.overlay.thin + +This option changes the underlying mechanism for the overlay in the +dmsquash module. +Instead of a plain dm snapshot a dm thin snapshot is used. The advantage +of the thin snapshot is, that the TRIM command is recognized, which +means that at runtime, only the occupied blocks will be claimed from +memory, and freed blocks will really be freed in ram. + +Signed-off-by: Fabian Deutsch +(cherry picked from commit d6e34d362a05cda61baaf8e231ad3f0e8665a9cc) +--- + dracut.cmdline.7.asc | 7 +++++++ + modules.d/90dmsquash-live/dmsquash-live-root.sh | 27 ++++++++++++++++++++++++- + 2 files changed, 33 insertions(+), 1 deletion(-) + +diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc +index 0493dcd..0c3bc29 100644 +--- a/dracut.cmdline.7.asc ++++ b/dracut.cmdline.7.asc +@@ -802,6 +802,13 @@ Enables debug output from the live boot process. + Specifies the directory within the squashfs where the ext3fs.img or rootfs.img + can be found. By default, this is __LiveOS__. + ++**rd.live.overlay.thin=**1:: ++Enables the usage of thin snapshots instead of classic dm snapshots. ++The advantage of thin snapshots is, that they support discards, and will free ++blocks which are not claimed by the filesystem. In this use case this means, ++that memory is given back to the kernel, when the filesystem does not claim it ++anymore. ++ + **rd.writable.fsimg=**1:: + Enables writable filesystem support. The system will boot with a fully + writable filesystem without snapshots __(see notes above about available live boot options)__. +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh +index c6c02c7..0645a0b 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh +@@ -30,6 +30,8 @@ getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay + overlay=$(getarg rd.live.overlay -d overlay) + getargbool 0 rd.writable.fsimg -d -y writable_fsimg && writable_fsimg="yes" + ++getargbool 0 rd.live.overlay.thin && thin_snapshot="yes" ++ + # CD/DVD media check + [ -b $livedev ] && fs=$(blkid -s TYPE -o value $livedev) + if [ "$fs" = "iso9660" -o "$fs" = "udf" ]; then +@@ -146,7 +148,30 @@ do_live_overlay() { + base=$BASE_LOOPDEV + over=$OVERLAY_LOOPDEV + fi +- echo 0 $sz snapshot $base $over p 8 | dmsetup create live-rw ++ if [ -n "$thin_snapshot" ]; then ++ modprobe dm_thin_pool ++ mkdir /run/initramfs/thin-overlay ++ ++ # In block units (512b) ++ thin_data_sz=$(( $overlay_size * 1024 * 1024 / 512 )) ++ thin_meta_sz=$(( $thin_data_sz / 10 )) ++ ++ # It is important to have the backing file on a tmpfs ++ # this is needed to let the loopdevice support TRIM ++ dd if=/dev/null of=/run/initramfs/thin-overlay/meta bs=1b count=1 seek=$((thin_meta_sz)) 2> /dev/null ++ dd if=/dev/null of=/run/initramfs/thin-overlay/data bs=1b count=1 seek=$((thin_data_sz)) 2> /dev/null ++ ++ THIN_META_LOOPDEV=$( losetup --show -f /run/initramfs/thin-overlay/meta ) ++ THIN_DATA_LOOPDEV=$( losetup --show -f /run/initramfs/thin-overlay/data ) ++ ++ echo 0 $thin_data_sz thin-pool $THIN_META_LOOPDEV $THIN_DATA_LOOPDEV 1024 1024 | dmsetup create live-overlay-pool ++ dmsetup message /dev/mapper/live-overlay-pool 0 "create_thin 0" ++ ++ # Create a snapshot of the base image ++ echo 0 $sz thin /dev/mapper/live-overlay-pool 0 $base | dmsetup create live-rw ++ else ++ echo 0 $sz snapshot $base $over p 8 | dmsetup create live-rw ++ fi + + # Create a device that always points to a ro base image + echo 0 $sz linear $base 0 | dmsetup create --readonly live-base diff --git a/SOURCES/0261-dmsquash-live-setup-the-images-in-run-initramfs.patch b/SOURCES/0261-dmsquash-live-setup-the-images-in-run-initramfs.patch new file mode 100644 index 0000000..f760866 --- /dev/null +++ b/SOURCES/0261-dmsquash-live-setup-the-images-in-run-initramfs.patch @@ -0,0 +1,53 @@ +From 23e3c7f95f7747375fdda20e0dfac10bc7a8920f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 16 Dec 2014 12:53:18 +0100 +Subject: [PATCH] dmsquash-live: setup the images in /run/initramfs + +We want to cleanup / after switch_root. Placing the loop files in / +works, but it is more sane to put them in /run/initramfs + +(cherry picked from commit 1f8abe81a9fca0f44c63bf3bd30a7f7fbec28642) +--- + modules.d/90dmsquash-live/dmsquash-live-root.sh | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh +index 0645a0b..12354f4 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh +@@ -189,9 +189,9 @@ fi + + if [ -n "$OSMINSQFS" ]; then + # decompress the delta data +- dd if=$OSMINSQFS of=/osmin.img 2> /dev/null ++ dd if=$OSMINSQFS of=/run/initramfs/osmin.img 2> /dev/null + OSMIN_SQUASHED_LOOPDEV=$( losetup -f ) +- losetup -r $OSMIN_SQUASHED_LOOPDEV /osmin.img ++ losetup -r $OSMIN_SQUASHED_LOOPDEV /run/initramfs/osmin.img + mkdir -m 0755 -p /run/initramfs/squashfs.osmin + mount -n -t squashfs -o ro $OSMIN_SQUASHED_LOOPDEV /run/initramfs/squashfs.osmin + OSMIN_LOOPDEV=$( losetup -f ) +@@ -212,8 +212,8 @@ if [ -n "$FSIMG" ] ; then + if [ -n "$writable_fsimg" ] ; then + # mount the provided fileysstem read/write + echo "Unpacking live filesystem (may take some time)" +- unpack_archive $FSIMG /tmp/fsimg/ +- losetup $BASE_LOOPDEV /tmp/fsimg/rootfs.img ++ unpack_archive $FSIMG /run/initramfs/fsimg/ ++ losetup $BASE_LOOPDEV /run/initramfs/fsimg/rootfs.img + echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw + else + # mount the filesystem read-only and add a dm snapshot for writes +@@ -231,10 +231,10 @@ if [ -e "$SQUASHED" ] ; then + if [ -n "$live_ram" ] ; then + echo "Copying live image to RAM..." + echo "(this may take a few minutes)" +- dd if=$SQUASHED of=/squashed.img bs=512 2> /dev/null ++ dd if=$SQUASHED of=/run/initramfs/squashed.img bs=512 2> /dev/null + umount -n /run/initramfs/live + echo "Done copying live image to RAM." +- SQUASHED="/squashed.img" ++ SQUASHED="/run/initramfs/squashed.img" + fi + + SQUASHED_LOOPDEV=$( losetup -f ) diff --git a/SOURCES/0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch b/SOURCES/0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch new file mode 100644 index 0000000..9df54bc --- /dev/null +++ b/SOURCES/0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch @@ -0,0 +1,140 @@ +From 70b7ec9492f950bcfb6f390c58ad6e3e2b8fda9c Mon Sep 17 00:00:00 2001 +From: Fabian Deutsch +Date: Thu, 19 Feb 2015 10:09:14 +0100 +Subject: [PATCH] dmsquash: Add squashfs support to rd.live.fsimg + +Previously rd.live.fsimg only supported filesystems residing in +(compressed) archives. +Now rd.live.fsimg can also be used when a squashfs image is used. +This is achieved by extracting the rootfs image from the squashfs and +then continue with the default routines for rd.live.fsimg. +In addition some code duplication got removed and some documentation +got added. + +Signed-off-by: Fabian Deutsch +(cherry picked from commit b0472eac111268e2cae783097d0eccc1986e1762) +--- + dracut.cmdline.7.asc | 9 ++++ + modules.d/90dmsquash-live/dmsquash-live-root.sh | 64 +++++++++++++------------ + 2 files changed, 42 insertions(+), 31 deletions(-) + +diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc +index 0c3bc29..1e89bd5 100644 +--- a/dracut.cmdline.7.asc ++++ b/dracut.cmdline.7.asc +@@ -802,6 +802,10 @@ Enables debug output from the live boot process. + Specifies the directory within the squashfs where the ext3fs.img or rootfs.img + can be found. By default, this is __LiveOS__. + ++**rd.live.ram=**1:: ++Copy the complete image to RAM and use this for booting. This is useful ++when the image resides on i.e. a DVD which needs to be ejected later on. ++ + **rd.live.overlay.thin=**1:: + Enables the usage of thin snapshots instead of classic dm snapshots. + The advantage of thin snapshots is, that they support discards, and will free +@@ -814,6 +818,11 @@ Enables writable filesystem support. The system will boot with a fully + writable filesystem without snapshots __(see notes above about available live boot options)__. + You can use the **rootflags** option to set mount options for the live + filesystem as well __(see documentation about rootflags in the **Standard** section above)__. ++This implies that the whole image is copied to RAM before the boot continues. +++ ++NOTE: There must be enough free RAM available to hold the complete image. +++ ++This method is very suitable for diskless boots. + + + Plymouth Boot Splash +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh +index 12354f4..64abc0b 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh +@@ -148,6 +148,7 @@ do_live_overlay() { + base=$BASE_LOOPDEV + over=$OVERLAY_LOOPDEV + fi ++ + if [ -n "$thin_snapshot" ]; then + modprobe dm_thin_pool + mkdir /run/initramfs/thin-overlay +@@ -199,29 +200,6 @@ if [ -n "$OSMINSQFS" ]; then + umount -l /run/initramfs/squashfs.osmin + fi + +-# we might have an embedded fs image to use as rootfs (uncompressed live) +-if [ -e /run/initramfs/live/${live_dir}/ext3fs.img ]; then +- FSIMG="/run/initramfs/live/${live_dir}/ext3fs.img" +-elif [ -e /run/initramfs/live/${live_dir}/rootfs.img ]; then +- FSIMG="/run/initramfs/live/${live_dir}/rootfs.img" +-fi +- +-if [ -n "$FSIMG" ] ; then +- BASE_LOOPDEV=$( losetup -f ) +- +- if [ -n "$writable_fsimg" ] ; then +- # mount the provided fileysstem read/write +- echo "Unpacking live filesystem (may take some time)" +- unpack_archive $FSIMG /run/initramfs/fsimg/ +- losetup $BASE_LOOPDEV /run/initramfs/fsimg/rootfs.img +- echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw +- else +- # mount the filesystem read-only and add a dm snapshot for writes +- losetup -r $BASE_LOOPDEV $FSIMG +- do_live_from_base_loop +- fi +-fi +- + # we might have an embedded fs image on squashfs (compressed live) + if [ -e /run/initramfs/live/${live_dir}/${squash_image} ]; then + SQUASHED="/run/initramfs/live/${live_dir}/${squash_image}" +@@ -242,18 +220,42 @@ if [ -e "$SQUASHED" ] ; then + mkdir -m 0755 -p /run/initramfs/squashfs + mount -n -t squashfs -o ro $SQUASHED_LOOPDEV /run/initramfs/squashfs + +- BASE_LOOPDEV=$( losetup -f ) +- if [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then +- losetup -r $BASE_LOOPDEV /run/initramfs/squashfs/LiveOS/ext3fs.img +- elif [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then +- losetup -r $BASE_LOOPDEV /run/initramfs/squashfs/LiveOS/rootfs.img +- fi ++fi ++ ++# we might have an embedded fs image to use as rootfs (uncompressed live) ++if [ -e /run/initramfs/live/${live_dir}/ext3fs.img ]; then ++ FSIMG="/run/initramfs/live/${live_dir}/ext3fs.img" ++elif [ -e /run/initramfs/live/${live_dir}/rootfs.img ]; then ++ FSIMG="/run/initramfs/live/${live_dir}/rootfs.img" ++elif [ -f /run/initramfs/squashfs/LiveOS/ext3fs.img ]; then ++ FSIMG="/run/initramfs/squashfs/LiveOS/ext3fs.img" ++elif [ -f /run/initramfs/squashfs/LiveOS/rootfs.img ]; then ++ FSIMG="/run/initramfs/squashfs/LiveOS/rootfs.img" ++fi + +- umount -l /run/initramfs/squashfs ++if [ -n "$FSIMG" ] ; then ++ BASE_LOOPDEV=$( losetup -f ) + +- do_live_from_base_loop ++ if [ -n "$writable_fsimg" ] ; then ++ # mount the provided fileysstem read/write ++ echo "Unpacking live filesystem (may take some time)" ++ mkdir /run/initramfs/fsimg/ ++ if [ -n "$SQUASHED" ]; then ++ cp -v $FSIMG /run/initramfs/fsimg/rootfs.img ++ else ++ unpack_archive $FSIMG /run/initramfs/fsimg/ ++ fi ++ losetup $BASE_LOOPDEV /run/initramfs/fsimg/rootfs.img ++ echo "0 $( blockdev --getsize $BASE_LOOPDEV ) linear $BASE_LOOPDEV 0" | dmsetup create live-rw ++ else ++ # mount the filesystem read-only and add a dm snapshot for writes ++ losetup -r $BASE_LOOPDEV $FSIMG ++ do_live_from_base_loop ++ fi + fi + ++[ -e "$SQUASHED" ] && umount -l /run/initramfs/squashfs ++ + if [ -b "$OSMIN_LOOPDEV" ]; then + # set up the devicemapper snapshot device, which will merge + # the normal live fs image, and the delta, into a minimzied fs image diff --git a/SOURCES/0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch b/SOURCES/0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch new file mode 100644 index 0000000..502b124 --- /dev/null +++ b/SOURCES/0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch @@ -0,0 +1,34 @@ +From 55473e86b6fc1bc15d58810eb73594b1f30568bf Mon Sep 17 00:00:00 2001 +From: Fabian Deutsch +Date: Thu, 21 May 2015 12:37:38 +0200 +Subject: [PATCH] doc: Add a minimal rd.live.overlay documentation + +Signed-off-by: Fabian Deutsch +(cherry picked from commit a1b4efe6a722ac3754d8a48109575d11d5ccf61b) +--- + dracut.cmdline.7.asc | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc +index 1e89bd5..c7e3bd4 100644 +--- a/dracut.cmdline.7.asc ++++ b/dracut.cmdline.7.asc +@@ -806,6 +806,18 @@ can be found. By default, this is __LiveOS__. + Copy the complete image to RAM and use this for booting. This is useful + when the image resides on i.e. a DVD which needs to be ejected later on. + ++**rd.live.overlay=**__:_(|auto)__ ++Allow the usage of a permanent overlay. ++__ specifies the path to a device with a mountable filesystem. ++__ is the path to a file within that filesystem, which shall be used to ++persist the changes made to the device specified by **root=live:____** option. +++ ++[listing] ++.Example ++-- ++rd.live.overlay=/dev/sdb1:persistent-overlay.img ++-- ++ + **rd.live.overlay.thin=**1:: + Enables the usage of thin snapshots instead of classic dm snapshots. + The advantage of thin snapshots is, that they support discards, and will free diff --git a/SOURCES/0264-50drm-add-hyperv_fb-kernel-module.patch b/SOURCES/0264-50drm-add-hyperv_fb-kernel-module.patch new file mode 100644 index 0000000..4d2615f --- /dev/null +++ b/SOURCES/0264-50drm-add-hyperv_fb-kernel-module.patch @@ -0,0 +1,24 @@ +From afbff20e51c34be078db8e55f76c3304f7f6ab6a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 18 May 2015 13:43:26 +0200 +Subject: [PATCH] 50drm: add hyperv_fb kernel module + +https://bugzilla.redhat.com/show_bug.cgi?id=1192035 +(cherry picked from commit 81b67232dcc796178124676d124d7d91514e4a8f) +--- + modules.d/50drm/module-setup.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/modules.d/50drm/module-setup.sh b/modules.d/50drm/module-setup.sh +index bf33c5b..0e1c5ff 100755 +--- a/modules.d/50drm/module-setup.sh ++++ b/modules.d/50drm/module-setup.sh +@@ -48,6 +48,8 @@ installkernel() { + return 0 + } + ++ instmods amdkfd hyperv_fb ++ + for _modname in $(find_kernel_modules_by_path drivers/gpu/drm \ + | drm_module_filter) ; do + # if the hardware is present, include module even if it is not currently loaded, diff --git a/SOURCES/0265-kernel-modules-install-all-HID-drivers.patch b/SOURCES/0265-kernel-modules-install-all-HID-drivers.patch new file mode 100644 index 0000000..db17be0 --- /dev/null +++ b/SOURCES/0265-kernel-modules-install-all-HID-drivers.patch @@ -0,0 +1,56 @@ +From b34bd60c3b4378ea33768c4dece5b744a7e769b0 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 23 Apr 2015 13:46:52 +0200 +Subject: [PATCH] kernel-modules: install all HID drivers + +Instead of hardcoding a list of useful drivers, which has to be curated +all the time, just include all HID drivers. + +(cherry picked from commit 180e9d78516fb4b2ee5baef44521007a860d4dd2) +--- + modules.d/90kernel-modules/module-setup.sh | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +diff --git a/modules.d/90kernel-modules/module-setup.sh b/modules.d/90kernel-modules/module-setup.sh +index fba2bc1..34d85b1 100755 +--- a/modules.d/90kernel-modules/module-setup.sh ++++ b/modules.d/90kernel-modules/module-setup.sh +@@ -40,20 +40,31 @@ installkernel() { + ehci-hcd ehci-pci ehci-platform \ + ohci-hcd ohci-pci \ + uhci-hcd \ +- xhci-hcd ++ xhci-hcd xhci-pci xhci-plat-hcd + +- instmods yenta_socket scsi_dh_rdac scsi_dh_emc \ +- atkbd i8042 usbhid hid-apple hid-sunplus hid-cherry hid-logitech \ +- hid-logitech-dj hid-microsoft firewire-ohci \ +- pcmcia usb_storage nvme hid-hyperv hv-vmbus \ +- sdhci_acpi ++ instmods yenta_socket scsi_dh_rdac scsi_dh_emc scsi_dh_alua \ ++ atkbd i8042 usbhid firewire-ohci pcmcia hv-vmbus \ ++ atkbd i8042 usbhid firewire-ohci pcmcia usb_storage \ ++ nvme hv-vmbus sdhci_acpi ++ ++ instmods \ ++ "=drivers/hid" \ ++ "=drivers/input/serio" \ ++ "=drivers/input/keyboard" + + if [[ "$(uname -p)" == arm* ]]; then + # arm specific modules + hostonly='' instmods \ + connector-hdmi connector-dvi encoder-tfp410 \ + encoder-tpd12s015 i2c-tegra gpio-regulator \ +- as3722-regulator orion-ehci ehci-tegra ++ as3722-regulator orion-ehci ehci-tegra ++ instmods \ ++ "=drivers/i2c/busses" \ ++ "=drivers/regulator" \ ++ "=drivers/rtc" \ ++ "=drivers/usb/host" \ ++ "=drivers/usb/phy" \ ++ ${NULL} + fi + + # install virtual machine support diff --git a/SOURCES/0266-network-add-options-to-tweak-timeouts.patch b/SOURCES/0266-network-add-options-to-tweak-timeouts.patch new file mode 100644 index 0000000..ff25ad9 --- /dev/null +++ b/SOURCES/0266-network-add-options-to-tweak-timeouts.patch @@ -0,0 +1,197 @@ +From d8ad687e1a4c0343eb076902b11aff2b2b2c4b85 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 3 Jul 2015 13:30:40 +0200 +Subject: [PATCH] network: add options to tweak timeouts + + rd.net.dhcp.retry= + If this option is set, dracut will try to connect via dhcp + times before failing. Default is 1. + + rd.net.timeout.dhcp= + If this option is set, dhclient is called with "-timeout ". + + rd.net.timeout.iflink= + Wait until link shows up. Default is 60 seconds. + + rd.net.timeout.ifup= + Wait until link has state "UP". Default is 20 seconds. + + rd.net.timeout.route= + Wait until route shows up. Default is 20 seconds. + + rd.net.timeout.ipv6dad= + Wait until IPv6 DAD is finished. Default is 50 seconds. + + rd.net.timeout.ipv6auto= + Wait until IPv6 automatic addresses are assigned. + Default is 40 seconds. + + rd.net.timeout.carrier= + Wait until carrier is recognized. Default is 5 seconds. +--- + dracut.cmdline.7.asc | 25 +++++++++++++++++++++++++ + modules.d/40network/ifup.sh | 26 ++++++++++++++++++++++---- + modules.d/40network/net-lib.sh | 36 ++++++++++++++++++++++++++++++------ + 3 files changed, 77 insertions(+), 10 deletions(-) + +diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc +index c7e3bd4..5f3dead 100644 +--- a/dracut.cmdline.7.asc ++++ b/dracut.cmdline.7.asc +@@ -572,6 +572,31 @@ NFS + **rd.nfs.domain=**____:: + Set the NFSv4 domain name. Will overwrite the settings in _/etc/idmap.conf_. + ++**rd.net.dhcp.retry=**____:: ++ If this option is set, dracut will try to connect via dhcp times before failing. ++ Default is 1. ++ ++**rd.net.timeout.dhcp=**____:: ++ If this option is set, dhclient is called with "-timeout ". ++ ++**rd.net.timeout.iflink=**____:: ++ Wait until link shows up. Default is 60 seconds. ++ ++**rd.net.timeout.ifup=**____:: ++ Wait until link has state "UP". Default is 20 seconds. ++ ++**rd.net.timeout.route=**____:: ++ Wait until route shows up. Default is 20 seconds. ++ ++**rd.net.timeout.ipv6dad=**____:: ++ Wait until IPv6 DAD is finished. Default is 50 seconds. ++ ++**rd.net.timeout.ipv6auto=**____:: ++ Wait until IPv6 automatic addresses are assigned. Default is 40 seconds. ++ ++**rd.net.timeout.carrier=**____:: ++ Wait until carrier is recognized. Default is 5 seconds. ++ + CIFS + ~~~ + **root=**cifs://[____[:____]@]____:____:: +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 3cff725..2f51e6d 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -98,15 +98,33 @@ do_dhcp() { + # event for nfsroot + # XXX add -V vendor class and option parsing per kernel + ++ local _COUNT=0 ++ local _timeout=$(getargs rd.net.timeout.dhcp=) ++ local _DHCPRETRY=$(getargs rd.net.dhcp.retry=) ++ _DHCPRETRY=${_DHCPRETRY:-1} ++ + [ -e /tmp/dhclient.$netif.pid ] && return 0 + + if ! iface_has_link $netif; then +- echo "No carrier detected" ++ warn "No carrier detected on interface $netif" + return 1 + fi +- echo "Starting dhcp for interface $netif" +- dhclient "$@" -1 -q -cf /etc/dhclient.conf -pf /tmp/dhclient.$netif.pid -lf /tmp/dhclient.$netif.lease $netif \ +- || echo "dhcp failed" ++ ++ while [ $_COUNT -lt $_DHCPRETRY ]; do ++ info "Starting dhcp for interface $netif" ++ dhclient "$@" \ ++ ${_timeout:+-timeout $_timeout} \ ++ -1 -q \ ++ -cf /etc/dhclient.conf \ ++ -pf /tmp/dhclient.$netif.pid \ ++ -lf /tmp/dhclient.$netif.lease \ ++ $netif \ ++ && return 0 ++ _COUNT=$(($_COUNT+1)) ++ [ $_COUNT -lt $_DHCPRETRY ] && sleep 1 ++ done ++ warn "dhcp for interface $netif failed" ++ return 1 + } + + load_ipv6() { +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 1f77a15..de5273c 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -486,7 +486,11 @@ parse_ifname_opts() { + wait_for_if_link() { + local cnt=0 + local li +- while [ $cnt -lt 600 ]; do ++ local timeout="$(getargs rd.net.timeout.iflink=)" ++ timeout=${timeout:-60} ++ timeout=$(($timeout*10)) ++ ++ while [ $cnt -lt $timeout ]; do + li=$(ip -o link show dev $1 2>/dev/null) + [ -n "$li" ] && return 0 + sleep 0.1 +@@ -498,7 +502,11 @@ wait_for_if_link() { + wait_for_if_up() { + local cnt=0 + local li +- while [ $cnt -lt 200 ]; do ++ local timeout="$(getargs rd.net.timeout.ifup=)" ++ timeout=${timeout:-20} ++ timeout=$(($timeout*10)) ++ ++ while [ $cnt -lt $timeout ]; do + li=$(ip -o link show up dev $1) + [ -n "$li" ] && [ -z "${li##*state UP*}" ] && return 0 + sleep 0.1 +@@ -509,7 +517,11 @@ wait_for_if_up() { + + wait_for_route_ok() { + local cnt=0 +- while [ $cnt -lt 200 ]; do ++ local timeout="$(getargs rd.net.timeout.route=)" ++ timeout=${timeout:-20} ++ timeout=$(($timeout*10)) ++ ++ while [ $cnt -lt $timeout ]; do + li=$(ip route show) + [ -n "$li" ] && [ -z "${li##*$1*}" ] && return 0 + sleep 0.1 +@@ -521,7 +533,11 @@ wait_for_route_ok() { + wait_for_ipv6_dad() { + local cnt=0 + local li +- while [ $cnt -lt 500 ]; do ++ local timeout="$(getargs rd.net.timeout.ipv6dad=)" ++ timeout=${timeout:-50} ++ timeout=$(($timeout*10)) ++ ++ while [ $cnt -lt $timeout ]; do + li=$(ip -6 addr show dev $1 scope link) + strstr "$li" "tentative" || return 0 + sleep 0.1 +@@ -533,7 +549,11 @@ wait_for_ipv6_dad() { + wait_for_ipv6_auto() { + local cnt=0 + local li +- while [ $cnt -lt 400 ]; do ++ local timeout="$(getargs rd.net.timeout.ipv6auto=)" ++ timeout=${timeout:-40} ++ timeout=$(($timeout*10)) ++ ++ while [ $cnt -lt $timeout ]; do + li=$(ip -6 addr show dev $1) + if ! strstr "$li" "tentative"; then + strstr "$li" "dynamic" && return 0 +@@ -561,8 +581,12 @@ iface_has_link() { + [ -n "$interface" ] || return 2 + interface="/sys/class/net/$interface" + [ -d "$interface" ] || return 2 ++ local timeout="$(getargs rd.net.timeout.carrier=)" ++ timeout=${timeout:-5} ++ timeout=$(($timeout*10)) ++ + linkup "$1" +- while [ $cnt -lt 50 ]; do ++ while [ $cnt -lt $timeout ]; do + [ "$(cat $interface/carrier)" = 1 ] && return 0 + sleep 0.1 + cnt=$(($cnt+1)) diff --git a/SOURCES/0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch b/SOURCES/0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch new file mode 100644 index 0000000..b603e4a --- /dev/null +++ b/SOURCES/0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch @@ -0,0 +1,126 @@ +From d02f522089863af2a802cef9e63965349bfcc819 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Fri, 3 Jul 2015 13:40:12 +0200 +Subject: [PATCH] fcoe: start with fcoemon instead of fipvlan + +--- + modules.d/95fcoe/fcoe-up.sh | 30 ++++++++++++++++++++++++++++-- + modules.d/95fcoe/module-setup.sh | 7 +++++-- + modules.d/95fcoe/parse-fcoe.sh | 4 ++-- + 3 files changed, 35 insertions(+), 6 deletions(-) + +diff --git a/modules.d/95fcoe/fcoe-up.sh b/modules.d/95fcoe/fcoe-up.sh +index edbfcc8..823d7ac 100755 +--- a/modules.d/95fcoe/fcoe-up.sh ++++ b/modules.d/95fcoe/fcoe-up.sh +@@ -20,12 +20,28 @@ type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh + + netif=$1 + dcb=$2 ++vlan="yes" + + linkup "$netif" + + netdriver=$(readlink -f /sys/class/net/$netif/device/driver) + netdriver=${netdriver##*/} + ++write_fcoemon_cfg() { ++ echo FCOE_ENABLE=\"yes\" > /etc/fcoe/cfg-$netif ++ if [ "$dcb" = "dcb" ]; then ++ echo DCB_REQUIRED=\"yes\" >> /etc/fcoe/cfg-$netif ++ else ++ echo DCB_REQUIRED=\"no\" >> /etc/fcoe/cfg-$netif ++ fi ++ if [ "$vlan" = "yes" ]; then ++ echo AUTO_VLAN=\"yes\" >> /etc/fcoe/cfg-$netif ++ else ++ echo AUTO_VLAN=\"no\" >> /etc/fcoe/cfg-$netif ++ fi ++ echo MODE=\"fabric\" >> /etc/fcoe/cfg-$netif ++} ++ + if [ "$dcb" = "dcb" ]; then + # Note lldpad will stay running after switchroot, the system initscripts + # are to kill it and start a new lldpad to take over. Data is transfered +@@ -52,6 +68,13 @@ if [ "$dcb" = "dcb" ]; then + done + + while [ $i -lt 60 ]; do ++ dcbtool sc "$netif" pfc e:1 a:1 w:1 && break ++ info "Retrying to turn dcb on" ++ sleep 1 ++ i=$(($i+1)) ++ done ++ ++ while [ $i -lt 60 ]; do + dcbtool sc "$netif" app:fcoe e:1 a:1 w:1 && break + info "Retrying to turn fcoe on" + sleep 1 +@@ -60,7 +83,8 @@ if [ "$dcb" = "dcb" ]; then + + sleep 1 + +- fipvlan "$netif" -c -s ++ write_fcoemon_cfg ++ fcoemon --syslog + elif [ "$netdriver" = "bnx2x" ]; then + # If driver is bnx2x, do not use /sys/module/fcoe/parameters/create but fipvlan + modprobe 8021q +@@ -69,7 +93,9 @@ elif [ "$netdriver" = "bnx2x" ]; then + sleep 3 + fipvlan "$netif" -c -s + else +- echo -n "$netif" > /sys/module/fcoe/parameters/create ++ vlan="no" ++ write_fcoemon_cfg ++ fcoemon --syslog + fi + + need_shutdown +diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh +index 8c6290d..ec573ea 100755 +--- a/modules.d/95fcoe/module-setup.sh ++++ b/modules.d/95fcoe/module-setup.sh +@@ -3,7 +3,7 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + check() { +- require_binaries dcbtool fipvlan lldpad ip readlink || return 1 ++ require_binaries dcbtool fipvlan lldpad ip readlink fcoemon fcoeadm || return 1 + return 0 + } + +@@ -17,9 +17,12 @@ installkernel() { + } + + install() { +- inst_multiple ip dcbtool fipvlan lldpad readlink lldptool ++ inst_multiple ip dcbtool fipvlan lldpad readlink lldptool fcoemon fcoeadm ++ inst_libdir_file 'libhbalinux.so*' ++ inst "/etc/hba.conf" "/etc/hba.conf" + + mkdir -m 0755 -p "$initdir/var/lib/lldpad" ++ mkdir -m 0755 -p "$initdir/etc/fcoe" + + inst "$moddir/fcoe-up.sh" "/sbin/fcoe-up" + inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd" +diff --git a/modules.d/95fcoe/parse-fcoe.sh b/modules.d/95fcoe/parse-fcoe.sh +index dc40c82..7eca0b6 100755 +--- a/modules.d/95fcoe/parse-fcoe.sh ++++ b/modules.d/95fcoe/parse-fcoe.sh +@@ -22,13 +22,13 @@ + + + # BRCM: Later, should check whether bnx2x is loaded first before loading bnx2fc so do not load bnx2fc when there are no Broadcom adapters +-[ -e /sys/module/fcoe/parameters/create ] || modprobe -a fcoe || die "FCoE requested but kernel/initrd does not support FCoE" ++[ -e /sys/bus/fcoe/ctlr_create ] || modprobe -a fcoe || die "FCoE requested but kernel/initrd does not support FCoE" + + modprobe bnx2fc >/dev/null 2>&1 + udevadm settle --timeout=30 + + # FCoE actually supported? +-[ -e /sys/module/fcoe/parameters/create ] || modprobe fcoe || die "FCoE requested but kernel/initrd does not support FCoE" ++[ -e /sys/bus/fcoe/ctlr_create ] || modprobe fcoe || die "FCoE requested but kernel/initrd does not support FCoE" + + parse_fcoe_opts() { + local IFS=: diff --git a/SOURCES/0268-fcoe-EDD-parsing-patch-for-i40e.patch b/SOURCES/0268-fcoe-EDD-parsing-patch-for-i40e.patch new file mode 100644 index 0000000..a6d7ce5 --- /dev/null +++ b/SOURCES/0268-fcoe-EDD-parsing-patch-for-i40e.patch @@ -0,0 +1,35 @@ +From 4031a2fa642c1db897c1340ad2718301bf873fb3 Mon Sep 17 00:00:00 2001 +From: Chris Leech +Date: Fri, 3 Jul 2015 13:44:16 +0200 +Subject: [PATCH] fcoe: EDD parsing patch for i40e + +--- + modules.d/95fcoe/fcoe-edd.sh | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/modules.d/95fcoe/fcoe-edd.sh b/modules.d/95fcoe/fcoe-edd.sh +index 5a81a2e..d0ea60d 100755 +--- a/modules.d/95fcoe/fcoe-edd.sh ++++ b/modules.d/95fcoe/fcoe-edd.sh +@@ -11,8 +11,21 @@ fi + + for disk in /sys/firmware/edd/int13_*; do + [ -d $disk ] || continue ++ if [ -e ${disk}/pci_dev/driver ]; then ++ driver=`readlink ${disk}/pci_dev/driver` ++ driver=${driver##*/} ++ fi ++ # i40e uses dev_port 1 for a virtual fcoe function ++ if [ "${driver}" == "i40e" ]; then ++ dev_port=1 ++ fi + for nic in ${disk}/pci_dev/net/*; do + [ -d $nic ] || continue ++ if [ -n "${dev_port}" -a -e ${nic}/dev_port ]; then ++ if [ `cat ${nic}/dev_port` -ne ${dev_port} ]; then ++ continue ++ fi ++ fi + if [ -e ${nic}/address ]; then + fcoe_interface=${nic##*/} + if ! [ -e "/tmp/.fcoe-$fcoe_interface" ]; then diff --git a/SOURCES/0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch b/SOURCES/0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch new file mode 100644 index 0000000..4a09d1c --- /dev/null +++ b/SOURCES/0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch @@ -0,0 +1,86 @@ +From 34203d03c0d43aa0aed12988d2719455e80eae54 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 3 Jul 2015 13:52:32 +0200 +Subject: [PATCH] fcoe/fcoe-edd.sh: cleanup the script + +- check if modprobe was successful +- add a timeout for /sys/firmware/edd +- only remove the module, if it was loaded by the script +--- + modules.d/95fcoe/fcoe-edd.sh | 46 ++++++++++++++++++++++++++++++-------------- + 1 file changed, 32 insertions(+), 14 deletions(-) + +diff --git a/modules.d/95fcoe/fcoe-edd.sh b/modules.d/95fcoe/fcoe-edd.sh +index d0ea60d..8607b56 100755 +--- a/modules.d/95fcoe/fcoe-edd.sh ++++ b/modules.d/95fcoe/fcoe-edd.sh +@@ -2,37 +2,55 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + +-dcb=$1 ++dcb="$1" + +-if ! [ -d /sys/firmware/edd ]; then +- modprobe edd +- while ! [ -d /sys/firmware/edd ]; do sleep 0.1; done +-fi ++_modprobe_r_edd="0" ++ ++check_edd() { ++ local cnt=0 ++ ++ [ -d /sys/firmware/edd ] && return 0 ++ ++ _modprobe_r_edd="1" ++ modprobe edd || return $? ++ ++ while [ $cnt -lt 600 ]; do ++ [ -d /sys/firmware/edd ] && return 0 ++ cnt=$(($cnt+1)) ++ sleep 0.1 ++ done ++ return 1 ++} ++ ++check_edd || exit 1 + + for disk in /sys/firmware/edd/int13_*; do +- [ -d $disk ] || continue +- if [ -e ${disk}/pci_dev/driver ]; then +- driver=`readlink ${disk}/pci_dev/driver` ++ [ -d "$disk" ] || continue ++ if [ -e "${disk}/pci_dev/driver" ]; then ++ driver=$(readlink "${disk}/pci_dev/driver") + driver=${driver##*/} + fi + # i40e uses dev_port 1 for a virtual fcoe function + if [ "${driver}" == "i40e" ]; then + dev_port=1 + fi +- for nic in ${disk}/pci_dev/net/*; do +- [ -d $nic ] || continue +- if [ -n "${dev_port}" -a -e ${nic}/dev_port ]; then +- if [ `cat ${nic}/dev_port` -ne ${dev_port} ]; then ++ for nic in "${disk}"/pci_dev/net/*; do ++ [ -d "$nic" ] || continue ++ if [ -n "${dev_port}" -a -e "${nic}/dev_port" ]; then ++ if [ "$(cat ${nic}/dev_port)" -ne "${dev_port}" ]; then + continue + fi + fi + if [ -e ${nic}/address ]; then + fcoe_interface=${nic##*/} + if ! [ -e "/tmp/.fcoe-$fcoe_interface" ]; then +- /sbin/fcoe-up $fcoe_interface $dcb ++ /sbin/fcoe-up "$fcoe_interface" "$dcb" + > "/tmp/.fcoe-$fcoe_interface" + fi + fi + done + done +-modprobe -r edd ++ ++[ "$_modprobe_r_edd" = "1" ] && modprobe -r edd ++ ++unset _modprobe_r_edd diff --git a/SOURCES/0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch b/SOURCES/0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch new file mode 100644 index 0000000..1ba27ac --- /dev/null +++ b/SOURCES/0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch @@ -0,0 +1,37 @@ +From e5f4bbd804e337a7efaf3a0cb4fc3a37b7e33b47 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 3 Jul 2015 14:00:33 +0200 +Subject: [PATCH] livenet: don't attempt to download the image for every + interface + +https://bugzilla.redhat.com/show_bug.cgi?id=1152485 +--- + modules.d/90livenet/livenetroot.sh | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/modules.d/90livenet/livenetroot.sh b/modules.d/90livenet/livenetroot.sh +index 1bbee55..2e36ee9 100755 +--- a/modules.d/90livenet/livenetroot.sh ++++ b/modules.d/90livenet/livenetroot.sh +@@ -7,12 +7,20 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + + PATH=/usr/sbin:/usr/bin:/sbin:/bin + ++[ -e /tmp/livenet.downloaded ] && exit 0 ++ + # args get passed from 40network/netroot + netroot="$2" + liveurl="${netroot#livenet:}" + info "fetching $liveurl" + imgfile=$(fetch_url "$liveurl") +-[ $? = 0 ] || die "failed to download live image: error $?" ++ ++if [ $? = 0 ]; then ++ warn "failed to download live image: error $?" ++ exit 1 ++fi ++ ++> /tmp/livenet.downloaded + + # TODO: couldn't dmsquash-live-root handle this? + if [ ${imgfile##*.} = "iso" ]; then diff --git a/SOURCES/0271-95fcoe-uefi-Test-for-EFI-firmware.patch b/SOURCES/0271-95fcoe-uefi-Test-for-EFI-firmware.patch new file mode 100644 index 0000000..01043b2 --- /dev/null +++ b/SOURCES/0271-95fcoe-uefi-Test-for-EFI-firmware.patch @@ -0,0 +1,32 @@ +From 7b3178d9ad9b571312131bba34fd54460a7b4a25 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Mon, 23 Mar 2015 17:12:18 +0100 +Subject: [PATCH] 95fcoe-uefi: Test for EFI firmware + +The fcoe-uefi module should test for EFI firmware when called +in 'hostonly' mode; of no EFI firmware is found then the module +doesn't need to be included. + +References: bnc#882412 + +Signed-off-by: Hannes Reinecke +Signed-off-by: Thomas Renninger +(cherry picked from commit 6755c208556be7a85c76e731de48a56f56e81c4c) +--- + modules.d/95fcoe-uefi/module-setup.sh | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/modules.d/95fcoe-uefi/module-setup.sh b/modules.d/95fcoe-uefi/module-setup.sh +index 0fb06e2..f5277f4 100755 +--- a/modules.d/95fcoe-uefi/module-setup.sh ++++ b/modules.d/95fcoe-uefi/module-setup.sh +@@ -4,6 +4,9 @@ + + # called by dracut + check() { ++ [[ $hostonly ]] || [[ $mount_needs ]] && { ++ [ -d /sys/firmware/efi ] || return 255 ++ } + require_binaries dcbtool fipvlan lldpad ip readlink || return 1 + return 0 + } diff --git a/SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch b/SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch new file mode 100644 index 0000000..d779817 --- /dev/null +++ b/SOURCES/0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch @@ -0,0 +1,75 @@ +From 589b4e61e2db2a5835b5aa425268f6f0f67c14e4 Mon Sep 17 00:00:00 2001 +From: Colin Guthrie +Date: Fri, 15 May 2015 14:53:40 +0100 +Subject: [PATCH] base: Don't wait for swap devices in host-only mode. + +The only reason we add swap devices to host-only mode (added in +dd5875499ece9dbc90e10eafd0073ee15d0c86a4) is to allow us to process +resume= arguments passed on the kernel command line when the swap +partition lives on something slightly more complex than a normal +partion (e.g. in an LVM or RAID setup). + +By adding the device to host_devs, the necessary LVM and RAID hooks +are added and thus the underlying storage will be initialised OK, and +the 95resume module handles the waiting for the device (via udev rules +creating the /dev/resume symlink). + +So ultimately, we do not need to hard-code the waiting for the swap +devices into the initramfs at build time as the waiting part can be +dynamic. + +This makes things more resiliant to swap partitions disappearing and +being reformatted etc. + +Inspired by a patch by Martin Whitaker on Mageia bug: +https://bugs.mageia.org/show_bug.cgi?id=12305 + +(cherry picked from commit 3e3ed34f036a833ccc2150c6224d0a954e841e39) +--- + dracut.sh | 6 ++++-- + modules.d/99base/module-setup.sh | 8 ++++++++ + 2 files changed, 12 insertions(+), 2 deletions(-) + +diff --git a/dracut.sh b/dracut.sh +index a214f81..90ac1fe 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1056,7 +1056,9 @@ if [[ $hostonly ]]; then + done < /etc/crypttab + fi + +- push host_devs "$(readlink -f "$dev")" ++ _dev="$(readlink -f "$dev")" ++ push host_devs "$_dev" ++ push swap_devs "$_dev" + break + done < /etc/fstab + done < /proc/swaps +@@ -1181,7 +1183,7 @@ export initdir dracutbasedir \ + omit_drivers mdadmconf lvmconf root_dev \ + use_fstab fstab_lines libdirs fscks nofscks ro_mnt \ + stdloglvl sysloglvl fileloglvl kmsgloglvl logfile \ +- debug host_fs_types host_devs sshkey add_fstab \ ++ debug host_fs_types host_devs swap_devs sshkey add_fstab \ + DRACUT_VERSION udevdir prefix filesystems drivers \ + systemdutildir systemdsystemunitdir systemdsystemconfdir \ + host_modalias host_modules hostonly_cmdline loginstall \ +diff --git a/modules.d/99base/module-setup.sh b/modules.d/99base/module-setup.sh +index fddf4b0..d5e7861 100755 +--- a/modules.d/99base/module-setup.sh ++++ b/modules.d/99base/module-setup.sh +@@ -104,6 +104,14 @@ install() { + + for _dev in ${host_devs[@]}; do + [[ "$_dev" == "$root_dev" ]] && continue ++ ++ # We only actually wait for real devs - swap is only needed ++ # for resume and udev rules generated when parsing resume= ++ # argument take care of the waiting for us ++ for _dev2 in ${swap_devs[@]}; do ++ [[ "$_dev" == "$_dev2" ]] && continue 2 ++ done ++ + _pdev=$(get_persistent_dev $_dev) + + case "$_pdev" in diff --git a/SOURCES/0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch b/SOURCES/0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch new file mode 100644 index 0000000..24b8df8 --- /dev/null +++ b/SOURCES/0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch @@ -0,0 +1,45 @@ +From 900550c4e0c2a48a5d0c01db0adb23e73a6aa195 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 24 Nov 2014 15:17:45 +0100 +Subject: [PATCH] dracut-functions.sh: check if dinfo is a function + +If "dinfo" is an executable, dracut-logger.sh would never be sourced. + +See: https://bugzilla.redhat.com/show_bug.cgi?id=1167082 +(cherry picked from commit 26d14fb3d36d6091f64258a62c49939478405693) +--- + dracut-functions.sh | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 31586ca..973e231 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -169,7 +169,13 @@ srcmods="/lib/modules/$kernel/" + } + export srcmods + +-if ! type dinfo >/dev/null 2>&1; then ++# is_func ++# Check whether $1 is a function. ++is_func() { ++ [[ "$(type -t "$1")" = "function" ]] ++} ++ ++if ! is_func dinfo >/dev/null 2>&1; then + . "$dracutbasedir/dracut-logger.sh" + dlog_init + fi +@@ -202,12 +208,6 @@ mksubdirs() { + [[ -e ${1%/*} ]] || mkdir -m 0755 -p -- "${1%/*}" + } + +-# is_func +-# Check whether $1 is a function. +-is_func() { +- [[ "$(type -t "$1")" = "function" ]] +-} +- + # Function prints global variables in format name=value line by line. + # $@ = list of global variables' name + print_vars() { diff --git a/SOURCES/0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch b/SOURCES/0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch new file mode 100644 index 0000000..e07b422 --- /dev/null +++ b/SOURCES/0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch @@ -0,0 +1,38 @@ +From 2af6708641bb896f0c117ae49906783cfd46f0a8 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Nov 2014 13:44:54 +0100 +Subject: [PATCH] dmsquash-live: do not abort, if user pressed ESC on + checkisomd5 + +If the user pressed ESC while checkisomd5 runs the media check, it will +exit with "2". Previously that would mean, that the media check was not +successful. + +(cherry picked from commit 370035d561baa6852bcb02161ef736a78b62b336) +--- + modules.d/90dmsquash-live/checkisomd5@.service | 1 + + modules.d/90dmsquash-live/dmsquash-live-root.sh | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/modules.d/90dmsquash-live/checkisomd5@.service b/modules.d/90dmsquash-live/checkisomd5@.service +index 20e40bd..c4ca10f 100644 +--- a/modules.d/90dmsquash-live/checkisomd5@.service ++++ b/modules.d/90dmsquash-live/checkisomd5@.service +@@ -11,3 +11,4 @@ StandardInput=tty-force + StandardOutput=inherit + StandardError=inherit + TimeoutSec=0 ++SuccessExitStatus=2 +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh +index 64abc0b..8d5476c 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh +@@ -46,7 +46,7 @@ if [ -n "$check" ]; then + else + checkisomd5 --verbose $livedev + fi +- if [ $? -ne 0 ]; then ++ if [ $? -eq 1 ]; then + die "CD check failed!" + exit 1 + fi diff --git a/SOURCES/0275-Add-rd.live.overlay.size-option.patch b/SOURCES/0275-Add-rd.live.overlay.size-option.patch new file mode 100644 index 0000000..cb9df23 --- /dev/null +++ b/SOURCES/0275-Add-rd.live.overlay.size-option.patch @@ -0,0 +1,32 @@ +From ccebb4c045a7cc6c22977c9b23b95108030901ea Mon Sep 17 00:00:00 2001 +From: Radek Vykydal +Date: Tue, 13 Jan 2015 15:14:10 +0100 +Subject: [PATCH] Add rd.live.overlay.size option + +(cherry picked from commit 18423f7951de7b9cb4007438b58b6067aa6f2e93) +--- + modules.d/90dmsquash-live/dmsquash-live-root.sh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/modules.d/90dmsquash-live/dmsquash-live-root.sh b/modules.d/90dmsquash-live/dmsquash-live-root.sh +index 8d5476c..6631d9a 100755 +--- a/modules.d/90dmsquash-live/dmsquash-live-root.sh ++++ b/modules.d/90dmsquash-live/dmsquash-live-root.sh +@@ -29,6 +29,8 @@ getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes" + getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay="" + overlay=$(getarg rd.live.overlay -d overlay) + getargbool 0 rd.writable.fsimg -d -y writable_fsimg && writable_fsimg="yes" ++overlay_size=$(getarg rd.live.overlay.size=) ++[ -z "$overlay_size" ] && overlay_size=512 + + getargbool 0 rd.live.overlay.thin && thin_snapshot="yes" + +@@ -129,7 +131,7 @@ do_live_overlay() { + sleep 5 + fi + +- dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((512*1024)) 2> /dev/null ++ dd if=/dev/null of=/overlay bs=1024 count=1 seek=$((overlay_size*1024)) 2> /dev/null + if [ -n "$setup" -a -n "$readonly_overlay" ]; then + RO_OVERLAY_LOOPDEV=$( losetup -f ) + losetup $RO_OVERLAY_LOOPDEV /overlay diff --git a/SOURCES/0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch b/SOURCES/0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch new file mode 100644 index 0000000..591d9ed --- /dev/null +++ b/SOURCES/0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch @@ -0,0 +1,43 @@ +From 34b49be88219519f678f665987787784751b11bd Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 19 Mar 2015 12:33:03 +0100 +Subject: [PATCH] base/dracut-lib.sh: read /proc/cmdline with multiple lines + +also parse cmdline files without an ending newline + +(cherry picked from commit 9f0878540bdc8054dc2b45427eed957b9bd25f2d) +--- + modules.d/99base/dracut-lib.sh | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index 69f7079..3ffbb02 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -115,6 +115,7 @@ getcmdline() { + local _i + local CMDLINE_ETC_D + local CMDLINE_ETC ++ local CMDLINE_PROC + unset _line + + if [ -e /etc/cmdline ]; then +@@ -124,13 +125,15 @@ getcmdline() { + fi + for _i in /etc/cmdline.d/*.conf; do + [ -e "$_i" ] || continue +- while read -r _line; do ++ while read -r _line || [ -n "$_line" ]; do + CMDLINE_ETC_D="$CMDLINE_ETC_D $_line"; + done <"$_i"; + done + if [ -e /proc/cmdline ]; then +- read -r CMDLINE +Date: Fri, 3 Jul 2015 14:24:50 +0200 +Subject: [PATCH] multipath: install all multipath path selector kernel modules + +By default, dracut only builds in dm-service-time into the initramfs as +that is the default multipath.conf path selector. If the user changes +the path selector to "round robin" on the fly and runs dracut, multipath +does not find any paths on boot and the user will be dropped into a +shell. + +Apparently, in RHEL7 dracut defaults to "hostonly" mode, i.e. modules +not currently in use at the time dracut runs do not get built into +initramfs. This is definitely one case where this doesn't work. A change +to reconfigure multipath probably should not render the system +unbootable. + +https://bugzilla.redhat.com/show_bug.cgi?id=1195392 +--- + modules.d/90multipath/module-setup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh +index d37f958..acfc56f 100755 +--- a/modules.d/90multipath/module-setup.sh ++++ b/modules.d/90multipath/module-setup.sh +@@ -64,7 +64,7 @@ installkernel() { + } + + ( find_kernel_modules_by_path drivers/scsi; if [ "$_arch" = "s390" -o "$_arch" = "s390x" ]; then find_kernel_modules_by_path drivers/s390/scsi; fi; +- find_kernel_modules_by_path drivers/md ) | mp_mod_filter | instmods ++ find_kernel_modules_by_path drivers/md ) | mp_mod_filter | hostonly='' instmods + } + + install() { diff --git a/SOURCES/0278-man-page-changed-grub.conf-to-grub2.cfg.patch b/SOURCES/0278-man-page-changed-grub.conf-to-grub2.cfg.patch new file mode 100644 index 0000000..0252ffd --- /dev/null +++ b/SOURCES/0278-man-page-changed-grub.conf-to-grub2.cfg.patch @@ -0,0 +1,70 @@ +From 77c0b308259d3b91c536de9a49c0b99427c5924e Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 3 Jul 2015 14:28:55 +0200 +Subject: [PATCH] man page: changed grub.conf to grub2.cfg + +--- + dracut.usage.asc | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/dracut.usage.asc b/dracut.usage.asc +index bee9e2e..15dc244 100644 +--- a/dracut.usage.asc ++++ b/dracut.usage.asc +@@ -99,7 +99,7 @@ raid with encryption and LVM on top), as long as you specify the correct + filesystem LABEL or UUID on the kernel command line for your root device, dracut + will find it and boot from it. + +-The kernel command line usually can be configured in _/boot/grub/grub.conf_, if ++The kernel command line usually can be configured in _/boot/grub2/grub.cfg_, if + grub is your bootloader and it also can be edited in the real boot process in + the grub menu. + +@@ -325,7 +325,7 @@ stick and mount that. Then you can store the output for later inspection. + In all cases, the following should be mentioned and attached to your bug report: + + * The exact kernel command-line used. Typically from the bootloader +-configuration file (e.g. _/etc/grub.conf_) or from _/proc/cmdline_. ++configuration file (e.g. _/boot/grub2/grub.cfg_) or from _/proc/cmdline_. + * A copy of your disk partition information from _/etc/fstab_, which might be + obtained booting an old working initramfs or a rescue medium. + * Turn on dracut debugging (see _the 'debugging dracut' section_), and attach +@@ -360,7 +360,7 @@ logging during the system boot. This section documents configuring a + serial console connection to record boot messages. + + . First, enable serial console output for both the kernel and the bootloader. +-. Open the file _/etc/grub.conf_ for editing. Below the line ''timeout=5'', add ++. Open the file _/boot/grub2/grub.cfg_ for editing. Below the line ''timeout=5'', add + the following: + + + ---- +@@ -368,14 +368,14 @@ serial --unit=0 --speed=9600 + terminal --timeout=5 serial console + ---- + + +-. Also in _/etc/grub.conf_, add the following boot arguemnts to the ''kernel'' ++. Also in _/boot/grub2/grub.cfg_, add the following boot arguemnts to the ''kernel'' + line: + + + ---- + console=tty0 console=ttyS0,9600 + ---- + + +-. When finished, the _/etc/grub.conf_ file should look similar to the example ++. When finished, the _/boot/grub2/grub.cfg_ file should look similar to the example + below. + + + ---- +@@ -410,10 +410,10 @@ dracut offers a shell for interactive debugging in the event dracut fails to + locate your root filesystem. To enable the shell: + + . Add the boot parameter ''rd.shell'' to your bootloader configuration file +-(e.g. _/etc/grub.conf_) ++(e.g. _/boot/grub2/grub.cfg_) + . Remove the boot arguments ''rhgb'' and ''quiet'' + + +-A sample _/etc/grub.conf_ bootloader configuration file is listed below. ++A sample _/boot/grub2/grub.cfg_ bootloader configuration file is listed below. + + + ---- + default=0 diff --git a/SOURCES/0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch b/SOURCES/0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch new file mode 100644 index 0000000..b932177 --- /dev/null +++ b/SOURCES/0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch @@ -0,0 +1,61 @@ +From 3cf4ec08e51c6b6c6d21d4b1cf67b98bb7878558 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 3 Jul 2015 14:35:25 +0200 +Subject: [PATCH] lsinitrd.sh: ignore "cat: write error: Broken pipe" + +--- + lsinitrd.sh | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/lsinitrd.sh b/lsinitrd.sh +index b086a63..88fe983 100755 +--- a/lsinitrd.sh ++++ b/lsinitrd.sh +@@ -116,7 +116,7 @@ extract_files() + for f in ${!filenames[@]}; do + [[ $nofileinfo ]] || echo "initramfs:/$f" + [[ $nofileinfo ]] || echo "========================================================================" +- $CAT $image | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null ++ $CAT $image 2>/dev/null | cpio --extract --verbose --quiet --to-stdout $f 2>/dev/null + ((ret+=$?)) + [[ $nofileinfo ]] || echo "========================================================================" + [[ $nofileinfo ]] || echo +@@ -126,7 +126,7 @@ extract_files() + list_modules() + { + echo "dracut modules:" +- $CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/modules.txt' 'usr/lib/dracut/modules.txt' 2>/dev/null ++ $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/modules.txt' 'usr/lib/dracut/modules.txt' 2>/dev/null + ((ret+=$?)) + } + +@@ -134,9 +134,9 @@ list_files() + { + echo "========================================================================" + if [ "$sorted" -eq 1 ]; then +- $CAT "$image" | cpio --extract --verbose --quiet --list | sort -n -k5 ++ $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --list | sort -n -k5 + else +- $CAT "$image" | cpio --extract --verbose --quiet --list | sort -k9 ++ $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --list | sort -k9 + fi + ((ret+=$?)) + echo "========================================================================" +@@ -220,7 +220,7 @@ ret=0 + if (( ${#filenames[@]} > 0 )); then + extract_files + else +- version=$($CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/dracut-*' 'usr/lib/dracut/dracut-*' 2>/dev/null) ++ version=$($CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/dracut-*' 'usr/lib/dracut/dracut-*' 2>/dev/null) + ((ret+=$?)) + echo "Version: $version" + echo +@@ -229,7 +229,7 @@ else + echo "========================================================================" + else + echo -n "Arguments: " +- $CAT "$image" | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/build-parameter.txt' 'usr/lib/dracut/build-parameter.txt' 2>/dev/null ++ $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout -- 'lib/dracut/build-parameter.txt' 'usr/lib/dracut/build-parameter.txt' 2>/dev/null + echo + list_modules + list_files diff --git a/SOURCES/0280-network-setup-gateway-after-setting-up-resolv.conf.patch b/SOURCES/0280-network-setup-gateway-after-setting-up-resolv.conf.patch new file mode 100644 index 0000000..6cf2019 --- /dev/null +++ b/SOURCES/0280-network-setup-gateway-after-setting-up-resolv.conf.patch @@ -0,0 +1,32 @@ +From 968c66b609f1e894d7522d622ddc95d14d49d66d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 28 May 2015 19:44:55 +0200 +Subject: [PATCH] network: setup gateway after setting up resolv.conf + +If a daemon listens for route changes and wants to use the interface +afterwards, it should be able to resolve DNS + +(cherry picked from commit 0b7bfacfeaf86c4001dc2ea46cecdc65c9cdfff1) +--- + modules.d/40network/net-lib.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index de5273c..cfc06fe 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -96,13 +96,13 @@ setup_net() { + [ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces + [ -z "$IFACES" ] && IFACES="$netif" + # 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 ++ [ -e /tmp/net.$netif.gw ] && . /tmp/net.$netif.gw + + # add static route + for _p in $(getargs rd.route); do diff --git a/SOURCES/0281-Add-support-for-ethernet-point-to-point-connections-.patch b/SOURCES/0281-Add-support-for-ethernet-point-to-point-connections-.patch new file mode 100644 index 0000000..8375bd4 --- /dev/null +++ b/SOURCES/0281-Add-support-for-ethernet-point-to-point-connections-.patch @@ -0,0 +1,46 @@ +From 28be8992c3c1facfd80dfcc6afad951f33098783 Mon Sep 17 00:00:00 2001 +From: Gerd von Egidy +Date: Thu, 5 Mar 2015 12:07:57 +0100 +Subject: [PATCH] Add support for ethernet point-to-point connections + configured via DHCP + +When current dracut receives an ip with netmask of 255.255.255.255 via DHCP, +setting the also supplied default gateway fails (because it is obviously not +within the netmask). + +The setup with a netmask of /32 is quite common in colocation datacenters +where you don't want the machines of two different customers to directly talk +to each other. At least two of the biggest colocation providers in Germany +(1&1 and Strato) do it that way. NetworkManager supports this kind of setup +and the dhclient-scripts of several distributions too. + +In this patch I have implemented a simple approach very similar to what is +found in Debian. The dhclient-script from Fedora uses a more sophisticated +approach, but that relies on the ipcalc utility which would introduce a +dependency on Fedora-initscripts for dracut. + +Signed-off-by: Gerd von Egidy +(cherry picked from commit 99ccbc30dff9fa51dd3187dc10f8f632e5e54e4b) +--- + modules.d/40network/dhclient-script.sh | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index 7972af9..12e2869 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -49,7 +49,13 @@ setup_interface() { + ${lease_time:+valid_lft $lease_time} \ + ${preferred_lft:+preferred_lft ${preferred_lft}} + +- [ -n "$gw" ] && echo ip route replace default via $gw dev $netif > /tmp/net.$netif.gw ++ if [ -n "$gw" ] ; then ++ if [ "$mask" == "255.255.255.255" ] ; then ++ # point-to-point connection => set explicit route to gateway ++ echo ip route add $gw dev $netif > /tmp/net.$netif.gw ++ fi ++ echo ip route replace default via $gw dev $netif >> /tmp/net.$netif.gw ++ fi + + [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf + if [ -n "$namesrv" ] ; then diff --git a/SOURCES/0282-lvm-add-cache-tools-for-dm-cache-usage.patch b/SOURCES/0282-lvm-add-cache-tools-for-dm-cache-usage.patch new file mode 100644 index 0000000..9a2a975 --- /dev/null +++ b/SOURCES/0282-lvm-add-cache-tools-for-dm-cache-usage.patch @@ -0,0 +1,40 @@ +From 77ffc465b9c5615040b427dfdf35a3487ef9943c Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 28 Jan 2015 13:25:09 +0000 +Subject: [PATCH] lvm: add cache tools for dm-cache usage + +(cherry picked from commit 70598ac292bce6e554cf0dc327426a7dbf92c65f) +--- + modules.d/90lvm/module-setup.sh | 19 +++++++++++++------ + 1 file changed, 13 insertions(+), 6 deletions(-) + +diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh +index 5ec6281..90bc39f 100755 +--- a/modules.d/90lvm/module-setup.sh ++++ b/modules.d/90lvm/module-setup.sh +@@ -107,12 +107,19 @@ install() { + dev=$(/dev/null) + [[ ${DM_VG_NAME} ]] && [[ ${DM_LV_NAME} ]] || continue +- if [[ "$(lvs --noheadings -o segtype ${DM_VG_NAME} 2>/dev/null)" == *thin* ]] ; then +- inst_multiple -o thin_dump thin_restore thin_check thin_repair +- break +- fi ++ case "$(lvs --noheadings -o segtype ${DM_VG_NAME} 2>/dev/null)" in ++ *thin*|*cache*|*era*) ++ inst_multiple -o thin_dump thin_restore thin_check thin_repair \ ++ cache_dump cache_restore cache_check cache_repair \ ++ era_check era_dump era_invalidate era_restore ++ break;; ++ esac + done +- else +- inst_multiple -o thin_dump thin_restore thin_check thin_repair ++ fi ++ ++ if ! [[ $hostonly ]]; then ++ inst_multiple -o thin_dump thin_restore thin_check thin_repair \ ++ cache_dump cache_restore cache_check cache_repair \ ++ era_check era_dump era_invalidate era_restore + fi + } diff --git a/SOURCES/0284-dracut-functions.sh-degrade-info-about-missing-binar.patch b/SOURCES/0284-dracut-functions.sh-degrade-info-about-missing-binar.patch new file mode 100644 index 0000000..020014c --- /dev/null +++ b/SOURCES/0284-dracut-functions.sh-degrade-info-about-missing-binar.patch @@ -0,0 +1,33 @@ +From a6470f332f1b522f8d1c159a9c15b520d35ef6d4 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 5 Mar 2014 12:23:49 +0100 +Subject: [PATCH] dracut-functions.sh: degrade info about missing binaries to + info + +(cherry picked from commit 83a3cba777efb71be6c368a65e2ed5794395168e) +--- + dracut-functions.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 973e231..65ccebe 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -44,7 +44,7 @@ require_binaries() { + + for cmd in "$@"; do + if ! find_binary "$cmd" &>/dev/null; then +- dwarning "$_module_name: Could not find command '$cmd'!" ++ dinfo "$_module_name: Could not find command '$cmd'!" + ((_ret++)) + fi + done +@@ -68,7 +68,7 @@ require_any_binary() { + done + + if (( $_ret != 0 )); then +- dwarning "$_module_name: Could not find any command of '$@'!" ++ dinfo "$_module_name: Could not find any command of '$@'!" + return 1 + fi + diff --git a/SOURCES/0285-dracut-functions.sh-require_binaries-clarify-message.patch b/SOURCES/0285-dracut-functions.sh-require_binaries-clarify-message.patch new file mode 100644 index 0000000..18d4312 --- /dev/null +++ b/SOURCES/0285-dracut-functions.sh-require_binaries-clarify-message.patch @@ -0,0 +1,29 @@ +From 1db0d1f78ba67e61ca3fafbec44f8bc79c75eb94 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 20 May 2014 13:23:43 +0200 +Subject: [PATCH] dracut-functions.sh:require_binaries() clarify message + +The info message written by require_binaries() was a bit frighten to +users. So just be a little bit more verbose. + +If you have ideas on how to improve the message for these "soft" +dependency modules, please submit patches. + +(cherry picked from commit 0fa5dbedc5b222435f51f7460a81232ee120c4e1) +--- + dracut-functions.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 65ccebe..585b683 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -44,7 +44,7 @@ require_binaries() { + + for cmd in "$@"; do + if ! find_binary "$cmd" &>/dev/null; then +- dinfo "$_module_name: Could not find command '$cmd'!" ++ dinfo "dracut module '${_module_name#[0-9][0-9]}' will not be installed, because command '$cmd' could not be found!" + ((_ret++)) + fi + done diff --git a/SOURCES/0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch b/SOURCES/0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch new file mode 100644 index 0000000..7b7fc65 --- /dev/null +++ b/SOURCES/0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch @@ -0,0 +1,24 @@ +From c643f4e8abb4ea65b219414b23555772160ab41e Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:27:39 +0200 +Subject: [PATCH] dracut-systemd/dracut-initqueue.sh: be verbose about timeout + +Issue a warning, if timeout scripts are executed + +(cherry picked from commit 8ba684be1c04976204d2b671ab90cb27791f467b) +--- + modules.d/98systemd/dracut-initqueue.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/modules.d/98systemd/dracut-initqueue.sh b/modules.d/98systemd/dracut-initqueue.sh +index 37bc18f..5822556 100755 +--- a/modules.d/98systemd/dracut-initqueue.sh ++++ b/modules.d/98systemd/dracut-initqueue.sh +@@ -57,6 +57,7 @@ while :; do + done + + if [ $main_loop -gt $((2*$RDRETRY/3)) ]; then ++ warn "dracut-initqueue timeout - starting timeout scripts" + for job in $hookdir/initqueue/timeout/*.sh; do + [ -e "$job" ] || break + job=$job . $job diff --git a/SOURCES/0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch b/SOURCES/0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch new file mode 100644 index 0000000..c8a92ed --- /dev/null +++ b/SOURCES/0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch @@ -0,0 +1,24 @@ +From 2bb564073b2a4953572b8162b220e8fa2b7eeb4d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:27:01 +0200 +Subject: [PATCH] nfs/parse-nfsroot.sh: silence useless warning if netroot is + not nfs + +(cherry picked from commit 50e86bf02be003f3de6214f8012e62edde0085fc) +--- + modules.d/95nfs/parse-nfsroot.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/95nfs/parse-nfsroot.sh b/modules.d/95nfs/parse-nfsroot.sh +index a84cd43..865e62b 100755 +--- a/modules.d/95nfs/parse-nfsroot.sh ++++ b/modules.d/95nfs/parse-nfsroot.sh +@@ -40,7 +40,7 @@ if [ -n "$netroot" ] ; then + [ "$n" = "$netroot" ] && break + done + if [ "$n" = "$netroot" ]; then +- warn "Ignoring netroot argument for NFS" ++ #warn "Ignoring netroot argument for NFS" + netroot=$root + fi + else diff --git a/SOURCES/0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch b/SOURCES/0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch new file mode 100644 index 0000000..40e4289 --- /dev/null +++ b/SOURCES/0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch @@ -0,0 +1,39 @@ +From 53ecce179b2a5b01ba9d62527200712bba2b2032 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:25:23 +0200 +Subject: [PATCH] network/parse-ip-opts.sh: assume rd.neednet for multiple ip + options + +set rd.neednet on the kernel cmdline to disable this behaviour + +(cherry picked from commit 4e9ba952bfa607ac47bfe3cf4943ae3386da22bc) +--- + modules.d/40network/parse-ip-opts.sh | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/modules.d/40network/parse-ip-opts.sh b/modules.d/40network/parse-ip-opts.sh +index 5b96e06..faee8f9 100755 +--- a/modules.d/40network/parse-ip-opts.sh ++++ b/modules.d/40network/parse-ip-opts.sh +@@ -38,8 +38,10 @@ unset count + # If needed, check if bootdev= contains anything usable + BOOTDEV=$(getarg bootdev=) + +-if [ -n "$NEEDBOOTDEV" ] ; then +- [ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines" ++if [ -n "$NEEDBOOTDEV" ] && getargbool 1 rd.neednet; then ++ #[ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines" ++ echo "rd.neednet=1" > /etc/cmdline.d/dracut-neednet.conf ++ info "Multiple ip= arguments: assuming rd.neednet=1" + fi + + # Check ip= lines +@@ -50,7 +52,7 @@ for p in $(getargs ip=); do + # make first device specified the BOOTDEV + if [ -z "$BOOTDEV" ] && [ -n "$dev" ]; then + BOOTDEV="$dev" +- [ -n "$NEEDBOOTDEV" ] && warn "Setting bootdev to '$BOOTDEV'" ++ [ -n "$NEEDBOOTDEV" ] && info "Setting bootdev to '$BOOTDEV'" + fi + + # skip ibft since we did it above diff --git a/SOURCES/0289-systemd-add-systemd-run-and-systemd-escape.patch b/SOURCES/0289-systemd-add-systemd-run-and-systemd-escape.patch new file mode 100644 index 0000000..c334014 --- /dev/null +++ b/SOURCES/0289-systemd-add-systemd-run-and-systemd-escape.patch @@ -0,0 +1,21 @@ +From fc0ead21c9cc4aaf569f61dda998d81cab2a18c9 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 13 Aug 2015 15:24:53 +0200 +Subject: [PATCH] systemd: add systemd-run and systemd-escape + +--- + modules.d/98systemd/module-setup.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/modules.d/98systemd/module-setup.sh b/modules.d/98systemd/module-setup.sh +index d0271f1..a656fe0 100755 +--- a/modules.d/98systemd/module-setup.sh ++++ b/modules.d/98systemd/module-setup.sh +@@ -123,6 +123,7 @@ install() { + \ + $tmpfilesdir/systemd.conf \ + \ ++ systemd-run systemd-escape \ + journalctl systemctl echo swapoff systemd-cgls systemd-tmpfiles + + inst_multiple -o \ diff --git a/SOURCES/0290-network-net-lib.sh-add-is_ip.patch b/SOURCES/0290-network-net-lib.sh-add-is_ip.patch new file mode 100644 index 0000000..4da3898 --- /dev/null +++ b/SOURCES/0290-network-net-lib.sh-add-is_ip.patch @@ -0,0 +1,35 @@ +From d5447330844a1f16d927d42cd1d96c5425133aad Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:24:05 +0200 +Subject: [PATCH] network/net-lib.sh: add is_ip() + +add function to test if string is a valid IP + +(cherry picked from commit 01b23b6900eabefbfd1f589b9f12c8ff38c5afc0) +--- + modules.d/40network/net-lib.sh | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index cfc06fe..44c1bf0 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -2,6 +2,18 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + ++is_ip() { ++ echo "$1" | { ++ IFS=. read a b c d ++ test "$a" -ge 0 -a "$a" -le 255 \ ++ -a "$b" -ge 0 -a "$b" -le 255 \ ++ -a "$c" -ge 0 -a "$c" -le 255 \ ++ -a "$d" -ge 0 -a "$d" -le 255 \ ++ 2> /dev/null ++ } && return 0 ++ return 1 ++} ++ + get_ip() { + local iface="$1" ip="" + ip=$(ip -o -f inet addr show $iface) diff --git a/SOURCES/0291-iscsi-integrate-with-systemd-and-improve-robustness.patch b/SOURCES/0291-iscsi-integrate-with-systemd-and-improve-robustness.patch new file mode 100644 index 0000000..ce210da --- /dev/null +++ b/SOURCES/0291-iscsi-integrate-with-systemd-and-improve-robustness.patch @@ -0,0 +1,312 @@ +From e25c3dbb6f91ed999399c981f00ab1dd1b30d6f1 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:33:49 +0200 +Subject: [PATCH] iscsi: integrate with systemd and improve robustness + +parse-cmdline sets up an initial initiator-name to let iscsid start. + +iscsid is started before doing any iscsistart business. + +iscsistart is done with systemd-run asynchrone to do things in +paralllel. Also restarted for every new interface which shows up. + +If rd.iscsi.waitnet (default) is set, iscsistart is done only +after all interfaces are up. + +If not all interfaces are up and rd.iscsi.testroute (default) is set, +the route to a iscsi target IP is checked and skipped, if there is none. + +If all things fail, we issue a "dummy" interface iscsiroot to retry +everything in the initqueue/timeout. + +(cherry picked from commit d94050ddaea8343d8adb8f151c8f4cad591d29d9) +--- + modules.d/95iscsi/cleanup-iscsi.sh | 2 +- + modules.d/95iscsi/iscsiroot.sh | 116 ++++++++++++++++++++++++----------- + modules.d/95iscsi/module-setup.sh | 31 ++++++++++ + modules.d/95iscsi/parse-iscsiroot.sh | 27 ++++++-- + 4 files changed, 134 insertions(+), 42 deletions(-) + +diff --git a/modules.d/95iscsi/cleanup-iscsi.sh b/modules.d/95iscsi/cleanup-iscsi.sh +index a2d5951..88a63e0 100755 +--- a/modules.d/95iscsi/cleanup-iscsi.sh ++++ b/modules.d/95iscsi/cleanup-iscsi.sh +@@ -2,5 +2,5 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + +-[ -e /sys/module/bnx2i ] && killproc iscsiuio ++[ -z "${DRACUT_SYSTEMD}" ] && [ -e /sys/module/bnx2i ] && killproc iscsiuio + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index 1de6fb7..68da9dd 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -38,7 +38,7 @@ iroot=${iroot#:} + # figured out a way how to check whether this is built-in or not + modprobe crc32c 2>/dev/null + +-if [ -e /sys/module/bnx2i ] && ! [ -e /tmp/iscsiuio-started ]; then ++if [ -z "${DRACUT_SYSTEMD}" ] && [ -e /sys/module/bnx2i ] && ! [ -e /tmp/iscsiuio-started ]; then + iscsiuio + > /tmp/iscsiuio-started + fi +@@ -107,28 +107,47 @@ handle_netroot() + + parse_iscsi_root "$1" || return 1 + ++ # Bail out early, if there is no route to the destination ++ if is_ip "$iscsi_target_ip" && [ "$netif" != "dummy" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then ++ ip route get "$iscsi_target_ip" >/dev/null 2>&1 || return 0 ++ fi ++ + # XXX is this needed? + getarg ro && iscsirw=ro + getarg rw && iscsirw=rw + fsopts=${fsopts:+$fsopts,}${iscsirw} + ++ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then ++ iscsi_initiator=$(while read line || [ -n "$line" ]; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name) ++ echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi ++ rm -f /etc/iscsi/initiatorname.iscsi ++ mkdir -p /etc/iscsi ++ ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi ++ systemctl restart iscsid ++ sleep 1 ++ > /tmp/iscsi_set_initiator ++ fi ++ + if [ -z $iscsi_initiator ]; then +- # XXX Where are these from? ++ [ -f /run/initiatorname.iscsi ] && . /run/initiatorname.iscsi + [ -f /etc/initiatorname.iscsi ] && . /etc/initiatorname.iscsi + [ -f /etc/iscsi/initiatorname.iscsi ] && . /etc/iscsi/initiatorname.iscsi + iscsi_initiator=$InitiatorName +- +- # XXX rfc3720 says 'SCSI Initiator Name: The iSCSI Initiator Name specifies +- # the worldwide unique name of the initiator.' Could we use hostname/ip +- # if missing? + fi + + if [ -z $iscsi_initiator ]; then +- if [ -f /sys/firmware/ibft/initiator/initiator-name ]; then +- iscsi_initiator=$(while read line; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name) +- fi ++ iscsi_initiator=$(iscsi-iname) ++ echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi ++ rm -f /etc/iscsi/initiatorname.iscsi ++ mkdir -p /etc/iscsi ++ ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi ++ systemctl restart iscsid ++ > /tmp/iscsi_set_initiator ++ # FIXME: iscsid is not yet ready, when the service is :-/ ++ sleep 1 + fi + ++ + if [ -z $iscsi_target_port ]; then + iscsi_target_port=3260 + fi +@@ -137,23 +156,21 @@ handle_netroot() + iscsi_target_group=1 + fi + +- if [ -z $iscsi_initiator ]; then +- # XXX is this correct? +- iscsi_initiator=$(iscsi-iname) +- fi +- + if [ -z $iscsi_lun ]; then + iscsi_lun=0 + fi + +- echo "InitiatorName='$iscsi_initiator'" > /run/initiatorname.iscsi ++ echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi + ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi +- ++ if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then ++ mkdir -p /etc/iscsi ++ ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi ++ fi + # FIXME $iscsi_protocol?? + +- if [ "$root" = "dhcp" ]; then ++ if [ "$root" = "dhcp" ] || [ "$netroot" = "dhcp" ]; 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 ++ printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' "$iscsi_lun" >> /etc/udev/rules.d/99-iscsi-root.rules + udevadm control --reload + write_fs_tab /dev/root + wait_for_dev -n /dev/root +@@ -163,29 +180,58 @@ handle_netroot() + echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > $hookdir/mount/01-$$-iscsi.sh + fi + +- # force udevsettle to break +- > $hookdir/initqueue/work +- +- iscsistart -i $iscsi_initiator -t $iscsi_target_name \ +- -g $iscsi_target_group -a $iscsi_target_ip \ +- -p $iscsi_target_port \ +- ${iscsi_username:+-u $iscsi_username} \ +- ${iscsi_password:+-w $iscsi_password} \ +- ${iscsi_in_username:+-U $iscsi_in_username} \ +- ${iscsi_in_password:+-W $iscsi_in_password} \ +- ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \ +- ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \ +- ${iscsi_param} \ +- || : +- ++ if [ -n "$DRACUT_SYSTEMD" ] && command -v systemd-run >/dev/null 2>&1; then ++ netroot_enc=$(systemd-escape "iscsistart_${1}") ++ status=$(systemctl is-active "$netroot_enc" 2>/dev/null) ++ is_active=$? ++ if [ $is_active -ne 0 ]; then ++ if [ "$status" != "activating" ] && ! systemctl is-failed "$netroot_enc" >/dev/null 2>&1; then ++ systemd-run --no-block --service-type=oneshot --remain-after-exit --quiet \ ++ --description="Login iSCSI Target $iscsi_target_name" \ ++ --unit="$netroot_enc" -- \ ++ $(command -v iscsistart) \ ++ -i $iscsi_initiator -t $iscsi_target_name \ ++ -g $iscsi_target_group -a $iscsi_target_ip \ ++ -p $iscsi_target_port \ ++ ${iscsi_username:+-u $iscsi_username} \ ++ ${iscsi_password:+-w $iscsi_password} \ ++ ${iscsi_in_username:+-U $iscsi_in_username} \ ++ ${iscsi_in_password:+-W $iscsi_in_password} \ ++ ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \ ++ ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \ ++ ${iscsi_param} >/dev/null 2>&1 ++ else ++ systemctl --no-block restart "$netroot_enc" >/dev/null 2>&1 ++ fi ++ fi ++ else ++ > $hookdir/initqueue/work ++ iscsistart -i $iscsi_initiator -t $iscsi_target_name \ ++ -g $iscsi_target_group -a $iscsi_target_ip \ ++ -p $iscsi_target_port \ ++ ${iscsi_username:+-u $iscsi_username} \ ++ ${iscsi_password:+-w $iscsi_password} \ ++ ${iscsi_in_username:+-U $iscsi_in_username} \ ++ ${iscsi_in_password:+-W $iscsi_in_password} \ ++ ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \ ++ ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \ ++ ${iscsi_param} \ ++ || : ++ fi + netroot_enc=$(str_replace "$1" '/' '\2f') + echo 'started' > "/tmp/iscsistarted-iscsi:${netroot_enc}" ++ return 0 + } + + ret=0 + ++if [ "$netif" != "dummy" ] && getargbool 1 rd.iscsi.waitnet; then ++ all_ifaces_up || exit 0 ++fi ++ + # loop over all netroot parameter +-if getarg netroot; then ++netroot=$(getarg netroot) ++if [ $? -eq 0 ] && [ "$netroot" != "dhcp" ]; then + for nroot in $(getargs netroot); do + [ "${nroot%%:*}" = "iscsi" ] || continue + nroot="${nroot##iscsi:}" +@@ -212,6 +258,6 @@ fi + + need_shutdown + +-# now we have a root filesystem somewhere in /dev/sda* ++# now we have a root filesystem somewhere in /dev/sd* + # let the normal block handler handle root= + exit $ret +diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh +index 49f9a0e..d12eb7d 100755 +--- a/modules.d/95iscsi/module-setup.sh ++++ b/modules.d/95iscsi/module-setup.sh +@@ -83,6 +83,37 @@ install() { + inst "$moddir/iscsiroot.sh" "/sbin/iscsiroot" + if ! dracut_module_included "systemd"; then + inst "$moddir/mount-lun.sh" "/bin/mount-lun.sh" ++ else ++ inst_multiple -o \ ++ $systemdsystemunitdir/iscsi.service \ ++ $systemdsystemunitdir/iscsid.service \ ++ $systemdsystemunitdir/iscsid.socket \ ++ $systemdsystemunitdir/iscsiuio.service \ ++ $systemdsystemunitdir/iscsiuio.socket \ ++ iscsiadm iscsid ++ ++ mkdir -p "${initdir}/$systemdsystemunitdir/sockets.target.wants" ++ for i in \ ++ iscsiuio.socket \ ++ ; do ++ ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/sockets.target.wants/${i}" ++ done ++ ++ mkdir -p "${initdir}/$systemdsystemunitdir/basic.target.wants" ++ for i in \ ++ iscsid.service \ ++ ; do ++ ln_r "$systemdsystemunitdir/${i}" "$systemdsystemunitdir/basic.target.wants/${i}" ++ done ++ ++ # Make sure iscsid is started after dracut-cmdline and ready for the initqueue ++ mkdir -p "${initdir}/$systemdsystemunitdir/iscsid.service.d" ++ ( ++ echo "[Unit]" ++ echo "After=dracut-cmdline.service" ++ echo "Before=dracut-initqueue.service" ++ ) > "${initdir}/$systemdsystemunitdir/iscsid.service.d/dracut.conf" + fi ++ + dracut_need_initqueue + } +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index b48be38..6a21b50 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -61,12 +61,13 @@ fi + + # iscsi_firmware does not need argument checking + if [ -n "$iscsi_firmware" ] ; then +- netroot=${netroot:-iscsi:} +- modprobe -q iscsi_boot_sysfs 2>/dev/null +- modprobe -q iscsi_ibft +- initqueue --onetime --timeout /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'" ++ [ -z "$netroot" ] && netroot=iscsi: ++ modprobe -b -q iscsi_boot_sysfs 2>/dev/null ++ modprobe -b -q iscsi_ibft + fi + ++initqueue --onetime --timeout /sbin/iscsiroot dummy "$netroot" "$NEWROOT" ++ + # If it's not iscsi we don't continue + [ "${netroot%%:*}" = "iscsi" ] || return + +@@ -92,8 +93,22 @@ if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; the + fi + fi + +-netroot_enc=$(str_replace "$netroot" '/' '\2f') +-echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh ++if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ]; then ++ iscsi_initiator=$arg ++ echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi ++ ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi ++ if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then ++ mkdir -p /etc/iscsi ++ ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi ++ fi ++fi ++ ++if [ -n "$iscsi_firmware" ] ; then ++ echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh ++else ++ netroot_enc=$(str_replace "$netroot" '/' '\2f') ++ echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh ++fi + + # Done, all good! + rootok=1 diff --git a/SOURCES/0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch b/SOURCES/0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch new file mode 100644 index 0000000..3df3b35 --- /dev/null +++ b/SOURCES/0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch @@ -0,0 +1,28 @@ +From a9a38f9f6014fd0b8c6e1779793da74c88b85b10 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 15:11:17 +0200 +Subject: [PATCH] dracut.cmdline.7.asc: document rd.iscsi.waitnet and + rd.iscsi.testroute + +(cherry picked from commit 69171aa8fa4bdd196709318582d73076677bd16c) +--- + dracut.cmdline.7.asc | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc +index 5f3dead..1cf962e 100644 +--- a/dracut.cmdline.7.asc ++++ b/dracut.cmdline.7.asc +@@ -704,6 +704,12 @@ iscsistart -b --param node.session.timeo.replacement_timeout=30 + **rd.iscsi.ibft** **rd.iscsi.ibft=1**: + Turn on iBFT autoconfiguration for the interfaces + ++**rd.iscsi.waitnet=0**: ++ Turn off waiting for all interfaces to be up before trying to login to the iSCSI targets. ++ ++**rd.iscsi.testroute=0**: ++ Turn off checking, if the route to the iSCSI target IP is possible before trying to login. ++ + FCoE + ~~~~ + **fcoe=**____:__{dcb|nodcb}__:: diff --git a/SOURCES/0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch b/SOURCES/0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch new file mode 100644 index 0000000..f209692 --- /dev/null +++ b/SOURCES/0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch @@ -0,0 +1,42 @@ +From d9b00731c81fa2facd5c6088a08bdd579d550eba Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 15:14:11 +0200 +Subject: [PATCH] iscsi/parse-iscsiroot.sh: use iBFT initiator name + +(cherry picked from commit feb8dc685dca1229c517de9ec9854367b8c49524) +--- + modules.d/95iscsi/parse-iscsiroot.sh | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 6a21b50..2939e58 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -60,7 +60,7 @@ if [ -n "$iscsiroot" ] ; then + fi + + # iscsi_firmware does not need argument checking +-if [ -n "$iscsi_firmware" ] ; then ++if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then + [ -z "$netroot" ] && netroot=iscsi: + modprobe -b -q iscsi_boot_sysfs 2>/dev/null + modprobe -b -q iscsi_ibft +@@ -103,6 +103,18 @@ if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ]; then + fi + fi + ++# If not given on the cmdline and initiator-name available via iBFT ++if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then ++ iscsi_initiator=$(while read line || [ -n "$line" ]; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name) ++ echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi ++ rm -f /etc/iscsi/initiatorname.iscsi ++ mkdir -p /etc/iscsi ++ ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi ++ systemctl restart iscsid ++ sleep 1 ++ > /tmp/iscsi_set_initiator ++fi ++ + if [ -n "$iscsi_firmware" ] ; then + echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh + else diff --git a/SOURCES/0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch b/SOURCES/0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch new file mode 100644 index 0000000..9116ac0 --- /dev/null +++ b/SOURCES/0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch @@ -0,0 +1,58 @@ +From 543a6d5cab7538cd9cf94b43b97ac96d995c7d2f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 13 Aug 2015 11:53:21 +0200 +Subject: [PATCH] iscsi/iscsiroot.sh: handle timeout with all interfaces up + +restart iscsid, because it may disbehaved + +(cherry picked from commit 6802cf23499b05544079b26a39e339bb3476d38d) +--- + modules.d/95iscsi/iscsiroot.sh | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index 68da9dd..9452afe 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -199,13 +199,14 @@ handle_netroot() + ${iscsi_in_password:+-W $iscsi_in_password} \ + ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \ + ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \ +- ${iscsi_param} >/dev/null 2>&1 ++ ${iscsi_param} >/dev/null 2>&1 \ ++ && { > $hookdir/initqueue/work ; } + else +- systemctl --no-block restart "$netroot_enc" >/dev/null 2>&1 ++ systemctl --no-block restart "$netroot_enc" >/dev/null 2>&1 \ ++ && { > $hookdir/initqueue/work ; } + fi + fi + else +- > $hookdir/initqueue/work + iscsistart -i $iscsi_initiator -t $iscsi_target_name \ + -g $iscsi_target_group -a $iscsi_target_ip \ + -p $iscsi_target_port \ +@@ -216,7 +217,7 @@ handle_netroot() + ${iscsi_iface_name:+--param iface.iscsi_ifacename=$iscsi_iface_name} \ + ${iscsi_netdev_name:+--param iface.net_ifacename=$iscsi_netdev_name} \ + ${iscsi_param} \ +- || : ++ && { > $hookdir/initqueue/work ; } + fi + netroot_enc=$(str_replace "$1" '/' '\2f') + echo 'started' > "/tmp/iscsistarted-iscsi:${netroot_enc}" +@@ -229,6 +230,14 @@ if [ "$netif" != "dummy" ] && getargbool 1 rd.iscsi.waitnet; then + all_ifaces_up || exit 0 + fi + ++if [ "$netif" = "dummy" ] && all_ifaces_up; then ++ # s.th. went wrong and the timeout script hits ++ # restart ++ systemctl restart iscsid ++ # damn iscsid is not ready after unit says it's ready ++ sleep 2 ++fi ++ + # loop over all netroot parameter + netroot=$(getarg netroot) + if [ $? -eq 0 ] && [ "$netroot" != "dhcp" ]; then diff --git a/SOURCES/0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch b/SOURCES/0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch new file mode 100644 index 0000000..21b517f --- /dev/null +++ b/SOURCES/0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch @@ -0,0 +1,25 @@ +From 99b9b4896e751fa17d64ded496aba3161f665ffb Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:40:42 +0200 +Subject: [PATCH] TEST-30-ISCSI/dhcpd.conf: set the LUN + +set the LUN, so the udev rule to mount the disk matches + +(cherry picked from commit 52b91b66980d0de18a52c6c1c5334364b115fee2) +--- + test/TEST-30-ISCSI/dhcpd.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/TEST-30-ISCSI/dhcpd.conf b/test/TEST-30-ISCSI/dhcpd.conf +index 6eb035b..22c1790 100644 +--- a/test/TEST-30-ISCSI/dhcpd.conf ++++ b/test/TEST-30-ISCSI/dhcpd.conf +@@ -15,7 +15,7 @@ subnet 192.168.50.0 netmask 255.255.255.0 { + # NFSv3: last octect starts at 0x00 and works up + + group { +- option root-path "iscsi:192.168.50.1::::iqn.2009-06.dracut:target0"; ++ option root-path "iscsi:192.168.50.1:::1:iqn.2009-06.dracut:target0"; + + host iscsi-1 { + hardware ethernet 52:54:00:12:34:00; diff --git a/SOURCES/0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch b/SOURCES/0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch new file mode 100644 index 0000000..b7896a7 --- /dev/null +++ b/SOURCES/0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch @@ -0,0 +1,349 @@ +From 1a2c9bbd2d611c801df3f342d5302f91602d77d6 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 12 Aug 2015 14:42:03 +0200 +Subject: [PATCH] TEST-30-ISCSI: switch to scsi-target-utils + +netbsd-iscsi is not available on RHEL + +Beef up the testsuite to use the two targets over different +interfaces. + +Test the new iSCSI parameters rd.iscsi.waitnet and rd.iscsi.testroute. + +(cherry picked from commit c22c43f81a5f15c8759e6aa69773d0e9010c4741) +--- + README.testsuite | 20 ++++--- + test/TEST-30-ISCSI/server-init.sh | 24 +++++++- + test/TEST-30-ISCSI/targets | 25 -------- + test/TEST-30-ISCSI/test.sh | 119 +++++++++++++++++++++++++++----------- + 4 files changed, 117 insertions(+), 71 deletions(-) + delete mode 100644 test/TEST-30-ISCSI/targets + +diff --git a/README.testsuite b/README.testsuite +index f4955e0..247ed3a 100644 +--- a/README.testsuite ++++ b/README.testsuite +@@ -1,14 +1,16 @@ + For the testsuite to work, you will have to install at least the following software packages: +-dash +-asciidoc +-mdadm +-lvm2 +-cryptsetup +-nfs-utils +-netbsd-iscsi +-nbd +-dhcp (dhcp-server on openSUSE) ++dash \ ++bridge-utils \ ++asciidoc \ ++mdadm \ ++lvm2 \ ++cryptsetup \ ++nfs-utils \ ++nbd \ ++dhcp-server \ ++scsi-target-utils \ + iscsi-initiator-utils ++ + TEST-04-FULL-SYSTEMD: systemd >= 187 + + How to run the testsuite: +diff --git a/test/TEST-30-ISCSI/server-init.sh b/test/TEST-30-ISCSI/server-init.sh +index 4bdd5e3..64a4755 100755 +--- a/test/TEST-30-ISCSI/server-init.sh ++++ b/test/TEST-30-ISCSI/server-init.sh +@@ -12,10 +12,30 @@ ip link set lo up + ip link set dev eth0 name ens3 + ip addr add 192.168.50.1/24 dev ens3 + ip link set ens3 up ++ip link set dev eth1 name ens4 ++ip addr add 192.168.51.1/24 dev ens4 ++ip link set ens4 up + >/var/lib/dhcpd/dhcpd.leases + chmod 777 /var/lib/dhcpd/dhcpd.leases +-dhcpd -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases ++dhcpd -d -cf /etc/dhcpd.conf -lf /var/lib/dhcpd/dhcpd.leases & ++ ++tgtd ++tgtadm --lld iscsi --mode target --op new --tid 1 --targetname iqn.2009-06.dracut:target0 ++tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2009-06.dracut:target1 ++tgtadm --lld iscsi --mode target --op new --tid 3 --targetname iqn.2009-06.dracut:target2 ++tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sdb ++tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 2 -b /dev/sdc ++tgtadm --lld iscsi --mode logicalunit --op new --tid 3 --lun 3 -b /dev/sdd ++tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.50.101 ++tgtadm --lld iscsi --mode target --op bind --tid 2 -I 192.168.51.101 ++tgtadm --lld iscsi --mode target --op bind --tid 3 -I 192.168.50.101 ++ ++ + # Wait forever for the VM to die +-/usr/sbin/iscsi-target -D -t iqn.2009-06.dracut ++echo "Serving iSCSI" ++while :; do ++ [ -n "$(jobs -rp)" ] && echo > /dev/watchdog ++ sleep 10 ++done + mount -n -o remount,ro / + poweroff -f +diff --git a/test/TEST-30-ISCSI/targets b/test/TEST-30-ISCSI/targets +deleted file mode 100644 +index 6a6872e..0000000 +--- a/test/TEST-30-ISCSI/targets ++++ /dev/null +@@ -1,25 +0,0 @@ +-# $NetBSD: targets,v 1.2 2006/03/04 21:53:16 agc Exp $ +-# +-# Structure of this file: +-# +-# + an extent is a straight (offset, length) pair of a file or device +-# it's the lowest common storage denominator +-# at least one is needed +-# + a device is made up of one or more extents or other devices +-# devices can be added in a hierachical manner, to enhance resilience +-# + in this example, no device definitions are necessary, as the target +-# will just use a simple extent for persistent storage +-# + a target is made up of 1 or more devices +-# The code does not support RAID1 recovery at present +- +-# Simple file showing 1 extent, mapped straight into 1 target +- +-# extents file start length +-extent0 /dev/sdb 0 20971520 +-extent1 /dev/sdc 0 20971520 +-extent2 /dev/sdd 0 20971520 +- +-# target flags storage netmask +-target0 rw extent0 192.168.50.0/24 +-target1 rw extent1 192.168.50.0/24 +-target2 rw extent2 192.168.50.0/24 +diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh +index a258c04..be3399a 100755 +--- a/test/TEST-30-ISCSI/test.sh ++++ b/test/TEST-30-ISCSI/test.sh +@@ -3,8 +3,10 @@ TEST_DESCRIPTION="root filesystem over iSCSI" + + KVERSION=${KVERSION-$(uname -r)} + +-#DEBUGFAIL="rd.shell" +-#SERIAL="tcp:127.0.0.1:9999" ++#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " ++DEBUGFAIL="loglevel=1" ++#SERVER_DEBUG="rd.debug loglevel=7" ++SERIAL="tcp:127.0.0.1:9999" + SERIAL="null" + + run_server() { +@@ -12,17 +14,17 @@ run_server() { + echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server" + + $testdir/run-qemu \ +- -hda $TESTDIR/server.ext3 \ +- -hdb $TESTDIR/root.ext3 \ +- -hdc $TESTDIR/iscsidisk2.img \ +- -hdd $TESTDIR/iscsidisk3.img \ +- -m 256M -smp 2 \ ++ -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \ ++ -drive format=raw,index=1,media=disk,file=$TESTDIR/root.ext3 \ ++ -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \ ++ -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \ ++ -m 512M -smp 2 \ + -display none \ + -serial $SERIAL \ + -net nic,macaddr=52:54:00:12:34:56,model=e1000 \ ++ -net nic,macaddr=52:54:00:12:34:57,model=e1000 \ + -net socket,listen=127.0.0.1:12330 \ +- -kernel /boot/vmlinuz-$KVERSION \ +- -append "root=/dev/sda rootfstype=ext3 rw rd.debug loglevel=77 console=ttyS0,115200n81 selinux=0" \ ++ -append "root=/dev/sda rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \ + -initrd $TESTDIR/initramfs.server \ + -pidfile $TESTDIR/server.pid -daemonize || return 1 + sudo chmod 644 $TESTDIR/server.pid || return 1 +@@ -41,12 +43,12 @@ run_client() { + dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1 + + $testdir/run-qemu \ +- -hda $TESTDIR/client.img \ +- -m 256M -smp 2 -nographic \ ++ -drive format=raw,index=0,media=disk,file=$TESTDIR/client.img \ ++ -m 512M -smp 2 -nographic \ + -net nic,macaddr=52:54:00:12:34:00,model=e1000 \ ++ -net nic,macaddr=52:54:00:12:34:01,model=e1000 \ + -net socket,connect=127.0.0.1:12330 \ +- -kernel /boot/vmlinuz-$KVERSION \ +- -append "$* rw quiet rd.auto rd.retry=5 rd.debug rd.info console=ttyS0,115200n81 selinux=0 $DEBUGFAIL" \ ++ -append "rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug=0 $DEBUGFAIL $*" \ + -initrd $TESTDIR/initramfs.testing + if ! grep -F -m 1 -q iscsi-OK $TESTDIR/client.img; then + echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" +@@ -58,20 +60,58 @@ run_client() { + } + + do_test_run() { ++ initiator=$(iscsi-iname) + + run_client "root=dhcp" \ +- "root=dhcp" \ ++ "root=/dev/root netroot=dhcp ip=ens3:dhcp" \ ++ "rd.iscsi.initiator=$initiator" \ ++ || return 1 ++ ++ run_client "netroot=iscsi target0"\ ++ "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \ ++ "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \ ++ "rd.iscsi.initiator=$initiator" \ ++ || return 1 ++ ++ run_client "netroot=iscsi target1 target2" \ ++ "root=LABEL=sysroot" \ ++ "ip=192.168.50.101:::255.255.255.0::ens3:off" \ ++ "ip=192.168.51.101:::255.255.255.0::ens4:off" \ ++ "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ ++ "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.initiator=$initiator" \ ++ || return 1 ++ ++ run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0" \ ++ "root=LABEL=sysroot" \ ++ "ip=192.168.50.101:::255.255.255.0::ens3:off" \ ++ "ip=192.168.51.101:::255.255.255.0::ens4:off" \ ++ "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ ++ "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.initiator=$initiator" \ ++ "rd.waitnet=0 rd.retry=30" \ + || return 1 + +- run_client "root=iscsi" \ +- "root=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \ +- "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \ ++ run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ ++ "root=LABEL=sysroot" \ ++ "ip=192.168.50.101:::255.255.255.0::ens3:off" \ ++ "ip=192.168.51.101:::255.255.255.0::ens4:off" \ ++ "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ ++ "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.initiator=$initiator" \ ++ "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \ + || return 1 + +- run_client "netroot=iscsi" \ +- "iscsi_firmware root=LABEL=sysroot ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \ +- "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target1 netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0 default GW" \ ++ "root=LABEL=sysroot" \ ++ "ip=192.168.50.101::192.168.50.1:255.255.255.0::ens3:off" \ ++ "ip=192.168.51.101::192.168.51.1:255.255.255.0::ens4:off" \ ++ "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ ++ "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.initiator=$initiator" \ ++ "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \ + || return 1 ++ + return 0 + } + +@@ -105,15 +145,23 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay/source + . $basedir/dracut-init.sh ++ ( ++ cd "$initdir" ++ mkdir -p -- dev sys proc etc var/run tmp ++ mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin ++ for i in bin sbin lib lib64; do ++ ln -sfnr usr/$i $i ++ done ++ mkdir -p -- var/lib/nfs/rpc_pipefs ++ ) + inst_multiple sh shutdown poweroff stty cat ps ln ip \ +- mount dmesg mkdir cp ping grep ++ mount dmesg mkdir cp ping grep setsid + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do + [ -f ${_terminfodir}/l/linux ] && break + done + inst_multiple -o ${_terminfodir}/l/linux + inst_simple /etc/os-release + inst ./client-init.sh /sbin/init +- (cd "$initdir"; mkdir -p dev sys proc etc var/run tmp ) + cp -a /etc/ld.so.conf* $initdir/etc + sudo ldconfig -r "$initdir" + ) +@@ -122,7 +170,7 @@ test_setup() { + ( + export initdir=$TESTDIR/overlay + . $basedir/dracut-init.sh +- inst_multiple sfdisk mkfs.ext3 poweroff cp umount ++ inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid + inst_hook initqueue 01 ./create-root.sh + inst_hook initqueue/finished 01 ./finished-false.sh + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules +@@ -132,8 +180,9 @@ test_setup() { + # We do it this way so that we do not risk trashing the host mdraid + # devices, volume groups, encrypted partitions, etc. + $basedir/dracut.sh -l -i $TESTDIR/overlay / \ +- -m "dash crypt lvm mdraid udev-rules base rootfs-block kernel-modules" \ ++ -m "dash crypt lvm mdraid udev-rules base rootfs-block fs-lib kernel-modules" \ + -d "piix ide-gd_mod ata_piix ext3 sd_mod" \ ++ --no-hostonly-cmdline -N \ + -f $TESTDIR/initramfs.makeroot $KVERSION || return 1 + rm -rf -- $TESTDIR/overlay + +@@ -145,12 +194,11 @@ test_setup() { + fi + # Invoke KVM and/or QEMU to actually create the target filesystem. + $testdir/run-qemu \ +- -hda $TESTDIR/root.ext3 \ +- -hdb $TESTDIR/client.img \ +- -hdc $TESTDIR/iscsidisk2.img \ +- -hdd $TESTDIR/iscsidisk3.img \ ++ -drive format=raw,index=0,media=disk,file=$TESTDIR/root.ext3 \ ++ -drive format=raw,index=1,media=disk,file=$TESTDIR/client.img \ ++ -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \ ++ -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \ + -smp 2 -m 256M -nographic -net none \ +- -kernel "/boot/vmlinuz-$kernel" \ + -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \ + -initrd $TESTDIR/initramfs.makeroot || return 1 + grep -F -m 1 -q dracut-root-block-created $TESTDIR/client.img || return 1 +@@ -163,9 +211,10 @@ test_setup() { + inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules + ) + sudo $basedir/dracut.sh -l -i $TESTDIR/overlay / \ +- -o "dash plymouth dmraid" \ ++ -o "dash plymouth dmraid nfs" \ + -a "debug" \ + -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \ ++ --no-hostonly-cmdline -N \ + -f $TESTDIR/initramfs.testing $KVERSION || return 1 + + # Make server root +@@ -185,15 +234,14 @@ test_setup() { + inst /etc/passwd /etc/passwd + inst_multiple sh ls shutdown poweroff stty cat ps ln ip \ + dmesg mkdir cp ping \ +- modprobe tcpdump \ ++ modprobe tcpdump setsid \ + /etc/services sleep mount chmod +- inst_multiple /usr/sbin/iscsi-target ++ inst_multiple tgtd tgtadm + for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do + [ -f ${_terminfodir}/l/linux ] && break + done + inst_multiple -o ${_terminfodir}/l/linux + instmods iscsi_tcp crc32c ipv6 +- inst ./targets /etc/iscsi/targets + [ -f /etc/netconfig ] && inst_multiple /etc/netconfig + type -P dhcpd >/dev/null && inst_multiple dhcpd + [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd +@@ -214,8 +262,9 @@ 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 "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000" \ ++ -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \ ++ -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \ ++ --no-hostonly-cmdline -N \ + -f $TESTDIR/initramfs.server $KVERSION || return 1 + + } diff --git a/SOURCES/0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch b/SOURCES/0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch new file mode 100644 index 0000000..becd7c8 --- /dev/null +++ b/SOURCES/0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch @@ -0,0 +1,24 @@ +From 88329f6b4f4581a50842d1fe82f11cb052e7f100 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Sat, 15 Aug 2015 13:21:29 +0200 +Subject: [PATCH] iscsi/iscsiroot.sh: systemd-run does not understand + --no-block + +not yet on RHEL-7 +--- + modules.d/95iscsi/iscsiroot.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index 9452afe..2ac9ed3 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -186,7 +186,7 @@ handle_netroot() + is_active=$? + if [ $is_active -ne 0 ]; then + if [ "$status" != "activating" ] && ! systemctl is-failed "$netroot_enc" >/dev/null 2>&1; then +- systemd-run --no-block --service-type=oneshot --remain-after-exit --quiet \ ++ systemd-run --service-type=oneshot --remain-after-exit --quiet \ + --description="Login iSCSI Target $iscsi_target_name" \ + --unit="$netroot_enc" -- \ + $(command -v iscsistart) \ diff --git a/SOURCES/0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch b/SOURCES/0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch new file mode 100644 index 0000000..a78f500 --- /dev/null +++ b/SOURCES/0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch @@ -0,0 +1,21 @@ +From f74b0a9f38838dddcf6f56daa9f20fc3e86087ca Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Sat, 15 Aug 2015 13:22:07 +0200 +Subject: [PATCH] iscsi/module-setup.sh: iscsid need /var/lib/iscsi + +--- + modules.d/95iscsi/module-setup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh +index d12eb7d..4ecba05 100755 +--- a/modules.d/95iscsi/module-setup.sh ++++ b/modules.d/95iscsi/module-setup.sh +@@ -114,6 +114,6 @@ install() { + echo "Before=dracut-initqueue.service" + ) > "${initdir}/$systemdsystemunitdir/iscsid.service.d/dracut.conf" + fi +- ++ inst_dir /var/lib/iscsi + dracut_need_initqueue + } diff --git a/SOURCES/0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch b/SOURCES/0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch new file mode 100644 index 0000000..fc14c06 --- /dev/null +++ b/SOURCES/0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch @@ -0,0 +1,99 @@ +From 836ca3f47eb0b0a4c97ae704b0b9619a00dbfa87 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Sat, 15 Aug 2015 13:22:44 +0200 +Subject: [PATCH] TEST-30-ISCSI: fix test to run with new iscsi + +--- + test/TEST-30-ISCSI/client-init.sh | 8 +++++++- + test/TEST-30-ISCSI/create-root.sh | 2 +- + test/TEST-30-ISCSI/test.sh | 10 +++++----- + 3 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/test/TEST-30-ISCSI/client-init.sh b/test/TEST-30-ISCSI/client-init.sh +index e78db27..2e422cd 100755 +--- a/test/TEST-30-ISCSI/client-init.sh ++++ b/test/TEST-30-ISCSI/client-init.sh +@@ -1,14 +1,20 @@ + #!/bin/sh + export PATH=/sbin:/bin:/usr/sbin:/usr/bin + exec >/dev/console 2>&1 ++strstr() { [ "${1##*"$2"*}" != "$1" ]; } ++CMDLINE=$(while read line || [ -n "$line" ]; do echo $line;done < /proc/cmdline) + export TERM=linux + export PS1='initramfs-test:\w\$ ' + stty sane + echo "made it to the rootfs! Powering down." +-while read dev fs fstype opts rest; do ++while read dev fs fstype opts rest || [ -n "$dev" ]; do + [ "$fstype" != "ext3" ] && continue + echo "iscsi-OK $dev $fstype $opts" > /dev/sda + break + done < /proc/mounts + #sh -i ++if strstr "$CMDLINE" "rd.shell"; then ++ strstr "$(setsid --help)" "control" && CTTY="-c" ++ setsid $CTTY sh -i ++fi + poweroff -f +diff --git a/test/TEST-30-ISCSI/create-root.sh b/test/TEST-30-ISCSI/create-root.sh +index 2a4b920..5f4b32a 100755 +--- a/test/TEST-30-ISCSI/create-root.sh ++++ b/test/TEST-30-ISCSI/create-root.sh +@@ -5,7 +5,7 @@ for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do + done + rm -f -- /etc/lvm/lvm.conf + udevadm control --reload +-mkfs.ext3 -j -F /dev/sda && \ ++mkfs.ext3 -j -L singleroot -F /dev/sda && \ + mkdir -p /sysroot && \ + mount /dev/sda /sysroot && \ + cp -a -t /sysroot /source/* && \ +diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh +index be3399a..92ddc86 100755 +--- a/test/TEST-30-ISCSI/test.sh ++++ b/test/TEST-30-ISCSI/test.sh +@@ -3,7 +3,7 @@ TEST_DESCRIPTION="root filesystem over iSCSI" + + KVERSION=${KVERSION-$(uname -r)} + +-#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " ++DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " + DEBUGFAIL="loglevel=1" + #SERVER_DEBUG="rd.debug loglevel=7" + SERIAL="tcp:127.0.0.1:9999" +@@ -48,7 +48,7 @@ run_client() { + -net nic,macaddr=52:54:00:12:34:00,model=e1000 \ + -net nic,macaddr=52:54:00:12:34:01,model=e1000 \ + -net socket,connect=127.0.0.1:12330 \ +- -append "rw rd.auto rd.retry=20 console=ttyS0,115200n81 selinux=0 rd.debug=0 $DEBUGFAIL $*" \ ++ -append "rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 $DEBUGFAIL $*" \ + -initrd $TESTDIR/initramfs.testing + if ! grep -F -m 1 -q iscsi-OK $TESTDIR/client.img; then + echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]" +@@ -89,7 +89,7 @@ do_test_run() { + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ + "rd.iscsi.initiator=$initiator" \ +- "rd.waitnet=0 rd.retry=30" \ ++ "rd.iscsi.waitnet=0" \ + || return 1 + + run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ +@@ -99,7 +99,7 @@ do_test_run() { + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ + "rd.iscsi.initiator=$initiator" \ +- "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \ ++ "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ + || return 1 + + run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0 default GW" \ +@@ -109,7 +109,7 @@ do_test_run() { + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ + "rd.iscsi.initiator=$initiator" \ +- "rd.waitnet=0 rd.iscsi.testroute=0 rd.retry=30" \ ++ "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ + || return 1 + + return 0 diff --git a/SOURCES/0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch b/SOURCES/0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch new file mode 100644 index 0000000..85b9ba7 --- /dev/null +++ b/SOURCES/0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch @@ -0,0 +1,22 @@ +From 415d0c68ab1aaff7892e2187f8a18341bfeef796 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Sat, 15 Aug 2015 15:42:51 +0200 +Subject: [PATCH] dracut-logger.sh: log also rest of line without return + +--- + dracut-logger.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dracut-logger.sh b/dracut-logger.sh +index 70b0da4..ffa5616 100755 +--- a/dracut-logger.sh ++++ b/dracut-logger.sh +@@ -367,7 +367,7 @@ dlog() { + if (( $# > 1 )); then + _do_dlog "$@" + else +- while read line; do ++ while read line || [ -n "$line" ]; do + _do_dlog "$1" "$line" + done + fi diff --git a/SOURCES/0301-iscsi-handle-timeout-case-better.patch b/SOURCES/0301-iscsi-handle-timeout-case-better.patch new file mode 100644 index 0000000..8512509 --- /dev/null +++ b/SOURCES/0301-iscsi-handle-timeout-case-better.patch @@ -0,0 +1,124 @@ +From bfe65f913a4bc6bc5fdb7aa75234c229a2ceef8f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 11:50:15 +0200 +Subject: [PATCH] iscsi: handle timeout case better + +--- + modules.d/95iscsi/iscsiroot.sh | 6 +++--- + modules.d/95iscsi/parse-iscsiroot.sh | 41 +++++++++++++++++++++--------------- + 2 files changed, 27 insertions(+), 20 deletions(-) + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index 2ac9ed3..b7370f6 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -108,7 +108,7 @@ handle_netroot() + parse_iscsi_root "$1" || return 1 + + # Bail out early, if there is no route to the destination +- if is_ip "$iscsi_target_ip" && [ "$netif" != "dummy" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then ++ if is_ip "$iscsi_target_ip" && [ "$netif" != "timeout" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then + ip route get "$iscsi_target_ip" >/dev/null 2>&1 || return 0 + fi + +@@ -226,11 +226,11 @@ handle_netroot() + + ret=0 + +-if [ "$netif" != "dummy" ] && getargbool 1 rd.iscsi.waitnet; then ++if [ "$netif" != "timeout" ] && getargbool 1 rd.iscsi.waitnet; then + all_ifaces_up || exit 0 + fi + +-if [ "$netif" = "dummy" ] && all_ifaces_up; then ++if [ "$netif" = "timeout" ] && all_ifaces_up; then + # s.th. went wrong and the timeout script hits + # restart + systemctl restart iscsid +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 2939e58..91cd463 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -42,7 +42,11 @@ if [ "${root%%:*}" = "iscsi" ] ; then + fi + + # If it's not empty or iscsi we don't continue +-[ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return ++for nroot in $(getargs netroot); do ++ [ "${nroot%%:*}" = "iscsi" ] || continue ++ netroot="$nroot" ++ break ++done + + if [ -n "$iscsiroot" ] ; then + [ -z "$netroot" ] && netroot=$root +@@ -64,12 +68,16 @@ if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then + [ -z "$netroot" ] && netroot=iscsi: + modprobe -b -q iscsi_boot_sysfs 2>/dev/null + modprobe -b -q iscsi_ibft ++ # if no ip= is given, but firmware ++ echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh ++ initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT" ++ initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'" + fi + +-initqueue --onetime --timeout /sbin/iscsiroot dummy "$netroot" "$NEWROOT" + +-# If it's not iscsi we don't continue +-[ "${netroot%%:*}" = "iscsi" ] || return ++[ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return 1 ++ ++initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT" + + modprobe -q qla4xxx + modprobe -q cxgb3i +@@ -77,11 +85,6 @@ modprobe -q cxgb4i + modprobe -q bnx2i + modprobe -q be2iscsi + +-if [ -z "$iscsi_firmware" ] ; then +- type parse_iscsi_root >/dev/null 2>&1 || . /lib/net-lib.sh +- parse_iscsi_root "$netroot" || return +-fi +- + # ISCSI actually supported? + if ! [ -e /sys/module/iscsi_tcp ]; then + modprobe -q iscsi_tcp || die "iscsiroot requested but kernel/initrd does not support iscsi" +@@ -89,7 +92,7 @@ fi + + if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then + if ! getargbool 1 rd.neednet >/dev/null || ! getarg "ip="; then +- initqueue --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'" ++ initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'" + fi + fi + +@@ -110,17 +113,21 @@ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] + rm -f /etc/iscsi/initiatorname.iscsi + mkdir -p /etc/iscsi + ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi +- systemctl restart iscsid +- sleep 1 + > /tmp/iscsi_set_initiator ++ if systemctl --quiet is-active iscsid.service; then ++ systemctl restart iscsid ++ sleep 1 ++ fi + fi + +-if [ -n "$iscsi_firmware" ] ; then +- echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh +-else +- netroot_enc=$(str_replace "$netroot" '/' '\2f') ++ ++for nroot in $(getargs netroot); do ++ [ "${nroot%%:*}" = "iscsi" ] || continue ++ type parse_iscsi_root >/dev/null 2>&1 || . /lib/net-lib.sh ++ parse_iscsi_root "$nroot" || return 1 ++ netroot_enc=$(str_replace "$nroot" '/' '\2f') + echo "[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh +-fi ++done + + # Done, all good! + rootok=1 diff --git a/SOURCES/0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch b/SOURCES/0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch new file mode 100644 index 0000000..54e6405 --- /dev/null +++ b/SOURCES/0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch @@ -0,0 +1,29 @@ +From ad565584a3b7d5795be80aee34307f1752a093b4 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 11:50:40 +0200 +Subject: [PATCH] base/dracut-lib.sh:vinfo/vwarn handle lines without newline + +--- + modules.d/99base/dracut-lib.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index 3ffbb02..b6593a0 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -67,13 +67,13 @@ else + fi + + vwarn() { +- while read line; do ++ while read line || [ -n "$line" ]; do + warn $line; + done + } + + vinfo() { +- while read line; do ++ while read line || [ -n "$line" ]; do + info $line; + done + } diff --git a/SOURCES/0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch b/SOURCES/0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch new file mode 100644 index 0000000..d3d9fb3 --- /dev/null +++ b/SOURCES/0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch @@ -0,0 +1,23 @@ +From 93a5a3d3ca6738e3f0282c4d3fc8be3f38f150d3 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 11:52:56 +0200 +Subject: [PATCH] systemd/dracut-cmdline.sh: print out cmdline in one line + +--- + modules.d/98systemd/dracut-cmdline.sh | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/modules.d/98systemd/dracut-cmdline.sh b/modules.d/98systemd/dracut-cmdline.sh +index 8a5ab2f..9d15663 100755 +--- a/modules.d/98systemd/dracut-cmdline.sh ++++ b/modules.d/98systemd/dracut-cmdline.sh +@@ -15,8 +15,7 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + [ -f /etc/initrd-release ] && . /etc/initrd-release + [ -n "$VERSION" ] && info "dracut-$VERSION" + +-info "Using kernel command line parameters:" +-getcmdline | vinfo ++info "Using kernel command line parameters:" $(getcmdline) + + getargbool 0 rd.udev.log-priority=info -d rd.udev.info -d -n -y rdudevinfo && echo 'udev_log="info"' >> /etc/udev/udev.conf + getargbool 0 rd.udev.log-priority=debug -d rd.udev.debug -d -n -y rdudevdebug && echo 'udev_log="debug"' >> /etc/udev/udev.conf diff --git a/SOURCES/0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch b/SOURCES/0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch new file mode 100644 index 0000000..1055d3e --- /dev/null +++ b/SOURCES/0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch @@ -0,0 +1,23 @@ +From fb2d643a385f1b02fbac6c2782b0026029c6bde7 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 11:53:31 +0200 +Subject: [PATCH] network/ifup.sh: let dhcp client run in the background + +we need to renew the lease +--- + modules.d/40network/ifup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 2f51e6d..ab87578 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -114,7 +114,7 @@ do_dhcp() { + info "Starting dhcp for interface $netif" + dhclient "$@" \ + ${_timeout:+-timeout $_timeout} \ +- -1 -q \ ++ -q \ + -cf /etc/dhclient.conf \ + -pf /tmp/dhclient.$netif.pid \ + -lf /tmp/dhclient.$netif.lease \ diff --git a/SOURCES/0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch b/SOURCES/0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch new file mode 100644 index 0000000..ee6d6d8 --- /dev/null +++ b/SOURCES/0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch @@ -0,0 +1,24 @@ +From 38180271c587f3053710bf38a6cda829d3a7c00f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 12:07:41 +0200 +Subject: [PATCH] network/ifup.sh: arping for static IPv4 addresses + +--- + modules.d/40network/ifup.sh | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index ab87578..8a5a606 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -163,6 +163,10 @@ do_static() { + ip addr add $ip/$mask ${srv:+peer $srv} dev $netif + wait_for_ipv6_dad $netif + else ++ if ! arping -f -q -D -c 2 -I $netif $ip; then ++ warn "Duplicate address detected for $ip for interface $netif." ++ return 1 ++ fi + ip addr flush dev $netif + ip addr add $ip/$mask ${srv:+peer $srv} brd + dev $netif + fi diff --git a/SOURCES/0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch b/SOURCES/0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch new file mode 100644 index 0000000..1134509 --- /dev/null +++ b/SOURCES/0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch @@ -0,0 +1,31 @@ +From 2eb3b00133d572183ca022b626d200549ce4ffa8 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 12:13:55 +0200 +Subject: [PATCH] network/parse-ip-opts.sh: bind enx* interface to the MAC + +do it automatically for the persistent naming scheme +--- + modules.d/40network/parse-ip-opts.sh | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/modules.d/40network/parse-ip-opts.sh b/modules.d/40network/parse-ip-opts.sh +index faee8f9..7c403f7 100755 +--- a/modules.d/40network/parse-ip-opts.sh ++++ b/modules.d/40network/parse-ip-opts.sh +@@ -113,6 +113,16 @@ for p in $(getargs ip=); do + die "Server-ip or dhcp for netboot needed, but current arguments say otherwise" + fi + ++ if str_starts "$dev" "enx" && [ ${#dev} -eq 15 ]; then ++ printf -- "ifname=%s:%s:%s:%s:%s:%s:%s\n" \ ++ "$dev" \ ++ "${dev:3:2}" \ ++ "${dev:5:2}" \ ++ "${dev:7:2}" \ ++ "${dev:9:2}" \ ++ "${dev:11:2}" \ ++ "${dev:13:2}" >> /etc/cmdline.d/80-enx.conf ++ fi + done + + # put BOOTIF in IFACES to make sure it comes up diff --git a/SOURCES/0307-udev-rules-install-40-redhat.rules.patch b/SOURCES/0307-udev-rules-install-40-redhat.rules.patch new file mode 100644 index 0000000..5bff134 --- /dev/null +++ b/SOURCES/0307-udev-rules-install-40-redhat.rules.patch @@ -0,0 +1,47 @@ +From 0c0abf97ccc2306a7089d53a0a1f92e80b2e733c Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 12:25:53 +0200 +Subject: [PATCH] udev-rules: install 40-redhat.rules + +--- + modules.d/95udev-rules/module-setup.sh | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +diff --git a/modules.d/95udev-rules/module-setup.sh b/modules.d/95udev-rules/module-setup.sh +index fdea8c6..e0f2e38 100755 +--- a/modules.d/95udev-rules/module-setup.sh ++++ b/modules.d/95udev-rules/module-setup.sh +@@ -26,15 +26,26 @@ install() { + exit 1 + fi + +- inst_rules 50-udev-default.rules 60-persistent-storage.rules \ +- 61-persistent-storage-edd.rules 80-drivers.rules 95-udev-late.rules \ +- 60-pcmcia.rules \ +- 50-udev.rules 95-late.rules \ ++ inst_rules \ ++ 40-redhat.rules \ + 50-firmware.rules \ +- 70-uaccess.rules 71-seat.rules 73-seat-late.rules \ +- 75-net-description.rules 80-net-name-slot.rules \ ++ 50-udev-default.rules \ ++ 50-udev.rules \ + "$moddir/59-persistent-storage.rules" \ +- "$moddir/61-persistent-storage.rules" ++ /59-persistent-storage.rules \ ++ 60-pcmcia.rules \ ++ 60-persistent-storage.rules \ ++ 61-persistent-storage-edd.rules \ ++ "$moddir/61-persistent-storage.rules" \ ++ 70-uaccess.rules \ ++ 71-seat.rules \ ++ 73-seat-late.rules \ ++ 75-net-description.rules \ ++ 80-drivers.rules \ ++ 80-net-name-slot.rules \ ++ 95-late.rules \ ++ 95-udev-late.rules \ ++ ${NULL} + + prepare_udev_rules 59-persistent-storage.rules 61-persistent-storage.rules + # debian udev rules diff --git a/SOURCES/0308-fcoe-cleanup-lldpad.patch b/SOURCES/0308-fcoe-cleanup-lldpad.patch new file mode 100644 index 0000000..0c4503d --- /dev/null +++ b/SOURCES/0308-fcoe-cleanup-lldpad.patch @@ -0,0 +1,40 @@ +From 69c437dd1c3b877f60ced307068e01619124fef4 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 12:27:32 +0200 +Subject: [PATCH] fcoe: cleanup lldpad + +Resolves: rhbz#1246217 +--- + modules.d/95fcoe/cleanup-fcoe.sh | 10 ++++++++++ + modules.d/95fcoe/module-setup.sh | 1 + + 2 files changed, 11 insertions(+) + create mode 100644 modules.d/95fcoe/cleanup-fcoe.sh + +diff --git a/modules.d/95fcoe/cleanup-fcoe.sh b/modules.d/95fcoe/cleanup-fcoe.sh +new file mode 100644 +index 0000000..5ff4d05 +--- /dev/null ++++ b/modules.d/95fcoe/cleanup-fcoe.sh +@@ -0,0 +1,10 @@ ++#!/bin/sh ++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- ++# ex: ts=8 sw=4 sts=4 et filetype=sh ++ ++if [ -e /var/run/lldpad.pid ]; then ++ lldpad -k ++ mkdir -m 0755 -p /run/initramfs/state/dev/shm ++ cp /dev/shm/lldpad.state /run/initramfs/state/dev/shm/ > /dev/null 2>&1 ++ echo "files /dev/shm/lldpad.state" >> /run/initramfs/rwtab ++fi +diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh +index ec573ea..646cfa8 100755 +--- a/modules.d/95fcoe/module-setup.sh ++++ b/modules.d/95fcoe/module-setup.sh +@@ -28,6 +28,7 @@ install() { + inst "$moddir/fcoe-edd.sh" "/sbin/fcoe-edd" + inst "$moddir/fcoe-genrules.sh" "/sbin/fcoe-genrules.sh" + inst_hook cmdline 99 "$moddir/parse-fcoe.sh" ++ inst_hook cleanup 90 "$moddir/cleanup-fcoe.sh" + dracut_need_initqueue + } + diff --git a/SOURCES/0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch b/SOURCES/0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch new file mode 100644 index 0000000..5337ab6 --- /dev/null +++ b/SOURCES/0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch @@ -0,0 +1,27 @@ +From 942d60d8afad4eb8b131a33fe9618e3e8392d33f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 12:40:01 +0200 +Subject: [PATCH] network/net-lib.sh:ibft unset gateway or dns, if set to + 0.0.0.0 + +--- + modules.d/40network/net-lib.sh | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 44c1bf0..c820356 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -236,9 +236,12 @@ ibft_to_cmdline() { + # skip not assigned ip adresses + [ "$ip" = "0.0.0.0" ] && continue + [ -e ${iface}/gateway ] && gw=$(read a < ${iface}/gateway; echo $a) ++ [ "$gateway" = "0.0.0.0" ] && unset $gateway + [ -e ${iface}/subnet-mask ] && mask=$(read a < ${iface}/subnet-mask; echo $a) + [ -e ${iface}/primary-dns ] && dns1=$(read a < ${iface}/primary-dns; echo $a) ++ [ "$dns1" = "0.0.0.0" ] && unset $dns1 + [ -e ${iface}/secondary-dns ] && dns2=$(read a < ${iface}/secondary-dns; echo $a) ++ [ "$dns2" = "0.0.0.0" ] && unset $dns2 + [ -e ${iface}/hostname ] && hostname=$(read a < ${iface}/hostname; echo $a) + if [ -n "$ip" ] && [ -n "$mask" ]; then + echo "ip=$ip::$gw:$mask:$hostname:$dev:none${dns1:+:$dns1}${dns2:+:$dns2}" diff --git a/SOURCES/0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch b/SOURCES/0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch new file mode 100644 index 0000000..b5e7dda --- /dev/null +++ b/SOURCES/0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch @@ -0,0 +1,22 @@ +From d6bfa7052a620ebdd37f78655462120871c49ebd Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 12:41:12 +0200 +Subject: [PATCH] network/dhclient: exit arping immediatly, if we get an answer + +--- + modules.d/40network/dhclient-script.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index 12e2869..18b4100 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -117,7 +117,7 @@ case $reason in + read layer2 < /sys/class/net/$netif/device/layer2 + fi + if [ "$layer2" != "0" ]; then +- if ! arping -q -D -c 2 -I $netif $new_ip_address ; then ++ if ! arping -f -q -D -c 2 -I $netif $new_ip_address ; then + warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying" + exit 1 + fi diff --git a/SOURCES/0311-dmraid-only-scan-once-because-of-one-device.patch b/SOURCES/0311-dmraid-only-scan-once-because-of-one-device.patch new file mode 100644 index 0000000..367160a --- /dev/null +++ b/SOURCES/0311-dmraid-only-scan-once-because-of-one-device.patch @@ -0,0 +1,40 @@ +From 80153acc0f8bbb3829575201e2a0ba3da41268a8 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 15:04:31 +0200 +Subject: [PATCH] dmraid: only scan once because of one device + +--- + modules.d/90dmraid/61-dmraid-imsm.rules | 2 +- + modules.d/90dmraid/dmraid.sh | 7 +++++++ + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/modules.d/90dmraid/61-dmraid-imsm.rules b/modules.d/90dmraid/61-dmraid-imsm.rules +index 33e060b..de7e97e 100644 +--- a/modules.d/90dmraid/61-dmraid-imsm.rules ++++ b/modules.d/90dmraid/61-dmraid-imsm.rules +@@ -24,6 +24,6 @@ PROGRAM=="/bin/sh -c 'for i in $sys/$devpath/holders/dm-[0-9]*; do [ -e $$i ] && + ENV{DEVTYPE}!="partition", \ + RUN+="/sbin/partx -d --nr 1-1024 $env{DEVNAME}" + +-RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan" ++RUN+="/sbin/initqueue --onetime --unique --settled /sbin/dmraid_scan $env{DEVNAME}" + + LABEL="dm_end" +diff --git a/modules.d/90dmraid/dmraid.sh b/modules.d/90dmraid/dmraid.sh +index 3753ddd..ce9a6b2 100755 +--- a/modules.d/90dmraid/dmraid.sh ++++ b/modules.d/90dmraid/dmraid.sh +@@ -4,6 +4,13 @@ + + type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + ++dev="$1" ++devenc=$(str_replace "$1" '/' '\2f') ++ ++[ -e /tmp/dmraid.$devenc ] && exit 0 ++ ++>/tmp/dmraid.$devenc ++ + DM_RAIDS=$(getargs rd.dm.uuid -d rd_DM_UUID=) + + if [ -n "$DM_RAIDS" ] || getargbool 0 rd.auto; then diff --git a/SOURCES/0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch b/SOURCES/0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch new file mode 100644 index 0000000..9e97eb6 --- /dev/null +++ b/SOURCES/0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch @@ -0,0 +1,22 @@ +From 65977ef1d107c8741d9f2633b8618aa3aee2a49d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 15:05:11 +0200 +Subject: [PATCH] test/TEST-04-FULL-SYSTEMD/create-root.sh: modprobe btrfs + +why so ever... it used to load automatically +--- + test/TEST-04-FULL-SYSTEMD/create-root.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/TEST-04-FULL-SYSTEMD/create-root.sh b/test/TEST-04-FULL-SYSTEMD/create-root.sh +index 86ad449..bfec5bf 100755 +--- a/test/TEST-04-FULL-SYSTEMD/create-root.sh ++++ b/test/TEST-04-FULL-SYSTEMD/create-root.sh +@@ -4,6 +4,7 @@ for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do + > "/etc/udev/rules.d/$x" + done + rm -f -- /etc/lvm/lvm.conf ++modprobe btrfs + udevadm control --reload + set -e + # save a partition at the beginning for future flagging purposes diff --git a/SOURCES/0313-TEST-15-BTRFS-load-btrfs-module.patch b/SOURCES/0313-TEST-15-BTRFS-load-btrfs-module.patch new file mode 100644 index 0000000..896a8c5 --- /dev/null +++ b/SOURCES/0313-TEST-15-BTRFS-load-btrfs-module.patch @@ -0,0 +1,21 @@ +From d9b5a98532b6823adb35f7c68766f4df9db8a3c9 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 18 Aug 2015 15:26:23 +0200 +Subject: [PATCH] TEST-15-BTRFS: load btrfs module + +--- + test/TEST-15-BTRFSRAID/create-root.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/TEST-15-BTRFSRAID/create-root.sh b/test/TEST-15-BTRFSRAID/create-root.sh +index b92f9c0..ba3b54e 100755 +--- a/test/TEST-15-BTRFSRAID/create-root.sh ++++ b/test/TEST-15-BTRFSRAID/create-root.sh +@@ -3,6 +3,7 @@ + for x in 64-lvm.rules 70-mdadm.rules 99-mount-rules; do + > "/etc/udev/rules.d/$x" + done ++modprobe btrfs + udevadm control --reload + # save a partition at the beginning for future flagging purposes + sfdisk -C 327800 -H 2 -S 32 -L /dev/sda < +Date: Wed, 19 Aug 2015 13:59:40 +0200 +Subject: [PATCH] network/ifup.sh:do_static(): error out, if interface could + not be brought up + +--- + modules.d/40network/ifup.sh | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 8a5a606..1ee89bf 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -155,7 +155,11 @@ do_ipv6auto() { + do_static() { + strstr $ip '*:*:*' && load_ipv6 + +- linkup $netif ++ if ! linkup $netif; then ++ warn "Could bring interface $netif up!" ++ return 1 ++ fi ++ + [ -n "$macaddr" ] && ip link set address $macaddr dev $netif + [ -n "$mtu" ] && ip link set mtu $mtu dev $netif + if strstr $ip '*:*:*'; then diff --git a/SOURCES/0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch b/SOURCES/0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch new file mode 100644 index 0000000..1c850c0 --- /dev/null +++ b/SOURCES/0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch @@ -0,0 +1,30 @@ +From 32770ca79a1f6828ca9fdf4b6841e6a6d4e4754a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 19 Aug 2015 14:00:28 +0200 +Subject: [PATCH] network/ifup.sh:do_static(): error out, if IP is already + assigned + +--- + modules.d/40network/ifup.sh | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 1ee89bf..e51b453 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -160,6 +160,15 @@ do_static() { + return 1 + fi + ++ ip route get "$ip" | { ++ read a rest ++ if [ "$a" = "local" ]; then ++ warn "Not assigning $ip to interface $netif, cause it is already assigned!" ++ return 1 ++ fi ++ return 0 ++ } || return 1 ++ + [ -n "$macaddr" ] && ip link set address $macaddr dev $netif + [ -n "$mtu" ] && ip link set mtu $mtu dev $netif + if strstr $ip '*:*:*'; then diff --git a/SOURCES/0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch b/SOURCES/0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch new file mode 100644 index 0000000..eb2765b --- /dev/null +++ b/SOURCES/0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch @@ -0,0 +1,37 @@ +From b70b81f1c4dc0cc13851feefe870788290cff0a7 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 19 Aug 2015 16:18:23 +0200 +Subject: [PATCH] crypt/module-setup.sh: fixed parsing crypttab with no ending + newline + +--- + dracut.sh | 2 +- + modules.d/90crypt/module-setup.sh | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dracut.sh b/dracut.sh +index 90ac1fe..65824ec 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1045,7 +1045,7 @@ if [[ $hostonly ]]; then + [[ "$_d" -ef "$dev" ]] || continue + + if [[ -f /etc/crypttab ]]; then +- while read _mapper _a _p _o; do ++ while read _mapper _a _p _o || [ -n "$_mapper" ]; do + [[ $_mapper = \#* ]] && continue + [[ "$_d" -ef /dev/mapper/"$_mapper" ]] || continue + [[ "$_o" ]] || _o="$_p" +diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh +index bd37d9a..f8422fa 100755 +--- a/modules.d/90crypt/module-setup.sh ++++ b/modules.d/90crypt/module-setup.sh +@@ -63,7 +63,7 @@ install() { + + if [[ $hostonly ]] && [[ -f /etc/crypttab ]]; then + # filter /etc/crypttab for the devices we need +- while read _mapper _dev _rest; do ++ while read _mapper _dev _rest || [ -n "$_mapper" ]; do + [[ $_mapper = \#* ]] && continue + [[ $_dev ]] || continue + diff --git a/SOURCES/0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch b/SOURCES/0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch new file mode 100644 index 0000000..927433c --- /dev/null +++ b/SOURCES/0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch @@ -0,0 +1,64 @@ +From 310574f7eaf68412035eb19855afe4ce2973b784 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:12:59 +0200 +Subject: [PATCH] TEST-30-ISCSI: add rd.scsi.firmware + +--- + test/TEST-30-ISCSI/test.sh | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/test/TEST-30-ISCSI/test.sh b/test/TEST-30-ISCSI/test.sh +index 92ddc86..fc4bdce 100755 +--- a/test/TEST-30-ISCSI/test.sh ++++ b/test/TEST-30-ISCSI/test.sh +@@ -3,8 +3,9 @@ TEST_DESCRIPTION="root filesystem over iSCSI" + + KVERSION=${KVERSION-$(uname -r)} + +-DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " + DEBUGFAIL="loglevel=1" ++#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 " ++#DEBUGFAIL="rd.debug loglevel=7 " + #SERVER_DEBUG="rd.debug loglevel=7" + SERIAL="tcp:127.0.0.1:9999" + SERIAL="null" +@@ -70,6 +71,7 @@ do_test_run() { + run_client "netroot=iscsi target0"\ + "root=LABEL=singleroot netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target0" \ + "ip=192.168.50.101::192.168.50.1:255.255.255.0:iscsi-1:ens3:off" \ ++ "rd.iscsi.firmware" \ + "rd.iscsi.initiator=$initiator" \ + || return 1 + +@@ -79,6 +81,7 @@ do_test_run() { + "ip=192.168.51.101:::255.255.255.0::ens4:off" \ + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.firmware" \ + "rd.iscsi.initiator=$initiator" \ + || return 1 + +@@ -88,6 +91,7 @@ do_test_run() { + "ip=192.168.51.101:::255.255.255.0::ens4:off" \ + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.firmware" \ + "rd.iscsi.initiator=$initiator" \ + "rd.iscsi.waitnet=0" \ + || return 1 +@@ -98,6 +102,7 @@ do_test_run() { + "ip=192.168.51.101:::255.255.255.0::ens4:off" \ + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.firmware" \ + "rd.iscsi.initiator=$initiator" \ + "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ + || return 1 +@@ -108,6 +113,7 @@ do_test_run() { + "ip=192.168.51.101::192.168.51.1:255.255.255.0::ens4:off" \ + "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \ + "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \ ++ "rd.iscsi.firmware" \ + "rd.iscsi.initiator=$initiator" \ + "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \ + || return 1 diff --git a/SOURCES/0318-initqueue-add-online-queue.patch b/SOURCES/0318-initqueue-add-online-queue.patch new file mode 100644 index 0000000..e06293c --- /dev/null +++ b/SOURCES/0318-initqueue-add-online-queue.patch @@ -0,0 +1,31 @@ +From d3f61fb5cdaa56053ae8de0203a13722a7fe717a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:13:23 +0200 +Subject: [PATCH] initqueue: add online queue + +--- + modules.d/99base/initqueue.sh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/modules.d/99base/initqueue.sh b/modules.d/99base/initqueue.sh +index 854a36a..0f96fac 100755 +--- a/modules.d/99base/initqueue.sh ++++ b/modules.d/99base/initqueue.sh +@@ -15,6 +15,8 @@ while [ $# -gt 0 ]; do + case "$1" in + --onetime) + onetime="yes";; ++ --online) ++ qname="/online";; + --settled) + qname="/settled";; + --finished) +@@ -48,7 +50,7 @@ shift + { + [ -n "$onetime" ] && echo '[ -e "$job" ] && rm -f -- "$job"' + [ -n "$env" ] && echo "$env" +- echo "$exe $@" ++ echo "$exe" "$@" + } > "/tmp/$$-${job}.sh" + + mv -f "/tmp/$$-${job}.sh" "$hookdir/initqueue${qname}/${job}.sh" diff --git a/SOURCES/0319-dracut.spec-raise-systemd-requirement-to-219.patch b/SOURCES/0319-dracut.spec-raise-systemd-requirement-to-219.patch new file mode 100644 index 0000000..63f4244 --- /dev/null +++ b/SOURCES/0319-dracut.spec-raise-systemd-requirement-to-219.patch @@ -0,0 +1,23 @@ +From 35f40b75e444adae3b3c9bb610d635d9c17a753d Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:13:38 +0200 +Subject: [PATCH] dracut.spec: raise systemd requirement to >= 219 + +needs systemd-escape +--- + dracut.spec | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dracut.spec b/dracut.spec +index d22f586..ad737c2 100644 +--- a/dracut.spec ++++ b/dracut.spec +@@ -94,7 +94,7 @@ Requires: kpartx + + %if 0%{?fedora} || 0%{?rhel} > 6 + Requires: util-linux >= 2.21 +-Requires: systemd >= 199 ++Requires: systemd >= 219 + Requires: procps-ng + Conflicts: grubby < 8.23 + %else diff --git a/SOURCES/0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch b/SOURCES/0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch new file mode 100644 index 0000000..0cac4d5 --- /dev/null +++ b/SOURCES/0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch @@ -0,0 +1,58 @@ +From 3bd3bbec319eccd28145f77e42b83b479286ff34 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:14:38 +0200 +Subject: [PATCH] iscsi/iscsiroot.sh: handle firmware in online queue + +otherwise it does not get called, if no netroot is set +--- + modules.d/95iscsi/iscsiroot.sh | 32 +++++++++++++++----------------- + 1 file changed, 15 insertions(+), 17 deletions(-) + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index b7370f6..7688b28 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -238,28 +238,26 @@ if [ "$netif" = "timeout" ] && all_ifaces_up; then + sleep 2 + fi + +-# loop over all netroot parameter +-netroot=$(getarg netroot) +-if [ $? -eq 0 ] && [ "$netroot" != "dhcp" ]; then +- for nroot in $(getargs netroot); do +- [ "${nroot%%:*}" = "iscsi" ] || continue +- nroot="${nroot##iscsi:}" +- if [ -n "$nroot" ]; then +- handle_netroot "$nroot" +- ret=$(($ret + $?)) +- fi +- done ++if [ "$netif" = "online" ]; then + if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then + handle_firmware +- ret=$(($ret + $?)) ++ ret=$? + fi + else +- if [ -n "$iroot" ]; then +- handle_netroot "$iroot" +- ret=$? ++ # loop over all netroot parameter ++ nroot=$(getarg netroot) ++ if [ $? -eq 0 ] && [ "$nroot" != "dhcp" ]; then ++ for nroot in $(getargs netroot); do ++ [ "${nroot%%:*}" = "iscsi" ] || continue ++ nroot="${nroot##iscsi:}" ++ if [ -n "$nroot" ]; then ++ handle_netroot "$nroot" ++ ret=$(($ret + $?)) ++ fi ++ done + else +- if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then +- handle_firmware ++ if [ -n "$iroot" ]; then ++ handle_netroot "$iroot" + ret=$? + fi + fi diff --git a/SOURCES/0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch b/SOURCES/0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch new file mode 100644 index 0000000..12851b5 --- /dev/null +++ b/SOURCES/0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch @@ -0,0 +1,45 @@ +From 197e4c90b95f2d9e57104d3b462918c335494697 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:15:59 +0200 +Subject: [PATCH] iscsi/parse-iscsiroot.sh: do not modify netroot + +--- + modules.d/95iscsi/parse-iscsiroot.sh | 17 +++++++++++++---- + 1 file changed, 13 insertions(+), 4 deletions(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 91cd463..e9444a5 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -16,10 +16,17 @@ + # This script is sourced, so root should be set. But let's be paranoid + [ -z "$root" ] && root=$(getarg root=) + if [ -z "$netroot" ]; then +- for netroot in $(getargs netroot=); do +- [ "${netroot%%:*}" = "iscsi" ] && break ++ for nroot in $(getargs netroot=); do ++ [ "${nroot%%:*}" = "iscsi" ] && break + done +- [ "${netroot%%:*}" = "iscsi" ] || unset netroot ++ if [ "${nroot%%:*}" = "iscsi" ]; then ++ netroot="$nroot" ++ else ++ for nroot in $(getargs netroot=); do ++ [ "${nroot%%:*}" = "dhcp" ] && break ++ done ++ netroot="$nroot" ++ fi + fi + [ -z "$iscsiroot" ] && iscsiroot=$(getarg iscsiroot=) + [ -z "$iscsi_firmware" ] && getargbool 0 rd.iscsi.firmware -y iscsi_firmware && iscsi_firmware="1" +@@ -65,7 +72,9 @@ fi + + # iscsi_firmware does not need argument checking + if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then +- [ -z "$netroot" ] && netroot=iscsi: ++ if [ "$root" != "dhcp" ] && [ "$netroot" != "dhcp" ]; then ++ [ -z "$netroot" ] && netroot=iscsi: ++ fi + modprobe -b -q iscsi_boot_sysfs 2>/dev/null + modprobe -b -q iscsi_ibft + # if no ip= is given, but firmware diff --git a/SOURCES/0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch b/SOURCES/0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch new file mode 100644 index 0000000..c1446b4 --- /dev/null +++ b/SOURCES/0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch @@ -0,0 +1,28 @@ +From 7f59cbd31817c81fa5aec9f86c33dfe1ce23ec6a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:16:29 +0200 +Subject: [PATCH] iscsi/parse-iscsiroot.sh: handle firmware in online queue + +--- + modules.d/95iscsi/parse-iscsiroot.sh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index e9444a5..13a9502 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -79,11 +79,11 @@ if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then + modprobe -b -q iscsi_ibft + # if no ip= is given, but firmware + echo "[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh +- initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT" +- initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'" ++ initqueue --unique --online /sbin/iscsiroot online "iscsi:" "$NEWROOT" ++ initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "iscsi:" "$NEWROOT" ++ initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'" + fi + +- + [ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return 1 + + initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT" diff --git a/SOURCES/0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch b/SOURCES/0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch new file mode 100644 index 0000000..00f6f85 --- /dev/null +++ b/SOURCES/0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch @@ -0,0 +1,34 @@ +From a6befb52eb5eeb87c0c41303fe08e50bd2fde0d3 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:16:46 +0200 +Subject: [PATCH] iscsi/parse-iscsiroot.sh: restart iscsid with try-restart + +--- + modules.d/95iscsi/parse-iscsiroot.sh | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 13a9502..6dd929f 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -105,7 +105,7 @@ if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; the + fi + fi + +-if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ]; then ++if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ] && ! [ -f /run/initiatorname.iscsi ] ; then + iscsi_initiator=$arg + echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi + ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi +@@ -123,10 +123,7 @@ if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] + mkdir -p /etc/iscsi + ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi + > /tmp/iscsi_set_initiator +- if systemctl --quiet is-active iscsid.service; then +- systemctl restart iscsid +- sleep 1 +- fi ++ systemctl try-restart iscsid && sleep 1 + fi + + diff --git a/SOURCES/0324-network-ifup.sh-save-return-value-of-ifup.patch b/SOURCES/0324-network-ifup.sh-save-return-value-of-ifup.patch new file mode 100644 index 0000000..fcc2203 --- /dev/null +++ b/SOURCES/0324-network-ifup.sh-save-return-value-of-ifup.patch @@ -0,0 +1,30 @@ +From b4006781e8a59dc69a0dd3836fce137f08b23001 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:20:30 +0200 +Subject: [PATCH] network/ifup.sh: save return value of ifup + +--- + modules.d/40network/ifup.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index e51b453..2562af6 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -396,6 +396,7 @@ for p in $(getargs ip=); do + do_static ;; + esac + done ++ ret=$? + + > /tmp/net.${netif}.up + +@@ -403,7 +404,7 @@ for p in $(getargs ip=); do + dhcp|on|any|dhcp6) + ;; + *) +- if [ $? -eq 0 ]; then ++ if [ $ret -eq 0 ]; then + setup_net $netif + source_hook initqueue/online $netif + if [ -z "$manualup" ]; then diff --git a/SOURCES/0325-network-also-mark-interfaces-up-with-their-MAC.patch b/SOURCES/0325-network-also-mark-interfaces-up-with-their-MAC.patch new file mode 100644 index 0000000..7a15b3e --- /dev/null +++ b/SOURCES/0325-network-also-mark-interfaces-up-with-their-MAC.patch @@ -0,0 +1,50 @@ +From 53537f4d23091457f644ab8b3edf09c2dca4351c Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:30:00 +0200 +Subject: [PATCH] network: also mark interfaces up with their MAC + +--- + modules.d/40network/dhclient-script.sh | 7 +++++++ + modules.d/40network/ifup.sh | 4 ++++ + 2 files changed, 11 insertions(+) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index 18b4100..761b0cd 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -139,6 +139,10 @@ case $reason in + + echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh + >/tmp/net.$netif.up ++ if [ -e /sys/class/net/${netif}/address ]; then ++ > /tmp/net.$(cat /sys/class/net/${netif}/address).up ++ fi ++ + ;; + + RENEW|REBIND) +@@ -171,6 +175,9 @@ case $reason in + + echo "[ -f /tmp/net.$netif.did-setup ]" > $hookdir/initqueue/finished/dhclient-$netif.sh + >/tmp/net.$netif.up ++ if [ -e /sys/class/net/${netif}/address ]; then ++ > /tmp/net.$(cat /sys/class/net/${netif}/address).up ++ fi + ;; + + RENEW6|REBIND6) +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 2562af6..d944126 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -400,6 +400,10 @@ for p in $(getargs ip=); do + + > /tmp/net.${netif}.up + ++ if [ -e /sys/class/net/${netif}/address ]; then ++ > /tmp/net.$(cat /sys/class/net/${netif}/address).up ++ fi ++ + case $autoconf in + dhcp|on|any|dhcp6) + ;; diff --git a/SOURCES/0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch b/SOURCES/0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch new file mode 100644 index 0000000..23e0a4a --- /dev/null +++ b/SOURCES/0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch @@ -0,0 +1,23 @@ +From 7c24815034241e490422691b5f18671c4b9812a9 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 11:37:16 +0200 +Subject: [PATCH] network/ifup.sh: only use dhcp on unknown interfaces for + ip=dhcp + +--- + modules.d/40network/ifup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index d944126..005c2cc 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -433,7 +433,7 @@ if [ ! -e /tmp/net.${netif}.up ]; then + if getargs 'ip=dhcp6'; then + load_ipv6 + do_dhcp -6 +- else ++ elif getargs 'ip=dhcp'; then + do_dhcp -4 + fi + fi diff --git a/SOURCES/0327-multipath-add-hostonly-multipath.conf.patch b/SOURCES/0327-multipath-add-hostonly-multipath.conf.patch new file mode 100644 index 0000000..b1a36ef --- /dev/null +++ b/SOURCES/0327-multipath-add-hostonly-multipath.conf.patch @@ -0,0 +1,83 @@ +From 3d1bd59eb09780fe156bb24fc6709ce844f68052 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 25 Aug 2015 13:49:10 +0200 +Subject: [PATCH] multipath: add hostonly multipath.conf + +Resolves: rhbz#994702 +--- + modules.d/90multipath/module-setup.sh | 43 ++++++++++++++++++++++++++++------- + 1 file changed, 35 insertions(+), 8 deletions(-) + +diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh +index acfc56f..4971d18 100755 +--- a/modules.d/90multipath/module-setup.sh ++++ b/modules.d/90multipath/module-setup.sh +@@ -2,18 +2,29 @@ + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + ++is_mpath() { ++ local _dev=$1 ++ [ -e /sys/dev/block/$_dev/dm/uuid ] || return 1 ++ [[ $(cat /sys/dev/block/$_dev/dm/uuid) =~ mpath- ]] && return 0 ++ return 1 ++} ++ ++majmin_to_mpath_dev() { ++ local _dev ++ for i in `ls -1 /dev/mapper/mpath*`; do ++ dev=$(get_maj_min $i) ++ if [ "$dev" = "$1" ]; then ++ echo $i ++ return ++ fi ++ done ++} ++ + check() { + local _rootdev + # if there's no multipath binary, no go. + require_binaries multipath || return 1 + +- is_mpath() { +- local _dev=$1 +- [ -e /sys/dev/block/$_dev/dm/uuid ] || return 1 +- [[ $(cat /sys/dev/block/$_dev/dm/uuid) =~ mpath- ]] && return 0 +- return 1 +- } +- + [[ $hostonly ]] || [[ $mount_needs ]] && { + for_each_host_dev_and_slaves is_mpath || return 255 + } +@@ -68,7 +79,18 @@ installkernel() { + } + + install() { +- local _f ++ local _f _allow ++ add_hostonly_mpath_conf() { ++ is_mpath $1 && { ++ local _dev ++ ++ _dev=$(majmin_to_mpath_dev $1) ++ [ -z "$_dev" ] && return ++ strstr "$_allow" "$_dev" && return ++ _allow="$_allow --allow $_dev" ++ } ++ } ++ + inst_multiple -o \ + dmsetup \ + kpartx \ +@@ -82,6 +104,11 @@ install() { + /etc/multipath.conf \ + /etc/multipath/* + ++ [[ $hostonly ]] && { ++ for_each_host_dev_and_slaves_all add_hostonly_mpath_conf ++ [ -n "$_allow" ] && mpathconf $_allow --outfile ${initdir}/etc/multipath.conf ++ } ++ + inst $(command -v partx) /sbin/partx + + inst_libdir_file "libmultipath*" "multipath/*" diff --git a/SOURCES/0328-cms-cmsifup.sh-do-not-use-ifup-m.patch b/SOURCES/0328-cms-cmsifup.sh-do-not-use-ifup-m.patch new file mode 100644 index 0000000..2f99ac4 --- /dev/null +++ b/SOURCES/0328-cms-cmsifup.sh-do-not-use-ifup-m.patch @@ -0,0 +1,20 @@ +From 0852c38b7a2b893e4f9e5894ba09eebc649f047f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 1 Sep 2015 17:21:53 +0200 +Subject: [PATCH] cms/cmsifup.sh: do not use ifup -m + +we don't want to bring the interface up several times +--- + modules.d/80cms/cmsifup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/80cms/cmsifup.sh b/modules.d/80cms/cmsifup.sh +index b361650..9ffe971 100755 +--- a/modules.d/80cms/cmsifup.sh ++++ b/modules.d/80cms/cmsifup.sh +@@ -37,4 +37,4 @@ fi + IFACES="$IFACES $DEVICE" + echo "$IFACES" >> /tmp/net.ifaces + +-ifup $DEVICE -m ++exec ifup "$DEVICE" diff --git a/SOURCES/0329-network-ifup-fix-warning-about-not-bringing-interfac.patch b/SOURCES/0329-network-ifup-fix-warning-about-not-bringing-interfac.patch new file mode 100644 index 0000000..440cdf7 --- /dev/null +++ b/SOURCES/0329-network-ifup-fix-warning-about-not-bringing-interfac.patch @@ -0,0 +1,22 @@ +From 70f3c07846e92d11484a1f7b5cb84aacc47489b4 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 1 Sep 2015 17:22:37 +0200 +Subject: [PATCH] network/ifup: fix warning about not bringing interface up + +--- + modules.d/40network/ifup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 005c2cc..db9fb08 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -156,7 +156,7 @@ do_static() { + strstr $ip '*:*:*' && load_ipv6 + + if ! linkup $netif; then +- warn "Could bring interface $netif up!" ++ warn "Could not bring interface $netif up!" + return 1 + fi + diff --git a/SOURCES/0330-network-net-lib.sh-fix-wait_for_if_up.patch b/SOURCES/0330-network-net-lib.sh-fix-wait_for_if_up.patch new file mode 100644 index 0000000..264bdd3 --- /dev/null +++ b/SOURCES/0330-network-net-lib.sh-fix-wait_for_if_up.patch @@ -0,0 +1,39 @@ +From d8572e0bf4d49a8d2ec71726d0fd38d1c73ca3f7 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 1 Sep 2015 17:22:56 +0200 +Subject: [PATCH] network/net-lib.sh: fix wait_for_if_up() + +wait for <*UP*> and not "state UP" + +state can be UNKNOWN +--- + modules.d/40network/net-lib.sh | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index c820356..6034a09 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -523,7 +523,21 @@ wait_for_if_up() { + + while [ $cnt -lt $timeout ]; do + li=$(ip -o link show up dev $1) +- [ -n "$li" ] && [ -z "${li##*state UP*}" ] && return 0 ++ if [ -n "$li" ]; then ++ case "$li" in ++ *\*) ++ return 0;; ++ *\<*,UP,*\>*) ++ return 0;; ++ esac ++ fi ++ if strstr "$li" "LOWER_UP" \ ++ && strstr "$li" "state UNKNOWN" \ ++ && ! strstr "$li" "DORMANT"; then ++ return 0 ++ fi + sleep 0.1 + cnt=$(($cnt+1)) + done diff --git a/SOURCES/0331-network-net-lib.sh-fix-IPv6-route-parsing.patch b/SOURCES/0331-network-net-lib.sh-fix-IPv6-route-parsing.patch new file mode 100644 index 0000000..dd3686f --- /dev/null +++ b/SOURCES/0331-network-net-lib.sh-fix-IPv6-route-parsing.patch @@ -0,0 +1,22 @@ +From a4c47ce0ddc7f7b46c2395709cf83f731f90685b Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 1 Sep 2015 17:25:34 +0200 +Subject: [PATCH] network/net-lib.sh: fix IPv6 route parsing + +--- + modules.d/40network/net-lib.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 6034a09..9d22ec1 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -121,7 +121,7 @@ setup_net() { + route_to_var "$_p" || continue + [ -n "$route_dev" ] && [ "$route_dev" != "$netif" ] && continue + ip route add "$route_mask" ${route_gw:+via "$route_gw"} ${route_dev:+dev "$route_dev"} +- if strstr ":" "$route_mask"; then ++ if strstr "$route_mask" ":"; then + printf -- "%s\n" "$route_mask ${route_gw:+via $route_gw} ${route_dev:+dev $route_dev}" \ + > /tmp/net.route6."$netif" + else diff --git a/SOURCES/0332-network-ifup-do-DHCP-for-BOOTDEV.patch b/SOURCES/0332-network-ifup-do-DHCP-for-BOOTDEV.patch new file mode 100644 index 0000000..b8c66e8 --- /dev/null +++ b/SOURCES/0332-network-ifup-do-DHCP-for-BOOTDEV.patch @@ -0,0 +1,39 @@ +From 7316d68353cfd6e08f007d10ea3e32fa4d083487 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 1 Sep 2015 19:05:37 +0200 +Subject: [PATCH] network/ifup: do DHCP for BOOTDEV + +--- + modules.d/40network/ifup.sh | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index db9fb08..0471c42 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -430,11 +430,20 @@ fi + + # no ip option directed at our interface? + if [ ! -e /tmp/net.${netif}.up ]; then +- if getargs 'ip=dhcp6'; then +- load_ipv6 +- do_dhcp -6 +- elif getargs 'ip=dhcp'; then +- do_dhcp -4 ++ if [ -e /tmp/net.bootdev ]; then ++ BOOTDEV=$(cat /tmp/net.bootdev) ++ if [ "$netif" = "$BOOTDEV" ] || [ "$BOOTDEV" = "$(cat /sys/class/net/${netif}/address)" ]; then ++ load_ipv6 ++ do_dhcp ++ fi ++ else ++ if getargs 'ip=dhcp6'; then ++ load_ipv6 ++ do_dhcp -6 ++ fi ++ if getargs 'ip=dhcp'; then ++ do_dhcp -4 ++ fi + fi + fi + diff --git a/SOURCES/0333-qemu-add-spapr-vscsi-kernel-module.patch b/SOURCES/0333-qemu-add-spapr-vscsi-kernel-module.patch new file mode 100644 index 0000000..79d4ce9 --- /dev/null +++ b/SOURCES/0333-qemu-add-spapr-vscsi-kernel-module.patch @@ -0,0 +1,20 @@ +From 2182945a9e02683fe04654150a55618d0943ae28 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 1 Sep 2015 20:27:13 +0200 +Subject: [PATCH] qemu: add spapr-vscsi kernel module + +--- + modules.d/90qemu/module-setup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh +index 6779642..64eac9e 100755 +--- a/modules.d/90qemu/module-setup.sh ++++ b/modules.d/90qemu/module-setup.sh +@@ -25,5 +25,5 @@ installkernel() { + hostonly='' instmods \ + ata_piix ata_generic pata_acpi cdrom sr_mod ahci \ + virtio_blk virtio virtio_ring virtio_pci \ +- virtio_scsi virtio_console ++ virtio_scsi virtio_console spapr-vscsi + } diff --git a/SOURCES/0334-livenet-livenetroot.sh-fixed-error-condition.patch b/SOURCES/0334-livenet-livenetroot.sh-fixed-error-condition.patch new file mode 100644 index 0000000..42ef646 --- /dev/null +++ b/SOURCES/0334-livenet-livenetroot.sh-fixed-error-condition.patch @@ -0,0 +1,23 @@ +From b813b1b3064d4951c5403bb0f96480de9a355d8e Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 2 Sep 2015 09:47:35 +0200 +Subject: [PATCH] livenet/livenetroot.sh: fixed error condition + +copy&paste error +--- + modules.d/90livenet/livenetroot.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/90livenet/livenetroot.sh b/modules.d/90livenet/livenetroot.sh +index 2e36ee9..b7592bc 100755 +--- a/modules.d/90livenet/livenetroot.sh ++++ b/modules.d/90livenet/livenetroot.sh +@@ -15,7 +15,7 @@ liveurl="${netroot#livenet:}" + info "fetching $liveurl" + imgfile=$(fetch_url "$liveurl") + +-if [ $? = 0 ]; then ++if [ $? != 0 ]; then + warn "failed to download live image: error $?" + exit 1 + fi diff --git a/SOURCES/0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch b/SOURCES/0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch new file mode 100644 index 0000000..91c913a --- /dev/null +++ b/SOURCES/0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch @@ -0,0 +1,35 @@ +From eb87dc91d078ee942ef9c8bbc8e82f4ee4ccf0c6 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 3 Sep 2015 12:41:06 +0200 +Subject: [PATCH] iscsi/parse-iscsiroot.sh: only set initiator-name, if not + empty + +--- + modules.d/95iscsi/parse-iscsiroot.sh | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 6dd929f..6aa14f5 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -118,12 +118,14 @@ fi + # If not given on the cmdline and initiator-name available via iBFT + if [ -z $iscsi_initiator ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then + iscsi_initiator=$(while read line || [ -n "$line" ]; do echo $line;done < /sys/firmware/ibft/initiator/initiator-name) +- echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi +- rm -f /etc/iscsi/initiatorname.iscsi +- mkdir -p /etc/iscsi +- ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi +- > /tmp/iscsi_set_initiator +- systemctl try-restart iscsid && sleep 1 ++ if [ -n "$iscsi_initiator" ]; then ++ echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi ++ rm -f /etc/iscsi/initiatorname.iscsi ++ mkdir -p /etc/iscsi ++ ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi ++ > /tmp/iscsi_set_initiator ++ systemctl try-restart iscsid && sleep 1 ++ fi + fi + + diff --git a/SOURCES/0336-network-move-ip-ibft-handling-to-network-module.patch b/SOURCES/0336-network-move-ip-ibft-handling-to-network-module.patch new file mode 100644 index 0000000..d8bd0ee --- /dev/null +++ b/SOURCES/0336-network-move-ip-ibft-handling-to-network-module.patch @@ -0,0 +1,48 @@ +From b334c83e4abdc1dd87276fa7de4617cd349a5a4f Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 3 Sep 2015 12:41:44 +0200 +Subject: [PATCH] network: move "ip=ibft" handling to network module + +--- + modules.d/40network/module-setup.sh | 1 + + modules.d/40network/parse-ibft.sh | 2 ++ + modules.d/95iscsi/parse-iscsiroot.sh | 2 +- + 3 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh +index 3134b5f..6cbbe8f 100755 +--- a/modules.d/40network/module-setup.sh ++++ b/modules.d/40network/module-setup.sh +@@ -64,6 +64,7 @@ installkernel() { + =drivers/net/team \ + =drivers/net/ethernet \ + ecb arc4 bridge stp llc ipv6 bonding 8021q af_packet virtio_net ++ hostonly="" instmods iscsi_ibft crc32c iscsi_boot_sysfs + } + + install() { +diff --git a/modules.d/40network/parse-ibft.sh b/modules.d/40network/parse-ibft.sh +index 643313d..6f7f4e9 100755 +--- a/modules.d/40network/parse-ibft.sh ++++ b/modules.d/40network/parse-ibft.sh +@@ -6,5 +6,7 @@ command -v getarg >/dev/null || . /lib/dracut-lib.sh + command -v ibft_to_cmdline >/dev/null || . /lib/net-lib.sh + + if getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then ++ modprobe -b -q iscsi_boot_sysfs 2>/dev/null ++ modprobe -b -q iscsi_ibft + ibft_to_cmdline + fi +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 6aa14f5..9546f12 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -71,7 +71,7 @@ if [ -n "$iscsiroot" ] ; then + fi + + # iscsi_firmware does not need argument checking +-if [ -n "$iscsi_firmware" ] || getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then ++if [ -n "$iscsi_firmware" ]; then + if [ "$root" != "dhcp" ] && [ "$netroot" != "dhcp" ]; then + [ -z "$netroot" ] && netroot=iscsi: + fi diff --git a/SOURCES/0337-dracut.usage.asc-update-man-page.patch b/SOURCES/0337-dracut.usage.asc-update-man-page.patch new file mode 100644 index 0000000..ffd3d02 --- /dev/null +++ b/SOURCES/0337-dracut.usage.asc-update-man-page.patch @@ -0,0 +1,137 @@ +From c850879b862058a644a05f8fe2fc2206e0e317e8 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 3 Sep 2015 16:25:23 +0200 +Subject: [PATCH] dracut.usage.asc: update man page + +- clarify grub2 config for debugging +- clarify hostonly mode +--- + dracut.usage.asc | 74 ++++++++++++++++++-------------------------------------- + 1 file changed, 23 insertions(+), 51 deletions(-) + +diff --git a/dracut.usage.asc b/dracut.usage.asc +index 15dc244..45cbf12 100644 +--- a/dracut.usage.asc ++++ b/dracut.usage.asc +@@ -37,10 +37,14 @@ the --hostonly or -H option. Using this option, the resulting image will + contain only those dracut modules, kernel modules and filesystems, which are + needed to boot this specific machine. This has the drawback, that you can't put + the disk on another controller or machine, and that you can't switch to another +-root filesystem, without recreating the initramfs image. The usage of the +---hostonly option is only for experts and you will have to keep the broken +-pieces. At least keep a copy of a general purpose image (and corresponding +-kernel) as a fallback to rescue your system. ++root filesystem, without recreating the initramfs image. ++ ++[NOTE] ++=============================== ++On RHEL-7 the hostonly mode is the default mode. Generic "non-hostonly" images ++are created, if the dracut-config-generic rpm is installed. The rescue kernel ++entry in the bootloader menu is also a generic image. ++=============================== + + === Inspecting the Contents + To see the contents of the image created by dracut, you can use the lsinitrd +@@ -99,8 +103,9 @@ raid with encryption and LVM on top), as long as you specify the correct + filesystem LABEL or UUID on the kernel command line for your root device, dracut + will find it and boot from it. + +-The kernel command line usually can be configured in _/boot/grub2/grub.cfg_, if +-grub is your bootloader and it also can be edited in the real boot process in ++The kernel command line usually can be configured in _/boot/grub2/grub.cfg_ ++(or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems), if ++grub2 is your bootloader and it also can be edited in the real boot process in + the grub menu. + + The kernel command line can also be provided by the dhcp server with the +@@ -325,7 +330,8 @@ stick and mount that. Then you can store the output for later inspection. + In all cases, the following should be mentioned and attached to your bug report: + + * The exact kernel command-line used. Typically from the bootloader +-configuration file (e.g. _/boot/grub2/grub.cfg_) or from _/proc/cmdline_. ++configuration file (e.g. _/boot/grub2/grub.cfg_ (or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems)) ++or from _/proc/cmdline_. + * A copy of your disk partition information from _/etc/fstab_, which might be + obtained booting an old working initramfs or a rescue medium. + * Turn on dracut debugging (see _the 'debugging dracut' section_), and attach +@@ -359,49 +365,17 @@ Successfully debugging dracut will require some form of console + logging during the system boot. This section documents configuring a + serial console connection to record boot messages. + +-. First, enable serial console output for both the kernel and the bootloader. +-. Open the file _/boot/grub2/grub.cfg_ for editing. Below the line ''timeout=5'', add +-the following: +-+ +----- +-serial --unit=0 --speed=9600 +-terminal --timeout=5 serial console +----- +-+ +-. Also in _/boot/grub2/grub.cfg_, add the following boot arguemnts to the ''kernel'' ++. In _/boot/grub2/grub.cfg_ (or _/boot/efi/EFI/redhat/grub.cfg_ for EFI systems), ++add the following boot arguments to the ''linux16'' + line: + + + ---- + console=tty0 console=ttyS0,9600 + ---- + + +-. When finished, the _/boot/grub2/grub.cfg_ file should look similar to the example +-below. +-+ +----- +-default=0 +-timeout=5 +-serial --unit=0 --speed=9600 +-terminal --timeout=5 serial console +-title Fedora (2.6.29.5-191.fc11.x86_64) +- root (hd0,0) +- kernel /vmlinuz-2.6.29.5-191.fc11.x86_64 ro root=/dev/mapper/vg_uc1-lv_root console=tty0 console=ttyS0,9600 +- initrd /dracut-2.6.29.5-191.fc11.x86_64.img +----- +-+ + . More detailed information on how to configure the kernel for console output + can be found at + http://www.faqs.org/docs/Linux-HOWTO/Remote-Serial-Console-HOWTO.html#CONFIGURE-KERNEL. +-. Redirecting non-interactive output +-+ +--- +-NOTE: You can redirect all non-interactive output to _/dev/kmsg_ and the kernel +-will put it out on the console when it reaches the kernel buffer by doing +- +----- +-# exec >/dev/kmsg 2>&1 +Date: Tue, 8 Sep 2015 11:44:13 +0200 +Subject: [PATCH] network/dhclient-script.sh: fix RENEW + +Remove check, if interface is already up. It is for RENEW. + +new_prefix is apparently new_subnet_mask +--- + modules.d/40network/dhclient-script.sh | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/modules.d/40network/dhclient-script.sh b/modules.d/40network/dhclient-script.sh +index 761b0cd..6d4b9dd 100755 +--- a/modules.d/40network/dhclient-script.sh ++++ b/modules.d/40network/dhclient-script.sh +@@ -10,9 +10,6 @@ type ip_to_var >/dev/null 2>&1 || . /lib/net-lib.sh + # We already need a set netif here + netif=$interface + +-# Huh? Interface configured? +-[ -f "/tmp/net.$netif.up" ] && exit 0 +- + setup_interface() { + ip=$new_ip_address + mtu=$new_interface_mtu +@@ -151,7 +148,7 @@ case $reason in + [ -n "$new_max_life" ] && lease_time=$new_max_life + preferred_lft=$lease_time + [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life +- ip -4 addr change ${new_ip_address}/${new_prefix} broadcast ${new_broadcast_address} dev ${interface} \ ++ ip -4 addr change ${new_ip_address}/${new_subnet_mask} broadcast ${new_broadcast_address} dev ${interface} \ + ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \ + >/dev/null 2>&1 + ;; diff --git a/SOURCES/0339-network-add-all_ifaces_setup.patch b/SOURCES/0339-network-add-all_ifaces_setup.patch new file mode 100644 index 0000000..2c5a920 --- /dev/null +++ b/SOURCES/0339-network-add-all_ifaces_setup.patch @@ -0,0 +1,32 @@ +From 63e75dc4cdb14e392e38a8973126c9a29b266411 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 10 Sep 2015 13:20:18 +0200 +Subject: [PATCH] network: add all_ifaces_setup() + +all_ifaces_up() is true, if all interfaces are up. + +all_ifaces_setup() is true, if all interfaces are up and the gateways +and nameserver are setup. +--- + modules.d/40network/net-lib.sh | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 9d22ec1..60d3579 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -74,6 +74,14 @@ all_ifaces_up() { + done + } + ++all_ifaces_setup() { ++ local iface="" IFACES="" ++ [ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces ++ for iface in $IFACES; do ++ [ -e /tmp/net.$iface.did-setup ] || return 1 ++ done ++} ++ + get_netroot_ip() { + local prefix="" server="" rest="" + splitsep "$1" ":" prefix server rest diff --git a/SOURCES/0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch b/SOURCES/0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch new file mode 100644 index 0000000..55263ad --- /dev/null +++ b/SOURCES/0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch @@ -0,0 +1,36 @@ +From 7cddfbbadbc40a4b6d331be25a3c38ad3a52239b Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 10 Sep 2015 13:21:53 +0200 +Subject: [PATCH] iscsi/iscsiroot.sh: use all_ifaces_setup() + +we want the route and gateway setup +--- + modules.d/95iscsi/iscsiroot.sh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index 7688b28..424d216 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -108,7 +108,7 @@ handle_netroot() + parse_iscsi_root "$1" || return 1 + + # Bail out early, if there is no route to the destination +- if is_ip "$iscsi_target_ip" && [ "$netif" != "timeout" ] && ! all_ifaces_up && getargbool 1 rd.iscsi.testroute; then ++ if is_ip "$iscsi_target_ip" && [ "$netif" != "timeout" ] && ! all_ifaces_setup && getargbool 1 rd.iscsi.testroute; then + ip route get "$iscsi_target_ip" >/dev/null 2>&1 || return 0 + fi + +@@ -227,10 +227,10 @@ handle_netroot() + ret=0 + + if [ "$netif" != "timeout" ] && getargbool 1 rd.iscsi.waitnet; then +- all_ifaces_up || exit 0 ++ all_ifaces_setup || exit 0 + fi + +-if [ "$netif" = "timeout" ] && all_ifaces_up; then ++if [ "$netif" = "timeout" ] && all_ifaces_setup; then + # s.th. went wrong and the timeout script hits + # restart + systemctl restart iscsid diff --git a/SOURCES/0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch b/SOURCES/0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch new file mode 100644 index 0000000..3ecfe72 --- /dev/null +++ b/SOURCES/0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch @@ -0,0 +1,59 @@ +From 17cee31b115a146bca5519b6ac4b422080d764c7 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 10 Sep 2015 13:23:32 +0200 +Subject: [PATCH] network/netroot.sh: better handling of $netroot and dhcp + +if $netroot is emtpy, get it from cmdline + +check cmdline directly for root=dhcp(6) and netroot=dhcp(6) +--- + modules.d/40network/netroot.sh | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh +index 8f6945f..3aa5a0d 100755 +--- a/modules.d/40network/netroot.sh ++++ b/modules.d/40network/netroot.sh +@@ -14,6 +14,11 @@ command -v setup_net >/dev/null || . /lib/net-lib.sh + # no sense in doing something if no (net)root info is available + # or root is already there + [ -d $NEWROOT/proc ] && exit 0 ++ ++if [ -z "$netroot" ]; then ++ netroot=$(getarg netroot=) ++fi ++ + [ -z "$netroot" ] && exit 1 + + # Set or override primary interface +@@ -35,7 +40,7 @@ esac + # Figure out the handler for root=dhcp by recalling all netroot cmdline + # handlers when this is not called from manually network bringing up. + if [ -z "$2" ]; then +- if [ "$netroot" = "dhcp" ] || [ "$netroot" = "dhcp6" ] ; then ++ if getarg "root=dhcp" || getarg "netroot=dhcp" || getarg "root=dhcp6" || getarg "netroot=dhcp6"; then + # Load dhcp options + [ -e /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts + +@@ -47,6 +52,8 @@ if [ -z "$2" ]; then + exit 1 + fi + ++ rm -f -- $hookdir/initqueue/finished/dhcp.sh ++ + # Set netroot to new_root_path, so cmdline parsers don't call + netroot=$new_root_path + +@@ -76,9 +83,7 @@ source_hook netroot $netif + + # Run the handler; don't store the root, it may change from device to device + # XXX other variables to export? +-if $handler $netif $netroot $NEWROOT; then +- rm -f -- $hookdir/initqueue/finished/dhcp.sh +- # Network rootfs mount successful - save interface info for ifcfg etc. +- save_netinfo $netif +-fi ++[ -n "$handler" ] && "$handler" "$netif" "$netroot" "$NEWROOT" ++save_netinfo $netif ++ + exit 0 diff --git a/SOURCES/0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch b/SOURCES/0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch new file mode 100644 index 0000000..5daae9f --- /dev/null +++ b/SOURCES/0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch @@ -0,0 +1,81 @@ +From fd3eddf06990a617a2f90b0a699947ab3faf2cc2 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 10 Sep 2015 13:25:13 +0200 +Subject: [PATCH] iscsi/iscsiroot.sh: handle iscsi_firmware in online and + timeout queue + +The return code of iscsi_firmware is broken, so set the marker +unconditionally. +--- + modules.d/95iscsi/iscsiroot.sh | 43 +++++++++++++++++++----------------------- + 1 file changed, 19 insertions(+), 24 deletions(-) + +diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh +index 424d216..ea1bead 100755 +--- a/modules.d/95iscsi/iscsiroot.sh ++++ b/modules.d/95iscsi/iscsiroot.sh +@@ -45,29 +45,23 @@ fi + + handle_firmware() + { +- if ! [ -e /tmp/iscsistarted-firmware ]; then +- if ! iscsistart -f; then +- warn "iscistart: Could not get list of targets from firmware." +- return 1 +- fi ++ if ! iscsistart -f; then ++ warn "iscistart: Could not get list of targets from firmware." ++ return 1 ++ fi + +- for p in $(getargs rd.iscsi.param -d iscsi_param); do +- iscsi_param="$iscsi_param --param $p" +- done ++ for p in $(getargs rd.iscsi.param -d iscsi_param); do ++ iscsi_param="$iscsi_param --param $p" ++ done + +- if ! iscsistart -b $iscsi_param; then +- warn "'iscsistart -b $iscsi_param' failed" +- fi ++ if ! iscsistart -b $iscsi_param; then ++ warn "'iscsistart -b $iscsi_param' failed with return code $?" ++ fi + +- if [ -d /sys/class/iscsi_session ]; then +- echo 'started' > "/tmp/iscsistarted-iscsi:" +- echo 'started' > "/tmp/iscsistarted-firmware" +- else +- return 1 +- fi ++ echo 'started' > "/tmp/iscsistarted-iscsi:" ++ echo 'started' > "/tmp/iscsistarted-firmware" + +- need_shutdown +- fi ++ need_shutdown + return 0 + } + +@@ -238,15 +232,16 @@ if [ "$netif" = "timeout" ] && all_ifaces_setup; then + sleep 2 + fi + +-if [ "$netif" = "online" ]; then +- if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then ++if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then ++ if [ "$netif" = "timeout" ] || [ "$netif" = "online" ]; then + handle_firmware + ret=$? + fi +-else ++fi ++ ++if ! [ "$netif" = "online" ]; then + # loop over all netroot parameter +- nroot=$(getarg netroot) +- if [ $? -eq 0 ] && [ "$nroot" != "dhcp" ]; then ++ if nroot=$(getarg netroot) && [ "$nroot" != "dhcp" ]; then + for nroot in $(getargs netroot); do + [ "${nroot%%:*}" = "iscsi" ] || continue + nroot="${nroot##iscsi:}" diff --git a/SOURCES/0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch b/SOURCES/0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch new file mode 100644 index 0000000..6ffb31d --- /dev/null +++ b/SOURCES/0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch @@ -0,0 +1,27 @@ +From 7c0b1d864dda88befa458b34d9408605883e2c74 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 14 Aug 2014 12:56:53 +0200 +Subject: [PATCH] i18n: check for $i18n_install_all == "yes" rather than being + set + +i18n_install_all="no" does not have the expected effect without this +patch + +(cherry picked from commit ae488efa5e6103ffc1be8b8782f8a1c7a5aa90b4) +--- + modules.d/10i18n/module-setup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh +index 2c0a275..4fd8116 100755 +--- a/modules.d/10i18n/module-setup.sh ++++ b/modules.d/10i18n/module-setup.sh +@@ -241,7 +241,7 @@ install() { + if checks; then + install_base + +- if [[ ${hostonly} ]] && ! [[ ${i18n_install_all} ]]; then ++ if [[ ${hostonly} ]] && ! [[ ${i18n_install_all} == "yes" ]]; then + install_local_i18n || install_all_kbd + else + install_all_kbd diff --git a/SOURCES/0344-dracut.sh-add-command-line-option-for-install_i18_al.patch b/SOURCES/0344-dracut.sh-add-command-line-option-for-install_i18_al.patch new file mode 100644 index 0000000..a775ecd --- /dev/null +++ b/SOURCES/0344-dracut.sh-add-command-line-option-for-install_i18_al.patch @@ -0,0 +1,43 @@ +From 34b551a1c4d4513189807ee2a639c9214d887ddb Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 15 Sep 2015 16:04:09 +0200 +Subject: [PATCH] dracut.sh: add command line option for install_i18_all + +--no-hostonly-i18n -> install_i18n_all=yes +--hostonly-i18n -> install_i18n_all=no +--- + dracut.sh | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/dracut.sh b/dracut.sh +index 65824ec..d5f864f 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -369,6 +369,8 @@ rearrange_params() + --long noimageifnotneeded \ + --long early-microcode \ + --long no-early-microcode \ ++ --long no-hostonly-i18n \ ++ --long hostonly-i18n \ + -- "$@") + + if (( $? != 0 )); then +@@ -528,6 +530,10 @@ while :; do + hostonly_l="no" ;; + --hostonly-cmdline) + hostonly_cmdline_l="yes" ;; ++ --hostonly-i18n) ++ i18n_install_all_l="no" ;; ++ --no-hostonly-i18n) ++ i18n_install_all_l="yes" ;; + --no-hostonly-cmdline) + hostonly_cmdline_l="no" ;; + --persistent-policy) +@@ -769,6 +775,7 @@ stdloglvl=$((stdloglvl + verbosity_mod_l)) + [[ $prefix = "/" ]] && unset prefix + [[ $hostonly_l ]] && hostonly=$hostonly_l + [[ $hostonly_cmdline_l ]] && hostonly_cmdline=$hostonly_cmdline_l ++[[ $i18n_install_all_l ]] && i18n_install_all=$i18n_install_all_l + [[ $persistent_policy_l ]] && persistent_policy=$persistent_policy_l + [[ $use_fstab_l ]] && use_fstab=$use_fstab_l + [[ $mdadmconf_l ]] && mdadmconf=$mdadmconf_l diff --git a/SOURCES/0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch b/SOURCES/0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch new file mode 100644 index 0000000..3bb7823 --- /dev/null +++ b/SOURCES/0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch @@ -0,0 +1,25 @@ +From 13b5c1d09e0e242f1817057501292fe9d7e9ad92 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 15 Sep 2015 16:08:25 +0200 +Subject: [PATCH] dracut.sh: do not create microcode, if no firmware is + available + +--- + dracut.sh | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/dracut.sh b/dracut.sh +index d5f864f..980c7ff 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1493,6 +1493,10 @@ if [[ $early_microcode = yes ]]; then + break; + fi + fi ++ for i in $_fwdir/$_fw/$_src; do ++ [ -e $i ] && break ++ break 2 ++ done + cat $_fwdir/$_fw/$_src > $_dest_dir/${ucode_dest[$idx]} + create_early_cpio="yes" + fi diff --git a/SOURCES/0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch b/SOURCES/0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch new file mode 100644 index 0000000..1deee7b --- /dev/null +++ b/SOURCES/0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch @@ -0,0 +1,31 @@ +From bcc2132dab5bf276a0bd4dce606f4ef534b27800 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 17 Sep 2015 12:32:07 +0200 +Subject: [PATCH] scsi/parse-iscsiroot.sh: call modprobe with "-b" + +honor, if a module is blacklisted +--- + modules.d/95iscsi/parse-iscsiroot.sh | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index 9546f12..f19147f 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -88,11 +88,11 @@ fi + + initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT" + +-modprobe -q qla4xxx +-modprobe -q cxgb3i +-modprobe -q cxgb4i +-modprobe -q bnx2i +-modprobe -q be2iscsi ++modprobe -b -q qla4xxx ++modprobe -b -q cxgb3i ++modprobe -b -q cxgb4i ++modprobe -b -q bnx2i ++modprobe -b -q be2iscsi + + # ISCSI actually supported? + if ! [ -e /sys/module/iscsi_tcp ]; then diff --git a/SOURCES/0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch b/SOURCES/0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch new file mode 100644 index 0000000..896e87f --- /dev/null +++ b/SOURCES/0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch @@ -0,0 +1,26 @@ +From 7fd112f20e63def6d274ab445b5eb82138348901 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 17 Sep 2015 15:41:12 +0200 +Subject: [PATCH] iscsi/parse-iscsiroot.sh: correct handling if netroot isn't + set + +corrects bfe65f913a4bc6bc5fdb7aa75234c229a2ceef8f +--- + modules.d/95iscsi/parse-iscsiroot.sh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh +index f19147f..3d74ff2 100755 +--- a/modules.d/95iscsi/parse-iscsiroot.sh ++++ b/modules.d/95iscsi/parse-iscsiroot.sh +@@ -84,7 +84,9 @@ if [ -n "$iscsi_firmware" ]; then + initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'" + fi + +-[ -z "$netroot" ] || [ "${netroot%%:*}" = "iscsi" ] || return 1 ++if [ -z "$netroot" ] || ! [ "${netroot%%:*}" = "iscsi" ]; then ++ return 1 ++fi + + initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "$netroot" "$NEWROOT" + diff --git a/SOURCES/0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch b/SOURCES/0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch new file mode 100644 index 0000000..da5d948 --- /dev/null +++ b/SOURCES/0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch @@ -0,0 +1,31 @@ +From 327d765512135721a323822a8b10ac1539bd20c6 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 17 Sep 2015 20:03:54 +0200 +Subject: [PATCH] dracut.sh: no microcode, if get_ucode_file returns empty file + +check, if get_ucode_file() returned an empty string. +--- + dracut.sh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/dracut.sh b/dracut.sh +index 980c7ff..4e4f222 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1489,12 +1489,12 @@ if [[ $early_microcode = yes ]]; then + dinfo "*** Constructing ${ucode_dest[$idx]} ****" + if [[ $hostonly ]]; then + _src=$(get_ucode_file) +- if ! [[ -r $_fwdir/$_fw/$_src ]];then +- break; +- fi ++ [[ $src ]] || break ++ [[ -r $_fwdir/$_fw/$_src ]] || break + fi ++ + for i in $_fwdir/$_fw/$_src; do +- [ -e $i ] && break ++ [ -e "$i" ] && break + break 2 + done + cat $_fwdir/$_fw/$_src > $_dest_dir/${ucode_dest[$idx]} diff --git a/SOURCES/0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch b/SOURCES/0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch new file mode 100644 index 0000000..e3c1d19 --- /dev/null +++ b/SOURCES/0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch @@ -0,0 +1,51 @@ +From f059985b14f80a41f3b8103b67cb8fae0d3fc2fc Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 25 Sep 2015 10:14:33 -0400 +Subject: [PATCH] network:wait_for_ifup() handle "NO-CARRIER" output + +if "NO-CARRIER" is one of the flags, we surely have no link yet. +--- + modules.d/40network/net-lib.sh | 30 ++++++++++++++++-------------- + 1 file changed, 16 insertions(+), 14 deletions(-) + +diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh +index 60d3579..995d32f 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -531,20 +531,22 @@ wait_for_if_up() { + + while [ $cnt -lt $timeout ]; do + li=$(ip -o link show up dev $1) +- if [ -n "$li" ]; then +- case "$li" in +- *\*) +- return 0;; +- *\<*,UP,*\>*) +- return 0;; +- esac +- fi +- if strstr "$li" "LOWER_UP" \ +- && strstr "$li" "state UNKNOWN" \ +- && ! strstr "$li" "DORMANT"; then +- return 0 ++ if ! strstr "$li" "NO-CARRIER"; then ++ if [ -n "$li" ]; then ++ case "$li" in ++ *\*) ++ return 0;; ++ *\<*,UP,*\>*) ++ return 0;; ++ esac ++ fi ++ if strstr "$li" "LOWER_UP" \ ++ && strstr "$li" "state UNKNOWN" \ ++ && ! strstr "$li" "DORMANT"; then ++ return 0 ++ fi + fi + sleep 0.1 + cnt=$(($cnt+1)) diff --git a/SOURCES/0350-base-dracut-lib.sh-info-be-more-quiet.patch b/SOURCES/0350-base-dracut-lib.sh-info-be-more-quiet.patch new file mode 100644 index 0000000..fd43e1d --- /dev/null +++ b/SOURCES/0350-base-dracut-lib.sh-info-be-more-quiet.patch @@ -0,0 +1,39 @@ +From fe74a7069bb24ecfb8d2d948955236ff31ae7571 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 25 Sep 2015 11:07:07 -0400 +Subject: [PATCH] base/dracut-lib.sh:info() be more quiet + +--- + modules.d/99base/dracut-lib.sh | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index b6593a0..50bcf84 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -61,7 +61,9 @@ else + } + + info() { +- echo "$*" >&2 ++ check_quiet ++ [ "$DRACUT_QUIET" != "yes" ] && \ ++ echo "$*" >&2 + } + + fi +@@ -461,9 +463,11 @@ check_quiet() { + DRACUT_QUIET="yes" + getargbool 0 rd.info -d -y rdinfo && DRACUT_QUIET="no" + getargbool 0 rd.debug -d -y rdinitdebug && DRACUT_QUIET="no" +- getarg quiet || DRACUT_QUIET="yes" +- a=$(getarg loglevel=) +- [ -n "$a" ] && [ $a -ge 28 ] && DRACUT_QUIET="yes" ++ if [ -z "$DRACUT_SYSTEMD" ]; then ++ getarg quiet || DRACUT_QUIET="yes" ++ a=$(getarg loglevel=) ++ [ -n "$a" ] && [ $a -ge 28 ] && DRACUT_QUIET="yes" ++ fi + export DRACUT_QUIET + fi + } diff --git a/SOURCES/0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch b/SOURCES/0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch new file mode 100644 index 0000000..e260a00 --- /dev/null +++ b/SOURCES/0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch @@ -0,0 +1,43 @@ +From 5263556ff3314d61e7e9da685bbd59bebc79efe1 Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Tue, 23 Dec 2014 22:03:10 +0100 +Subject: [PATCH] dracut-functions.sh: avoid tokenizing ldconfig output with + 'read' + +The space does not separate the elements reliably, spaces can be +embedded in parenthesized expressions too: + + libgmpxx.so.4 (libc6, hwcap: 0x0000000004000000) => /lib/sse2/libgmpxx.so.4 + libgmp.so.10 (libc6, hwcap: 0x0000000004000000) => /lib/sse2/libgmp.so.10 + +This results in dracut creating '0x0000000004000000' and '=>' +directories in the initramfs image. + +(cherry picked from commit c59779cf9337bc0fc48c7a4d8437f7253f6822c3) +--- + dracut-functions.sh | 12 +----------- + 1 file changed, 1 insertion(+), 11 deletions(-) + +diff --git a/dracut-functions.sh b/dracut-functions.sh +index 585b683..9218779 100755 +--- a/dracut-functions.sh ++++ b/dracut-functions.sh +@@ -97,17 +97,7 @@ fi + + ldconfig_paths() + { +- local a i +- declare -A a +- for i in $( +- ldconfig -pN 2>/dev/null | grep -F '=>' | grep -E -v '/(lib|lib64|usr/lib|usr/lib64)/[^/]*$' | while read a b c d; do +- d=${d%/*} +- printf "%s\n" "$d"; +- done +- ); do +- a["$i"]=1; +- done; +- printf "%s\n" ${!a[@]} ++ ldconfig -pN 2>/dev/null | grep -E -v '/(lib|lib64|usr/lib|usr/lib64)/[^/]*$' | sed -n 's,.* => \(.*\)/.*,\1,p' | sort | uniq + } + + # Detect lib paths diff --git a/SOURCES/0352-dracut.sh-fixed-typo-in-microcode-generation.patch b/SOURCES/0352-dracut.sh-fixed-typo-in-microcode-generation.patch new file mode 100644 index 0000000..abe8c32 --- /dev/null +++ b/SOURCES/0352-dracut.sh-fixed-typo-in-microcode-generation.patch @@ -0,0 +1,22 @@ +From a594b4e357bc63dd22ae04346dbca648e0d62744 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 25 Sep 2015 14:10:20 -0400 +Subject: [PATCH] dracut.sh: fixed typo in microcode generation + +--- + dracut.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dracut.sh b/dracut.sh +index 4e4f222..5b72221 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1489,7 +1489,7 @@ if [[ $early_microcode = yes ]]; then + dinfo "*** Constructing ${ucode_dest[$idx]} ****" + if [[ $hostonly ]]; then + _src=$(get_ucode_file) +- [[ $src ]] || break ++ [[ $_src ]] || break + [[ -r $_fwdir/$_fw/$_src ]] || break + fi + diff --git a/SOURCES/0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch b/SOURCES/0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch new file mode 100644 index 0000000..27d527c --- /dev/null +++ b/SOURCES/0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch @@ -0,0 +1,40 @@ +From 5f24e4340171913248a6965ff2153e2517cb892a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 31 Jul 2015 09:05:51 +0200 +Subject: [PATCH] 90qemu: fixed systemd-detect-virt output parsing + +redirecting systemd-detect-virt to /dev/null doesn't help with parsing +the output :-/ + +Also, add "Red Hat" as a vendor. + +(cherry picked from commit 4135eea634b20c7f7285d134bd6dfe6b799fe226) +--- + modules.d/90qemu/module-setup.sh | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh +index 64eac9e..46b7ae2 100755 +--- a/modules.d/90qemu/module-setup.sh ++++ b/modules.d/90qemu/module-setup.sh +@@ -4,7 +4,7 @@ + + check() { + if type -P systemd-detect-virt >/dev/null 2>&1; then +- vm=$(systemd-detect-virt --vm >/dev/null 2>&1) ++ vm=$(systemd-detect-virt --vm 2>/dev/null) + (($? != 0)) && return 255 + [[ $vm = "qemu" ]] && return 0 + [[ $vm = "kvm" ]] && return 0 +@@ -14,8 +14,9 @@ check() { + for i in /sys/class/dmi/id/*_vendor; do + [[ -f $i ]] || continue + read vendor < $i +- [[ "$vendor" == "QEMU" ]] && return 0 +- [[ "$vendor" == "Bochs" ]] && return 0 ++ [[ "$vendor" == "QEMU" ]] && return 0 ++ [[ "$vendor" == "Red Hat" ]] && return 0 ++ [[ "$vendor" == "Bochs" ]] && return 0 + done + return 255 + } diff --git a/SOURCES/0354-ifcfg-write-ifcfg.sh-unset-vlan.patch b/SOURCES/0354-ifcfg-write-ifcfg.sh-unset-vlan.patch new file mode 100644 index 0000000..ba671b7 --- /dev/null +++ b/SOURCES/0354-ifcfg-write-ifcfg.sh-unset-vlan.patch @@ -0,0 +1,26 @@ +From 7de064b57cda7ca3d117c5faebc7636858dfc2f2 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 21 Apr 2015 10:34:31 +0200 +Subject: [PATCH] ifcfg/write-ifcfg.sh: unset vlan + +clear the vlan flag, if a previous interface in the loop +was a vlan interface + +(cherry picked from commit 23446ef1e0a6eda79049a655cb1645691b129645) +--- + modules.d/45ifcfg/write-ifcfg.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh +index b2462da..ed66370 100755 +--- a/modules.d/45ifcfg/write-ifcfg.sh ++++ b/modules.d/45ifcfg/write-ifcfg.sh +@@ -140,6 +140,8 @@ for netup in /tmp/net.*.did-setup ; do + unset macaddr + unset slave + unset ethname ++ unset vlan ++ + [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info + [ -e /tmp/team.${netif}.info ] && . /tmp/team.${netif}.info + diff --git a/SOURCES/0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch b/SOURCES/0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch new file mode 100644 index 0000000..2691908 --- /dev/null +++ b/SOURCES/0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch @@ -0,0 +1,25 @@ +From d1f7f2ac046c77913d1ca97cf8414d9226ae1286 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 9 Oct 2015 11:30:03 +0200 +Subject: [PATCH] base/dracut-lib.sh:getargs() don't return 1 for empty values + +getargs() is only used with real values and not booleans. + +So, return the values only. +--- + modules.d/99base/dracut-lib.sh | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index 50bcf84..cb1ddd7 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -320,8 +320,6 @@ getargs() { + if [ -n "$_gfound" ]; then + if [ $# -gt 0 ]; then + echo -n "$@" +- else +- echo -n 1 + fi + debug_on + return 0 diff --git a/SOURCES/0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch b/SOURCES/0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch new file mode 100644 index 0000000..071e739 --- /dev/null +++ b/SOURCES/0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch @@ -0,0 +1,33 @@ +From 3bce34dfd780b9aa9b93c0a09358096b48806c05 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 9 Oct 2015 11:31:28 +0200 +Subject: [PATCH] ifcfg/write-ifcfg.sh: don't bind interface, if physical + device is set + +If a physical device is defined, we don't need to bind the interface to +the MAC address or something else. +--- + modules.d/45ifcfg/write-ifcfg.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh +index ed66370..1e7f694 100755 +--- a/modules.d/45ifcfg/write-ifcfg.sh ++++ b/modules.d/45ifcfg/write-ifcfg.sh +@@ -141,6 +141,7 @@ for netup in /tmp/net.*.did-setup ; do + unset slave + unset ethname + unset vlan ++ unset phydevice + + [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info + [ -e /tmp/team.${netif}.info ] && . /tmp/team.${netif}.info +@@ -164,7 +165,7 @@ for netup in /tmp/net.*.did-setup ; do + { + echo "# Generated by dracut initrd" + echo "NAME=\"$netif\"" +- interface_bind "$netif" "$macaddr" ++ [ -z "$phydevice" ] && interface_bind "$netif" "$macaddr" + echo "ONBOOT=yes" + echo "NETBOOT=yes" + echo "UUID=\"$uuid\"" diff --git a/SOURCES/0357-network-ifup.sh-skip-empty-nameserver-values.patch b/SOURCES/0357-network-ifup.sh-skip-empty-nameserver-values.patch new file mode 100644 index 0000000..21a8599 --- /dev/null +++ b/SOURCES/0357-network-ifup.sh-skip-empty-nameserver-values.patch @@ -0,0 +1,35 @@ +From e65825117377a8e1e730912aa4c0e786122d892a Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Fri, 9 Oct 2015 11:35:43 +0200 +Subject: [PATCH] network/ifup.sh: skip empty nameserver values + +--- + modules.d/40network/ifup.sh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh +index 0471c42..7c06cd8 100755 +--- a/modules.d/40network/ifup.sh ++++ b/modules.d/40network/ifup.sh +@@ -336,8 +336,8 @@ fi + ip=$(getarg ip) + + if [ -z "$ip" ]; then +- namesrv=$(getargs nameserver) +- for s in $namesrv; do ++ for s in $(getargs nameserver); do ++ [ -n "$s" ] || continue + echo nameserver $s >> /tmp/net.$netif.resolv.conf + done + +@@ -373,8 +373,8 @@ for p in $(getargs ip=); do + [ "$use_vlan" != 'true' ] && continue + + # setup nameserver +- namesrv="$dns1 $dns2 $(getargs nameserver)" +- for s in $namesrv; do ++ for s in "$dns1" "$dns2" $(getargs nameserver); do ++ [ -n "$s" ] || continue + echo nameserver $s >> /tmp/net.$netif.resolv.conf + done + diff --git a/SOURCES/0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch b/SOURCES/0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch new file mode 100644 index 0000000..25f7eef --- /dev/null +++ b/SOURCES/0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch @@ -0,0 +1,44 @@ +From efd5178b6395f4994d005fd437ca916616d2f1ba Mon Sep 17 00:00:00 2001 +From: Fedora dracut team +Date: Mon, 19 Oct 2015 18:27:11 +0200 +Subject: [PATCH 358/359] write-ifcfg: fix creating configuration for VLAN + +Currently the physdev is unset before it is somehow applied. +Also there is no DEVICE in the output. +--- + modules.d/45ifcfg/write-ifcfg.sh | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh +index 1e7f694..f3a1c10 100755 +--- a/modules.d/45ifcfg/write-ifcfg.sh ++++ b/modules.d/45ifcfg/write-ifcfg.sh +@@ -141,7 +141,6 @@ for netup in /tmp/net.*.did-setup ; do + unset slave + unset ethname + unset vlan +- unset phydevice + + [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info + [ -e /tmp/team.${netif}.info ] && . /tmp/team.${netif}.info +@@ -165,7 +164,7 @@ for netup in /tmp/net.*.did-setup ; do + { + echo "# Generated by dracut initrd" + echo "NAME=\"$netif\"" +- [ -z "$phydevice" ] && interface_bind "$netif" "$macaddr" ++ [ -z "$vlan" ] && interface_bind "$netif" "$macaddr" + echo "ONBOOT=yes" + echo "NETBOOT=yes" + echo "UUID=\"$uuid\"" +@@ -219,7 +218,7 @@ for netup in /tmp/net.*.did-setup ; do + if [ -n "$vlan" ] ; then + { + echo "TYPE=Vlan" +- echo "NAME=\"$netif\"" ++ echo "DEVICE=\"$netif\"" + echo "VLAN=yes" + echo "PHYSDEV=\"$phydevice\"" + } >> /tmp/ifcfg/ifcfg-$netif +-- +2.4.3 + diff --git a/SOURCES/0359-90qemu-also-add-ibmvscsi-on-qemu.patch b/SOURCES/0359-90qemu-also-add-ibmvscsi-on-qemu.patch new file mode 100644 index 0000000..63088ef --- /dev/null +++ b/SOURCES/0359-90qemu-also-add-ibmvscsi-on-qemu.patch @@ -0,0 +1,27 @@ +From fda9e5f8571e57d4cdf5e63d48194499e2a90228 Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 20 Oct 2015 15:30:12 +0200 +Subject: [PATCH 359/359] 90qemu: also add ibmvscsi on qemu + +Without this module following scenario does not work: +1. Install the guest with virtio-scsi-pci as system disk and no other +data disk. +2. Change the system disk from virtio-scsi to spapr-vscsi. +--- + modules.d/90qemu/module-setup.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/90qemu/module-setup.sh b/modules.d/90qemu/module-setup.sh +index 46b7ae2..4dd5a73 100755 +--- a/modules.d/90qemu/module-setup.sh ++++ b/modules.d/90qemu/module-setup.sh +@@ -26,5 +26,5 @@ installkernel() { + hostonly='' instmods \ + ata_piix ata_generic pata_acpi cdrom sr_mod ahci \ + virtio_blk virtio virtio_ring virtio_pci \ +- virtio_scsi virtio_console spapr-vscsi ++ virtio_scsi virtio_console spapr-vscsi ibmvscsi + } +-- +2.4.3 + diff --git a/SPECS/dracut.spec b/SPECS/dracut.spec index 35cb38a..94ed238 100644 --- a/SPECS/dracut.spec +++ b/SPECS/dracut.spec @@ -10,7 +10,7 @@ Name: dracut Version: 033 -Release: 241%{?dist}.5 +Release: 359%{?dist} Summary: Initramfs generator using udev %if 0%{?fedora} || 0%{?rhel} @@ -269,13 +269,126 @@ Patch237: 0237-network-net-lib.sh-parse_iscsi_root-fix-c-p-bug.patch Patch238: 0238-network-ifup-source-team-info-if-present.patch Patch239: 0239-fips-add-drbg-kernel-module.patch Patch240: 0240-network-do-not-destroy-the-team-interface-on-teamd-s.patch - +Patch241: 0241-do-not-symlink-var-log-to-run-log.patch +Patch242: 0242-dracut.sh-add-tmpfilesdir-to-install-files-to-usr-li.patch Patch243: 0243-fips-add-some-s390-kernel-modules.patch Patch244: 0244-rearrange-fips-module-ordering-due-to-zlib.patch - +Patch245: 0245-network-dhcp-wait_for_ipv6_dad-in-PREINIT6.patch +Patch246: 0246-network-net-lib.sh-iface_has_link-wait-5s-for-the-ca.patch +Patch247: 0247-dracut-pre-pivot-call-udevadm-settle-one-last-time.patch +Patch248: 0248-dracut.sh-add-devices-with-x-initrd.mount-in-etc-fst.patch Patch249: 0249-crypt-add-drbg-kernel-module.patch - +Patch250: 0250-dracut-lib.sh-info-output-info-to-stderr.patch +Patch251: 0251-Factor-out-all-the-type-V-commands.patch +Patch252: 0252-network-dhclient-script.sh-add-RENEW-REBIND.patch +Patch253: 0253-network-dhclient-script.sh-make-IPv4-DHCP-lease-time.patch +Patch254: 0254-network-don-t-use-ifup-m.patch +Patch255: 0255-nfs-parse-nfsroot.sh-don-t-unset-netroot-if-not-nfs.patch +Patch256: 0256-Change-the-fs_passno-of-nfs-to-0.patch +Patch257: 0257-nfs-nfs-lib.sh-add-anaconda_nfsv6_to_var.patch +Patch258: 0258-splitup-dracut-init.sh-from-dracut-functions.sh.patch +Patch259: 0259-Adding-support-for-read-write-filesystem-images.patch +Patch260: 0260-dmsquash-Add-rd.live.overlay.thin.patch +Patch261: 0261-dmsquash-live-setup-the-images-in-run-initramfs.patch +Patch262: 0262-dmsquash-Add-squashfs-support-to-rd.live.fsimg.patch +Patch263: 0263-doc-Add-a-minimal-rd.live.overlay-documentation.patch +Patch264: 0264-50drm-add-hyperv_fb-kernel-module.patch +Patch265: 0265-kernel-modules-install-all-HID-drivers.patch +Patch266: 0266-network-add-options-to-tweak-timeouts.patch +Patch267: 0267-fcoe-start-with-fcoemon-instead-of-fipvlan.patch +Patch268: 0268-fcoe-EDD-parsing-patch-for-i40e.patch +Patch269: 0269-fcoe-fcoe-edd.sh-cleanup-the-script.patch +Patch270: 0270-livenet-don-t-attempt-to-download-the-image-for-ever.patch +Patch271: 0271-95fcoe-uefi-Test-for-EFI-firmware.patch +Patch272: 0272-base-Don-t-wait-for-swap-devices-in-host-only-mode.patch +Patch273: 0273-dracut-functions.sh-check-if-dinfo-is-a-function.patch +Patch274: 0274-dmsquash-live-do-not-abort-if-user-pressed-ESC-on-ch.patch +Patch275: 0275-Add-rd.live.overlay.size-option.patch +Patch276: 0276-base-dracut-lib.sh-read-proc-cmdline-with-multiple-l.patch +Patch277: 0277-multipath-install-all-multipath-path-selector-kernel.patch +Patch278: 0278-man-page-changed-grub.conf-to-grub2.cfg.patch +Patch279: 0279-lsinitrd.sh-ignore-cat-write-error-Broken-pipe.patch +Patch280: 0280-network-setup-gateway-after-setting-up-resolv.conf.patch +Patch281: 0281-Add-support-for-ethernet-point-to-point-connections-.patch +Patch282: 0282-lvm-add-cache-tools-for-dm-cache-usage.patch Patch283: 0283-crypt-install-drbg-unconditionally-in-hostonly-mode.patch +Patch284: 0284-dracut-functions.sh-degrade-info-about-missing-binar.patch +Patch285: 0285-dracut-functions.sh-require_binaries-clarify-message.patch +Patch286: 0286-dracut-systemd-dracut-initqueue.sh-be-verbose-about-.patch +Patch287: 0287-nfs-parse-nfsroot.sh-silence-useless-warning-if-netr.patch +Patch288: 0288-network-parse-ip-opts.sh-assume-rd.neednet-for-multi.patch +Patch289: 0289-systemd-add-systemd-run-and-systemd-escape.patch +Patch290: 0290-network-net-lib.sh-add-is_ip.patch +Patch291: 0291-iscsi-integrate-with-systemd-and-improve-robustness.patch +Patch292: 0292-dracut.cmdline.7.asc-document-rd.iscsi.waitnet-and-r.patch +Patch293: 0293-iscsi-parse-iscsiroot.sh-use-iBFT-initiator-name.patch +Patch294: 0294-iscsi-iscsiroot.sh-handle-timeout-with-all-interface.patch +Patch295: 0295-TEST-30-ISCSI-dhcpd.conf-set-the-LUN.patch +Patch296: 0296-TEST-30-ISCSI-switch-to-scsi-target-utils.patch +Patch297: 0297-iscsi-iscsiroot.sh-systemd-run-does-not-understand-n.patch +Patch298: 0298-iscsi-module-setup.sh-iscsid-need-var-lib-iscsi.patch +Patch299: 0299-TEST-30-ISCSI-fix-test-to-run-with-new-iscsi.patch +Patch300: 0300-dracut-logger.sh-log-also-rest-of-line-without-retur.patch +Patch301: 0301-iscsi-handle-timeout-case-better.patch +Patch302: 0302-base-dracut-lib.sh-vinfo-vwarn-handle-lines-without-.patch +Patch303: 0303-systemd-dracut-cmdline.sh-print-out-cmdline-in-one-l.patch +Patch304: 0304-network-ifup.sh-let-dhcp-client-run-in-the-backgroun.patch +Patch305: 0305-network-ifup.sh-arping-for-static-IPv4-addresses.patch +Patch306: 0306-network-parse-ip-opts.sh-bind-enx-interface-to-the-M.patch +Patch307: 0307-udev-rules-install-40-redhat.rules.patch +Patch308: 0308-fcoe-cleanup-lldpad.patch +Patch309: 0309-network-net-lib.sh-ibft-unset-gateway-or-dns-if-set-.patch +Patch310: 0310-network-dhclient-exit-arping-immediatly-if-we-get-an.patch +Patch311: 0311-dmraid-only-scan-once-because-of-one-device.patch +Patch312: 0312-test-TEST-04-FULL-SYSTEMD-create-root.sh-modprobe-bt.patch +Patch313: 0313-TEST-15-BTRFS-load-btrfs-module.patch +Patch314: 0314-network-ifup.sh-do_static-error-out-if-interface-cou.patch +Patch315: 0315-network-ifup.sh-do_static-error-out-if-IP-is-already.patch +Patch316: 0316-crypt-module-setup.sh-fixed-parsing-crypttab-with-no.patch +Patch317: 0317-TEST-30-ISCSI-add-rd.scsi.firmware.patch +Patch318: 0318-initqueue-add-online-queue.patch +Patch319: 0319-dracut.spec-raise-systemd-requirement-to-219.patch +Patch320: 0320-iscsi-iscsiroot.sh-handle-firmware-in-online-queue.patch +Patch321: 0321-iscsi-parse-iscsiroot.sh-do-not-modify-netroot.patch +Patch322: 0322-iscsi-parse-iscsiroot.sh-handle-firmware-in-online-q.patch +Patch323: 0323-iscsi-parse-iscsiroot.sh-restart-iscsid-with-try-res.patch +Patch324: 0324-network-ifup.sh-save-return-value-of-ifup.patch +Patch325: 0325-network-also-mark-interfaces-up-with-their-MAC.patch +Patch326: 0326-network-ifup.sh-only-use-dhcp-on-unknown-interfaces-.patch +Patch327: 0327-multipath-add-hostonly-multipath.conf.patch +Patch328: 0328-cms-cmsifup.sh-do-not-use-ifup-m.patch +Patch329: 0329-network-ifup-fix-warning-about-not-bringing-interfac.patch +Patch330: 0330-network-net-lib.sh-fix-wait_for_if_up.patch +Patch331: 0331-network-net-lib.sh-fix-IPv6-route-parsing.patch +Patch332: 0332-network-ifup-do-DHCP-for-BOOTDEV.patch +Patch333: 0333-qemu-add-spapr-vscsi-kernel-module.patch +Patch334: 0334-livenet-livenetroot.sh-fixed-error-condition.patch +Patch335: 0335-iscsi-parse-iscsiroot.sh-only-set-initiator-name-if-.patch +Patch336: 0336-network-move-ip-ibft-handling-to-network-module.patch +Patch337: 0337-dracut.usage.asc-update-man-page.patch +Patch338: 0338-network-dhclient-script.sh-fix-RENEW.patch +Patch339: 0339-network-add-all_ifaces_setup.patch +Patch340: 0340-iscsi-iscsiroot.sh-use-all_ifaces_setup.patch +Patch341: 0341-network-netroot.sh-better-handling-of-netroot-and-dh.patch +Patch342: 0342-iscsi-iscsiroot.sh-handle-iscsi_firmware-in-online-a.patch +Patch343: 0343-i18n-check-for-i18n_install_all-yes-rather-than-bein.patch +Patch344: 0344-dracut.sh-add-command-line-option-for-install_i18_al.patch +Patch345: 0345-dracut.sh-do-not-create-microcode-if-no-firmware-is-.patch +Patch346: 0346-scsi-parse-iscsiroot.sh-call-modprobe-with-b.patch +Patch347: 0347-iscsi-parse-iscsiroot.sh-correct-handling-if-netroot.patch +Patch348: 0348-dracut.sh-no-microcode-if-get_ucode_file-returns-emp.patch +Patch349: 0349-network-wait_for_ifup-handle-NO-CARRIER-output.patch +Patch350: 0350-base-dracut-lib.sh-info-be-more-quiet.patch +Patch351: 0351-dracut-functions.sh-avoid-tokenizing-ldconfig-output.patch +Patch352: 0352-dracut.sh-fixed-typo-in-microcode-generation.patch +Patch353: 0353-90qemu-fixed-systemd-detect-virt-output-parsing.patch +Patch354: 0354-ifcfg-write-ifcfg.sh-unset-vlan.patch +Patch355: 0355-base-dracut-lib.sh-getargs-don-t-return-1-for-empty-.patch +Patch356: 0356-ifcfg-write-ifcfg.sh-don-t-bind-interface-if-physica.patch +Patch357: 0357-network-ifup.sh-skip-empty-nameserver-values.patch +Patch358: 0358-write-ifcfg-fix-creating-configuration-for-VLAN.patch +Patch359: 0359-90qemu-also-add-ibmvscsi-on-qemu.patch + BuildRequires: bash git @@ -341,7 +454,7 @@ Requires: kpartx %if 0%{?fedora} || 0%{?rhel} > 6 Requires: util-linux >= 2.21 -Requires: systemd >= 199 +Requires: systemd >= 219 Requires: procps-ng Conflicts: grubby < 8.23 %else @@ -543,6 +656,7 @@ rm -rf -- $RPM_BUILD_ROOT %endif %dir %{dracutlibdir} %dir %{dracutlibdir}/modules.d +%{dracutlibdir}/dracut-init.sh %{dracutlibdir}/dracut-functions.sh %{dracutlibdir}/dracut-functions %{dracutlibdir}/dracut-version.sh @@ -701,21 +815,177 @@ rm -rf -- $RPM_BUILD_ROOT %endif %changelog -* Thu Jul 09 2015 Harald Hoyer 033-241.5 +* Tue Oct 20 2015 Lukáš Nykrýn - 033-359 +- write-ifcfg: fix creating configuration for VLAN +Resolves: rhbz#1267311 +- 90qemu: also add ibmvscsi on qemu +Resolves: rhbz#1245959 + +* Fri Oct 09 2015 Harald Hoyer 033-358 +- fixed qemu detection +Resolves: rhbz#1245959 +- fixed vlan ifcfg generation and nameserver handling +Resolves: rhbz#1267311 + +* Wed Sep 30 2015 Harald Hoyer 033-353 +- fix network wait_for_if_up() to parse NO-CARRIER +Resolves: rhbz#1249507 +- don't create garbage directories because of ldconfig + misparsing +Resolves: rhbz#1264725 + +* Thu Sep 17 2015 Harald Hoyer 033-349 +- no iSCSI timeout and modprobe, if iSCSI is not used +- modprobe iSCSI modules with "-b" to allow blacklisting +Resolves: rhbz#1263984 +- check for firmware file existance, before crafting + microcode cpio +Resolves: rhbz#1263798 + +* Tue Sep 15 2015 Harald Hoyer 033-346 +- slim down the image by not including microcode header, if + not needed +- add command line parameter for hostonly keyboard layouts + --hostonly-i18n +Resolves: rhbz#1262208 + +* Thu Sep 10 2015 Harald Hoyer 033-343 +- fixed more iscsi_firmware / ibft handling +Resolves: rhbz#1256814 + +* Tue Sep 08 2015 Harald Hoyer 033-339 +- fixed dhcp lease RENEW +Resolves: rhbz#1144277 + +* Thu Sep 03 2015 Harald Hoyer 033-338 +- updated the man page for grub config file modifications +Resolves: rhbz#1209962 + +* Thu Sep 03 2015 Harald Hoyer 033-337 +- more "ip=ibft" fixes +Resolves: rhbz#1256814 + +* Wed Sep 02 2015 Harald Hoyer 033-335 +- fixed livenet exit code +Related: rhbz#1256814 + +* Wed Sep 02 2015 Harald Hoyer 033-334 +- add spapr-vscsi kernel module for qemu +Resolves: rhbz#1245959 + +* Tue Sep 01 2015 Harald Hoyer 033-333 +- fixed more iSCSI handling +Resolves: rhbz#1114966 rhbz#1189891 +- fixed "ip=ibft" +Resolves: rhbz#1256814 +- fixed cmsifup and s390 ifup +Resolves: rhbz#1245660 + +* Tue Aug 25 2015 Harald Hoyer 033-328 +- add hostonly multipath.conf (to save memory in kdump) +Resolves: rhbz#994702 +- increase version number of systemd dependency +- fixed more iSCSI handling +Resolves: rhbz#1114966 rhbz#1189891 +- check for duplicate IPv4 address +Resolves: rhbz#1202553 + +* Tue Aug 18 2015 Harald Hoyer 033-314 +- fixed iSCSI handling +Resolves: rhbz#1114966 rhbz#1189891 +- check for duplicate IPv4 address +Resolves: rhbz#1202553 +- wait udev to be settled before transitioning to the real root +Resolves: rhbz#1231373 +- support ip= parameter with enx* interface for autobinding to MAC +Resolves: rhbz#1241102 +- include 40-redhat.rules in the initramfs +Resolves: rhbz#1241547 +- degrade missing binaries for modules to info level +Resolves: rhbz#1242845 +- cleanup lldpad cleanly to help out in state transition from initramfs +Resolves: rhbz#1246217 + +* Thu Jul 09 2015 Harald Hoyer 033-284 - unconditionally install the drbg module in hostonly mode -Resolves: rhbz#1241187 - -* Wed Jul 08 2015 Harald Hoyer 033-241.4 -- add drbg to crypto -Resolves: rhbz#1241187 - -* Thu May 07 2015 Harald Hoyer 033-241.3 +Resolves: rhbz#1240438 + +* Fri Jul 03 2015 Harald Hoyer 033-283 +- add support for "x-initrd.mount" +Resolves: rhbz#1080405 +- add network timeout kernel command line arguments +Resolves: rhbz#1088808 +- use fcoemon and write out fcoemon config +Resolves: rhbz#1129884 rhbz#1129888 +- add fcoe module EDD parsing quirk for i40e +Resolves: rhbz#1129886 +- add RENEW to dhclient-script +Resolves: rhbz#1144277 +- only fetch squashfs.img once +Resolves: rhbz#1152485 +- add more input kernel drivers +Resolves: rhbz#1165585 rhbz#1194529 +- be more sloppy with swap partitions and don't fail without them +Resolves: rhbz#1165736 +- don't call dinfo binary +Resolves: rhbz#1167082 +- don't halt the system, if the media check is aborted +Resolves: rhbz#1167735 +- add boot option to spcecify size of live image rw overlay +Resolves: rhbz#1183566 +- fix nfs dracut module, to not alter rootok for non nfs root +Resolves: rhbz#1186004 +- don't fsck nfs +Resolves: rhbz#1186699 +- correctly parse multi line kernel command line +Resolves: rhbz#1186822 +- add hyperv_fb module +Resolves: rhbz#1187428 +- fixup IPv6 NFS addresses parsing +Resolves: rhbz#1190098 +- add drbg kernel module in fips mode +Resolves: rhbz#1193147 +- add all multipath path selector kernel modules +Resolves: rhbz#1195392 +- don't symlink /var/log /run/log +Resolves: rhbz#1199645 +- wait for IPv6 link local addresses +Resolves: rhbz#1209814 +- fix references to grub config file in dracut man page +Resolves: rhbz#1209962 +- add s390 kernel crypto modules to dracut-fips +Resolves: rhbz#1215766 +- suppress 'cat: write error: Broken pipe' for lsinitrd +Resolves: rhbz#1223888 +- enable DNS before routes to avoid race conditions +Resolves: rhbz#1226004 +- add point-to-point ethernet configured via DHCP +Resolves: rhbz#1227813 +- add virtio-pci +Resolves: rhbz#1231716 +- add cache tools for dm-cache usage +Resolves: rhbz#1234407 +- dracut-functions: move non-function code to dracut-init.sh +Resolves: rhbz#1235500 +- add more information why a dracut module could not be included +Resolves: rhbz#1236190 +- fixup iBFT parsing +Resolves: rhbz#1236610 + +* Tue Jun 16 2015 Harald Hoyer 033-248 - fips: rearrange fips modules due to zlib Resolves: rhbz#1216086 +- wait for IPV6 DAD in DHCP PREINIT6 +- wait 5s for an network link carrier to appear +Resolves: rhbz#1088808 -* Tue Apr 28 2015 Harald Hoyer 033-241.2 +* Tue Apr 28 2015 Harald Hoyer 033-244 - fips: add some s390 kernel modules -Resolves: rhbz#1216086 +Resolves: rhbz#1215766 + +* Thu Apr 02 2015 Harald Hoyer 033-243 +- /run/log is now symlinked to /run/initramfs/log +Resolves: rhbz#1199645 * Thu Feb 19 2015 Harald Hoyer 033-241.1 - subversion inc