[archiso] Add nbd hook, to make posible boot archiso from PXE via a NBD.

nbd (network block device utilities) package is required. This package is in AUR
at this moment: http://aur.archlinux.org/packages.php?ID=9691
Also mkinitcpio-nfs-utils is required for ipconfig.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
This commit is contained in:
Gerardo Exequiel Pozzi 2010-03-17 10:43:11 -03:00
parent d875052f56
commit 830555f71a
3 changed files with 87 additions and 0 deletions

View File

@ -8,6 +8,8 @@ install: all
# hooks/install are needed by mkinitcpio # hooks/install are needed by mkinitcpio
install -D -m 644 hooks/archiso $(DESTDIR)/lib/initcpio/hooks/archiso 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 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 docs and examples
install -d -m 644 $(DESTDIR)/usr/share/archiso/ install -d -m 644 $(DESTDIR)/usr/share/archiso/
cp -r ../configs $(DESTDIR)/usr/share/archiso/configs cp -r ../configs $(DESTDIR)/usr/share/archiso/configs
@ -18,5 +20,7 @@ uninstall:
rm -f $(DESTDIR)/usr/bin/testiso rm -f $(DESTDIR)/usr/bin/testiso
rm -f $(DESTDIR)/lib/initcpio/hooks/archiso rm -f $(DESTDIR)/lib/initcpio/hooks/archiso
rm -f $(DESTDIR)/lib/initcpio/install/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/archiso/
rm -rf $(DESTDIR)/usr/share/doc/archiso/ rm -rf $(DESTDIR)/usr/share/doc/archiso/

63
archiso/hooks/nbd Normal file
View File

@ -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
}

20
archiso/install/nbd Normal file
View File

@ -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
}