# default distro is the base debian/fedora type. others are fai & arch.
# for no pxe server, use a no-op like : or true.
-set -eE -o pipefail
-trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+
+x="$(readlink -f "$BASH_SOURCE")"; source "${x%/*}/bash-trace"
usage() {
Usage: ${0##*/} [OPTIONS] [HOST TYPE]
Configure dnsmasq pxe server options and fai-chboot if appropriate.
-
Without HOST TYPE, disable pxe server and fai server.
-TYPE is one of arch, plain, fai.
-HOST is a hostname known to the dhcp server, or default for all
+
+HOST A hostname known to the dhcp server, or default for all.
+TYPE One of arch, plain, fai.
+
+
+-r Don't redeploy fai config. For example, if there is a different host
+ that is mid-install.
+
+-a Don't setup pxe, just Wait for 2 dhcp acks, then disable the pxe
+ server after a delay. First ack is for pxe boot, 2nd ack is
+ for os boot. Sometimes on debian, there is a 3rd one shortly
+ after the 2nd. I can't remember exactly why this caused a
+ problem, but I'm hoping the sleep will take care of it.
+-S sets FAI_ACTION=sysinfo, see myfai-chboot for more info.
+-w Setup pxe, then wait like -a.
+-h|--help Print help and exit
+
+
Note, when switching between plain and arch, you will need to
do something like:
ssh wrt
ln -s <arch/debian iso dir> tftpboot
--r Don't redeploy fai config. For example, if there is a different host
- that is mid-install.
--a Wait for 2 dhcp acks, then disable the pxe server after a delay.
- First ack is for pxe boot, 2nd ack is for os boot. Sometimes
- on debian, there is a 3rd one shortly after the 2nd. I can't remember
- exactly why this caused a problem, but I'm hoping the sleep
- will take care of it.
--w Initially setup pxe, then wait like -a.
--h|--help Print help and exit
-
-
Note: Uses GNU getopt options parsing style
EOF
exit $1
##### begin command line parsing ########
-args=()
redep=true
acks=2
wait=false
-temp=$(getopt -l help harw "$@") || usage 1
+temp=$(getopt -l help harSw "$@") || usage 1
eval set -- "$temp"
while true; do
case $1 in
-a) wait=true; set=false; shift ;;
-r) redep=false; shift ;;
+ -S) chboot_arg=-S; shift ;;
-w) wait=true; set=true; shift ;;
-h|--help) usage ;;
--) shift; break ;;
esac
done
-read host type <<<"$@"
+read -r host type <<<"$@"
case $# in
0|2);;
;;
esac
-if [[ $host ]]; then
+if [[ $host && $host != default ]]; then
host_tag="tag:$host,"
fi
fai() {
cat <<EOF
-$set_host_tag
dhcp-boot=${host_tag}pxelinux.0,faiserver.lan,faiserver.lan
EOF
}
fi
regex=".*DHCPACK.*$host_regex$"
i=0
- tmp=$(mktemp)
- while (( i != wait_count )) && read line; do
+ while (( i != wait_count )) && read -r line; do
if [[ $line =~ $regex ]]; then
i=$((i+1))
echo $line
if $set; then
set-pxe
if [[ $type == fai ]]; then
- e myfai-chboot $host
+ e myfai-chboot $chboot_arg $host
if $redep; then
e fai-redep
fi
else
- e myfai-chboot
+ # This will fail if faiserver is not setup, so ignore any
+ # failure and don't bother us about it.
+ myfai-chboot &>/dev/null ||:
fi
fi