ISO/archiso/hooks/archiso_pxe_nbd
Gerardo Exequiel Pozzi 0ff40f153a [archiso] Use poll_device() in _pxe_nbd and _loop_mnt hooks.
Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
2010-12-08 14:44:48 -03:00

91 lines
2.8 KiB
Bash

# vim: set ft=sh:
run_hook () {
local line i address netmask gateway dns0 dns1 rootserver rootpath filename
: > /ip_opts
if [ -n "${ip}" ]; then
if [ -n "${BOOTIF}" ]; then
bootif_mac=${BOOTIF#01-}
bootif_mac=${bootif_mac//-/:}
bootif_dev=$(grep -l $bootif_mac /sys/class/net/*/address)
bootif_dev=${bootif_dev#/sys/class/net/}
bootif_dev=${bootif_dev%/address}
ip="$ip::$bootif_dev"
fi
# 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}"
nbdserver=${rootserver}
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
msg ":: Waiting for boot device..."
while ! poll_device /dev/nbd0 30; do
echo "ERROR: boot device didn't show up after 30 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 ${nbdserver} at /dev/nbd0"
if [ "${copytoram}" = "y" ]; then
nbd-client ${nbdserver} -N archiso /dev/nbd0
else
nbd-client ${nbdserver} -N archiso /dev/nbd0 -persist
fi
archisodevice=/dev/nbd0
archiso_mount_handler ${newroot}
if [ "${copytoram}" = "y" ]; then
msg "::: Disconnect NBD from ${nbdserver}:9040 at /dev/nbd0"
nbd-client -d /dev/nbd0
fi
}