various fixes for etiona and pxe
[automated-distro-installer] / pxe-server
index e6680883201c5f11d4a096120a779e4dfb25c852..6ca453c56790d6ad02939e867541819f9ef760f1 100755 (executable)
@@ -132,9 +132,9 @@ fi
 
 archlike() {
   cat <<EOF
-dhcp-option-force=209,boot/syslinux/${type}iso.cfg
-dhcp-option-force=210,/${type}/
-dhcp-boot=${host_tag}/${type}/boot/syslinux/lpxelinux.0
+${host_tag}209,boot/syslinux/${type}iso.cfg
+${host_tag}210,/${type}/
+${host_tag}bootfile-name,/${type}/boot/syslinux/lpxelinux.0
 EOF
 }
 
@@ -142,14 +142,21 @@ plain() {
   # if arch based was used before, this additionally needs
   # the tftp link in /mnt/usb to be changed.
   cat <<EOF
-dhcp-boot=${host_tag}pxelinux.0
+${host_tag}bootfile-name,pxelinux.0
 EOF
 }
 
 fai() {
   cat <<EOF
-dhcp-boot=${host_tag}pxelinux.0,faiserver.b8.nz,faiserver.b8.nz
+${host_tag}bootfile-name,pxelinux.0
+${host_tag}server-ip-address,$faiserverip
+${host_tag}tftp-server,$faiserverip
 EOF
+  # Note, previously used normal dnsmasq option, but it requires dnsmasq
+  # restart, which causes momentary dns failures, which can bork an
+  # install.
+  #
+  # dhcp-boot=${host_tag}pxelinux.0,faiserver.b8.nz,faiserver.b8.nz
 }
 
 ack-wait() {
@@ -162,8 +169,8 @@ ack-wait() {
   if [[ $host ]]; then
     if $fsf; then
       host_regex=" $(getent hosts kw | awk '{print $1}' | sed 's/\./\\./g')"
-      else
-    host_regex=" $host"
+    else
+      host_regex=" $host"
     fi
   fi
   regex=".*DHCPACK.*$host_regex\b"
@@ -196,11 +203,18 @@ EOF
   else
     e "updating dnsmasq.conf:"
     m $cmd
-    ${cmd:-:}|ssh wrt "cedit pxe /etc/dnsmasq.conf || /etc/init.d/dnsmasq restart
+    ${cmd:-:}|ssh wrt "dd of=/etc/dnsmasq-dhcpopts.conf; /etc/init.d/dnsmasq reload
 $([[ $type == arch || $type == parabola ]] && echo archlike-pxe-mount)"
   fi
 }
 
+type -t host &>/dev/null || sudo apt-get -y install dnsutils
+faiserverip=$(host faiserver | sed -rn 's/^\S+ has address //p;T;q' ||:)
+if [[ ! $faiserverip || $faiserverip =~ [[:space:]] ]]; then
+  echo "$0: error: failed to get \$faiserverip, got: $faiserverip"
+  exit 1
+fi
+
 
 if $set; then
   set-pxe