== Einrichtung des Diskless Workstation Chroot ==

<<TableOfContents(5)>>

=== 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 bullseye main
deb http://packages.it-zukunft-schule.de/debian bullseye-backports main
"""

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

===== 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
}}}

Danach das Chroot verlasse (Kommando: {{{exit}}}) und für die Boot-Umgebung das aktuelle Kernel-Image (+ InitRamDisk) bereitstellen:{{{
# ltsp kernel /srv/ltsp/*
}}}

===== 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 ======

Wenn man SSH-Zugriff auf Diskless Workstations unterbinden möchte, dann sollte man den SSH Dienst auf Diskless Workstations nur auf der {{{localhost}}} Adresse (IPv4-only!) "lauschen" lassen:{{{


--- /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 127.0.0.1
 Protocol 2
 # HostKeys for protocol version 2
 HostKey /etc/ssh/ssh_host_rsa_key
}}}

Die SSH Server Software kann alternativ auch deinstalliert werden, allerdings benötigt das Paket {{{x2goclient}}} den SSH-Server und installiert ihn mit.

Entfernt man den SSH Server, dann wir der X2Go Client ebenfalls deinstalliert. Es wird nicht empfohlen, den SSH-Server zu deaktivieren, da er von X2Go Client benötigt wird. Sinnvoller ist die SSH-Dienst-Zugriffseinschränkung auf localhost (s.o.).

====== 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
}}}


====== Nur Admin-User und Junior-Admins dürfen sich auf DLWs per SSH 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.

Lässt man den SSH-Dienst auf Diskless Workstations aktiv und ist dieser im Intranet der Schule erreichbar, dann kann man SSH-Zugriff auf Diskless Workstations Gruppen-basiert einschränken, z.B. so:

Es 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 teachers 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
}}}


====== 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;audio,bluetooth,cdrom,dip,floppy,netdev,plugdev,scanner,video
+

}}}

=== 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"
dhcpStatements: next-server disklserver
cn: diskless-and-localdisk-workstations
objectClass: top
objectClass: dhcpGroup
objectClass: dhcpOptions

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
}}}