LFCS: Gestió del procés i serveis d'inici del sistema (SysVinit, Systemd i Upstart) - Part 7


Fa un parell de mesos, la Linux Foundation va anunciar la certificació LFCS (Linux Foundation Certified Sysadmin), un nou programa emocionant que té com a objectiu permetre a persones de tots els extrems del món obtenir la certificació per realitzar tasques bàsiques i intermèdies d'administració de sistemes en sistemes Linux. Això inclou el suport de sistemes i serveis que ja estan en funcionament, juntament amb la recerca i l'anàlisi de problemes de primera mà, a més de la capacitat de decidir quan plantejar problemes als equips d'enginyeria.

El vídeo següent descriu una breu introducció al programa de certificació de la Fundació Linux.

Aquesta publicació és la part 7 d'una sèrie de 10 tutorials, aquí en aquesta part, explicarem com gestionar el procés i els serveis d'inici del sistema Linux, necessaris per a l'examen de certificació LFCS.

Gestió del procés d'inici de Linux

El procés d'arrencada d'un sistema Linux consta de diverses fases, cadascuna representada per un component diferent. El diagrama següent resumeix breument el procés d'arrencada i mostra tots els components principals implicats.

Quan premeu el botó Engegada de la vostra màquina, el microprogramari que s'emmagatzema en un xip EEPROM de la placa base inicialitza el POST ( Power-On Self Test) per comprovar l'estat dels recursos de maquinari del sistema. Quan s'ha acabat la POST, el microprogramari cerca i carrega el carregador d'arrencada de la 1a etapa, situat a l'MBR o a l'EFI. partició del primer disc disponible i li dóna el control.

L'MBR es troba al primer sector del disc marcat com a arrencable a la configuració de la BIOS i té una mida de 512 bytes.

  1. Primers 446 bytes: el carregador d'arrencada conté codi executable i text del missatge d'error.
  2. Següents 64 bytes: la taula de particions conté un registre per a cadascuna de les quatre particions (primàries o esteses). Entre altres coses, cada registre indica l'estat (actiu/no actiu), la mida i els sectors inicial/final de cada partició.
  3. Darrers 2 bytes: el número màgic serveix com a comprovació de validació de l'MBR.

L'ordre següent realitza una còpia de seguretat de l'MBR (en aquest exemple, /dev/sda és el primer disc dur). El fitxer resultant, mbr.bkp pot ser útil si la taula de particions es corromp, per exemple, fent que el sistema no pugui arrencar.

Per descomptat, per utilitzar-lo més tard si cal, haurem de desar-lo i emmagatzemar-lo en un altre lloc (com una unitat USB, per exemple). Aquest fitxer ens ajudarà a restaurar l'MBR i ens tornarà a posar en marxa si i només si no canviem la disposició del disc dur mentrestant.

# dd if=/dev/sda of=mbr.bkp bs=512 count=1
# dd if=mbr.bkp of=/dev/sda bs=512 count=1

Per als sistemes que utilitzen el mètode EFI/UEFI, el microprogramari UEFI llegeix la seva configuració per determinar quina aplicació UEFI s'ha d'iniciar i des d'on (és a dir, en quin disc i partició el Es troba la partició EFI).

A continuació, es carrega i s'executa el carregador d'arrencada de la 2a etapa (també conegut com a gestor d'arrencada). GRUB [GRand Unified Boot] és el gestor d'arrencada més utilitzat a Linux. Es pot trobar una de les dues versions diferents a la majoria de sistemes que s'utilitzen avui dia.

  1. Fitxer de configuració heretat de GRUB: /boot/grub/menu.lst (distribucions anteriors, no compatibles amb els microprogramaris EFI/UEFI).
  2. Fitxer de configuració GRUB2: molt probablement, /etc/default/grub.

Tot i que els objectius de l'examen LFCS no demanen explícitament coneixements sobre els elements interns de GRUB, si ets valent i pots permetre't el luxe de malmetre el teu sistema (pot ser que vulguis provar-ho primer en una màquina virtual, per si de cas), heu d'executar-lo.

# update-grub

Com a root després de modificar la configuració de GRUB per aplicar els canvis.

Bàsicament, GRUB carrega el nucli predeterminat i la imatge initrd o initramfs. En poques paraules, initrd o initramfs ajuden a realitzar la detecció de maquinari, la càrrega del mòdul del nucli i el descobriment de dispositius necessaris per muntar el sistema de fitxers arrel real.

Una vegada que el sistema de fitxers arrel real està en funcionament, el nucli executa el sistema i el gestor de serveis (init o systemd, la identificació del procés o PID sempre és 1) per iniciar l'usuari normal. espai del procés d'arrencada per tal de presentar una interfície d'usuari.

Tant init com systemd són dimonis (processos en segon pla) que gestionen altres dimonis, com el primer servei que s'inicia (durant l'arrencada) i l'últim servei que finalitza (durant l'apagada).

Inici de serveis (SysVinit)

El concepte de nivells d'execució a Linux especifica diferents maneres d'utilitzar un sistema controlant quins serveis s'executen. En altres paraules, un nivell d'execució controla quines tasques es poden realitzar en l'estat d'execució actual = nivell d'execució (i quines no).

Tradicionalment, aquest procés d'arrencada es realitzava basant-se en les convencions que es van originar amb System V UNIX, amb el sistema que passava executant col·leccions d'scripts que iniciaven i detenen serveis a mesura que la màquina entrava en un nivell d'execució específic (que, en altres paraules, , és una manera diferent d'executar el sistema).

Dins de cada nivell d'execució, es poden configurar serveis individuals perquè s'executin o es tanquin si s'executen. Les últimes versions d'algunes distribucions principals s'estan allunyant de l'estàndard System V a favor d'un gestor de sistemes i serveis força nou anomenat systemd (que significa dimoni del sistema), però normalment admet ordres sysv per a finalitats de compatibilitat. Això vol dir que podeu executar la majoria de les conegudes eines d'inici sysv en una distribució basada en systemd.

Llegiu també: Per què systemd substitueix init a Linux

A més d'iniciar el procés del sistema, init consulta el fitxer /etc/inittab per decidir quin nivell d'execució s'ha d'introduir.

Per canviar entre nivells d'execució, simplement podem emetre un canvi de nivell d'execució mitjançant l'ordre init: init N (on N és un dels nivells d'execució enumerats anteriorment). Tingueu en compte que aquesta no és la manera recomanada de portar un sistema en execució a un nivell d'execució diferent perquè no dóna cap avís als usuaris registrats existents (per tant, fa que perdin treball i que els processos finalitzin de manera anormal).

En comptes d'això, s'hauria d'utilitzar l'ordre shutdown per reiniciar el sistema (que primer envia un missatge d'advertència a tots els usuaris que han iniciat sessió i bloqueja els inicis de sessió posteriors; després indica init per canviar els nivells d'execució); tanmateix, primer s'ha d'editar el nivell d'execució predeterminat (el que arrencarà el sistema) al fitxer /etc/inittab.

Per aquest motiu, seguiu aquests passos per canviar correctament entre els nivells d'execució. Com a root, cerqueu la línia següent a /etc/inittab.

id:2:initdefault:

i canvieu el número 2 per al nivell d'execució desitjat amb el vostre editor de text preferit, com ara vim (que es descriu a Com utilitzar l'editor vi/vim a Linux - Part 2 d'aquesta sèrie).

A continuació, executeu com a root.

# shutdown -r now

Aquesta última ordre reiniciarà el sistema, fent que s'iniciï al nivell d'execució especificat durant el proper arrencada, i executarà els scripts que es troben a /etc/rc[runlevel].d directori per decidir quins serveis s'han d'iniciar i quins no. Per exemple, per al nivell d'execució 2 del sistema següent.

Per habilitar o desactivar els serveis del sistema a l'arrencada, utilitzarem l'ordre chkconfig a CentOS/openSUSE i sysv-rc-conf a Debian i derivats. Aquesta eina també ens pot mostrar quin és l'estat preconfigurat d'un servei per a un nivell d'execució determinat.

Llegiu també: Com aturar i desactivar serveis no desitjats a Linux

Llista de la configuració del nivell d'execució d'un servei.

# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld

A la imatge de dalt podem veure que postfix està configurat per iniciar-se quan el sistema entra als nivells d'execució 2 a 5, mentre que mysqld b> s'executarà per defecte per als nivells d'execució 2 a 4. Ara suposem que aquest no és el comportament esperat.

Per exemple, també hem d'activar mysqld per al nivell d'execució 5 i desactivar el postfix per als nivells d'execució 4 i 5. Això és el que faríem en cada cas (executar el següents ordres com a root).

# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on
# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off

Ara realitzarem tasques similars en un sistema basat en Debian utilitzant sysv-rc-conf.

Configurar un servei perquè s'iniciï automàticament en un nivell d'execució específic i evitar que s'iniciï en tots els altres.

1. Utilitzem l'ordre següent per veure quins són els nivells d'execució on mdadm està configurat per començar.

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

2. Utilitzarem sysv-rc-conf per evitar que mdadm s'iniciï a tots els nivells d'execució excepte 2. Només cal que marqueu o desmarqueu (amb la barra espaiadora) com vulgueu (pots moure't amunt, avall, esquerra i dreta amb les tecles de fletxa).

# sysv-rc-conf

A continuació, premeu q per sortir.

3. Reiniciarem el sistema i tornarem a executar l'ordre del PAS 1.

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

A la imatge de dalt podem veure que mdadm està configurat per començar només al nivell d'execució 2.

Què passa amb systemd?

systemd és un altre gestor de sistemes i serveis que està sent adoptat per diverses distribucions principals de Linux. Pretén permetre que es faci més processament en paral·lel durant l'inici del sistema (a diferència de sysvinit, que sempre acostuma a ser més lent perquè inicia els processos d'un en un, comprova si un depèn d'un altre i espera dimonis per llançar-se perquè puguin començar més serveis) i servir com a gestió dinàmica de recursos per a un sistema en execució.

Així, els serveis s'inicien quan cal (per evitar el consum de recursos del sistema) en lloc de llançar-se sense una raó sòlida durant l'arrencada.

En veure l'estat de tots els processos que s'executen al vostre sistema, tant els serveis natius systemd com els SysV, executeu l'ordre següent.

# systemctl

La columna CARREGAR mostra si la definició de la unitat (consulteu la columna UNIT, que mostra el servei o qualsevol cosa que manté systemd) s'ha carregat correctament, mentre que la ACTIVA< Les columnes i SUB mostren l'estat actual d'aquesta unitat.

Quan la columna ACTIVA indica que l'estat d'una unitat no és actiu, podem comprovar què ha passat fent servir.

# systemctl status [unit]

Per exemple, a la imatge de dalt, media-samba.mount es troba en estat d'error. Anem a correr.

# systemctl status media-samba.mount

Podem veure que media-samba.mount ha fallat perquè el procés de muntatge a l'amfitrió dev1 no ha pogut trobar la xarxa compartida a //192.168.0.10/gacanepa.

Inici o aturada de serveis

Un cop estigui disponible la compartició de xarxa //192.168.0.10/gacanepa, intentem començar, després aturar-nos i, finalment, reiniciar la unitat media-samba.mount. Després de realitzar cada acció, executem systemctl status media-samba.mount per comprovar-ne l'estat.

# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount

A systemd podeu habilitar o desactivar un servei quan s'iniciï.

# systemctl enable [service] 		# enable a service 
# systemctl disable [service] 		# prevent a service from starting at boot

El procés d'habilitar o desactivar un servei perquè s'iniciï automàticament a l'arrencada consisteix a afegir o eliminar enllaços simbòlics al directori /etc/systemd/system/multi-user.target.wants.

Alternativament, podeu esbrinar l'estat actual d'un servei (activat o desactivat) amb l'ordre.

# systemctl is-enabled [service]

Per exemple,

# systemctl is-enabled postfix.service

A més, podeu reiniciar o apagar el sistema amb.

# systemctl reboot
# systemctl shutdown

Arribada

Upstart és un reemplaçament basat en esdeveniments del dimoni /sbin/init i va néixer de la necessitat d'iniciar serveis només, quan són necessaris (també supervisant-los mentre s'estan executant) i gestionen els esdeveniments a mesura que es produeixen, superant així el sistema sysvinit clàssic basat en dependències.

Va ser desenvolupat originalment per a la distribució Ubuntu, però s'utilitza a Red Hat Enterprise Linux 6.0. Tot i que estava pensat per ser adequat per al desplegament en totes les distribucions de Linux com a reemplaçament de sysvinit, amb el temps va ser eclipsat per systemd. El 14 de febrer de 2014, Mark Shuttleworth (fundador de Canonical Ltd.) va anunciar que les futures versions d'Ubuntu utilitzarien systemd com a dimoni d'inici predeterminat.

Com que l'script d'inici SysV per al sistema ha estat tan comú durant tant de temps, un gran nombre de paquets de programari inclouen scripts d'inici SysV. Per acomodar aquests paquets, Upstart ofereix un mode de compatibilitat: executa scripts d'inici de SysV a les ubicacions habituals (/etc/rc.d/rc?.d, /etc/init.d/). rc?.d, /etc/rc?.d o una ubicació similar). Per tant, si instal·lem un paquet que encara no inclou un script de configuració Upstart, encara s'hauria de llançar de la manera habitual.

A més, si hem instal·lat utilitats com chkconfig, hauríeu de poder utilitzar-les per gestionar els vostres serveis basats en SysV tal com ho faríem amb els sistemes basats en sysvinit.

Els scripts d'inici també admeten l'inici o l'aturada de serveis basats en una varietat d'accions més àmplia que els scripts d'inici de SysV; per exemple, Upstart pot llançar un servei sempre que hi hagi connectat un dispositiu de maquinari concret.

Un sistema que utilitza Upstart i els seus scripts natius substitueix exclusivament el fitxer /etc/inittab i els directoris d'scripts d'inici SysV específics del nivell d'execució amb .conf scripts al directori /etc/init.

Aquests scripts *.conf (també coneguts com a definicions de feina) consisteixen generalment en el següent:

    1. Descripció del procés.
    2. Nivells d'execució on s'ha d'executar el procés o esdeveniments que l'han de desencadenar.
    3. Nivells d'execució on s'ha d'aturar el procés o esdeveniments que l'han d'aturar.
    4. Opcions.
    5. Ordre per iniciar el procés.

    Per exemple,

    # My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email >"
    # Stanzas
    
    #
    # Stanzas define when and how a process is started and stopped
    # See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
    # When to start the service
    start on runlevel [2345]
    # When to stop the service
    stop on runlevel [016]
    # Automatically restart process in case of crash
    respawn
    # Specify working directory
    chdir /home/dave/myfiles
    # Specify the process/command (add arguments if needed) to run
    exec bash backup.sh arg1 arg2
    

    Per aplicar els canvis, haureu de dir a Upstart que torni a carregar la seva configuració.

    # initctl reload-configuration
    

    A continuació, inicieu la vostra feina escrivint l'ordre següent.

    $ sudo start yourjobname
    

    On yourjobname és el nom de la feina que s'ha afegit anteriorment amb l'script yourjobname.conf.

    Una guia de referència més completa i detallada per Upstart està disponible al lloc web del projecte al menú \Llibre de cuina.

    Resum

    És necessari un coneixement del procés d'arrencada de Linux per ajudar-vos amb les tasques de resolució de problemes, així com per adaptar el rendiment de l'ordinador i els serveis en execució a les vostres necessitats.

    En aquest article hem analitzat què passa des del moment en què premeu l'interruptor Engegada per encendre la màquina fins que obteniu una interfície d'usuari totalment operativa. Espero que hàgiu après a llegir-lo tant com jo mentre el muntava. No dubteu a deixar els vostres comentaris o preguntes a continuació. Sempre esperem escoltar els nostres lectors!