Denne HOWTO vil hjælpe dig med sætte diskfrie arbejdsstationer op, baseret på Gentoo Linux distributionen. Vi prøver at lave det så brugervenligt som muligt, og sørger for Linux-newbien, fordi alle var én på et specifikt tidspunkt :) Da en erfaren bruger sagtens kan samle de mange HOWTOer, som er tilgængelige omkring diskfrie noder og netværk sammenlagt, håber vi at denne vejledning kan lette installationen for alle interesserede brugere, nørd eller ej.
En diskfri maskine er en PC, uden nogen af de normale opstartsenheder, som harddiske, floppydrev eller CDROM-drev. Den diskfrie node starter via et netværk og skal bruge en server, som kan levere det med lagerplads, som en lokal harddisk ville gøre. Fra nu af, kalder vi serveren master, imens vi kalder den diskfrie maskine for slave (det ligger i navnet :). Slave-noden kræver en netværksadapter, som understøtter PXE-opstarti eller Etherboot; tjek Etherboot.org for understøttede lister. De fleste kort understøtter PXE og mange indebygget adaptere på bundkorte vil også virke.
Du bør have Gentoo installeret på din master-node, og nok plads på master til at gemme filsystemer til slave-noderne. Vær også sikker på at du har en grænseflade til Internet separeret fra din lokale/interne forbindelse (LAN).
2. Opsætning af master og slave
Bemærk: Hvis du vil lave en cluster af dine noder til en openMosix-cluster, vær sikker på at du bruger den patchede kerne til openMosix. Den kan findes i portage under sys-kernel/openmosix-sources. Du burde læse vores openMosix HOWTO for at lære om, hvordan du kompilerer din kerne til openMosix. |
Kernen er det software, som sidder imellem dit hardware og alt andet software, som du har hentet på din maskine, er essensen af et kerne baseret operativsystem. Når din computer er startet, vil BIOS udføre instruktioner, som er fundet på et reserveret opstartsplads på din harddisk. Disse instruktioner er typisk en boot-loader, som henter din kerne. Efter at din kerne er blevet hentet, er alle processer håndteret af kernen.
Flere informationer om kerner og kerneopsætning kan du finde ved at kigge på kernel HOWTO (engelsk, dansk version på vej).
Masterens kerne kan være så stor og skræddersyet, som du ville ønske det, men der er få krævede kerne-valgmuligheder, som du skal vælge. Gå ind i din kerne-opsætningsmenu ved at taste:
Kode oversigt 2.1: Redigering af masters kerneopsætning |
# cd /usr/src/linux # make menuconfig |
Du burde få et grå og blåt grafisk grænseflade (GUI), som leverer et sikkert alternativ til manuelt redigering af /usr/src/linux/.config filen. Hvis din kerne er funktionsdygtig, så er det måske en god idé at gemme den nuværende opsætningsfil ved at afslutte GUIen og taste:
Kode oversigt 2.2: Backup af masters kerneopsætning |
# cp .config .config_working
|
Gå ind i følgende under-menuer og være sikker på at de viste ting er afkrydset som 'built-in' (og IKKE som moduler). Indstillingerne, som er vist forneden er taget fra 2.6.10 kerneversionen. Hvis du bruger en anden version, så kan teksten eller opstillingen være anderledes. Vær sikker på at du vælger mindst dem vist forneden.
Kode oversigt 2.3: masters kerneindstillinger |
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Device Drivers --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[ ] Network packet filtering (replaces ipchains)
File systems --->
Network File Systems --->
<*> NFS server support
[*] Provide NFSv3 server support
Hvis du vil have adgang til Internet igennem din masters node og/eller
har en sikker firewall, vær sikker på at tilføje understøttelse til
iptables
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration --->
<*> Connection tracking (required for masq/NAT)
<*> IP tables support (required for filtering/masq/NAT)
|
Hvis du ønsker at bruge pakke-filter (packet filtering), kan du tilføje resten af modulerne senere. Vær sikker på at læse Gentoo sikkerhedshåndbog, kapitel omkring Firewall (engelsk) for at sætte dette ordentligt op.
Bemærk: Disse kerneopsætningsindstillinger skulle kun blive tilføjet dine systemspecifikke opsætningsindstillinger og er ikke ment til at erstarte din egen kernes indstillinger fuldstændigt. |
Efter at du har genindstillet masters kerne, vil du få brug for at genbygge den:
Kode oversigt 2.4: Genkompilering af masters kerne og moduler |
# make && make modules_install (Vær sikker på at /boot er mountet, før du kopierer til den) # cp arch/i386/boot/bzImage /boot/bzImage-master # cp System.map /boot/System.map-master |
Tilføj så et punkt for den nye kerne i lilo.conf eller grub.conf, afhængigt af hvilken boot-loader du bruger og lav den nye kerne, valgt som standard. Nu da den nye bzImage er blevet kopieret til dit boot-bibliotek, er alt hvad du skal gøre er, at genstarte systemet for at hente disse nye indstillinger.
Det er anbefalet, at du kompilerer slaves kerne uden nogen moduler, idet at hente og indstille dem via en fjern-kontroleret opstart er svært og en unødvendig process. I tilføjelse af dette, burde slaves kerne være så lille og kompakt som muligt, for at kunne opstarte effektivt fra netværket. Vi skal til at kompilere slaves kerne i det samme sted, som master var opsat.
For at undgå misforståelser og spild af tid, er det sikkert en god idé at lave en backup af masters opsætningsfil ved at taste:
Kode oversigt 2.5: Backup af masters kerneopsætning |
# cp /usr/src/linux/.config /usr/src/linux/.config_master
|
Nu skal vi til at opsætte slaves kerne på den samme måde, som vi opsatte masters kerne. Hvis du vil starte med en ren opsætningsfil, kan du altid genskabe standard /usr/src/linux/.config-filen ved at taste:
Kode oversigt 2.6: Genskabelse af en ren kerneopsætning |
# cd /usr/src/linux # cp .config_master .config |
Gå nu ind i opsætningsGUIen ved at taste:
Kode oversigt 2.7: Redigering af slaves kerneopsætning |
# cd /usr/src/linux # make menuconfig |
Du vil nok være sikker på at du har valgt de følgende indstillinger som indbygget og IKKE som kerne-moduler:
Kode oversigt 2.8: slaves kerneindstillinger |
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Device Drivers --->
[*] Networking support
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support (NEW)
File systems --->
Network File Systems --->
<*> file system support
[*] Provide NFSv3 client support
[*] Root file system on NFS
|
Bemærk: Et alternativ til en DHCP-server er at opsætte en BOOTP-server. |
Vigtigt: Det er vigtigt at du tilføjer dit netværksadapter ind i kernen (og ikke som et modul) på noderne. Brug af moduler er dog generelt ikke et problem for diskfrie noder. |
Nu mangler slaves kerne at blive kompileret. Du skal være omhyggelig her, idet du ikke ønsker at ødelægge modulerne (hvis nogen) som du har bygget til master:
Bemærk: Hvis du bruger forskellige arkitekturer, bør du nok gemme hver opsætning til .config_arch. Gør det samme med billedfiler: gem dem i /diskless som bzImage_arch. |
Kode oversigt 2.9: Kompilering af slaves kerne |
# cd /usr/src/linux # make |
Lav nu et bibliotek på master, som du vil bruge til at indeholde slaves filer og krævede systemfiler. Vi bruger /diskless, men du kan vælge den placering, som du ønsker. Kopiér nu slaves bzImage ind i /diskless biblioteket:
Bemærk: Hvis du bruger forskellige arkitekturer, bør du gemme hver opsætning som .config_arch. Gør det samme med billed-filerne: gem dem i /diskless som bzImage_arch. |
Kode oversigt 2.10: Kopiering af slaves kerne |
# mkdir /diskless # cp /usr/src/linux/arch/i386/boot/bzImage /diskless |
Opsætning af en slaves indledende filsystem
Masters og slaves filsystemer kan blive fin-indstillet og ændret en del. Lige nu er vi kun interesseret i at få lavet et indledende filsystem med passende opsætningsfiler og mount-punkter. Først skal vi lave et bibliotek inde i /diskless til den første slave. Enhver slave kræver dens eget overordnede filsystem, fordi at dele specifikke systemfiler, kan skabe problemer med rettigheder og at det hele går ned. Du kan kalde de biblioteker alt hvad du ønsker, men vi foreslår at bruge slavernes IP-adresser, idet de er unikke og ikke misledende. Den statiske IP på vores første slave vil være, f.eks. 192.168.1.21:
Kode oversigt 2.11: Oprettelse af et fjernstyret rodbibliotek |
# mkdir /diskless/192.168.1.21
|
Forskellige opsætningsfiler i /etc skal modificeres for at virke på slaven. Kopiér masters /etc-bibliotek ind i din nye slaves rod ved at taste:
Kode oversigt 2.12: Oprettelse af /etc til slaves filsystem |
# cp -r /etc /diskless/192.168.1.21/etc
|
Stadigvæk er filsystemet ikke klart, fordi at den kræver flere mount-punkter og biblioteker. For at oprette dem, tast:
Kode oversigt 2.13: Oprettelse af mount-punkter og biblioteker til slaves filsystem |
# mkdir /diskless/192.168.1.21/home # mkdir /diskless/192.168.1.21/dev # mkdir /diskless/192.168.1.21/proc # mkdir /diskless/192.168.1.21/tmp # mkdir /diskless/192.168.1.21/mnt # chmod a+w /diskless/192.168.1.21/tmp # mkdir /diskless/192.168.1.21/mnt/.initd # mkdir /diskless/192.168.1.21/root # mkdir /diskless/192.168.1.21/var # mkdir /diskless/192.168.1.21/var/empty # mkdir /diskless/192.168.1.21/var/lock # mkdir /diskless/192.168.1.21/var/log # mkdir /diskless/192.168.1.21/var/run # mkdir /diskless/192.168.1.21/var/spool # mkdir /diskless/192.168.1.21/usr # mkdir /diskless/192.168.1.21/opt (Kun for openMosix) # mkdir /diskless/192.168.1.21/mfs |
De fleste af disse "stumper" skulle være forståeligt for dig; Stumper som /dev eller /proc vil være befolket, når slaven starter, de andre vil blive mountet senere. Du skulle også ændre /diskless/192.168.1.21/etc/hostname-filen til at vise værtnavnet til slave. Binære filer, underprogrammer (libs) og andre filer vil blive befolket senere i denne HOWTO lige før du vil prøve at starte slave.
Selvom /dev bliver udfyldt af udev seneres, så bliver du stadig nødt til at lave console indgangen. Hvis du ikke gør dette, så kan det resultere i en "unable to open initial console" fejl.
Kode oversigt 2.14: At lave en konsol indgang til /dev |
# mknod /diskless/192.168.1.21/dev/console c 5 1
|
DHCP står for 'Dynamic Host Configuration Protocol'. DHCP-serveren er den første computer, som slaverne kommunikerer med, når de starter via PXE. Den primære hensigt af DHCP-serveren er at tildele IP-adresser. DHCP-serveren kan tildele IP-adresser, baseret på værtens MAC-adresse. Når en slave har en IP-adresse, vil DHCP-serveren fortælle slaven, hvor den skal få fat i det indledende filsystem og kerne.
Der er flere forskellige ting, som du burde vær sikker på at virker, før du begynder. Tjek først din netværksforbindelse:
Kode oversigt 3.1: Tjek af netværksindstillinger |
# ifconfig eth0 enable multicast # ifconfig -a |
Du burde også være sikker på at have en eth0-enhed kørende. Den burde se ud som dette her:
Kode oversigt 3.2: En passende eth0-enhed, som virker |
eth0 Link encap:Ethernet HWaddr 00:E0:83:16:2F:D6
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:26460491 errors:0 dropped:0 overruns:2 frame:0
TX packets:32903198 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:100
RX bytes:2483502568 (2368.4 Mb) TX bytes:1411984950 (1346.5 Mb)
Interrupt:18 Base address:0x1800
|
Det er vigtigt, at den siger MULTICAST, og hvis den ikke gør dette, så bliver du nødt til at gen-kompilere din kerne til at inkludere multicast-understøttelse.
Hvis dit netværk ikke allerede har en DHCP-server installeret, så vil du få brug for at installere én:
Kode oversigt 3.3: Installation af dhcp-server |
# emerge dhcp
|
Hvis dit netværk allerede har en DHCP-server installeret, så skal du redigere opsætningsfilen for at få PXE-opstart til at virke korrekt.
Der er kun én opsætningsfil, som du skal redigere før du starter DHCP-serveren: /etc/dhcp/dhcpd.conf. Kopiér og redigér den leverede smagsprøve-fil:
Kode oversigt 3.4: Redigering af dhcp-serverens opsætningsfil |
# cp /etc/dhcp/dhcpd.conf.sample /etc/dhcp/dhcpd.conf # nano -w /etc/dhcp/dhcpd.conf |
Det generelle layout af filen er indstillet med hensigt og ser ud som følgende:
Kode oversigt 3.5: Smagsprøve af dhcpd.conf layout |
# globale muligheder her ddns-update-style none; shared-network LOCAL-NET { # delte netværksmuligheder her subnet 192.168.1.0 netmask 255.255.255.0 { # undernetværksmuligheder her host slave{ # muligheder specifikt for vært her } group { # muligheder specifikt for gruppe her } } } |
shared-network-blokken er valgfri og skulle blive brugt til IPer, som du ønsker at være tildelt, for at tilhøre de samme netværkssteder. Mindst én af subnet skal være erklæret og den valgfrie group-blok tillader dig at gruppere opsætninger imellem punkter. Et godt eksempel på dhcpd.conf ser ud som følgende:
Kode oversigt 3.6: Smagsprøve af dhcpd.conf |
# DHCP configuration file for DHCP ISC 3.0
ddns-update-style none;
# Definition af PXE-specifikke indstillinger
# Code 1: Multicast IP-adresse af boot-filserveren
# Code 2: UDP-port, som en klient burde overvåge til MTFTP-responser
# Code 3: UDP-port, som MTFTP-servere bruger til at lytte for MTFTP-requests
# Code 4: Sekunder, som en klient skal lytte til en aktivitet, før den prøver
# at starte en ny MTFTP-overførsel
# Code 5: Sekunder, som en klient skal lytte til, før den prøver at genstarte
# en MTFTP-overførsel
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;
subnet 192.168.1.0 netmask 255.255.255.0 {
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-class-identifier "PXEClient";
vendor-option-space PXE;
# Mindst én af de salg-specifikke PXE-indstillinger skal være indstillet
# for at klients opstartsROM kan forstå at vi har en PXE-understøttet
# server. Vi kan indstille MCAST IP-adressen til 0.0.0.0 for at fortælle
# opstartsROM at vi ikke kan levere multicast-TFTP (adressen 0.0.0.0 betyder
# ingen adresse).
option PXE.mtftp-ip 0.0.0.0;
# Dette er navnet på filen, som opstartsROM burde hente.
filename "pxelinux.0";
# Dette er navnet på den server, som vi skal få det fra.
# Brug masters IP
next-server 192.168.1.1;
}
# Hvis du bruger etherboot med en ikke-specifik billedfil
class "etherboot" {
if substring (option vendor-class-identifier, 0, 9) = "Etherboot" {
filename "/diskless/vmlinuz";
}
}
pool {
max-lease-time 86400;
default-lease-time 86400;
# Dette forhinder at ulistede maskiner kan få en IP
deny unknown clients;
}
host slave21 {
# Brug slaves MAC-adresse
hardware ethernet 00:40:63:C2:CA:C9;
# Giv slave en statisk IP
fixed-address 192.168.1.21;
server-name "master";
# Brug din gateways IP, hvis krævet
option routers 192.168.1.1;
# Brug din DNSs IP, hvis krævet
option domain-name-servers 192.168.1.1;
option domain-name "mydomain.com";
# Brut slaves værtsnavn
option host-name "slave21";
# Etherboot og pxe-boot med en mac-specifik billedfil
option root-path "/diskless/192.168.1.21";
if substring (option vendor-class-identifier, 0, 9) = "Etherboot" {
filename "/vmlinuz_arch";
} else if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
filename "/pxelinux.0";
}
}
}
|
Bemærk: Der er ikke noget der forhindrer brugen af både PXE-boot og Etherboot samtidigt. Den ovenforstående Kode listning er blot et eksempel, hvis du har problemer, så konsulter DHCPd dokomentationen. |
IP-adressen efter next-server vil blive spurgt efter et specificeret filename (filnavn). Denne IP-adresse skal være IPen på TFTP-serveren, som normalt er den samme, som masters IP-adresse. filename er relativ til /diskless-biblioteket (dette er til TFTP-serverens specifikke indstillinger, som vil blive dækket senere). Inde i host-blokken specificerer hardware ethernet-indstillingen en MAC-adresse, og fixed-address tildeler en fast IP-adresse til en specifik MAC-adresse. host-name-indstillingen er sikkert en god idé at inkludere og er bare værtsnavnet på en specifik slave. Der er en pæn god man-page om dhcpd.conf med instillinger udover omfanget af denne HOWTO. Du kan læse den, ved at taste:
Kode oversigt 3.7: Læsning af man-pages for dhcpd.conf |
# man dhcpd.conf
|
Før du starter DHCPs initialiseringsscript, så redigér /etc/conf.d/dhcp-filen, så at den ser ud som dette her:
Kode oversigt 3.8: Smagsprøve af /etc/conf.d/dhcp |
IFACE="eth0"
# indsæt de andre indstillinger, som er nødvendige
|
IFACE-variablen er enheden, som du ønsker at køre din DHCP-server på, i dette tilfælde eth0. Tilføjelser af flere punkter til IFACE-variablen kan være brugbart til et komplekse netværkssteder, med flere netværkskorte. For at starte DHCP-serveren, tast:
Kode oversigt 3.9: Start af DHCP-server på master |
# /etc/init.d/dhcp start
|
For at tilføje DHCP-serveren til dit opstartsscript, tast:
Kode oversigt 3.10: Tilføjelse af DHCP-server til masters standard runlevel |
# rc-update add dhcp default
|
For at se at noden starter, kan du tage et kig på /var/log/syslog.log. Hvis denne node starter med succes, vil syslog.log-filen have nogle linjer i bunden, som ser ud som dette:
Kode oversigt 3.11: Smagsprøve af logfil-punkter oprettet af DHCP |
DHCPDISCOVER from 00:00:00:00:00:00 via eth0 DHCPOFFER on 192.168.1.21 to 00:00:00:00:00:00 via eth0 DHCPREQUEST for 192.168.1.21 from 00:00:00:00:00:00 via eth0 DHCPACK on 192.168.1.21 to 00:00:00:00:00:00 via eth0 |
Bemærk: Denne logfil vil også hjælpe dig med at finde slavernes MAC-adresser. |
Hvis du får følgende besked, er det sikkert fordi at der er noget galt med opsætningsfilen, men også at DHCP-serveren stadigvæk sender korrekt.
Kode oversigt 3.12: Smagsprøve af en DHCP-serverfejl |
no free leases on subnet LOCAL-NET |
Hver gang at du ændrer opsætningsfilen, skal du genstarte DHCP-serveren. For at genstarte serveren, tast:
Kode oversigt 3.13: Genstart af DHCP-server på master |
# /etc/init.d/dhcpd restart
|
4. Opsætning af TFTP-server og PXE Linux boot-loader og/eller Etherboot
TFTP står for 'Trivial File Transfer Protocol'. TFTP-serveren vil levere slave med en kerne, og et indledende filsystem. Alle slave-kerner og filsystemer vil blive gemt på TFTP-serveren, så det er sikkert en god idé at lave master til TFTP-serveren.
En virkelig anbefalet tftp-server er klar som tftp-hpa pakken. Denne tftp-server er skrevet af SYSLINUX-forfatteren og den virker meget godt sammen med pxelinux. For at installere, bare tast:
Kode oversigt 4.1: Installation af tftp-serveren |
# emerge tftp-hpa
|
Rediger /etc/conf.d/in.tftpd. Du bør specficere tftproot-folderen med INTFTPD_PATH og hvilketsomhelst kommandolinie-valgmulighed med INTFTPD_OPTS. Det bør se ud som noget lignende dette:
Kode oversigt 4.2: Smagsprøve af /etc/conf.d/in.tftpd |
INTFTPD_PATH="/diskless"
INTFTPD_OPTS="-l -v -s ${INTFTPD_PATH}"
|
-l-optionen indikerer at serveren lytter i 'stand alone mode', så den ikke skal køre inetd. -v indikerer at log-/fejl-beskeder skal være verdslige. -s /diskless specificerer roden af din tftp-server.
For at starte tftp-serveren tast:
Kode oversigt 4.3: Start af master's tftp-server |
# /etc/init.d/in.tftpd start
|
Dette bør starte tftp-serveren med de valgmuligheder, som du specficerede i /etc/conf.d/in.tftpd. Hvis du vil have at denne server bliver automatisk startet ved opstart, tast:
Kode oversigt 4.4: Tilføjelse af tftp-server til masters default run-level |
# rc-update add in-tftpd default
|
Denne sektion er ikke krævet, hvis du kun bruger Etherboot. PXELINUX er en netværksboot-loader, som kan sammenlignes med LILO eller GRUB, og vil være behandlet via TFTP. Det er essentielt et lille sæt af instruktioner, som fortæller klienten, hvor den skal finde sin kerne og indledende filsystem og tillader forskellige kerneopsætninger.
Du vil få brug for pxelinux.0 filen, som kommer med SYSLINUX-pakken af H. Peter Anvin. Du kan installere denne pakke ved at taste:
Kode oversigt 4.5: Installation af syslinux |
# emerge syslinux
|
Bemærk: Dette er ikke nødvendigt til Etherboot. |
Før du starter din TFTP-server, skal du indstille pxelinux. Du skal først kopiere pxelinux-binærfilen ind i dit /diskless-bibliotek:
Kode oversigt 4.6: Indstilling af en fjernstyret boot-loader |
# cp /usr/lib/syslinux/pxelinux.0 /diskless # mkdir /diskless/pxelinux.cfg # touch /diskless/pxelinux.cfg/default |
Dette vil oprette en standard boot-loader opsætningsfil. Den binære pxelinux.0 vil kigge i pxelinux.cfg-biblioteket efter en fil, hvis navn er klientens IP-adresse i hexadecimal. Hvis den ikke finder denne fil, vil den slette det højre ciffer fra samme filnavn og prøve igen, indtil den ikke har flere cifre at bruge. Version 2.05 og senere udgaver af syslinux laver først en søgning efter en fil navngivet efter MAC addressen. Hvis den ikke finder nogen fil, så starter den med den førnævnte opdagelsesmetode. Hvis ingen fil er fundet, vil den bruge default-filen.
Kode oversigt 4.7: Filer som PXE kigger efter i pxelinux.cfg/ i rækkefølge |
(Er første ciffer 01, betyder det Ethernet, de efterfølgende bytes passer til vores slaves MAC-adresse) 01-00-40-63-c2-ca-c9 (Tildelt IP i hexadecimal) C0A80115 C0A8011 C0A801 C0A80 C0A8 C0A C0 C default |
Bemærk: Disse er alle med små bogstaver. |
Lad os starte med default-filen:
Kode oversigt 4.8: Smagsprøve af pxelinux.cfg/default |
DEFAULT /bzImage APPEND ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/diskless/192.168.1.21 |
DEFAULT-taggen dirigerer pxelinux til kernens bzImage, som vi har kompileret tidligere. APPEND-taggen tildeler kernens intialiseringsopsætning. Siden vi har kompileret slaves kerne med NFS_ROOT_SUPPORT vil vi specificere nfsroot her. Den første IP er masters IP, og det andet IP er biblioteket, som var oprettet i /diskless til at gemme slaves indledende filsystem.
Bemærk: Dette er ikke krævet, hvis du bruger PXE-boot. |
Etherboot opstarter netværks-opstartsbilledfiler fra en TFTP-server. Som PXEen, er dette sammenlignelig med LILO eller GRUB. mknbi-værktøjet sørger for at du kan oprette forskellige billedfiler, som bruger forskellige valgmuligheder.
Du vil få brug for mknbi-pakken (værktøj til at lave tagged kerne-billedfiler, som er brugbart til netopstart) for at oprette dine Etherboot-billedfiler. Dette værktøj vil oprette en præ-opsat kerne-billedfil fra din originale kerne. Denne indeholder opstarts-valgmulighederne, som er vist længere nede.
Kode oversigt 4.9: Installation af mknbi |
# emerge mknbi
|
I denne sektion vil vi oprette en simpel etherboot-billedfil. Idet DHCP-serveren uddeler klientens rod-sti i "option root-path" dhcp.conf, skal vi ikke tilføje den her. Flere detaljer kan blive fundet i mknbis manual.
Kode oversigt 4.10: mknbi manual |
# man mknbi
|
Oprettelse af opstart-billedfiler. Dette vil oprette en ELF opstartbar billedfil, som kan tilføje DHCP og rod-stien til kernen. Den tvinger også kernen til at browse netværket for en DHCP-server.
Kode oversigt 4.11: Oprettelse af netopstart-billedfiler |
# mkelf-linux -ip=dhcp /diskless/bzImage > /diskless/vmlinuz
|
Bemærk: Til arkitektur-specifikke billedfiler, skal du indtaste bzImage_arch og vmlinuz_arch. |
Fejlfinding af netværksopstartsprocessen
Der er få ting, som du kan gøre for at kigge på netværksopstartsprocessen. Primært kan du bruge et værktøj, kaldet tcpdump. For at installere tcpdump, tast:
Kode oversigt 4.12: Installation af tcpdump |
# emerge tcpdump
|
Du kan nu lytte til forskelligt netværkstrafik og vurdere at din klient/server-interaktion er funktionelt. Hvis noget ikke virker, er der få ting, som du måske skulle kigge efter. Først, vær sikker på at klient/server er fysisk forbundet ordentligt, og at netværkskabler ikker er ødelagte. Hvis din klient/server ikke modtager 'requests' på en specifik port, vær sikker på at der ikke er nogen firewall-afbrydelser. For at lytte til interaktionen imellem to computere, tast:
Kode oversigt 4.13: Lytte til klient- og server-interaktion via tcpdump |
# tcpdump host client_ip og server_ip |
Du kan også bruge tcpdump til at lytte til en specifik port, som f.eks. tftp-porten, ved at taste:
Kode oversigt 4.14: Lytte til tftp-server |
# tcpdump port 69
|
EN typisk fejl, som du vil modtage, er: "PXE-E32: TFTP open time-out". Det er sikkert pga. fireware-problemer. Hvis du bruger TCPwrappers, burde du måske tjekke /etc/hosts.allow og etc/hosts.deny og sørge for at de er opsat ordentligt. Klienten burde være tilladt til at forbinde til serveren.
NFS står for 'Network File System'. NFS-serveren vil blive brugt til at behandle biblioteker til slave. Disse kan blive personlige senere, men lige nu, er alt hvad vi vil, er at få en indlendende slave-node til at starte diskfrit.
Forskellige klient/server-tjenester lytter ikke til en specifik port, men stoler i stedet for på RPCer (Remote Procedure Calls). Når denne tjeneste er startet, vil den lytte på en hvilkensomhelst port og så registrere denne port med Portmapper-værktøjet. NFS stoler på RPCer og derfor kræver den Portmapper er startet, før den er startet.
NFS-serveren kræver kernens level-understøttelse, så hvis du ikke har dette, skulle du genkompilere din masters kerne. For at dobbelt-tjekke din masters kerne-opsætning, tast:
Kode oversigt 5.1: Tjek af NFS-specifik opsætning |
# grep NFS /usr/src/linux/.config_master
|
Du burde se et output, som ser ud som dette, hvis din kerne er blevet sat ordentligt op:
Kode oversigt 5.2: Ordentlig NFS-specifik opsætning i masters kerneopsætning |
CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set # CONFIG_NETFILTER is not set CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_V4 is not set # CONFIG_NFS_DIRECTIO is not set CONFIG_NFSD=y CONFIG_NFSD_V3=y # CONFIG_NFSD_V4 is not set # CONFIG_NFSD_TCP is not set |
NFS-pakken kan fåes igennem portage, ved at taste:
Kode oversigt 5.3: Installation af nfs-utils |
# emerge nfs-utils
|
Denne pakke vil emerge en portmapping-værktøj, nfs server og nfs-client værktøjer, og vil automatisk ordne initialiseringsafhængigheder.
Der er tre store opsætningsfiler, som du skal redigere:
Kode oversigt 5.4: NFS opsætningsfiler |
/etc/exports /diskless/192.168.1.21/etc/fstab /etc/conf.d/nfs |
/etc/exports-filen specificerer hvordan, til hvem og hvad at eksportere igennem NFS. Slaves fstab vil blive ændret sådan, at den kan mounte NFS-filsystemer, som master eksporterer.
En typisk /etc/exports til master, skulle se ud lige som dette:
Kode oversigt 5.5: Smagsprøve af masters /etc/exports |
# En linie som denne til hver slave /diskless/192.168.1.21 192.168.1.21(sync,rw,no_root_squash,no_all_squash) # Fælles for alle slaver /opt 192.168.1.0/24(sync,ro,no_root_squash,no_all_squash) /usr 192.168.1.0/24(sync,ro,no_root_squash,no_all_squash) /home 192.168.1.0/24(sync,rw,no_root_squash,no_all_squash) # Hvis du vil have en delt log /var/log 192.168.1.21(sync,rw,no_root_squash,no_all_squash) |
Det første felt indikerer biblioteket, som bliver eksporteret og det næste felt indikerer til hvem og hvordan. Dette felt kan blive delt i to dele: hvem bør have tilladelse til at mounte det specifikke bibliotek og hvad den mountede klient kan gøre med filsystemet: ro for 'read only', rw for 'read/write'; no_root_squash og no_all_squash er vigtige til diskfri klienter, som skriver til disken, så de ikke bliver "smadret", når de laver 'I/O requests'. Slaves fstab-fil, /diskless/192.168.1.21/etc/fstab, bør se ud som dette:
Kode oversigt 5.6: Smagsprøve af slaves fstab |
# Disse punkter er essentielle master:/diskless/192.168.1.21 / nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0 master:/opt /opt nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0 master:/usr /usr nfs sync,hard,intr,ro,nolock,rsize=8192,wsize=8192 0 0 master:/home /home nfs sync,hard,intr,rw,nolock,rsize=8192,wsize=8192 0 0 none /proc proc defaults 0 0 # Brugbart, men ikke nødvendigt master:/var/log /var/log nfs hard,intr,rw 0 0 (kun hvis du opsætter en openMosix-cluster) none /mfs mfs dfsa=1 0 0 |
I dette eksempel er master kun værtnavnet for master, men det kunne med med lethed være IP for master. Det første felt indikerer biblioteket, som bliver mountet og det andet felt indikerer hvor. Det tredje felt beskriver filsystem og bør være NFS til enhvert NFS-mountet bibliotek. Det fjerde felt indikerer forskellige indstillinger som kan blive brugt til mount-processen (se mount(1) for flere mount-indstillinger). Nogle folk har problemer med 'soft' mount-punkter, så vi laver dem alle 'hard', men du skulle kigge på forskellige /etc/fstab-indstillinger for at gøre din cluster mere effektiv.
Den sidste fil, som du skal redigere er /etc/conf.d/nfs, som beskriver nogle få indstillinger til NFS, når den er startet, og ser ud som følgende:
Kode oversigt 5.7: Smagsprøve af masters /etc/conf.d/nfs |
# Config file for /etc/init.d/nfs # Antal af servere, som skal startes som standard RPCNFSDCOUNT=8 # Indstillinger til at sende til rpc.mountd RPCMOUNTDOPTS="" |
Du bør ændre RPCNFSDCOUNT til det antal af diskfrie noder på netværket.
Du skal starte NFS-serveren med dens init-script, som er placeret i /etc/init.d, ved at taste:
Kode oversigt 5.8: Start af masters NFS-server |
# /etc/init.d/nfs start
|
Hvis du vil have at dette script starter ved opstart, tast følgende:
Kode oversigt 5.9: Tilføjelse af NFS-server til masters standard runlevel |
# rc-update add nfs default
|
6. Afslutning af slaves filsystem
Kopiering af de manglende filer
Vi vil nu sørge for slaves filsystem er ajour med masters og levere de nødvendige binære filer, imens vi stadigvæk bevarer slaves specifikke filer.
Kode oversigt 6.1: Oprettelse af slaves filsystem |
# rsync -avz /bin /diskless/192.168.1.21 # rsync -avz /sbin /diskless/192.168.1.21 # rsync -avz /lib /diskless/192.168.1.21 |
Bemærk: Begrundelsen for at bruge rsync -avz istedet for cp er for at opretholde symlinks og rettigheder. |
Standard-scripterne vil prøve at køre checkroot, som ikke er logisk for dine slave-noder. Den svære vej er at manuelt redigere /diskless/192.168.1.21/sbin/rc-scriptet, men dette er byrdefuldt, farligt og kunne ødelægge det hele, når du vil ajourføre din nodes filsystem igen og glemmer at lade denne script være. Fidusen er at have en /fastboot-fil, når dit system starter op. Denne fil fortæller checkroot om ikke at køre nogen tjek af filsystem. Men dette vil også slette filen, når den er færdig med programstartsprocessen. Derfor skal vi oprette filen igen i slutningen af programstartsprocessen, som dette:
Kode oversigt 6.2: At forhindre programstartsscripte i at køre et filsystemstjek |
(Oprettelse af /fastboot filen til næste genstart) # touch /diskless/192.168.1.21/fastboot (Oprettelse af /fastboot filen på enhver opstart) # echo "touch /fastboot" >> /diskless/192.168.1.21/etc/conf.d/local.start |
Da unmounting af netværksfilsystemerne bør ske så sent som muligt, så bliver du nødt til at ændre din /etc/init.d/netmount så den siger:
Kode oversigt 6.3: Et ændre /etc/init.d/netmount |
depend() {
before *
|
Bemærk: Baselayout version 1.11.* og senere behøves ikke dette. |
Hvis du gør dette på et system der er i gang, så glem ikke at køre depscan.sh for at ordne service afhængighederne. Du kan med sikkerhed ignorere enhver advarsel om at den vil kollidere med /etc/init.d/checkroot,da du slår den fra via fastboot filen som du satte op i den forgående paragraf.
Du får brug for mange programstartsscripter under /diskless/192.168.1.21/etc/runlevel, idet du behøver tjenester på dine diskfrie noder. Det afhænger alt efter du vil have dine slaver til at gøre.
Advarsel: Brug ikke rc-update programmet til at tilføje eller fjerne scripter i slaves runlevel'er, når du er logget ind på din master. Dette ville ændre din masters runlevel'er. Du skal oprette henvisninger manuelt eller logge ind til dine slave-noder ved brug af ssh eller tilslutte en skærm og tastatur til din slave. |
Kode oversigt 6.4: Typiske slave runlevels |
/diskless/192.168.1.21/etc/runlevels/: total 16 drwxr-xr-x 2 root root 4096 2003-11-09 15:27 boot drwxr-xr-x 2 root root 4096 2003-10-01 21:10 default drwxr-xr-x 2 root root 4096 2003-03-13 19:05 nonetwork drwxr-xr-x 2 root root 4096 2003-02-23 12:26 single /diskless/192.168.1.21/etc/runlevels/boot: total 0 lrwxrwxrwx 1 root root 20 2003-10-18 17:28 bootmisc -> /etc/init.d/bootmisc lrwxrwxrwx 1 root root 19 2003-10-18 17:28 checkfs -> /etc/init.d/checkfs lrwxrwxrwx 1 root root 17 2003-10-18 17:28 clock -> /etc/init.d/clock lrwxrwxrwx 1 root root 23 2003-10-18 17:28 consolefont -> /etc/init.d/consolefont lrwxrwxrwx 1 root root 20 2003-10-18 17:28 hostname -> /etc/init.d/hostname lrwxrwxrwx 1 root root 19 2003-10-18 17:28 keymaps -> /etc/init.d/keymaps lrwxrwxrwx 1 root root 22 2003-10-18 17:28 localmount -> /etc/init.d/localmount lrwxrwxrwx 1 root root 18 2003-10-18 17:28 net.lo -> /etc/init.d/net.lo lrwxrwxrwx 1 root root 20 2003-10-18 17:28 netmount -> /etc/init.d/netmount lrwxrwxrwx 1 root root 19 2003-10-18 17:28 portmap -> /etc/init.d/portmap lrwxrwxrwx 1 root root 21 2003-10-18 17:28 rmnologin -> /etc/init.d/rmnologin lrwxrwxrwx 1 root root 18 2003-10-18 17:28 serial -> /etc/init.d/serial lrwxrwxrwx 1 root root 19 2003-10-18 17:28 urandom -> /etc/init.d/urandom /diskless/192.168.1.21/etc/runlevels/default: total 0 lrwxrwxrwx 1 root root 17 2003-10-18 17:28 clock -> /etc/init.d/clock lrwxrwxrwx 1 root root 19 2003-10-18 17:28 distccd -> /etc/init.d/distccd lrwxrwxrwx 1 root root 17 2003-10-18 17:28 local -> /etc/init.d/local lrwxrwxrwx 1 root root 19 2003-10-18 17:28 metalog -> /etc/init.d/metalog lrwxrwxrwx 1 root root 22 2003-10-18 17:28 ntp-client -> /etc/init.d/ntp-client lrwxrwxrwx 1 root root 16 2003-10-18 17:28 ntpd -> /etc/init.d/ntpd lrwxrwxrwx 1 root root 16 2003-10-18 17:28 sshd -> /etc/init.d/sshd lrwxrwxrwx 1 root root 17 2003-10-18 17:28 vcron -> /etc/init.d/vcron /diskless/192.168.1.21/etc/runlevels/nonetwork: total 0 lrwxrwxrwx 1 root root 17 2003-10-18 17:28 local -> /etc/init.d/local /diskless/192.168.1.21/etc/runlevels/single: total 0 |
Nu er det et godt tidspunkt at starte din slave og krydse dine fingre. Virker det? Tillykke!, du er nu en stolt ejer af (en) diskfri(e) node(r) :)
Indholdet i dette dokument er autoriseret under en Creative Commons - Attribution / Share Alike licens.