blob: 45b5c3379dff5bf18467d713b483674d3ee7c221 (
plain) (
tree)
|
|
#!/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
|