diff options
-rw-r--r-- | archiso/Makefile | 4 | ||||
-rw-r--r-- | archiso/hooks/nbd | 63 | ||||
-rw-r--r-- | archiso/install/nbd | 20 |
3 files changed, 87 insertions, 0 deletions
diff --git a/archiso/Makefile b/archiso/Makefile index a109547..ba887e6 100644 --- a/archiso/Makefile +++ b/archiso/Makefile @@ -8,6 +8,8 @@ install: all # hooks/install are needed by mkinitcpio install -D -m 644 hooks/archiso $(DESTDIR)/lib/initcpio/hooks/archiso install -D -m 644 install/archiso $(DESTDIR)/lib/initcpio/install/archiso + install -D -m 644 hooks/nbd $(DESTDIR)/lib/initcpio/hooks/nbd + install -D -m 644 install/nbd $(DESTDIR)/lib/initcpio/install/nbd # install docs and examples install -d -m 644 $(DESTDIR)/usr/share/archiso/ cp -r ../configs $(DESTDIR)/usr/share/archiso/configs @@ -18,5 +20,7 @@ uninstall: rm -f $(DESTDIR)/usr/bin/testiso rm -f $(DESTDIR)/lib/initcpio/hooks/archiso rm -f $(DESTDIR)/lib/initcpio/install/archiso + rm -f $(DESTDIR)/lib/initcpio/hooks/nbd + rm -f $(DESTDIR)/lib/initcpio/install/nbd rm -rf $(DESTDIR)/usr/share/archiso/ rm -rf $(DESTDIR)/usr/share/doc/archiso/ diff --git a/archiso/hooks/nbd b/archiso/hooks/nbd new file mode 100644 index 0000000..9df5a95 --- /dev/null +++ b/archiso/hooks/nbd @@ -0,0 +1,63 @@ +# vim: set ft=sh: +run_hook () +{ + local line i address netmask gateway dns0 dns1 rootserver rootpath filename + + : > /ip_opts + + if [ -n "${ip}" ]; then + # setup network and save some values + ipconfig "ip=${ip}" | while read line; do + # echo ":: ${line}" + if [ "${line#"IP-Config:"}" != "${line}" ]; then + continue + fi + line="$(echo ${line} | sed -e 's/ :/:/g;s/: /=/g')" + for i in ${line}; do + case "${i}" in + address=*) + echo "${i}" >> /ip_opts + ;; + netmask=*) + echo "${i}" >> /ip_opts + ;; + gateway=*) + echo "${i}" >> /ip_opts + ;; + dns0=*) + echo "${i}" >> /ip_opts + ;; + dns1=*) + echo "${i}" >> /ip_opts + ;; + rootserver=*) + echo "${i}" >> /ip_opts + ;; + rootpath=*) + echo "${i}" >> /ip_opts + ;; + esac + done + done + + . /ip_opts + + echo "IP-Config: ${address}/${netmask}" + echo "IP-Config: gw: ${gateway} dns0: ${dns0} dns1: ${dns1}" + + modprobe nbd 2> /dev/null + + msg ":: Waiting for boot device..." + while ! poll_device /dev/nbd0 10; do + echo "ERROR: boot device didn't show up after 10 seconds..." + echo " Falling back to interactive prompt" + echo " You can try to fix the problem manually, log out when you are finished" + launch_interactive_shell + done + + msg "::: Setup NBD from ${rootserver}:9040 at /dev/nbd0 ..." + nbd-client ${rootserver} 9040 /dev/nbd0 -persist + + archisodevice=/dev/nbd0 + fi +} diff --git a/archiso/install/nbd b/archiso/install/nbd new file mode 100644 index 0000000..bff232b --- /dev/null +++ b/archiso/install/nbd @@ -0,0 +1,20 @@ +# vim: set ft=sh: + +install () +{ + MODULES="nbd $(checked_modules "/drivers/net/") " + + BINARIES="" + FILES="" + SCRIPT="nbd" + + add_binary "/usr/sbin/nbd-client" "/bin/nbd-client" + add_binary "/lib/initcpio/ipconfig" "/bin/ipconfig" +} + +help () +{ +cat<<HELPEOF + This hook loads the necessary modules for boot via PXE and NBD. +HELPEOF +} |