Gentoo Logo

Avertisment : Acest document nu este valid şi nu mai este întreţinut.


Ghid Gentoo pentru sistemele fără disc

Conţinut:

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


Dacă doriţi să aveţi acces la internet folosind calculatorul master
sau/şi folosind un firewall, trebuie să adăugaţi suport pentru iptables.

  [*] 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
(Partiţia /boot trebuie să fie mount-ată înainte de a copia pe ea)
# 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
(numai pentru openMosix)
# 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

# opţiunile globale
ddns-update-style none;
shared-network LOCAL-NET {
# opţiunile despre reţeaua partajată
subnet 192.168.1.0 netmask 255.255.255.0 {
    # opţiunile de reţea despre subnet
    host slave{
        # opţiunile specifice sistemelor gazdă
    }
    group {
        # opţiunile specifice de grup
    }
}
}

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.
    # Utilizaţi adresa IP a sistemului master
    next-server 192.168.1.1;
  }

  # Dacă utilizaţi etherboot cu o imagine nespecifică 
  class "etherboot" {
        if substring (option vendor-class-identifier, 0, 9) = "Etherboot" {
        filename "/diskless/vmlinuz";
        }
  }
  
  pool {
    max-lease-time 86400;
    default-lease-time 86400;
    # Aceasta previne ca maşinile neafişate să-şi atribuie o adresă IP
    deny unknown-clients;
  }
 
  host slave21 {
       # Utilizaţi adresa MAC a sistemului slave
       hardware ethernet                00:40:63:C2:CA:C9;
       # Atribuiţi-i sistemului slave o adresă IP statică
       fixed-address                    192.168.1.21;
       server-name                      "master";
       # Utilizaţi adresa dvs. IP pentru gateway, dacă este necesar
       option routers                   192.168.1.1;
       # Utilizaţi adresa dvs. IP pentru DNS, dacă este necesar
       option domain-name-servers       192.168.1.1;
       option domain-name               "mydomain.com";
       # Utilizaţi numele de gazdă al sistemului dvs. slave
       option host-name                 "slave21";
       
       
       # Proces de boot etherboot şi pxe cu imagine mac specifică
       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"
# adăugaţi alte opţiuni necesare

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

(Fişierele ce încep cu 01 desemnează o adresă Ethernet, următorii octeţi sunt adresa MAC a sistemului slave)
01-00-40-63-c2-ca-c9

(Adresă IP în hexazecimal)
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 client_ip and server_ip

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

# o linie pentru fiecare calculator slave
/diskless/192.168.1.21   192.168.1.21(sync,rw,no_root_squash,no_all_squash)
# comun pentru toate calculatoarele slave
/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)
# dacă doriţi un log partajat
/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

# these entries are essential
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
# folositor dar nu neapărat necesar
master:/var/log                 /var/log  nfs     hard,intr,rw                                 0 0

(numai dacă folosiţi openMosix)
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

(Creaţi fişierul /fastboot pentru următoare pornire)
# touch /diskless/192.168.1.21/fastboot
(Creaţi fişierul /fastboot la fiecare pornire)
# 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 :)



Imprimare

Actualizat la 2 Aprilie 2006

Versiunea originală a acestui document a fost actualizată ultima dată la 30 Octombrie 2011

Sumar: Acest ghid vă va ajuta să instalaţi Gentoo Linux pe sistemele fără disc.

Michael Andrews
Autor

Kristian Jerpetjoen
Editor

Sven Vermeulen
Corector

Xavier Neys
Corector

Lucian Constantin
Translator

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.