Ich wollte immer schon mal meinen Laptop oder andere PCs als Discless-Client an meinem Linux-Server verwenden. Ich hatte inzwischen auch schon einige Anleitungen ausprobiert, aber immer viel zu kompliziert gedacht. Unter Debian ist es eigentlich ziemlich simpel, einen Terminalserver aufzusetzen.:
~ # vi /etc/apt/sources.list
deb http://ftp2.de.debian.org/debian lenny contrib
#deb http://ftp.freenet.de/pub/ftp.debian.org/debian/ lenny main
deb http://ftp2.de.debian.org/debian lenny main
deb http://ftp2.de.debian.org/debian lenny non-free
deb http://security.debian.org lenny/updates contrib
deb http://security.debian.org lenny/updates main
deb http://security.debian.org lenny/updates non-free

~ # apt-get update
...
~ # apt-get install tftp bootp ltspfs ltspfsd ltsp-server-standalone ltsp-server pulseaudio joystick audiooss sdm icewm xfwm4 flwm lsb xfwm4-themes xdialog
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
...
~ # ltsp-build-client
HINWEIS: Für Security wurden Voreinstellungen für Distribution und Komponenten eingetragen:
http://security.debian.org/ lenny/updates main
I: Retrieving Release
...
~ # vi /etc/exports

...
/opt/ltsp/i386 *(ro,no_root_squash,async)
...

Kleiner Hack, weil die Installation hier nicht besonders homogen ist.:
~ # ls /var/lib/tftpboot
ltsp/
~ # ls -ld /opt/ltsp
lrwxrwxrwx 1 root root 22 2008-01-16 12:48 /opt/ltsp -> /var/lib/tftpboot/ltsp/
~ # vi /etc/inetd.conf

...
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
...

~ # ps fax | grep inet
root 12124 0.0 0.0 1872 428 ? Ss 2007 0:00 /usr/sbin/inetd
~ # kill -HUP 12124
~ # tftp localhost
tftp> get /i386/boot/nbi.img
Error code 1: File not found
tftp> get /ltsp/i386/boot/nbi.img
Received 5184357 bytes in 2.1 seconds
tftp> quit
~ # rm nbi.img
~ # vi /etc/dhcp3/dhcpd.conf


...
server-identifier server.dom;
ddns-update;
ddns-domainname "dom";
option domain-name "dom";
...
authoritative;
allow booting;
option subnet-mask 255.255.255.0;
option root-path "/var/lib/tftpboot/ltsp/i386";
if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
#filename "/i386/boot/pxelinux.0";
filename "/ltsp/i386/boot/pxelinux.0";
} else {
filename "/ltsp/i386/boot/nbi.img";
}
subnet 10.1.6.0 netmask 255.255.255.0 {
range 10.1.6.230 10.1.6.250;
option broadcast-address 10.1.6.255;
option routers 10.1.6.2;
option domain-name-servers 10.1.6.2;
option netbios-name-servers 10.1.6.2;
use-host-decl-names on;
allow bootp;
server-identifier 10.1.6.2;
server-name "10.1.6.2";
next-server 10.1.6.2;
option log-servers 10.1.6.2;
use-host-decl-names on;
get-lease-hostnames true;
}
subnet 10.31.16.0 netmask 255.255.255.0 {
range 10.31.16.230 10.31.16.250;
option broadcast-address 10.31.16.255;
...

~ # /etc/init.d/dhcp3-server restart
~ # ...

Das war der ‚Terminalserver‘!
Nun einen Network-Bootvorgang auf dem Terminalclient und siehe da wir bekommen eine Anmeldung. Der User muss einen Account auf dem Terminalserver haben und sich per ssh einloggen können.:

Terminalserver-Login

Um (später mal) den Client zu updaten, muss man dann mittel ‚chroot‘ in die die Umgebung wechseln:

~# chroot /var/lib/tftpboot/ltsp/i386
/# cd
~# apt-get update
Hole:1 http://security.debian.org lenny/updates Release.gpg [189B] Ign http://security.debian.org lenny/updates/main Translation-de
Hole:2 http://http.us.debian.org lenny Release.gpg [189B] Ign http://http.us.debian.org lenny/main Translation-de
OK http://security.debian.org lenny/updates Release
OK http://http.us.debian.org lenny Release
Ign http://security.debian.org lenny/updates/main Packages/DiffIndex
OK http://http.us.debian.org lenny/main Packages/DiffIndex
OK http://security.debian.org lenny/updates/main Packages
Es wurden 2B in 3s geholt (1B/s)
Paketlisten werden gelesen... Fertig
~# apt-get upgrade
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Reading state information... Fertig
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
~#

Kleines Eingeständnis am Rande:
Auf meinem Server musste ich erst noch kde installieren:
‚~# apt-get install kde
und außerdem habe ich da noch eine Wachhund namens ‚iptables‚ und der sieht ja vieles ein, aber das da udp-Pakete von src=0.0.0.0 an DST=255.255.255.255 PROTO=UDP SPT=68 auf Port DPT=67 vom interen Interface ankommen, – dass kann ja nur Spoofing sein!! ;-) Also mussten noch ein paar Regeln her (wobei ich die zweite Regel erst mal prophylaktisch hinter der ersten hinterher geworfen hatte, wahrscheinlich ist die unnötig)

iptables -I INPUT -i eth1 -p udp --dport 67 -j ACCEPT
iptables -I OUTPUT -o eth1 -p udp --sport 67 -j ACCEPT
iptables -I OUTPUT -o eth1 -p udp --sport 68 -j ACCEPT