Accepting request 698239 from Base:System

- dracut-lib.sh:dev_unit_name() guard against $dev beginning with "-" (bsc#1132448)
  * adds 0601-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch 

- 95iscsi: avoid error messages when building initrd, multipath timeouts
  (bsc#1130114, bsc#1130107, bsc#1121238)
  * adds 0595-iscsi-don-t-continue-waiting-if-the-root-device-is-p.patch
  * adds 0596-network-stop-waiting-for-interfaces-if-root-device-i.patch
  * adds 0597-iscsiroot-parse_iscsi_root-overwrites-command-line-a.patch
  * adds 0598-iscsiroot-there-s-never-more-than-one-target-per-cal.patch
  * adds 0599-iscsiroot-try-targets-only-once.patch
  * adds 0600-iscsiroot-remove-bashisms.patch

  (bsc#1089332) (forwarded request 698238 from dmolkentin)

OBS-URL: https://build.opensuse.org/request/show/698239
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/dracut?expand=0&rev=137
This commit is contained in:
Dominique Leuenberger 2019-05-03 20:06:56 +00:00 committed by Git OBS Bridge
commit b8b5f99722
9 changed files with 306 additions and 2 deletions

View File

@ -0,0 +1,42 @@
From 06d95ed6eb72ad9b1a4666b3d7cb6977e5b83ca5 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 21 Mar 2019 16:27:04 +0100
Subject: [PATCH 1/6] iscsi: don't continue waiting if the root device is
present
dracut waits for every iscsiroot connection to be established
before switching root. This is not necessary in multipath scenarios,
where a single path is usually sufficient to set up the root device,
and where users expect booting to succeed unless all paths are down.
Don't wait for the iscsi portal to start if the root device has
already been found.
---
modules.d/95iscsi/parse-iscsiroot.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
index f884e684..b96605ef 100755
--- a/modules.d/95iscsi/parse-iscsiroot.sh
+++ b/modules.d/95iscsi/parse-iscsiroot.sh
@@ -84,7 +84,7 @@ if [ -n "$iscsi_firmware" ]; then
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
+ echo "${DRACUT_SYSTEMD+systemctl is-active initrd-root-device.target || }[ -f '/tmp/iscsistarted-firmware' ]" > $hookdir/initqueue/finished/iscsi_started.sh
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'"
@@ -147,7 +147,7 @@ for nroot in $(getargs netroot); do
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
+ echo "${DRACUT_SYSTEMD+systemctl is-active initrd-root-device.target || }[ -f '/tmp/iscsistarted-$netroot_enc' ]" > $hookdir/initqueue/finished/iscsi_started.sh
done
# Done, all good!
--
2.16.4

View File

@ -0,0 +1,26 @@
From 9aeceb14e010d68f8ee92f60664eef39d57552c2 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 21 Mar 2019 21:31:15 +0100
Subject: [PATCH 2/6] network: stop waiting for interfaces if root device is
present
---
modules.d/40network/net-genrules.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
index 843bd988..a5a9ae22 100755
--- a/modules.d/40network/net-genrules.sh
+++ b/modules.d/40network/net-genrules.sh
@@ -86,7 +86,7 @@ command -v fix_bootif >/dev/null || . /lib/net-lib.sh
for iface in $wait_ifaces; do
if [ "$bootdev" = "$iface" ] || [ "$NEEDNET" = "1" ]; then
- echo "[ -f /tmp/net.${iface}.did-setup ]" >$hookdir/initqueue/finished/wait-$iface.sh
+ echo "${DRACUT_SYSTEMD+systemctl is-active initrd-root-device.target || }[ -f /tmp/net.${iface}.did-setup ]" >$hookdir/initqueue/finished/wait-$iface.sh
fi
done
# Default: We don't know the interface to use, handle all
--
2.16.4

View File

@ -0,0 +1,38 @@
From a9ef0960799ad8d95de2e13a9f8773e88826e83e Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 4 Apr 2019 15:29:04 +0200
Subject: [PATCH 3/6] iscsiroot: parse_iscsi_root overwrites command line args
iscsi_target_name, iscsi_target_ip, iscsi_target_port are
unconditionally overwritten by parse_iscsi_root. Don't set
them here, for code clarity.
---
modules.d/95iscsi/iscsiroot.sh | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
Index: dracut-044/modules.d/95iscsi/iscsiroot.sh
===================================================================
--- dracut-044.orig/modules.d/95iscsi/iscsiroot.sh
+++ dracut-044/modules.d/95iscsi/iscsiroot.sh
@@ -102,12 +102,6 @@ handle_netroot()
# override conf settings by command line options
arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=)
[ -n "$arg" ] && iscsi_initiator=$arg
- arg=$(getargs rd.iscsi.target.name -d iscsi_target_name=)
- [ -n "$arg" ] && iscsi_target_name=$arg
- arg=$(getarg rd.iscsi.target.ip -d iscsi_target_ip)
- [ -n "$arg" ] && iscsi_target_ip=$arg
- arg=$(getarg rd.iscsi.target.port -d iscsi_target_port=)
- [ -n "$arg" ] && iscsi_target_port=$arg
arg=$(getarg rd.iscsi.target.group -d iscsi_target_group=)
[ -n "$arg" ] && iscsi_target_group=$arg
arg=$(getarg rd.iscsi.username -d iscsi_username=)
@@ -122,6 +116,8 @@ handle_netroot()
iscsi_param="$iscsi_param $p"
done
+ # this sets iscsi_target_name and possibly overwrites most
+ # parameters read from the command line above
parse_iscsi_root "$1" || return 1
# Bail out early, if there is no route to the destination

View File

@ -0,0 +1,27 @@
From 04657e60f00d53f52d47b7fd02b53618762340e4 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 4 Apr 2019 15:40:14 +0200
Subject: [PATCH 4/6] iscsiroot: there's never more than one target per call
iscsi_target_name is set by iscsi_root, and thus can't have
more than one member. This allows us to get rid of one bashism
in iscsiroot.sh.
---
modules.d/95iscsi/iscsiroot.sh | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
Index: dracut-044/modules.d/95iscsi/iscsiroot.sh
===================================================================
--- dracut-044.orig/modules.d/95iscsi/iscsiroot.sh
+++ dracut-044/modules.d/95iscsi/iscsiroot.sh
@@ -221,8 +221,8 @@ handle_netroot()
[ -z "$targets" ] && echo "Target discovery to $iscsi_target_ip:${iscsi_target_port:+$iscsi_target_port} failed with status $?" && exit 1
fi
- for target in $iscsi_target_name; do
- if [[ "$targets" =~ "$target" ]]; then
+ for target in $targets; do
+ if [ "$target" = "$iscsi_target_name" ]; then
if [ -n "$iscsi_iface_name" ]; then
$(iscsiadm -m iface -I $iscsi_iface_name --op=new)
[ -n "$iscsi_initiator" ] && $(iscsiadm -m iface -I $iscsi_iface_name --op=update --name=iface.initiatorname --value=$iscsi_initiator)

View File

@ -0,0 +1,37 @@
From 1fd34ae26591701e27577e381dc284248e3bf6e2 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 4 Apr 2019 16:16:40 +0200
Subject: [PATCH 5/6] iscsiroot: try targets only once
In multipath scenarios, "iscsiadm -m node" may contain
several records with the same target.
There's no point in trying "iscsiadm --login" multiple
time for the same target, through the same portal.
Moreover, warn if the desired target is not on the node
list.
---
modules.d/95iscsi/iscsiroot.sh | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
Index: dracut-044/modules.d/95iscsi/iscsiroot.sh
===================================================================
--- dracut-044.orig/modules.d/95iscsi/iscsiroot.sh
+++ dracut-044/modules.d/95iscsi/iscsiroot.sh
@@ -97,7 +97,7 @@ handle_netroot()
local iscsi_in_username iscsi_in_password
local iscsi_iface_name iscsi_netdev_name
local iscsi_param param
- local p
+ local p found
# override conf settings by command line options
arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=)
@@ -221,6 +221,7 @@ handle_netroot()
[ -z "$targets" ] && echo "Target discovery to $iscsi_target_ip:${iscsi_target_port:+$iscsi_target_port} failed with status $?" && exit 1
fi
+ found=
for target in $targets; do
if [ "$target" = "$iscsi_target_name" ]; then
if [ -n "$iscsi_iface_name" ]; then

View File

@ -0,0 +1,69 @@
From c14a550d54b408088fd0aa14a4f2088f8b45237e Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Thu, 4 Apr 2019 17:12:07 +0200
Subject: [PATCH 6/6] iscsiroot: remove bashisms
According to the dracut README, module code to be run in
the initrd must be POSIX-compliant. Replace remaining
bashisms (as reported by checkbashisms) with POSIX compliant
code.
The use of "type" is not strictly POSIX compliant, but it's
all over the place in dracut code. dash supports it, anyway.
---
modules.d/95iscsi/iscsiroot.sh | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
index 73dd8c20..c00a9f58 100755
--- a/modules.d/95iscsi/iscsiroot.sh
+++ b/modules.d/95iscsi/iscsiroot.sh
@@ -61,11 +61,11 @@ handle_firmware()
if ! iscsiadm -m fw; then
warn "iscsiadm: Could not get list of targets from firmware."
else
- ifaces=( $(echo /sys/firmware/ibft/ethernet*) )
+ ifaces=$(set -- /sys/firmware/ibft/ethernet*; echo $#)
retry=$(cat /tmp/session-retry)
- if [ $retry -lt ${#ifaces[*]} ]; then
- let retry++
+ if [ $retry -lt $ifaces ]; then
+ retry=$((retry+1))
echo $retry > /tmp/session-retry
return 1
else
@@ -95,6 +95,7 @@ handle_netroot()
local iscsi_iface_name iscsi_netdev_name
local iscsi_param param
local p found
+ local login_retry_max_seen=
# override conf settings by command line options
arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=)
@@ -110,7 +111,9 @@ handle_netroot()
arg=$(getarg rd.iscsi.in.password -d iscsi_in_password=)
[ -n "$arg" ] && iscsi_in_password=$arg
for p in $(getargs rd.iscsi.param -d iscsi_param); do
- iscsi_param="$iscsi_param $p"
+ [ "${p%=*}" = node.session.initial_login_retry_max ] && \
+ login_retry_max_seen=yes
+ iscsi_param="$iscsi_param $p"
done
# this sets iscsi_target_name and possibly overwrites most
@@ -123,9 +126,8 @@ handle_netroot()
fi
#limit iscsistart login retries
- if [[ ! "$iscsi_param" =~ "node.session.initial_login_retry_max" ]]; then
- set_login_retries
- retries=$?
+ if [ "$login_retry_max_seen" != yes ]; then
+ retries=$(getargnum 3 0 10000 rd.iscsi.login_retry_max)
if [ $retries -gt 0 ]; then
iscsi_param="${iscsi_param% } node.session.initial_login_retry_max=$retries"
fi
--
2.16.4

View File

@ -0,0 +1,32 @@
From 33348c63393d6fca3b6070dfdf108bff7b59d53b Mon Sep 17 00:00:00 2001
From: Alexander Tsoy <alexander@tsoy.me>
Date: Tue, 5 Jan 2016 22:11:57 +0300
Subject: [PATCH] base/dracut-lib.sh:dev_unit_name() guard against $dev
beginning with "-"
crypt/parse-crypt.sh generate initqueue job which always call
dev_unit_name() with an argument beginning with "-". This results
in the following error:
dracut-initqueue[307]: + systemd-escape -p -cfb4aa43-2f02-4c6b-a313-60ea99288087
dracut-initqueue[307]: systemd-escape: invalid option -- 'c'
---
modules.d/99base/dracut-lib.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index 89235b04..45ef31b6 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -874,7 +874,7 @@ dev_unit_name()
local dev="$1"
if command -v systemd-escape >/dev/null; then
- systemd-escape -p "$dev"
+ systemd-escape -p -- "$dev"
return
fi
--
2.16.4

View File

@ -1,3 +1,21 @@
-------------------------------------------------------------------
Thu Apr 25 23:40:25 UTC 2019 - Daniel Molkentin <daniel.molkentin@suse.com>
- dracut-lib.sh:dev_unit_name() guard against $dev beginning with "-" (bsc#1132448)
* adds 0601-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch
-------------------------------------------------------------------
Wed Apr 24 08:52:33 UTC 2019 - Daniel Molkentin <daniel.molkentin@suse.com>
- 95iscsi: avoid error messages when building initrd, multipath timeouts
(bsc#1130114, bsc#1130107, bsc#1121238)
* adds 0595-iscsi-don-t-continue-waiting-if-the-root-device-is-p.patch
* adds 0596-network-stop-waiting-for-interfaces-if-root-device-i.patch
* adds 0597-iscsiroot-parse_iscsi_root-overwrites-command-line-a.patch
* adds 0598-iscsiroot-there-s-never-more-than-one-target-per-cal.patch
* adds 0599-iscsiroot-try-targets-only-once.patch
* adds 0600-iscsiroot-remove-bashisms.patch
-------------------------------------------------------------------
Thu Mar 14 15:42:45 UTC 2019 - Daniel Molkentin <daniel.molkentin@suse.com>
@ -177,7 +195,7 @@ Thu Apr 19 11:51:07 UTC 2018 - daniel.molkentin@suse.com
Thu Apr 19 11:36:26 UTC 2018 - daniel.molkentin@suse.com
- 95nfs: If no server is configured, read BOOTSERVERADDR from wicked's leaseinf
(boo#1089332)
(bsc#1089332)
* adds 0566-95nfs-If-no-server-is-configured-read-BOOTSERVERADDR.patch
-------------------------------------------------------------------
Thu Apr 5 11:05:15 UTC 2018 - daniel.molkentin@suse.com

View File

@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
@ -433,6 +433,14 @@ Patch592: 0592-95iscsi-handle-qedi-like-bnx2i.patch
Patch593: 0593-dracut-only-copy-xattr-if-root.patch
# Patch specific to SUSE, not upstream
Patch594: 0594-Check-SUSE-kernel-module-dependencies-recursively.patch
# Patches 595-600 submitted upstream https://github.com/dracutdevs/dracut/pull/562
Patch595: 0595-iscsi-don-t-continue-waiting-if-the-root-device-is-p.patch
Patch596: 0596-network-stop-waiting-for-interfaces-if-root-device-i.patch
Patch597: 0597-iscsiroot-parse_iscsi_root-overwrites-command-line-a.patch
Patch598: 0598-iscsiroot-there-s-never-more-than-one-target-per-cal.patch
Patch599: 0599-iscsiroot-try-targets-only-once.patch
Patch600: 0600-iscsiroot-remove-bashisms.patch
Patch601: 0601-base-dracut-lib.sh-dev_unit_name-guard-against-dev-b.patch
BuildRequires: asciidoc
BuildRequires: bash
@ -745,6 +753,13 @@ chmod a+x modules.d/95qeth_rules/module-setup.sh
%patch592 -p1
%patch593 -p1
%patch594 -p1
%patch595 -p1
%patch596 -p1
%patch597 -p1
%patch598 -p1
%patch599 -p1
%patch600 -p1
%patch601 -p1
%build
%configure\