diff -urN dracut-037/dracut-functions.sh dracut.dev/dracut-functions.sh --- dracut-037/dracut-functions.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/dracut-functions.sh 2014-05-17 10:31:22.000000000 +0000 @@ -33,7 +33,11 @@ fi # Generic substring function. If $2 is in $1, return 0. -strstr() { [[ $1 = *$2* ]]; } +strstr() { [[ $1 = *"$2"* ]]; } +# Generic glob matching function. If glob pattern $2 matches anywhere in $1, OK +strglobin() { [[ $1 = *$2* ]]; } +# Generic glob matching function. If glob pattern $2 matches all of $1, OK +strglob() { [[ $1 = $2 ]]; } # helper function for check() in module-setup.sh # to check for required installed binaries diff -urN dracut-037/dracut-initramfs-restore.sh dracut.dev/dracut-initramfs-restore.sh --- dracut-037/dracut-initramfs-restore.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/dracut-initramfs-restore.sh 2014-05-17 10:31:22.000000000 +0000 @@ -6,6 +6,10 @@ KERNEL_VERSION="$(uname -r)" +[[ $dracutbasedir ]] || dracutbasedir=/usr/lib/dracut +SKIP="$dracutbasedir/skipcpio" +[[ -x $SKIP ]] || SKIP=cat + [[ -f /etc/machine-id ]] && read MACHINE_ID < /etc/machine-id if [[ $MACHINE_ID ]] && [[ -d /boot/${MACHINE_ID} || -L /boot/${MACHINE_ID} ]] ; then @@ -16,11 +20,11 @@ cd /run/initramfs [ -f .need_shutdown -a -f "$IMG" ] || exit 1 -if zcat "$IMG" | cpio -id --quiet >/dev/null; then +if $SKIP "$IMG" | zcat | cpio -id --no-absolute-filenames --quiet >/dev/null; then rm -f -- .need_shutdown -elif xzcat "$IMG" | cpio -id --quiet >/dev/null; then +elif $SKIP "$IMG" | xzcat | cpio -id --no-absolute-filenames --quiet >/dev/null; then rm -f -- .need_shutdown -elif lz4 -d -c "$IMG" | cpio -id --quiet >/dev/null; then +elif $SKIP "$IMG" | lz4 -d -c | cpio -id --no-absolute-filenames --quiet >/dev/null; then rm -f -- .need_shutdown else # something failed, so we clean up diff -urN dracut-037/dracut.sh dracut.dev/dracut.sh --- dracut-037/dracut.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/dracut.sh 2014-05-17 10:31:22.000000000 +0000 @@ -834,6 +834,13 @@ export DRACUT_KERNEL_LAZY="1" export DRACUT_RESOLVE_LAZY="1" +if [[ $print_cmdline ]]; then + stdloglvl=0 + sysloglvl=0 + fileloglvl=0 + kmsgloglvl=0 +fi + if [[ -f $dracutbasedir/dracut-functions.sh ]]; then . $dracutbasedir/dracut-functions.sh else @@ -907,6 +914,7 @@ dracut_args[$i]="\"${dracut_args[$i]}\"" #" keep vim happy done + dinfo "Executing: $0 ${dracut_args[@]}" [[ $do_list = yes ]] && { diff -urN dracut-037/dracut-version.sh dracut.dev/dracut-version.sh --- dracut-037/dracut-version.sh 2014-03-19 16:17:06.000000000 +0000 +++ dracut.dev/dracut-version.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -DRACUT_VERSION=037 diff -urN dracut-037/lsinitrd.sh dracut.dev/lsinitrd.sh --- dracut-037/lsinitrd.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/lsinitrd.sh 2014-05-17 10:31:22.000000000 +0000 @@ -160,27 +160,35 @@ ;; esac -if [[ $SKIP ]]; then - read -N 6 bin < <($SKIP "$image") -fi - -case $bin in - $'\x1f\x8b'*) - CAT="zcat --";; - BZh*) - CAT="bzcat --";; - $'\x71\xc7'*|070701) - CAT="cat --" - ;; - $'\x02\x21'*) - CAT="lz4 -d -c";; - *) - CAT="xzcat --"; - if echo "test"|xz|xzcat --single-stream >/dev/null 2>&1; then - CAT="xzcat --single-stream --" - fi - ;; -esac +CAT=$({ + if [[ $SKIP ]]; then + $SKIP "$image" + else + cat "$image" + fi } | { + read -N 6 bin + case $bin in + $'\x1f\x8b'*) + echo "zcat --" + ;; + BZh*) + echo "bzcat --" + ;; + $'\x71\xc7'*|070701) + echo "cat --" + ;; + $'\x02\x21'*) + echo "lz4 -d -c" + ;; + *) + if echo "test"|xz|xzcat --single-stream >/dev/null 2>&1; then + echo "xzcat --single-stream --" + else + echo "xzcat --" + fi + ;; + esac + }) skipcpio() { diff -urN dracut-037/modules.d/10i18n/parse-i18n.sh dracut.dev/modules.d/10i18n/parse-i18n.sh --- dracut-037/modules.d/10i18n/parse-i18n.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/10i18n/parse-i18n.sh 2014-05-17 10:31:22.000000000 +0000 @@ -12,7 +12,7 @@ _value="$(getarg $@)" [ -z "${_value}" ] && _value=$_default if [ -n "${_value}" ]; then - printf '%s="%s"\n' $key ${_value} >> $_file + printf '%s="%s"\n' ${_key} ${_value} >> $_file fi unset _file unset _value diff -urN dracut-037/modules.d/40network/dhclient-script.sh dracut.dev/modules.d/40network/dhclient-script.sh --- dracut-037/modules.d/40network/dhclient-script.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/40network/dhclient-script.sh 2014-05-17 10:31:22.000000000 +0000 @@ -64,13 +64,17 @@ 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 ip -6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ - dev ${netif} scope global valid_lft ${lease_time} \ - preferred_lft ${lease_time} + dev ${netif} scope global \ + ${lease_time:+valid_lft $lease_time} \ + ${preferred_lft:+preferred_lft ${preferred_lft}} [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net.$netif.resolv.conf if [ -n "$namesrv" ] ; then diff -urN dracut-037/modules.d/40network/ifup.sh dracut.dev/modules.d/40network/ifup.sh --- dracut-037/modules.d/40network/ifup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/40network/ifup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -130,12 +130,12 @@ # Handle static ip configuration do_static() { - strstr $ip '*:*:*' && load_ipv6 + strglobin $ip '*:*:*' && load_ipv6 linkup $netif [ -n "$macaddr" ] && ip link set address $macaddr dev $netif [ -n "$mtu" ] && ip link set mtu $mtu dev $netif - if strstr $ip '*:*:*'; then + if strglobin $ip '*:*:*'; then # note no ip addr flush for ipv6 ip addr add $ip/$mask ${srv:+peer $srv} dev $netif wait_for_ipv6_dad $netif @@ -364,7 +364,12 @@ # no ip option directed at our interface? if [ ! -e /tmp/net.${netif}.up ]; then - do_dhcp -4 + if getargs 'ip=dhcp6'; then + load_ipv6 + do_dhcp -6 + else + do_dhcp -4 + fi fi exit 0 diff -urN dracut-037/modules.d/40network/net-lib.sh dracut.dev/modules.d/40network/net-lib.sh --- dracut-037/modules.d/40network/net-lib.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/40network/net-lib.sh 2014-05-17 10:31:22.000000000 +0000 @@ -377,7 +377,7 @@ # ip= means anaconda-style static config argument cluster: # ip= gateway= netmask= hostname= mtu= # ksdevice={link|bootif|ibft||} - if strstr "$autoconf" "*.*.*.*"; then + if strglob "$autoconf" "*.*.*.*"; then ip="$autoconf" gw=$(getarg gateway=) mask=$(getarg netmask=) @@ -516,3 +516,27 @@ done return 1 } + +is_persistent_ethernet_name() { + case "$1" in + # udev persistent interface names + eth[0-9]|eth[0-9][0-9]|eth[0-9][0-9][0-9]*) + ;; + eno[0-9]|eno[0-9][0-9]|eno[0-9][0-9][0-9]*) + ;; + ens[0-9]|ens[0-9][0-9]|ens[0-9][0-9][0-9]*) + ;; + enp[0-9]s[0-9]*|enp[0-9][0-9]s[0-9]*|enp[0-9][0-9][0-9]*s[0-9]*) + ;; + enP*p[0-9]s[0-9]*|enP*p[0-9][0-9]s[0-9]*|enP*p[0-9][0-9][0-9]*s[0-9]*) + ;; + # biosdevname + em[0-9]|em[0-9][0-9]|em[0-9][0-9][0-9]*) + ;; + p[0-9]p[0-9]*|p[0-9][0-9]p[0-9]*|p[0-9][0-9][0-9]*p[0-9]*) + ;; + *) + return 1 + esac + return 0 +} diff -urN dracut-037/modules.d/45ifcfg/write-ifcfg.sh dracut.dev/modules.d/45ifcfg/write-ifcfg.sh --- dracut-037/modules.d/45ifcfg/write-ifcfg.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/45ifcfg/write-ifcfg.sh 2014-05-17 10:31:22.000000000 +0000 @@ -3,6 +3,8 @@ # ex: ts=8 sw=4 sts=4 et filetype=sh # NFS root might have reached here before /tmp/net.ifaces was written +type is_persistent_ethernet_name >/dev/null 2>&1 || . /lib/net-lib.sh + udevadm settle --timeout=30 if [ -e /tmp/bridge.info ]; then @@ -85,7 +87,7 @@ netif=${netup%%.did-setup} netif=${netif##*/net.} - strstr "$netif" ":*:*:*:*:" && continue + strglobin "$netif" ":*:*:*:*:" && continue [ -e /tmp/ifcfg/ifcfg-$netif ] && continue unset bridge unset bond @@ -120,9 +122,9 @@ echo "ONBOOT=yes" echo "NETBOOT=yes" echo "UUID=\"$uuid\"" + strstr "$(ip -6 addr show dev $netif)" 'inet6' && echo "IPV6INIT=yes" if [ -f /tmp/dhclient.$netif.lease ]; then [ -f /tmp/dhclient.$netif.dhcpopts ] && . /tmp/dhclient.$netif.dhcpopts - strstr "$ip" '*:*:*' && echo "IPV6INIT=yes" if [ -f /tmp/net.$netif.has_ibft_config ]; then echo "BOOTPROTO=ibft" else @@ -132,7 +134,7 @@ else # If we've booted with static ip= lines, the override file is there [ -e /tmp/net.$netif.override ] && . /tmp/net.$netif.override - if strstr "$ip" '*:*:*'; then + if strglobin "$ip" '*:*:*'; then echo "IPV6INIT=yes" echo "IPV6_AUTOCONF=no" echo "IPV6ADDR=\"$ip/$mask\"" @@ -149,7 +151,7 @@ fi fi fi - if strstr "$gw" '*:*:*'; then + if strglobin "$gw" '*:*:*'; then echo "IPV6_DEFAULTGW=\"$gw\"" elif [ -n "$gw" ]; then echo "GATEWAY=\"$gw\"" @@ -164,7 +166,13 @@ { [ -n "$macaddr" ] && echo "MACADDR=\"$macaddr\"" if ! print_s390 $netif; then - [ -n "$macaddr" ] || echo "HWADDR=\"$(cat /sys/class/net/$netif/address)\"" + if [ -z "$macaddr" ] && \ + ! is_persistent_ethernet_name "$netif" && \ + [ -f /sys/class/net/$netif/addr_assign_type ] && \ + [ "$(cat /sys/class/net/$netif/addr_assign_type)" = "0" ] && \ + [ -f /sys/class/net/$netif/address ]; then + echo "HWADDR=\"$(cat /sys/class/net/$netif/address)\"" + fi fi echo "TYPE=Ethernet" echo "NAME=\"$netif\"" diff -urN dracut-037/modules.d/80cms/cmsifup.sh dracut.dev/modules.d/80cms/cmsifup.sh --- dracut-037/modules.d/80cms/cmsifup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/80cms/cmsifup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -8,7 +8,7 @@ . /tmp/cms.conf -strstr "$IPADDR" '*:*:*' && ipv6=1 +strglobin "$IPADDR" '*:*:*' && ipv6=1 if [ "$ipv6" ] && ! str_starts "$IPADDR" "["; then IPADDR="[$IPADDR]" diff -urN dracut-037/modules.d/80cms/cmssetup.sh dracut.dev/modules.d/80cms/cmssetup.sh --- dracut-037/modules.d/80cms/cmssetup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/80cms/cmssetup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -144,6 +144,7 @@ processcmsfile() { source /tmp/cms.conf + SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')" if [[ $NETTYPE ]]; then ( diff -urN dracut-037/modules.d/80cms/cms-write-ifcfg.sh dracut.dev/modules.d/80cms/cms-write-ifcfg.sh --- dracut-037/modules.d/80cms/cms-write-ifcfg.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/80cms/cms-write-ifcfg.sh 2014-05-17 10:31:22.000000000 +0000 @@ -26,7 +26,7 @@ IFCFGFILE=/run/initramfs/state/etc/sysconfig/network-scripts/ifcfg-$DEVICE - strstr "$IPADDR" '*:*:*' && ipv6=1 + strglobin "$IPADDR" '*:*:*' && ipv6=1 # to please NetworkManager on startup in loader before loader reconfigures net cat > /etc/sysconfig/network << EOF diff -urN dracut-037/modules.d/90dm/module-setup.sh dracut.dev/modules.d/90dm/module-setup.sh --- dracut-037/modules.d/90dm/module-setup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/90dm/module-setup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -16,7 +16,7 @@ # called by dracut installkernel() { instmods =drivers/md - instmods dm_mod + instmods dm_mod dm-cache dm-cache-mq dm-cache-cleaner } # called by dracut diff -urN dracut-037/modules.d/90lvm/module-setup.sh dracut.dev/modules.d/90lvm/module-setup.sh --- dracut-037/modules.d/90lvm/module-setup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/90lvm/module-setup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -80,7 +80,8 @@ inst_rules 11-dm-lvm.rules 69-dm-lvm-metad.rules # Do not run lvmetad update via pvscan in udev rule - lvmetad is not running yet in dracut! - if grep -q SYSTEMD_WANTS ${initdir}/lib/udev/rules.d/69-dm-lvm-metad.rules; then + if [[ -f ${initdir}/lib/udev/rules.d/69-dm-lvm-metad.rules ]] && \ + grep -q SYSTEMD_WANTS ${initdir}/lib/udev/rules.d/69-dm-lvm-metad.rules; then sed -i -e 's/^ENV{SYSTEMD_ALIAS}=.*/# No LVM pvscan in dracut - lvmetad is not running yet/' ${initdir}/lib/udev/rules.d/69-dm-lvm-metad.rules sed -i -e 's/^ENV{ID_MODEL}=.*//' ${initdir}/lib/udev/rules.d/69-dm-lvm-metad.rules sed -i -e 's/^ENV{SYSTEMD_WANTS}=.*//' ${initdir}/lib/udev/rules.d/69-dm-lvm-metad.rules diff -urN dracut-037/modules.d/90mdraid/module-setup.sh dracut.dev/modules.d/90mdraid/module-setup.sh --- dracut-037/modules.d/90mdraid/module-setup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/90mdraid/module-setup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -54,6 +54,8 @@ done ) + [[ -z "$UUID" ]] && continue + if ! [[ ${_activated[${UUID}]} ]]; then printf "%s" " rd.md.uuid=${UUID}" _activated["${UUID}"]=1 diff -urN dracut-037/modules.d/95fcoe/fcoe-genrules.sh dracut.dev/modules.d/95fcoe/fcoe-genrules.sh --- dracut-037/modules.d/95fcoe/fcoe-genrules.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95fcoe/fcoe-genrules.sh 2014-05-17 10:31:22.000000000 +0000 @@ -13,4 +13,4 @@ else printf 'ACTION=="add", SUBSYSTEM=="net", NAME=="%s", RUN+="/sbin/initqueue --onetime --unique --name fcoe-up-$env{INTERFACE} /sbin/fcoe-up $env{INTERFACE} %s"\n' "$fcoe_interface" "$fcoe_dcb" fi -} > /etc/udev/rules.d/92-fcoe.rules +} >> /etc/udev/rules.d/92-fcoe.rules diff -urN dracut-037/modules.d/95fcoe/fcoe-up.sh dracut.dev/modules.d/95fcoe/fcoe-up.sh --- dracut-037/modules.d/95fcoe/fcoe-up.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95fcoe/fcoe-up.sh 2014-05-17 10:31:22.000000000 +0000 @@ -28,12 +28,35 @@ # are to kill it and start a new lldpad to take over. Data is transfered # between the 2 using a shm segment lldpad -d - # stupid tools, need sleep - sleep 1 - dcbtool sc "$netif" dcb on - sleep 1 - dcbtool sc "$netif" app:fcoe e:1 a:1 w:1 + # wait for lldpad to be ready + i=0 + while [ $i -lt 60 ]; do + lldptool -p && break + info "Waiting for lldpad to be ready" + sleep 1 + i=$(($i+1)) + done + + # on some systems lldpad needs some time + # sleep until we find a better solution + sleep 30 + + while [ $i -lt 60 ]; do + dcbtool sc "$netif" dcb on && 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 + i=$(($i+1)) + done + sleep 1 + fipvlan "$netif" -c -s elif [ "$netdriver" = "bnx2x" ]; then # If driver is bnx2x, do not use /sys/module/fcoe/parameters/create but fipvlan diff -urN dracut-037/modules.d/95fcoe/module-setup.sh dracut.dev/modules.d/95fcoe/module-setup.sh --- dracut-037/modules.d/95fcoe/module-setup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95fcoe/module-setup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -21,7 +21,7 @@ # called by dracut install() { - inst_multiple ip dcbtool fipvlan lldpad readlink + inst_multiple ip dcbtool fipvlan lldpad readlink lldptool mkdir -m 0755 -p "$initdir/var/lib/lldpad" diff -urN dracut-037/modules.d/95fstab-sys/mount-sys.sh dracut.dev/modules.d/95fstab-sys/mount-sys.sh --- dracut-037/modules.d/95fstab-sys/mount-sys.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95fstab-sys/mount-sys.sh 2014-05-17 10:31:22.000000000 +0000 @@ -27,7 +27,11 @@ return 0 } -[ -f /etc/fstab ] && fstab_mount /etc/fstab +# systemd will mount and run fsck from /etc/fstab and we don't want to +# run into a race condition. +if [ -z "$DRACUT_SYSTEMD" ]; then + [ -f /etc/fstab ] && fstab_mount /etc/fstab +fi # prefer $NEWROOT/etc/fstab.sys over local /etc/fstab.sys if [ -f $NEWROOT/etc/fstab.sys ]; then diff -urN dracut-037/modules.d/95nbd/nbdroot.sh dracut.dev/modules.d/95nbd/nbdroot.sh --- dracut-037/modules.d/95nbd/nbdroot.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95nbd/nbdroot.sh 2014-05-17 10:31:22.000000000 +0000 @@ -111,6 +111,10 @@ fi fi +if strstr "$(nbd-client --help 2>&1)" "systemd-mark"; then + preopts="--systemd-mark $preopts" +fi + nbd-client $preopts "$nbdserver" $nbdport /dev/nbd0 $opts || exit 1 # NBD doesn't emit uevents when it gets connected, so kick it diff -urN dracut-037/modules.d/95nfs/nfs-lib.sh dracut.dev/modules.d/95nfs/nfs-lib.sh --- dracut-037/modules.d/95nfs/nfs-lib.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95nfs/nfs-lib.sh 2014-05-17 10:31:22.000000000 +0000 @@ -40,7 +40,7 @@ arg="${arg##$nfs:}" # check if we have a server - if strstr "$arg" ':/*' ; then + if strstr "$arg" ':/' ; then server="${arg%%:/*}" arg="/${arg##*:/}" fi diff -urN dracut-037/modules.d/95resume/parse-resume.sh dracut.dev/modules.d/95resume/parse-resume.sh --- dracut-037/modules.d/95resume/parse-resume.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/95resume/parse-resume.sh 2014-05-17 10:31:22.000000000 +0000 @@ -70,9 +70,10 @@ printf '[ -e "%s" ] && { ln -s "%s" /dev/resume; rm -f -- "$job" "%s/initqueue/timeout/resume.sh"; }\n' \ "$resume" "$resume" "$hookdir" >> $hookdir/initqueue/settled/resume.sh - printf -- "%s" 'warn "Cancelling resume operation. Device not found.";' - printf -- ' cancel_wait_for_dev /dev/resume; rm -f -- "$job" "%s/initqueue/settled/resume.sh";\n' \ - "$hookdir" >> $hookdir/initqueue/timeout/resume.sh + { + printf -- "%s" 'warn "Cancelling resume operation. Device not found.";' + printf -- ' cancel_wait_for_dev /dev/resume; rm -f -- "$job" "%s/initqueue/settled/resume.sh";\n' "$hookdir" + } >> $hookdir/initqueue/timeout/resume.sh mv /lib/dracut/resume.sh /lib/dracut/hooks/pre-mount/10-resume.sh else diff -urN dracut-037/modules.d/98systemd/dracut-initqueue.service dracut.dev/modules.d/98systemd/dracut-initqueue.service --- dracut-037/modules.d/98systemd/dracut-initqueue.service 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/98systemd/dracut-initqueue.service 2014-05-17 10:31:22.000000000 +0000 @@ -11,6 +11,8 @@ Description=dracut initqueue hook Documentation=man:dracut-initqueue.service(8) DefaultDependencies=no +Before=remote-fs-pre.target +Wants=remote-fs-pre.target After=systemd-udev-trigger.service Wants=systemd-udev-trigger.service ConditionPathExists=/etc/initrd-release diff -urN dracut-037/modules.d/98systemd/module-setup.sh dracut.dev/modules.d/98systemd/module-setup.sh --- dracut-037/modules.d/98systemd/module-setup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/98systemd/module-setup.sh 2014-05-17 10:31:22.000000000 +0000 @@ -44,6 +44,7 @@ $systemdutildir/systemd-modules-load \ $systemdutildir/systemd-vconsole-setup \ $systemdutildir/system-generators/systemd-fstab-generator \ + $systemdutildir/system-generators/systemd-gpt-auto-generator \ \ $systemdsystemunitdir/cryptsetup.target \ $systemdsystemunitdir/emergency.target \ diff -urN dracut-037/modules.d/99base/dracut-lib.sh dracut.dev/modules.d/99base/dracut-lib.sh --- dracut-037/modules.d/99base/dracut-lib.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/99base/dracut-lib.sh 2014-05-17 10:31:22.000000000 +0000 @@ -20,19 +20,33 @@ [ "$RD_DEBUG" = "yes" ] && set -x } -# returns OK if $1 contains $2 +# returns OK if $1 contains literal string $2 (and isn't empty) strstr() { - [ "${1#*$2*}" != "$1" ] + [ "${1##*"$2"*}" != "$1" ] } -# returns OK if $1 contains $2 at the beginning +# returns OK if $1 matches (completely) glob pattern $2 +# An empty $1 will not be considered matched, even if $2 is * which technically +# matches; as it would match anything, it's not an interesting case. +strglob() { + [ -n "$1" -a -z "${1##$2}" ] +} + +# returns OK if $1 contains (anywhere) a match of glob pattern $2 +# An empty $1 will not be considered matched, even if $2 is * which technically +# matches; as it would match anything, it's not an interesting case. +strglobin() { + [ -n "$1" -a -z "${1##*$2*}" ] +} + +# 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 $2 at the end +# returns OK if $1 contains literal string $2 at the end, and isn't empty str_ends() { - [ "${1%*$2}" != "$1" ] + [ "${1%*"$2"}" != "$1" ] } if [ -z "$DRACUT_SYSTEMD" ]; then @@ -85,9 +99,9 @@ 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}" } @@ -555,7 +569,7 @@ arg="${arg##$nfs:}" # check if we have a server - if strstr "$arg" ':/*' ; then + if strstr "$arg" ':/' ; then server="${arg%%:/*}" arg="/${arg##*:/}" fi @@ -969,6 +983,7 @@ local _cmd local _exe local _rl + local _ret=1 local i _cmd="$1" [ -z "$_cmd" ] && return 1 @@ -983,8 +998,9 @@ fi i=${i%/exe} echo ${i##/proc/} + _ret=0 done - return 0 + return $_ret } fi diff -urN dracut-037/modules.d/99base/init.sh dracut.dev/modules.d/99base/init.sh --- dracut-037/modules.d/99base/init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/99base/init.sh 2014-05-17 10:31:22.000000000 +0000 @@ -353,7 +353,9 @@ # remove helper symlink [ -h /dev/root ] && rm -f -- /dev/root -getarg rd.break -d rdbreak && emergency_shell -n switch_root "Break before switch_root" +bv=$(getarg rd.break -d rdbreak) && [ -z "$bv" ] && + emergency_shell -n switch_root "Break before switch_root" +unset bv info "Switching root" diff -urN dracut-037/modules.d/99fs-lib/module-setup.sh dracut.dev/modules.d/99fs-lib/module-setup.sh --- dracut-037/modules.d/99fs-lib/module-setup.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/modules.d/99fs-lib/module-setup.sh 2014-05-17 10:31:23.000000000 +0000 @@ -17,10 +17,10 @@ local dev=$1 fs=$2 case "$fs" in xfs) - echo -n " xfs_db xfs_repair xfs_check xfs_metadump " + echo -n " xfs_db xfs_repair xfs_check xfs_metadump" ;; ext?) - echo -n " fsck.$fs e2fsck " + echo -n " e2fsck " ;; jfs) echo -n " jfs_fsck " @@ -31,10 +31,10 @@ btrfs) echo -n " btrfsck " ;; - *) - [[ -x fsck.$fs ]] && echo -n " fsck.$fs " - ;; esac + + echo -n " fsck.$fs " + return 0 } include_fs_helper_modules() { diff -urN dracut-037/test/TEST-01-BASIC/test-init.sh dracut.dev/test/TEST-01-BASIC/test-init.sh --- dracut-037/test/TEST-01-BASIC/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-01-BASIC/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh >/dev/watchdog export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-02-SYSTEMD/test-init.sh dracut.dev/test/TEST-02-SYSTEMD/test-init.sh --- dracut-037/test/TEST-02-SYSTEMD/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-02-SYSTEMD/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec /dev/console 2>&1 diff -urN dracut-037/test/TEST-03-USR-MOUNT/test-init.sh dracut.dev/test/TEST-03-USR-MOUNT/test-init.sh --- dracut-037/test/TEST-03-USR-MOUNT/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-03-USR-MOUNT/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh >/dev/watchdog export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec /dev/console 2>&1 diff -urN dracut-037/test/TEST-04-FULL-SYSTEMD/test-init.sh dracut.dev/test/TEST-04-FULL-SYSTEMD/test-init.sh --- dracut-037/test/TEST-04-FULL-SYSTEMD/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-04-FULL-SYSTEMD/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh >/dev/watchdog export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec /dev/console 2>&1 diff -urN dracut-037/test/TEST-10-RAID/test-init.sh dracut.dev/test/TEST-10-RAID/test-init.sh --- dracut-037/test/TEST-10-RAID/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-10-RAID/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) command -v plymouth >/dev/null && plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-11-LVM/test-init.sh dracut.dev/test/TEST-11-LVM/test-init.sh --- dracut-037/test/TEST-11-LVM/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-11-LVM/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-12-RAID-DEG/test-init.sh dracut.dev/test/TEST-12-RAID-DEG/test-init.sh --- dracut-037/test/TEST-12-RAID-DEG/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-12-RAID-DEG/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) command -v plymouth >/dev/null && plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-14-IMSM/test-init.sh dracut.dev/test/TEST-14-IMSM/test-init.sh --- dracut-037/test/TEST-14-IMSM/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-14-IMSM/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-16-DMSQUASH/test-init.sh dracut.dev/test/TEST-16-DMSQUASH/test-init.sh --- dracut-037/test/TEST-16-DMSQUASH/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-16-DMSQUASH/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-17-LVM-THIN/test-init.sh dracut.dev/test/TEST-17-LVM-THIN/test-init.sh --- dracut-037/test/TEST-17-LVM-THIN/test-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-17-LVM-THIN/test-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) plymouth --quit exec >/dev/console 2>&1 diff -urN dracut-037/test/TEST-20-NFS/client-init.sh dracut.dev/test/TEST-20-NFS/client-init.sh --- dracut-037/test/TEST-20-NFS/client-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-20-NFS/client-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -4,7 +4,7 @@ export TERM=linux export PS1='initramfs-test:\w\$ ' CMDLINE=$(while read line; do echo $line;done < /proc/cmdline) -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } stty sane strstr "$CMDLINE" "rd.shell" && sh -i diff -urN dracut-037/test/TEST-50-MULTINIC/client-init.sh dracut.dev/test/TEST-50-MULTINIC/client-init.sh --- dracut-037/test/TEST-50-MULTINIC/client-init.sh 2014-03-19 16:16:08.000000000 +0000 +++ dracut.dev/test/TEST-50-MULTINIC/client-init.sh 2014-05-17 10:31:23.000000000 +0000 @@ -2,14 +2,15 @@ exec >/dev/console 2>&1 set -x export PATH=/sbin:/bin:/usr/sbin:/usr/bin -strstr() { [ "${1#*$2*}" != "$1" ]; } +strstr() { [ "${1##*"$2"*}" != "$1" ]; } +strglobin() { [ -n "$1" -a -z "${1##*$2*}" ]; } CMDLINE=$(while read 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." for i in /run/initramfs/net.*.did-setup; do - strstr "$i" ":*:*:*:*:" && continue + strglobin "$i" ":*:*:*:*:" && continue i=${i%.did-setup} IFACES+="${i##*/net.} " done