summaryrefslogtreecommitdiffstats
path: root/satellit_installer/static_files/system/opt/openslx/firstboot.sh
diff options
context:
space:
mode:
Diffstat (limited to 'satellit_installer/static_files/system/opt/openslx/firstboot.sh')
-rwxr-xr-xsatellit_installer/static_files/system/opt/openslx/firstboot.sh120
1 files changed, 120 insertions, 0 deletions
diff --git a/satellit_installer/static_files/system/opt/openslx/firstboot.sh b/satellit_installer/static_files/system/opt/openslx/firstboot.sh
new file mode 100755
index 0000000..7ef2bfc
--- /dev/null
+++ b/satellit_installer/static_files/system/opt/openslx/firstboot.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+MY_PID=$$
+perror() {
+ echo "[ERROR] $*"
+ [ "$MY_PID" != "$$" ] && kill "$MY_PID"
+
+ if ! grep -q "firstboot.sh has thrown an error" /etc/motd; then
+ cat <<-EOF >> /etc/motd
+
+ WARNING!
+
+ firstboot.sh has thrown an error!
+ Please read /opt/openslx/firstrun.log and take appropriate measures!
+ This server may not work correctly!
+
+ EOF
+ fi
+ exit 5
+}
+
+# Logfile
+exec &> /opt/openslx/firstrun.log
+
+echo "+++ $(basename "$0") gestartet: $(date "+%Y-%m-%d %H:%m:%S")"
+
+conf="/opt/openslx/config.install"
+[ -s "$conf" ] || perror "Config file $conf missing"
+bash -n "$conf" || perror "Config file $conf has errors"
+. "$conf"
+
+generate_password() {
+ tr -dc _A-Za-z0-9 < /dev/urandom | head -c 16
+}
+
+patchfiles() {
+ # <find> <replace> <file1> <file2> ... <fileN>
+ # Warning: does not escape!
+ FIND=$1
+ REPLACE=$2
+ shift 2
+ while [ $# -gt 0 ]; do
+ sed -i "s/${FIND}/${REPLACE}/g" "$1"
+ shift
+ done
+}
+
+echo "+++ Lösche alte ssh-Schlüssel ..."
+rm -f -- /etc/ssh/ssh_host_*key* 2>/dev/null
+
+echo "+++ Generating new sshd keys..."
+ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N "" -t rsa -q
+ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N "" -t dsa -q
+ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N "" -t ecdsa -q
+ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -N "" -t ed25519 -q
+
+export LANG=de_DE.UTF-8
+
+echo "+++ Generiere intern genutzte Passwörter (z.B. MySQL-Zugänge) neu ..."
+umask 0077
+
+MYSQL_SAT_NEW=$(generate_password)
+echo "SET PASSWORD FOR 'sat'@'localhost' = PASSWORD('$MYSQL_SAT_NEW');" | mysql -u root || perror "Neusetzen des sat-MySQL-Passworts fehlgeschlagen."
+
+MYSQL_OPENSLX_NEW=$(generate_password)
+echo "SET PASSWORD FOR 'openslx'@'localhost' = PASSWORD('$MYSQL_OPENSLX_NEW');" | mysql -u root || perror "Neusetzen des openslx-MySQL-Passworts fehlgeschlagen."
+
+echo "+++ Konfigurationsdateien werden aktualisiert..."
+
+# sat mysql pass
+# Patch dmsd
+patchfiles "%MYSQL_SAT_PASS%" "$MYSQL_SAT_NEW" "$DMSDDIR/config.properties"
+
+# openslx mysql pass
+# Patching openslx-mysql-userpass into slx-admin config:
+patchfiles "%MYSQL_OPENSLX_PASS%" "$MYSQL_OPENSLX_NEW" "$WWWDIR/slx-admin/config.php"
+
+# taskmanager password
+TASKMANAGER_PASS=$(generate_password)
+patchfiles "%TM_OPENSLX_PASS%" "$TASKMANAGER_PASS" "$WWWDIR/slx-admin/config.php" "$TASKMANDIR/config/config"
+
+echo "+++ Dienste werden aktiviert..."
+
+# Enable bwLehrpool related services
+for i in dmsd.service taskmanager.service; do
+ systemctl enable "$i" || perror "Konnte systemd-Service $i nicht aktivieren!"
+ systemctl --no-block start "$i"
+done
+
+# root ssh key
+echo ""
+echo "Erzeuge SSH Schlüsselpaar für root"
+echo ""
+
+KEY=~/.ssh/id_rsa
+rm -f -- "$KEY" "${KEY}.pub"
+ssh-keygen -q -N "" -f "$KEY" \
+ || echo "Achtung: Erzeugung Schlüsselpaar $KEY fehlgeschlagen."
+
+# Write MOTD
+cat > /etc/motd <<THEREDOC
+> *** bwLehrpool Satelliten-Server, Version $VERSION ***
+> Eingerichtet am $(date)
+>
+> Wenn Sie sich als 'openslx' eingeloggt haben, haben Sie nun folgende Optionen:
+> netsetup - Konfiguriert das Netzwerk-Interface neu (DHCP oder statisch)
+> sudo reboot - System neustarten
+> sudo poweroff - System herunterfahren
+>
+> Andere Modifikationen am System sind in der Regel nicht notwendig.
+>
+THEREDOC
+
+echo "+++ Daten des Firstrun-Scripts werden aufgeräumt..."
+unlink "/opt/openslx/firstboot.sh"
+unlink "$conf"
+unlink "/etc/systemd/system/firstboot.service"
+unlink "/etc/systemd/system/multi-user.target.wants/firstboot.service"
+
+exit 0