Diskfrie noder med Gentoo
1.
Introduktion
Om denne HOWTO
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.
Hvad er en diskfri maskine?
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.
Før du starter
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
Om kerner
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).
Opsætning af masters kerne
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
[*] 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
# 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.
Om slaves kerne
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
# 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
|
3.
Opsætning af DHCP-server
Om DHCP-serveren
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.
Før du starter
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.
Installation af DHCP-serveren
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.
Opsætning af DHCP-serveren
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 |
ddns-update-style none;
shared-network LOCAL-NET {
subnet 192.168.1.0 netmask 255.255.255.0 {
host slave{
}
group {
}
}
}
|
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.
next-server 192.168.1.1;
}
class "etherboot" {
if substring (option vendor-class-identifier, 0, 9) = "Etherboot" {
filename "/diskless/vmlinuz";
}
}
pool {
max-lease-time 86400;
default-lease-time 86400;
deny unknown clients;
}
host slave21 {
hardware ethernet 00:40:63:C2:CA:C9;
fixed-address 192.168.1.21;
server-name "master";
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
option domain-name "mydomain.com";
option host-name "slave21";
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
|
Start af DHCP-serveren
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"
|
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
|
Fejlfinding af DHCP-server
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
Om TFTP-serveren
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.
Installation af TFTP-server
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
|
Opsætning af TFTP-server
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.
Start af 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
|
Om PXELINUX
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.
Før vi starter
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
|
Opsætning af PXELINUX
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 |
01-00-40-63-c2-ca-c9
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.
Om Etherboot
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.
Før du starter
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
|
Opsætning af Etherboot
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 og
|
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.
5.
Opsætning af NFS-serveren
Om NFS-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.
Om Portmapper
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.
Før du starter
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
|
Installation af NFS-serveren
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.
Opsætning af NFS-serveren
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 |
/diskless/192.168.1.21 192.168.1.21(sync,rw,no_root_squash,no_all_squash)
/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)
/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 |
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
master:/var/log /var/log nfs hard,intr,rw 0 0
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.
Start af NFS-serveren
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.
|
Start-scripts
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 |
# touch /diskless/192.168.1.21/fastboot
# 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.
|