summaryrefslogblamecommitdiffstats
path: root/satellit_installer/static_files/system/opt/openslx/firstboot.sh
blob: 9c3c1cfeb46cd1c1e12dadcc9cb075b61e9c315f (plain) (tree)
1
2
3
4
5
6
7
8

           

          
                         
                                               
 
                                                                       



                                       
                                                 
                                                                                     



                                                   


              
         
                                  
 
                                                                   
 



                                                        
 
                     
                                                                  













                                                      

                                            
 
                                      


                                                           
                                                               


                       
                                                                              

          
                                  
                                                                            
                                                                                                                                                     

                                      
                                                                                   
                                                                                                                                                                 
 
                                                       
 
                
            
                                                                                       


                                                        
                                                                                    


                                     
                                                                                                                 
 
                                      
 

                                             
                                                                                     
                                       
    
 



                                           
 



                                                                        
 











                                                                                

        
                                                           

                                  

                                                                      
 
      
#!/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/firstboot.log and take appropriate measures!
		This server may not work correctly!

		EOF
	fi
	exit 5
}

# Logfile
exec &> /opt/openslx/firstboot.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 2> /dev/null | 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)
[ -z "$MYSQL_SAT_NEW" ] && perror "Error generating mysql password for dmsd"
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)
[ -z "$MYSQL_OPENSLX_NEW" ] && perror "Error generating mysql password for openslx"
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"     "$SLXADMINDIR/config.php"

# taskmanager password
TASKMANAGER_PASS=$(generate_password)
patchfiles "%TM_OPENSLX_PASS%" "$TASKMANAGER_PASS"          "$SLXADMINDIR/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