Devuan e varie distribuzioni Linux prive di sistema forniscono sistemi di inizializzazione alternativi. esegui è tra i più spogli e leggeri. Avere una piccola base di codice semplifica la manutenzione e anche il controllo di bug e problemi di sicurezza. È in grado di funzionare anche su altri Unice come *BSD, MacOSX, ecc. In questo articolo tratterò le basi di runit init con Devuan come base. Tuttavia, la maggior parte dei concetti e dei comandi dovrebbero essere gli stessi per le altre distribuzioni. Puoi fare riferimento ai riferimenti alla fine per apprendere in modo più dettagliato.
Meccanismo di lavoro
Secondo la documentazione ufficiale, runit è uno schema init con supervisione del servizio. Ciò significa che gestisce l'avvio automatico dei servizi durante l'avvio, nonché il monitoraggio e il riavvio. Conformemente alla filosofia UNIX, runit è costituito da vari piccoli strumenti e binari (anche se non al punto da essere gonfio *ahem* sistema *ahem* ) per interagire con esso e altri demoni.
Come con la maggior parte dei sistemi init, il kernel carica il primo processo:/sbin/init
fornito dal programma runit-init(8). Quindi si sostituisce con runit(8). runit è ciò che esegue l'avvio, l'esecuzione e lo spegnimento del sistema e lo fa in tre fasi:
- Fase 1 :
Il sistema esegue le attività di inizializzazione una tantum tramite/etc/runit/1
. Otteniamo un guscio di emergenza se questa fase fallisce. - Fase 2 :
runit avvia/etc/runit/2
che gestisce i runlevel tramite runvdir(8). Questa è la fase in cui si trova il nostro sistema quando è in esecuzione. In questa fase possiamo anche inviare la richiesta di riavvio Ctrl+Alt+Cancella. - Fase 3:
Se/etc/runit/2
ritorna senza errori, che si verifica durante l'arresto o il riavvio del sistema, runit avvia/etc/runit/3
. Le attività di spegnimento vengono eseguite nella fase 3.
Livelli di corsa
Un'installazione standard di runit ha 2 runlevel , default
e single
. Una directory runlevel contiene collegamenti simbolici ad altre directory di servizio. La maggior parte delle attività viene eseguita e la maggior parte dei servizi viene avviata nel default
livello di esecuzione. Ma possiamo creare i nostri runlevel creando una nuova cartella in/etc/runit/runsvdir/
e il collegamento simbolico dei nostri servizi desiderati a quel runlevel. La mia installazione di Devuan ha altri due runlevel creati.
Runit cambia i runlevel cambiando la directory in runsvdir
il programma è in esecuzione. Questo è gestito da runsvchdir
comando.
Ad esempio, per passare al single
livello di esecuzione dell'utente:
# runsvchdir single
Possiamo anche chiedere a runit di avviarsi in un runlevel specifico durante l'avvio invece del default
. Possiamo farlo aggiungendo il runitdir=name
parametro del kernel. Ovviamente, il runlevel name
dovrebbe esistere, ovvero una directory deve essere disponibile in /etc/runit/runsvdir
con quel nome.
Ad esempio, per avviare direttamente la modalità utente singolo (ovvero il single
runlevel), possiamo aggiungere runitdir=single
al parametro del kernel.
In GRUB, possiamo farlo premendo il e
mentre si evidenzia una voce nel menu del bootloader.
Premi Ctrl+X
avvierà il sistema con i parametri forniti, portandoci effettivamente in modalità utente singolo.
Gestione dei servizi
Una directory di servizio contiene i file e gli script necessari per gestire il demone. Le directory di servizio si trovano in /etc/sv
directory.
Queste directory di servizio devono essere collegate simbolicamente a /etc/service
altrimenti runit
non sarà in grado di accedervi.
Creazione del collegamento simbolico in /etc/service
essenzialmente enable
in modo che sia avviato all'avvio. Possiamo disable
un servizio creando un file denominato down
all'interno della directory del servizio.
Sebbene runit abbia diversi programmi, di solito abbiamo solo bisogno di interagire con sv
comando. La sintassi è equivalente a systemd 's systemctl
comando.
Avvio di un servizio:
# sv start <service_name>
Fermarlo:
# sv stop <service_name>
Riavvio o ricarica di un servizio:
# sv restart <service_name>
Verifica lo stato di un servizio:
# sv status <service_name>
C'è anche la riscrittura di sv
comando in Rust chiamato rsv
. Tuttavia, non lo tratterò in questo articolo. Si prega di controllare il link tra i riferimenti sottostanti.
Riferimenti:
- Pagina iniziale dell'unità
- risv
- Artix Wiki | Esegui
- Linux vuoto | Servizi e Demoni – runit