[PATCH] dracut: fix inst.ks.sendmac (#826657)
Will Woods
wwoods at redhat.com
Mon Aug 13 19:14:10 UTC 2012
Originally, parsing inst.ks.{sendmac,sendsn} happened in
parse-anaconda-kickstart.sh. But it turned out that sendmac needed to
happen after the modules were loaded, so commit 4fcc157 tried to fix
this by making it a function, and using initqueue to run that function
in the 'initqueue/settled' hook.
Well, it turns out initqueue doesn't like adding jobs that are function
names - the job ends up empty and nothing happens.
So instead, let's handle these two arguments directly in a script that
runs in initqueue/settled.
---
dracut/Makefile.am | 1 +
dracut/anaconda-ks-sendheaders.sh | 32 ++++++++++++++++++++++++++++++++
dracut/module-setup.sh | 1 +
dracut/parse-anaconda-kickstart.sh | 30 ------------------------------
4 files changed, 34 insertions(+), 30 deletions(-)
create mode 100755 dracut/anaconda-ks-sendheaders.sh
diff --git a/dracut/Makefile.am b/dracut/Makefile.am
index 0324766..8c56bf3 100644
--- a/dracut/Makefile.am
+++ b/dracut/Makefile.am
@@ -29,6 +29,7 @@ dist_dracut_SCRIPTS = module-setup.sh \
kickstart-genrules.sh \
updates-genrules.sh \
anaconda-udevprop.sh \
+ anaconda-ks-sendheaders.sh \
anaconda-netroot.sh \
anaconda-diskroot \
anaconda-copy-ks.sh \
diff --git a/dracut/anaconda-ks-sendheaders.sh b/dracut/anaconda-ks-sendheaders.sh
new file mode 100755
index 0000000..aa178ce
--- /dev/null
+++ b/dracut/anaconda-ks-sendheaders.sh
@@ -0,0 +1,32 @@
+#/bin/sh
+# anaconda-ks-sendheaders.sh - set various HTTP headers for kickstarting
+
+[ -f /tmp/.ks_sendheaders ] && return
+
+# inst.ks.sendmac: send MAC addresses in HTTP headers
+if getargbool 0 kssendmac inst.ks.sendmac; then
+ ifnum=0
+ for ifname in /sys/class/net/*; do
+ [ -e "$ifname/address" ] || continue
+ mac=$(cat $ifname/address)
+ ifname=${ifname#/sys/class/net/}
+ # TODO: might need to choose devices better
+ if [ "$ifname" != "lo" ] && [ -n "$mac" ]; then
+ # set_http_header is from url-lib.sh, sourced earlier
+ set_http_header "X-RHN-Provisioning-MAC-$ifnum" "$ifname $mac"
+ ifnum=$(($ifnum+1))
+ fi
+ done
+fi
+
+# inst.ks.sendsn: send system serial number in HTTP headers
+if getargbool 0 kssendsn inst.ks.sendsn; then
+ system_serial=$(cat /sys/class/dmi/id/product_serial 2>/dev/null)
+ if [ -z "$system_serial" ]; then
+ warn "inst.ks.sendsn: can't find system serial number"
+ else
+ set_http_header "X-System-Serial-Number" "$system_serial"
+ fi
+fi
+
+> /tmp/.ks_sendheaders
diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh
index 39ecc58..78da002 100755
--- a/dracut/module-setup.sh
+++ b/dracut/module-setup.sh
@@ -26,6 +26,7 @@ install() {
inst_hook pre-udev 40 "$moddir/kickstart-genrules.sh"
inst_hook pre-udev 40 "$moddir/updates-genrules.sh"
inst_hook pre-trigger 40 "$moddir/anaconda-udevprop.sh"
+ inst_hook initqueue/settled 00 "$moddir/anaconda-ks-sendheaders.sh"
inst_hook initqueue/online 80 "$moddir/anaconda-netroot.sh"
inst "$moddir/anaconda-diskroot" "/sbin/anaconda-diskroot"
inst_hook pre-pivot 99 "$moddir/anaconda-copy-ks.sh"
diff --git a/dracut/parse-anaconda-kickstart.sh b/dracut/parse-anaconda-kickstart.sh
index afc3d63..d445e27 100755
--- a/dracut/parse-anaconda-kickstart.sh
+++ b/dracut/parse-anaconda-kickstart.sh
@@ -31,33 +31,3 @@ case "${kickstart%%:*}" in
;;
esac
export kickstart
-
-# inst.ks.sendmac: send MAC addresses in HTTP headers
-set_ks_sendmac() {
- local ifnum=0 mac="" ifname=""
- for ifname in /sys/class/net/*; do
- [ -e "$ifname/address" ] || continue
- mac=$(cat $ifname/address)
- ifname=${ifname#/sys/class/net/}
- # TODO: might need to choose devices better
- if [ "$ifname" != "lo" ] && [ -n "$mac" ]; then
- set_http_header "X-RHN-Provisioning-MAC-$ifnum" "$ifname $mac"
- ifnum=$(($ifnum+1))
- fi
- done
-}
-if getargbool 0 kssendmac inst.ks.sendmac; then
- # needs to run in mainloop (after modules load etc.)
- initqueue --unique --settled --onetime --name "01-sendmac" set_ks_sendmac
-fi
-
-# inst.ks.sendsn: send system serial number as HTTP header
-if getargbool 0 kssendsn inst.ks.sendsn; then
- # doesn't need to wait - dmi is builtin
- system_serial=$(cat /sys/class/dmi/id/product_serial 2>/dev/null)
- if [ -z "$system_serial" ]; then
- warn "inst.ks.sendsn: can't find system serial number"
- else
- set_http_header "X-System-Serial-Number" "$system_serial"
- fi
-fi
--
1.7.11.2
More information about the anaconda-patches
mailing list