various fixes, upgrade nfsroot to buster
[automated-distro-installer] / fai-revm
index d8833ab4b01e2e920f6f31bc2793a64c56f0b763..acf0db27fc0ae019e02b49d71063eadc0b4eaba8 100755 (executable)
--- a/fai-revm
+++ b/fai-revm
@@ -1,4 +1,4 @@
-#!/bin/bash -l
+#!/bin/bash
 # Copyright (C) 2016 Ian Kelling
 
 # This program is free software; you can redistribute it and/or
 # Copyright (C) 2016 Ian Kelling
 
 # This program is free software; you can redistribute it and/or
 
 
 
 
 
 
-cleanup() { :; }
-set -eE -o pipefail
-trap 'cleanup; echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
-script_dir=$(dirname $(readlink -f "$BASH_SOURCE"))
+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"
 
 e() { echo "$*"; "$@"; }
 
 
 usage() {
 
 e() { echo "$*"; "$@"; }
 
 
 usage() {
-    cat <<EOF
+  cat <<EOF
 # Usage: ${0##*/} [OPTIONS]
 Setup fai or arch pxe (depending on $0 name)
 then start a virtual machine to test the config
 # Usage: ${0##*/} [OPTIONS]
 Setup fai or arch pxe (depending on $0 name)
 then start a virtual machine to test the config
@@ -34,108 +36,143 @@ then start a virtual machine to test the config
 Note, sometimes shutting down the existing demohost vm
 fails. Just run again if that happens.
 
 Note, sometimes shutting down the existing demohost vm
 fails. Just run again if that happens.
 
--r         Do not reboot.
--n         Create new qcow2(s) for vm
+-d         Don't do dhcp setup for when we aren't on Ian's home network.
+-n         Create new qcow2(s) for vm. Good for testing partitioning
+           script, to ensure a blank disk.
+-p         Use pxe instead of autodiscover iso with fai.
+-c         Use normal fai-cd iso is instead of autodiscover iso.
+-r         Do not boot after install is complete
 -h|--help  Print help and exit.
 
 Note: Uses GNU getopt options parsing style
 EOF
 -h|--help  Print help and exit.
 
 Note: Uses GNU getopt options parsing style
 EOF
-    exit $1
+  exit $1
 }
 
 }
 
-
-# not sure why I wanted to have this option before. oh well.
-redeploy=true
-
-reboot=true
-temp=$(getopt -l opt o "$@") || usage 1
+orig_args=("$@")
+new_disk=false
+pxe=false
+iso=autodiscover.iso
+temp=$(getopt -l help dnpcrh "$@") || usage 1
 eval set -- "$temp"
 while true; do
 eval set -- "$temp"
 while true; do
-    case $1 in
-        -n) new_disk=true; shift ;;
-        -r) reboot=false; shift ;;
-        -h|--help) usage ;;
-        --) shift; break ;;
-        *) echo "$0: Internal error!" ; exit 1 ;;
-    esac
+  case $1 in
+    -d) dhcp_arg=-d; shift ;;
+    -n) new_disk=true; shift ;;
+    -p) pxe=true; shift ;;
+    -c) iso=netinst.iso; shift ;;
+    -r) reboot_arg=--noreboot; shift ;;
+    -h|--help) usage ;;
+    --) shift; break ;;
+    *) echo "$0: Internal error!" ; exit 1 ;;
+  esac
 done
 
 
 done
 
 
-if [[ $1 == -r ]]; then
-    redeploy=false
-fi
-
+# change this to test different disk counts. 1 and > 1 should be the only
+# important things to test.
 disk_count=2
 
 
 if [[ $script_dir == /a/bin/* ]]; then
 disk_count=2
 
 
 if [[ $script_dir == /a/bin/* ]]; then
-    # Copy our script elsewhere so we can develop it
-    # and save it at the same time it's running
-    rm -rf /tmp/faifreeze
-    mkdir -p /a/tmp
-    cp -ar /a/bin/fai /tmp/faifreeze
-    exec /tmp/faifreeze/${BASH_SOURCE##*/} "$@"
+  # Copy our script elsewhere so we can develop it
+  # and save it at the same time it's running
+  rm -rf /tmp/faifreeze
+  cp -ar /a/bin/fai /tmp/faifreeze
+  exec /tmp/faifreeze/${BASH_SOURCE##*/} "${orig_args[@]}"
 fi
 
 fi
 
-cd $script_dir
 
 is_arch_revm() {
 
 is_arch_revm() {
-    [[ ${0##*/} == arch-revm ]]
+  [[ ${0##*/} == arch-revm ]]
+}
+
+err-cleanup() {
+  echo "doing cleanup"
+  e ./pxe-server $dhcp_arg
+  ./faiserver-disable
 }
 
 }
 
-cleanup() { ./pxe-server :; }
+boot_arg=--pxe
 if is_arch_revm; then
 if is_arch_revm; then
-    ./pxe-server arch
-    sleep 2
-    # via osinfo-query os. guessing arch is closest to latest fedora.
-    variant=fedora22
+  e ./pxe-server $dhcp_arg demohost arch
+  sleep 2
+  # via osinfo-query os. guessing arch is closest to latest fedora.
+  variant=fedora22
 else
 else
-    ./pxe-server fai
+  if $pxe; then
+    e ./pxe-server $dhcp_arg demohost fai
     sleep 2
     sleep 2
-    if $redeploy; then
-        ./fai-redep
+  else
+    killall fai-monitor &>/dev/null ||:
+    fai-monitor &
+    if [[ ! $BASEFILE_DIR ]]; then
+      BASEFILE_DIR=/tmp
     fi
     fi
-    variant=debian8
+    isopath=$BASEFILE_DIR/$iso
+    isosrc=$BASEFILE_DIR/BUSTER64.tar.gz
+    if [[ ! -e $isopath || $(stat -c %Y $isopath) -lt $(stat -c %Y $isosrc) ]]; then
+      e sudo fai-cd -g $(readlink -f grub.cfg.${iso%%.*}) -f -A $isopath
+    fi
+    boot_arg="--cdrom $isopath"
+    e fai-redep
+    e myfai-chboot default
+  fi
+  # I don't think these variants actually make a diff for us, but I
+  # use the appropriate one when trying a new distro just in case.
+  variant=ubuntu14.04
+  #variant=ubuntu16.04
+  #variant=debian8
 fi
 
 name=demohost
 
 fi
 
 name=demohost
 
-e s virshrm $name ||:
+e sudo virsh destroy $name ||:
+e sudo virsh undefine $name ||:
 
 
 disk_arg=()
 for ((i=1; i <= disk_count; i++)); do
 
 
 disk_arg=()
 for ((i=1; i <= disk_count; i++)); do
-    f=/var/lib/libvirt/images/${name}$i
-    disk_arg+=("--disk path=$f")
-    if $new_disk || [[ ! -e $f ]]; then
-        s rm -f $f
-        e s qemu-img create -o preallocation=metadata -f qcow2 $f 20G
-    fi
+  f=/var/lib/libvirt/images/${name}$i
+  disk_arg+=("--disk path=$f")
+  if $new_disk || [[ ! -e $f ]]; then
+    sudo rm -f $f
+    e sudo qemu-img create -o preallocation=metadata -f qcow2 $f 50G
+  fi
 done
 
 if [[ $SSH_CLIENT ]]; then
 done
 
 if [[ $SSH_CLIENT ]]; then
-    console_arg=--noautoconsole
+  console_arg=--noautoconsole
 fi
 
 fi
 
+# docker makes forward default to drop, which blocks the vm pxe on flidas. easiest solution:
+e sudo iptables -P FORWARD ACCEPT
+
 # --cpu host: this causes mkfs.btrfs to fail with a stack trace which began
 # something like:
 # init_module+0x108/0x1000 [raid6_pq]
 #
 # uniq is to stop gtk-warning spam
 # --cpu host: this causes mkfs.btrfs to fail with a stack trace which began
 # something like:
 # init_module+0x108/0x1000 [raid6_pq]
 #
 # uniq is to stop gtk-warning spam
-e s virt-install --os-variant $variant  -n $name --pxe -r 2048 --vcpus 1 \
-  ${disk_arg[*]} -w bridge=br0,mac=52:54:00:9c:ef:ad \
+# e sudo virt-install --os-variant $variant  -n $name --pxe -r 2048 --vcpus 1 \
+  #   ${disk_arg[*]} -w bridge=br0,mac=52:54:00:9c:ef:ad $reboot_arg \
+  #   --graphics spice,listen=0.0.0.0 $console_arg |& grep -v '^ *$' | uniq &
+
+e sudo systemctl start libvirtd
+e sudo virt-install --rng /dev/urandom --os-variant $variant  -n $name $boot_arg -r 2048 --vcpus 1 \
+  ${disk_arg[*]} -w bridge=br0,mac=52:54:00:9c:ef:ad $reboot_arg \
   --graphics spice,listen=0.0.0.0 $console_arg |& grep -v '^ *$' | uniq &
 
   --graphics spice,listen=0.0.0.0 $console_arg |& grep -v '^ *$' | uniq &
 
+
 if [[ $SSH_CLIENT ]]; then
 if [[ $SSH_CLIENT ]]; then
-    fg
+  fg
 fi
 
 fi
 
-sleep 30
-while ! timeout -s 9 10 ssh root@$name /bin/true; do
-    e sleep 5
+sleep 90
+while ! timeout -s 9 10 ssh -oBatchMode=yes root@$name /bin/true; do
+  e sleep 5
 done
 done
-cleanup() { :; }
-e pxe-server :
+unset -f err-cleanup
+e ./pxe-server $dhcp_arg
 if is_arch_revm; then
 if is_arch_revm; then
-    ./arch-init-remote $name
+  ./arch-init-remote $name
 fi
 fi