summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archiso/Makefile4
-rw-r--r--archiso/hooks/nbd63
-rw-r--r--archiso/install/nbd20
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
+}