== Diskless Workstation Server (jessie) (ganeti) == <> === Installation === Das Debian Edu Minimalsystem {{{disklserver.intern}}} installieren wir über die PXE-Installationsumgebung von Debian Edu / Skolelinux. ==== Ganeti Instanz vorbereiten ==== Ganeti Instanz vorbereiten: {{{ $ sudo gnt-instance add -t plain -o noop -s 80g -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 ==== VNC installieren (hierfür muss im ssh zum Virt-Man-01 die Option -X gesetzt sein ({{{ssh -X locadm@172.16.0.1}}}):{{{ $vncviewer 127.0.0.1::11000 }}} 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 * ''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 * DHCP (10.0.0.0-Netz) * DNS aktivieren * NIS Netgroups Eintrag in Gruppe: {{{server-hosts}}} === Konfiguration === 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. ==== 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 in {{{virt-manager}}} muss aufgerufen werden. * zweite Festplatte hinzufügen: {{{disklserver.intern_sdb}}} * VM wieder anschalten und in der VM weiterarbeiten ==== Paket-Quellen für Debian squeeze-backports und ITZkS dem Diskless Workstations Server hinzufügen ==== {{{ $ editor /etc/apt/sources.list.d/backports.list """ deb http://ftp.de.debian.org/debian-backports squeeze-backports main contrib non-free """ $ editor /etc/apt/sources.list.d/itzks.list """ deb http://packages.it-zukunft-schule.de/debian squeeze main deb http://packages.it-zukunft-schule.de/debian squeeze-backports main """ $ apt-get update && apt-get install itzks-systems-common itzks-keyring && apt-get update && apt-get install x2go-keyring deb-multimedia-keyring pkg-mozilla-archive-keyring && apt-get update }}} ==== Software nachinstallieren ==== * Die folgenden Pakete sollten nachinstalliert werden:{{{ $ sudo apt-get install itzks-packages-disklserver }}} ==== System konfigurieren ==== 1. Login als {{{root}}} 1. Standard-Editor festlegen (an der Unix-Console){{{ $ 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 System setzen beim Systemstart einen erreichbaren Hauptserver voraus. Für Debian Edu Server-VMs ergibt sich die Anforderung einer Boot-Verzögerung. Anstelle aufwendiger VM-Host Skripte wird eine Startverzögerung durch ein hohes Timeout im Bootloader GRUB erwirkt.{{{ @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:{{{ $ sudo update-grub }}} ==== Nur Admin-User und Junior-Admins dürfen sich auf DISKLSERVER einloggen ==== 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. /!\ '''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 }}} === Einrichtung des Diskless Workstation Chroot === ==== Speicherplatz für DLW Chroot bereit stellen ==== Zunächst muss der für das Diskless Workstation Chroot Image vorgesehene Festplattenplatz vorbereitet werden. * Festplatte partitionieren:{{{ $ sudo fdisk /dev/vdb }}} * die virtuelle Festplatte wird mit einer primären Partition konfiguriert, FS Type ist ,,Linux".{{{ Disk /dev/vdb: 85.9 GB, 85899345920 bytes 16 heads, 63 sectors/track, 166440 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x99acb31a Device Boot Start End Blocks Id System /dev/vdb1 1 166440 83885728+ 83 Linux }}} * dann diese Partition mit dem XFS-Dateisystem formatieren:{{{ $ sudo mkfs.xfs /dev/vdb1 }}} * mit dem Befehl {{{blkid}}} die Block Device ID des frisch formatierten Dateisystem ermitteln und 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 / ext3 errors=remount-ro 0 1 # /boot was on /dev/vda1 during installation UUID= /boot ext3 defaults 0 2 +UUID= /srv xfs defaults 0 2 /dev/mapper/vg_system-usr /usr ext3 defaults 0 2 /dev/mapper/vg_system-var /var ext3 defaults 0 2 /dev/mapper/vg_system-swap_1 none swap sw 0 0 }}} * und zuletzt das Dateisystem mounten:{{{ $ 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/i386}}}. Nach der Debian Edu Terminalserver Installation wird das Diskless Chroot mittels {{{ŧar}}} verpackt und auf den Diskless Workstation Server nach {{{/srv/ltsp/i386}}} kopiert. {{{ # Als Super-User root@ltspserver00: # ================================= ltspserver00:~$ cd /opt ltspserver00:/opt$ rsync -aHAX --numeric-ids ltsp root@disklserver:/srv }}} ==== Chroot-Verzeichnis via NFSv3 exportieren ==== Um das Diskless Workstation Chroot Verzeichnis via NFSv3 zu exportieren, muss dieser Eintrag der Datei {{{/etc/exports}}} hinzugefügt werden:{{{ $ sudo -i $ echo "/srv/ltsp/i386 @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 ==== Ü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 squeeze main deb http://packages.it-zukunft-schule.de/debian squeeze-backports main """ $ apt-get update && apt-get install itzks-keyring itzks-systems-common && apt-get update && apt-get install x2go-keyring deb-multimedia-keyring pkg-mozilla-archive-keyring && 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 -t squeeze-backports linux-image-486 }}} ==== 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 -t squeeze-backports itzks-packages-diskless }}} Und danach ein Distribution Upgrade auf Debian squeeze-backports:{{{ $ apt-get dist-upgrade -t squeeze-backports }}} 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!!! ===== Zusätzliche Mountpoints angelegen ===== {{{ $ touch /etc/syslog.conf $ touch /etc/X11/xorg.conf }}} ===== Dienste neu starten nach Änderung der Netzwerksituation ===== Einige Dienste neu starten, nachdem {{{network-manager}}} das Netzwerk gestartet hat: * Den {{{autofs}}} Dienst neu starten, sobald das Netzwerk verfügbar ist:{{{ $ vim /etc/network/if-up.d/autofs """ #!/bin/sh /etc/init.d/autofs restart """ $ chmod a+x /etc/network/if-up.d/autofs }}} * Den CUPS-Daemon neu starten, sobald das Netzwerk verfügbar ist:{{{ $ vim /etc/network/if-up.d/cups """ #!/bin/sh /etc/init.d/cups restart """ $ chmod a+x /etc/network/if-up.d/cups }}} ===== 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 }}} ===== User-Rechte auf USB-Devices unter GNOME anpassen ===== 1. Auf den Diskless Workstation mit Debian Edu squeeze lassen sich unter GNOME USB-Devices nicht vernünftig aushängen. Das Problem existierte bis in Debian Edu squeeze-r1. Ein entsprechende Anpassung muss im Diskless Workstation Chroot vorgenommen werden: {{{ root@disklserver:/# diff -u /usr/share/ltsp/ltsp_config.d/debian-edu-config-rwbind.orig /usr/share/ltsp/ltsp_config.d/debian-edu-config-rwbind --- /usr/share/ltsp/ltsp_config.d/debian-edu-config-rwbind.orig 2013-04-01 16:30:20.563371184 +0200 +++ /usr/share/ltsp/ltsp_config.d/debian-edu-config-rwbind 2013-04-01 16:31:29.939292502 +0200 @@ -25,6 +25,9 @@ # Make sure udev can write to the directories it is using rw_dirs="$rw_dirs /var/lib/dbus /media" + # Make sure udisks can write its mtab file + rw_dirs="$rw_dirs /var/lib/udisks" + # ntpd requires rw access to /var/log/ntpstats # WARNING: this is currently disabled as ntpd will constantly write to /var/log/ntpstats # and consume diskless workstation RAM... investigating on a solution for that }}} ===== Update-Benachrichtigungen deaktivieren ===== {{{ $ apt-get remove --purge update-notifier-common }}} ===== Java 7 (Oracle) nachinstallieren ===== Optional kann auf den Diskless Workstations auch Java 7 (Oracle) installiert werden:{{{ $ apt-get install oracle-java7-jre oracle-java7-plugin $ update-java-alternatives --jre --set java-7-oracle $ update-java-alternatives --plugin --set java-7-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... ethtool -s eth0 wol g }}} ===== Logitech Unified Receiver Workaround ===== Anpassungen an der {{{gdm}}} Konfiguration vornehmen, so wie sie [[Technik/Nutzungshinweise/LogitechWirelessKeyboards#Debian_squeeze_mit_GDM|hier]] beschrieben sind. ===== 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 + }}} ===== eventuell: Plymouth-Prozessen "töten" bevor GDM startet ===== In manchen Setups kann es vorkommen, dass GDM (aus Debian squeeze) nicht sauber startet, weil plymouthd (via {{{plymouth --quit}}} in {{{/etc/init.d/plymouth}}}) nicht sauber oder nicht früh genug beendet werden konnte. Was man dann beobachtet ist, dass in einem Klassenraum nicht alle Diskless Workstations in GDM hinein-booten. Drückt man dann Strg+Alt+F8, erscheint GDM. Gleichzeitig ist auf tty7 und tty8 diese Fehlermeldung sichtbar: {{{unexpectedly disconnected from boot status daemon}}}. Was hilft ist: in {{{/etc/init.d/gdm}}} in der Zeile oberhalb vom GDM-Start ein "{{{killall -9 plymouthd}}}" einzufügen. ''We know, it's a terrible hack...'' === 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: http://code.it-zukunft-schule.de/gitweb?p=itzks-systems.git;a=blob;f=examples/disklserver/README.tftp ==== Anpassen des Standard-Images für PXE-Boot ==== Auf {{{disklserver.}}} 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:{{{ @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 }}}