#!/bin/bash
-#
-# You can copy this to a http server, then wget -O- url|sudo bash
-# or curl|bash, if curl is installed.
-#
-# This has been tested on trisquel belanos and ubuntu xenial.
-#
-# If the screen just sits in a weird color inverted, corrupted looking state,
-# it's probably nothing wrong with the computer, but a problem
-# with the fai server. If you can do this from a virtual terminal,
-# it will print out more info (I know from running it on a vm).
+# Copyright (C) 2016 Ian Kelling
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+usage() {
+ cat <<EOF
+Usage: ${0##*/} [-h|--help]
+fai kexec from upstream live cds, i.e. curl|bash
+
+You can copy this to a http server, then wget -O- url|sudo bash
+curl is sometimes not preinstalled on a live cd.
+
+This has been tested on trisquel belanos and ubuntu xenial.
+
+If the screen just sits in a weird color inverted, corrupted looking state,
+it's probably nothing wrong with the computer, but a problem
+with the fai server. If you can do this from a virtual terminal,
+it will print out more info (I know from running it on a vm).
+EOF
+ exit $1
+}
+case $1 in
+ -h|--help) usage ;;
+esac
+
set -ex
if grep -q ID=ubuntu /etc/os-release; then
+ # add universe, pxe-kexec is there
sed -ri '/^\s*deb/{/universe/!s/$/ universe/}' /etc/apt/sources.list
fi
-apt-get update
-apt-get install -y debconf
-debconf-set-selections <<EOF
+if ! type -p pxe-kexec &>/dev/null; then
+ apt-get update
+ apt-get install -y debconf
+ debconf-set-selections <<EOF
kexec-tools kexec-tools/load_kexec boolean false
EOF
-apt-get install -y pxe-kexec
-# at least on belanos, apt-get goes into the background,
-# and we need to wait for it to finish.
-sleep 5
+ apt-get install -y pxe-kexec
+fi
+# running this piped to bash on belanos, the apt-get goes
+# into the background while it's still installing, and pxe-kexec
+# just exits right away. sleep calls are strangely ignored.
+# I don't know whats going on, but just running the same
+# command again once it finishes works, and this is only
+# rarely used and done manually anyways, so whatever.
pxe-kexec -n --ignore-whitelist -l fai-generated faiserver