From 1edaf15cef3420484d1dfbf08de43fe8d800ab64 Mon Sep 17 00:00:00 2001 From: Gerardo Exequiel Pozzi Date: Mon, 28 Nov 2011 12:28:03 -0300 Subject: [archiso] Split archiso_pxe_nbd in two hooks. 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 --- 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 -------- 5 files changed, 71 insertions(+), 45 deletions(-) create mode 100644 archiso/hooks/archiso_pxe_common create mode 100644 archiso/install/archiso_pxe_common (limited to 'archiso') 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@.*/@@;s@-@_@" | 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<