From 9386b86bfa4043222fa2259870f68db13f056cc1 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 22 May 2013 16:57:16 +0200 Subject: (WiP) Setup Script for OpenSLX-NG-Servers --- data/openslx-ng-install | 127 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100755 data/openslx-ng-install (limited to 'data') diff --git a/data/openslx-ng-install b/data/openslx-ng-install new file mode 100755 index 00000000..45b5c337 --- /dev/null +++ b/data/openslx-ng-install @@ -0,0 +1,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 + -- cgit v1.2.3-55-g7522