static usb ethnet addresses
[automated-distro-installer] / pxe-server
index 692ffbbc62f34eec05fe5be2ccb8541030146be1..1e99b03a004447eb1124f1d1585b5aa33a919a5a 100755 (executable)
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
-x="$(readlink -f "$BASH_SOURCE")"; source "${x%/*}/bash-trace"
+readonly this_file="$(readlink -f -- "${BASH_SOURCE[0]}")"
+script_dir="${this_file%/*}"
+# shellcheck source=./bash-trace
+source "${script_dir}/bash-trace"
+cd $script_dir
+PATH="$PATH:$PWD"
 
 
 usage() {
 
 
 usage() {
@@ -30,7 +35,10 @@ not general purpose, it has code specific to dhcp servers I run.
 Without TYPE, disable  server and fai server. In that case, HOST is only
 needed for fsf office network.
 
 Without TYPE, disable  server and fai server. In that case, HOST is only
 needed for fsf office network.
 
-HOST       A hostname known to the dhcp server, or default for all.
+HOST       Only do dhcp pxe for HOST. The hostname must be known to the dhcp
+           server to target its mac. Use "default" for all hosts.
+           Required in fsf office environment.
+
 TYPE       One of arch, parabola, plain, fai.
 
 -a         Don't setup pxe, just Wait for 2 dhcp acks, then disable the pxe
 TYPE       One of arch, parabola, plain, fai.
 
 -a         Don't setup pxe, just Wait for 2 dhcp acks, then disable the pxe
@@ -39,8 +47,9 @@ TYPE       One of arch, parabola, plain, fai.
            after the 2nd. I can't remember exactly why this caused a
            problem, but I'm hoping the sleep will take care of it.
 -d         Don't alter dhcp config. Only make sense for fai type, and on network
            after the 2nd. I can't remember exactly why this caused a
            problem, but I'm hoping the sleep will take care of it.
 -d         Don't alter dhcp config. Only make sense for fai type, and on network
-           other than home or fsf.
+           other than home or fsf, when using fai-cd, or pxe-kexec.
 -k         Pass -k to myfai-chboot.
 -k         Pass -k to myfai-chboot.
+--no-r     Pass --no-r to myfai-chboot.
 -r         Don't redeploy fai config. For example, if there is a different host
            that is mid-install.
 
 -r         Don't redeploy fai config. For example, if there is a different host
            that is mid-install.
 
@@ -90,20 +99,21 @@ dhcp=true
 redep=true
 acks=2
 wait=false
 redep=true
 acks=2
 wait=false
-fsf=false
+fsf_office=false
 
 case $HOSTNAME in
 
 case $HOSTNAME in
-  x3|kw) fsf=true ;;
+  x3|kw) fsf_office=true ;;
 esac
 
 chboot_args=()
 esac
 
 chboot_args=()
-temp=$(getopt -l help adkrSwh "$@") || usage 1
+temp=$(getopt -l no-r,help adkrSwh "$@") || usage 1
 eval set -- "$temp"
 while true; do
   case $1 in
     -a) wait=true; set=false; shift ;;
     -d) dhcp=false; shift ;;
     -k) chboot_args+=(-k); shift ;;
 eval set -- "$temp"
 while true; do
   case $1 in
     -a) wait=true; set=false; shift ;;
     -d) dhcp=false; shift ;;
     -k) chboot_args+=(-k); shift ;;
+    --no-r) chboot_args+=(--no-r); shift ;;
     -r) redep=false; shift ;;
     -S) chboot_args+=(-S); shift ;;
     -w) wait=true; set=true; shift ;;
     -r) redep=false; shift ;;
     -S) chboot_args+=(-S); shift ;;
     -w) wait=true; set=true; shift ;;
@@ -137,10 +147,14 @@ esac
 
 
 if $wait && ! $dhcp; then
 
 
 if $wait && ! $dhcp; then
-  echo "$0: error -w conflicts with -d, choose one or other"
+  echo "$0: error -w conflicts with -d, choose one or other" >&2
   exit 1
 fi
 
   exit 1
 fi
 
+if $fsf_office && [[ ! $host ]]; then
+  echo "$0: at fsf_office, provide HOST arg" >&2
+  exit 1
+  fi
 
 if [[ $host && $host != default ]]; then
   host_tag="tag:$host,"
 
 if [[ $host && $host != default ]]; then
   host_tag="tag:$host,"
@@ -178,14 +192,14 @@ EOF
 }
 
 ack-wait() {
 }
 
 ack-wait() {
-  if $fsf; then
+  if $fsf_office; then
     wait_cmd="ssh tarantula.office.fsf.org tail -n0 -f /var/log/syslog"
   else
     wait_cmd="ssh cmc logread -f"
   fi
   wait_count=$1
   if [[ $host ]]; then
     wait_cmd="ssh tarantula.office.fsf.org tail -n0 -f /var/log/syslog"
   else
     wait_cmd="ssh cmc logread -f"
   fi
   wait_count=$1
   if [[ $host ]]; then
-    if $fsf; then
+    if $fsf_office; then
       host_regex=" $(getent hosts kw | awk '{print $1}' | sed 's/\./\\./g')"
     else
       host_regex=" $host"
       host_regex=" $(getent hosts kw | awk '{print $1}' | sed 's/\./\\./g')"
     else
       host_regex=" $host"
@@ -204,7 +218,7 @@ ack-wait() {
 
 set-pxe() {
   $dhcp || return 0
 
 set-pxe() {
   $dhcp || return 0
-  if $fsf; then
+  if $fsf_office; then
     if [[ ! $cmd ]]; then
       e "removing pxe for $host on tarantula"
       ssh tarantula.office.fsf.org bash -e <<EOF
     if [[ ! $cmd ]]; then
       e "removing pxe for $host on tarantula"
       ssh tarantula.office.fsf.org bash -e <<EOF
@@ -244,7 +258,7 @@ if $set; then
   else
     # This will fail if faiserver is not setup, so ignore any
     # failure and don't bother us about it.
   else
     # This will fail if faiserver is not setup, so ignore any
     # failure and don't bother us about it.
-    myfai-chboot &>/dev/null ||:
+    m myfai-chboot &>/dev/null ||:
   fi
 fi
 
   fi
 fi