Colorare il boot di Debian: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 2: Riga 2:
=Colorare il boot di Debian=
=Colorare il boot di Debian=
Lo scopo di questa guida è quella di colorare i messaggi che scorrono all'avvio del sistema su una debian-box.<br>
Lo scopo di questa guida è quella di colorare i messaggi che scorrono all'avvio del sistema su una debian-box.<br>
Il file che si occupa della stampa a schermo dei log è <tt>'''/lib/lsb/init-functions'''</tt>, fornito dal pacchetto <tt>'''lsb-base'''</tt>, ed è quello che andremo a modificare.
Il file che si occupa della stampa a schermo dei log è <code>'''/lib/lsb/init-functions'''</code>, fornito dal pacchetto <code>'''lsb-base'''</code>, ed è quello che andremo a modificare.
<br>
<br>
Le modifiche che effettueremo non colorano solo i messaggi al boot, ma anche eventuali messaggi stampati su terminale in caso di operazioni sui servizi del sistema (ad esempio il "restart" di un demone).
Le modifiche che effettueremo non colorano solo i messaggi al boot, ma anche eventuali messaggi stampati su terminale in caso di operazioni sui servizi del sistema (ad esempio il "restart" di un demone).


=Funzionamento di init-functions=
=Funzionamento di init-functions=
Qualsiasi comportamento degli script di init del sistema, in ambiente shell, è specificato dal file init-functions. Esso contiene varie funzioni richiamate dagli init-script e si occupa di determinare lo ''status'' e l'identificazione del processo in corso per poi rilasciare dei log delle operazioni.
Qualsiasi comportamento degli script di init del sistema, in ambiente shell, è specificato dal file <code>init-functions</code>. Esso contiene varie funzioni richiamate dagli init-script e si occupa di determinare lo ''status'' e l'identificazione del processo in corso per poi rilasciare dei log delle operazioni.
<br>
<br>
Le sezioni fondamentali del file sono:
Le sezioni fondamentali del file sono:
Riga 30: Riga 30:
</pre>
</pre>


Prima di iniziare è bene conoscere alcune caratteristiche del comando <tt>'''echo'''</tt>, la cui funzione è quella di mostrare a schermo righe di testo.
Prima di iniziare è bene conoscere alcune caratteristiche del comando <code>'''echo'''</code>, la cui funzione è quella di mostrare a schermo righe di testo.
<br>
<br>
In Bash bisogna distinguere due tipi di comandi.
In Bash bisogna distinguere due tipi di comandi.
* Comandi esterni: comandi presi con path assoluto, che fanno parte del sistema operativo e che, di solito, generano un processo separato (forking). Ad esempio:
* Comandi esterni: comandi presi con path assoluto, che fanno parte del sistema operativo e che, di solito, generano un processo separato (forking). Ad esempio:
<pre>/bin/echo</pre>
<pre>/bin/echo</pre>
* Comandi ''builtin'': comandi appartenenti alla serie degli strumenti Bash, e incorporati in essa. Sono usati per aumentarne l'efficienza, in quanto assolvono più rapidamente al loro compito, e perchè particolari builtin necessitano di un accesso diretto alle parti interne della shell. Ad esempio:
* Comandi ''builtin'': comandi appartenenti alla serie degli strumenti Bash, e incorporati in essa. Sono usati per aumentarne l'efficienza, in quanto assolvono più rapidamente al loro compito, e perché particolari builtin necessitano di un accesso diretto alle parti interne della shell. Ad esempio:
<pre>echo</pre>
<pre>echo</pre>
Un builtin può avere un nome identico a quello di un comando di sistema. In questo caso Bash lo reimplementa internamente. Per esempio, il comando Bash "echo" non è uguale a "/bin/echo", sebbene la loro azione sia quasi identica.
Un builtin può avere un nome identico a quello di un comando di sistema. In questo caso Bash lo reimplementa internamente. Per esempio, il comando Bash "echo" non è uguale a "/bin/echo", sebbene la loro azione sia quasi identica.
Riga 43: Riga 43:
<br>
<br>
Altre caratteristiche fondamentali sono le opzioni che seguono il comando ''echo''.
Altre caratteristiche fondamentali sono le opzioni che seguono il comando ''echo''.
* <tt>'''-n'''</tt>: Normalmente, ogni comando echo visualizza una nuova riga. L'opzione ''-n'' annulla questo comportamento e fa sì che il testo successivo sia stampato sulla stessa riga
* <code>'''-n'''</code>: Normalmente, ogni comando echo visualizza una nuova riga. L'opzione ''-n'' annulla questo comportamento e fa sì che il testo successivo sia stampato sulla stessa riga
* <tt>'''-e'''</tt>: Opzione richiesta per poter visualizzare le sequenze di escape.
* <code>'''-e'''</code>: Opzione richiesta per poter visualizzare le sequenze di escape.
<br>
<br>
Le '''sequenze di escape''' sono sequenze di caratteri <u>non stampabili</u> che provocano particolari comportamenti della funzione "echo".
Le '''sequenze di escape''' sono sequenze di caratteri <u>non stampabili</u> che provocano particolari comportamenti della funzione "echo".
I caratteri di escape non stampabili devono essere racchiusi da <tt>'''\033['''</tt> e <tt>'''m'''</tt>.
I caratteri di escape non stampabili devono essere racchiusi da <code>'''\033['''</code> e <code>'''m'''</code>.
<br>
<br>
Le sequenze di escape che utilizzeremo nel nostro script non sono altro che sequenze di caratteri che colorano il testo che lo segue:
Le sequenze di escape che utilizzeremo nel nostro script non sono altro che sequenze di caratteri che colorano il testo che lo segue:
Riga 62: Riga 62:
Normal 0
Normal 0
</pre>
</pre>
La sequenza <tt>''Normal''</tt> si occupa di riportare il colore a quello predefinito della shell.
La sequenza <code>''Normal''</code> si occupa di riportare il colore a quello predefinito della shell.
<br>
<br>
Se vogliamo colorare una porzione di testo è necessario inserire, prima del testo, la sequenza di escape riferita al colore voluto e, eventualmente, terminare il testo con il colore ''Normal'' affinchè il testo successivo non resti colorato.
Se vogliamo colorare una porzione di testo è necessario inserire, prima del testo, la sequenza di escape riferita al colore voluto e, eventualmente, terminare il testo con il colore ''Normal'' affinché il testo successivo non resti colorato.


=Modifica di "init-functions"=
=Modifica di "init-functions"=


==log_use_fancy_output==
==log_use_fancy_output==
Per prima cosa andiamo a definire le sequenze di escape dei colori come variabili, per evitare di dover riscrivere la sequenza ogni volta nei messaggi. In più diamo la possibilità a Bash di evitare di interpretare le sequenze nel caso il nostro sistema non utilizzi la modalità '''fancy output''', il testo colorato, nella funzione ''log_use_fancy_output'', al fine di evitare caratteri incomprensibili nell'output.
Per prima cosa andiamo a definire le sequenze di escape dei colori come variabili, per evitare di dover riscrivere la sequenza ogni volta nei messaggi. In più diamo la possibilità a Bash di evitare di interpretare le sequenze nel caso il nostro sistema non utilizzi la modalità '''fancy output''', il testo colorato, nella funzione <code>log_use_fancy_output</code>, al fine di evitare caratteri incomprensibili nell'output.


<pre>
<pre>
Riga 89: Riga 89:
</pre>
</pre>


Questa parte di codice verrà inserita dopo la sezione <tt>''log_use_fancy_output''</tt>, per esattezza dopo il blocco:
Questa parte di codice verrà inserita dopo la sezione <code>''log_use_fancy_output''</code>, per esattezza dopo il blocco:


<pre>
<pre>
Riga 107: Riga 107:
</pre>
</pre>


Fatto ciò, nella parte successiva del file, andiamo a sostituire il comando builtin <tt>echo</tt> con il comando di sistema <tt>/bin/echo</tt> con l'aggiunta dell'opzione <tt>-e</tt>.
Fatto ciò, nella parte successiva del file, andiamo a sostituire il comando builtin <code>echo</code> con il comando di sistema <code>/bin/echo</code> con l'aggiunta dell'opzione <code>-e</code>.
In seguito aggiungiamo, prima e dopo la parte di testo compresa fra doppi apici che segue il comando echo, le variabili colore precedentemente definite.
In seguito aggiungiamo, prima e dopo la parte di testo compresa fra doppi apici che segue il comando <code>echo</code>, le variabili colore precedentemente definite.
Le variabili definite devono essere inserite fra parentesi '''{ }''' e poste dopo il simbolo del '''$'''.
Le variabili definite devono essere inserite fra parentesi '''{ }''' e poste dopo il simbolo del '''$'''.
<pre>${RED}</pre>
<pre>${RED}</pre>
Riga 147: Riga 147:


==log_progress_msg==
==log_progress_msg==
Stampa il nome del servizio su cui sta operando. Utilizzeremo il "PINK"
Stampa il nome del servizio su cui sta operando. Utilizzeremo il "PINK":


<pre>
<pre>
Riga 228: Riga 228:
</pre>
</pre>


Una modifica di questo tipo colora tutti i messaggi stampati durante l'avvio del sistema. Alcuni init-scripts, però, hanno una propria formattazione del testo di output e questo scavalcherà le direttive di init-functions.
Una modifica di questo tipo colora tutti i messaggi stampati durante l'avvio del sistema. Alcuni init-scripts, però, hanno una propria formattazione del testo di output e questo scavalcherà le direttive di <code>init-functions</code>.


=Una modifica meno invasiva=
=Una modifica meno invasiva=
Riga 235: Riga 235:
Ad esempio:
Ad esempio:
<div style="padding: 10px; background-color: black;color: white;">
<div style="padding: 10px; background-color: black;color: white;">
<tt>Starting GNOME Login Manager:<font color="blue"> gdm</font> <font color="green"> done.</font></tt>
<code>Starting GNOME Login Manager:<font color="blue"> gdm</font> <font color="green"> done.</font></code>
</div>
</div>


6 999

contributi