Debian Netboot

aus C't-Server Wiki, der freien Wissensdatenbank

so ich mal wieder :)

ich werde hier im laufe der naechsten tage meine schritte dokumentieren...

das ganze funktioniert folgendermassen...

es gibt 2 moeglichkeiten netboot zu verwenden, einmal, um auf clientrechnern ein betriebssystem zu installieren, das werde ich an dieser stelle nicht erklaeren, wer sich dafuer interssiert sei dies hier empfohlen. ich habe es selber gestestet und es geht sogar ohne internetanschluss wenn man siche einen apache aufsetzt und den als mirror von hand eingibt oder eine preseed.conf benutzen, die dem kernel als append option mit uebergeben wird, dann macht es das alles vollautomatisch. ich werde hier diskless boot erklaeren, und zwar wie man clients, die keine festplatten (auch thin-clients genannt) haben ueber netzwerk bootet.

eine kleine motivation wozu der ganze aufwand.... mit hilfe von diskless boot kann man sehr viele clients mit einem betriebssystem versorgen. die clients haben so immer den neuesten stand was zbsp: sicherheitsrelevante sachen angeht. desweiteren haben alle auch immer das aktuellste betriebssystem wenn man es auf dem server tauscht. eine zentrale datenhaltung wird mit thin-clients auch realisiert uind zu guter letzt spart es kosten, da die clients ja keine festplatten haben muessen.

wir brauchen zuersteinmal eine PXE faehige netzwerkkarte, ohne die geht gar nichts! damit bekommt unser rechner beim booten (booten ueber LAN) von einem DHCP Server eine IP zugewiesen.

Inhaltsverzeichnis

dhcp server

dhcp server installieren mit

apt-get install dhcpd

und /etc/dhcpd.conf anpassen

authoritative;
allow bootp;
allow booting;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
ddns-updates off;

group {

    filename "/pxelinux.0";
    next-server 192.168.0.1;
    use-host-decl-names on;
    subnet 192.168.0.0 netmask 255.255.255.0 {
        option domain-name      "meine-domain.de";
        option broadcast-address  192.168.0.255;
        option default-ip-ttl           120;
        pool {
                range 192.168.0.10 192.168.0.30;
                allow unknown-clients;
        }
    }

    host tftpclient1 {
        hardware ethernet xx:xx:xx:xx:xx:xx;
        fixed-address 192.168.0.31; 
    }

    host tftpclient2 {
        hardware ethernet xx:xx:xx:xx:xx:xx;
        fixed-address 192.168.0.32; 
    }
}

authoritative; allow bootp; allow booting; ganz wichitge einstellungen, da dadurch das booten erlaubt wird

next-server ist der tftpserver, dieser stellt den bootloader bereit, in der datei pxelinux.cfg/default ist dieser bootloader. in dieser datei steht dann welcher kernel gebootet werden soll und wo das betriebssystem liegt. ich verwende einen nfs-server. dieses kann auch wiederum ein anderer host sein. auf diesem host ist in einem ordner unser betriebssystem und von dort holt sich der kernel alles noetige was er braucht. dazu spaeter mehr...

der pool ist da um allen unbekannten clients ips zu geben, falls man ueberhaupt unbekannte clients zulassen moechte. man kann auch die option host benutzen um einem festen host einen hostnamen und eine ipadresse anhand der mac-adresse zu geben, so das diese(r) client(s) alle immer dieselbe ip und hostnamen bekommen.

tftp server

tftp server installieren mit

apt-get install tftp-hpa

tftp ist ein tiny tfp server, er kennt nur anonyme benutzer und ist dafuer zustaendig, das unsere clients einen bootloader bekommen. im bootloader steht wo sich unser client sein betriebssystem herholen soll, im prinzip wie grub oder lilo. der tftp server stellt den ordner /tftpboot bereit, dort befinden sich unser bootloader pxelinux.0 und der der ordner mit der konfiguration /pxelinux.cfg/default ausserdem liegt hier der zu bootende kernel der geladen wird. der inhalt der dieser datei /pxelinux.cfg/default

default kernel_32
prompt 1
timeout 30
display msg.txt

label kernel_32
        kernel linux32bit_boot
        append ip=dhcp
        append auto rw root=/dev/nfs nfsroot=/tftpboot/nfsroot/32bit_rootfs/ nfsaddrs=kernel ip=255.255.255.255:autoconf


label kernel_64
        kernel linux64bit_boot
        append ip=dhcp
        append auto rw root=/dev/nfs nfsroot=/tftpboot/nfsroot/64bit_rootfs/ nfsaddrs=kernel ip=255.255.255.255:autoconf

default kernel_1 gibt den default kernel an der geladen werden soll die msg.txt liegt im /tftpodner sie ist ein guter test fuer den anfang um zu sehen ob alles funktioniert. einfach datei anlegen und irgendetwas was wie eine erfolgsmeldung klingt reinschreiben. die label beinhalten alle optionen wie das root verzeichnis unseres betriebssystem das wir booten wollen, also die nfs-freigabe.

nfs server

ist dafuer da, dem client sein root-verzeichnis (/) bereitzustellen, da wir ja nur thin-clients haben installieren

apt-get install nfs-common

hier weiss ich grad nicht, muss ich mal nachsachuen was man nochmal installieren muss

anpassen von /etc/exports

/tftpboot/nfsroot/32bit_rootfs         *(rw,sync,no_root_squash)
/tftpboot/nfsroot/64bit_rootfs         *(rw,sync,no_root_squash)

der knifflige teil

da wir ja thin clients haben und die natuerlich alle reibungslos laufen sollen, muss man noch einige sehr wichitge dinge beachten!!! wir brauchen scripte die uns auf unserem server ein dateisystem fuer swap anlegen. diese muss an der richtigen stelle im /etc/boot.d/ stehen ausserdem muessen wir unsere fstab so anpassen das unser root-verzeichnis (/) der nfs- freigabe entspricht

192.168.0.1:/tftpboot/nfsroot/32bit_rootfs        /       nfs     defaults        0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
proc                 /proc                proc       defaults              0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
sysfs                /sys                 sysfs      noauto                0 0
/dev/cdrecorder      /media/cdrecorder    subfs      fs=cdfss,ro,procuid,nosuid,nodev,exec,iocharset=utf8 0 0
/dev/fd0             /media/floppy        subfs      fs=floppyfss,procuid,nodev,nosuid,sync 0 0
/dev/loop1      none    swap    sw      0 0


wie man sieht wird der swap an ein loop device gemountet. die ramfilesystem-datei vom server wird an das loop device gebunden inm prinzip macht das script beim booten folgendes:

dd if=/dev/zero of=/var/swap bs=1k count=Xk 
mkswapfs /var/swap
losetup /dev/loop0 /var/swap
mount /dev/loop0 swap

man koennte auch zbsp die einzenen home-dirs der clients noch auslagern

autor(en)


moleman 12:46, 29. Aug 2006 (CEST)