OpenRC
- 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).
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
+netifrc
|
enable Gentoo's network stack (net.* scripts) |
+sysvinit
|
control the dependency on sysvinit (experimental) |
audit
|
Enable support for Linux audit subsystem using sys-process/audit |
bash
|
enable the use of bash in service scripts (experimental) |
caps
|
Use Linux capabilities library to control privilege |
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 |
newnet
|
enable the new network stack (experimental) |
pam
|
Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip |
s6
|
install s6-linux-init |
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.
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":
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:
#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:
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
Vedi sotto per una descrizione su come aggiungere ulteriori livelli d'esecuzione.
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
Registro delle operazioni
Non è necessario avere permessi da root per elencare livelli d'esecuzione e servizi (script d'init) ad essi assegnati
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 implementati come cartelle residenti in /etc/runlevels. Per creare ulteriori livelli (sotto indicati come <runlevel>
) basta eseguire:
root #
install -d /etc/runlevels/<runlevel>
Ulteriori livelli d'esecuzione so utili in quanto forniscono sistemi alternativi profili d'avvio di sistema.
Livelli d'esecuzione impilati
I livelli d'esecuzione impilati sono usati per permettere ad uno di essi di ereditare le azioni da uno o più livelli. Il comando usato per creare livelli d'esecuzione impilati è rc-update -s. Aggiungere un livello d'esecuzione ad un altro porta alla creazione di una dipendenza tale che ogni script d'init (servizio) in un livello d'esecuzione (impilato) venga avviato o fermato con esso.
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.
# rc_hotplug controlla quali servizi possono essere hotplugged.
# Un servizio hotplugged è uno avviato da un gestore dev dinamico quando un coincidente
# dispositivo hardware viene trovato.
# Sevizi hotplugged appaiono nel livello d'esecuzione "hotplugged".
# Se rc_hotplug è impostato con alcun valore, viene confrontato il nome di questo servizio
# con ogni schema nel valore, da sinistra a destra, ed il servizio
# viene autorizzato ad essere hotplugged se coincide o no.
# Schemi possono includere shell wildcards.
# Per prevenire servizi dall'essere hotplugged aggiungere il prefisso "!" agli schemi.
# Se rc_hotplug non è impostato o è vuoto, l'hotplugging è completamente disabilitato.
# Esempio - rc_hotplug="net.wlan !net.*"
# Questo permette a net.wlan ed ogni servizio non coincidente con net.* d'essere hotplugged.
# Esempio - rc_hotplug="!net.*"
# Questo permette a servizi che non coincidono con "net.*" d'essere hotplugged.
Supporto per CGroups
A partire dalla versione 0.12, OpenRC ha supporto esteso per cgroups. Vedi OpenRC/CGroups per dettagli. A partire dalla versione 0.51 di OpenRC crgoups unificati (v2) sono abilitati per impostazione predefinita.
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
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 ed mdev
udev ed mdev sono sistemi disponibili su Gentoo per gestire /dev. Fu disponibile anche eudev, ma è stato rimosso. sys-fs/udev è il predefinito, ma OpenRC dovrebbe essere in grado di funzionare con entrambi, su Gentoo.
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.
Si noti che attualmente molti degli applet di BusyBox sono incompatibili con OpenRC, vedi bug #529086 per dettagli. Siate avvertiti che usare OpenRC con BusyBox potrebbe richiedere vario lavoro d'impostazione. BusyBox è meglio adattato ad un uso "integrato", vedi la sezione precedente riguardante mdev.
BusyBox può essere usato per sostituire la maggior parte degli strumenti nello spazio utente richiesti da OpenRC (init, shell, awk, ed altri strumenti POSIX), [1], tutte le chiamate che normalmente porterebbero ad una separazione/esecuzione verrebbero risparmiate, generalmente migliorando la velocità.
Il file d'init SysV /etc/inittab messo a disposizione da Gentoo non è compatibile con l'init di BusyBox. Qui è un esempio di inittab compatibile con BusyBox:
::sysinit:/sbin/openrc sysinit
::wait:/sbin/openrc boot
::wait:/sbin/openrc
BusyBox mette a disposizione vary applet che possono essere usati per sostituire programmi di terze parti come acpid o dhcp/dhcpcd.
Vedi la documentazione di OpenRC su usare BusyBox con OpenRC.
Risoluzione dei problemi
Riavviare servizi interrotti
OpenRC può riportare lo stato dei servizi a quello a cui è impostato il livello d'esecuzione, garantendone il riavvio automatico.
Per riavviare servizi interrotti dal livello d'esecuzione predefinito, eseguire openrc: I servizi interrotti saranno avviati, ed ogni servizio manualmente eseguito verrà terminato. Per mantenere i servizi manualmente avviati in esecuzione, eseguire openrc --no-stop o in breve openrc -n.
Di predefinito openrc prova ad avviare servizi intoppati, non a riavviarli. Ciò può essere controllato dalle opzioni rc_crashed_stop (predefinito NO) ed rc_crashed_start (predefinito YES) in /etc/rc.conf.
Ripristinare manualmente servizi intoppati
Quando un processo s'intoppa all'avvio, un messaggio d'errore o d'avvertimento sarà mostrato quando si proverà ad avviare, fermare, o mostrare lo stato di un servizio. Ad esempio, quando si usa il servizio "docker":
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
Per risolvere questo problema, eseguire uno zap del servizio:
root #
rc-service docker zap
Vedi anche
- OpenRC/CGroups — OpenRC includes support for cgroups.
- OpenRC/openrc-init — Open-RC's own init system
- OpenRC/Prefix — The following guideline applies to a Gentoo Prefix on RHEL-5.6 amd64 and on Debian 6.0 amd64, for other setups it should be similar.
- OpenRC/Stacked runlevel — a tutorial for setting up complicated networking with the help of stacked runlevel.
- OpenRC/supervise-daemon — OpenRC's daemon supervisor
- OpenRC/Users — an (incomplete) list of distributions and operating systems using OpenRC.
- /etc/local.d — /etc/local.d/ can contain small programs or light scripts to be run when the local service is started or stopped.
- Gentoo AMD64 Handbook - Initscript system
- Il file di configurazione generale di OpenRC, /etc/rc.conf, contiene commenti estensivi.
Risorse esterne
Documentazione di OpenRC
OpenRC ha una propria ed utile documentazione, mantenuta dagli stessi sviluppatori. Sappiate che Gentoo di predefinito non usa tutte le funzioni di OpenRC:
- README
- Guida utente
- guida sui processi d'init di OpenRC - Come usare l'init di OpenRC's (not predefinito in Gentoo).
- guida su agetty - Impostare servizi agetty in OpenRC (Di predefinito, ttys sono generate con sysvinit su Gentoo).
- Usare runit con OpenRC
- Usare S6 con OpenRC
- Usare supervise-daemon - Opzionale supervisione dei processi.
- Usare BusyBox con OpenRC
- Guida sulla scrittura di script di servizio - Per sviluppatori o impacchettatori.
- NOTIZIE - Informazioni importanti riguardanti ogni versione.
- STORIA - Cronologia sulla formazione di OpenRC.
Man pages
- openrc(8) - Stops and starts services for the specified runlevel.
- openrc-run(8) - Interpreter used to process OpenRC service scripts.
- rc-service(8) - Locate and run an OpenRC service with the given arguments.
- rc-status(8) - Show status info about runlevels.
- rc-update(8) - Add and remove services to and from a runlevel.