Die Anleitung(1) zur Konfiguration einer Thin-Client Umgebung mittels X2Go ist unnötig komplex und kann mit Hilfe der richtigen Werkzeuge drastisch vereinfacht werden.
Hier sind die notwendigen Schritte erläutert um Void-Linux als Server zu nutzen. Dieser stellt alles Notwendige bereit um Clients über das Netzwerk zu booten und ihn dann so zu nutzen, als wäre der Benutzer am Server lokal eingeloggt:
- Ein DHCP-Dienst weist dem Client eine IP Adresse zu und teilt ihm mit wo die Inhalte für den weiteren Bootvorgang zu finden sind.
- Ein TFTP-Dienst stellt dem Client einen Bootloader zur Verfügung, welcher im weiteren Schritt Kernel und Init-Umgebung laden kann.
- Ein HTTP-Dienst stellt dem Client letztendlich Kernel, Init-Umgebung und ein vollständiges Betriebssystem-Abbild zur Verfügung.
- Zu der am Server installierten grafischen Oberfläche XFCE verbindet sich der Client am Ende des Startvorgangs via X2Go-Client.
In diesem Beispiel wird in einer bereits vorbereiteten Void-Linux Installation(2) die Netzwerk-Schnittstelle eth1 als 192.168.0.3/24
konfiguriert.
Am Server sollten dafür mindestens 10 GB Festplattenkapazität zur Verfügung stehen und Clients sollten über mindestens 1 GB RAM verfügen.
Server für X2Go-Verbindungen vorbereiten
Pakete installieren und X2Go-Server vorbereiten
xbps-install -Suy dhcp syslinux tftpd-hpa darkhttpd xfce4 x2goserver curl dracut-network binutils squashfs-tools ln -s /etc/sv/x2gocleansessions /var/service/ x2godbadmin --createdb # X2Go-Verbindung zu Desktopumgebung von Void-Clients ermöglichen sed -i 's#/etc/redhat-release ]#/etc/redhat-release ] || [ -d /usr/share/void-artwork ]#g' /etc/x2go/Xsession
XFCE ohne Compositor starten
Mit aktivem Compositor ist XFCE in X2Go quasi unbrauchbar(3). Er kann aber einfach deaktiviert werden:
cat >> /usr/local/bin/xfce << EOF #!/bin/sh /usr/bin/xfconf-query -c xfwm4 -p /general/use_compositing -s false /usr/bin/xfce4-session EOF chmod +x /usr/local/bin/xfce
Netzwerk-Schnittstelle konfigurieren
cat >> /etc/rc.local << EOF ip addr add 192.168.0.3/24 brd 192.168.0.255 dev eth1 ip link set eth1 up alias "'Network for Thin-Clients'" EOF /etc/rc.local
Dienste einrichten
Die Dienste stellen die eingangs genannten Boot-Schritte zur Verfügung: DHCP > TFTP > HTTP.
DHCP
cat >> /etc/dhcpd.conf << EOF authoritative; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.20 192.168.0.250; option domain-name "local"; option domain-name-servers 192.168.0.3; option broadcast-address 192.168.0.255; option routers 192.168.0.3; option subnet-mask 255.255.255.0; option root-path "/"; filename "lpxelinux.0"; } EOF cp -a /etc/sv/dhcpd4 /etc/sv/dhcpd4-eth1 sed -i 's#dhcpd4.pid}$#dhcpd4.pid} eth1#g' /etc/sv/dhcpd4-eth1/run ln -s /etc/sv/dhcpd4-eth1 /var/service/dhcpd4-eth1
TFTP
# PXE Netzwerk-Bootloader anbieten cp -a /usr/lib/syslinux/ldlinux.c32 /usr/lib/syslinux/lpxelinux.0 /var/lib/tftp/ mkdir /var/lib/tftp/pxelinux.cfg cat >> /var/lib/tftp/pxelinux.cfg/default << EOF DEFAULT x2go-tce LABEL x2go-tce TIMEOUT 50 MENU LABEL X2Go-TCE KERNEL http://192.168.0.3/vmlinuz INITRD http://192.168.0.3/initrd.img APPEND root=live:http://192.168.0.3/void.squashfs ro rd.live.image EOF ln -s /etc/sv/tftpd-hpa /var/service/
HTTP
# Netzwerk-Bootfähiges System bereit stellen cp /boot/vmlinuz-`uname -r` /srv/www/darkhttpd/vmlinuz dracut --omit "bash drm btrfs crypt dmraid lvm kernel-modules kernel-modules-extra mdraid nvdimm qemu cifs lunmask nfs resume terminfo usrmount virtfs" --add "livenet" /srv/www/darkhttpd/initrd.img chmod +r /srv/www/darkhttpd/initrd.img ln -s /etc/sv/darkhttpd /var/service/
An dieser Stelle sind alle Dienste des Servers vollständig konfiguriert. Es fehlt lediglich das Betriebssystem-Abbild welches der HTTP-Dienst dem Client bereit stellt.
Das Erstellen des Abbilds ist in folgendem Abschnitt erläutert.
Betriebssystem-Abbild für den Thin-Client vorkonfigurieren
Über https://voidlinux.org/download/ kann das tar-Archiv eines Void-Grundsystems gefunden werden.
Grundsystem installieren
URL=https://alpha.de.repo.voidlinux.org/live/current/void-x86_64-musl-ROOTFS-20210930.tar.xz cd ~ curl -o rootfs.tar.xz "$URL" mkdir ~/thin && tar xvf rootfs.tar.xz -C ~/thin mount --rbind /sys ~/thin/sys && mount --make-rslave ~/thin/sys mount --rbind /dev ~/thin/dev && mount --make-rslave ~/thin/dev mount --rbind /proc ~/thin/proc && mount --make-rslave ~/thin/proc cp /etc/resolv.conf ~/thin/etc/ echo "client" > ~/thin/etc/hostname chroot ~/thin/ /bin/xbps-install -Suy xbps chroot ~/thin/ /bin/xbps-install -uy chroot ~/thin/ /bin/xbps-install -y base-system xorg-video-drivers xorg-fonts xorg-input-drivers xorg-minimal x2goclient chroot ~/thin/ /bin/xbps-remove -y base-voidstrap rm -Rf ~/thin/var/cache/xbps chroot ~/thin/ /bin/passwd
X2Go-Verbindung definieren
chroot ~/thin/ /bin/mkdir /root/.x2goclient/ cat >> ~/thin/root/.x2goclient/sessions << EOF [server] clipboard=none command=xfce fullscreen=true host=192.168.0.3 name=srv icon=/usr/share/void-artwork/void-logo.svg user= EOF
Schritte des Systemstarts automatisieren
# root automatisch einloggen sed -i 's#GETTY_ARGS=.*#GETTY_ARGS="--autologin root --noclear"#g' ~/thin/etc/sv/agetty-tty1/conf # X auf tty0 automatisch starten echo '[ `fgconsole` -eq 1 ] && startx' > ~/thin/root/.profile # X2Go-Client automatisch starten echo 'exec x2goclient --thinclient --session=srv --add-to-known-hosts --no-menu --no-session-edit --branding=/dev/null' > ~/thin/root/.xinitrc # Herunterfahren per Ausschaltknopf ermöglichen chroot ~/thin/ /bin/ln -s /etc/sv/acpid /etc/runit/runsvdir/default/acpid
Betriebssystem-Abbild als SquashFS verpacken
Spezielle Dateisysteme aus chroot aushängen
umount --recursive ~/thin/sys ~/thin/dev ~/thin/proc
Betriebsystem-Abbild generieren und in HTTP-Server erstellen
mksquashfs ~/thin /srv/www/darkhttpd/void.squashfs
An dieser Stelle sollte ein Client über das Netzwerk via PXE booten können.
Im letzten Abschnitt sei noch erläutert, wie man prüft ob jeder der Dienste die notwendigen Dateien korrekt ausliefert.
Konfiguration überprüfen
Antowort des DHCP-Dienstes prüfen
dhcpcd -T eth1
Verfügbarkeit der Dateien des TFTP-Dienstes prüfen
cd `mktemp -d` tftp 192.168.0.3 -c get pxelinux.cfg/default tftp 192.168.0.3 -c get vmlinuz tftp 192.168.0.3 -c get initrd.img stat default vmlinuz initrd.img
Verfügbarkeit der Dateien des HTTP-Dienstes prüfen
curl http://192.168.0.3/void.squashfs -o /dev/null
1 X2Go-ThinClientEditon-Live Installation Guide