Revamp LTSP: Doku zu Installation und Konfiguration

Aus revampedia

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/Temperaturanzeige

  • sudo[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 das diese am Netzwerk angeschlossen sind. Führt dies zu einem langen Delay während des Boot, 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 Metapackage
  • xen-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.

/etc/xen/xend-config.sxp:

(dom0-min-mem 1024)
(enable-dom0-ballooning no)
(dom0-cpus 1)

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

Übersicht Partitionierung LTSP-Server (virtualisiert)
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.50.14:3142 \
                    --partitions=/etc/xen-tools/partitions.d/pingu-ltsp \
                    --pygrub

Referenz: http://wiki.xenproject.org/wiki/Xen_Project_Beginners_Guide#Creating_a_Debian_PV_Paravirtualized_Guest

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.52.5
        netmask 255.255.255.0
        network 192.168.52.0
        broadcast 192.168.52.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.

  1. apt-get install lxde obmenu
  2. 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.52.0 netmask 255.255.255.0 {
    range 192.168.52.25 192.168.52.250;
    option domain-name "xen.ltsp";
    option domain-name-servers 192.168.50.1;
    option broadcast-address 192.168.52.255;
    option routers 192.168.52.5;
    next-server 192.168.52.5;
    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

[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.


WIP

Referenzen