[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