dracut-027-17.git20130409
- only include needed /etc/crypttab entries Resolves:rhbz#919752 - add support for bridge over team and vlan - support multiple bonding interfaces - add "action_on_fail=" kernel command line parameter - add support for bridge over a vlan tagged interface
This commit is contained in:
parent
38a2ddf58a
commit
ab11ed5290
@ -0,0 +1,29 @@
|
||||
From 41bfa5dad1d0a1ccdef70bd74068e5d4d67d5e27 Mon Sep 17 00:00:00 2001
|
||||
From: Harald Hoyer <harald@redhat.com>
|
||||
Date: Fri, 5 Apr 2013 16:34:36 +0200
|
||||
Subject: [PATCH] nfs/module-setup.sh: combine egreps for /etc/passwd and
|
||||
/etc/group
|
||||
|
||||
---
|
||||
modules.d/95nfs/module-setup.sh | 8 ++------
|
||||
1 file changed, 2 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
|
||||
index 7c3a64d..6d4d412 100755
|
||||
--- a/modules.d/95nfs/module-setup.sh
|
||||
+++ b/modules.d/95nfs/module-setup.sh
|
||||
@@ -62,12 +62,8 @@ install() {
|
||||
|
||||
# Rather than copy the passwd file in, just set a user for rpcbind
|
||||
# We'll save the state and restart the daemon from the root anyway
|
||||
- egrep '^nfsnobody:' /etc/passwd >> "$initdir/etc/passwd"
|
||||
- egrep '^rpc:' /etc/passwd >> "$initdir/etc/passwd"
|
||||
- egrep '^rpcuser:' /etc/passwd >> "$initdir/etc/passwd"
|
||||
- #type -P nologin >/dev/null && dracut_install nologin
|
||||
- egrep '^nobody:' /etc/group >> "$initdir/etc/group"
|
||||
- egrep '^rpc:' /etc/group >> "$initdir/etc/group"
|
||||
+ egrep '^nfsnobody:|^rpc:|^rpcuser:' /etc/passwd >> "$initdir/etc/passwd"
|
||||
+ egrep '^nogroup:|^rpc:|^nobody:' /etc/group >> "$initdir/etc/group"
|
||||
|
||||
# rpc user needs to be able to write to this directory to save the warmstart
|
||||
# file
|
209
0011-dracut-functions.sh-make-use-of-findmnt.patch
Normal file
209
0011-dracut-functions.sh-make-use-of-findmnt.patch
Normal file
@ -0,0 +1,209 @@
|
||||
From 9d36d4fb1d0774d9ef0597abb79390e88771bf1e Mon Sep 17 00:00:00 2001
|
||||
From: Harald Hoyer <harald@redhat.com>
|
||||
Date: Tue, 9 Apr 2013 10:47:39 +0200
|
||||
Subject: [PATCH] dracut-functions.sh: make use of findmnt
|
||||
|
||||
---
|
||||
dracut-functions.sh | 163 +++++++++++++++++++++-------------------------------
|
||||
1 file changed, 64 insertions(+), 99 deletions(-)
|
||||
|
||||
diff --git a/dracut-functions.sh b/dracut-functions.sh
|
||||
index eba7412..96d3c6e 100755
|
||||
--- a/dracut-functions.sh
|
||||
+++ b/dracut-functions.sh
|
||||
@@ -319,131 +319,96 @@ get_maj_min() {
|
||||
# $ find_block_device /usr
|
||||
# 8:4
|
||||
find_block_device() {
|
||||
- local _x _mpt _majmin _dev _fs _maj _min _find_mpt
|
||||
+ local _majmin _dev _majmin _find_mpt
|
||||
_find_mpt="$1"
|
||||
if [[ $use_fstab != yes ]]; then
|
||||
- while read _x; do
|
||||
- set -- $_x
|
||||
- _majmin="$3"
|
||||
- _mpt="$5"
|
||||
- [[ $8 = "-" ]] && shift
|
||||
- _fs="$8"
|
||||
- _dev="$9"
|
||||
- [[ $_mpt = $_find_mpt ]] || continue
|
||||
- [[ $_fs = nfs ]] && { echo $_dev; return 0;}
|
||||
- [[ $_fs = nfs3 ]] && { echo $_dev; return 0;}
|
||||
- [[ $_fs = nfs4 ]] && { echo $_dev; return 0;}
|
||||
- [[ $_fs = btrfs ]] && {
|
||||
- get_maj_min $_dev
|
||||
- return 0;
|
||||
- }
|
||||
- if [[ ${_majmin#0:} = $_majmin ]]; then
|
||||
- echo $_majmin
|
||||
- return 0 # we have a winner!
|
||||
+ [[ -d $_find_mpt/. ]]
|
||||
+ while read _majmin _dev; do
|
||||
+ if [[ -b $_dev ]]; then
|
||||
+ if ! [[ $_majmin ]] || [[ $_majmin == 0:* ]]; then
|
||||
+ read _majmin < <(get_maj_min $_dev)
|
||||
+ fi
|
||||
+ if [[ $_majmin ]]; then
|
||||
+ echo $_majmin
|
||||
+ else
|
||||
+ echo $_dev
|
||||
+ fi
|
||||
+ return 0
|
||||
+ fi
|
||||
+ if [[ $_dev = *:* ]]; then
|
||||
+ echo $_dev
|
||||
+ return 0
|
||||
fi
|
||||
- done < /proc/self/mountinfo
|
||||
+ done < <(findmnt -e -v -n -o 'MAJ:MIN,SOURCE' "$_find_mpt")
|
||||
fi
|
||||
# fall back to /etc/fstab
|
||||
- while read _dev _mpt _fs _x; do
|
||||
- [ "${_dev%%#*}" != "$_dev" ] && continue
|
||||
-
|
||||
- if [[ $_mpt = $_find_mpt ]]; then
|
||||
- [[ $_fs = nfs ]] && { echo $_dev; return 0;}
|
||||
- [[ $_fs = nfs3 ]] && { echo $_dev; return 0;}
|
||||
- [[ $_fs = nfs4 ]] && { echo $_dev; return 0;}
|
||||
- [[ $_dev != ${_dev#UUID=} ]] && _dev=/dev/disk/by-uuid/${_dev#UUID=}
|
||||
- [[ $_dev != ${_dev#LABEL=} ]] && _dev=/dev/disk/by-label/${_dev#LABEL=}
|
||||
- [[ -b $_dev ]] || return 1 # oops, not a block device.
|
||||
- get_maj_min "$_dev" && return 0
|
||||
+
|
||||
+ while read _majmin _dev; do
|
||||
+ if ! [[ $_dev ]]; then
|
||||
+ _dev="$_majmin"
|
||||
+ unset _majmin
|
||||
+ fi
|
||||
+ if [[ -b $_dev ]]; then
|
||||
+ [[ $_majmin ]] || read _majmin < <(get_maj_min $_dev)
|
||||
+ if [[ $_majmin ]]; then
|
||||
+ echo $_majmin
|
||||
+ else
|
||||
+ echo $_dev
|
||||
+ fi
|
||||
+ return 0
|
||||
+ fi
|
||||
+ if [[ $_dev = *:* ]]; then
|
||||
+ echo $_dev
|
||||
+ return 0
|
||||
fi
|
||||
- done < /etc/fstab
|
||||
+ done < <(findmnt -e --fstab -v -n -o 'MAJ:MIN,SOURCE' "$_find_mpt")
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
-# find_dev_fstype <device>
|
||||
-# Echo the filesystem type for a given device.
|
||||
+# find_mp_fstype <mountpoint>
|
||||
+# Echo the filesystem type for a given mountpoint.
|
||||
# /proc/self/mountinfo is taken as the primary source of information
|
||||
# and /etc/fstab is used as a fallback.
|
||||
# No newline is appended!
|
||||
# Example:
|
||||
-# $ find_dev_fstype /dev/sda2;echo
|
||||
+# $ find_mp_fstype /;echo
|
||||
# ext4
|
||||
-find_dev_fstype() {
|
||||
- local _x _mpt _majmin _dev _fs _maj _min _find_dev
|
||||
- _find_dev="$1"
|
||||
- strstr "$_find_dev" "/dev" || _find_dev="/dev/block/$_find_dev"
|
||||
- while read _x; do
|
||||
- set -- $_x
|
||||
- _majmin="$3"
|
||||
- _mpt="$5"
|
||||
- [[ $8 = "-" ]] && shift
|
||||
- _fs="$8"
|
||||
- _dev="$9"
|
||||
- strstr "$_dev" "/dev" || continue
|
||||
- [[ $_dev -ef $_find_dev ]] || continue
|
||||
- [[ $_fs = "autofs" ]] && continue
|
||||
- echo -n $_fs;
|
||||
- return 0;
|
||||
- done < /proc/self/mountinfo
|
||||
+find_mp_fstype() {
|
||||
+ local _fs
|
||||
|
||||
- # fall back to /etc/fstab
|
||||
- while read _dev _mpt _fs _x; do
|
||||
- [ "${_dev%%#*}" != "$_dev" ] && continue
|
||||
- case "$_dev" in
|
||||
- LABEL=*)
|
||||
- _dev="$(echo $_dev | sed 's,/,\\x2f,g')"
|
||||
- _dev="/dev/disk/by-label/${_dev#LABEL=}"
|
||||
- ;;
|
||||
- UUID=*)
|
||||
- _dev="/dev/disk/by-uuid/${_dev#UUID=}"
|
||||
- ;;
|
||||
- PARTUUID=*)
|
||||
- _dev="/dev/disk/by-partuuid/${_dev#PARTUUID=}"
|
||||
- ;;
|
||||
- esac
|
||||
+ if [[ $use_fstab != yes ]]; then
|
||||
+ while read _fs; do
|
||||
+ [[ $_fs ]] || continue
|
||||
+ [[ $_fs = "autofs" ]] && continue
|
||||
+ echo -n $_fs
|
||||
+ return 0
|
||||
+ done < <(findmnt -e -v -n -o 'FSTYPE' "$1")
|
||||
+ fi
|
||||
|
||||
- [[ $_dev -ef $_find_dev ]] || continue
|
||||
- echo -n $_fs;
|
||||
- return 0;
|
||||
- done < /etc/fstab
|
||||
+ while read _fs; do
|
||||
+ [[ $_fs ]] || continue
|
||||
+ [[ $_fs = "autofs" ]] && continue
|
||||
+ echo -n $_fs
|
||||
+ return 0
|
||||
+ done < <(findmnt --fstab -e -v -n -o 'FSTYPE' "$1")
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
-# find_mp_fstype <mountpoint>
|
||||
-# Echo the filesystem type for a given mountpoint.
|
||||
+# find_dev_fstype <device>
|
||||
+# Echo the filesystem type for a given device.
|
||||
# /proc/self/mountinfo is taken as the primary source of information
|
||||
# and /etc/fstab is used as a fallback.
|
||||
# No newline is appended!
|
||||
# Example:
|
||||
-# $ find_mp_fstype /;echo
|
||||
+# $ find_dev_fstype /dev/sda2;echo
|
||||
# ext4
|
||||
-find_mp_fstype() {
|
||||
- local _x _mpt _majmin _dev _fs _maj _min _find_mpt
|
||||
- _find_mpt="$1"
|
||||
- while read _x; do
|
||||
- set -- $_x
|
||||
- _majmin="$3"
|
||||
- _mpt="$5"
|
||||
- [[ $8 = "-" ]] && shift
|
||||
- _fs="$8"
|
||||
- _dev="$9"
|
||||
- [[ $_mpt = $_find_mpt ]] || continue
|
||||
- [[ $_fs = "autofs" ]] && continue
|
||||
- echo -n $_fs;
|
||||
- return 0;
|
||||
- done < /proc/self/mountinfo
|
||||
-
|
||||
- # fall back to /etc/fstab
|
||||
- while read _dev _mpt _fs _x; do
|
||||
- [ "${_dev%%#*}" != "$_dev" ] && continue
|
||||
- [[ $_mpt = $_find_mpt ]] || continue
|
||||
- echo -n $_fs;
|
||||
- return 0;
|
||||
- done < /etc/fstab
|
||||
-
|
||||
- return 1
|
||||
+find_dev_fstype() {
|
||||
+ local _x _mpt _majmin _dev _fs _maj _min _find_dev
|
||||
+ _find_dev="$1"
|
||||
+ [[ "$_find_dev" = /dev* ]] || _find_dev="/dev/block/$_find_dev"
|
||||
+ find_mp_fstype "$_find_dev"
|
||||
}
|
||||
|
||||
# finds the major:minor of the block device backing the root filesystem.
|
@ -0,0 +1,38 @@
|
||||
From 96efbc51acd7f65f0f254b17d87da7d0465032c1 Mon Sep 17 00:00:00 2001
|
||||
From: Harald Hoyer <harald@redhat.com>
|
||||
Date: Tue, 9 Apr 2013 10:48:26 +0200
|
||||
Subject: [PATCH] crypt/module-setup.sh: filter /etc/crypttab in host-only mode
|
||||
|
||||
only take those /etc/crypttab entries, which we need to boot the system
|
||||
---
|
||||
modules.d/90crypt/module-setup.sh | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
|
||||
index b76f6ae..3c9a1f1 100755
|
||||
--- a/modules.d/90crypt/module-setup.sh
|
||||
+++ b/modules.d/90crypt/module-setup.sh
|
||||
@@ -56,7 +56,22 @@ install() {
|
||||
if ! dracut_module_included "systemd"; then
|
||||
inst_hook cleanup 30 "$moddir/crypt-cleanup.sh"
|
||||
fi
|
||||
- [[ $hostonly ]] && inst_simple /etc/crypttab
|
||||
+
|
||||
+ if [[ $hostonly ]]; then
|
||||
+ # filter /etc/crypttab for the devices we need
|
||||
+ while read _mapper _dev _rest; do
|
||||
+ [[ $_mapper = \#* ]] && continue
|
||||
+ [[ $_dev ]] || continue
|
||||
+ for _hdev in "${!host_fs_types[@]}"; do
|
||||
+ [[ ${host_fs_types[$_hdev]} == "crypto_LUKS" ]] || continue
|
||||
+ if [[ $_hdev -ef $_dev ]] || [[ /dev/block/$_hdev -ef $_dev ]]; then
|
||||
+ echo "$_mapper $_dev $_rest"
|
||||
+ break
|
||||
+ fi
|
||||
+ done
|
||||
+ done < /etc/crypttab > $initdir/etc/crypttab
|
||||
+ fi
|
||||
+
|
||||
inst_simple "$moddir/crypt-lib.sh" "/lib/dracut-crypt-lib.sh"
|
||||
|
||||
dracut_install -o \
|
@ -0,0 +1,54 @@
|
||||
From a55f910cf6f13e1a6d9d5be769297ee3ecc64bb9 Mon Sep 17 00:00:00 2001
|
||||
From: WANG Chao <chaowang@redhat.com>
|
||||
Date: Mon, 1 Apr 2013 20:34:40 +0800
|
||||
Subject: [PATCH] ifup.sh: Add support for bridge over team and vlan tagged
|
||||
team
|
||||
|
||||
Team is the same network stack as bonding. Therefore give ifup the ability to
|
||||
handle bridge over team and vlan tagged team as bonding too.
|
||||
|
||||
Signed-off-by: WANG Chao <chaowang@redhat.com>
|
||||
---
|
||||
modules.d/40network/ifup.sh | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
|
||||
index 582278f..815ab64 100755
|
||||
--- a/modules.d/40network/ifup.sh
|
||||
+++ b/modules.d/40network/ifup.sh
|
||||
@@ -46,6 +46,8 @@ if [ -e /tmp/bridge.info ]; then
|
||||
if [ "$netif" = "$ethname" ]; then
|
||||
if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
|
||||
: # We need to really setup bond (recursive call)
|
||||
+ elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
|
||||
+ : # We need to really setup team (recursive call)
|
||||
else
|
||||
netif="$bridgename"
|
||||
use_bridge='true'
|
||||
@@ -59,6 +61,8 @@ if [ -e /tmp/vlan.info ]; then
|
||||
if [ "$netif" = "$phydevice" ]; then
|
||||
if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
|
||||
: # We need to really setup bond (recursive call)
|
||||
+ elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
|
||||
+ : # We need to really setup team (recursive call)
|
||||
else
|
||||
netif="$vlanname"
|
||||
use_vlan='true'
|
||||
@@ -212,6 +216,8 @@ if [ -e /tmp/bridge.info ]; then
|
||||
for ethname in $ethnames ; do
|
||||
if [ "$ethname" = "$bondname" ] ; then
|
||||
DO_BOND_SETUP=yes ifup $bondname -m
|
||||
+ elif [ "$ethname" = "$teammaster" ] ; then
|
||||
+ DO_TEAM_SETUP=yes ifup $teammaster -m
|
||||
else
|
||||
linkup $ethname
|
||||
fi
|
||||
@@ -235,6 +241,8 @@ if [ "$netif" = "$vlanname" ] && [ ! -e /tmp/net.$vlanname.up ]; then
|
||||
modprobe 8021q
|
||||
if [ "$phydevice" = "$bondname" ] ; then
|
||||
DO_BOND_SETUP=yes ifup $phydevice -m
|
||||
+ elif [ "$phydevice" = "$teammaster" ] ; then
|
||||
+ DO_TEAM_SETUP=yes ifup $phydevice -m
|
||||
else
|
||||
linkup "$phydevice"
|
||||
fi
|
145
0014-network-support-multiple-bonding-interfaces.patch
Normal file
145
0014-network-support-multiple-bonding-interfaces.patch
Normal file
@ -0,0 +1,145 @@
|
||||
From d136ca4eeb3d7be2beef210dcf51a18210900844 Mon Sep 17 00:00:00 2001
|
||||
From: Harald Hoyer <harald@redhat.com>
|
||||
Date: Mon, 8 Apr 2013 17:47:49 +0800
|
||||
Subject: [PATCH] network: support multiple bonding interfaces
|
||||
|
||||
Currently dracut only support 1 bond, namyly bond0 by default. However multiple
|
||||
bonds configuration may be needed. For example in kdump, in 1st kernel, more
|
||||
than one bonds may be configured, and bondX other than bond0 is used as output
|
||||
interface to remote host which will store dump core. This patch can solve this
|
||||
problem, to write real bond information to initramfs, 2nd kdump kernel will
|
||||
use it to create the relevant bondX interface.
|
||||
|
||||
Tested-by: Baoquan He <bhe@redhat.com>
|
||||
Signed-off-by: Baoquan He <bhe@redhat.com>
|
||||
---
|
||||
modules.d/40network/ifup.sh | 15 ++++++++++-----
|
||||
modules.d/40network/net-genrules.sh | 9 ++++++---
|
||||
modules.d/40network/parse-bond.sh | 6 +++---
|
||||
modules.d/40network/parse-bridge.sh | 6 ------
|
||||
modules.d/45ifcfg/write-ifcfg.sh | 9 +++++----
|
||||
5 files changed, 24 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
|
||||
index 815ab64..593f387 100755
|
||||
--- a/modules.d/40network/ifup.sh
|
||||
+++ b/modules.d/40network/ifup.sh
|
||||
@@ -21,14 +21,18 @@ use_bridge='false'
|
||||
use_vlan='false'
|
||||
|
||||
# enslave this interface to bond?
|
||||
-if [ -e /tmp/bond.info ]; then
|
||||
- . /tmp/bond.info
|
||||
+for i in /tmp/bond.*.info; do
|
||||
+ [ -e "$i" ] || continue
|
||||
+ unset bondslaves
|
||||
+ unset bondname
|
||||
+ . "$i"
|
||||
for slave in $bondslaves ; do
|
||||
if [ "$netif" = "$slave" ] ; then
|
||||
netif=$bondname
|
||||
+ break 2
|
||||
fi
|
||||
done
|
||||
-fi
|
||||
+done
|
||||
|
||||
if [ -e /tmp/team.info ]; then
|
||||
. /tmp/team.info
|
||||
@@ -138,11 +142,12 @@ if [ "$netif" = "lo" ] ; then
|
||||
fi
|
||||
|
||||
# start bond if needed
|
||||
-if [ -e /tmp/bond.info ]; then
|
||||
- . /tmp/bond.info
|
||||
+if [ -e /tmp/bond.${netif}.info ]; then
|
||||
+ . /tmp/bond.${netif}.info
|
||||
|
||||
if [ "$netif" = "$bondname" ] && [ ! -e /tmp/net.$bondname.up ] ; then # We are master bond device
|
||||
modprobe bonding
|
||||
+ echo "+$netif" > /sys/class/net/bonding_masters
|
||||
ip link set $netif down
|
||||
|
||||
# Stolen from ifup-eth
|
||||
diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
|
||||
index f4652b9..05fa5f3 100755
|
||||
--- a/modules.d/40network/net-genrules.sh
|
||||
+++ b/modules.d/40network/net-genrules.sh
|
||||
@@ -28,11 +28,14 @@ fi
|
||||
fi
|
||||
|
||||
# bond: attempt only the defined interface (override bridge defines)
|
||||
- if [ -e /tmp/bond.info ]; then
|
||||
- . /tmp/bond.info
|
||||
+ for i in /tmp/bond.*.info; do
|
||||
+ [ -e "$i" ] || continue
|
||||
+ unset bondslaves
|
||||
+ unset bondname
|
||||
+ . "$i"
|
||||
# It is enough to fire up only one
|
||||
IFACES="$IFACES ${bondslaves%% *}"
|
||||
- fi
|
||||
+ done
|
||||
|
||||
if [ -e /tmp/team.info ]; then
|
||||
. /tmp/team.info
|
||||
diff --git a/modules.d/40network/parse-bond.sh b/modules.d/40network/parse-bond.sh
|
||||
index 983eb3a..25c51b8 100755
|
||||
--- a/modules.d/40network/parse-bond.sh
|
||||
+++ b/modules.d/40network/parse-bond.sh
|
||||
@@ -54,8 +54,8 @@ if getarg bond >/dev/null; then
|
||||
fi
|
||||
# Make it suitable for initscripts export
|
||||
bondoptions=$(str_replace "$bondoptions" ";" ",")
|
||||
- echo "bondname=$bondname" > /tmp/bond.info
|
||||
- echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.info
|
||||
- echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.info
|
||||
+ echo "bondname=$bondname" > /tmp/bond.${bondname}.info
|
||||
+ echo "bondslaves=\"$bondslaves\"" >> /tmp/bond.${bondname}.info
|
||||
+ echo "bondoptions=\"$bondoptions\"" >> /tmp/bond.${bondname}.info
|
||||
return
|
||||
fi
|
||||
diff --git a/modules.d/40network/parse-bridge.sh b/modules.d/40network/parse-bridge.sh
|
||||
index 1f027bb..8c305c0 100755
|
||||
--- a/modules.d/40network/parse-bridge.sh
|
||||
+++ b/modules.d/40network/parse-bridge.sh
|
||||
@@ -37,12 +37,6 @@ parsebridge() {
|
||||
unset bridgename ethnames
|
||||
|
||||
iface=eth0
|
||||
-if [ -e /tmp/bond.info ]; then
|
||||
- . /tmp/bond.info
|
||||
- if [ -n "$bondname" ] ; then
|
||||
- iface=$bondname
|
||||
- fi
|
||||
-fi
|
||||
|
||||
# Parse bridge for bridgename and ethnames
|
||||
if bridge="$(getarg bridge)"; then
|
||||
diff --git a/modules.d/45ifcfg/write-ifcfg.sh b/modules.d/45ifcfg/write-ifcfg.sh
|
||||
index f7a476c..16da5e4 100755
|
||||
--- a/modules.d/45ifcfg/write-ifcfg.sh
|
||||
+++ b/modules.d/45ifcfg/write-ifcfg.sh
|
||||
@@ -9,10 +9,6 @@ udevadm settle --timeout=30
|
||||
|
||||
read IFACES < /tmp/net.ifaces
|
||||
|
||||
-if [ -e /tmp/bond.info ]; then
|
||||
- . /tmp/bond.info
|
||||
-fi
|
||||
-
|
||||
if [ -e /tmp/bridge.info ]; then
|
||||
. /tmp/bridge.info
|
||||
fi
|
||||
@@ -89,6 +85,11 @@ for netif in $IFACES ; do
|
||||
# bridge?
|
||||
unset bridge
|
||||
unset bond
|
||||
+ unset bondslaves
|
||||
+ unset bondname
|
||||
+ unset bondoptions
|
||||
+ [ -e /tmp/bond.${netif}.info ] && . /tmp/bond.${netif}.info
|
||||
+
|
||||
uuid=$(cat /proc/sys/kernel/random/uuid)
|
||||
if [ "$netif" = "$bridgename" ]; then
|
||||
bridge=yes
|
57
0015-Wait-for-logical-interface-to-be-up.patch
Normal file
57
0015-Wait-for-logical-interface-to-be-up.patch
Normal file
@ -0,0 +1,57 @@
|
||||
From 0290e98271af41423e16801b959779c945ee4d59 Mon Sep 17 00:00:00 2001
|
||||
From: Baoquan He <bhe@redhat.com>
|
||||
Date: Mon, 8 Apr 2013 17:47:50 +0800
|
||||
Subject: [PATCH] Wait for logical interface to be up
|
||||
|
||||
If bootdev is logical interface like bond, bridge or vlan, we need
|
||||
wait them up.
|
||||
|
||||
Signed-off-by: Baoquan He <bhe@redhat.com>
|
||||
---
|
||||
modules.d/40network/net-genrules.sh | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
|
||||
index 05fa5f3..8bf6a89 100755
|
||||
--- a/modules.d/40network/net-genrules.sh
|
||||
+++ b/modules.d/40network/net-genrules.sh
|
||||
@@ -25,6 +25,7 @@ fi
|
||||
if [ -e /tmp/bridge.info ]; then
|
||||
. /tmp/bridge.info
|
||||
IFACES="$IFACES ${ethnames%% *}"
|
||||
+ MASTER_IFACES="$MASTER_IFACES $bridgename"
|
||||
fi
|
||||
|
||||
# bond: attempt only the defined interface (override bridge defines)
|
||||
@@ -35,16 +36,19 @@ fi
|
||||
. "$i"
|
||||
# It is enough to fire up only one
|
||||
IFACES="$IFACES ${bondslaves%% *}"
|
||||
+ MASTER_IFACES="$MASTER_IFACES ${bondname}"
|
||||
done
|
||||
|
||||
if [ -e /tmp/team.info ]; then
|
||||
. /tmp/team.info
|
||||
IFACES="$IFACES ${teamslaves}"
|
||||
+ MASTER_IFACES="$MASTER_IFACES ${teammaster}"
|
||||
fi
|
||||
|
||||
if [ -e /tmp/vlan.info ]; then
|
||||
. /tmp/vlan.info
|
||||
IFACES="$IFACES $phydevice"
|
||||
+ MASTER_IFACES="$MASTER_IFACES ${vlanname}"
|
||||
fi
|
||||
|
||||
if [ -z "$IFACES" ]; then
|
||||
@@ -74,6 +78,11 @@ fi
|
||||
fi
|
||||
done
|
||||
|
||||
+ for iface in $MASTER_IFACES; do
|
||||
+ if [ "$bootdev" = "$iface" ]; then
|
||||
+ echo "[ -f /tmp/setup_net_${iface}.ok ]" >$hookdir/initqueue/finished/wait-$iface.sh
|
||||
+ fi
|
||||
+ done
|
||||
# Default: We don't know the interface to use, handle all
|
||||
# Fixme: waiting for the interface as well.
|
||||
else
|
222
0016-Let-user-specify-the-action-after-fail.patch
Normal file
222
0016-Let-user-specify-the-action-after-fail.patch
Normal file
@ -0,0 +1,222 @@
|
||||
From 9d787df19674937e8c07bd295b5d282a63829209 Mon Sep 17 00:00:00 2001
|
||||
From: Baoquan He <bhe@redhat.com>
|
||||
Date: Fri, 29 Mar 2013 18:36:16 +0800
|
||||
Subject: [PATCH] Let user specify the action after fail
|
||||
|
||||
Currently the default action is emergency_shell when failure happened
|
||||
during system boot. In kdump, this default may not be expected. E.g,
|
||||
if dump target is not rootfs, it does not matter if mount root failed.
|
||||
Adding an action which allow dracut always go ahead though failure
|
||||
happens is needed by kdump.
|
||||
|
||||
So here add a function action_on_fail() and cmdline parameter
|
||||
action_on_fail=<shell | continue>. Use action_to_fail() to replace
|
||||
emergency_shell which was called after failure. By $(getarg action_on_fail=),
|
||||
decide to drop into shell, or to leave away the failure and go ahead.
|
||||
|
||||
v3->v4:
|
||||
add handling of selinux policy loaded failure, and change code format to
|
||||
be consitent
|
||||
|
||||
Signed-off-by: Baoquan He <bhe@redhat.com>
|
||||
|
||||
[Edited by harald@redhat.com]
|
||||
---
|
||||
dracut.cmdline.7.asc | 4 ++++
|
||||
modules.d/95rootfs-block/mount-root.sh | 2 +-
|
||||
modules.d/98selinux/selinux-loadpolicy.sh | 6 ++----
|
||||
modules.d/98systemd/dracut-initqueue.sh | 2 +-
|
||||
modules.d/98systemd/dracut-mount.sh | 2 +-
|
||||
modules.d/98usrmount/mount-usr.sh | 4 ++--
|
||||
modules.d/99base/dracut-lib.sh | 22 ++++++++++++++++++++++
|
||||
modules.d/99base/init.sh | 12 ++++++------
|
||||
8 files changed, 39 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/dracut.cmdline.7.asc b/dracut.cmdline.7.asc
|
||||
index f1457d5..4626279 100644
|
||||
--- a/dracut.cmdline.7.asc
|
||||
+++ b/dracut.cmdline.7.asc
|
||||
@@ -121,6 +121,10 @@ Misc
|
||||
specify the controlling terminal for the console.
|
||||
This is useful, if you have multiple "console=" arguments.
|
||||
|
||||
+**action_on_fail=**_{shell|continue}_::
|
||||
+ Specify the action after failure. By default it's emergency_shell.
|
||||
+ 'continue' means: ignore the current failure and go ahead.
|
||||
+
|
||||
[[dracutkerneldebug]]
|
||||
Debug
|
||||
~~~~~
|
||||
diff --git a/modules.d/95rootfs-block/mount-root.sh b/modules.d/95rootfs-block/mount-root.sh
|
||||
index c7626c3..6ed35c1 100755
|
||||
--- a/modules.d/95rootfs-block/mount-root.sh
|
||||
+++ b/modules.d/95rootfs-block/mount-root.sh
|
||||
@@ -68,7 +68,7 @@ mount_root() {
|
||||
warn "*** Warning -- the system did not shut down cleanly. "
|
||||
warn "*** Dropping you to a shell; the system will continue"
|
||||
warn "*** when you leave the shell."
|
||||
- emergency_shell
|
||||
+ action_on_fail
|
||||
fi
|
||||
fsckoptions="$AUTOFSCK_OPT $fsckoptions"
|
||||
fi
|
||||
diff --git a/modules.d/98selinux/selinux-loadpolicy.sh b/modules.d/98selinux/selinux-loadpolicy.sh
|
||||
index d6e24d6..7526265 100755
|
||||
--- a/modules.d/98selinux/selinux-loadpolicy.sh
|
||||
+++ b/modules.d/98selinux/selinux-loadpolicy.sh
|
||||
@@ -52,16 +52,14 @@ rd_load_policy()
|
||||
if [ $ret -eq 3 -o $permissive -eq 0 ]; then
|
||||
warn "Machine in enforcing mode."
|
||||
warn "Not continuing"
|
||||
- emergency_shell -n selinux
|
||||
- exit 1
|
||||
+ action_on_fail -n selinux || exit 1
|
||||
fi
|
||||
return 0
|
||||
elif [ $permissive -eq 0 -a "$SELINUX" != "disabled" ]; then
|
||||
warn "Machine in enforcing mode and cannot execute load_policy."
|
||||
warn "To disable selinux, add selinux=0 to the kernel command line."
|
||||
warn "Not continuing"
|
||||
- emergency_shell -n selinux
|
||||
- exit 1
|
||||
+ action_on_fail -n selinux || exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
diff --git a/modules.d/98systemd/dracut-initqueue.sh b/modules.d/98systemd/dracut-initqueue.sh
|
||||
index c6fab30..2c71bf4 100755
|
||||
--- a/modules.d/98systemd/dracut-initqueue.sh
|
||||
+++ b/modules.d/98systemd/dracut-initqueue.sh
|
||||
@@ -62,7 +62,7 @@ while :; do
|
||||
fi
|
||||
|
||||
main_loop=$(($main_loop+1))
|
||||
- [ $main_loop -gt $RDRETRY ] && emergency_shell "Could not boot."
|
||||
+ [ $main_loop -gt $RDRETRY ] && action_on_fail "Could not boot." && break
|
||||
done
|
||||
|
||||
unset job
|
||||
diff --git a/modules.d/98systemd/dracut-mount.sh b/modules.d/98systemd/dracut-mount.sh
|
||||
index 5f3d9f0..ae01512 100755
|
||||
--- a/modules.d/98systemd/dracut-mount.sh
|
||||
+++ b/modules.d/98systemd/dracut-mount.sh
|
||||
@@ -31,7 +31,7 @@ while :; do
|
||||
done
|
||||
|
||||
i=$(($i+1))
|
||||
- [ $i -gt 20 ] && emergency_shell "Can't mount root filesystem"
|
||||
+ [ $i -gt 20 ] && action_on_fail "Can't mount root filesystem" && break
|
||||
done
|
||||
|
||||
export -p > /dracut-state.sh
|
||||
diff --git a/modules.d/98usrmount/mount-usr.sh b/modules.d/98usrmount/mount-usr.sh
|
||||
index 5aaefbc..a4a66ae 100755
|
||||
--- a/modules.d/98usrmount/mount-usr.sh
|
||||
+++ b/modules.d/98usrmount/mount-usr.sh
|
||||
@@ -42,7 +42,7 @@ fsck_usr()
|
||||
warn "*** Warning -- the system did not shut down cleanly. "
|
||||
warn "*** Dropping you to a shell; the system will continue"
|
||||
warn "*** when you leave the shell."
|
||||
- emergency_shell
|
||||
+ action_on_fail
|
||||
fi
|
||||
_fsckoptions="$AUTOFSCK_OPT $_fsckoptions"
|
||||
fi
|
||||
@@ -105,7 +105,7 @@ mount_usr()
|
||||
warn "Mounting /usr to $NEWROOT/usr failed"
|
||||
warn "*** Dropping you to a shell; the system will continue"
|
||||
warn "*** when you leave the shell."
|
||||
- emergency_shell
|
||||
+ action_on_fail
|
||||
fi
|
||||
fi
|
||||
}
|
||||
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
|
||||
index f2b16d3..1defb6f 100755
|
||||
--- a/modules.d/99base/dracut-lib.sh
|
||||
+++ b/modules.d/99base/dracut-lib.sh
|
||||
@@ -994,6 +994,28 @@ emergency_shell()
|
||||
[ -e /run/initramfs/.die ] && exit 1
|
||||
}
|
||||
|
||||
+action_on_fail()
|
||||
+{
|
||||
+ local _action=$(getarg action_on_fail=)
|
||||
+ case "$_action" in
|
||||
+ continue)
|
||||
+ [ "$1" = "-n" ] && shift 2
|
||||
+ [ "$1" = "--shutdown" ] && shift 2
|
||||
+ warn "$*"
|
||||
+ warn "Not dropping to emergency shell, because 'action_on_fail=continue' was set on the kernel command line."
|
||||
+ return 0
|
||||
+ ;;
|
||||
+ shell)
|
||||
+ emergency_shell $@
|
||||
+ return 1
|
||||
+ ;;
|
||||
+ *)
|
||||
+ emergency_shell $@
|
||||
+ return 1
|
||||
+ ;;
|
||||
+ esac
|
||||
+}
|
||||
+
|
||||
# Retain the values of these variables but ensure that they are unexported
|
||||
# This is a POSIX-compliant equivalent of bash's "export -n"
|
||||
export_n()
|
||||
diff --git a/modules.d/99base/init.sh b/modules.d/99base/init.sh
|
||||
index 410201a..880a2c0 100755
|
||||
--- a/modules.d/99base/init.sh
|
||||
+++ b/modules.d/99base/init.sh
|
||||
@@ -79,7 +79,7 @@ if ! ismounted /run; then
|
||||
rm -fr /newrun
|
||||
fi
|
||||
|
||||
-trap "emergency_shell Signal caught!" 0
|
||||
+trap "action_on_fail Signal caught!" 0
|
||||
|
||||
[ -d /run/initramfs ] || mkdir -p -m 0755 /run/initramfs
|
||||
[ -d /run/log ] || mkdir -p -m 0755 /run/log
|
||||
@@ -199,7 +199,7 @@ while :; do
|
||||
|
||||
main_loop=$(($main_loop+1))
|
||||
[ $main_loop -gt $RDRETRY ] \
|
||||
- && { flock -s 9 ; emergency_shell "Could not boot."; } 9>/.console_lock
|
||||
+ && { flock -s 9 ; action_on_fail "Could not boot." && break; } 9>/.console_lock
|
||||
done
|
||||
unset job
|
||||
unset queuetriggered
|
||||
@@ -234,7 +234,7 @@ while :; do
|
||||
|
||||
i=$(($i+1))
|
||||
[ $i -gt 20 ] \
|
||||
- && { flock -s 9 ; emergency_shell "Can't mount root filesystem"; } 9>/.console_lock
|
||||
+ && { flock -s 9 ; action_on_fail "Can't mount root filesystem" && break; } 9>/.console_lock
|
||||
done
|
||||
|
||||
{
|
||||
@@ -268,7 +268,7 @@ done
|
||||
[ "$INIT" ] || {
|
||||
echo "Cannot find init!"
|
||||
echo "Please check to make sure you passed a valid root filesystem!"
|
||||
- emergency_shell
|
||||
+ action_on_fail
|
||||
}
|
||||
|
||||
if [ $UDEVVERSION -lt 168 ]; then
|
||||
@@ -370,13 +370,13 @@ if [ -f /etc/capsdrop ]; then
|
||||
warn "Command:"
|
||||
warn capsh --drop=$CAPS_INIT_DROP -- -c exec switch_root "$NEWROOT" "$INIT" $initargs
|
||||
warn "failed."
|
||||
- emergency_shell
|
||||
+ action_on_fail
|
||||
}
|
||||
else
|
||||
unset RD_DEBUG
|
||||
exec $SWITCH_ROOT "$NEWROOT" "$INIT" $initargs || {
|
||||
warn "Something went very badly wrong in the initramfs. Please "
|
||||
warn "file a bug against dracut."
|
||||
- emergency_shell
|
||||
+ action_on_fail
|
||||
}
|
||||
fi
|
@ -0,0 +1,85 @@
|
||||
From 0c5ccb35c7db77caf6317e1946387504b44132e5 Mon Sep 17 00:00:00 2001
|
||||
From: WANG Chao <chaowang@redhat.com>
|
||||
Date: Tue, 9 Apr 2013 18:56:40 +0800
|
||||
Subject: [PATCH] ifup.sh: Add support for bridge over a vlan tagged interface
|
||||
|
||||
This patch add support for bridge a vlan tagged interface, like
|
||||
br0 -> bond0.7 -> bond0 -> eth0
|
||||
|
||||
Signed-off-by: WANG Chao <chaowang@redhat.com>
|
||||
---
|
||||
modules.d/40network/ifup.sh | 33 +++++++++++++++++++--------------
|
||||
1 file changed, 19 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/modules.d/40network/ifup.sh b/modules.d/40network/ifup.sh
|
||||
index 593f387..526251f 100755
|
||||
--- a/modules.d/40network/ifup.sh
|
||||
+++ b/modules.d/40network/ifup.sh
|
||||
@@ -43,6 +43,20 @@ if [ -e /tmp/team.info ]; then
|
||||
done
|
||||
fi
|
||||
|
||||
+if [ -e /tmp/vlan.info ]; then
|
||||
+ . /tmp/vlan.info
|
||||
+ if [ "$netif" = "$phydevice" ]; then
|
||||
+ if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
|
||||
+ : # We need to really setup bond (recursive call)
|
||||
+ elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
|
||||
+ : # We need to really setup team (recursive call)
|
||||
+ else
|
||||
+ netif="$vlanname"
|
||||
+ use_vlan='true'
|
||||
+ fi
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
# bridge this interface?
|
||||
if [ -e /tmp/bridge.info ]; then
|
||||
. /tmp/bridge.info
|
||||
@@ -52,6 +66,8 @@ if [ -e /tmp/bridge.info ]; then
|
||||
: # We need to really setup bond (recursive call)
|
||||
elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
|
||||
: # We need to really setup team (recursive call)
|
||||
+ elif [ "$netif" = "$vlanname" ] && [ -n "$DO_VLAN_SETUP" ]; then
|
||||
+ : # We need to really setup vlan (recursive call)
|
||||
else
|
||||
netif="$bridgename"
|
||||
use_bridge='true'
|
||||
@@ -60,20 +76,6 @@ if [ -e /tmp/bridge.info ]; then
|
||||
done
|
||||
fi
|
||||
|
||||
-if [ -e /tmp/vlan.info ]; then
|
||||
- . /tmp/vlan.info
|
||||
- if [ "$netif" = "$phydevice" ]; then
|
||||
- if [ "$netif" = "$bondname" ] && [ -n "$DO_BOND_SETUP" ] ; then
|
||||
- : # We need to really setup bond (recursive call)
|
||||
- elif [ "$netif" = "$teammaster" ] && [ -n "$DO_TEAM_SETUP" ] ; then
|
||||
- : # We need to really setup team (recursive call)
|
||||
- else
|
||||
- netif="$vlanname"
|
||||
- use_vlan='true'
|
||||
- fi
|
||||
- fi
|
||||
-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"
|
||||
@@ -223,6 +225,8 @@ if [ -e /tmp/bridge.info ]; then
|
||||
DO_BOND_SETUP=yes ifup $bondname -m
|
||||
elif [ "$ethname" = "$teammaster" ] ; then
|
||||
DO_TEAM_SETUP=yes ifup $teammaster -m
|
||||
+ elif [ "$ethname" = "$vlanname" ]; then
|
||||
+ DO_VLAN_SETUP=yes ifup $vlanname -m
|
||||
else
|
||||
linkup $ethname
|
||||
fi
|
||||
@@ -252,6 +256,7 @@ if [ "$netif" = "$vlanname" ] && [ ! -e /tmp/net.$vlanname.up ]; then
|
||||
linkup "$phydevice"
|
||||
fi
|
||||
ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid $vlanname)"
|
||||
+ ip link set "$vlanname" up
|
||||
fi
|
||||
|
||||
# setup nameserver
|
18
dracut.spec
18
dracut.spec
@ -10,7 +10,7 @@
|
||||
|
||||
Name: dracut
|
||||
Version: 027
|
||||
Release: 10.git20130405%{?dist}
|
||||
Release: 18.git20130409%{?dist}
|
||||
|
||||
Summary: Initramfs generator using udev
|
||||
%if 0%{?fedora} || 0%{?rhel}
|
||||
@ -38,6 +38,14 @@ Patch6: 0006-Add-missing-options-to-manpage-and-help-output.patch
|
||||
Patch7: 0007-TEST-50-MULTINIC-fixup-test-suite.patch
|
||||
Patch8: 0008-TESTSUITE-s-i6300esbwdt-i6300esb-ib700wdt-g.patch
|
||||
Patch9: 0009-TEST-99-RPM-ignore-rescue-images.patch
|
||||
Patch10: 0010-nfs-module-setup.sh-combine-egreps-for-etc-passwd-an.patch
|
||||
Patch11: 0011-dracut-functions.sh-make-use-of-findmnt.patch
|
||||
Patch12: 0012-crypt-module-setup.sh-filter-etc-crypttab-in-host-on.patch
|
||||
Patch13: 0013-ifup.sh-Add-support-for-bridge-over-team-and-vlan-ta.patch
|
||||
Patch14: 0014-network-support-multiple-bonding-interfaces.patch
|
||||
Patch15: 0015-Wait-for-logical-interface-to-be-up.patch
|
||||
Patch16: 0016-Let-user-specify-the-action-after-fail.patch
|
||||
Patch17: 0017-ifup.sh-Add-support-for-bridge-over-a-vlan-tagged-in.patch
|
||||
|
||||
|
||||
BuildRequires: dash bash git
|
||||
@ -447,6 +455,14 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{dracutlibdir}/dracut.conf.d/02-norescue.conf
|
||||
|
||||
%changelog
|
||||
* Tue Apr 09 2013 Harald Hoyer <harald@redhat.com> 027-17.git20130409
|
||||
- only include needed /etc/crypttab entries
|
||||
Resolves:rhbz#919752
|
||||
- add support for bridge over team and vlan
|
||||
- support multiple bonding interfaces
|
||||
- add "action_on_fail=" kernel command line parameter
|
||||
- add support for bridge over a vlan tagged interface
|
||||
|
||||
* Fri Apr 05 2013 Harald Hoyer <harald@redhat.com> 027-10.git20130405
|
||||
- fix crypto password timeout on the dracut side
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user