a bunch of fixes and improvements
[automated-distro-installer] / lk
1 #!/bin/bash
2 # Copyright (C) 2016 Ian Kelling
3
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 usage() {
19 cat <<EOF
20 Usage: ${0##*/} [-h|--help] [HOST]
21 fai kexec from upstream live cds, i.e. curl|bash
22
23 If HOST argument, ssh to root@HOST before doing kexec. This does what
24 pxe would do, but skipping boot sequence up to and including the pxe
25 dhcp.
26
27
28 You can copy this to a http server, then wget -O- url|sudo bash
29 curl is sometimes not preinstalled on a live cd.
30
31 Alternative to http server:
32 1. on install machine nc -l 1234 | sudo bash
33 2. On another machine nc INSTALL_MACHINE 1234 <live-kexec
34 Obviously beware that anyone on your network could send commands to the install machine.
35
36 This has been tested on trisquel 7 & 8 & ubuntu 16.04 & 18.10. With
37 18.10 and trisquel 8 on an x200, kexec was unreliable, resulting in
38 freezes and kernel panics.
39
40 If the screen just sits in a weird color inverted, corrupted looking state,
41 it's probably nothing wrong with the computer, but a problem
42 with the fai server. If you can do this from a virtual terminal,
43 it will print out more info (I know from running it on a vm).
44 EOF
45 exit $1
46 }
47 case $1 in
48 -h|--help) usage ;;
49 ?*) host=$1
50 esac
51
52 if [[ $host ]]; then
53 ssh root@$host bash -s < $(readlink -f "$BASH_SOURCE")
54 exit $?
55 fi
56
57 set -ex
58 if grep -q ID=ubuntu /etc/os-release; then
59 # add universe, pxe-kexec is there
60 sed -ri '/^\s*deb/{/universe/!s/$/ universe/}' /etc/apt/sources.list
61 fi
62 if ! type -p pxe-kexec >/dev/null 2>&1; then
63 apt-get update
64 apt-get install -y debconf
65 debconf-set-selections <<EOF
66 kexec-tools kexec-tools/load_kexec boolean false
67 EOF
68 apt-get install -y pxe-kexec
69 fi
70 # running this piped to bash on belenos, the apt-get goes
71 # into the background while it's still installing, and pxe-kexec
72 # just exits right away. sleep calls are strangely ignored.
73 # I don't know whats going on, but just running the same
74 # command again once it finishes works, and this is only
75 # rarely used and done manually anyways, so whatever.
76 pxe-kexec -n --ignore-whitelist -l fai-generated faiserver