diff --git a/Fix-test-in-lsinitrd.patch b/Fix-test-in-lsinitrd.patch new file mode 100644 index 0000000000000000000000000000000000000000..40e29862af01d390dd2295b5651a83dc7c20b395 --- /dev/null +++ b/Fix-test-in-lsinitrd.patch @@ -0,0 +1,27 @@ +From 32dfd41688a0a2aee59a62dd661c808a935d91a4 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Mon, 4 May 2020 10:09:07 +0200 +Subject: [PATCH] Fix test in lsinitrd + +If $uefi is empty, this evaluated to true previously, +resulting in "initrd in UEFI: : 13M". +--- + lsinitrd.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lsinitrd.sh b/lsinitrd.sh +index b5c73f6..ea0c7f6 100755 +--- a/lsinitrd.sh ++++ b/lsinitrd.sh +@@ -206,7 +206,7 @@ if [ "$bin" = "MZ" ]; then + fi + + if (( ${#filenames[@]} <= 0 )) && [[ -z "$unpack" ]] && [[ -z "$unpackearly" ]]; then +- if [ -n $uefi ]; then ++ if [ -n "$uefi" ]; then + echo -n "initrd in UEFI: $uefi: " + du -h $image | while read a b || [ -n "$a" ]; do echo $a;done + if [ -f "$TMPDIR/osrel.txt" ]; then +-- +1.8.3.1 + diff --git a/dracut-90crypt-module-setup.sh-fix-force-on-multiple-lines.patch b/dracut-90crypt-module-setup.sh-fix-force-on-multiple-lines.patch new file mode 100644 index 0000000000000000000000000000000000000000..6cebcce52ce1772e3fd8d578371902ed1d467dcd --- /dev/null +++ b/dracut-90crypt-module-setup.sh-fix-force-on-multiple-lines.patch @@ -0,0 +1,28 @@ +From cb9e6881dde7ec34e11f6f38727602d6d841a04f Mon Sep 17 00:00:00 2001 +From: Derek Hageman +Date: Thu, 30 Apr 2020 18:40:13 -0600 +Subject: [PATCH] 90crypt/module-setup.sh: fix force on multiple lines + +The first line in crypttab with a "force" option causes all subsequent +lines to be included as if they also had it set because the variable +used to track it is not reset between loop iterations. So fix that by +just setting it to empty before the check for the force option. +--- + modules.d/90crypt/module-setup.sh | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh +index 3bce241..e3d6338 100755 +--- a/modules.d/90crypt/module-setup.sh ++++ b/modules.d/90crypt/module-setup.sh +@@ -113,6 +113,7 @@ install() { + set -- ${luksoptions} + IFS="${OLD_IFS}" + ++ forceentry="" + while [ $# -gt 0 ]; do + case $1 in + force) +-- +1.8.3.1 + diff --git a/dracut-95zfcp_rules-parse-zfcp.sh-remove-rule-existence-che.patch b/dracut-95zfcp_rules-parse-zfcp.sh-remove-rule-existence-che.patch new file mode 100644 index 0000000000000000000000000000000000000000..eb819b771758eabdef8543a667c7fdddc479cb5b --- /dev/null +++ b/dracut-95zfcp_rules-parse-zfcp.sh-remove-rule-existence-che.patch @@ -0,0 +1,28 @@ +From 7a04712ad0efa9afa3759656ea1b26db40a8a29e Mon Sep 17 00:00:00 2001 +From: Daniel Molkentin +Date: Mon, 21 Jan 2019 14:40:06 +0100 +Subject: [PATCH] 95zfcp_rules/parse-zfcp.sh: remove rule existence check + +Reference: bsc#1008352 + +Original-Patch-By: Michal Suchanek +--- + modules.d/95zfcp_rules/parse-zfcp.sh | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/modules.d/95zfcp_rules/parse-zfcp.sh b/modules.d/95zfcp_rules/parse-zfcp.sh +index 7defb04..2b62012 100755 +--- a/modules.d/95zfcp_rules/parse-zfcp.sh ++++ b/modules.d/95zfcp_rules/parse-zfcp.sh +@@ -22,8 +22,6 @@ create_udev_rule() { + return 0; + fi + +- [ -e ${_rule} ] && return 0 +- + if [ ! -f "$_rule" ] ; then + cat > $_rule < +Date: Thu, 19 Mar 2020 12:12:50 +0100 +Subject: [PATCH] dasd: only install /etc/dasd.conf if present + +`dasd.conf` needn't be present on system even if modules have been loaded. + +Check if file exists to avoid error message during kernel update +```bash +dracut-install: ERROR: installing '/etc/dasd.conf' +dracut: FAILED: /usr/lib/dracut/dracut-install -D /var/tmp/dracut.YvVRx5/initramfs -H /etc/dasd.conf +``` +--- + modules.d/95dasd/module-setup.sh | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/modules.d/95dasd/module-setup.sh b/modules.d/95dasd/module-setup.sh +index 2c49cd2..c71c8a0 100755 +--- a/modules.d/95dasd/module-setup.sh ++++ b/modules.d/95dasd/module-setup.sh +@@ -18,8 +18,9 @@ depends() { + install() { + inst_hook cmdline 30 "$moddir/parse-dasd.sh" + inst_multiple dasdinfo dasdconf.sh normalize_dasd_arg +- if [[ $hostonly ]]; then +- inst -H /etc/dasd.conf ++ conf=/etc/dasd.conf ++ if [[ $hostonly && -f $conf ]] ; then ++ inst -H $conf + fi + inst_rules 56-dasd.rules + inst_rules 59-dasd.rules +-- +1.8.3.1 + diff --git a/dracut-dracut.sh-don-t-call-fsfreeze-on-subvol-of-root-file.patch b/dracut-dracut.sh-don-t-call-fsfreeze-on-subvol-of-root-file.patch new file mode 100644 index 0000000000000000000000000000000000000000..13d1a3c682d8e96beb57d4ef146b9c80c54644d8 --- /dev/null +++ b/dracut-dracut.sh-don-t-call-fsfreeze-on-subvol-of-root-file.patch @@ -0,0 +1,75 @@ +From 0386e4627779cb51f4292b3c642d90586d5e71b4 Mon Sep 17 00:00:00 2001 +From: Martin Wilck +Date: Wed, 29 Jan 2020 23:53:29 +0100 +Subject: [PATCH] dracut.sh: don't call fsfreeze on subvol of root file system + +dracut.sh already doesn't call fsfreeze if the output file is on +the root file system. For btrfs, however, this is not sufficient. +Because fsfreeze is a superblock operation, and all btrfs subvolumes +share the same superblock, fsfreeze may freeze the entire system +if the subvolume on which the output file is written and / are +subvolumes of the same file system. Avoid this by comparing file +system UUIDs for btrfs. + +Fixes: de576db3c225 ("call fsfreeze(8) on /boot to flush initramfs data & metadata to media") +--- + dracut.sh | 36 +++++++++++++++++++++++++++++++++++- + 1 file changed, 35 insertions(+), 1 deletion(-) + +diff --git a/dracut.sh b/dracut.sh +index af346f3..c14f6c0 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -2075,6 +2075,40 @@ fi + + command -v restorecon &>/dev/null && restorecon -- "$outfile" + ++btrfs_uuid() { ++ btrfs filesystem show "$1" | sed -n '1s/^.*uuid: //p' ++} ++ ++freeze_ok_for_btrfs() { ++ local mnt uuid1 uuid2 ++ # If the output file is on btrfs, we need to make sure that it's ++ # not on a subvolume of the same file system as the root FS. ++ # Otherwise, fsfreeze() might freeze the entire system. ++ # This is most conveniently checked by comparing the FS uuid. ++ ++ [[ "$(stat -f -c %T -- "/")" == "btrfs" ]] || return 0 ++ mnt=$(stat -c %m -- "$1") ++ uuid1=$(btrfs_uuid "$mnt") ++ uuid2=$(btrfs_uuid "/") ++ [[ "$uuid1" && "$uuid2" && "$uuid1" != "$uuid2" ]] ++} ++ ++freeze_ok_for_fstype() { ++ local outfile=$1 ++ local fstype ++ ++ [[ "$(stat -c %m -- "$outfile")" == "/" ]] && return 1 ++ fstype=$(stat -f -c %T -- "$outfile") ++ case $fstype in ++ msdos) ++ return 1;; ++ btrfs) ++ freeze_ok_for_btrfs "$outfile";; ++ *) ++ return 0;; ++ esac ++} ++ + # We sync/fsfreeze only if we're operating on a live booted system. + # It's possible for e.g. `kernel` to be installed as an RPM BuildRequires or equivalent, + # and there's no reason to sync, and *definitely* no reason to fsfreeze. +@@ -2087,7 +2121,7 @@ if test -d $dracutsysrootdir/run/systemd/system; then + fi + + # use fsfreeze only if we're not writing to / +- if [[ "$(stat -c %m -- "$outfile")" != "/" && "$(stat -f -c %T -- "$outfile")" != "msdos" ]]; then ++ if [[ "$(stat -c %m -- "$outfile")" != "/" ]] && freeze_ok_for_fstype "$outfile"; then + if ! $(fsfreeze -f $(dirname "$outfile") 2>/dev/null && fsfreeze -u $(dirname "$outfile") 2>/dev/null); then + dinfo "dracut: warning: could not fsfreeze $(dirname "$outfile")" + fi +-- +1.8.3.1 + diff --git a/dracut-lib.sh-quote-variables-in-parameter-expansion.patch b/dracut-lib.sh-quote-variables-in-parameter-expansion.patch new file mode 100644 index 0000000000000000000000000000000000000000..768cf388e2fb28c6f4f105eb9dc641bc1f66bad8 --- /dev/null +++ b/dracut-lib.sh-quote-variables-in-parameter-expansion.patch @@ -0,0 +1,111 @@ +From 8e1a4dc5f8a777fc718db490414ffdc9dc755f66 Mon Sep 17 00:00:00 2001 +From: Jonas Witschel +Date: Sat, 18 Apr 2020 14:55:41 +0200 +Subject: [PATCH] dracut-lib.sh: quote variables in parameter expansion + patterns + +According to POSIX.1-2017, 2.6.2 Parameter Expansion: + +${parameter%[word]} [...] The word shall be expanded to produce a +pattern. + +This means if word contains variables that itself contain special +characters like asterisks or backslashes, these are treated as pattern +characters unless the variable is quoted. Try e.g. the following example +in bash, dash or (busybox) ash: + +i='a\c'; j='\'; echo "${i%$j*}" + +This prints "a\c" because "$j*" is expanded to "\*", escaping the +asterisk. In contrast, + +i='a\c'; j='\'; echo "${i%"$j"*}" + +produces the expected result "a" because the backslash is not specially +treated any more after quoting. + +The quotes that this commit adds have been previously removed in commit +f9c96cf56fed390841eac05c43826e62014c9188, citing issues with busybox +hush without further specifying the actual error. I tested a recent +busybox build (upstream commit 9aa751b08ab03d6396f86c3df77937a19687981b) +and couldn't find any problems. Note that the above example always +produces "a\c" in hush regardless of quoting $j, making hush unsuitable +for use with dracut, but using quotes in parameter expansions generally +works. + +The unquoted variables break the "rd.luks.uuid/name" kernel command line +options in dracut 050 because + +str_replace "$luksname" '\' '\\' + +in modules.d/90crypt/parse-crypt.sh is not able to escape the +backslashes any more, see GH-723, GH-727: backslashes in the +systemd-cryptsetup@.service unit name stay unescaped for use in udev +(cf. commit 0f6d93eb9d63695a64002ec8b0421fbc9fc8a7a3), leading to +failures in starting the unit. + +This partially reverts commit f9c96cf56fed390841eac05c43826e62014c9188. +--- + modules.d/99base/dracut-lib.sh | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh +index c53cd13..c57523d 100755 +--- a/modules.d/99base/dracut-lib.sh ++++ b/modules.d/99base/dracut-lib.sh +@@ -24,7 +24,7 @@ debug_on() { + + # returns OK if $1 contains literal string $2 (and isn't empty) + strstr() { +- [ "${1##*$2*}" != "$1" ] ++ [ "${1##*"$2"*}" != "$1" ] + } + + # returns OK if $1 matches (completely) glob pattern $2 +@@ -43,18 +43,18 @@ strglobin() { + + # returns OK if $1 contains literal string $2 at the beginning, and isn't empty + str_starts() { +- [ "${1#$2*}" != "$1" ] ++ [ "${1#"$2"*}" != "$1" ] + } + + # returns OK if $1 contains literal string $2 at the end, and isn't empty + str_ends() { +- [ "${1%*$2}" != "$1" ] ++ [ "${1%*"$2"}" != "$1" ] + } + + trim() { + local var="$*" +- var="${var#${var%%[![:space:]]*}}" # remove leading whitespace characters +- var="${var%${var##*[![:space:]]}}" # remove trailing whitespace characters ++ var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters ++ var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters + printf "%s" "$var" + } + +@@ -108,9 +108,9 @@ str_replace() { + local out='' + + while strstr "${in}" "$s"; do +- chop="${in%%$s*}" ++ chop="${in%%"$s"*}" + out="${out}${chop}$r" +- in="${in#*$s}" ++ in="${in#*"$s"}" + done + echo "${out}${in}" + } +@@ -396,7 +396,7 @@ splitsep() { + while [ -n "$str" -a "$#" -gt 1 ]; do + tmp="${str%%$sep*}" + eval "$1='${tmp}'" +- str="${str#$tmp}" ++ str="${str#"$tmp"}" + str="${str#$sep}" + shift + done +-- +1.8.3.1 + diff --git a/dracut-network-fix-glob-matching-ipv6-addresses.patch b/dracut-network-fix-glob-matching-ipv6-addresses.patch new file mode 100644 index 0000000000000000000000000000000000000000..1d59a7b5b9623cbf74428c7318cdc69704846981 --- /dev/null +++ b/dracut-network-fix-glob-matching-ipv6-addresses.patch @@ -0,0 +1,32 @@ +From 7069132ec7e94a3274aa1b3b3b6e339066118a4d Mon Sep 17 00:00:00 2001 +From: Lukas Nykryn +Date: Tue, 10 Mar 2020 15:18:37 +0100 +Subject: [PATCH] network: fix glob matching ipv6 addresses + +In this case we want to cover three cases +1) ip_address:ip_address +2) number:macaddress +3) :macaddress + +We consider something an IPv6 address if it starts with number and +contains ":", but IPv6 addresses are in hexa. +--- + 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 16730e5..7f185fd 100755 +--- a/modules.d/40network/net-lib.sh ++++ b/modules.d/40network/net-lib.sh +@@ -510,7 +510,7 @@ ip_to_var() { + [ -n "$6" ] && dev=$6 + [ -n "$7" ] && autoconf=$7 + case "$8" in +- [0-9]*:*|[0-9]*.[0-9]*.[0-9]*.[0-9]*) ++ [0-9a-fA-F]*:*|[0-9]*.[0-9]*.[0-9]*.[0-9]*) + dns1="$8" + [ -n "$9" ] && dns2="$9" + ;; +-- +1.8.3.1 + diff --git a/dracut.spec b/dracut.spec index c3217095f2ed791fc55a52d5c662aa5ac79f71fd..c1f32907cc3c7099de2fb0bba9abfefacec305f9 100644 --- a/dracut.spec +++ b/dracut.spec @@ -9,7 +9,7 @@ Name: dracut Version: 050 -Release: 2 +Release: 3 Summary: Initramfs generator using udev @@ -29,7 +29,15 @@ Patch0001: dracut-network-fixed-net-rules-issue-hence-systemd-r.patch Patch0002: skip-the-broken-sd-in-initqueue.patch Patch0003: use-sleep-replace-check-sys-block.patch Patch0004: 0001-Fix-pre-trigger-stage-by-replacing-exit-with-return.patch -Patch0005: 0002-95fcoe-default-rd.nofcoe-to-false.patch +Patch0005: 0002-95fcoe-default-rd.nofcoe-to-false.patch +Patch0006: dracut-95zfcp_rules-parse-zfcp.sh-remove-rule-existence-che.patch +Patch0007: dracut-dracut.sh-don-t-call-fsfreeze-on-subvol-of-root-file.patch +Patch0008: dracut-network-fix-glob-matching-ipv6-addresses.patch +Patch0009: dracut-dasd-only-install-etc-dasd.conf-if-present.patch +Patch0010: dracut-lib.sh-quote-variables-in-parameter-expansion.patch +Patch0011: dracut-90crypt-module-setup.sh-fix-force-on-multiple-lines.patch +Patch0012: Fix-test-in-lsinitrd.patch + Source1: https://www.gnu.org/licenses/lgpl-2.1.txt Source2: openEuler.conf.example @@ -479,6 +487,9 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne %endif %changelog +* Mon Jun 29 2020 openEuler gengqihu - 050-3 +- quality enhancement synchronization github patch + * Fri May 15 2020 openEuler Buildteam - 050-2 - Fix pre trigger stage by replacing exit with return 0 and 95fcoe default rd.nofcoe to false