summaryrefslogtreecommitdiffstats
path: root/data/openslx-ng-install
blob: 45b5c3379dff5bf18467d713b483674d3ee7c221 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

function print ()
{
	echo -e "\033[01;29m$@\033[00m"
}

function error ()
{
	echo -e "\033[00;31m$@\033[00m"
	exit 1
}

function getinput ()
{
	[ $# -ne 2 ] && error "getinput called with wrong parameter count ($@)"
	CURRENT_VAR="$2"
	echo -n -e "\033[01;29m$1 [${!CURRENT_VAR}]:\033[00m "
	read RETVAL
	[ -z "$RETVAL" ] && RETVAL="${!CURRENT_VAR}"
}

function accept ()
{
	[ -z "$CURRENT_VAR" ] && error "accept called when CURRENT_VAR is empty"
	eval "$CURRENT_VAR='$RETVAL'"
	CURRENT_VAR=""
	break
}

function deny ()
{
	print "Ungültige Eingabe: '$RETVAL'"
}

function yesno ()
{
	while true; do
		echo -n -e "\033[01;29m$@ [J/n] "
		read KEYPRESS
		[ -z "$KEYPRESS" ] && return 0
		[[ "$KEYPRESS" == J* || "$KEYPRESS" == j* ]] && return 0
		[[ "$KEYPRESS" == N* || "$KEYPRESS" == n* ]] && return 1
		print "Bitte mit J oder N antworten"
	done
}

function save_defaults ()
{
	echo -e "# OpenSLX-NG defaults for this server - saved from a previous run of openslx-install\n# Delete this file if you want to start from scratch" > "$DEFAULTS_FILE"
        for VARNAME in ${!SLX_*}; do
                echo "$VARNAME='${!VARNAME}'" >> "$DEFAULTS_FILE"
        done
}

# Load "Factory defaults" first
FACTORY_DEFAULTS_FILE="/opt/openslx/server-factory-defaults"
if [ -s "$FACTORY_DEFAULTS_FILE" ]; then
	. "$FACTORY_DEFAULTS_FILE" || error "Factory defaults konnten nicht geladen werden. ($FACTORY_DEFAULTS_FILE)"
fi
# Load presets/previously given replies
DEFAULTS_FILE="/opt/openslx/server-defaults"
if [ -s "$DEFAULTS_FILE" ]; then
	. "$DEFAULTS_FILE" || error "Voreinstellungen von vorherigem Scriptdurchlauf konnten nicht geladen werden. Bitte die Datei $DEFAULTS_FILE überprüfen und reparieren oder ggf. löschen."
	print " *** Voreinstellungen von vorherigem Scriptaufruf ($SLX_LAST_INVOCATION) gefunden"
	print " *** Diese Einstellungen werden als Standard-Antwort auf alle Fragen"
	print "     angenommen. Um dieses Setup mit den ursprünglichen Standardantworten"
	print "     auszuführen, die Datei $DEFAULTS_FILE löschen."
	print " *** Das Setup kann mit Strg+C abgebrochen werden."
	print ""
fi

print "OpenSLX-NG Server Preview: Setup"
print ""
print "Zum erfolgreichen Aufsetzen eines OpenSLX-NG Servers müssen"
print "einige Fragen beantwortet werden."
print ""

#
# ---- Haupt-Adresse (zwecks iPXE) ----
#
print "Zum Einrichten der iPXE-Funktionalität muss die IP-Adresse des Servers"
print "festgelegt werden. Alle Clients werden über diese Adresse bedient."
print "WICHTIG: Sollte sich die Adresse des Servers ändern, muss dieses Setup"
print "erneut ausgeführt werden."
print "Erkannte lokale Adressen:"

LOCAL_ADDRS="$(ip a | grep -E -o '^\s*inet\s+[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | grep -E -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')"
echo "$LOCAL_ADDRS"

if [ -z "$SLX_LOCAL_ADDR" ] || [[ $LOCAL_ADDRS != *$SLX_LOCAL_ADDR* ]]; then
	SLX_LOCAL_ADDR=""
	for ADDR in $LOCAL_ADDRS; do
		[[ "$ADDR" == 127.* ]] && continue
		LAN_IP=$ADDR
		[[ "$ADDR" == 192.168.* ]] && continue
		[[ "$ADDR" == 10.* ]] && continue
		[[ "$ADDR" == 172.* ]] && continue
		SLX_LOCAL_ADDR=$ADDR
	done
	[ -z "$SLX_LOCAL_ADDR" ] && SLX_LOCAL_ADDR=$LAN_IP
fi

while true; do
	getinput "Primäre IP-Adresse des Servers" SLX_LOCAL_ADDR
	# syntax check
	echo "$RETVAL" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' > /dev/null || continue
	if ! ip a | grep -E "^\s*inet\s+$RETVAL/" > /dev/null; then
		print "Dieser Server scheint kein Interface zu besitzen, welches auf"
		print "die Adresse $RETVAL konfiguriert ist."
		yesno "Trotzdem diese Adresse verwenden?" || continue
	fi
	accept
done

#
# ---- NFS Share
#
while true; do
	getinput "Pfad zum NFS Share?" SLX_NFS_PATH
	[[ "$RETVAL" == /* ]] && accept
done
print "Fertig. NFS_PATH ist $SLX_NFS_PATH"

SLX_LAST_INVOCATION="$(date)"
save_defaults