SysV: differenze tra le versioni

1 798 byte aggiunti ,  21 lug 2019
cambiato avviso, visto che Jessie è ora la LTS e SysV è "legacy"
Nessun oggetto della modifica
(cambiato avviso, visto che Jessie è ora la LTS e SysV è "legacy")
 
(12 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Etch|Lenny|Squeeze 6.0|}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
== Struttura ==
Debian storicamente aveva scelto come proprio [[init|sistema di init]] il '''SysV''', che si distingue per la propria semplicità e potenza, in maniera analoga a buona parte delle altre distribuzioni GNU/Linux.
Infatti, è basata su degli script sensibili a determinate azioni, che vengono linkati a delle directory predefinite (rappresentanti determinati [[runlevel]] ovvero livelli o stati a cui si trova la macchina).
 
Tuattavia a partire da Debian 8 ([[Jessie]]), tale sistema è stato rimpiazzato di default da [[systemd]], il nuovo default nel mondo GNU/Linux. Systemd è comunque in grado di leggere gli script in <code>/etc/init.d</code>, ma ignora il file <code>/etc/inittab</code>, per cui tutto ciò che è lì scritto non avrebbe alcun effetto.


== Struttura ==
Questa guida si considera interamente compatibile con versioni più recenti di Debian solo installando il pacchetto '''sysvinit-core'''. Per farlo, sostituendo systemd o qualunque altro sistema di init installato, è sufficiente con [[privilegi di amministrazione]]:
Debian ha scelto, come proprio sistema di boot, il SysV, che si distingue per la propria semplicità e potenza.
<pre>
Infatti, è basata su degli script sensibili a determinate azioni, che vengono linkati a delle directory predefinite (rappresentanti determinati runlevel ovvero livelli o stati a cui si trova la macchina).
# apt install sysvinit-core
</pre>
Si tenga a mente però che non tutti i pacchetti potrebbero essere installabili, in particolari quelli che si appoggiano alle librerie di '''systemd'''. Si raccomanda pertanto di partire da un'installazione minima, installando solo l'occorrente, anziché ambienti desktop completi con tutte le loro dipendenze e tutti i pacchetti raccomandati.
 
Esaminiamo ora nel dettaglio la struttura di questo interessante sistema, così da capire meglio cosa avviene esattamente al boot della macchina quando si utilizza tale sistema.


Esaminiamo nel dettaglio la struttura di questo interessante sistema, così da capire meglio cosa avviene esattamente al boot della macchina.
== Gli script di <code>init.d</code> ==
== Gli script di <code>init.d</code> ==
Nella directory <code>/etc/init.d</code> sono presenti degli script particolari: il loro compito è quello di gestire i demoni (o servizi, che dir si voglia) quindi di avviarli, fermarli, far rileggere i file di configurazione, controllarne lo stato, nel modo più semplice e comodo.
Nella directory <code>/etc/init.d</code> sono presenti degli script particolari: il loro compito è quello di gestire i demoni (o servizi, che dir si voglia) quindi di avviarli, fermarli, far rileggere i file di configurazione, controllarne lo stato, nel modo più semplice e comodo.
Riga 14: Riga 22:


A questi si aggiungono, poi:
A questi si aggiungono, poi:
; <code>reload</code> : permette la rilettura del file di configurazione;
; <code>reload</code> : permette la rilettura del file di configurazione;
; <code>force-reload</code> : come sopra, ma in maniera forzata;
; <code>force-reload</code> : come sopra, ma in maniera forzata;
; <code>status</code> : mostra a video lo stato del demone;
; <code>status</code> : mostra a video lo stato del demone.
; <code>stats</code> : visualizza delle statistiche sul lavoro del demone.


Si noti che non sempre c'è differenza tra le azioni <code>restart</code>, <code>reload</code> e <code>force-reload</code>.


Sapere come funziona uno script contenuto in <code>/etc/init.d</code> è utile, in quanto ci permette di utilizzarli anche da shell.
Sapere come funziona uno script contenuto in <code>/etc/init.d</code> è utile, in quanto ci permette di utilizzarli anche da shell.
Infatti, se ad esempio volessimo far partire Apache, sarebbe necessario lanciare un semplice:
Infatti, se ad esempio volessimo far partire Apache, sarebbe necessario lanciare un semplice:
<pre>
<pre>
# /etc/init.d/apache start
# /etc/init.d/apache2 start
</pre>
ed il gioco è fatto.
 
Si consiglia però di ricorrere sempre al comando <code>service</code>, in quanto funziona a prescindere dal sistema di init installato e si occupa di avviare lo script in un ambiente pulito. Quindi per esempio per avviare <code>apache2</code> basterà:
<pre>
# service apache start
</pre>
</pre>
ed il gioco è fatto!!!
== I vari <code>rcX.d</code> ==
== I vari <code>rcX.d</code> ==
Come accennato nell'introduzione, gli script sono linkati in alcune directory 'speciali', che ora analizzeremo.
Come accennato nell'introduzione, gli script sono linkati in alcune directory 'speciali', che ora analizzeremo.
I nomi di queste directory sono sempre nella forma <code>rcX.d</code>, dove X rappresenta uno stato tra quelli seguenti:
I nomi di queste directory sono sempre nella forma <code>rcX.d</code>, dove X rappresenta uno stato (''runlevel'') tra quelli seguenti:


=== "0" Shutdown ===
=== "0" Shutdown ===
Riga 69: Riga 81:
:; <code>sysinit</code> : il comando viene eseguito durante il boot del sistema, prima di ogni comando con azione uguale a <code>boot</code>;
:; <code>sysinit</code> : il comando viene eseguito durante il boot del sistema, prima di ogni comando con azione uguale a <code>boot</code>;
;: <code>ctrlaltdel</code> : cosa deve essere fatto quando si riceve il segnale <code>SIGINT</code>;
;: <code>ctrlaltdel</code> : cosa deve essere fatto quando si riceve il segnale <code>SIGINT</code>;
;: <code>kbrequest</code> : cosa deve essere fatto quando si riceve il segnale <code>SIGWINCH</code>;


; <code>comando</code> : il comando da eseguire.
; <code>comando</code> : il comando da eseguire.
Riga 96: Riga 109:
~~:S:wait:/sbin/sulogin
~~:S:wait:/sbin/sulogin
</pre>
</pre>


==== Comportamento per ogni Runlevel ====
==== Comportamento per ogni Runlevel ====
Riga 131: Riga 143:


È possibile disattivare questa caratteristica commentando la riga.
È possibile disattivare questa caratteristica commentando la riga.
Si noti che all'interno di una sessione grafica la sequenza è in genere intercettata dal server grafico e pertanto non avrà effetto. È necessario passare prima a un terminale virtuale, premendo <code>CTRL-ALT-F1</code>.
==== Pressione di <code>ALT + FrecciaSu</code> ====
<pre>
# Action on special keypress (ALT + UpArrow)
#kb1:12345:kbrequest:command...
</pre>
Decommentare la riga, rimuovendo il carattere <code>#</code> prima di <code>kb1</code>, e scrivere il percorso assoluto del comando da eseguire quando si preme <code>ALT + FrecciaSu</code>.
Come per <code>CTRL-ALT-CANC</code> questa sequenza è intercettata dal server grafico all'interno di una sessione grafica. È necessario prima passare a un terminale virtuale.


==== Gestione delle Console ====
==== Gestione delle Console ====
Riga 173: Riga 196:
==== Sintassi ====
==== Sintassi ====
La sintassi del comando è suddivisibile in tre varianti:
La sintassi del comando è suddivisibile in tre varianti:
<pre>
<pre>
update-rc.d [-n] [-f] name remove
# update-rc.d [-n] [-f] name remove
</pre>
</pre>
consente la rimozione di tutti i link nei runlevel relativi al demone <code>''name''</code>
consente la rimozione di tutti i link nei runlevel relativi al demone <code>''name''</code>
Riga 183: Riga 205:


<pre>
<pre>
update-rc.d [-n] name defaults [NN | NN-start NN-stop]
# update-rc.d [-n] name defaults [NN | NN-start NN-stop]
</pre>
</pre>
crea il link di avvio allo script <code>'''/etc/init.d/''name''''''</code> secondo i [[#Valori di default | valori di default]]. È possibile sovrascrivere l'ordine con cui verrà eseguito lo script specificando le due cifre (<code>''NN''</code>), inoltre è possibile fornire valori diversi sia per l'avvio (<code>''NN-start''</code>) che per l'arresto (<code>''NN-stop''</code>).
crea il link di avvio allo script <code>'''/etc/init.d/''name''''''</code> secondo i [[#Valori di default | valori di default]]. È possibile sovrascrivere l'ordine con cui verrà eseguito lo script specificando le due cifre (<code>''NN''</code>), inoltre è possibile fornire valori diversi sia per l'avvio (<code>''NN-start''</code>) che per l'arresto (<code>''NN-stop''</code>).


<pre>
<pre>
update-rc.d [-n] name start|stop NN runlevel runlevel ...  .  start|stop NN runlevel runlevel ...  . ...
# update-rc.d [-n] name start|stop NN runlevel runlevel ...  .  start|stop NN runlevel runlevel ...  . ...
</pre>
</pre>
crea il link di avvio|arresto allo script <code>''name''</code> specificando l'ordine (<code>''NN''</code>) e il/i runlevel. Il carattere <code>''.''</code> separa dichiarazioni multiple.
crea il link di avvio|arresto allo script <code>''name''</code> specificando l'ordine (<code>''NN''</code>) e il/i runlevel. Il carattere <code>''.''</code> separa dichiarazioni multiple.


Vengono riportati alcuni esempi pratici (script <code>''xdm''</code>):
Vengono riportati alcuni esempi pratici (script <code>''xdm''</code>):
Riga 199: Riga 219:
Link per l'avvio:
Link per l'avvio:
<pre>
<pre>
update-rc.d xdm start 99 2 3 4 5
# update-rc.d xdm start 99 2 3 4 5
</pre>
</pre>
Link per l'arresto:
Link per l'arresto:
<pre>
<pre>
update-rc.d xdm stop 01 0 1 6
# update-rc.d xdm stop 01 0 1 6
</pre>
</pre>


Concatenati:
Concatenati:
<pre>
<pre>
update-rc.d xdm start 99 2 3 4 5 . stop 01 0 1 6
# update-rc.d xdm start 99 2 3 4 5 . stop 01 0 1 6
</pre>
</pre>


==== Rimozione di un link ====
==== Rimozione di un link ====
<pre>
<pre>
update-rc.d -f xdm remove
# update-rc.d -f xdm remove
</pre>
</pre>


Riga 219: Riga 239:
Valori di default:
Valori di default:
<pre>
<pre>
update-rc.d xdm defaults
# update-rc.d xdm defaults
</pre>
</pre>


Valori di Default solo relativamente ai runlevel (impostando l'ordine di avvio a 99 e di arresto a 01)
Valori di Default solo relativamente ai runlevel (impostando l'ordine di avvio a 99 e di arresto a 01)
<pre>
<pre>
update-rc.d xdm defaults 99-start 01-stop
# update-rc.d xdm defaults 99-start 01-stop
</pre>
</pre>


Riga 242: Riga 262:


Un'altra funzione degna di nota è la possibilità di avviare e terminare direttamente da questa schermata i servizi. È possibile, infatti, farlo tramite i tasti <code>'''+'''</code> (start, avvio) e <code>'''-'''</code> (stop, arresto) dopo essersi posizionati sulla riga relativa al servizio.
Un'altra funzione degna di nota è la possibilità di avviare e terminare direttamente da questa schermata i servizi. È possibile, infatti, farlo tramite i tasti <code>'''+'''</code> (start, avvio) e <code>'''-'''</code> (stop, arresto) dopo essersi posizionati sulla riga relativa al servizio.
===sysvconfig===
Sysvconfig è un tool molto comodo e funzionale, che permette di modificare i vari runlevel visualizzandoli in una comoda griglia. Una volta posizionati sulla casella da modificare è sufficiente cancellarne il contenuto con il tasto <code>[canc]</code> e inserire l'indicazione <code>Sxx</code> o <code>Kxx</code> (dove il numero <code>''xx''</code> rappresenta l'ordine con il quale deve essere eseguito lo script).
[[Immagine:Sysvconfig.png|thumb|center|Screenshot di sysvconfig]]


=== rcconf ===
=== rcconf ===
Riga 255: Riga 270:
[[Immagine:rcconf.png|thumb|center|Screenshot di rcconf]]
[[Immagine:rcconf.png|thumb|center|Screenshot di rcconf]]


=== ksysv ===
=== BUM ===
Un programma di gestione dei runlevel basato sulle librerie QT ed integrato in KDE.
Boot-Up Manager è un'applicazione scritta in Perl-Gtk2 che permette la configurazione dei runlevel in modo grafico senza la necessità di complesse configurazioni manuali e con una descrizione di ogni singolo servizio.
 
Al primo avvio viene chiesto di specificare il sistema sul quale viene eseguito (Linux -> Debian GNU/Linux).
 
La schermata che ci viene proposta è comoda e ben organizzata: a sinistra abbiamo la lista dei servizi disponibili. A seguire la lista dei runlevel (colonne) suddivisi in due celle: in alto i servizi da avviare, in basso quelli da arrestare. Cliccando su un servizio in un runlevel si possono modificare le impostazioni. Per inserire un servizio è sufficiente trascinarlo nel runlevel designato, come per cancellarlo da un runlevel è sufficiente spostarlo nel cestino ;) .  


[[Immagine:Ksysv.png|thumb|center|Screenshot di KsysV]]
[[Immagine:bum2.png|thumb|center|Screenshot di BUM]]


== <code>rc.local</code> e <code>rc.local_shutdown</code> ==
== <code>rc.local</code> e <code>rc.local_shutdown</code> ==
Alcuni distribuzioni (Slackware per esempio) utilizzano i file <code>/etc/rc.local</code> e <code>/etc/rc.local_shutdown</code> per dare all'amministratore la possibilità di eseguire dei comandi specifici per un certo sistema all'avvio e allo spegnimento della macchina.


Alcuni distribuzioni (Slackware per esempio) utilizzano i file <code>/etc/rc.local</code> e <code>/etc/rc.local_shutdown</code> per dare all'amministratore la possibilità di eseguire dei comandi specifici per un certo sistema all'avvio e allo spegnimento della macchina.  
Su Debian è disponibile soltanto <code>/etc/rc.local</code> come script di avvio.


In Debian lo stesso effetto può essere ottenuto con un singolo script, (lo chiameremo <code>''/etc/init.d/local''</code> in questo esempio). Lo schema generico dello script è:  
Lo stesso effetto può essere ottenuto con un singolo script, (lo chiameremo <code>''/etc/init.d/local''</code> in questo esempio). Lo schema generico dello script è:  


<pre>
<pre>
Riga 296: Riga 308:
</pre>
</pre>


Per fare sì che questo venga eseguito ad ogni avvio aggiungetelo all'elenco dei servizi con il vostro tool preferito o con il comando:
Per fare sì che questo venga eseguito ad ogni avvio, rendetelo eseguibile:
<pre>
# chmod 755 /etc/init.d/local
</pre>


E aggiungetelo all'elenco dei servizi con il vostro tool preferito, per esempio con il comando:
<pre>
<pre>
update-rc.d local start 98 S 1 2 3 4 5 .
# update-rc.d local start 98 S 1 2 3 4 5 .
</pre>
</pre>
Per maggiori informazioni, sulla creazione di un servizio, si rimanda alla guida: [[Gestione e creazione di servizi in Debian]].
{{Autori
|Autore=[[User:MaXeR|MaXeR]]
|Estesa_da=
|Verificata_da=
:[[Utente:HAL 9000|HAL 9000]] 14:57, 21 lug 2019 (CEST)
|Numero_revisori=1
}}
[[Categoria:Boot]]
[[Categoria:Boot]]
3 581

contributi