#!/bin/sh -e

. /scripts/functions

[ -d /dev/fd ] || ln -snf /proc/self/fd /dev/fd
[ -e /dev/stdin ] || ln -snf /proc/self/fd/0 /dev/stdin
[ -e /dev/stdout ] || ln -snf /proc/self/fd/1 /dev/stdout
[ -e /dev/stderr ] || ln -snf /proc/self/fd/2 /dev/stderr

[ -n "$netboot_fs_size" ] || netboot_fs_size=2G

message "netboot: netboot_url="$ROOT", netboot_fs_size=$netboot_fs_size, netboot_log=$netboot_log"

ip addr list

mount -t tmpfs -o mode=0755,size="$netboot_fs_size" tmpfs /root

mkdir -p /var/lib/dhcpcd
try=0
while [ "$try" -lt ${ROOTDELAY:-180} ]; do
	try=$(($try+1))
	message "netboot: trying to get host info by DHCP, attempt #$try"
	message "netboot: available net interfaces:"
	ls /sys/class/net
	ls /sys/class/net | while read i; do
		[ "$i" != lo ] ||
			continue
		message "netboot: probing interface $i"
		ip link set "$i" up
		ip addr list dev "$i" | grep -Fq 'NO-CARRIER' ||
		dhcpcd -p -w -t 10 "$i" ||:
	done
	if ip addr list |
	   sed -n 's,^[[:space:]]\+inet[[:space:]]\+\([.0-9]\+\).*,\1,p' |
	   grep -Fvx 127.0.0.1; then
		break
	fi
	sleep 1
done

message "netboot: fetching root from '$ROOT'"
curl -sS -P- "$ROOT" | tar -xz -C /root || shell "Can't get rootfs from '$ROOT'"

ls /sys/class/net | while read i; do
	[ "$i" != lo ] ||
		continue
	message "netboot: downing interface $i"
	ipaddr="$(ip addr list "$i" | sed -n 's,^[[:space:]]\+inet[[:space:]]\+\([.0-9]\+\).*,\1,p')"
	ip addr del "$ipaddr" dev "$i"
	ip link set "$i" down
done

if [ -n "$netboot_log" ]; then
	echo "*.*      $netboot_log" > /root/etc/syslog.conf
fi

size=$( df -B1048576 /root |sed -n 's/^tmpfs \+[1-9][0-9]* \+\([1-9][0-9]*\) .*/\1/p')
size=$(($size*2))
message "netboot: remounting root to size ${size}M"
mount -oremount,size=${size}M /root || shell "Can't remount root tmpfs"
