[archiso] Use a mount handler in archiso_pxe_nbd hook

* Register a mount_hook if booted via PXE. This allows to do all needed
steps before and after calling archiso_mount_handler.

* umount and disconnect network device if copytoram=y

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
This commit is contained in:
Gerardo Exequiel Pozzi 2010-03-18 11:20:05 -03:00
parent 556515885d
commit 7483cffb30
3 changed files with 33 additions and 17 deletions

2
README
View File

@ -40,7 +40,7 @@ to create a mkinitcpio config file that suits your needs. Typically this
means modifying whatever hooks you want. A typical set of hooks for means modifying whatever hooks you want. A typical set of hooks for
archiso looks something like this: archiso looks something like this:
HOOKS="base archiso_early udev archiso pata scsi sata usb fw pcmcia filesystems usbinput" HOOKS="base udev archiso archiso_pxe_nbd pata scsi sata usb fw pcmcia filesystems usbinput"
It's probably worth mentioning that hardware autodetection and things It's probably worth mentioning that hardware autodetection and things
of that nature do not belong here. Only what's necessary to get the system of that nature do not belong here. Only what's necessary to get the system

View File

@ -1,6 +1,5 @@
# vim: set ft=sh: # vim: set ft=sh:
run_hook () run_hook () {
{
local line i address netmask gateway dns0 dns1 rootserver rootpath filename local line i address netmask gateway dns0 dns1 rootserver rootpath filename
: > /ip_opts : > /ip_opts
@ -45,19 +44,36 @@ run_hook ()
echo "IP-Config: ${address}/${netmask}" echo "IP-Config: ${address}/${netmask}"
echo "IP-Config: gw: ${gateway} dns0: ${dns0} dns1: ${dns1}" echo "IP-Config: gw: ${gateway} dns0: ${dns0} dns1: ${dns1}"
modprobe nbd 2> /dev/null nbdserver=${rootserver}
msg ":: Waiting for boot device..." mount_handler="archiso_pxe_nbd_mount_handler"
while ! poll_device /dev/nbd0 10; do fi
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" archiso_pxe_nbd_mount_handler () {
launch_interactive_shell newroot="${1}"
done
# Module autoloading like with loop devices does not work, doing manually...
msg "::: Setup NBD from ${rootserver}:9040 at /dev/nbd0 ..." modprobe nbd 2> /dev/null
nbd-client ${rootserver} 9040 /dev/nbd0 -persist while [ ! -b /dev/nbd0 ]; do
sleep 1
archisodevice=/dev/nbd0 done
msg "::: Setup NBD from ${nbdserver}:9040 at /dev/nbd0"
if [ "${copytoram}" = "y" ]; then
nbd-client ${nbdserver} 9040 /dev/nbd0
else
nbd-client ${nbdserver} 9040 /dev/nbd0 -persist
fi
archisodevice=/dev/nbd0
archiso_mount_handler ${newroot}
if [ "${copytoram}" = "y" ]; then
umount ${newroot}/bootmnt
umount /bootmnt
msg "::: Disconnect NBD from ${nbdserver}:9040 at /dev/nbd0"
nbd-client -d /dev/nbd0
fi fi
} }

View File

@ -2,5 +2,5 @@
MODULES="" MODULES=""
BINARIES="" BINARIES=""
FILES="" FILES=""
HOOKS="base udev archiso_pxe_nbd archiso pata scsi sata usb fw pcmcia filesystems usbinput" HOOKS="base udev archiso archiso_pxe_nbd pata scsi sata usb fw pcmcia filesystems usbinput"
COMPRESSION="lzma" COMPRESSION="lzma"