ISO/archiso/hooks/archiso_pxe_nbd
Gerardo Exequiel Pozzi da813e5b9d [hooks/archiso_pxe_nbd] Refactor, remove sed usage.
* ipconfig cmd writes a file in /tmp that is ready for direct evaluation.
We can use this instead of parsing the output, to do this some variable
renames are needed.

Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386@yahoo.com.ar>
2011-11-16 16:37:04 -03:00

72 lines
2.2 KiB
Bash

# vim: set ft=sh:
run_hook () {
local line i net_mac bootif_mac bootif_dev
# These variables will be parsed from /tmp/net-*.conf generated by ipconfig
local DEVICE
local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1
local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
local filename
# /tmp/net-*.conf
if [ -n "${ip}" ]; then
if [ -n "${BOOTIF}" ]; then
bootif_mac=${BOOTIF#01-}
bootif_mac=${bootif_mac//-/:}
for i in /sys/class/net/*/address; do
read net_mac < ${i}
if [ "${bootif_mac}" == "${net_mac}" ]; then
bootif_dev=${i#/sys/class/net/}
bootif_dev=${bootif_dev%/address}
break
fi
done
ip="${ip}::${bootif_dev}"
fi
# setup network and save some values
ipconfig "ip=${ip}"
. /tmp/net-*.conf
nbdserver=${ROOTSERVER}
[[ -z "${archiso_nbd_name}" ]] && archiso_nbd_name="archiso"
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_nbd_name} /dev/nbd0
else
nbd-client ${nbdserver} -N ${archiso_nbd_name} /dev/nbd0 -persist
fi
archisodevice=/dev/nbd0
archiso_mount_handler ${newroot}
if [ "${copytoram}" = "y" ]; then
msg "::: Disconnect NBD from ${nbdserver} at /dev/nbd0"
nbd-client -d /dev/nbd0
else
mkdir -p /run/archiso
pidof nbd-client > /run/archiso/nbd_client.pid
cp /archiso_pxe_nbd ${newroot}/etc/rc.d/functions.d/
fi
}