Boot. initrd, runlevels

Última modificació: juliol de 2013

Primer de tot, quan arrenca la màquina, la BIOS pren el control de l'ordinador, detecta els discs, carrega l'MBR i executa el bootloader. Si a aquest bootloader seleccionem que volem arrencar Linux, el bootloader busca el kernel al disc, el carrega i l'executa.

(Podem accedir a qualsevol sistema com a root, si quan arrenca grub editem i li passem al kernel el següent paràmetre init=/bin/sh)

Actualment, el kernel en arrencar busca i munta en RAM un sistema de fitxers virtual (initramfs, pels amics initrd o initialitzation RAM disk) que és un fitxer que normalment està al costat del kernel. Aquest sistema de fitxers virtual proveeix al kernel de les coses que permetran al kernel carregar el sistema de fitxers real: mòduls de kernel amb drivers, scripts d'inicialització de dispositius o ensamblat de RAIDs, obertura de particions encriptades, activació de volums LVM, etc. Un cop la partició root real ha estat muntada, initrdfs passa el control a init que es troba al disc "real" i la màquina inicia l'arranc estàndar.

Init executa un munt de coses, segons li va dictant /etc/inittab. El primer que executa és /etc/init.d/rcS, un script que executa a la vegada tot el que troba al directori /etc/rcS.d/, bàsicament scripts que:

    • configuren el teclat de la cònsola
    • carreguem mòduls llistats a /etc/modules. Aquests son mòduls extra que no han estat carregats automàticament pel kernel
    • chequeja la integritat dels sistemes de fitxers
    • munta les particions locals i els sistemes de fitxers de xarxa (NFS)
    • configura la xarxa

Init ara va i executa els programes habilitats al runlevel per defecte (això dels runlevels ho veurem meś avall).

Finalment, quan init ha arribat al runlevel per defecte, engega vàries consoles virtuals (getty) i mostra un prompt que espera un nom d'usuari. Si entrem a una d'aquestes sessions el programa que s'executa és login usuari.

Runlevels:

A /etc/init.d/ trobem scripts per cada "servei". Podem fer start, stop, status, restart, reload.

A /etc trobem directoris amb el nom rc1.d, rc2.d... Aquest directoris contenen els scripts que configuren els runlevels. Primer s'executen els scripts que comencen per k (kill). Despres els que comencen per s (start)

-Exemple: si tenim a /etc/init.d/atd i volem que s'arrenqui aquest

dimoni al runlevel 3, fem un enllaç:

ln -s /etc/init.d/atd /etc/rc.d/rc.3/s50atd

Si volem que pari al runlevel 4:

ln -s /etc/init.d/atd /etc/rc.d/rc.3/k50atd

El 50 es el numero d'ordre de trucada i en comptes de atd podriem haver posat qualsevol nom però així ens va millor per identificar el dimoni amb el que volem treballar.

A Debian, el runlevel per defecte és el 2, i el 1 correspon a monousuari. Per configurar els runlevels, ho podem fer amb update-rc.d. Exemples:

Per arrencar apache als runlevels 2,3,4,5 i aturar-lo als 0,1 i6:

update-rc.d apache defaults

(en realitat aquesta instrucció seteja els runlevels per defecte que indica el paquet d'instal·lació, es a dir que si volem deixar que apache arrenqui als runlevels definits per defecte, farem servir aquesta instrucció update-rc.d apache defaults)

Equivaldria a:

update-rc.d apache start 20 2 3 4 5 . stop 20 0 1 6 .

Per "treure" Apache dels runlevels i que no arrenqui:

update-rc.d -f samba remove

També disposem de l'eina rcconf i de sysv-rc-conf, aquesta última basada en ncurses i totalment intuitiva.

A Fedora i altres distribucions, per a treballar amb els runlevels es fa amb chkconfig. Exemples:

chkconfig --list

Lista tots els scripts d'inici

chkconfig --list apache

Reporta l'estat d'apache

chkconfig apache --level 35 on

Configura apache per a que arrenqui als runlevels 3 i 5

chkconfig apache off

Deshabilita apache per a tots els runlevels

A gnome podem utilitzar gnome-session-properties