[arch-releng] [PATCH 1/2] [archiso] Split archiso_pxe_nbd in two hooks.

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Sun Nov 20 23:03:07 EST 2011


One hook only setup the network device (archiso_pxe_common) the other
setup the NBD client (archiso_pxe_nbd).

New bootparam:
    archiso_pxe_srv=IP
        Allow to set an IP different from the PXE server.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386 at yahoo.com.ar>
---
 README                             |   10 ++++++-
 archiso/Makefile                   |    4 +++
 archiso/hooks/archiso_pxe_common   |   34 +++++++++++++++++++++++++++
 archiso/hooks/archiso_pxe_nbd      |   45 +++++++----------------------------
 archiso/install/archiso_pxe_common |   24 +++++++++++++++++++
 archiso/install/archiso_pxe_nbd    |    9 -------
 configs/releng/build.sh            |    2 +-
 configs/releng/mkinitcpio.conf     |    2 +-
 8 files changed, 81 insertions(+), 49 deletions(-)
 create mode 100644 archiso/hooks/archiso_pxe_common
 create mode 100644 archiso/install/archiso_pxe_common

diff --git a/README b/README
index 4588042..0dd2179 100644
--- a/README
+++ b/README
@@ -63,7 +63,7 @@ INDEX
                     Default: (architecture of running kernel)
 
 
-** hooks/archiso_pxe_nbd
+** hooks/archiso_pxe_common
 
 * ip=               This parameter is setup automatically by PXELINUX
                     when option "IPAPPEND" is set to 1 or 2 in config.
@@ -73,8 +73,13 @@ INDEX
                     when option "IPAPPEND" is set to 2 or 3 in config.
                     BOOTIF=<hardware-address-of-boot-interface>
                     Default: (set via PXELINUX)
+
+** hooks/archiso_pxe_nbd
+
 * archiso_nbd_name= Set NBD export name used by the server.
                     Default: archiso
+* archiso_nbd_srv=  Set an IP address where NBD reside.
+                    Default: "${pxeserver}" (The <boot-server-ip from ip=)
 
 
 ** hooks/archiso_loop_mnt
@@ -118,8 +123,9 @@ if nothing is specified on command line.
  + (none)
 * archiso_loop_mnt
  + (none)
-* archiso_pxe_nbd
+* archiso_pxe_common
  + mkinitcpio-nfs-utils    for ipconfig
+* archiso_pxe_nbd
  + nbd                     for nbd-client
 * archiso_shutdown
  + (none)
diff --git a/archiso/Makefile b/archiso/Makefile
index aa137b8..115a15b 100644
--- a/archiso/Makefile
+++ b/archiso/Makefile
@@ -16,6 +16,8 @@ install-hooks:
 	install -D -m 644 hooks/archiso_shutdown $(DESTDIR)/lib/initcpio/hooks/archiso_shutdown
 	install -D -m 644 install/archiso_shutdown $(DESTDIR)/lib/initcpio/install/archiso_shutdown
 	install -D -m 644 archiso_pxe_nbd $(DESTDIR)/lib/initcpio/archiso_pxe_nbd
+	install -D -m 644 hooks/archiso_pxe_common $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_common
+	install -D -m 644 install/archiso_pxe_common $(DESTDIR)/lib/initcpio/install/archiso_pxe_common
 	install -D -m 644 hooks/archiso_pxe_nbd $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_nbd
 	install -D -m 644 install/archiso_pxe_nbd $(DESTDIR)/lib/initcpio/install/archiso_pxe_nbd
 	install -D -m 644 hooks/archiso_loop_mnt $(DESTDIR)/lib/initcpio/hooks/archiso_loop_mnt
@@ -39,6 +41,8 @@ uninstall:
 	rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_shutdown
 	rm -f $(DESTDIR)/lib/initcpio/install/archiso_shutdown
 	rm -f $(DESTDIR)/lib/initcpio/archiso_pxe_nbd
+	rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_common
+	rm -f $(DESTDIR)/lib/initcpio/install/archiso_pxe_common
 	rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_nbd
 	rm -f $(DESTDIR)/lib/initcpio/install/archiso_pxe_nbd
 	rm -f $(DESTDIR)/lib/initcpio/hooks/archiso_loop_mnt
diff --git a/archiso/hooks/archiso_pxe_common b/archiso/hooks/archiso_pxe_common
new file mode 100644
index 0000000..cf9fce8
--- /dev/null
+++ b/archiso/hooks/archiso_pxe_common
@@ -0,0 +1,34 @@
+# vim: set ft=sh:
+
+run_hook () {
+    local i net_mac bootif_mac bootif_dev
+    # These variables will be parsed from /tmp/net-*.conf generated by ipconfig
+    local DEVICE
+    local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1
+    local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
+    local filename
+    # /tmp/net-*.conf
+
+    if [[ -n "${ip}" ]]; then
+        if [[ -n "${BOOTIF}" ]]; then
+            bootif_mac=${BOOTIF#01-}
+            bootif_mac=${bootif_mac//-/:}
+            for i in /sys/class/net/*/address; do
+                read net_mac < ${i}
+                if [[ "${bootif_mac}" == "${net_mac}" ]]; then
+                    bootif_dev=${i#/sys/class/net/}
+                    bootif_dev=${bootif_dev%/address}
+                    break
+                fi
+            done
+            ip="${ip}::${bootif_dev}"
+        fi
+
+        # setup network and save some values
+        ipconfig "ip=${ip}"
+
+        . /tmp/net-*.conf
+
+        pxeserver=${ROOTSERVER}
+    fi
+}
diff --git a/archiso/hooks/archiso_pxe_nbd b/archiso/hooks/archiso_pxe_nbd
index be3db28..07e6fee 100644
--- a/archiso/hooks/archiso_pxe_nbd
+++ b/archiso/hooks/archiso_pxe_nbd
@@ -1,36 +1,9 @@
 # vim: set ft=sh:
-run_hook () {
-    local line i net_mac bootif_mac bootif_dev
-    # These variables will be parsed from /tmp/net-*.conf generated by ipconfig
-    local DEVICE
-    local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1
-    local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
-    local filename
-    # /tmp/net-*.conf
-
-    if [ -n "${ip}" ]; then
-        if [ -n "${BOOTIF}" ]; then
-            bootif_mac=${BOOTIF#01-}
-            bootif_mac=${bootif_mac//-/:}
-            for i in /sys/class/net/*/address; do
-                read net_mac < ${i}
-                if [ "${bootif_mac}" == "${net_mac}" ]; then
-                    bootif_dev=${i#/sys/class/net/}
-                    bootif_dev=${bootif_dev%/address}
-                    break
-                fi
-            done
-            ip="${ip}::${bootif_dev}"
-        fi
-
-        # setup network and save some values
-        ipconfig "ip=${ip}"
-
-        . /tmp/net-*.conf
-
-        nbdserver=${ROOTSERVER}
 
+run_hook() {
+    if [[ -n "${ip}" ]]; then
         [[ -z "${archiso_nbd_name}" ]] && archiso_nbd_name="archiso"
+        [[ -z "${archiso_nbd_srv}" ]] && archiso_nbd_srv="${pxeserver}"
 
         mount_handler="archiso_pxe_nbd_mount_handler"
     fi
@@ -49,19 +22,19 @@ archiso_pxe_nbd_mount_handler () {
         launch_interactive_shell
     done
 
-    msg "::: Setup NBD from ${nbdserver} at /dev/nbd0"
-    if [ "${copytoram}" = "y" ]; then
-        nbd-client ${nbdserver} -N ${archiso_nbd_name} /dev/nbd0
+    msg ":: Setup NBD from ${archiso_nbd_srv} at /dev/nbd0"
+    if [[ "${copytoram}" = "y" ]]; then
+        nbd-client ${archiso_nbd_srv} -N ${archiso_nbd_name} /dev/nbd0
     else
-        nbd-client ${nbdserver} -N ${archiso_nbd_name} /dev/nbd0 -persist
+        nbd-client ${archiso_nbd_srv} -N ${archiso_nbd_name} /dev/nbd0 -persist
     fi
 
     archisodevice=/dev/nbd0
 
     archiso_mount_handler ${newroot}
 
-    if [ "${copytoram}" = "y" ]; then
-        msg "::: Disconnect NBD from ${nbdserver} at /dev/nbd0"
+    if [[ "${copytoram}" = "y" ]]; then
+        msg ":: Disconnect NBD from ${archiso_nbd_srv} at /dev/nbd0"
         nbd-client -d /dev/nbd0
     else
         mkdir -p /run/archiso
diff --git a/archiso/install/archiso_pxe_common b/archiso/install/archiso_pxe_common
new file mode 100644
index 0000000..ebf908e
--- /dev/null
+++ b/archiso/install/archiso_pxe_common
@@ -0,0 +1,24 @@
+# vim: set ft=sh:
+
+build ()
+{
+    MODULES="${MODULES} $(comm -2 -3 <(checked_modules "/drivers/net/" | sort) \
+                                     <(find $MODULEDIR/kernel/drivers/net/{irda,phy,wimax,wireless} \
+                                            -name '*.ko*' \
+                                            -exec bash -c 'printf "%s\n" "${@%%.ko*}" | sed "s at .*/@@;s at -@_@" | sort' _ {} +) \
+                                     | grep -v -e 'ppp_' -e 'plip' -e 'pppoe')"
+    BINARIES=""
+    FILES=""
+    SCRIPT="archiso_pxe_common"
+
+    add_dir /tmp
+
+    add_binary "/lib/initcpio/ipconfig" "/bin/ipconfig"
+}
+
+help ()
+{
+cat<<HELPEOF
+  This hook loads the necessary modules for boot via PXE.
+HELPEOF
+}
diff --git a/archiso/install/archiso_pxe_nbd b/archiso/install/archiso_pxe_nbd
index c26648c..4227623 100644
--- a/archiso/install/archiso_pxe_nbd
+++ b/archiso/install/archiso_pxe_nbd
@@ -3,20 +3,11 @@
 build ()
 {
     MODULES="nbd"
-    MODULES="${MODULES} $(comm -2 -3 <(checked_modules "/drivers/net/" | sort) \
-                                     <(find $MODULEDIR/kernel/drivers/net/{irda,phy,wimax,wireless} \
-                                            -name '*.ko*' \
-                                            -exec bash -c 'printf "%s\n" "${@%%.ko*}" | sed "s at .*/@@;s at -@_@" | sort' _ {} +) \
-                                     | grep -v -e 'ppp_' -e 'plip' -e 'pppoe')"
     BINARIES=""
     FILES=""
     SCRIPT="archiso_pxe_nbd"
 
-    add_dir /tmp
-
     add_binary "/usr/sbin/nbd-client" "/bin/nbd-client"
-    add_binary "/lib/initcpio/ipconfig" "/bin/ipconfig"
-
     add_file "/lib/initcpio/archiso_pxe_nbd" "/archiso_pxe_nbd"
 }
 
diff --git a/configs/releng/build.sh b/configs/releng/build.sh
index ba5cd2a..f6e0070 100755
--- a/configs/releng/build.sh
+++ b/configs/releng/build.sh
@@ -43,7 +43,7 @@ make_customize_root_image() {
 make_setup_mkinitcpio() {
    if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
         local _hook
-        for _hook in archiso archiso_shutdown archiso_pxe_nbd archiso_loop_mnt; do
+        for _hook in archiso archiso_shutdown archiso_pxe_common archiso_pxe_nbd archiso_loop_mnt; do
             cp /lib/initcpio/hooks/${_hook} ${work_dir}/root-image/lib/initcpio/hooks
             cp /lib/initcpio/install/${_hook} ${work_dir}/root-image/lib/initcpio/install
         done
diff --git a/configs/releng/mkinitcpio.conf b/configs/releng/mkinitcpio.conf
index 72e6b2a..eb0a68a 100644
--- a/configs/releng/mkinitcpio.conf
+++ b/configs/releng/mkinitcpio.conf
@@ -1,2 +1,2 @@
-HOOKS="base udev memdisk archiso_shutdown archiso archiso_pxe_nbd archiso_loop_mnt pata scsi sata virtio usb fw pcmcia filesystems usbinput"
+HOOKS="base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd pata scsi sata virtio usb fw pcmcia filesystems usbinput"
 COMPRESSION="xz"
-- 
1.7.7.3



More information about the arch-releng mailing list