fixes plus readme updates
[automated-distro-installer] / fai-revm
index 97b6338ff1f97e9d64871c39ed9f628c98d6c132..4b3d0d01501f3741c0e17e96cdf84b30e5a6792d 100755 (executable)
--- a/fai-revm
+++ b/fai-revm
 
 
 
 
 
 
-cleanup() { :; }
-set -eE -o pipefail
-trap 'cleanup; echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
-script_dir=$(dirname $(readlink -f "$BASH_SOURCE"))
+x="$(readlink -f "$BASH_SOURCE")"
+script_dir="${x%/*}"
+source "${script_dir}/bash-trace"
 
 e() { echo "$*"; "$@"; }
 
 
 e() { echo "$*"; "$@"; }
 
@@ -34,8 +33,11 @@ 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.
+-r         Do not boot after install is complete
 -h|--help  Print help and exit.
 
 Note: Uses GNU getopt options parsing style
 -h|--help  Print help and exit.
 
 Note: Uses GNU getopt options parsing style
@@ -43,15 +45,17 @@ EOF
     exit $1
 }
 
     exit $1
 }
 
-
+orig_args=("$@")
 new_disk=false
 new_disk=false
-reboot=true
-temp=$(getopt -l help hnr "$@") || usage 1
+pxe=false
+temp=$(getopt -l help dnprh "$@") || usage 1
 eval set -- "$temp"
 while true; do
     case $1 in
 eval set -- "$temp"
 while true; do
     case $1 in
+        -d) dhcp_arg=-d; shift ;;
         -n) new_disk=true; shift ;;
         -n) new_disk=true; shift ;;
-        -r) reboot=false; shift ;;
+        -p) pxe=true; shift ;;
+        -r) reboot_arg=--noreboot; shift ;;
         -h|--help) usage ;;
         --) shift; break ;;
         *) echo "$0: Internal error!" ; exit 1 ;;
         -h|--help) usage ;;
         --) shift; break ;;
         *) echo "$0: Internal error!" ; exit 1 ;;
@@ -68,9 +72,8 @@ 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
     # 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
     cp -ar /a/bin/fai /tmp/faifreeze
-    exec /tmp/faifreeze/${BASH_SOURCE##*/} "$@"
+    exec /tmp/faifreeze/${BASH_SOURCE##*/} "${orig_args[@]}"
 fi
 
 cd $script_dir
 fi
 
 cd $script_dir
@@ -79,15 +82,28 @@ is_arch_revm() {
     [[ ${0##*/} == arch-revm ]]
 }
 
     [[ ${0##*/} == arch-revm ]]
 }
 
-cleanup() { ./pxe-server; }
+cleanup() {
+    echo "doing cleanup"
+    e ./pxe-server $dhcp_arg
+    ./faiserver-disable
+}
+_errcatch_cleanup=cleanup
+
+boot_arg=--pxe
 if is_arch_revm; then
 if is_arch_revm; then
-    ./pxe-server demohost arch
+    e ./pxe-server $dhcp_arg demohost arch
     sleep 2
     # via osinfo-query os. guessing arch is closest to latest fedora.
     variant=fedora22
 else
     sleep 2
     # via osinfo-query os. guessing arch is closest to latest fedora.
     variant=fedora22
 else
-    ./pxe-server demohost fai
+  if $pxe; then
+    e ./pxe-server $dhcp_arg demohost fai
     sleep 2
     sleep 2
+    else
+      boot_arg="--cdrom /a/bin/fai-basefiles/autodiscover.iso"
+     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
     # 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
@@ -106,7 +122,7 @@ for ((i=1; i <= disk_count; i++)); do
     disk_arg+=("--disk path=$f")
     if $new_disk || [[ ! -e $f ]]; then
         s rm -f $f
     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
+        e s qemu-img create -o preallocation=metadata -f qcow2 $f 50G
     fi
 done
 
     fi
 done
 
@@ -114,24 +130,33 @@ if [[ $SSH_CLIENT ]]; then
     console_arg=--noautoconsole
 fi
 
     console_arg=--noautoconsole
 fi
 
+# docker makes forward default to drop, which blocks the vm pxe on flidas. easiest solution:
+s 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 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 $reboot_arg \
+#   --graphics spice,listen=0.0.0.0 $console_arg |& grep -v '^ *$' | uniq &
+
+
+e s virt-install --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
     fg
 fi
 
 sleep 30
 if [[ $SSH_CLIENT ]]; then
     fg
 fi
 
 sleep 30
-while ! timeout -s 9 10 ssh root@$name /bin/true; do
+while ! timeout -s 9 10 ssh -oBatchMode=yes root@$name /bin/true; do
     e sleep 5
 done
     e sleep 5
 done
-cleanup() { :; }
+unset _errcatch_cleanup
 e pxe-server
 if is_arch_revm; then
     ./arch-init-remote $name
 e pxe-server
 if is_arch_revm; then
     ./arch-init-remote $name