You are not logged in.
Pages: 1
I wrote a hook for diskless boot from an AoE device. It works fine, but I'd like to get some input. Any general criticism is welcome, but there are two things in particular I want to get input about:
1) I ripped off the network config from the net hook of mkinitcpio-nfs-utils. I did this rather than use the net hook itself because a) even though it's trivial, I don't want to pull the nfs stuff into the initrd and b) I use two of the variables from /tmp/net-*.conf, the sourcing of which is part of the ip configuration.
2) The bigger issue is the fact that aoe 'discovery' is rather simplistic; it boils down to echo >/dev/etherd/discover . So I use two for loops, one to confirm the server is reachable and one to do the discovery and test for the existence of $root.
Anyway, here's the hook:
#!/usr/bin/ash
run_hook() {
local 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}"
for conf in /tmp/net-*.conf; do
[ -f "$conf" ] && . "$conf"
done
fi
echo -n "Waiting for network"
for i in 0 1 2 3 4; do
if ping -w1 -c1 $ROOTSERVER >/dev/null 2>&1; then
echo
run_discover $DEVICE
break
else
echo -n '.'
fi
done
echo
}
run_discover() {
local i
modprobe aoe aoe_iflist="$1"
echo -n "Discovering device on $1"
for i in 0 1 2 3 4; do
aoe-discover
if [ -e $root ]; then
return
else
sleep 1
echo -n '.'
fi
done
}
But whether the Constitution really be one thing, or another, this much is certain - that it has either authorized such a government as we have had, or has been powerless to prevent it. In either case, it is unfit to exist.
-Lysander Spooner
Offline
Offline
Yeah, you should look at /sys/module/aoe/parameters/ . I hope those files are runtime writable though.
fs/super.c : "Self-destruct in 5 seconds. Have a nice day...\n",
Offline
The logic should only allow 'run_discover $DEVICE' to run once, so I don't see how modprobe would be called more than once.
But whether the Constitution really be one thing, or another, this much is certain - that it has either authorized such a government as we have had, or has been powerless to prevent it. In either case, it is unfit to exist.
-Lysander Spooner
Offline
The logic should only allow 'run_discover $DEVICE' to run once, so I don't see how modprobe would be called more than once.
It doesn't get called more than once, but I think it would be more obvious if you moved the call to run_discover after the ping-loop.
| alias CUTF='LANG=en_XX.UTF-8@POSIX ' |
Offline
@alphaniner
Don't mean to be necrobumping this thread (3 months shouldn't be a problem), but did you know there's an `aoeping` utility in aoetools that should fit your need. Yes, it's 13KiB, but it has some other useful options, too.
With `aoeping` you can make your hook more generic: since AoE is an Ethernet-level protocol, you don't need IP addresses configured on either the target or the client (but obviously, it doesn't hurt :-) ). In fact, you don't even need the `ipconfig` binary, just bring up the network interfaces you wish to use for AoE by doing `ifconfig <netif> up` (`ifconfig` should be enabled as a Busybox applet), then use `aoeping` with a suitable timeout instead of a 'regular' ping loop to check if the disks are up.
When all is done and the root fs is mounted, regular netctl / systemd-networkd.service / whatever can take care of DHCP and stuff, just make sure that it doesn't bring down the interface inbetween phases (important!)
Last edited by ackalker (2014-05-19 19:25:54)
Offline
Don't mean to be necrobumping this thread
Well, it's certainly ok with me...
Anyway, I put this on the backburner due to 'serious business' at work and lack of equipment at home, then kind of forgot about it. Since then I'm using AoE at home and work, but just from a running system. I do plan on revisiting AoE boot though,, so thanks for the tip!
But whether the Constitution really be one thing, or another, this much is certain - that it has either authorized such a government as we have had, or has been powerless to prevent it. In either case, it is unfit to exist.
-Lysander Spooner
Offline
You're welcome :-)
I've gone ahead and uploaded my take on it to the AUR: https://aur.archlinux.org/packages/mkinitcpio-aoe/
For help, use the usual:
$ mkinitcpio -H aoe
Please let me know what you think of it :-)
Offline
Well, testing in a VM worked perfectly, but real hardware always comes around to bite you :-(
I've added a pair of sleep commands (yuck, sleep is for lazy people!), hope these will help...
Offline
Uploaded a new version: https://aur.archlinux.org/packages/mkinitcpio-aoe/
Tested on a VM and on my HTPC, working well.
Any comments are very welcome :-)
Offline
Pages: 1