Unterschiede zwischen den Revisionen 1 und 22 (über 21 Versionen hinweg)
Revision 1 vom 2021-12-22 09:25:55
Größe: 17132
Kommentar:
Revision 22 vom 2022-09-18 21:51:13
Größe: 19097
Kommentar:
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 6: Zeile 6:
Das Debian Edu Minimalsystem {{{disklserver.intern}}} installieren wir über die PXE-Installationsumgebung von Debian Edu / Skolelinux.

==== Ganeti Instanz vorbereiten ====

Ganeti Instanz vorbereiten (Achtung: Node ggf. anpassen, hier {{{virt-man-02}}}):
{{{
$ sudo gnt-instance add -t plain -o noop -s 120g -n virt-man-02.backbone --no-start --no-install --no-name-check --no-ip-check -H kvm:vnc_bind_address=127.0.0.1 disklserver.intern
$ sudo gnt-instance modify --net 0:modify,network=DebianEdu disklserver.intern
$ sudo gnt-instance modify -B maxmem=4096,minmem=4096,vcpus=2 disklserver.intern
$ sudo gnt-instance modify -H keymap=de disklserver.intern
$ sudo gnt-instance start -H boot_order=network disklserver.intern
}}}

==== VM installieren ====

Die VM {{{disklserver.intern}}} ist nun über VNC zu installieren. Hierfür muss man sich zu dem Node, auf dem die VM läuft, entweder grafisch (z.Bsp. X2Go) oder via {{{ssh -X}}} verbinden ({{{ssh -X locadm@172.16.0.1}}}):{{{
$vncviewer 127.0.0.1::<port>
}}}


Es startet der Debian (Edu) Installer:

  * 64-bit Install auswählen
  * Warten, Debian Edu Installer lädt...
    * Installationsprofil: Minimal
    * Autom. Part.: ja
    * Paketverwend.: Ja
    * Kennwort für root festlegen
Das Debian Edu Minimalsystem {{{disklserver.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
Zeile 39: Zeile 22:
      * ermittelte MAC-Adresse eintragen       * ermittelte MAC-Adresse eintragen (vergl. Info-Seite bzgl. VM-Instanz Setup, s.o.)
Zeile 42: Zeile 25:
      * NIS Netgroups Eintrag in Gruppe: {{{server-hosts}}}       * NIS Netgroups Eintrag in Gruppe: {{{server-hosts}}} (hierfür muss der Systemeintrag in GOsa² erstmal angelegt worden sein, danach nochmal die NIS Netgroup nachbearbeiten)
Zeile 46: Zeile 29:
Nach dem Neustart der VM {{{disklserver.intern}}} sollte der Hostname des gestarteten Systems auf {{{disklserver.intern}}} gesetzt sein. Wird stattdessen als Hostname {{{localhost}}} angezeigt, hat die Eintragung des Systems in GOsa² nicht funktioniert. Bevor man weiter fortfahren kann, muss dieser Fehler behoben sein. Nach dem Neustart der VM {{{disklserver.intern}}} sollte der Hostname des gestarteten Systems auf {{{disklserver.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.2 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 {{{disklserver.intern}}} kopiert werden (welche die Principals für {{{host/disklserver.intern}}} und {{{nfs/disklserver.intern}}} enthält. Dies erfolgt über folgenden Befehlsaufruf:

{{{

root@disklserver:~# /usr/share/debian-edu-config/tools/copy-host-keytab
Passwort für root@INTERN:
disklserver.intern.keytab 100% 324 9.0KB/s 00:00
root@disklserver:~#

}}}

Danach sollte es möglich sein, sich mit einem LDAP-Benutzerkonto an {{{disklserver.intern}}} via Login TTY od. SSH einzuloggen.
Zeile 50: Zeile 54:
  * Nach der Installation und dem ersten Start führen wir die folgenden Änderungen an der VM-Konfiguration von {{{disklserver.intern}}} durch. Hierfür muss die VM herunter gefahren werden und die VM-Konfiguration in {{{virt-manager}}} muss aufgerufen werden.
    * zweite Festplatte hinzufügen: {{{disklserver.intern_sdb}}}
  * Nach der Installation und dem ersten Start führen wir die folgenden Änderungen an der VM-Konfiguration von {{{disklserver.intern}}} durch. Hierfür muss die VM herunter gefahren werden und die VM-Konfiguration angepasst werden:
    * zweite Festplatte hinzufügen (Name für libVirt: {{{disklserver.intern_sdb}}})
Zeile 54: Zeile 58:
==== Paket-Quellen für Debian squeeze-backports und ITZkS dem Diskless Workstations Server hinzufügen ====

{{{

$ editor /etc/apt/sources.list.d/backports.list
==== Paket-Quellen für ITZkS aktivieren ====

Für den Diskless-Workstation-Server gibt es ein eigenes Overlay-Paket, welches aus dem IT-Zukunft Schule Projekt-APT-Repository installiert wird:

{{{

root@disklserver:~# editor /etc/apt/sources.list.d/itzks.list
Zeile 61: Zeile 67:
deb http://ftp.de.debian.org/debian stretch-backports main contrib non-free deb http://packages.it-zukunft-schule.de/debian bullseye main contrib non-free
Zeile 64: Zeile 70:
$ editor /etc/apt/sources.list.d/itzks.list

"""
deb http://packages.it-zukunft-schule.de/debian stretch main contrib non-free
deb http://packages.it-zukunft-schule.de/debian stretch-backports main contrib non-free
"""

$ apt-get update && apt-get install itzks-systems-common itzks-keyring && apt-get update
root@disklserver:~# apt-get --allow-insecure-repositories update && apt-get install itzks-keyring && apt-get update
root@disklserver:~# 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@disklserver:~# itzks-systems.do_preseed
Preseeding ocsinventory-agent/tag to <SCHOOL>
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.
Zeile 76: Zeile 90:
 * Die folgenden Pakete sollten nachinstalliert werden:{{{
$ sudo apt-get install itzks-systems-disklserver
Die weitere Software wird über die Installation des Meta- und Config-Pakets {{{itzks-systems-disklserver}}} installiert:

{{{
root@disklserver:~# sudo apt-get install itzks-systems-disklserver
Zeile 84: Zeile 100:
$ update-alternatives --config editor root@disklserver:~# update-alternatives --config editor
Zeile 103: Zeile 119:
Debian Edu System setzen beim Systemstart einen erreichbaren Hauptserver voraus. Für Debian Edu Server-VMs ergibt sich die Anforderung einer Boot-Verzögerung. 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.
Zeile 121: Zeile 137:
$ sudo update-grub root@disklserver:~# update-grub
Zeile 126: Zeile 142:
Schul-Admins und IT-Dienstleister tragen wir in der LDAP-Gruppe {{{admins}}} ein. Junior-Admins (Schüler der Computer-AG) tragen wir in der Gruppe {{{jradmins}}} ein. 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.
Zeile 152: Zeile 168:

=== Einrichtung des Diskless Workstation Chroot ===
=== Automatische Konfiguration via Puppet Agent ===

Wie jede Maschine in einem ITZkS-basierten Debian Edu Netzwerk, wird auf {{{disklserver.intern}}} wird Puppet verwaltet. D.h. alle weiteren Konfigurationsschritte sind mittels Puppet realisiert.

Hierzu muss der Puppet Agent einmalig ausgeführt werden:{{{
root@disklserver:~# sudo -i
root@disklserver:~# http_proxy= https_proxy= puppet agent --test
}}}

Danach muss auf {{{tjener.intern}}} eine Freischaltung (Signierung) des Host(-Zertifikats) durchgeführt werden:{{{
root@tjener:~# puppet ca sign disklserver.intern
}}}

Abschließend nochmal den Puppet Agent durchlaufen lassen und den Dienst auch aktivieren:{{{
root@disklserver:~# http_proxy= https_proxy= puppet agent --test
root@disklserver:~# puppet agent --enable
root@disklserver:~# systemctl enable --now puppet
}}}


=== DLW Chroot bereitstellen ===
Zeile 157: Zeile 192:
Zunächst muss der für das Diskless Workstation Chroot Image vorgesehene Festplattenplatz vorbereitet werden:{{{

$ sudo
lvcreate vg_system -n srv -L 40G
$ sudo mkfs.ext4 /dev/vg_system/srv
Zunächst muss der für das Diskless Workstation Chroot Image vorgesehene Festplattenplatz vorbereitet werden:

{{{
root@disklserver:~# fdisk /dev/sdb # eine Partition: sdb1, Partitionstyp: 8e
root@disklserver:~# pvcreate /dev/sdb1
root@disklserver:~# vgextend vg_system /dev/sdb1
root@disklserver:~#
lvcreate vg_system -n srv -L 60G
root@disklserver:~# mkfs.ext4 /dev/vg_system/srv
}}}
Zeile 174: Zeile 214:
 * und zuletzt das Dateisystem mounten (unter der Voraussetzung, dass {{{/srv}}} keine Daten enthält):{{{
$ sudo mount /srv
}}}

==== Chroot Erstellen ====

Das Diskless Workstation Chroot wird automatisch bei der Installation eines Debian Edu Terminal (LTSP) Servers erstellt. Dieses Chroot liegt auf einem frisch installierten LTSP Server im Ordner {{{/opt/ltsp/amd64}}} (ggf. auch unter {{{/opt/ltsp/i386}}}).

Wir beschreiben im folgenden die Umgangsweise mit einem amd64-Chroot. Werden viele alte Thin Client Geräte genutzt, ist es ggf. erforderlich ein i386 Chroot vorzuhalten.

===== Möglichkeit 1: Chroot selbst anlegen =====

Nach der Debian Edu Terminalserver Installation wird das Diskless Chroot mittels {{{ŧar}}} verpackt und auf den Diskless Workstation Server nach {{{/srv/ltsp/amd64}}} kopiert.

{{{
# Als Super-User root@ltspserver00:
# =================================
ltspserver00:~$ cd /opt
ltspserver00:/opt$ rsync -aHAX --numeric-ids ltsp root@disklserver:/srv
}}}

===== Möglichkeit 2: ITZkS-Chroot für DLWs beziehen =====

'''Empfohlen:''' Das IT-Zukunft Schule Projekt pflegt ein stets aktuells Diskless Workstation Chroot. Dieses kann auf den {{{disklserver}}} synchronisiert werden. Dieser Service steht allerdings nur Projekt-Kunden zur Verfügung.

==== Chroot-Verzeichnis via NFSv3 exportieren ====

Um das Diskless Workstation Chroot Verzeichnis (Achtung: bitte entsprechend amd64 oder i386 im Pfad verwenden) via NFSv3 zu exportieren, muss dieser Eintrag der Datei {{{/etc/exports}}} hinzugefügt werden:{{{
$ sudo -i
$ echo "/srv/ltsp/amd64 @workstation-hosts(ro,async,no_root_squash,subtree_check) 127.0.0.1(ro,async,no_root_squash,subtree_check,insecure)" >> /etc/exports
$ exportfs -ar
$ exit
}}}

==== Chroot für Aktualisierung vorbereiten (nur wenn Chroot selbst gepflegt wird) ====

Über das Paket {{{itzks-packages-disklserver}}} wurde das Skript {{{diskless-workstation-shell}}} auf {{{disklserver.intern}}} installiert. Dieses Skript ruft eine Shell im Diskless Workstation Chroot auf, so dass Software-Aktualisierungen und anderen Aufgaben im Chroot durchgeführt werden können.{{{
sudo diskless-workstation-shell
}}}

Im Chroot muss jetzt die APT-Quelle von IT-Zukunft Schule hinzugefügt werden. Von dort wird u.a. das Paket {{{itzks-systems-config}}} installiert, welches weitere APT Quellen dem System hinzufügt.{{{
$ editor /etc/apt/sources.list.d/itzks.list

"""
deb http://packages.it-zukunft-schule.de/debian stretch main
deb http://packages.it-zukunft-schule.de/debian stretch-backports main
"""

$ apt-get update && apt-get install itzks-keyring itzks-systems-common && apt-get update
}}}

==== Kernel im Chroot aktualisieren ====

/!\ Die untenstehenden Arbeitsschritte werden im Diskless Workstation Chroot ausgeführt (Kommando: {{{diskless-workstation-shell}}}).

Vor der Software-Aktualisierung spielen wir einen aktuellen Kernel ein:{{{
$ apt-get install linux-image-amd64
}}}

==== Software im Chroot aktualisieren ====

/!\ Die untenstehenden Arbeitsschritte werden im Diskless Workstation Chroot ausgeführt (Kommando: {{{diskless-workstation-shell}}}).

Die Software, die auf einer Diskless Workstation installiert werden soll, sind als Abhängigkeiten im Paket {{{itzks-packages-diskless}}} hinterlegt. Eine Installation dieses Pakets installiert die benötigte Software automatisch mit:{{{
$ apt-get install itzks-systems-diskless
}}}
Sollen DVDs auf Diskless Workstations abspielbar sein, dann muss von Debian Multimedia das Paket {{{libdvdcss2}}} nachinstalliert werden:{{{
$ apt-get install libdvdcss2
}}}

==== Konfiguration im Chroot anpassen ====

/!\ Die untenstehenden Arbeitsschritte werden im Diskless Workstation Chroot ausgeführt (Kommando: {{{diskless-workstation-shell}}}).

Alle Arbeitsschritte als Super-User {{{root}}} im Chroot durchführen!!!

===== SSH Server nur an das loop-Device binden =====
 Die Installation des Pakets {{{x2goclient}}} installiert einen SSH-Server mit. Auf Diskless Workstation sollte dieser Dienst nur auf der {{{localhost}}} Adresse (IPv4-only!) erreichbar sein:{{{
--- /etc/ssh/sshd_config.orig 2012-08-04 11:14:11.419983048 +0200
+++ /etc/ssh/sshd_config 2012-08-04 11:17:53.643836494 +0200
@@ -5,7 +5,8 @@
 Port 22
 # Use these options to restrict which interfaces/protocols sshd will bind to
 #ListenAddress ::
-#ListenAddress 0.0.0.0
+AddressFamily inet
+ListenAddress 172.0.0.1
 Protocol 2
 # HostKeys for protocol version 2
 HostKey /etc/ssh/ssh_host_rsa_key
}}}

===== Java 8 (Oracle) nachinstallieren =====

Optional kann auf den Diskless Workstations auch Java 8 (Oracle) installiert werden:{{{

  $ apt-get install oracle-java8-jre oracle-java8-plugin
  $ update-java-alternatives --jre --set java-8-oracle
  $ update-java-alternatives --plugin --set java-8-oracle
}}}

===== Tastatur anpassen =====

Ist auf dieser Seite beschrieben: [[Technik/Nutzungshinweise/TastaturEinstellungen]].

===== Shutdown-at-Night =====

Wichtig: auf allen Debian Edu Systemen sollte eine Shutdown-at-Night Version (>= 0.12) installiert sein.

Hinzu kommt, dass die Datei {{{/etc/default/halt}}} auf DLWs (und ggf. Workstation Hosts) angepasst werden muss:{{{
root@dlw-chroot:/# cat /etc/default/halt
# Default behaviour of shutdown -h / halt. Set to "halt" or "poweroff".
HALT=poweroff
NETDOWN=no

# leave network cards in WOL state... (adapt NIC name if needed)
ethtool -s eth0 wol g
}}}

===== PAM Groups konfigurieren =====

Diverse Features unter Linux bedürfen der Gruppenzugehörigkeit zu System-Gruppen (z.Bsp. fuse-basierte Dateisysteme). Dient LDAP als Benutzerverwaltung, dann müssen solche Gruppenzugehörigkeiten über PAM Groups
dem Benutzer hinzugefügt werden.

Auf den Diskless Workstations fügen wir dafür folgende Zeile an die Daten {{{/etc/security/groups.conf}}} an:{{{
root@dlw-chroot:/# diff -ur /etc/security/group.conf.orig /etc/security/group.conf
--- /etc/security/group.conf.orig 2014-03-03 13:05:17.000000000 +0100
+++ /etc/security/group.conf 2014-03-03 08:29:54.000000000 +0100
@@ -98,3 +98,5 @@
 # End of group.conf file
 #
 
+*;*;*;Al0000-2400;dialout,cdrom,floppy,audio,video,plugdev,netdev,powerdev,fuse
+

}}}

=== PXE-Bootumgebung für Diskless Workstations ===

Die PXE-Bootumgebung wird mithilfe der Tools {{{syslinux}}} und {{{atftpd}}} bereit gestellt.

==== PXE-Bootumgebung anlegen ====

Die PXE-Bootumgebung (eine Syslinux-Konfiguration) ist im Paket {{{itzks-systems-disklserver}}} enthalten. Installationshinweise befinden sich in der folgenden Datei:{{{
$ zcat /usr/share/doc/itzks-systems/disklserver/examples/README.tftp.gz
}}}

Eine Online-Kopie des gen. READMEs ist ebenfalls verfügbar:
https://code.it-zukunft-schule.de/cgit/itzks-systems/tree/examples/disklserver/README.tftp

==== Anpassen des Standard-Images für PXE-Boot ====

Auf {{{disklserver.<SCHULE>}}} unter {{{/srv/tftp/diskless+x2go/debian-edu/}}} folgende Anpassungen vornehmen.

(In diesem Beispiel zum Umstellen des Standardboot-Images von jessie auf stretch.)

{{{default-menu.cfg}}}

{{{
-- ontimeout ltsp-diskless-jessie
++ ontimeout ltsp-diskless-stretch
}}}

{{{ltsp-diskless-jessie.cfg}}}

{{{
-- MENU DEFAULT
++ # MENU DEFAULT
}}}

{{{ltsp-diskless-stretch.cfg}}}

{{{
-- # MENU DEFAULT
++ MENU DEFAULT
}}}

==== LDAP: DHCP-Gruppen für PXE-Bootumgebung ====

Mit dem Befehl {{{ldapvi}}} werden nun einige DHCP-Clientgruppen zum LDAP-Baum auf dem Debian Edu Hauptserver hinzugefügt.

 * das Programm {{{ldapvi}}} aufrufen:{{{
<user>@tjener:~$ ldapvi -ZZZ -D cn=admin,ou=ldap-access,dc=skole,dc=skolelinux,dc=no
}}}
 * für die DN {{{cn=admin,ou=ldap-access,dc=skole,dc=skolelinux,dc=no}}} das Kennwort der Hauptserver-Installation verwenden
 * die folgenden Zeilen (LDIF-Format) an die Textausgabe in {{{ldapvi}}} anhängen:{{{
add cn=diskless-and-localdisk-workstations,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: filename "/srv/tftp/diskless+localdisk+x2go/pxelinux.0"

... und zuletzt das Dateisystem mounten (unter der Voraussetzung, dass {{{/srv}}} keine Daten enthält):

{{{
root@disklserver:~# sudo mount /srv
}}}


Das Management der Diskless Workstations erfolgt mit dem Tool LTSP.

Das DLW Chroot wird zentral gepflegt und per Skript auf die DLW Server in den versch. Schulen übertragen. Das Chroot wird wahlweise nächtlich per rsync oder einmalig von einem zentralen Host auf den Schulserver synchronisiert. Die einmalige Bereitstellung des jeweils aktuellen DLW Images erfolgt auf Nachfrage. Das regelmäßige Update (meist zu Debian Point-Releases) erfolgt nur kostenpflichtig.

Das DLW Chroot wird im Ordner {{{/srv/ltsp/dlw+bullseye+amd64}}} bereit gestellt. Das DLW Chroot kann so wie es ist mittels LTSP startbar gemacht werden.

==== DLW Chroot via LTSP startbar machen ====

Desweiteren sind einige weitere manuelle Schritte nötig, um das DLW Chroot über PXE starbar zu machen.

Zunächst muss die NFS-Server Konfiguration von debian-edu-config deaktiviert werden. Hierfür müssen alle Zeilen in {{{/etc/exports.d/edu.exports}}} auskommentiert werden. Danach den NFS Kernel Server neustarten:{{{
root@disklserver:~# invoke-rc.d nfs-kernel-server restart
}}}

Danach müssen folgende LTSP Befehle ausgeführt werden:{{{
root@disklserver:~# ltsp ipxe
root@disklserver:~# ltsp kernel
root@disklserver:~# ltsp initrd
root@disklserver:~# ltsp nfs
}}}

==== DLW Squashfs Image ====

Es empfiehlt sich wegen der besseren Performanz, das DLW Chroot zu einem Squashfs Image umzuwandeln und dann das DLW Squashfs Image per PXE zu starten und nicht das DLW Chroot selbst.

Das Squashfs-Image (und auch die Aktualisierung der PXE-Umgebung) kann mit dem Skript {{{itzks-update-disklserver-squashfs-images}}} erfolgen:{{{
root@disklserver:~# itzks-update-disklserver-squashfs-images
Running: mount -t tmpfs -o mode=0755 tmpfs /srv/tmp/tmp.b3kQRsMM76/tmpfs
Running: mount -t overlay -o upperdir=/srv/tmp/tmp.b3kQRsMM76/tmpfs/0/up,lowerdir=/srv/ltsp/dlw+amd64+bullseye,workdir=/srv/tmp/tmp.b3kQRsMM76/tmpfs/0/work /srv/tmp/tmp.b3kQRsMM76/tmpfs /srv/tmp/tmp.b3kQRsMM76/root/
Trying to acquire package management lock: /srv/ltsp/dlw+amd64+bullseye/var/lib/dpkg/lock
Cleaning up dlw+amd64+bullseye before mksquashfs...
Replacing /srv/tmp/tmp.b3kQRsMM76/root/etc/ssh/ssh_host_ecdsa_key
Replacing /srv/tmp/tmp.b3kQRsMM76/root/etc/ssh/ssh_host_ed25519_key
Replacing /srv/tmp/tmp.b3kQRsMM76/root/etc/ssh/ssh_host_rsa_key
Generating a RSA private key
..................+++++
.............................................................................................................................................................................................+++++
writing new private key to '/srv/tmp/tmp.b3kQRsMM76/root/etc/ssl/private/ssl-cert-snakeoil.key'
-----
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /srv/ltsp/images/dlw+amd64+bullseye.img.tmp, block size 131072.
[========/ ] 73160/855010 8%
}}}

Der Vorgang (Squashfs Image bauen) dauert relativ lange und sollte ggf. in einem {{{screen}}}-Terminal ausgeführt werden.

Das Skript {{{itzks-update-disklserver-squashfs-images}}} aktualisiert am Ende auch die PXE-Startumgebung via LTSP, so dass nach Ausführen des Skripts das DLW Squashfs Image sofort zur Verfügung steht. So sieht die restliche Ausgabe des Skripts aus:{{{
[========================================================================================================/] 855010/855010 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
 compressed data, compressed metadata, compressed fragments,
 compressed xattrs, compressed ids
 duplicates are removed
Filesystem size 11555688.01 Kbytes (11284.85 Mbytes)
 44.34% of uncompressed filesystem size (26062824.09 Kbytes)
Inode table size 9220230 bytes (9004.13 Kbytes)
 27.71% of uncompressed inode table size (33277580 bytes)
Directory table size 9344774 bytes (9125.76 Kbytes)
 35.75% of uncompressed directory table size (26137271 bytes)
Number of duplicate files found 44541
Number of inodes 923305
Number of files 717670
Number of fragments 60650
Number of symbolic links 99322
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 106313
Number of ids (unique uids + gids) 36
Number of uids 15
 root (0)
 statd (110)
 unknown (123)
 avahi (111)
 Debian-exim (105)
 _apt (100)
 man (6)
 unknown (120)
 unknown (127)
 tftp (115)
 nobody (65534)
 unknown (124)
 unknown (125)
 unknown (122)
 unknown (126)
Number of gids 28
 root (0)
 dip (30)
 ssl-cert (110)
 shadow (42)
 tftp (123)
 Debian-exim (114)
 lpadmin (112)
 messagebus (111)
 mail (8)
 saned (121)
 kvm (105)
 tty (5)
 games (60)
 input (104)
 unknown (132)
 utmp (43)
 staff (50)
 systemd-timesync (113)
 man (12)
 unknown (127)
 unknown (134)
 avahi (118)
 unknown (130)
 nogroup (65534)
 unknown (131)
 adm (4)
 render (106)
 unknown (133)
Running: ltsp kernel /srv/ltsp/images/dlw+amd64+bullseye.img
Running: mount -t tmpfs -o mode=0755 tmpfs /srv/tmp/tmp.e0ec2gJKPE/tmpfs
Running: mount -t squashfs -o ro /srv/ltsp/images/dlw+amd64+bullseye.img /srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/looproot
Running: mount -t overlay -o upperdir=/srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/up,lowerdir=/srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/looproot,workdir=/srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/work /srv/tmp/tmp.e0ec2gJKPE/tmpfs /srv/tmp/tmp.e0ec2gJKPE/root/
-rw-r--r-- 1 root root 71696536 27. Jul 15:55 /srv/tftp/ltsp/dlw+amd64+bullseye/initrd.img
-rw-r--r-- 1 root root 6846656 24. Jul 00:32 /srv/tftp/ltsp/dlw+amd64+bullseye/vmlinuz
Running: mount -t tmpfs -o mode=0755 tmpfs /srv/tmp/tmp.D1twk5zxrz/tmpfs
Running: mount -t overlay -o upperdir=/srv/tmp/tmp.D1twk5zxrz/tmpfs/0/up,lowerdir=/srv/ltsp/dlw+amd64+bullseye,workdir=/srv/tmp/tmp.D1twk5zxrz/tmpfs/0/work /srv/tmp/tmp.D1twk5zxrz/tmpfs /srv/tmp/tmp.D1twk5zxrz/root/
-rw-r--r-- 1 root root 71696536 27. Jul 15:55 /srv/tftp/ltsp/dlw+amd64+bullseye/initrd.img
-rw-r--r-- 1 root root 6846656 24. Jul 00:32 /srv/tftp/ltsp/dlw+amd64+bullseye/vmlinuz
311 Blöcke
Generated ltsp.img:
-rw-r--r-- 1 root root 159232 18. Sep 22:56 /srv/tftp/ltsp/ltsp.img
Installed /usr/share/ltsp/server/ipxe/ltsp.ipxe in /srv/tftp/ltsp/ltsp.ipxe
Skipped existing /srv/tftp/ltsp/memtest.0
memtest.efi not found, that iPXE menu won't work
Skipped existing /srv/tftp/ltsp/snponly.efi
Skipped existing /srv/tftp/ltsp/undionly.kpxe
}}}

==== Diskless Workstations via PXE anbieten ====

Schließlich muss das Booten als Diskless Workstation über PXE via LDAP angeboten werden. Hierfür muss folgendes LDAP-Snippet nach LDAP importiert werden:{{{
dn: cn=diskless-workstation,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,[========/ ] 73160/855010 8% ou=systems,dc=skole,dc=skolelinux,dc=no
Zeile 363: Zeile 361:
cn: diskless-and-localdisk-workstations cn: diskless-workstation
Zeile 367: Zeile 365:

add cn=diskless-workstations,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: filename "/srv/tftp/diskless+x2go/pxelinux.0"
dhcpStatements: next-server disklserver
cn: diskless-workstations
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions

add cn=skolelinux-workstations,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: filename "/srv/tftp/skolelinux+x2go/pxelinux.0"
dhcpStatements: next-server disklserver
cn: skolelinux-workstations
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions

add cn=ubuntu-workstations,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: filename "/srv/tftp/ubuntu+x2go/pxelinux.0"
dhcpStatements: next-server disklserver
cn: ubuntu-workstations
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions

add cn=windows-workstations,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: filename "/srv/tftp//windows+x2go/pxelinux.0"
dhcpStatements: next-server disklserver
cn: windows-workstations
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions

add cn=x2go-thinclients,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: filename "/srv/tftp/x2go-tce/pxelinux.0"
dhcpStatements: next-server disklserver
cn: x2go-thinclients
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions
}}}
}}}

==== Krb5 Host Keytab übertrage per SSH während Bootvorgang ====

Die DLWs übertragen beim Starten des System die krb5.keytab Datei für den DLW-Host von TJENER. Hierfür muss eine Vertrauensstellung via SSH aufgebaut werden für {{{root@<dlw-host>}}} -> {{{debian-edu@tjener.intern}}}.

Zuerst muss im DLW Chroot ein SSH priv/pub Schlüsselpaar erstellt werden:{{{
root@disklserver:~# chroot /srv/ltsp/dlw+amd64+bullseye
root@disklserver:~# ssh-keygen # keine Passphrase hinterlegen!
root@disklserver:~# cat ~/.ssh/id_rsa.pub
<SSH-RSA pubkey>
}}}

Zusätzlich muss im DLW Chroot noch eine {{{known_hosts}}} Datei abgelegt werden. Hierfür muss ein kleiner Umweg gegangen werden, da die DLW im Chroot keinen eigenen Host-Key liegen hat.

{{{
root@disklserver:~# mv /root/.ssh/known_hosts /root/.ssh/known_hosts.bak
root@disklserver:~# ssh -lroot tjener.intern
The authenticity of host 'tjener.intern (10.0.2.2)' can't be established.
ECDSA key fingerprint is SHA256:<HOST-FINGERPRINT>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'tjener.intern,10.0.2.2' (ECDSA) to the list of known hosts.
root@tjener.intern's password:
}}}

Den Host-Fingerprint von {{{tjener.intern}}} akzeptieren, ein Login auf TJENER ist nicht möglich (und sollte auch mit Passwort nicht funktionieren).

Danach die Datei {{{/root/.ssh/known_hosts}}} in das DLW Chroot kopieren und die vorige Version von {{{known_hosts}}} wieder herstellen:{{{
root@disklserver:~# cp /root/.ssh/known_hosts /srv/ltsp/dlw+amd64+bullseye/root/.ssh/
root@disklserver:~# mv /root/.ssh/known_hosts.bak /root/.ssh/known_hosts
}}}

Den <SSH-RSA pubkey> jetzt via Copy+Paste übertragen nach {{{debian-edu@tjener.intern}}}:{{{
root@tjener:~# su - debian-edu
$ bash
debian-edu@tjener:~$ mkdir .ssh
debian-edu@tjener:~$ editor ~/.ssh/authorized_keys
}}}

In {{{~debian-edu/.ssh/authorized_keys}}} jetzt den <SSH-RSA pubkey> hineinkopieren. Speicher, Editor schließen.

Zuletzt muss jetzt die DLW Squashfs Image nochmal neu erstellt werden:{{{
root@disklserver:~# ltsp image /srv/ltsp/dlw+amd64+bullseye
}}}

Diskless Workstation Server (bullseye)

Installation

Das Debian Edu Minimalsystem disklserver.intern installieren wir über die PXE-Installationsumgebung von Debian Edu / Skolelinux. Die Vorbereitung der VM Instanz werden hier für libVirt bzw. 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 disklserver.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 disklserver.intern

      • Beschreibung: Diskless Workstations Image Server

      • IP: 10.0.2.9

      • 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)

Konfiguration

Nach dem Neustart der VM disklserver.intern sollte der Hostname des gestarteten Systems auf disklserver.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.2 Release) kommt es bei der Installation eines Minimal-Profils zu einem Fehler. Es fehlt das DEB-Paket libpam-krb5. Dies muss nachinstalliert werden (vergl. 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 disklserver.intern kopiert werden (welche die Principals für host/disklserver.intern und nfs/disklserver.intern enthält. Dies erfolgt über folgenden Befehlsaufruf:

root@disklserver:~# /usr/share/debian-edu-config/tools/copy-host-keytab 
Passwort für root@INTERN: 
disklserver.intern.keytab                                            100%  324     9.0KB/s   00:00    
root@disklserver:~# 

Danach sollte es möglich sein, sich mit einem LDAP-Benutzerkonto an disklserver.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 disklserver.intern durch. Hierfür muss die VM herunter gefahren werden und die VM-Konfiguration angepasst werden:

    • zweite Festplatte hinzufügen (Name für libVirt: disklserver.intern_sdb)

    • VM wieder anschalten und in der VM weiterarbeiten

Paket-Quellen für ITZkS aktivieren

Für den Diskless-Workstation-Server gibt es ein eigenes Overlay-Paket, welches aus dem IT-Zukunft Schule Projekt-APT-Repository installiert wird:

root@disklserver:~# editor /etc/apt/sources.list.d/itzks.list

"""
deb http://packages.it-zukunft-schule.de/debian bullseye main contrib non-free
"""

root@disklserver:~#  apt-get --allow-insecure-repositories update && apt-get install itzks-keyring && apt-get update
root@disklserver:~#  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@disklserver:~# itzks-systems.do_preseed
Preseeding ocsinventory-agent/tag to <SCHOOL>
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-disklserver installiert:

root@disklserver:~# sudo apt-get install itzks-systems-disklserver 

System konfigurieren

  1. Login als root

  2. Standard-Editor festlegen (an der Unix-Console)

    root@disklserver:~# update-alternatives --config editor

    Hier vim.basic auswählen.

  3. Das Programm Midnight Commander starten (Kommando: mc):

    • F9 drücken
    • Optionen -> Konfiguration: [x] Internen Editor benutzen

    • Optionen -> Einstellungen speichern

    • F10: Midnight Commander beenden
  4. 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.

<user>@disklserver:/# 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@disklserver:~# update-grub

Nur Admin-User und Junior-Admins dürfen sich auf DISKLSERVER 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
+
++ : 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 disklserver.intern wird Puppet verwaltet. D.h. alle weiteren Konfigurationsschritte sind mittels Puppet realisiert.

Hierzu muss der Puppet Agent einmalig ausgeführt werden:

root@disklserver:~# sudo -i
root@disklserver:~# http_proxy= https_proxy= puppet agent --test

Danach muss auf tjener.intern eine Freischaltung (Signierung) des Host(-Zertifikats) durchgeführt werden:

root@tjener:~# puppet ca sign disklserver.intern

Abschließend nochmal den Puppet Agent durchlaufen lassen und den Dienst auch aktivieren:

root@disklserver:~# http_proxy= https_proxy= puppet agent --test
root@disklserver:~# puppet agent --enable
root@disklserver:~# systemctl enable --now puppet

DLW Chroot bereitstellen

Speicherplatz für DLW Chroot bereit stellen

Zunächst muss der für das Diskless Workstation Chroot Image vorgesehene Festplattenplatz vorbereitet werden:

root@disklserver:~# fdisk /dev/sdb # eine Partition: sdb1, Partitionstyp: 8e
root@disklserver:~# pvcreate /dev/sdb1
root@disklserver:~# vgextend vg_system /dev/sdb1
root@disklserver:~# lvcreate vg_system -n srv -L 60G
root@disklserver:~# 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=<blkid-/boot>           /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@disklserver:~# sudo mount /srv

Das Management der Diskless Workstations erfolgt mit dem Tool LTSP.

Das DLW Chroot wird zentral gepflegt und per Skript auf die DLW Server in den versch. Schulen übertragen. Das Chroot wird wahlweise nächtlich per rsync oder einmalig von einem zentralen Host auf den Schulserver synchronisiert. Die einmalige Bereitstellung des jeweils aktuellen DLW Images erfolgt auf Nachfrage. Das regelmäßige Update (meist zu Debian Point-Releases) erfolgt nur kostenpflichtig.

Das DLW Chroot wird im Ordner /srv/ltsp/dlw+bullseye+amd64 bereit gestellt. Das DLW Chroot kann so wie es ist mittels LTSP startbar gemacht werden.

DLW Chroot via LTSP startbar machen

Desweiteren sind einige weitere manuelle Schritte nötig, um das DLW Chroot über PXE starbar zu machen.

Zunächst muss die NFS-Server Konfiguration von debian-edu-config deaktiviert werden. Hierfür müssen alle Zeilen in /etc/exports.d/edu.exports auskommentiert werden. Danach den NFS Kernel Server neustarten:

root@disklserver:~# invoke-rc.d nfs-kernel-server restart

Danach müssen folgende LTSP Befehle ausgeführt werden:

root@disklserver:~# ltsp ipxe
root@disklserver:~# ltsp kernel
root@disklserver:~# ltsp initrd
root@disklserver:~# ltsp nfs

DLW Squashfs Image

Es empfiehlt sich wegen der besseren Performanz, das DLW Chroot zu einem Squashfs Image umzuwandeln und dann das DLW Squashfs Image per PXE zu starten und nicht das DLW Chroot selbst.

Das Squashfs-Image (und auch die Aktualisierung der PXE-Umgebung) kann mit dem Skript itzks-update-disklserver-squashfs-images erfolgen:

root@disklserver:~# itzks-update-disklserver-squashfs-images
Running: mount -t tmpfs -o mode=0755 tmpfs /srv/tmp/tmp.b3kQRsMM76/tmpfs
Running: mount -t overlay -o upperdir=/srv/tmp/tmp.b3kQRsMM76/tmpfs/0/up,lowerdir=/srv/ltsp/dlw+amd64+bullseye,workdir=/srv/tmp/tmp.b3kQRsMM76/tmpfs/0/work /srv/tmp/tmp.b3kQRsMM76/tmpfs /srv/tmp/tmp.b3kQRsMM76/root/
Trying to acquire package management lock: /srv/ltsp/dlw+amd64+bullseye/var/lib/dpkg/lock
Cleaning up dlw+amd64+bullseye before mksquashfs...
Replacing /srv/tmp/tmp.b3kQRsMM76/root/etc/ssh/ssh_host_ecdsa_key
Replacing /srv/tmp/tmp.b3kQRsMM76/root/etc/ssh/ssh_host_ed25519_key
Replacing /srv/tmp/tmp.b3kQRsMM76/root/etc/ssh/ssh_host_rsa_key
Generating a RSA private key
..................+++++
.............................................................................................................................................................................................+++++
writing new private key to '/srv/tmp/tmp.b3kQRsMM76/root/etc/ssl/private/ssl-cert-snakeoil.key'
-----
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /srv/ltsp/images/dlw+amd64+bullseye.img.tmp, block size 131072.
[========/                                                                                                ]  73160/855010   8% 

Der Vorgang (Squashfs Image bauen) dauert relativ lange und sollte ggf. in einem screen-Terminal ausgeführt werden.

Das Skript itzks-update-disklserver-squashfs-images aktualisiert am Ende auch die PXE-Startumgebung via LTSP, so dass nach Ausführen des Skripts das DLW Squashfs Image sofort zur Verfügung steht. So sieht die restliche Ausgabe des Skripts aus:

[========================================================================================================/] 855010/855010 100% 

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
        compressed data, compressed metadata, compressed fragments,
        compressed xattrs, compressed ids
        duplicates are removed
Filesystem size 11555688.01 Kbytes (11284.85 Mbytes)
        44.34% of uncompressed filesystem size (26062824.09 Kbytes)
Inode table size 9220230 bytes (9004.13 Kbytes)
        27.71% of uncompressed inode table size (33277580 bytes)
Directory table size 9344774 bytes (9125.76 Kbytes)
        35.75% of uncompressed directory table size (26137271 bytes)
Number of duplicate files found 44541
Number of inodes 923305
Number of files 717670
Number of fragments 60650
Number of symbolic links  99322
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 106313
Number of ids (unique uids + gids) 36
Number of uids 15
        root (0)
        statd (110)
        unknown (123)
        avahi (111)
        Debian-exim (105)
        _apt (100)
        man (6)
        unknown (120)
        unknown (127)
        tftp (115)
        nobody (65534)
        unknown (124)
        unknown (125)
        unknown (122)
        unknown (126)
Number of gids 28
        root (0)
        dip (30)
        ssl-cert (110)
        shadow (42)
        tftp (123)
        Debian-exim (114)
        lpadmin (112)
        messagebus (111)
        mail (8)
        saned (121)
        kvm (105)
        tty (5)
        games (60)
        input (104)
        unknown (132)
        utmp (43)
        staff (50)
        systemd-timesync (113)
        man (12)
        unknown (127)
        unknown (134)
        avahi (118)
        unknown (130)
        nogroup (65534)
        unknown (131)
        adm (4)
        render (106)
        unknown (133)
Running: ltsp kernel /srv/ltsp/images/dlw+amd64+bullseye.img
Running: mount -t tmpfs -o mode=0755 tmpfs /srv/tmp/tmp.e0ec2gJKPE/tmpfs
Running: mount -t squashfs -o ro /srv/ltsp/images/dlw+amd64+bullseye.img /srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/looproot
Running: mount -t overlay -o upperdir=/srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/up,lowerdir=/srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/looproot,workdir=/srv/tmp/tmp.e0ec2gJKPE/tmpfs/0/work /srv/tmp/tmp.e0ec2gJKPE/tmpfs /srv/tmp/tmp.e0ec2gJKPE/root/
-rw-r--r-- 1 root root 71696536 27. Jul 15:55 /srv/tftp/ltsp/dlw+amd64+bullseye/initrd.img
-rw-r--r-- 1 root root  6846656 24. Jul 00:32 /srv/tftp/ltsp/dlw+amd64+bullseye/vmlinuz
Running: mount -t tmpfs -o mode=0755 tmpfs /srv/tmp/tmp.D1twk5zxrz/tmpfs
Running: mount -t overlay -o upperdir=/srv/tmp/tmp.D1twk5zxrz/tmpfs/0/up,lowerdir=/srv/ltsp/dlw+amd64+bullseye,workdir=/srv/tmp/tmp.D1twk5zxrz/tmpfs/0/work /srv/tmp/tmp.D1twk5zxrz/tmpfs /srv/tmp/tmp.D1twk5zxrz/root/
-rw-r--r-- 1 root root 71696536 27. Jul 15:55 /srv/tftp/ltsp/dlw+amd64+bullseye/initrd.img
-rw-r--r-- 1 root root  6846656 24. Jul 00:32 /srv/tftp/ltsp/dlw+amd64+bullseye/vmlinuz
311 Blöcke
Generated ltsp.img:
-rw-r--r-- 1 root root 159232 18. Sep 22:56 /srv/tftp/ltsp/ltsp.img
Installed /usr/share/ltsp/server/ipxe/ltsp.ipxe in /srv/tftp/ltsp/ltsp.ipxe
Skipped existing /srv/tftp/ltsp/memtest.0
memtest.efi not found, that iPXE menu won't work
Skipped existing /srv/tftp/ltsp/snponly.efi
Skipped existing /srv/tftp/ltsp/undionly.kpxe

Diskless Workstations via PXE anbieten

Schließlich muss das Booten als Diskless Workstation über PXE via LDAP angeboten werden. Hierfür muss folgendes LDAP-Snippet nach LDAP importiert werden:

dn: cn=diskless-workstation,cn=10.0.0.0,cn=intern,cn=dhcp,cn=tjener,ou=servers,[========/                                                                                                ]  73160/855010   8% ou=systems,dc=skole,dc=skolelinux,dc=no
dhcpStatements: next-server disklserver
cn: diskless-workstation
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions

Krb5 Host Keytab übertrage per SSH während Bootvorgang

Die DLWs übertragen beim Starten des System die krb5.keytab Datei für den DLW-Host von TJENER. Hierfür muss eine Vertrauensstellung via SSH aufgebaut werden für root@<dlw-host> -> debian-edu@tjener.intern.

Zuerst muss im DLW Chroot ein SSH priv/pub Schlüsselpaar erstellt werden:

root@disklserver:~# chroot /srv/ltsp/dlw+amd64+bullseye
root@disklserver:~# ssh-keygen # keine Passphrase hinterlegen!
root@disklserver:~# cat ~/.ssh/id_rsa.pub
<SSH-RSA pubkey>

Zusätzlich muss im DLW Chroot noch eine known_hosts Datei abgelegt werden. Hierfür muss ein kleiner Umweg gegangen werden, da die DLW im Chroot keinen eigenen Host-Key liegen hat.

root@disklserver:~# mv /root/.ssh/known_hosts /root/.ssh/known_hosts.bak
root@disklserver:~# ssh -lroot tjener.intern
The authenticity of host 'tjener.intern (10.0.2.2)' can't be established.
ECDSA key fingerprint is SHA256:<HOST-FINGERPRINT>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
Warning: Permanently added 'tjener.intern,10.0.2.2' (ECDSA) to the list of known hosts.
root@tjener.intern's password:

Den Host-Fingerprint von tjener.intern akzeptieren, ein Login auf TJENER ist nicht möglich (und sollte auch mit Passwort nicht funktionieren).

Danach die Datei /root/.ssh/known_hosts in das DLW Chroot kopieren und die vorige Version von known_hosts wieder herstellen:

root@disklserver:~# cp /root/.ssh/known_hosts /srv/ltsp/dlw+amd64+bullseye/root/.ssh/
root@disklserver:~# mv /root/.ssh/known_hosts.bak /root/.ssh/known_hosts

Den <SSH-RSA pubkey> jetzt via Copy+Paste übertragen nach debian-edu@tjener.intern:

root@tjener:~# su - debian-edu
$ bash
debian-edu@tjener:~$ mkdir .ssh
debian-edu@tjener:~$ editor ~/.ssh/authorized_keys

In ~debian-edu/.ssh/authorized_keys jetzt den <SSH-RSA pubkey> hineinkopieren. Speicher, Editor schließen.

Zuletzt muss jetzt die DLW Squashfs Image nochmal neu erstellt werden:

root@disklserver:~# ltsp image /srv/ltsp/dlw+amd64+bullseye

IT-Zukunft Schule: Technik/Installation/VM/DisklessServer/bullseye (zuletzt geändert am 2022-09-18 21:53:43 durch MikeGabriel)