Automatische Installation – Ubuntu – Teil 3

Veröffentlicht von Thomas Krupa am

In diesem Teil stelle ich das Skript vor, das am Ende der Antwortdatei (focalseed.cfg) ausgeführt wird. Das Skript kommt hier in kleinen Häppchen. Am Ende findet ihr einen Download-Link. Das Skript habe ich für Ubuntu 20.04 erstellt.

Wir beginnen mit ein Paar Variablen, die zu ändern sind und legen den Schüleraccount an.

#!/bin/bash
URL=http://SERVER/PATH/
APTPROXY=SERVER
mkdir /home/user/install
echo "install.sh Skript wird ausgeführt" 

#####################
# neuen Schueler-Account anlegen
#####################
echo "Neuen Benutzer hinzufügen"
adduser schueler --gecos schueler --disabled-password
echo "schueler:secretPassword" | chpasswd

# wer das Passwort im Skript nur verschlüsselt haben will, kann auch folgendes verwenden
# HASH=$(perl -e "print crypt(${PLAINTEXT},)")
# usermod -p ${HASH} john

Im nächsten Teil setzen wir die Voraussetzungen für das OverlayFS (Siehe Selbstheilende Arbeitsstationen)

#####################
# Anlegen von overlayfs
#####################
echo "Anlegen von overlayfs"
#install kopiert das schueler Verzeichnis und setzt die zugehörigen Benutzerrechte
install -d -o schueler -g schueler /home/.schueler_rw
mkdir /home/work -p
echo "none /home/schueler overlay lowerdir=/home/schueler,upperdir=/home/.schueler_rw,workdir=/home/work 0 0" >>/etc/fstab

Jetzt werden ein paar lokale Skripts auf den Rechner kopiert. Die Programme gibt’s dann ebenfalls am Ende zum herunterladen.
Sudoers ändern ist im Moment auskommentiert. Wir hatten mal ein paar Befehle drinnen, die SchülerInnen ausführen konnten, ohne passwort (z.B mount, oder xampp-manager). Unsere Computer werden zu bestimmten Uhrzeiten per cronjob automatisch ausgeschaltet. Falls da doch noch jemand Arbeitet, bekommt man eine Meldung und kann das Herunterfahren verhindern.

Unter ssh darf sich nur der „user“ anmelden.

#####################
# usr_local_bin scripts
#####################
cd /
wget $URL"cleanup-schueler.sh" -O /usr/local/bin/cleanup-schueler.sh
chmod 755 /usr/local/bin/cleanup-schueler.sh
wget $URL"monitor.sh" -O /usr/local/bin/monitor.sh
wget $URL"setHostname.sh" -O /usr/local/bin/setHostname.sh
chmod 755 /usr/local/bin/setHostname.sh
#Computer werden per cronjob heruntergefahren, falls Schüler/Lehrer vergessen ihn auszuschalten
#Falls aber doch noch gearbeitet wird, wird man vor dem Herunterfahren noch gefragt, ob man das auch wirklich will
wget $URL"shutdownquestion.sh" -O /usr/local/bin/shutdownquestion.sh
chmod 7555 /usr/local/bin/shutdownquestion.sh

#####################
# sshd - allow only user user
#####################
echo  "Ändern von sshd_config" 
echo "AllowUsers user" >>sshd_config

#####################
# sudoers ändern - derzeit keine Änderungen notwendig
#####################
#echo "Ändere sudoers"
#wget $URL"sudoers" -O /etc/sudoers

Das Heimverzeichnis wiederherstellen machen wir mit einem Shutdownhook.

#####################
# Heimverzeichnis nach einem reboot wiederherstellen
#####################
wget $URL"cleanup-schueler.sh" -O /usr/local/bin/cleanup-schueler.sh 
wget $URL"shutdownhook.service" -O /etc/systemd/system/shutdownhook.service 
ln -s /etc/systemd/system/shutdownhook.service /etc/systemd/system/multi-user.target.wants/shutdownhook.service

Für Firefox haben wir ein paar Änderungen vorgenommen. (Plugins, keine Passwörter speichern, Startseite, Bookmarks,… Das firefox.tar wird vorher erstellt und schreibt beim Entpacken in /home/schueler/.mozilla

cd /
wget $URL"firefox.tar" -O firefox.tar
tar -xvf firefox.tar

Hostnamen ändern, Loginscreen clonen, und ein kleines Problem beheben, sowie Crontab erstellen. Sollte der Computer schon einmal aufgesetzt worden sein, liefert eine Datenbank auf Basis der Mac-Adresse den Computernamen. Overlayfs, apparmor und Libreoffice sind keine guten Freunde, daher habe ich es ausgenommen

#####################
# Hostnamen ändern
#####################
echo "Hostnamen ändern"
mac=`( ip address |grep ether |cut -c 16-32)`
wget http://MYSERVER/PATH/getHostname.php?macAddress=$mac -O /etc/hostname

#####################
# Login screen clonen
#####################
#Ist ein Beamer angeschlossen, kann es sein, dass der Login Screen nicht am Monitor erscheint
#monitor.xml klont die Bildschirme, damit ist garantiert, dass der Login Screen auf beiden Ausgabegeräten sichtbar ist.
wget $URL"monitors.xml" -O /var/lib/gdm3/.config/

#####################
# fix apparmor problem
#####################
ln -s /etc/apparmor.d/usr.bin.evince /etc/apparmor.d/disable
ln -s /etc/apparmor.d/usr.lib.libreoffice.program.soffice.bin  /etc/apparmor.d/disable
ln -s /etc/apparmor.d/usr.lib.libreoffice.program.oosplash  /etc/apparmor.d/disable
ln -s /etc/apparmor.d/usr.lib.libreoffice.program.senddoc  /etc/apparmor.d/disable
ln -s /etc/apparmor.d/usr.lib.libreoffice.program.xpdfimport  /etc/apparmor.d/disable



#####################
# crontab installieren
#####################
echo "Crontab anpassen"
wget $URL"crontab.txt" -O crontab.txt
crontab crontab.txt

Auf den Lehrerpcs in den Klassen gibt es einen Ordner, auf dem gewisse Datein immer vorliegen sollten. Diese werden per rsync aktuell gehalten. Braucht jmd. eine Datei auf den Klassenrechnern, kann ich diese einfach am Server ablegen. VLC sollte für alle Video und Audio Dateien der Standard sein, das ändern wir gleich in der defaults.list

#####################
# Rsync
#####################
echo "Rsync aufsetzen"
wget $URL"syncdata.sh" -O /usr/local/bin/syncdata.sh
chmod 755 /usr/local/bin/syncdata.sh
mkdir -p /data/local
chown schueler /data/local
chgrp schueler /data/local
echo "mySecretPassword" >/etc/rsyncsecret
chmod 600 /etc/rsyncsecret

#####################
# fix slow shutdown
#####################
systemctl disable cups-browsed.service

#####################
# make vlc default app remove keyring storage
#####################
sed -i 's/rhythmbox/vlc/g' /usr/share/applications/defaults.list
sed -i 's/org.gnome.Totem/vlc/g' /usr/share/applications/defaults.list
sed -i 's#Exec=chromium-browser#Exec=chromium-browser --password-store=basic#g' /usr/share/applications/chromium-browser.desktop

Einige Standardsettings: Launcher, Alt-Tab nicht Gruppiert, Datum und Uhrzeit oben,…

#####################
# settings
#####################
sudo -Hu schueler dbus-launch gsettings set org.gnome.desktop.wm.preferences button-layout 'close,maximize,minimize:' 

sudo -Hu schueler dbus-launch gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Alt>Tab']"
sudo -Hu schueler dbus-launch gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward "['<Shift><Alt>Tab']"
sudo -Hu schueler dbus-launch gsettings set org.gnome.desktop.wm.keybindings switch-applications "[]"
sudo -Hu schueler dbus-launch gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward "[]"

sudo -Hu schueler dbus-launch gsettings set org.gnome.desktop.interface clock-show-date true
sudo -Hu schueler dbus-launch gsettings set org.gnome.shell favorite-apps "['org.gnome.Nautilus.desktop','chromium-browser.desktop','firefox.desktop','libreoffice-writer.desktop','libreoffice-calc.desktop','vlc.desktop','geogebra.desktop',]"

Im letzten Teil Installieren wir noch notwendige Pakete.

#####################
# apt Sourcen anpassen und apt proxy setzen
#####################
echo "Sourcen anpassen" 
# wir laden die Sourcen vom Server bzw. erstellen wir zusätzliche
wget $URL"sources.list" -O /etc/apt/sources.list 
wget $URL"ppasources.list" -O /etc/apt/sources.list.d/ppasources.list 
echo "deb http://www.geogebra.net/linux/ stable main " >/etc/apt/sources.list.d/geogebra.list

echo "Acquire::http::Proxy \"http://"APTPROXY":3142/apt-cacher/\";" >/etc/apt/apt.conf
#für https Quellen funktioniert der Proxy nicht
echo "Acquire::https::Proxy \"false\";" >>/etc/apt/apt.conf

#geogebra
wget -q -O - http://www.geogebra.net/linux/office@geogebra.org.gpg.key | apt-key add -

#####################
# Alle Pakete installieren
#####################
cd /home/user/install
# Die Paketliste vom Server herunterladen
wget $URL"packages.txt"
apt-get update
apt-get install -y openssh-server

# Akzeptieren der EULA über debconf. Es wird sonst nachgefragt, und nachdem die Installation nicht interaktiv ist, würde er hier stehenbleiben
echo 'ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true' | debconf-set-selections
echo "Pakete installieren"
echo 'libc6             libraries/restart-without-asking boolean true'| debconf-set-selections
echo 'libc6:amd64       libraries/restart-without-asking boolean true'| debconf-set-selections
echo 'libpam0g:amd64    libraries/restart-without-asking boolean true'| debconf-set-selections
echo 'libssl1.1         libraries/restart-without-asking boolean true'| debconf-set-selections
echo 'libssl1.1         libraries/restart-without-asking boolean true'| debconf-set-selections

if apt-get install -y `cat packages.txt` ;
then
   echo "Alle Pakete wurden erfolgreich installiert"
else
   echo "ERROR - Es konnten nicht alle Pakete installiert werden."
   # Wir starten noch einen Versuch. Könnte die Internetverbindung sein.
   apt-get install -y -f
   apt-get install -y  `cat packages.txt`
fi

apt-get upgrade -y

#####################
# Zusätzliche Software installieren
#####################
echo "Installiere zusätzliche Pakete"
cd /home/user/install

# codium https://vscodium.com/ - visual studio code ohne tracking/telemetry
wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | apt-key add -
echo 'deb https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/repos/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list
apt update && sudo apt install codium

wget https://dl.google.com/linux/direct/google-webdesigner_current_amd64.deb O /home/user/install/webdesigner.deb
dpkg -i /home/user/install/webdesigner.deb


#####################
# Pakete entfernen
#####################
wget $URL"remove.txt"
if apt-get remove -y --purge `cat remove.txt` ; then
   echo "Alle Pakete wurden erfolgreich entfernt."
else
   echo "ERROR - Es konnten nicht alle Pakete entfernt werden."
fi
echo "Autoremove Pakete"
apt-get autoremove -y

Das wäre jetzt unser fertiges Skript. Testen kann man das ganz gut, indem man zuerst Ubuntu z.B in VirtualBox installiert. Danach einen Snapshot erstellen und das Skript laufen läßt. Dann kann man schnell Änderungen machen und zum Snapshot zurückkehren. Wenn das dann läuft, kann man das mal als ubiquity success_command testen.

So und hier noch ein paar Worte zu den weiteren Programmen und Dateien: In der Zip-Datei befinden sich alle Dateien, die vom Skript heruntergeladen werden. packages.txt enthält alle Softwarepakete, die installiert werden. Die eine oder andere Datei muss noch verändert werden, damit sie auch verwende werden kann. Natürlich ist auch die install.sh Datei dabei.

Übrigens fehlt das firefox.tar. Am besten auf einem neuen System alle Einstellungen und Änderungen an Firefox vornehmen. Dann kann man das .tar selber erstellen mit:

tar -cvf firefox.tar /home/schueler/.mozilla/firefox

0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.