Avertisment :
Acest document nu este valid şi nu mai este întreţinut.
|
Ghid Gentoo pentru sistemele fără disc
1.
Introducere
Despre acest ghid
Acest ghid vă va ajuta să instalaţi Gentoo Linux pe maşinile fără
disc. Intenţionăm să facem această descriere cât se poate de
clară, chiar şi pentru un începător, deoarece fiecare dintre noi a fost
aşa ceva la un moment dat :) Pentru utilizatorii Linux mai avansaţi care ar
putea cu uşurinţă să găsească toată această informaţie în
multiple ghiduri despre maşini fără disc şi reţele, sperăm că
acest document vă va uşura munca de instalare, fie utilizatori avansaţi
sau începători.
Ce este un sistem fără disc?
Un calculator fără disc este un sistem PC fără nici un dispozitiv de
boot cum ar fi disc, unitate floppy sau unitate CD-ROM. Calculatorul fără
disc porneşte direct din reţea şi are nevoie de un server să îi ofere
spaţiu de disc în acelaşi mod în care ar face-o un disc local. Începând
de acum, vom numi serverul master iar calculatorul fără disc
slave. Calculatorul slave are nevoie de placă de reţea care să
suporte procesul de boot PXE sau Etherboot. Încercaţi Etherboot.org pentru suport. Majoritatea
plăcilor moderne de reţea, sau cele deja integrate în plăcile de bază
vor funcţiona.
Înainte de a începe
Pe calculatorul master este necesar să aveţi Gentoo instalat şi să
aveţi spaţiu suficient pentru un întreg sistem de fişiere pentru
calculatorele slave. De asemenea, aveţi nevoie de o interfaţă conectată
la internet diferită de cea folosită pentru conectarea în reţeaua
locală.
2.
Configurarea sistemelor master şi slave
Despre kernel
Notă:
Dacă doriţi să construiţi un cluster openMosix, folosiţi patch-ul
openMosix pentru kernel. Acesta poate fi găsit în portage ca
sys-kernel/openmosix-sources. Consultaţi Ghidul openMosix pentru informaţii privind
compilarea kernel-ului utilizând openMosix.
|
Kernel-ul este aplicaţia care interfaţează componentele hardware cu toate
celelalte aplicaţii care rulează pe sistem, fiind, practic, inima
sistemului. Când sistemul este pornit aplicaţia BIOS execută
instrucţiunile găsite pe disc, într-o zonă special dedicată pentru
procesul de boot. În general, aceste instrucţiuni încarcă kernel-ul.
După încărcare, toate procesele sunt gestionate de kernel.
Pentru mai multe informaţii despre kernel şi configurarea acestuia
consultaţi Ghidul
pentru kernel.
Configurarea kernel-ului pe maşina master
Kernel-ul sistemului master poate fi cât de larg şi personalizat doriţi,
dar există un număr de opţiuni de kernel necesare pe care trebuie să le
selectaţi. Navigaţi în meniul de configurare al kernel-ului, tastând:
Cod 2.1: Editare configuraţie kernel pentru calculatorul master |
# cd /usr/src/linux
# make menuconfig
|
Pe ecran va apare un GUI cenuşiu/albastru care oferă o alternativă la
editarea manuală a fişierului /usr/src/linux/.config. Dacă
programul kernel curent funcţionează bine, este recomandat să salvaţi
configuraţia curentă ieşind din mediul GUI şi tastând:
Cod 2.2: Copia de siguranţă pentru configurarea sistemului master |
# cp .config .config_working
|
Înapoi în GUI, intraţi în următoarele meniuri şi setaţi următoarele
module ca built-in (şi NU ca module). Opţiunile prezentate mai jos se
referă la versiunea 2.6.10 de program kernel. Dacă folosiţi o altă
versiune, meniurile s-ar putea să difere puţin. Trebuie neapărat să
configuraţi după cum se arată mai jos.
Cod 2.3: Opţiuni kernel calculator master |
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)
|
Dacă doriţi să folosiţi packet filtering, îl puteţi adăuga mai
târziu ca modul. Descrierea acestei setări o puteţi găsi în Capitolul
despre Sisteme Firewall din Manualul pentru Securitate în Gentoo.
Notă:
Opţiunile de configurare trebuie să fie adăugate la configurarea
specifică sistemului dumneavoastră, în nici un caz nu trebuie să
înlocuiască setarea pe care o aveţi deja.
|
După ce aţi reconfigurat kernel-ul sistemului master, trebuie să-l
recompilaţi:
Cod 2.4: Recompilare kernel şi module aferente pentru calculatorul master |
# make && make modules_install
# cp arch/i386/boot/bzImage /boot/bzImage-master
|
Apoi adăugaţi noul kernel în lilo.conf sau
grub.conf în funcţie de aplicaţia bootloader pe care o
folosiţi, şi setaţi noul kernel ca implicit. Acum, că imaginea bzImage a
fost copiată în directorul dvs. boot, tot ce trebuie să faceţi este să
reporniţi sistemul pentru a încărca noile opţiuni.
Despre kernel-ul slave
Se recomandă să compilaţi kernel-ul slave fără support pentru module,
deoarece încărcarea şi setarea modulelor folosind metoda de pornire din
reţea este complicată şi nu este necesară. În plus, kernel-ul slave
trebuie să fie cât se poate de mic şi compact pentru ca pornirea din
reţea să fie cât mai eficientă. Vom compila în continuare un kernel
slave, în acelaşi loc unde kernel-ul master a fost configurat.
Pentru a elimina orice confuzie, este, probabil, o idee bună să salvăm
mai întâi configurarea kernel master, tastând:
Cod 2.5: Copia de siguranţă pentru configurarea kernel-ului master |
# cp /usr/src/linux/.config /usr/src/linux/.config_master
|
Dorim să configurăm kernel-ul slave similar cu kernel-ul master. Dacă
doriţi să începeţi cu o configurare nouă, puteţi reface configurarea
implicită /usr/src/linux/.config, astfel:
Cod 2.6: Generare configurare kernel implicit |
# cd /usr/src/linux
# cp .config_master .config
|
Porniţi configurarea GUI:
Cod 2.7: Editare configuraţie kernel slave |
# cd /usr/src/linux
# make menuconfig
|
Următoarele opţiuni trebuie să fie incluse în kernel şi NU
definite ca module:
Cod 2.8: Opţiuni kernel slave |
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
|
Notă:
O metoda alternativă de dhcp este de a seta serverul BOOTP.
|
Important:
Este important să adăugaţi suport pentru adaptorul de reţea în kernel
(şi nu ca module). Folosirea modulelor în general nu este o problemă
pentru un sistem fără disc.
|
Apoi, trebuie să compilaţi kernel-ul slave. Trebuie să aveţi grijă să
nu distrugeţi modulele deja compilate (dacă există) pentru server:
Cod 2.9: Compilare kernel slave |
# cd /usr/src/linux
# make
|
Apoi creaţi un nou director pe master care va fi folosit pentru fişierele
calculatoarelor slave. Noi folosim /diskless, însă puteţi
folosi orice altă locaţie. Copiaţi fişierul bzImage creat pentru slave
în directorul /diskless:
Notă:
Dacă folosiţi arhitecturi diferite, trebuie să salvaţi fiecare
configurare în .config_arch. Acelaşi lucru se aplică şi la
imagini kernel: le salvaţi în /diskless sub numele de
bzImage_arch.
|
Cod 2.10: Copiere kernel slave |
# mkdir /diskless
# cp /usr/src/linux/arch/i386/boot/bzImage /diskless
|
Configurare sistem de fişiere preliminar pentru calculatoarele slave
Sistemele de fişiere de pe master şi slave pot fi modificate ulterior. În
acest moment suntem interesaţi numai în generarea unui sistem de fişiere
preliminar care să includă fişierele de configurare şi directoarele
pentru mount. Începem prin a crea un nou director /diskless
pentru primul slave. Fiecare slave va avea un o structură specifică de
fişiere rădăcină deoarece un singur director rădăcină va crea
probleme în ceea ce priveşte permisiile şi ar rezulta în erori. Puteţi
numi în orice fel aceste directoare, sugerăm folosirea adresei IP, care este
unică. Adresa statică de IP a primului nostru slave este de exemplu
192.168.1.21:
Cod 2.11: Creare director root la distanţă pentru maşina slave |
# mkdir /diskless/192.168.1.21
|
Diverse fişiere de configurare în /etc trebuie să fie
modificate pentru a funcţiona pe slave. Copiaţi master /etc în
noul director root slave, tastând:
Cod 2.12: Creare /etc pentru sistemul de fişiere al maşinii slave |
# cp -r /etc /diskless/192.168.1.21/etc
|
Diverse directoare pentru mount şi alte diverse directoare mai trebuie
create. Pentru a le crea, tastaţi:
Cod 2.13: Creare directoare de mount pentru sistemul de fişiere al maşinii slave |
# 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/sys
# 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
|
Majoritatea acestor "părţi" sunt uşor de recunoscut: /dev
/proc sau /sys vor fi populate automat când
calculatorul slave porneşte, celelalte mai târziu folosind facilitatea
mount. Trebuie de asemenea să modificaţi fişierul
/diskless/192.168.1.21/etc/conf.d/hostname pentru a reflecta
numele de gazdă al calculatorului slave. Fişierele binare, bibliotecile
şi toate celelalte fişiere vor fi populate mai târziu în acest ghid,
imediat înainte de a porni calculatorul slave.
Chiar dacă directorul /dev este populat ulterior de udev,
va trebui să creaţi intrarea console. În caz contrar, veţi
primi eroarea "unable to open initial console".
Cod 2.14: Crearea intrării console în directorul /dev |
# mknod /diskless/192.168.1.21/dev/console c 5 1
|
3.
Configurare server DHCP
Despre aplicaţia server DHCP
DHCP înseamnă Dynamic Host Configuration Protocol (Protocolul de Configurare
Dinamică a Sistemelor Gazdă). Server-ul DHCP este primul calculator cu care
calculatorele slave vor comunica în timpul pornirii PXE. Bazat pe adresa MAC,
serverul DHCP atribuie adrese IP tuturor calculatoarelor din reţea. După
asignarea adresei IP, serverul DHCP va informa calculatorul slave de unde să
îşi descarce sistemul de fişiere şi kernel-ul.
Înainte de a începe
Înainte de a începe, există unele lucruri suplimentare de verificat. Mai
întâi verificaţi că sunteţi conectat la reţea:
Cod 3.1: Verificare conectare la reţea |
# ifconfig eth0 multicast
# ifconfig -a
|
Va trebui să vă asiguraţi că aveţi o interfaţă eth0
funcţională. Ar trebui să arate ceva în genul:
Cod 3.2: O interfaţă eth0 funcţională |
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
|
Este important să apară ca MULTICAST, în caz că nu, compilaţi
suportul pentru multicast în kernel.
Instalare server DHCP
Dacă reţeaua dvs. nu are un server DHCP, trebuie să instalaţi unul:
Cod 3.3: Instalare server DHCP |
# emerge dhcp
|
Dacă reţeaua are deja un server DHCP instalat, trebuie să editaţi
fişierul de configurare pentru ca PXE boot să funcţioneze corect.
Configurare server DHCP
Există un singur fişier de configurare care trebuie editat înainte ca
serverul DHCP să fie pornit: /etc/dhcp/dhcpd.conf. Copiaţi şi
editaţi următorul exemplu:
Cod 3.4: Editare fişier de configurare server DHCP |
# cp /etc/dhcp/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
# nano -w /etc/dhcp/dhcpd.conf
|
Formatul fişierului este indentat, şi arată ca în următorul exemplu:
Cod 3.5: Formatul fişierului dhcpd.conf |
ddns-update-style none;
shared-network LOCAL-NET {
subnet 192.168.1.0 netmask 255.255.255.0 {
host slave{
}
group {
}
}
}
|
Blocul shared-network este opţional şi este folosit pentru adrese IP
care aparţin reţelei curente. Cel puţin o reţea subnet trebuie
declarat, iar blocul opţional group vă permite să grupaţi diverse
opţiuni şi să le folosiţi pentru mai multe grupuri de definiţii. Un
exemplu bun de dhcpd.conf este următorul:
Cod 3.6: Exemplu dhcpd.conf |
# DHCP configuration file for DHCP ISC 3.0
ddns-update-style none;
# Definirea opţiunilor specifice pentru PXE
# Code 1: Adresele IP Multicast ale server-ului de fişiere pentru boot
# Code 2: Portul UDP pe care clientul trebuie să monitorizeze răspunsurile MTFTP
# Code 3: Portul UDP pe care server-ele MTFTP îl utilizează pentru a asculta cererile MTFTP
# Code 4: Numărul de secunde pe care trebuie să-l aştepte un client pentru activitate
# înainte de a începe un nou transfer MTFTP
# Code 5: Numărul de secunde pe care trebuie să-l aştepte înainte de a începe
# un transfer MTFTP
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;
# Cel puţin una din opţiunile PXE specifice vendorilor trebuie setate pentru
# ca cipurile ROM ale clienţilor să realizeze faptul că acesta este un server
# compatibil PXE. Setăm adresa IP MCAST la 0.0.0.0 pentru a-i specifica cipului ROM
# că nu oferim suport pentru multicast TFTP (adresa 0.0.0.0 este echivalentă cu nici
# o adresă).
option PXE.mtftp-ip 0.0.0.0;
# Acesta este numele fişierului pe care cipurile ROM trebuie să-l descarce.
filename "pxelinux.0";
# Acesta este numele server-ului de pe care trebuie să-l descarce.
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";
}
}
}
|
Notă:
Nimic nu vă împiedică să folosiţi PXE boot şi Etherboot împreună.
Codul anterior este un simplu exemplu; dacă aveţi probleme, vă rugăm
să consultaţi documentaţia DHCPd.
|
Adresa de IP după next-server va fi interogată pentru fişierul
filename specificat. Această adresă IP ar trebui să fie adresa IP
serverului tftp, de obicei aceeaşi cu adresa de IP a sistemului master.
Fişierul filename este relativ la directorul /diskless
(opţiunile specifice serverului tftp vor fi descrise mai târziu). Opţiunea
hardware ethernet din blocul host specifică o adresă de MAC,
iar fixed-address atribuie o adresă de IP fixă acestei adrese MAC
particulare. Este bine să includeţi opţiunea host-name, unde
host-name este numele calculatorului slave. Exista o pagină de manual destul
de bună despre dhcpd.conf cu toate opţiunile; descrierea lor
în totalitate aici, depăşeşte scopul acestui ghid. O puteţi consulta
introducând:
Cod 3.7: Consultarea paginii de manual dhcpd.conf |
# man dhcpd.conf
|
Pornire server DHCP
Înainte de a porni script-ul de iniţializare dhcp, editaţi fişierul
/etc/conf.d/dhcp ca în exemplul următor:
Cod 3.8: Exemplu fişier /etc/conf.d/dhcp |
IFACE="eth0"
|
Variabila IFACE este interfaţa pe care doriţi să rulaţi serverul
DHCP, în cazul nostru eth0. Pentru o topologie de reţea mai
complicată cu mai multe interfeţe de Ethernet, puteţi adăuga mai multe
argumente variabilei IFACE. Pentru a porni serverul dhcp, introduceţi:
Cod 3.9: Pornire server dhcp pe calculatorul master |
# /etc/init.d/dhcp start
|
Adăugaţi serverul dhcp între script-urile de pornire:
Cod 3.10: Adăugaţi serverul dhcp pe nivelul de iniţializare default al calculatorului master |
# rc-update add dhcp default
|
Rezolvarea problemelor legate de DHCP
Pentru a verifica procesul de pornire al unui calculator, analizaţi fişierul
/var/log/messages. Dacă nu sunt probleme, fişierul
messages ar trebui să aibă ceva linii undeva la sfârşit, ca
în următorul exemplu:
Cod 3.11: Exemplu linii de log create de 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
|
Notă:
Acest fişier de log poate ajuta şi la aflarea adreselor MAC ale
calculatoarelor slave.
|
Dacă primiţi următorul mesaj, înseamnă, probabil, că există o
problemă cu fişierul de configurare, însă serverul DHCP funcţionează
corect.
Cod 3.12: Exemplu eroare server dhcp |
no free leases on subnet LOCAL-NET
|
De fiecare dată când modificaţi fişierul de configurare, serverul DHCP
trebuie repornit. Pentru a-l reporni, introduceţi:
Cod 3.13: Repornire server dhcp pe calculatorul master |
# /etc/init.d/dhcpd restart
|
4.
Configurare server TFTP şi PXE Linux Bootloader şi/sau Etherboot
Despre serverul TFTP
Serverul TFTP (Trivial File Transfer Protocol) furnizează fişierul kernel
şi sistemul iniţial de fişiere calculatoarelor slave. Copiile fişierelor
kernel şi sistemelor iniţiale de fişiere se găsesc pe serverul TFTP,
şi este o idee bună să configurăm calculatorul master ca server TFTP.
Instalare server TFTP
Un server TFTP recomandat poate fi găsit în pachetul tftp-hpa. Acest server
are acelaşi autor ca şi SYSLINUX, şi funcţionează foarte bine cu
pxelinux. Pentru a îl instala, introduceţi:
Cod 4.1: Instalare server tftp |
# emerge tftp-hpa
|
Configurare server TFTP
Editaţi fişierul /etc/conf.d/in.tftpd. Trebuie să
specificaţi directorul tftproot cu INTFTPD_PATH şi fiecare opţiune
de comandă cu INTFTPD_OPTS. Ar trebui să arate în felul următor:
Cod 4.2: Exemplu /etc/conf.d/in.tftpd |
INTFTPD_PATH="/diskless"
INTFTPD_OPTS="-l -v -s ${INTFTPD_PATH}"
|
Opţiunea -l rulează aplicaţia în modul de operare "stand alone"
fără a necesita inetd. Opţiunea -v indică un nivel informativ
pentru mesajele de log şi mesajele de eroare. Opţiunea -s /diskless
specifică directorul rădăcină pentru server-ul tftp.
Pornire server TFTP
Pentru a porni server-ul tftp, introduceţi:
Cod 4.3: Pornire server tftp pe calculatorul master |
# /etc/init.d/in.tftpd start
|
Aceasta ar trebui să pornească server-ul de tftp cu opţiunile specificate
în /etc/conf.d/in.tftpd. Dacă doriţi să porniţi automat
server-ul la pornirea calculatorului introduceţi:
Cod 4.4: Adăugaţi serverul tftp în nivelul de execuţie default pe calculatorul master |
# rc-update add in.tftpd default
|
Despre PXELINUX
Această secţiune nu este necesară dacă folosiţi Etherboot. PXELINUX
este o aplicaţie bootloader care funcţionează din reţea folosind TFTP.
Este echivalent cu LILO sau GRUB. În esenţă este un set mic de
instrucţiuni care îi specifică sistemului slave unde să găsească
programul kernel şi sistemul iniţial de fişiere. PXELINUX vă permite
să folosiţi diferite opţiuni pentru kernel.
Înainte de a începe
Trebuie să luaţi o copie a fişierului pxelinux.0 din pachetul SYSLINUX de
H. Pete Anvin. Puteţi instala acest pachet astfel:
Cod 4.5: Instalare syslinux |
# emerge syslinux
|
Setare PXELINUX
Notă:
Aceasta nu este necesară pentru Etherboot
|
Înainte de a porni serverul tftp, trebuie să setaţi pxelinux. Mai întâi
copiaţi fişierul binar pxelinux în /diskless:
Cod 4.6: Setarea aplicaţiei bootloader la distanţă |
# cp /usr/lib/syslinux/pxelinux.0 /diskless
# mkdir /diskless/pxelinux.cfg
# touch /diskless/pxelinux.cfg/default
|
Aceasta va crea o configuraţie default pentru bootloader. Fişierul binar
pxelinux.0 va căuta în directorul pxelinux.cfg un
fişier al cărui nume este adresa de IP a calculatorului slave în
hexazecimal. Dacă nu găseşte un asemenea fişier va elimina primul digit
din numele fişierului pornind din dreapta şi va încerca din nou până nu
mai rămâne nici un digit. Începând cu versiunea 2.05 a pachetului
syslinux, mai întâi efectuează o căutare adiţională pentru un fişier
numit după adresa de MAC. În cazul în care nici un fişier nu este
găsit, este utilizată modalitatea de descoperire explicată anterior.
Dacă nu este găsit nimic, este utilizat fişierul default.
Cod 4.7: Fişiere pe care PXE le căuta în pxelinux.cfg/ în ordine |
01-00-40-63-c2-ca-c9
C0A80115
C0A8011
C0A801
C0A80
C0A8
C0A
C0
C
default
|
Notă:
Acestea sunt în caractere minuscule.
|
Să începem cu fişierul default:
Cod 4.8: Exemplu pxelinux.cfg/default |
DEFAULT /bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/diskless/192.168.1.21
|
DEFAULT specifică imaginea bzImage de kernel pe care l-am compilat
anterior. APPEND adaugă opţiunile de iniţializare kernel.
Întrucât am compilat un kernel cu NFS_ROOT_SUPPORT, vom specifica
aici nfsroot. Prima adresă de IP este adresa calculatorului master, cea de a
doua este directorul creat în /diskless care conţine sistemul
iniţial de fişiere.
Despre Etherboot
Notă:
Această secţiune nu este necesară dacă folosiţi PXE.
|
Etherboot este o aplicaţie bootloader care funcţionează din reţea folosind
TFTP. Ca şi PXE, acesta este echivalent cu LILO sau GRUB. Programul utilitar
mknbi vă permite să creaţi imagini diferite folosind opţiuni
diferite.
Înainte de a începe
Trebuie să procuraţi o copie a programului mknbi pentru a crea o
imagini de kernel speciale pentru Etherboot. Acest utilitar va crea un kernel
bazat pe kernel-ul dumneavoastră original. Acesta conţine opţiunile de boot
după cum este specificat mai jos.
Cod 4.9: Instalare mknbi |
# emerge mknbi
|
Setare Etherboot
În această secţiune vom crea o imagine simplă etherboot. Nu trebuie să
specificăm calea către directorul rădăcină pentru clienţi deoarece
aceasta este deja făcută de către serverul dhcp în "option root-path"
în dhcp.conf. Mai multe detalii pot fi găsite în manualul mknbi.
Cod 4.10: Manualul mknbi |
# man mknbi
|
Următoarea comandă va crea o imagine de boot în format ELF care va pasa
dhcp şi rootpath programului kernel. De asemenea, va forţa programul kernel
să încerce să găsească un server dhcp pe reţea.
Cod 4.11: Creare imagine netboot |
# mkelf-linux -ip=dhcp /diskless/bzImage > /diskless/vmlinuz
|
Notă:
Pentru o imagine specifică unei arhitecturi, trebuie să introduceţi
bzImage_arch şi vmlinuz_arch.
|
Rezolvarea problemelor cauzate de procesul de boot prin reţea
Există câteva modalităţi de a diagnostica o problemă de boot prin
reţea. Principalul program utilitar folosit în acest scop este
tcpdump. Pentru a instala tcpdump introduceţi:
Cod 4.12: Instalare tcpdump |
# emerge tcpdump
|
Puteţi urmări traficul de date pe reţea pentru a vă asigura că
interacţiunile dintre server şi client au loc. Dacă ceva nu
funcţionează, puteţi verifica o serie de lucruri. Începeţi prin a
verifica conexiunea fizică dintre server şi client, dacă aveţi cabluri
bune. Dacă clientul/serverul nu primeşte date pe un port anumit,
verificaţi că nu aveţi un firewall în reţea care să împiedice acest
trafic. Pentru a monitoriza datele trimise între doua calculatoare
introduceţi:
Cod 4.13: Monitorizare interacţie client/server folosind tcpdump: |
# tcpdump host and
|
Puteţi folosi tcpdump pentru a asculta pe un port particular precum
tftp, introducând:
Cod 4.14: Monitorizare server tftp |
# tcpdump port 69
|
O problemă uzuală este: "PXE_E32: TFTP open time-out". Aceasta este
probabil datorată unui firewall. Dacă folosiţi TCPwrappers se
recomandă să verificaţi că fişierele /etc/hosts.allow
şi /etc.hosts.deny sunt configurate corect. Calculatorului slave
ar trebui să i se permită să se conecteze la server.
5.
Configurare server NFS
Despre NFS server
Serverul NFS (Network File System) permite calculatoarelor slave să acceseze
directoare de fişiere în reţea. Această procedură poate fi
personalizată mai târziu, vom implementa pentru început numai strictul
necesar pentru a permite pornirea calculatoarelor slave.
Despre Portmapper
Există o serie de servicii client/slave care nu ascultă pe un port
specific. Aceste servicii folosesc RPC (Remote Procedure Calls). La
iniţializare, serviciul ascultă pe un port aleator, iar apoi acest port este
înregistrat cu Portmapper. NFS foloseşte RPC şi deci are nevoie de
Portmapper să ruleze înainte ca serviciul să fie pornit.
Înainte de a începe
Suport pentru NFS Server este necesar în kernel, deci, dacă nu aveţi
configurat deja, trebuie să recompilaţi kernel-ul sistemului master. Pentru
a verifica programul kernel master introduceţi:
Cod 5.1: Verificare opţiuni specifice NFS |
# grep NFS /usr/src/linux/.config_master
|
Dacă programul kernel a fost configurat pentru NFS, ar trebui să vi se
afişeze ceva asemănător cu:
Cod 5.2: Opţiuni specifice NFS în configuraţia kernel a maşinii master |
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
|
Instalare server NFS
Pachetul NFS poate fi găsit în portage, tastând:
Cod 5.3: Instalare nfs-utils |
# emerge nfs-utils
|
Acest pachet conţine programul utilitar portmapper, un server şi un client
NFS. Toate celelalte dependenţe sunt rezolvate automat.
Configurare server NFS
Există trei fişiere de configurare care trebuie editate:
Cod 5.4: Fişiere configurare NFS |
/etc/exports
/diskless/192.168.1.21/etc/fstab
/etc/conf.d/nfs
|
Fişierul /etc/exports specifică cum, cui şi ce va fi
exportat de către serverul NFS. Fişierul fstab de pe calculatoarele slave
va fi modificat pentru mount al sistemelor de fişiere NFS exportate de
server.
Un exemplu tipic de fişier /etc/exports ar trebui să fie ca
următorul:
Cod 5.5: Exemplu master /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)
|
Primul câmp indică directorul care trebuie exportat, următorul câmp
indică de cine şi cum. Acest câmp poate fi despărţit în două
părţi: cine are voie să mount acest director particular, şi ce tip de
mount poate fi efectuat: ro doar pentru citire, rw pentru
citire/scriere; no_root_squash şi no_all_squash sunt
importante pentru clienţi fără disc care au acces la hard disc pentru
scriere şi aceşti clienţi nu sunt refuzaţi când încearcă să facă
cereri la nivel de intrare/ieşire. Fişierul fstab al calculatoarelor slave,
/diskless/192.168.1.21/etc/fstab, ar trebui să arate
asemănător cu:
Cod 5.6: Exemplu fişier fstab pentru calculatoarele slave |
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
|
În exemplul anterior, master este numele calculatorului master, însă
poate fi înlocuit cu uşurinţă cu adresa IP a acestui calculator. Primul
câmp indică directorul care trebuie mount-at, iar al doilea câmp indică
locaţia. Al treilea câmp indică tipul de sistem de fişiere, în cazul
nostru NFS. Al patrulea câmp specifică diverse opţiuni care vor fi folosite
în timpul procesului de mount (încercaţi mount(1) pentru mai multe
informaţii privind opţiunile). Unii utilizatori au probleme cu
modalităţile soft pentru mount, şi deci le-am făcut pe toate hard. Ar
trebui totuşi să analizaţi opţiunile din /etc/fstab pentru a
optimiza configuraţia.
Ultimul fişier de editat este /etc/conf.d/nfs. Acesta descrie o
serie de opţiuni de iniţializare nfs, şi arată ca în exemplul următor:
Cod 5.7: Exemplu master /etc/conf.d/nfs |
# Config file for /etc/init.d/nfs
# Number of servers to be started up by default
RPCNFSDCOUNT=8
# Options to pass to rpc.mountd
RPCMOUNTDOPTS=""
|
Ar trebui să schimbaţi RPCNFSDCOUNT să fie egal cu numărul de
calculatoare slave.
Pornire server NFS
Porniţi serverul nfs cu script-ul de iniţializare din /etc/init.d
introducând:
Cod 5.8: Pornire master nfs server |
# /etc/init.d/nfs start
|
Dacă doriţi ca acest script să fie pornit automat când calculatorul
master porneşte, introduceţi:
Cod 5.9: Adăugare server nfs în nivelul de iniţializare default pe calculatorul master |
# rc-update add nfs default
|
6.
Finalizare sistem fişiere calculatoare slave
Copiere fişiere care lipsesc
În continuare vom sincroniza sistemele de fişiere ale calculatoarelor
master şi slave şi vom adăuga o serie de fişiere executabile fără a
modifica fişierele specifice calculatoarelor slave.
Cod 6.1: Creare sistem de fişiere slave |
# rsync -avz /bin /diskless/192.168.1.21
# rsync -avz /sbin /diskless/192.168.1.21
# rsync -avz /lib /diskless/192.168.1.21
|
Notă:
Folosim rsync -avz în loc de cp pentru a menţine link-urile simbolice şi
permisiunile.
|
Script-uri de iniţializare
Script-urile de iniţializare vor încerca să ruleze checkroot, ceea
ce nu are sens pentru calculatoarele slave. O soluţie ar fi să modificaţi
manual script-ul /diskless/192.168.1.21/sbin/rc, aceasta este
însă dificil şi periculos şi are putea să creeze probleme când
sincronizaţi sistemul de fişiere din nou. O altă soluţie este să aveţi
un fişier /fastboot. Acest fişier informează
checkroot că nu este cazul să verifice sistemul de fişiere,
însă acest fişier este şters după ce procesul de iniţializare a luat
sfârşit. De aceea, acest fişier va trebui să fie creat din nou după
iniţializare:
Cod 6.2: Prevenire script de iniţializare să verifice sistemul de fişiere |
# touch /diskless/192.168.1.21/fastboot
# echo "touch /fastboot" >> /diskless/192.168.1.21/etc/conf.d/local.start
|
Deoarece procesul de umount pentru sistemele de fişiere de reţea ar trebui
să fie efectuat ultimul, va trebui să editaţi fişierul dvs.
/etc/init.d/netmount şi să-l consultaţi:
Cod 6.3: Editarea /etc/init.d/netmount |
depend() {
before *
|
Notă:
Baselayout, versiunea 1.11.* şi cele ulterioare necesită această setare.
|
Dacă efectuaţi aceste operaţii de pe un sistem live, nu uitaţi să
rulaţi depscan.sh pentru a rezolva dependenţele între servicii.
Puteţi ignora în siguranţă avertismentele despre coliziunile cu
/etc/init.d/checkroot, deoarece veţi dezactiva acest serviciu prin intermediul
fişierului fastboot creat în paragraful anterior.
În funcţie de scopul calculatoarelor slave, aveţi nevoie de atât de multe
script-uri de iniţializare în
/diskless/192.168.1.21/etc/runlevels cât şi numărul de
servicii care rulează pe aceste calculatoare.
Atenţie:
Nu folosiţi programul rc-update pentru a adăuga sau înlătura
fişiere script când sunteţi logged pe calculatorul master, deoarece aceasta
va rezulta în adăugarea/înlăturarea acestor script-uri în sistemul de
iniţializare al calculatorului master. Trebuie să creaţi linuk-urile manual
sau log în calculatorul slave folosind ssh sau conectaţi un terminal şi o
tastatură.
|
Cod 6.4: Exemplu tipic de nivele de iniţializare pe calculatoarele slave |
/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 22 2003-10-18 17:28 domainname -> /etc/init.d/domainname
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 19 2003-10-18 17:28 modules -> /etc/init.d/modules
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 21 2003-10-18 17:28 rmnologin -> /etc/init.d/rmnologin
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 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 16 2003-10-18 17:28 sshd -> /etc/init.d/sshd
lrwxrwxrwx 1 root root 21 2003-10-18 17:28 syslog-ng -> /etc/init.d/syslog-ng
lrwxrwxrwx 1 root root 17 2003-10-18 17:28 vixie-cron -> /etc/init.d/vixie-cron
/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
|
În continuare este timpul să porniţi calculatoarele slave. Dacă
funcţionează, felicitări, sunteţi deţinătorul unui sistem de noduri
fără disc :)
Conţinutul acestui document este publicat sub licenţa Creative Commons -
Attribution / Share Alike.
|