# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-# Setup dhcp server to point to tftp server,
-# and depending on the type, setup the tftp server.
-# usage: $0 TYPE
-# 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() {
cat <<EOF
Usage: ${0##*/} [OPTIONS] [HOST TYPE]
-One line description
-
-TYPE is one of arch, plain, fai.
-HOST is a hostname known to the dhcp server, or default for all, or none to disable
-
--r Don't redeploy fai config.
--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.
+Configure dnsmasq boot options and fai-chboot if appropriate.
+
+Without HOST TYPE, disable server and fai server.
+
+HOST A hostname known to the dhcp server, or default for all.
+TYPE One of arch, plain, fai.
+
+-d Don't alter dhcp config. Only make sense for fai type, and on network
+ other than home network.
+-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
+cd /mnt/usb
+rm tftpboot
+ln -s <arch/debian iso dir> tftpboot
+
+
Note: Uses GNU getopt options parsing style
EOF
exit $1
##### begin command line parsing ########
-args=()
+dhcp=true
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 ;;
+ -d) dhcp=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
+dhcp-boot=${host_tag}pxelinux.0,faiserver.b8.nz,faiserver.b8.nz
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
}
set-pxe() {
+ $dhcp || return 0
+ echo "$0: updating dnsmasq.conf:"
+ $type
${type:-:}|ssh wrt "cedit pxe /etc/dnsmasq.conf || /etc/init.d/dnsmasq restart
$([[ $type == arch ]] && echo arch-pxe-mount)"
}
if $set; then
set-pxe
if [[ $type == fai ]]; then
- myfai-chboot $host
+ e myfai-chboot $chboot_arg $host
if $redep; then
- fai-redep
+ e fai-redep
fi
else
- 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