Diskless-Workstations
www.rom-o-matic.net diskette, auf Festplatte oder eprom schnitzen im Webinterface
§
Diskless-Clients können einfach ausgeschaltet werden, brauchen nicht runterfahren, da das Dateisystem auf dem Server konsistent bleibt.
Anders als Citrix-Linux-Client oder X-Server läuft mit Diskless-Workstations die Software auf dem Client. VM-Ware kann auf Server und Client laufen.
Bootprom oder Diskette(Bootprom-Emulation) ist Netzwerkkartenspezifisch, gepackte und ungepackte, 16KB
Vorteile: zentrale Administration, Update von Programmen, diskless-stationen
Viel Arbeitsspeicher auf der WS, leistungsfähiger Switch und Server werden benötigt.
Programm(Paket) etherboot zum Bauen des Bootprom, bootrom-code
suche nach DHCP/BOOTP-Server rpm dhcp-server
Kernel vom Server holen und ausführen dhcp-server teilt den Server mit
tftp mittels Triviales-FTP
Root-FS über NFS mounten dhcp-server teilt den Server mit, 1Verzeichnis pro WS-Art
etherboot kann auch dos-Treiber für Netzwerkkarten einbinden.
Diskette für Diskless-Workstations schnitzen
etherboot installieren
/usr/share/doc/packages/etherboot/html/userman.html usermanual anschauen
/usr/lib/etherboot/zimg/* fertige gepackte Diskettensätze, 16 KB
/usr/lib/etherboot/img/* fertige ungepackte Diskettensätze, 32 KB
/usr/lib/etherboot/dsk für Festplatten, gibt auch fertige Proms, usw.
fdformat /dev/fd0h1440 Floppy formatieren und testen
cat boot1a.bin rtl8139.zimg > /dev/fd0 Vorbereitung für Floppy, möglicherweise nicht nötig(SuSE)
dd if=/usr/lib/etherboot/dsk/rtl8139.dsk of=/dev/fd0 Übertragung der Datei auf Diskette
für vmware braaucht man eine größere Datei.
dd if=/usr/lib/etherboot/dsk/rtl8139.dsk of=/tmp/floppy.img
dd if=/dev/zero count=1000 >> /tmp/floppy.img
Server für diskless
vi /etc/dhcpd.conf
ddns-update-style none;
option domain-name "local"; NIS
option domain-name-servers 192.168.4.40; DNS
subnet 192.168.6.128 netmask 255.255.255.192 { Maske
option broadcast-address 192.168.6.191;
option routers 192.168.6.129;
#range 192.168.6.131 192.168.6.190; Bereich
# server-name "IP-Adr./fqdn-name"; Angabe für folgendes boot-file
filename "/boot/bzImage.diskless"; vom DHCP-Server in /tftpdboot
host client138 {
hardware ethernet 00:c1:22:4d:ad:02; mit ifconfig auslesen
fixed-address 192.168.6.138; eigene IP.Adr.
server-name "192.168.6.130"; Programme
}
host client139 {
hardware ethernet 00:c1:22:4d:ad:09; mit ifconfig auslesen
fixed-address 192.168.6.139; eigene IP.Adr.
server-name "192.168.6.130"
filename "/tftpboot/otherImage.diskless"; 2.Image(z.B. andere Netzwerkkarte)
}
}
vi /etc/sysconfig/dhcpd dhcpd_interface="eth0"
touch /etc/dhcpd.leases erstellen
vi /etc/exports /tftpboot/"server-IP" clientIP(rw,no_root_squash)
/usr/sbin/in.tftpd -s /tftpboot Startverzeichnis angeben
dhcpd eth0 start dhcp-server-deamon starten , restarten nach jeder Änderung
/etc/init.d/nfsserver start nfsserver starten
diskless-Client-Server-Boot-Ablauf
DHCP-, TFTP-, NFS-Server solltender Einfachheit halber auf der gleichen Maschine sein.
client dd if=/lib/etherboot.dsk of=/dev/fd0 bootmedium Diskette
client BootROM-Code starten IP-Adresse, TFTP-Server, KernelDateiname über DHCP holen
DHCP-Server /etc/dhcpd.conf host clientname {
fixed-address 15.0.0.21;
hardware ethernet MAC-Adr.;
server-name "IP-Adr.";
filename "/tftfboot/Kernelname";
}
client tftp://TFTP-Server:/pfad/Kernelname Kernel laden
TFTP-Server xinetd startet Dienste im Bedarfsfall
/etc/xinetd.d/tftp Diable=no, Achtung ChangeRoot-Umgebung
client Kernel starten Name, IP, NetzKarte etc. verschwindet, wird überschrieben
NetzKarten-NIC-Support
DHCP-Support
NFS-Support
RootFS-over-NFS
DHCP-Server /etc/dhcpd.conf Infos werden übertragen, siehe oben:Server für diskless
rootpath=%S Wenn von /tftpboot/hostname-IP-Adr. geändert werden soll,
muß in dhcpd.conf root-path "server-IP:/tftpboot/Pfad" eingetragen werden.
use-host-decl-name on für gemeinsames Verzeichnis verschiedener clients
client Kernel mountet RootFS über NFS
rootserver:rootpath -> / rootserver=server-name, rootpath=/tftpboot/hostname-IP-Adr.
NFS-Server /etc/expoorts tftpboot für client exportieren
client rootdateisystem vom NFS-Server laden
NFS-Server /usr/sbin/rpc.mountd -d call im debug-Modus, mit syslog in /var/log/messages
client /etc/fstab /tftpboot/-Verzeichnisse mounten
NIS /tftpboot/ /bzImage.diskless
/tftpboot/home muß von allen clients gemountet werden
/tftpboot/home/peter
/tftpboot/home/gabi
/tftpboot/diskless.stage1 (minimal < 10 MB)
/tftpboot/client138 bootVerzeichnisse mounten, minimalGröße
/tftpboot/client138/etc
/tftpboot/client138/dev
/tftpboot/client138/bin
/tftpboot/client138/lib
/tftpboot/client138/sbin
/tftpboot/client138/usr
/tftpboot/client138/tmp
/tftpboot/client138/var
/tftpboot/diskless.stage2 nachträglich mounten, vollständiger Dateibaum
/tftpboot/diskless.stage2/usr 1 für alle clients, Große Verzeichnisse
/tftpboot/diskless.stage2/opt
/tftpboot/diskless.stage2/bin
/tftpboot/diskless.stage2/sbin
/tftpboot/diskless.stage2/boot
/tftpboot/diskless.stage2
/tftpboot/root
oder /tftpboot
/tftpboot/alle/ hier bin, home, opt, root, sbin, usr, lib, boot(booten) volles System
/tftpboot/client1/ <10MB bin, dev, etc, home, opt, root, sbin, usr, lib, media, mnt, tmp, proc, var
/tftpboot/client2/ <10MB bin, dev, etc, home, opt, root, sbin, usr, lib, media, mnt, tmp, proc, var
Das Vor- und Nach-mounten geschieht in den zuerst über DHCP , dann geht's weiter in /etc/init.tab , /etc/initboot, init.d, terminal,
rc3: Tastatur+Portmapper+nfs, hier beim nfs-script ein Verweis in die
fstab, dort IP-Adr:/tftpboot/diskless.stage2/usr /usr nfs auto,ro,no_root_squash 0 0
MiniClientSystem erstellen
/etc/inittab + /sbin/init Danach Fehlermeldung für Fehlermeldung eliminieren, Dateien und Verzeichnisse hinzufügen bis alles rund läuft. Debug-Modus hilft.
ldd /sbin/init
ldd /bin/bash nötige libraries für Programme finden
tftpd
Einträge in die /etc/exports auf nfs-server /tftpboot/ClientIP (rw,no_root_squash, etc.) Client greift als root zu
mkdir /tftpboot
mkdir /tftpboot/boot ist Startverzeichnis des tftpd, hinein kommt bzImage.diskless
mkdir /tftpboot/"IP_Adr.-des-Clients1" je Client 1 Verzeichnis, wird root-Verzeichnis des Client
mkdir /tftpboot/"IP_Adr.-des-Clients1"/bin Verzeichnis anlegen und füllen
mkdir /tftpboot/"IP_Adr.-des-Clients1"/etc und so weiter
vi /tftpboot/"IP_Adr.-des-Clients1"/etc/fstab anpassen
mkdir /tftpboot/"IP_Adr.-des-Clients2" ???? als Hardlink zu /tftpdboot/"IP_Adr.-des-Clients1" alles gleich
mkdir /tftpboot/"IP_Adr.-des-Clients3"
mkdir /tftpboot/"IP_Adr.-des-Clients3"/etc als Hardlink zu /tftpdboot/"IPClients3"/etc. alles gleich
mkdir /tftpboot/alle um alle gleich zu booten
inetd startet und stoppt andere Dienste wie tftp, pop3, drucker, vnc, time, echo usw.
/etc/inetd.conf Konfigurationsdatei des tftpd oder neu /etc/xinetd.conf -> /etc/xinetd.d/tftp
vi /etc/xinetd.d/tftp disable=no
/etc/init.d/inetd -restart bei Änderung jeder Konfiguration oder neu: /etc/init.d/xinetd restart
/usr/sbin/in.tftpd Internet-Deamon
/usr/sbin/in.tftpd -s /tftpboot deamon starten mit Startverzeichnis
/usr/sbin/dhcpd eth0 start dhcp-server starten
/etc/init.d/nfsserver start nfs-server starten
chmod xxx /tftpboot/clientIP Rechte setzen
kernel -> macht sowas wie -> mount -t nfs serverIP:/tftpboot/clientIP
diskless-kernel schnitzen
Konfiguration make menuconfig
Netzwerkkarte
DHCP
BOOTP
NFS in filesystems, network-file-systems
Root file system on NFS
make bzImage -> arch/i386/boot/bzImage
Paket mknbi installieren, etherboot braucht das
mkelf-linux --ip=dhcp –output=/tftproot/boot/bzImage.diskless Pfad/bzImage
patcht den Kernel nach bzImage.diskless, Pfad auch individuell
greife zu auf /tftpboot/%s