OpenRC

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page OpenRC and the translation is 80% complete.
Other languages:
Resources
Article status
This article has some todo items:
  • Revisionare per accuratezza e prove.
  • Completare per coprire l'utilizzo basico su Gentoo.
  • Revisionare per precisione, leggibilità, brevità...
  • La sezione sull' Integrazione con BusyBox richiede prove e documentazione (o rimozione).

OpenRC è un sistema d'init basato su dipendenze per sistemi simil-Unix che mantiene compatibilità con il sistema d'init di sistema, solitamente locato in /sbin/init. OpenRC è il sistema d'init nativo di Gentoo, tuttavia altri sono disponibili.

OpenRC avvia i servizi di sistema necessari nell'ordine corretto all'avvio, li gestisce mentre il sistema è in uso, e li termina allo spegnimento. Esso può gestire demoni installati dalla repository di Gentoo, può opzionalmente supervisionare i processi che avvia, ed ha la possibilità di avviare processi in parallelo - quando possibile - per ridurre i tempi d'avvio.

OpenRC è stato sviluppato per Gentoo, ma è progettato in modo tale da poter esser utilizzato su altre distribuzioni Linux e su sistemi BSD. Di predefinito, OpenRC è chiamato da sysvinit, su Gentoo.

Demoni installati esternamente dalla repository di Gentoo, es. software scaricato come codice sorgente e compilato manualmente, potrebbe alle volte richiedere di essere adattato per funzionare con OpenRC (che non sempre è complicato).

Nota
Vedi la sezione sulla documentazione di OpenRC per collegamenti alla documentazione dal progetto stesso di OpenRC. Vedi l'Handbook per informazioni su come OpenRC funziona con il sistema d'init.

Implementazione

OpenRC non richiede grandi e fondamentali cambiamenti sul sul sistema simil-Unix tradizionale. OpenRC si integra con altro software come un componente di un sistema modulare e flessibile. Esso è progettato per essere veloce, leggero, facilmente configurabile, ed adattabile. OpenRC ha solo alcune dipendenze basiche, su componenti chiave di sistema.

Come un sistema d'init moderno, OpenRC ha molte funzioni utili:

  • Supporto per cgroups.
  • Supervizione dei processi.
  • Avvio basato su dipendenze, con avvio dei servizi in parallelo.
  • Risoluzione e riordine automatico delle dipendenze.
  • Initscripts inizializzati dall'hardware.
  • Impostazione dei valori ulimit e nice per servizio attraverso la variabile rc_ulimit.
  • Permette script d'init complessi che avviano più componenti.
  • Architettura modulare, adatta all'infrastruttura preesistente.
  • OpenRC ha il suo opzionale sistema d'init chiamato openrc-init, vedi OpenRC/openrc-init per dettagli.
  • OpenRC ha il suo opzionale supervisore dei processi, vedi OpenRC/supervise-daemon per details.

Vedi l'articolo sulla comparazione d'init di sistema per ulteriori informazioni su di essi.

Installazione

Generalmente OpenRC non richiede un'installazione manuale, ed è messo a disposizione come componente di un profilo OpenRC all'installazione. Esso sarà presente nella stage 3 tarball, e sarà mantenuto tra gli aggiornamenti di sistema.

Opzioni USE

USE flags for sys-apps/openrc OpenRC manages the services, startup and shutdown of a host

audit Enable support for Linux audit subsystem using sys-process/audit
bash enable the use of bash in service scripts (experimental)
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
ncurses Add ncurses support (console display library)
netifrc enable Gentoo's network stack (net.* scripts)
newnet enable the new network stack (experimental)
pam Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
sysv-utils Install sysvinit compatibility scripts for halt, init, poweroff, reboot and shutdown
unicode Add support for Unicode

Se le opzioni USE sono modificate, il pacchetto potrebbe essere ricostruito per applicare i cambiamenti. Per i profili OpenRC, sys-apps/openrc viene come dipendenza di virtual/service-manager, e pertanto non dovrebbe mai essere aggiunto alla lista dei pacchetti selezionati (/var/lib/portage/world file) - l'opzione --oneshot evita di aggiungere OpenRC a questa lista.

root #emerge --ask --oneshot sys-apps/openrc

Configurazione

Files

/etc/rc.conf
Il file di configurazione globale di OpenRC.
Include commenti estensivi che ne documentano la configurazione.
/etc/conf.d
Contiene file di configurazione per initscript individuali.

Registro delle operazioni

OpenRC di predefinito non registra nulla. Per registrare l'output di OpenRC durante l'avvio, decommentare ed impostare l'opzione rc_logger in /etc/rc.conf. Il registro verrà salvato in /var/log/rc.log per impostazione predefinita.

FILE /etc/rc.conf
rc_logger="YES"
#rc_log_path="/var/log/rc.log"

Gestione della rete

OpenRC può essere usato in congiunzione con uno dei molti gestori di rete o anche da solo. Di predefinito, con i profili OpenRC di Gentoo, gli script netifrc sono utilizzati per gestire le connessioni di rete.

Vedi l'articolo sui gestori di rete per averne una lista di opzioni.

Comportamento delle dipendenze

Cambiare le dipendenze predefinite degli script d'init potrebbe essere necessario per accomodare configurazioni più complesse. Vedi /etc/rc.conf per sapere come modificare il comportamento predefinito; fare attenzione all'opzione rc_depend_strict. Inoltre, gli esempi di gestione di rete a seguire mostrano quanto può essere flessibile OpenRC.

Molteplici interfacce di rete (esempio)

Il service SSH deve avviarsi con la rete interna, per esempio eth0 e mai wlan0.

Sovrascrivere la dipendenza "net" da /etc/init.d/sshd, e farla dipendere su "net.eth0":

FILE /etc/conf.d/sshd
rc_need="!net net.eth0"
Molteplici interfacce di rete su multipli livelli d'esecuzione (runlevel) (esempio)

Il servizio SSH deve avviarsi con eth0 (non wlan0) nel livello "default", ma nel livello "office" deve avviarsi con wlan0 (non eth0).

Mantenere il predefinito:

FILE /etc/rc.conf
#rc_depend_strict="YES"

Creare collegamenti simbolici addizionali a sshd con i nomi delle interfacce di rete:

root #ln -s sshd /etc/init.d/sshd.eth0
root #ln -s sshd /etc/init.d/sshd.wlan0

Le impostazioni ora vengono lette da /etc/conf.d/sshd.eth0 e /etc/conf.d/sshd.wlan0:

root #cp /etc/conf.d/sshd /etc/conf.d/sshd.eth0
root #cp /etc/conf.d/sshd /etc/conf.d/sshd.wlan0

Aggiungere le dipendenze:

root #echo 'rc_need="!net net.eth0"' >> /etc/conf.d/sshd.eth0
root #echo 'rc_need="!net net.wlan0"' >> /etc/conf.d/sshd.wlan0

In questo esempio net.eth0 e net.wlan0 leggono le loro impostazioni da /etc/conf.d/net, o /etc/conf.d/net.office in base al livello attivo. Aggiungere tutti gli d'esecuzione (runscript) ai diversi livelli:

root #rc-update add sshd.eth0 default
root #rc-update add sshd.wlan0 office
root #rc-update add net.eth0 default office
root #rc-update add net.wlan0 default office

Per passare tra i livelli d'esecuzione "default" ed "office" senza riavviare il computer, passare al livello "nonetwork" tra di essi. Le interfacce di rete in questo modo verranno fermate, e rileggeranno la loro configurazione specifica al livello. Questo funziona meglio quando "nonetwork" è un livello di mezzo tra "default" ed "office", ed il gestore d'accesso, assieme ad altri servizi non di rete sono aggiunti solamente al livello "nonetwork".

default runlevel <---> nonetwork runlevel <---> office runlevel
root #rc nonetwork && rc office
root #rc nonetwork && rc default

Selezionare un livello d'esecuzione specifico all'avvio

OpenRC legge la linea di comando del kernel usata all'avvio, ed avvierà il livello specificato nel parametro softlevel se dato. Se non viene dato alcun parametro softlevel, il livello "default" sarà usato.

Il seguente esempio mostra una configurazione di grub che permette di avviare il sistema con il livello default oppure nonetwork:

FILE /boot/grub/grub.confgrub.conf d'esempio (GRUB Legacy)
title=Avvio Regolare
 
kernel (hd0,0)/boot/kernel-3.7.10-gentoo-r1 root=/dev/sda3
 
title=Avvio senza Rete
 
kernel (hd0,0)/boot/kernel-3.7.10-gentoo-r1 root=/dev/sda3 softlevel=nonetwork

Uso

Livelli d'esecuzione

OpenRC può essere controllato e configurato utilizzando i comandi openrc, rc-update ed rc-status.

Eliminare un servizio dal livello d'esecuzione predefinito, dove <service> è il nome del servizio da rimuovere:

root #rc-update delete <service> default

Elencazione

Elencare comandi non richiede l'esecuzione da root.

Usare rc-update show -v per elencare tutti gli script d'avvio disponibili ed il loro rispettivo livello d'esecuzione (se sono stati aggiunti ad uno):

user $rc-update show -v

Eseguire rc-update o rc-update show mostrerà solamente gli script d'avvio che sono stati aggiunti ad un livello d'esecuzione.

Alternativamente, il comando rc-status può essere usato con l'opzione --servicelist (-s) per vedere lo stato di tutti i servizi.

user $rc-status --servicelist

Livelli d'esecuzione denominati

I livelli d'esecuzione di OpenRC sono cartelle residenti in /etc/runlevels. Per creare ulteriori livelli basta eseguire:

root #install -d /etc/runlevels/$runlevel

Livelli d'esecuzione impilati

È possibile gestire variazioni utilizzando rc-update -s.

Un esempio d'uso dei livelli d'esecuzione impilati su un portatile per raggruppare i servizi di rete in base al luogo è presente su OpenRC/Stacked runlevel.

Prefisso

Gentoo Prefix installa Gentoo in una posizione alternativa, conosciuta come prefisso, permettendo di installare Gentoo in un altro luogo nella gerarchia del filesystem, evitando così conflitti. Con quest'alternativa, Gentoo Prefix è eseguito senza privilegi, e pertanto né l'utente root né diritti aggiuntivi sono richiesti.

Usando un'alternativa (il luogo "prefisso"), è possibile che molti utenti "alternativi" beneficino di una gran parte dei pacchetti nell'albero di Portage di Gentoo Linux. Attualmente utenti dei seguenti sistemi sono in grado di eseguire Gentoo Prefix con successo: Mac OS X su PPC e x86, Linux su x86, x86_64 e ia64, Solaris 10 su Sparc, Sparc/64, x86 e x86_64, FreeBSD su x86, AIX su PPC, Interix su x86, Windows su x86 (con l'aiuto di Interix), HP-UX su PARISC e ia64.

Demoni installati su prefisso sono già supportati dagli script d'esecuzione di OpenRC, con implementazione completa dal Summer of Code 2012.

OpenRC/Prefix, una guida per provarlo.

Hotplug

OpenRC può essere attivato da eventi esterni, come nuovo hardware da udev. Questo è ciò che il documento di configurazione dice riguardo ai servizi hotplug.

FILE /etc/rc.confrc_hotplug
# rc_hotplug controls which services we allow to be hotplugged.
# A hotplugged service is one started by a dynamic dev manager when a matching
# hardware device is found.
# Hotplugged services appear in the "hotplugged" runlevel.
# If rc_hotplug is set to any value, we compare the name of this service
# to every pattern in the value, from left to right, and we allow the
# service to be hotplugged if it matches a pattern, or if it matches no
# patterns. Patterns can include shell wildcards.
# To disable services from being hotplugged, prefix patterns with "!".
# If rc_hotplug is not set or is empty, all hotplugging is disabled.
# Example - rc_hotplug="net.wlan !net.*"
# This allows net.wlan and any service not matching net.* to be hotplugged.
# Example - rc_hotplug="!net.*"
# This allows services that do not match "net.*" to be hotplugged.

Supporto per CGroups

A partire dalla versione 0.12, OpenRC ha supporto esteso per cgroups. Vedi OpenRC/CGroups per dettagli.

Supporto per chroot

root #mkdir -p /lib64/rc/init.d
root #ln -s /lib64/rc/init.d /run/openrc
root #touch /run/openrc/softlevel
root #emerge --oneshot sys-apps/openrc
FILE /etc/rc.confOpenRC config file
rc_sys="prefix"
rc_controller_cgroups="NO"
rc_depend_strict="NO"
rc_need="!net !dev !udev-mount !sysfs !checkfs !fsck !netmount !logger !clock !modules"

Il sistema potrebbe riportare il seguente messaggio a seguito di un tentativo di avvio di un servizio:

* WARNING: <service> is already starting

Ciò può essere corretto eseguendo il seguente comando:

root #rc-update --update

Integrazione di sistema

compatibilità con systemd

logind

Alcune configurazioni richiedono systemd-logind. Elogind può essere un adeguata alternativa indipendente per logind con OpenRC.

tmpfiles.d

systemd ha una sintassi speciale dei file tmpfiles.d per gestire i file temporanei. sys-apps/systemd-tmpfiles è un gestore a sé stante per i sistemi OpenRC. Esiste anche sys-apps/opentmpfiles, ora deprecato, che fornisce un interprete di tmpfiles.d per OpenRC.

Entrambi possono essere usati per gestire entrate volatili in /sys o /proc.

udev, eudev, ed mdev

udev, eudev, ed mdev sono sistemi disponibili su Gentoo per gestire /dev. sys-fs/udev è il predefinito, ma OpenRC dovrebbe essere in grado di funzionare con ciascuno di essi.

Vecchie installazioni di Gentoo utilizzavano udev come principale fornitore per virtual/udev. In base a bug #575718 questo fu cambiato per eudev, ma ritornò ad udev in bug #807193. Tuttavia, il servizio rc è ancora in /etc/init.d/udev.

Vedi mdev, per gli usi possibili, es. sistemi integrati.

Integrazione di BusyBox

N.B. Questa sezione manca di informazioni su come usare BusyBox con OpenRC.

Please note that there are currently many BusyBox applets that are incompatible with OpenRC, see bug #529086 for details. Be warned that using OpenRC with BusyBox may require some work to set up. BusyBox is more adapted to embedded use, see previous section about mdev.

BusyBox can be used to replace most of the userspace utilities needed by OpenRC (init, shell, awk, and other POSIX tools), by using a complete BusyBox as the shell for OpenRC [1], all the calls that normally would cause a fork/exec would be spared, improving the overall speed.

The SysV-init /etc/inittab file provided by Gentoo is not compatible with the BusyBox init. Here is an example inittab compatible with BusyBox:

FILE /etc/inittabExample inittab compatible with BusyBox init
::sysinit:/sbin/openrc sysinit
::wait:/sbin/openrc boot
::wait:/sbin/openrc

BusyBox provides a number of applets that could be used to replace third party software like acpid or dhcp/dhcpcd.

See the OpenRC documentation on using BusyBox with OpenRC.

Troubleshooting

Respawning crashed services

OpenRC can return state of services to runlevel setting state, to provide stateful init scripts and automatic respawning.

To respawn crashed services from the default runlevel, run openrc: crashed services will be started and any manually-run services will be stopped. To keep manually-started services running, run openrc --no-stop or openrc -n, for short.

By default openrc will attempt to start crashed services, not to restart them. This can be controlled by the rc_crashed_stop (default NO) and rc_crashed_start (default YES) options in /etc/rc.conf.

Manually recovering crashed services

When a process crashes while starting, an error or warning message will be printed when trying to start, stop, or show the status of a service. For example, when using the "docker" service:

root #rc-service docker status
 * status: crashed
root #rc-service docker start
 * WARNING: docker has already been started
root #rc-service docker stop
 * Caching service dependencies ...                                                                                                  [ ok ]
 * Stopping docker ...
 * Failed to stop docker                                                                                                             [ !! ]
 * ERROR: docker failed to stop

To remedy this situation, zap the service:

root #rc-service docker zap

See also

External resources

OpenRC documentation

OpenRC has its own useful documentation, maintained by the OpenRC developers themselves. Be aware that Gentoo does not use all of OpenRC's functionality by default: