diff --git a/README b/README index 7241321..e3001be 100644 --- a/README +++ b/README @@ -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 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 of that nature do not belong here. Only what's necessary to get the system diff --git a/archiso/hooks/archiso_pxe_nbd b/archiso/hooks/archiso_pxe_nbd index 9df5a95..2d4163e 100644 --- a/archiso/hooks/archiso_pxe_nbd +++ b/archiso/hooks/archiso_pxe_nbd @@ -1,6 +1,5 @@ # vim: set ft=sh: -run_hook () -{ +run_hook () { local line i address netmask gateway dns0 dns1 rootserver rootpath filename : > /ip_opts @@ -45,19 +44,36 @@ run_hook () echo "IP-Config: ${address}/${netmask}" echo "IP-Config: gw: ${gateway} dns0: ${dns0} dns1: ${dns1}" - modprobe nbd 2> /dev/null + nbdserver=${rootserver} - 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 + mount_handler="archiso_pxe_nbd_mount_handler" + fi +} + +archiso_pxe_nbd_mount_handler () { + newroot="${1}" + + # Module autoloading like with loop devices does not work, doing manually... + modprobe nbd 2> /dev/null + while [ ! -b /dev/nbd0 ]; do + sleep 1 + 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 } diff --git a/configs/syslinux-iso/mkinitcpio.conf b/configs/syslinux-iso/mkinitcpio.conf index 1f61638..e041ad2 100644 --- a/configs/syslinux-iso/mkinitcpio.conf +++ b/configs/syslinux-iso/mkinitcpio.conf @@ -2,5 +2,5 @@ MODULES="" BINARIES="" 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"