== FAI-Installations-Server (bullseye) == <> === Installation === Das Debian Edu Minimalsystem {{{faiserver.intern}}} installieren wir über die PXE-Installationsumgebung von Debian Edu / Skolelinux. Die Vorbereitung der VM Instanz werden hier für [[../libvirt|libVirt]] bzw. [[../ganeti|Ganeti]] beschrieben. Die VM fährt hoch und bootet über PXE ins iPXE Bootmenü. Hier bitte den 64bit Installer auswählen. Es startet der Debian (Edu) Installer im grafischen Modus: * Installationsprofil: Minimal * Automatische Partitionierung: ja * Paketerfassung verwenden: Ja * Kennwort für root festlegen * ''Wichtig:'' Nach der Installation von {{{faiserver.intern}}}, aber vor dem ersten Start muss der Server im Debian Edu / Skolelinux Netzwerk bekannt gemacht werden: * GOsa² auf TJENER: * System (Typ: Server) anlegen für {{{faiserver.intern}}} * Beschreibung: {{{FAI-Installations-Server}}} * IP: {{{10.0.2.3}}} * ermittelte MAC-Adresse eintragen (vergl. Info-Seite bzgl. VM-Instanz Setup, s.o.) * DHCP (10.0.0.0-Netz) * DNS aktivieren * NIS Netgroups Eintrag in Gruppe: {{{server-hosts}}} (hierfür muss der Systemeintrag in GOsa² erstmal angelegt worden sein, danach nochmal die NIS Netgroup nachbearbeiten) === Manuelle Konfiguration === Nach dem Neustart der VM {{{faiserver.intern}}} sollte der Hostname des gestarteten Systems auf {{{faiserver.intern}}} gesetzt sein. Wird stattdessen ein Hostname angezeigt, der die MAC-Adresse der primären NIC des Systems enthält, hat die Eintragung des Systems in GOsa² nicht funktioniert. Bevor man weiter fortfahren kann, muss dieser Fehler behoben werden. Zum aktuellen Zeitpunkt (Debian Edu 11.5 Release) kommt es bei der Installation eines Minimal-Profils zu einem Fehler. Es fehlt das DEB-Paket {{{libpam-krb5}}}. Dies muss nachinstalliert werden (vergl. [[https://bugs.debian.org/1002299|Debian bug #1002299]]): {{{ apt-get install libpam-krb5 }}} Um als Admin-User (bzw. allgemein als LDAP-User) bei Anmeldung System eine Verbindung zum $HOME-Verzeichnis auf {{{tjener.intern}}} zu erhalten, muss eine /etc/krb5.keytab Datei auf {{{faiserver.intern}}} kopiert werden (welche die Principals für {{{host/faiserver.intern}}} und {{{nfs/faiserver.intern}}} enthält. Dies erfolgt über folgenden Befehlsaufruf: {{{ root@faiserver:~# /usr/share/debian-edu-config/tools/copy-host-keytab Passwort für root@INTERN: faiserver.intern.keytab 100% 324 9.0KB/s 00:00 root@faiserver:~# }}} Danach sollte es möglich sein, sich mit einem LDAP-Benutzerkonto an {{{faiserver.intern}}} via Login TTY od. SSH einzuloggen. ==== Fine-Tuning der VM-Einstellungen ==== * Nach der Installation und dem ersten Start führen wir die folgenden Änderungen an der VM-Konfiguration von {{{faiserver.intern}}} durch. Hierfür muss die VM herunter gefahren werden und die VM-Konfiguration angepasst werden: * zweite Festplatte hinzufügen (Name für libVirt: {{{faiserver.intern_sdb}}}) * VM wieder anschalten und in der VM weiterarbeiten ==== Paket-Quellen für ITZkS aktivieren ==== Für den FAI Installations-Server gibt es ein eigenes Overlay-Paket, welches aus dem IT-Zukunft Schule Projekt-APT-Repository installiert wird: {{{ root@faiserver:~# editor /etc/apt/sources.list.d/itzks.list """ deb http://packages.it-zukunft-schule.de/debian bullseye main contrib non-free """ root@faiserver:~# apt-get --allow-insecure-repositories update && apt-get install itzks-keyring && apt-get update root@faiserver:~# apt-get install itzks-systems-common }}} Bei der Installation von {{{itzks-systems-common}}} wird das Kürzel der Schule / des Schulkundens abgefragt. Diese Kürzel sind im Paket hinterlegt. Es besteht die Möglichkeit, ein Kürzel für die eigene Schule zu beantragen. Bitte dafür Kontakt mit Mike Gabriel vom IT-Zukunft Schule Projekt aufnehmen. Nach der Installation von {{{itzks-systems-common}}} dann folgenden Befehl aufrufen: {{{ root@faiserver:~# itzks-systems.do_preseed Preseeding ocsinventory-agent/tag to Preseeding ocsinventory-agent/method to http Preseeding ocsinventory-agent/server to inventory.it-zukunft-schule.de Silently running dpkg-reconfigure on package ocsinventory-agent ... DONE. }}} ==== Software nachinstallieren ==== Die weitere Software wird über die Installation des Meta- und Config-Pakets {{{itzks-systems-faiserver}}} installiert: {{{ root@faiserver:~# sudo apt-get install itzks-systems-faiserver }}} ==== System konfigurieren ==== 1. Login als {{{root}}} 1. Standard-Editor festlegen (an der Unix-Console){{{ root@faiserver:~# update-alternatives --config editor }}}Hier {{{vim.basic}}} auswählen. 1. Das Programm Midnight Commander starten (Kommando: {{{mc}}}): * F9 drücken * Optionen -> Konfiguration: [x] Internen Editor benutzen * Optionen -> Einstellungen speichern * F10: Midnight Commander beenden 1. Den Midnight Commander Editor (Kommando: {{{mcedit}}}) starten: * F9 drücken * Menüpunkt: ''Optionen -> Allgemein'' * "Backspace durch Tabs" auswählen * "Tabs mit Leerzeichen auffüllen" auswählen * "Return rückt automatisch ein" abwählen * mit "OK" bestätigen * F10: Editor beenden ==== Boot-Verzögerung bei Stromausfall ==== Debian Edu Systeme setzen beim Systemstart einen erreichbaren Hauptserver voraus. Für Debian Edu Server-VMs ergibt sich die Anforderung einer Boot-Verzögerung, die z.B. bei Stromausfall dafür sorgt, dass der Haupt-Server nach Neustart aller Systeme verfügbar ist. Anstelle aufwendiger VM-Host Skripte wird eine Startverzögerung durch ein hohes Timeout im Bootloader GRUB erwirkt.{{{ @faiserver:/# diff -u /etc/default/grub.orig /etc/default/grub --- /etc/default/grub.orig 2012-08-31 16:06:51.000000000 +0200 +++ /etc/default/grub 2012-08-31 16:06:59.000000000 +0200 @@ -2,7 +2,7 @@ # /boot/grub/grub.cfg. GRUB_DEFAULT=0 -GRUB_TIMEOUT=5 +GRUB_TIMEOUT=600 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="" }}} Danach muss die Konfigurationsänderung übernommen werden:{{{ root@faiserver:~# update-grub }}} ==== Nur Admin-User und Junior-Admins dürfen sich auf FAISERVER einloggen ==== Schul-Admins und IT-Dienstleister:innen tragen wir in der LDAP-Gruppe {{{admins}}} ein. Junior-Admins (z.B. Schüler:innen einer Computer-AG) tragen wir in der Gruppe {{{jradmins}}} ein. /!\ '''Wichtig:''' Der Diskless Workstation Server darf ein Login nur für Dienstleister, Schul-Admins und Junior-Admins erlauben. Hierfür müssen die Dateien {{{/etc/security/access.conf}}} und {{{/etc/pam.d/sshd}}} angepasst werden:{{{ --- /etc/security/access.conf.orig +++ /etc/security/access.conf @@ -120,3 +120,6 @@ # # All other users should be denied to get access from all sources. #- : ALL : ALL + ++ : fai admins jradmins root : ALL +- : ALL : ALL }}}{{{ --- /etc/pam.d/sshd.orig 2012-07-30 17:51:12.000000000 +0200 +++ /etc/pam.d/sshd 2012-07-30 17:51:26.000000000 +0200 @@ -15,7 +15,7 @@ # Uncomment and edit /etc/security/access.conf if you need to set complex # access limits that are hard to express in sshd_config. -# account required pam_access.so +account required pam_access.so # Standard Un*x authorization. @include common-account }}} === Automatische Konfiguration via Puppet Agent === Wie jede Maschine in einem ITZkS-basierten Debian Edu Netzwerk, wird auf {{{faiserver.intern}}} wird Puppet verwaltet. D.h. alle weiteren Konfigurationsschritte sind mittels Puppet realisiert. Hierzu muss der Puppet Agent einmalig ausgeführt werden:{{{ root@faiserver:~# http_proxy= https_proxy= puppet agent --test }}} Danach muss auf {{{tjener.intern}}} eine Freischaltung (Signierung) des Host(-Zertifikats) durchgeführt werden:{{{ root@faiserver:~# puppet ca sign faiserver.intern }}} Abschließend nochmal den Puppet Agent durchlaufen lassen und den Dienst auch aktivieren:{{{ root@faiserver:~# http_proxy= https_proxy= puppet agent --test root@faiserver:~# puppet agent --enable root@faiserver:~# systemctl enable --now puppet }}} === FAI-Umgebung erstellen === ==== Speicherplatz für FAI-Umgebung und APT-Paket-Cache bereit stellen ==== Zunächst muss zusäzlicher Festplattenplatz vorbereitet werden: {{{ root@faiserver:~# fdisk /dev/sdb # eine Partition: sdb1, Partitionstyp: 8e root@faiserver:~# pvcreate /dev/sdb1 root@faiserver:~# vgextend vg_system /dev/sdb1 root@faiserver:~# lvcreate vg_system -n srv -L 90G root@faiserver:~# mkfs.ext4 /dev/vg_system/srv }}} Jetzt noch einen Eintrag in {{{/etc/fstab}}} anlegen:{{{ --- /etc/fstab.orig 2012-07-31 13:31:19.000000000 +0200 +++ /etc/fstab 2012-07-31 13:34:46.000000000 +0200 @@ -10,6 +10,7 @@ /dev/mapper/vg_system-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/vda1 during installation UUID= /boot ext4 defaults 0 2 +/dev/mapper/vg_system-srv /srv ext4 defaults 0 2 /dev/mapper/vg_system-usr /usr ext4 defaults 0 2 /dev/mapper/vg_system-var /var ext4 defaults 0 2 /dev/mapper/vg_system-swap_1 none swap sw 0 0 }}} ... und zuletzt das Dateisystem mounten (unter der Voraussetzung, dass {{{/srv}}} keine Daten enthält): {{{ root@faiserver:~# mount /srv }}} ==== FAI-Installer-Konfiguration anpassen ==== Im DEB-Paket {{{debian-edu-fai}}} (bzw. {{{debian-edu-fai+itzks}}} (welches als Abhängigkeit installiert wurde) befindet sich die Konfigurationsdatei {{{/etc/debian-edu/debian-edu-fai.conf}}} und das Skript {{{debian-edu-faiinstall}}}. Als erstes muss die Konfigurationsdatei angepasst werden:{{{ --- debian-edu-fai.conf 2022-09-16 20:48:00.244886307 +0200 +++ debian-edu-fai.conf.mine 2022-09-16 21:33:13.031132688 +0200 @@ -26,10 +26,10 @@ #fai_logserver="$(hostname -f)" # FAI system user: -#fai_loguser='fai' +fai_loguser='fai' # APT mirror to be used... -#mirrorurl=http://deb.debian.org/debian +mirrorurl=http://deb.debian.org/debian #... or alternatively, an 'apt-cacher-ng' on the gateway IP: #mirrorurl=http://10.0.0.1:3142/debian @@ -40,18 +40,18 @@ #ftp_proxy=http://10.0.0.1:3142 # ...or alternatively, if squid-deb-proxy is running on the faiserver. -#http_proxy="http://faiserver:8000" -#ftp_proxy="http://faiserver:8000" +http_proxy="http://faiserver:8000" +ftp_proxy="http://faiserver:8000" # Where to place tftp config folders/files... (default: /srv/tftp) #tftpdir=/srv/tftp # List of Debian versions (as codenames) to build FAI installers for (default: same codename # as the FAI installer host's Debian version). -#codenames="bullseye bookworm" +codenames="bullseye" # For generating the default boot entry in iPXE boot menu (default: first name in codenames, see above) -#default_codename="bookworm" +default_codename="bullseye" # FAI installation chroot architecture (default: auto-detected from the FAI installer host). # @@ -59,21 +59,21 @@ # make sure to run dpkg --add-architecture i386 on the FAI installer host before running # the 'debian-edu-faiinstall' script (otherwise, debootstrap will run as qemu-debootstrap # and that will be reallllyyyy slow). -#archs="amd64 i386" +archs="amd64" # For generating the default boot entry in iPXE boot menu (default: first arch in archs, see above) -#default_arch="i386" +default_arch="amd64" # Password for the root account of FAI-installed devices (and for the installer chroot). # Use '$ echo "yoursecrectpassword" | mkpasswd -m md5 -s' to create the pwhash. # If not specified, the host's root password will be used... -#rootpw='' +rootpw='' # For a local user account that can get created # Use '$ echo "yoursecrectpassword" | mkpasswd -m md5 -s' to create the pwhash. # If not specified, no local user account will be added to the FAI-installed system. -#localuser='' -#localuserpw='' +localuser='lwuser' +localuserpw='' # In case you want to provision FAI installed devices # with system wide WiFi settings. @@ -82,4 +82,5 @@ #wifi_passphrase='' # school tag (short name for school) -#school_tag='SKOLE' +school_tag='' }}} '''WICHTIG:''' Die Kennwörter für {{{root}}} und {{{localuser}}} müssen als Hashes hinterlegt werden (nicht im Klartext!!!):{{{ echo "yoursecrectpassword" | mkpasswd -m md5 -s }}} ==== SSH-Zugriff zwischen FAI-Server und FAI-Client ==== Zwei verschiedene Arten von SSH-Zugriff müssen jetzt noch konfiguriert werden: 1. SSH-Zugriff auf Geräte, die gerade mit FAI installiert werden 1. SSH-Zugriff vom Client, auf denen der FAI-Installer gerade läuft, zum FAI-Server, um Installations-Logs nach Ende der Installation wegzuschreiben ===== SSH-Zugriff auf FAI-Clients ermöglichen ===== Alle FAI-Server Admins können per SSH auf ein Gerät zugreifen, welches gerade mit FAI installiert wird. Dies funktioniert in unserem Setup meist automatisch: * Puppet hinterlegt die SSH-Schlüssel der Admins in {{{faiserver:/root/.ssh/authorized_keys}}} * In {{{/etc/debian-edu/fai/debian-edu-fai.TEMPLATE/nfsroot.conf.in}}} den Eintrag {{{SSH_IDENTITY=/root/.ssh/authorized_keys}}} auskommentieren. * FAI's {{{fai-make-nfsroot}}} Skript übernimmt dann das Kopieren der {{{/root/.ssh/authorized_keys}}} in das nfsroot des FAI-Installers ===== SSH-Zugriff für das Wegschreiben von Installations-Logs ===== Auf dem FAI-Server wurde mit der Installation des Pakets {{{debian-edu-fai}}} (bzw. {{{debian-edu-fai+itzks}}}) das Systemkonto {{{fai}}} erstellt. Man muss sicherstellen, dass der User {{{fai@faiserver.intern}}} sich ohne Passwortabfrage per SSH auf {{{fai@faiserver.intern}}} einloggen kann. Sobald dieses funktioniert, übernimmt die Funktion {{{setup_ssh}}} im FAI-Kommando {{{fai-make-nfsroot}}} die Aufgabe, das FAI nfsroot so einzurichten das root@fai-client sich auf fai@faiserver.intern einloggen kann. {{{ root@faiserver:~# su - fai fai@faiserver:~$ mkdir .ssh fai@faiserver:~$ ssh-keygen # WICHTIG: den SSH private Key nicht mit einer Passphrase schützen!!! fai@faiserver:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys }}} Da der {{{fai}}} Systembenutzer auf dem FAI-Server als primäre Gruppe {{{nogroup}}} eingetragen hat, funktioniert das passwortlose Login noch nicht vollständig. Es müssen noch manuell Dateirechte angepasst werden. {{{ fai@faiserver:~$ cd .ssh/ fai@faiserver:~/.ssh$ ls -al insgesamt 24 drwxrwxr-x 2 fai nogroup 4096 18. Sep 11:31 . drwx------ 3 fai nogroup 4096 18. Sep 11:27 .. -rw-rw-r-- 1 fai nogroup 574 18. Sep 11:31 authorized_keys -rw------- 1 fai nogroup 2610 18. Sep 11:29 id_rsa -rw-r--r-- 1 fai nogroup 574 18. Sep 11:29 id_rsa.pub -rw-r--r-- 1 fai nogroup 444 18. Sep 11:31 known_hosts fai@faiserver:~/.ssh$ chmod go-rwx authorized_keys fai@faiserver:~/.ssh$ chmod go-rwx . }}} Nach den Änderungen der Dateirechte sollte das .ssh-Verzeichnis wie folgt aussehen: {{{ fai@faiserver:~/.ssh$ ls -al insgesamt 24 drwx------ 2 fai nogroup 4096 18. Sep 11:31 . drwx------ 3 fai nogroup 4096 18. Sep 11:27 .. -rw------- 1 fai nogroup 574 18. Sep 11:31 authorized_keys -rw------- 1 fai nogroup 2610 18. Sep 11:29 id_rsa -rw-r--r-- 1 fai nogroup 574 18. Sep 11:29 id_rsa.pub -rw-r--r-- 1 fai nogroup 444 18. Sep 11:31 known_hosts }}} Zuletzt muss das Login noch getestet werden. Dieser Schritt ist wichtig, weil hierbei auf der richtige Eintrag für faiserver.intern in der Datei {{{~fai/.ssh/known_hosts}}} abgelegt wird:{{{ fai@faiserver:~$ ssh -lfai faiserver.intern The authenticity of host 'faiserver.intern (10.0.2.3)' can't be established. ECDSA key fingerprint is SHA256:. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'faiserver.intern,10.0.2.3' (ECDSA) to the list of known hosts. Linux faiserver.intern 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. fai@faiserver:~$ }}} ==== FAI-Installationsumgebung erstellen ==== Jetzt endlich kann die FAI-Installationsumgebung in {{{/srv/fai/nfsroot.debian-edu-fai/}}} erstellt werden. Hierfür muss einfach folgendes Skript ausgeführt werden:{{{ $ debian-edu-faiinstall }}} Wichtig ist, dass das Skript ohne Fehler ausgeführt wird. Falls nicht, muss das berichtete Problem behoben werden, ggf. sollte man {{{/srv/fai/nfsroot.debian-edu-fai/}}} wieder entfernen und das Skript erneut aufrufen. ==== FAI-Installer via PXE anbieten ==== Schließlich muss der FAI-Installer über PXE via LDAP angeboten werden. Hierfür muss folgendes LDAP-Snippet nach LDAP importiert werden:{{{ dn: cn=fai-installation,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no dhcpStatements: next-server faiserver cn: fai-installation objectClass: top objectClass: dhcpGroup objectClass: dhcpOptions }}}