* [PATCH] a few patches
@ 2012-04-05 17:01 Will Woods
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Will Woods @ 2012-04-05 17:01 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
So here's 5 patches for dracut. Whee!
Patches 2, 3, and 4 are needed to fix a bunch of stuff blocking Fedora 17
releases - although I can add workarounds for the splitsep thing pretty
easily. 1 & 5 are nice but unnecessary.
Thanks!
-w
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/5] dracut-lib: add str_ends, to go along with str_starts
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2012-04-05 17:01 ` Will Woods
2012-04-05 17:01 ` [PATCH 2/5] run setup_net at start of initqueue/online hook Will Woods
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Will Woods @ 2012-04-05 17:01 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
---
modules.d/99base/dracut-lib.sh | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index cb2e4dc..1ecd286 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -12,6 +12,11 @@ str_starts() {
[ "${1#$2*}" != "$1" ]
}
+# returns OK if $1 contains $2 at the end
+str_ends() {
+ [ "${1%*$2}" != "$1" ]
+}
+
# replaces all occurrences of 'search' in 'str' with 'replacement'
#
# str_replace str search replacement
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/5] run setup_net at start of initqueue/online hook
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-05 17:01 ` [PATCH 1/5] dracut-lib: add str_ends, to go along with str_starts Will Woods
@ 2012-04-05 17:01 ` Will Woods
2012-04-05 17:01 ` [PATCH 3/5] network: add save_netinfo, fix problems with nfs->NM takeover Will Woods
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Will Woods @ 2012-04-05 17:01 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
This makes sure the network is active and ready to use during the
initqueue/online hook.
It also makes it so you can run setup_net repeatedly without causing
error messages.
---
modules.d/40network/net-genrules.sh | 3 +++
modules.d/40network/net-lib.sh | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/modules.d/40network/net-genrules.sh b/modules.d/40network/net-genrules.sh
index 84fd3ac..b3d5584 100755
--- a/modules.d/40network/net-genrules.sh
+++ b/modules.d/40network/net-genrules.sh
@@ -53,5 +53,8 @@ fix_bootif() {
# Run the "online" hook
printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$env{INTERFACE} source_hook initqueue/online"\n'
+ # And make sure we run setup_net at the start of the hook
+ echo '. /lib/net-lib.sh; setup_net $netif' > \
+ $hookdir/initqueue/online/05-setup_net.sh
} > /etc/udev/rules.d/60-net.rules
diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
index 467c79f..a7abe81 100644
--- a/modules.d/40network/net-lib.sh
+++ b/modules.d/40network/net-lib.sh
@@ -59,12 +59,14 @@ ifdown() {
ip link set $netif down
ip addr flush dev $netif
echo "#empty" > /etc/resolv.conf
+ rm -f /tmp/net.$netif.did-setup
# TODO: send "offline" uevent?
}
setup_net() {
local netif="$1" f="" gw_ip="" netroot_ip="" iface="" IFACES=""
[ -e /tmp/net.$netif.up ] || return 1
+ [ -e /tmp/net.$netif.did-setup ] && return
[ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces
[ -z "$IFACES" ] && IFACES="$netif"
for iface in $IFACES ; do
@@ -100,6 +102,7 @@ setup_net() {
if [ -n "$dest" ] && ! arping -q -f -w 60 -I $netif $dest ; then
info "Resolving $dest via ARP on $netif failed"
fi
+ > /tmp/net.$netif.did-setup
}
set_ifname() {
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/5] network: add save_netinfo, fix problems with nfs->NM takeover
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-05 17:01 ` [PATCH 1/5] dracut-lib: add str_ends, to go along with str_starts Will Woods
2012-04-05 17:01 ` [PATCH 2/5] run setup_net at start of initqueue/online hook Will Woods
@ 2012-04-05 17:01 ` Will Woods
2012-04-05 17:01 ` [PATCH 4/5] Make splitsep work as documented with less vars than fields Will Woods
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Will Woods @ 2012-04-05 17:01 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
For NetworkManager to properly take over a NFS-root system, we need to
have the interface name(s) in /tmp/net.ifaces and save the dhclient
lease. This lets the ifcfg module do its magic.
save_netinfo should properly write out /tmp/net.ifaces when needed, and
copies the dhclient files into place.
---
modules.d/40network/net-lib.sh | 16 ++++++++++++++++
modules.d/40network/netroot.sh | 10 ++--------
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/modules.d/40network/net-lib.sh b/modules.d/40network/net-lib.sh
index a7abe81..c0f73da 100644
--- a/modules.d/40network/net-lib.sh
+++ b/modules.d/40network/net-lib.sh
@@ -105,6 +105,22 @@ setup_net() {
> /tmp/net.$netif.did-setup
}
+save_netinfo() {
+ local netif="$1" IFACES="" f="" i=""
+ [ -e /tmp/net.ifaces ] && read IFACES < /tmp/net.ifaces
+ # Add $netif to the front of IFACES (if it's not there already).
+ set -- "$netif"
+ for i in $IFACES; do [ "$i" != "$netif" ] && set -- "$@" "$i"; done
+ IFACES="$*"
+ for i in $IFACES; do
+ for f in /tmp/dhclient.$i.*; do
+ [ -f $f ] && cp -f $f /tmp/net.${f#/tmp/dhclient.}
+ done
+ done
+ echo $IFACES > /tmp/.net.ifaces.new
+ mv /tmp/.net.ifaces.new /tmp/net.ifaces
+}
+
set_ifname() {
local name="$1" mac="$2" num=0 n=""
# if it's already set, return the existing name
diff --git a/modules.d/40network/netroot.sh b/modules.d/40network/netroot.sh
index ac1c215..1bb62bb 100755
--- a/modules.d/40network/netroot.sh
+++ b/modules.d/40network/netroot.sh
@@ -84,14 +84,8 @@ source_hook netroot
# 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
- # Network rootfs mount successful
- for iface in $IFACES ; do
- [ -f /tmp/dhclient.$iface.lease ] && cp /tmp/dhclient.$iface.lease /tmp/net.$iface.lease
- [ -f /tmp/dhclient.$iface.dhcpopts ] && cp /tmp/dhclient.$iface.dhcpopts /tmp/net.$iface.dhcpopts
- done
-
- # Save used netif for later use
- [ ! -f /tmp/net.ifaces ] && echo $netif > /tmp/net.ifaces
+ # Network rootfs mount successful - save interface info for ifcfg etc.
+ save_netinfo $netif
else
warn "Mounting root via '$netif' failed"
# If we're trying with multiple interfaces, put that one down.
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/5] Make splitsep work as documented with less vars than fields
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (2 preceding siblings ...)
2012-04-05 17:01 ` [PATCH 3/5] network: add save_netinfo, fix problems with nfs->NM takeover Will Woods
@ 2012-04-05 17:01 ` Will Woods
2012-04-05 17:01 ` [PATCH 5/5] shutdown: use emergency_shell from dracut-lib Will Woods
2012-04-19 10:13 ` [PATCH] a few patches Harald Hoyer
5 siblings, 0 replies; 7+ messages in thread
From: Will Woods @ 2012-04-05 17:01 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
According to its comment in dracut-lib.sh:
splitsep ":" "one:all:the:rest" one two
should set two="all:the:rest". But there's no check to see if the
current field is the last field, so it just gets "all".
---
modules.d/99base/dracut-lib.sh | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index 1ecd286..e10a34d 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -224,13 +224,14 @@ splitsep() {
local sep="$1"; local str="$2"; shift 2
local tmp
- while [ -n "$str" -a -n "$*" ]; do
+ while [ -n "$str" -a "$#" -gt 1 ]; do
tmp="${str%%$sep*}"
eval "$1=${tmp}"
str="${str#$tmp}"
str="${str#$sep}"
shift
done
+ [ -n "$str" -a -n "$1" ] && eval "$1=$str"
return 0
}
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/5] shutdown: use emergency_shell from dracut-lib
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (3 preceding siblings ...)
2012-04-05 17:01 ` [PATCH 4/5] Make splitsep work as documented with less vars than fields Will Woods
@ 2012-04-05 17:01 ` Will Woods
2012-04-19 10:13 ` [PATCH] a few patches Harald Hoyer
5 siblings, 0 replies; 7+ messages in thread
From: Will Woods @ 2012-04-05 17:01 UTC (permalink / raw)
To: initramfs-u79uwXL29TY76Z2rM5mHXA
---
modules.d/99base/dracut-lib.sh | 10 +++++---
modules.d/99shutdown/shutdown.sh | 47 ++-----------------------------------
2 files changed, 9 insertions(+), 48 deletions(-)
diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh
index e10a34d..a29d586 100755
--- a/modules.d/99base/dracut-lib.sh
+++ b/modules.d/99base/dracut-lib.sh
@@ -767,15 +767,17 @@ emergency_shell()
{
local _ctty
set +e
+ local _rdshell_name="dracut" action="Boot" hook="emergency"
if [ "$1" = "-n" ]; then
_rdshell_name=$2
shift 2
- else
- _rdshell_name=dracut
+ elif [ "$1" = "--shutdown" ]; then
+ _rdshell_name=$2; action="Shutdown"; hook="shutdown-emergency"
+ shift 2
fi
echo ; echo
warn $@
- source_hook emergency
+ source_hook "$hook"
echo
wait_for_loginit
[ -e /run/initramfs/.die ] && exit 1
@@ -798,7 +800,7 @@ emergency_shell()
strstr "$(setsid --help 2>/dev/null)" "ctty" && CTTY="-c"
setsid $CTTY /bin/sh -i -l 0<$_ctty 1>$_ctty 2>&1
else
- warn "Boot has failed. To debug this issue add \"rdshell\" to the kernel command line."
+ warn "$action has failed. To debug this issue add \"rd.shell\" to the kernel command line."
# cause a kernel panic
exit 1
fi
diff --git a/modules.d/99shutdown/shutdown.sh b/modules.d/99shutdown/shutdown.sh
index 8817a4c..45345a4 100755
--- a/modules.d/99shutdown/shutdown.sh
+++ b/modules.d/99shutdown/shutdown.sh
@@ -12,49 +12,8 @@
export TERM=linux
PATH=/usr/sbin:/usr/bin:/sbin:/bin
-emergency_shell()
-{
- local _ctty
- set +e
- if [ "$1" = "-n" ]; then
- _rdshell_name=$2
- shift 2
- else
- _rdshell_name=dracut
- fi
- echo ; echo
- warn $@
- source_hook shutdown-emergency
- echo
- if getargbool 1 rd.shell -y rdshell || getarg rd.break rdbreak; then
- echo "Dropping to debug shell."
- echo
- export PS1="$_rdshell_name:\${PWD}# "
- [ -e /.profile ] || >/.profile
-
- _ctty="$(getarg rd.ctty=)" && _ctty="/dev/${_ctty##*/}"
- if [ -z "$_ctty" ]; then
- _ctty=console
- while [ -f /sys/class/tty/$_ctty/active ]; do
- _ctty=$(cat /sys/class/tty/$_ctty/active)
- _ctty=${_ctty##* } # last one in the list
- done
- _ctty=/dev/$_ctty
- fi
- [ -c "$_ctty" ] || _ctty=/dev/tty1
- strstr "$(setsid --help)" "control" && CTTY="-c"
- setsid $CTTY /bin/sh -i -l 0<$_ctty 1>$_ctty 2>&1
- else
- exec /lib/systemd/systemd-shutdown "$@"
- warn "Shutdown has failed. To debug this issue add \"rdshell\" to the kernel command line."
- # cause a kernel panic
- exit 1
- fi
-}
-
-trap "emergency_shell Signal caught!" 0
-
-getarg 'rd.break=pre-shutdown' && emergency_shell -n cmdline "Break before pre-shutdown"
+trap "emergency_shell --shutdown shutdown Signal caught!" 0
+getarg 'rd.break=pre-shutdown' && emergency_shell --shutdown pre-shutdown "Break before pre-shutdown"
umount_a() {
local _did_umount="n"
@@ -97,7 +56,7 @@ while _check_shutdown; do
done
_check_shutdown final
-getarg 'rd.break=shutdown' && emergency_shell -n cmdline "Break before shutdown"
+getarg 'rd.break=shutdown' && emergency_shell --shutdown shutdown "Break before shutdown"
[ "$1" = "reboot" ] && reboot -f -d -n --no-wall
[ "$1" = "poweroff" ] && poweroff -f -d -n --no-wall
[ "$1" = "halt" ] && halt -f -d -n --no-wall
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] a few patches
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (4 preceding siblings ...)
2012-04-05 17:01 ` [PATCH 5/5] shutdown: use emergency_shell from dracut-lib Will Woods
@ 2012-04-19 10:13 ` Harald Hoyer
5 siblings, 0 replies; 7+ messages in thread
From: Harald Hoyer @ 2012-04-19 10:13 UTC (permalink / raw)
To: Will Woods; +Cc: initramfs-u79uwXL29TY76Z2rM5mHXA
Am 05.04.2012 19:01, schrieb Will Woods:
> So here's 5 patches for dracut. Whee!
>
> Patches 2, 3, and 4 are needed to fix a bunch of stuff blocking Fedora 17
> releases - although I can add workarounds for the splitsep thing pretty
> easily. 1 & 5 are nice but unnecessary.
>
> Thanks!
>
> -w
pushed
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-04-19 10:13 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-05 17:01 [PATCH] a few patches Will Woods
[not found] ` <1333645299-16837-1-git-send-email-wwoods-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-05 17:01 ` [PATCH 1/5] dracut-lib: add str_ends, to go along with str_starts Will Woods
2012-04-05 17:01 ` [PATCH 2/5] run setup_net at start of initqueue/online hook Will Woods
2012-04-05 17:01 ` [PATCH 3/5] network: add save_netinfo, fix problems with nfs->NM takeover Will Woods
2012-04-05 17:01 ` [PATCH 4/5] Make splitsep work as documented with less vars than fields Will Woods
2012-04-05 17:01 ` [PATCH 5/5] shutdown: use emergency_shell from dracut-lib Will Woods
2012-04-19 10:13 ` [PATCH] a few patches Harald Hoyer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox