summaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
authorMichael Neves2013-05-23 17:01:04 +0200
committerMichael Neves2013-05-23 17:01:04 +0200
commit655b2494fc7d8fec3a5f6212bbb7a88cbe5c13f7 (patch)
tree26e62638af3ae641fe0e561ba3ee19bdbb71e484 /data
parent[SUSE] vmchooser xml now found in correct dir (diff)
parentfix PATH for debug shell (diff)
downloadtm-scripts-655b2494fc7d8fec3a5f6212bbb7a88cbe5c13f7.tar.gz
tm-scripts-655b2494fc7d8fec3a5f6212bbb7a88cbe5c13f7.tar.xz
tm-scripts-655b2494fc7d8fec3a5f6212bbb7a88cbe5c13f7.zip
Merge branch 'master' of git.openslx.org:openslx-ng/tm-scripts
Diffstat (limited to 'data')
-rwxr-xr-xdata/openslx-ng-install207
1 files changed, 207 insertions, 0 deletions
diff --git a/data/openslx-ng-install b/data/openslx-ng-install
new file mode 100755
index 00000000..0e71684e
--- /dev/null
+++ b/data/openslx-ng-install
@@ -0,0 +1,207 @@
+#!/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
+}
+
+function check_password ()
+{
+ [ $# -lt 1 ] && error "No user given to check_password"
+ [ $# -lt 2 ] && error "No password given to check_password"
+ [ ! -r /etc/shadow ] && return 1
+ local correct=$(< /etc/shadow awk -v "user=$1" -F : 'user == $1 {print $2}')
+ local prefix=${correct%"${correct#\$*\$*\$}"}
+ local supplied="$(perl -e "print crypt('$2', '$prefix')")" # el cheapo: do not pass a password containing a single quote ( ' )
+ [ "x$supplied" = "x$correct" ] && return 0
+ return 1
+}
+
+# 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 ""
+
+#
+# ---- Ask if the private key of Uni Freiburg should be accepted for root logins
+#
+if [ ! -s "/root/.ssh/authorized_keys" ] || ! grep "openslx-admin@uni-freiburg.de" "/root/.ssh/authorized_keys" > /dev/null; then
+ print ""
+ print "Soll der Private Key der bwLehrpool-Abteilung in Freiburg für root-Logins auf"
+ print "diesem Server zugelassen werden? Dadurch ist es für die Entwickler aus Freiburg"
+ print "möglich, sich ohne Kenntnis des Passworts als root auf diesem Server einzuloggen."
+ if yesno "Dies vereinfacht die Fernwartung, Fehlerdiagnose und -behebung."; then
+ if mkdir -p "/root/.ssh" \
+ && chmod 0700 "/root/.ssh" \
+ && echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC667v6bIksFcwE6DMFs65ySfjySSn9V44GoN7qzIOUok/fgOsiotq2HJby/cgQxGVKogVmGUDRUqK3lKSqYnDmEigP3aQdleP1NFx6ex/zhEUoHp4VfqfQncSZT1zYE5IGQ9YNERrsDEI0YOZ5Cr+/I3p0bJAbXZM9dk/1Y6VOyMt1ZHXam5VvC6EJnJQzW9uAS69JSezprRsDYH+3NGd/XV/INkOsPIvkLc8rp5rtcdHrq/7NPNqtTCUdChv5F5lNMMHyXlhaM9FjG/DOZ0teKzh8MMe3oUXg/VibqEPZK4zVBKypATlWdv6zODiMrbi4n/Vm9IMA5i/71NW2GOdH openslx-admin@uni-freiburg.de" >> "/root/.ssh/authorized_keys" \
+ && chmod 0600 "/root/.ssh/authorized_keys"; then
+ print "Key erfolgreich hinzugefügt"
+ else
+ error "Fehler beim Hinzufügen des Keys!"
+ fi
+ fi
+fi
+
+#
+# ---- Haupt-Adresse (zwecks iPXE) ----
+#
+print ""
+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
+#
+# Is it a local one?
+print ""
+print "Bereitstellung der VMWare-Images"
+print "Die Clients booten die VMWare-Images von einem NFS-Share. Dieser kann"
+print "entweder auf diesem Server liegen, oder auf einem externen Server mit NFS-Zugang."
+print "Sofern die Images von diesem Server ausgeliefert werden sollen, wird ein"
+print "zusätzlicher SMB-Server installiert, um das Aufspielen neuer Images"
+print "von einem Windows-PC aus zu erleichtern."
+
+while true; do
+ getinput "Welches Setup ist erwünscht? L = Lokal, E = Extern" SLX_VM_NFS_TYPE
+ # Local Server
+ if [[ "$RETVAL" == L* || "$RETVAL" == l* ]]; then
+ while true; do
+ getinput "Lokaler Speicherort für VM-Images" SLX_VM_PATH
+ if [[ "$RETVAL" != /* ]]; then
+ print "FEHLER: Der Pfad muss absolut sein (mit einem / beginnen)"
+ continue
+ fi
+ mkdir -p "$RETVAL"
+ [ -w "$RETVAL" ] && accept
+ print "FEHLER: Verzeichnis '$RETVAL' nicht beschreibbar."
+ done
+ SLX_VM_NFS="$SLX_LOCAL_ADDR:$SLX_VM_PATH"
+ print "Lokaler VM-NFS-Share erreichbar unter $SLX_VM_NFS"
+ SLX_VM_NFS_TYPE=L
+ break # No accept here as it cannot be nested
+ fi
+ # External Server
+ if [[ "$RETVAL" == E* || "$RETVAL" == e* ]]; then
+ while true; do
+ getinput "Adresse und Pfad des externen NFS-Shares für VM-Images im Format Adresse:Pfad" SLX_VM_NFS
+ echo "$RETVAL" | grep -E '\S+:/\S+' && accept
+ print "FEHLER: Ungültiges NFS-Share-Format: $RETVAL"
+ done
+ print "Externer VM-NFS-Share erreichbar unter $SLX_VM_NFS"
+ SLX_VM_NFS_TYPE=E
+ break # No accept
+ fi
+ print "Ungültige Auswahl '$RETVAL'"
+done # Done setting up VM NFS Server type
+
+#
+# ---- Safety first: make user change root password if it is still the default ----
+#
+if [ "x$1" != "x--test" ] && check_password "root" "openslx-ng"; then
+ print ""
+ print "Aus Sicherheitsgründen sollte das root-Passwort dieses Servers geändert werden."
+ while check_password "root" "openslx-ng" && yesno "Passwort jetzt ändern?"; do
+ passwd
+ done
+fi
+
+SLX_LAST_INVOCATION="$(date)"
+save_defaults
+