Revamp LTSP: Doku zu Installation und Konfiguration
Einleitung
Nach mehreren bereits gestarteten Versuchen haben wir, Ende 2014, erneut intern entschieden unser stark ausgelastetes LTSP[1] System neu aufzusetzen.
Auch mit einer leistungsfähigeren Hardware.
Der LTSP Server soll innerhalb einer Xen[2] basierten virtuellen Maschine laufen. Dies bietet verschiedene Vorteile. Zum Beispiel können einzelne Dienste oder Anwendungen auf weitere virtuelle Maschinen ausgelagert werden.
"Images" können auch einfach gespeichert (Snapshots) oder verschoben werden, selbst auf einen physisch anderen Xen Server usw. usf..
Das Fundament dazu bilden RAID[3] + LVM[4].
Einsatzrahmen
- ca. 20 Büro Arbeitsplätze mit Standardanwendungen
- Umgebung für Softwareentwicklung (separate VM)
- evtl. weitere
Hardware
Dell Poweredge 2950 (nachfolgend PE2950
genannt)
- 2 x Intel(R) Xeon(R) CPU E5310 @ 1.60GHz (Quad Core)
- 20GB RAM (max. 32GB)
- 2x300GB SAS
Umsetzung Teil 1: Einrichtung des Xen Servers
Voreinstellungen
Vorzugsweise möchten wir ein Software RAID verwenden.
Bemerkung: Ein Software RAID bietet den Vorteil, dass es "maschinenunabhängig" ist. Das Software RAID wird im OS konfiguriert. (--> Wie genau, z.B. wo werden diese Informationen gespeichert ?)
Beim PE2950
wird jedoch, wenn der RAID Controller ausgeschaltet ist, keine der Festplatten erkannt.
Aus diesem Grund haben wir, gemäss Workaround[5], im RAID Controller BIOS (Ctrl+R), für die beiden Festplatten jeweils ein RAID0 eingestellt.
Grundinstallation
Wir haben uns für Debian Jessie entschieden. Jessie ist zwar im Moment noch testing befindet sich aber bereits im freeze und wird demnächst stable werden. Auch da dies ja unser eigener/interner LTSP wird. Für eine externe/Kunden-/Produktivmaschine sollte eigentlich immer stable gewählt werden.
Für die Installation verwenden wir das Installations-Image: firmware-jessie-DI-b2-amd64-netinst.iso[6]
Wir verwenden eine CD da booten von USB-Stick, trotz Auswahl im Boot-Screen (F11) nicht funktioniert.
Netzwerkkarten Erkennung
Aufgrund von proprietärer Firmware funktioniert die interne Broadcom Karte, während der Installation nicht.
Das Problem ist bekannt. Siehe: https://wiki.debian.org/InstallingDebianOn/Dell/PowerEdge2950/lenny
Leider funktioniert auch das Nachladen gemäss Debian Wiki[7] nicht. Auch die spezielle non-free Firmware CD Version sowie der Versuch die Firmware manuell zu laden haben nicht funktioniert.
Daher haben wir für die Installation (ev. auch für später ?) eine Intel PCIE Gigabit Ethernet Karte eingebaut. Mit dieser funktioniert die Netzwerkkarten Erkennung problemlos.
Partitionierung
Ein RAID1 für die beiden Festplatten erstellt (md0).
Bemerkung: Um einen allfälligen Ersatz der Festplatte durch ein anderes Modell zu gewährleisten, ist es von Vorteil etwas Platz frei zu lassen. Wir haben deshalb die Grösse auf 98% festgelegt.
LVM Volume Group für das RAID erstellt (pingu-vg).
LVM Logical Volumes:
Name | Grösse | Mountpunkt | Verwendung |
---|---|---|---|
pingu-lv-dom0 | 5GB | / | Xen Grundsystems root (dom0) |
pingu-lv-dom0-swap | 2GB | (swap) | Xen Grundsystem swap |
Als Dateisystem, für die root
Partition, haben wir ext4
gewählt.
Installation
"base" System mit ssh (ohne graphische Oberfläche) gewählt.
Hostname: pingu
Benutzer:
- root
- revamp
Nachinstallation
Pakete:
firmware-bnx2
Treiber für die internen Netzwerkkarten
Jetzt funktionieren diese.lm-sensors
Hardware Monitor/Temperaturanzeigesudo
[8] Authentifizierungsprogramm
Benutzer revamp zur Gruppe sudo hinzugefügt.# gpasswd -a revamp sudo
htop
,iotop
Prozess/IO-Monitor
First Boot
Bemerkung: Debian Jessie verwendet systemd ![9]
Die Einheit lvm2-activation-early schlägt beim booten fehl.
Unit lvm2-activation-early [Failed]
Durch Google Suche stellt sich heraus, das Problem ist bekannt. Es handelt sich um einen Bug in systemd/Debian (v208)[10]. Soll in systemd 215 behoben sein.
Grundkonfiguration
Netzwerk
Grundeinstellungen eingetragen.
/etc/network/interfaces:
[...] iface eth0 inet manual auto xenbr0 iface xenbr0 inet dhcp bridge_ports eth0 [...]
Vorläufig verwenden wir DHCP. Für Xen, Bridge eingetragen.
Achtung: Wenn weitere interfaces (z.B. eth1, eth2) eingetragen werden, ohne dass diese am Netzwerk angeschlossen sind, führt dies zu einer langen Verzögerung während des Bootvorgangs, oder beim Start von networking.service.
Grub
Anzeigen der Meldungen beim Boot.quiet
Kernel Parameter entfernt.
/etc/defaults/grub:
GRUB_CMDLINE_LINUX_DEFAULT=""
Kernel Parameter für den Xen Kernel eintragen. RAM und Anzahl CPU's festlegen für die dom0.
GRUB_CMDLINE_XEN="dom0_mem=1024M dom0_max_vcpus=1 dom0_vcpu_pin"
Xen-Server (Hypervisor) Einrichtung
Installation
Pakete installiert:
xen-linux-system
Xen Metapackagexen-tools
optionale (distributionsspezifische-->?) Tools zur automatischen PV Guest creation
Hauptkonfiguration
RAM und Anzahl CPU's festlegen für die dom0.[11]
Ballooning (dynamische Anpassung des RAM) ausschalten.
Bemerkung: Solange die dom0 vorallem/nur als Xen Hypervisor eingesetzt wird, kann das Ballooning deaktiviert werden.
Veraltet!
/etc/xen/xend-config.sxp:
(dom0-min-mem 1024) (enable-dom0-ballooning no) (dom0-cpus 1)
Neu: /etc/default/grub:
GRUB_CMDLINE_XEN="dom0_mem=1024M dom0_max_vcpus=1 dom0_vcpus_pin"
Xen als default Bootoption in grub festlegen.[12]
Bemerkung: Der Xen Hypervisor bootet mit einem eigenen Kernel.
# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
Umsetzung Teil 2: Virtuelle Maschinen
Bemerkung: Unter Xen werden virtuelle Maschinen auch als "paravirtualised guest", kurz "PV Guests" bezeichnet.[13]
LTSP Server
Partitionierung
Name | Grösse | Mountpunkt | Verwendung |
---|---|---|---|
xen-ltsp-root | 25GB | / | LTSP Server root |
xen-ltsp-home | 100GB | /home | LTSP Server home* |
xen-ltsp-swap | 5GB | (swap) | LTSP Server swap |
xen-ltsp-var | 5GB | /var | LTSP Server var |
*) Grosszügig, für 50 Benutzer gerechnet, wären das 2GB pro Benutzer. In der späteren LTSP Systemkonfiguration sollte das dann auch wirklich begrenzt werden (Stichwort: "Quotas").
Bemerkung: Um ein allfälliges Auffüllen der root
Partition durch logfiles zu verhindern macht es Sinn var
als separate Partition einzurichten. systemd
böte allenfalls Möglichkeiten dies zu handhaben --> ?.
Kreation
Damit die Partitionen, beim erstellen der virtuellen Maschine mittels xen-tools
, entsprechend erstellt werden, müssen diese in der Konfiguration eingetragen werden.
/etc/xen-tools/partitions.d/pingu-ltsp:
[root] size=20G type=ext4 mountpoint=/ options=sync,errors=remount-ro [swap] size=5G type=swap [home] size=100G type=ext4 mountpoint=/home options=nodev,nosuid [var] size=5G type=ext4 mountpoint=/var options=defaults
Virtuelle Maschine erstellen (mittels xen-tools).
# xen-create-image --hostname=xen-ltsp --memory=8gb --vcpus=4 \ --dhcp \ --lvm=pingu-vg \ --dist=jessie \ --apt_proxy=http://192.168.xx.xx:3142 \ --partitions=/etc/xen-tools/partitions.d/pingu-ltsp \ --pygrub
Netzwerk / Bridge
Netzwerk Interfaces (virtuell) in der Konfig eintragen.
/etc/xen/xen-ltsp.cfg:
# Networking # dhcp = 'dhcp' vif = [ 'mac=00:16:3E:E3:92:1C,bridge=xenbr0','mac=00:16:3E:E3:92:1D,bridge=xenbr1' ]
Domain Management
Domains werden unter Xen mit dem Befehl xl
gesteuert.
Bsp.: Die Domain pingu-ltsp starten (als root auszuführen).
# xl create /etc/xen/pingu-ltsp.cfg
Ohne Argumente gibt xl
eine Liste aller möglichen Unterbefehle aus.
Innerhalb der virtuellen Domain kann nun die Konfiguration normal weitergeführt werden, so wie wenn es sich um eine physische Maschine handeln würde.
Umsetzung Teil 3: LTSP Server Einrichtung
Referenz: https://wiki.debian.org/LTSP/Howto
Netzwerkkonfiguration
Interfaces
eth0 geht Richtung Clients, eth1 zum Router.
/etc/network/interfaces
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.xx.x netmask 255.255.255.0 network 192.168.xx.x broadcast 192.168.xx.255 auto eth1 iface eth1 inet dhcp
Installation des LTSP-Pakets
Zuerst müssen wir LXDE installieren, damit das LTSP-Paket uns nicht die ganze GNOME Umgebung holt.
- apt-get install lxde obmenu
- apt-get install ltsp-server-standalone
Dies scheitert unter Debian Jessie, nach einer Fehlermeldung über den nicht konfigurierten DHCP-Server.
DHCPD
/etc/dhcp/dhcpd.conf
include "/etc/ltsp/dhcpd.conf";
/etc/ltsp/dhcpd.conf
authoritative; subnet 192.168.xx.0 netmask 255.255.255.0 { range 192.168.xx.xx 192.168.xx.250; option domain-name "xen.ltsp"; option domain-name-servers 192.168.xx.1; option broadcast-address 192.168.xx.255; option routers 192.168.xx.x; next-server 192.168.xx.x; option subnet-mask 255.255.255.0; option root-path "/opt/ltsp/i386"; if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" { filename "/ltsp/i386/pxelinux.0"; } else { filename "/ltsp/i386/nbi.img"; } }
Wir binden den DHCP-Server an eth0:
/etc/default/isc-dhcp-server
INTERFACES="eth0"
Bitte aufpassen, dass wir nur einen DHCP-Server pro Subnet eingeschaltet haben, sonst passieren ganz interessante Sachen.
Beenden der LTSP Installation, Konfiguration von LTSP
# apt-get -f install
Sollte nun kooperieren und die Installation erfolgreich abschliessen. Nun können wir das LTSP-Image erstellen:
# ltsp-build-client
Nun werden die Client-Images erstellt. Hier sollte man nachschauen, ob die Pfade mit den Angaben in /etc/ltsp/dhcpd.conf übereinstimmen und ggf. anpassen.
Konfiguration des LTSP-Images
Zuerst hüpfen wir mal in das LTSP-changeroot, um noch ein paar Anpassungen für Drucker, Scanner und andere 'localdevices' vorzunehmen. Der parameter '-a' ist unbedingt nötig, damit ltsp-chroot weiss, in welches Verzeichnis (relativ zu /opt/ltsp) er wechseln soll.
# ltsp-chroot -a i386
/etc/lts.conf[14]
[default] LTSP_CONFIG=True LOCALDEV=True LOCAL_APPS=True SCANNER=True #lokale scanner LDM_DIRECTX=true #unverschlüsselte Verbindung für bessere Performance LOCALDEV_DENY_INTERNAL_DISKS=False [Printer] PRINTER_0_DEVICE = "/dev/usblp0" PRINTER_0_PORT = 9100 PRINTER_1_DEVICE = "/dev/lp0" PRINTER_1_PORT = 9101
Anmerkung zu lts.conf:
LDM_DIRECTX=true
deaktiviert die Verschlüsselung der X-Verbindung. Dies musste vorgenommen werden, damit die Performance unserer schwächeren Clients nicht zu fest beeinträchtigt wird.
LOCALDEV_DENY_INTERNAL_DISKS=False
ermöglicht die Anbindung von Festplatten in externen Gehäusen. Falls diese Option nicht gesetzt ist, werden diese von ltspfs ignoriert. USB-Sticks und USB-Festplatten werden nicht gleich behandelt.
NFS
LTSP stellt die Clientimages über NFS bereit. Zur Konfiguration von NFS müssen wir noch das LTSP-Verzeichnis freigeben. Wir passen jetzt die Konfiguration an und führen exportfs
aus, um die Konfiguration neu zu laden.
/etc/exports:
/opt/ltsp *(ro,no_root_squash,async,no_subtree_check)
# exportfs -ra
Referenzen
- ↑ LTSP Webseite: http://www.ltsp.org/
- ↑ Xen Webseite: http://www.xenproject.org/
- ↑ Siehe z.B.: http://de.wikipedia.org/wiki/RAID
- ↑ Siehe z.B.: http://de.wikipedia.org/wiki/Logical_Volume_Manager
- ↑ Workaround siehe z.B.: http://en.community.dell.com/techcenter/virtualization/f/4472/t/19525078
Gefunden über Google Suche "dell poweredge 2950 disable hardware raid". - ↑ Downloadverzeichnis: http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/jessie_di_beta_2/amd64/iso-cd/
- ↑ Siehe: https://www.debian.org/releases/lenny/arm/ch06s04.html.en
- ↑
- ↑ Siehe: http://www.freedesktop.org/wiki/Software/systemd/
- ↑ Siehe: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=751392
- ↑ Obwohl dies bereits durch Kernel Parameter angegeben wurde, muss dies hier nochmals eingetragen werden.
- ↑ Gemäss: https://wiki.debian.org/Xen#Prioritise_Booting_Xen_Over_Native
- ↑ Für eine detailliertere Beschreibung siehe: http://wiki.xenproject.org/wiki/Paravirtualization_(PV)
- ↑ Siehe manpage lts.conf