Colorare il boot di Debian: differenze tra le versioni

m
Nessun oggetto della modifica
 
(10 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Debian Etch 4.0<br/>Debian Lenny 5.0<br/>Debian Squeeze<br/>Debian Sid|}}
{{Versioni compatibili|Jessie|Testing_2017}}
=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>
== Colorare il boot di Debian ==
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.
{{Warningbox | A partire da Debian 8 ([[Jessie]]), [[SysV]] è stato rimpiazzato di default da [[systemd]]. Per cui questa guida si considera interamente compatibile con Jessie e versioni successive, solo installando il pacchetto '''sysvinit-core''', che comporterà la disinstallazione e il rimpiazzo di '''systemd'''.}}
 
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 è <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=
{{Suggerimento | Anziché sovrascrivere il file <code>'''/lib/lsb/init-functions'''</code> è possibile scrivere tutte le funzioni in uno script in <code>/lib/lsb/init-functions.d/</code>, per esempio con nome <code>99-colors</code> così da sovrascrivere per ultimo tutte le definizioni di funzione che vogliamo modificare. In questo modo le modifiche saranno persistenti anche dopo un aggiornamento. E per annullare le modifiche sarà sufficiente eliminare il file creato.
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.
 
In caso invece si sia sovrascritto il file <code>/lib/lsb/init-functions</code>, per annullare le modifiche basta reinstallare il pacchetto '''lsb-base''':
<pre># apt-get --reinstall install lsb-base</pre> }}
 
== Funzionamento di init-functions ==
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:
<pre>
<pre>
log_success_msg
log_success_msg
''Scrive un messaggio coretta esecuzione di un processo.''
''Scrive un messaggio corretta esecuzione di un processo.''


log_warning_msg
log_warning_msg
Riga 30: Riga 38:
</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 51:
<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 70:
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 97:
</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 115:
</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>


==log_begin_msg==
=== log_begin_msg ===
Questa funzione si occupa della parte iniziale dei messaggi relativi alle operazioni sui servizi, come il restart. Il colore utilizzato sarà il "BLUE".
Questa funzione si occupa della parte iniziale dei messaggi relativi alle operazioni sui servizi, come il restart. Il colore utilizzato sarà il "BLUE".


Riga 125: Riga 133:
</pre>
</pre>


==log_daemon_msg==
=== log_daemon_msg ===
Si occupa dei messaggi sulle operazioni di avvio di servizi. Utilizzeremo il colore "BLUE" per la parte iniziale del messaggio mentre utilizzeremo il colore "PINK" per evidenziare il nome del demone su cui si opera.
Si occupa dei messaggi sulle operazioni di avvio di servizi. Utilizzeremo il colore "BLUE" per la parte iniziale del messaggio mentre utilizzeremo il colore "PINK" per evidenziare il nome del demone su cui si opera.


Riga 134: Riga 142:
         return 1
         return 1
     fi
     fi
    log_daemon_msg_pre "$@"
     if [ -z "${2:-}" ]; then
     if [ -z "${2:-}" ]; then
         /bin/echo -n -e "${BLUE}$1:${NORMAL}"
         /bin/echo -n -e "${BLUE}$1:${NORMAL}"
Riga 142: Riga 148:
      
      
     /bin/echo -n -e "${BLUE}$1:${PINK} $2${NORMAL}"
     /bin/echo -n -e "${BLUE}$1:${PINK} $2${NORMAL}"
    log_daemon_msg_post "$@"
}
}
</pre>
</pre>


==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 159: Riga 164:
</pre>
</pre>


==log_end_msg==
=== log_end_msg ===
Lasceremo i colori "YELLOW" e "RED" rispettivamente per i messaggi di ''warning'' e ''fail''.
Lasceremo i colori "YELLOW" e "RED" rispettivamente per i messaggi di ''warning'' e ''fail''.
Aggiungeremo poi il colore "GREEN" per i messaggi di corretta esecuzione del processo. In più aggiungeremo il testo "''done''" prima del "." come conferma di esecuzione.<br>
Aggiungeremo poi il colore "GREEN" per i messaggi di corretta esecuzione del processo. In più aggiungeremo il testo "''done''" prima del "." come conferma di esecuzione.<br>
Riga 172: Riga 177:


     retval=$1
     retval=$1
    log_end_msg_pre "$@"


     # Only do the fancy stuff if we have an appropriate terminal
     # Only do the fancy stuff if we have an appropriate terminal
Riga 185: Riga 188:
         /bin/echo -e " ${RED}failed!${NORMAL}"
         /bin/echo -e " ${RED}failed!${NORMAL}"
     fi
     fi
    log_end_msg_post "$@"
     return $retval
     return $retval
}
}
</pre>
</pre>


==log_action_msg==
=== log_action_msg ===
Questa funzione e le successive stampano le varie azioni compiute sui demoni. Modifichiamo questa sezione come segue:
Questa funzione e le successive stampano le varie azioni compiute sui demoni. Modifichiamo questa sezione come segue:


Riga 211: Riga 213:


log_action_end_msg () {
log_action_end_msg () {
    log_action_end_msg_pre "$@"
      
      
     if [ -z "${2:-}" ]; then
     if [ -z "${2:-}" ]; then
Riga 224: Riga 225:
         /bin/echo -e "${RED}failed${end}${RED}.${NORMAL}"
         /bin/echo -e "${RED}failed${end}${RED}.${NORMAL}"
     fi
     fi
    log_action_end_msg_post "$@"
}
}
</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 ==
Un altro tipo di modifica, meno invasiva, colora solo delle parti specifiche dei messaggi.
Un altro tipo di modifica, meno invasiva, colora solo delle parti specifiche dei messaggi.
In questo caso lasceremo la parte iniziale dei messaggi con il colore predefinito di Bash, mentre coloriamo utilizzando i colori "BLUE" e "GREEN" per colorare rispettivamente il nome del servizio in causa e il risultato dell'operazione.
In questo caso lasceremo la parte iniziale dei messaggi con il colore predefinito di Bash, mentre coloriamo utilizzando i colori "BLUE" e "GREEN" per colorare rispettivamente il nome del servizio in causa e il risultato dell'operazione.
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>


Riga 245: Riga 245:
         return 1
         return 1
     fi
     fi
    log_daemon_msg_pre "$@"


     if [ -z "${2:-}" ]; then
     if [ -z "${2:-}" ]; then
Riga 253: Riga 252:
      
      
     /bin/echo -n -e "$1:${BLUE} $2${NORMAL}"
     /bin/echo -n -e "$1:${BLUE} $2${NORMAL}"
    log_daemon_msg_post "$@"
}
}
</pre>
</pre>
Riga 275: Riga 273:


     retval=$1
     retval=$1
    log_end_msg_pre "$@"


     # Only do the fancy stuff if we have an appropriate terminal
     # Only do the fancy stuff if we have an appropriate terminal
Riga 288: Riga 284:
         /bin/echo -e " ${RED}failed!${NORMAL}"
         /bin/echo -e " ${RED}failed!${NORMAL}"
     fi
     fi
    log_end_msg_post "$@"
     return $retval
     return $retval
}
}
Riga 302: Riga 297:
<pre>
<pre>
log_action_end_msg () {
log_action_end_msg () {
    log_action_end_msg_pre "$@"
   
     if [ -z "${2:-}" ]; then
     if [ -z "${2:-}" ]; then
         end=""
         end=""
Riga 315: Riga 308:
         /bin/echo -e "${RED}failed${end}${RED}.${NORMAL}"
         /bin/echo -e "${RED}failed${end}${RED}.${NORMAL}"
     fi
     fi
    log_action_end_msg_post "$@"
}
}
</pre>
</pre>
<br>
 
: [[Utente:matt|matt]]
{{Autori
----
|Autore = [[Utente:matt|matt]]
[[Categoria:Shell]]
|Verificata_da =
[[Categoria:Tips&Tricks]]
: [[Utente:HAL 9000|HAL 9000]] 09:32, 17 giu 2017 (CEST)
|Numero_revisori = 1
}}
 
[[Categoria:Shell]][[Categoria:Boot]][[Categoria:Ottimizzazione del sistema]]
3 581

contributi