3 581
contributi
S3v (discussione | contributi) (1.0.48) |
m (ridotta la gravità dell'avviso) |
||
(45 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | <!-- | ||
NOTA DI COMMENTO RELATIVA A OGNI NUOVO RILASCIO DI DEBIAN: | |||
* modificare il codename nella riga "#ifeq" sottostante con quello della nuova stable, dopo aver aggiornato questa guida. | |||
* In caso contrario sarà mostrato un messaggio di avvertenza al posto del template "Versioni compatibili". | |||
* Il codename *deve* essere scritto con la prima lettera maiuscola (per esempio: Jessie). | |||
--> | |||
{{#ifeq: {{Codename|Stable}} | Buster | | |||
{{Versioni compatibili}} | | |||
{{Cautionbox | [[Guide@Debianizzati.Org:Passaggio_alla_stable_-_pagine_da_aggiornare | Script non ancora aggiornato]] in seguito al rilascio di Debian {{Codename|Stable}}, pertanto le informazioni restituite riguardo la provenienza dei pacchetti installati nel sistema potrebbero non essere accurate. }} | |||
}} <br/> | |||
== Introduzione == | == Introduzione == | ||
Questo [[script]] permette la creazione di un file contenente informazioni utili che possono aiutare a comprendere meglio il proprio problema oppure che è possibile portare a conoscenza del [http://forum.debianizzati.org forum] per tentare di risolverlo insieme. Le informazioni riguardano i seguenti tipi di problema: | Questo [[script]] permette la creazione di un file contenente informazioni utili che possono aiutare a comprendere meglio il proprio problema oppure che è possibile portare a conoscenza del [http://forum.debianizzati.org forum] per tentare di risolverlo insieme.<br/> | ||
Le informazioni riguardano i seguenti tipi di problema: | |||
* Connessioni di rete | * Connessioni di rete | ||
* Video | * Video | ||
* Avvio del sistema (boot) | |||
* Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui]) | * Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui]) | ||
* Sottosistema di gestione dei pacchetti (APT) | * Sottosistema di gestione dei pacchetti (APT) | ||
* Mount/unmount di periferiche | * Mount/unmount di periferiche | ||
* Touchpad | * Touchpad | ||
* Altro. Verranno inserite nel log solo informazioni generiche (già presenti | * Altro. Verranno inserite nel log solo informazioni generiche (già presenti nel log creato con tutte le tipologie di problema precedenti). | ||
Lo script crea due file: | Lo script crea due file: | ||
;log_''data'':contiene le informazioni in formato testo | ;log_''data'':contiene le informazioni in formato testo | ||
;log_''data''.{bz2, | ;log_''data''.{xz,bz2,gz}:il file precedente ma in formato compresso. Può essere allegato ad una discussione sul forum | ||
Se si vuole, attraverso lo script è anche possibile inviare il file direttamente a [http://paste.debian.net paste.debian.net] per poterlo condividere pubblicamente, in questo caso il file non potrà superare la grandezza complessiva di 240K circa (diviso in parti della dimensione massima di 60K circa) e le informazioni saranno disponibili a chiunque per una settimana.<br/> | Se si vuole, attraverso lo script è anche possibile inviare il file direttamente a [http://paste.debian.net paste.debian.net] per poterlo condividere pubblicamente, in questo caso il file non potrà superare la grandezza complessiva di 240K circa (diviso in parti della dimensione massima di 60K circa) e le informazioni saranno disponibili a chiunque per una settimana.<br/> | ||
Riga 24: | Riga 38: | ||
== Utilizzo == | == Utilizzo == | ||
# Eseguire un upgrade del sistema, se possibile, in modo che le informazioni raccolte dallo script siano aggiornate. | # Eseguire un upgrade del sistema, se possibile, in modo che le informazioni raccolte dallo script siano aggiornate. | ||
# Copiare manualmente il codice dello script in un file di testo. Il nome del file può essere scelto liberamente.< | # Copiare manualmente il codice dello script in un file di testo all'interno di una directory a propria scelta. Il nome del file può essere scelto liberamente, ad esempio <code>scriptlog-debianizzati.org</code>. | ||
# Assegnare i permessi di esecuzione al file appena creato; ad esempio, da terminale o emulatore di terminale:<pre>$ chmod a+x scriptlog-debianizzati.org</pre>In alternativa, se si preferisce, è possibile eseguire il seguente comando:<pre>wget -qO- "http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit"|awk '/=S=/{while(getline&&!index($0,"=F"))print}'|base64 -d|tar xz</pre>con cui verrà creato il file "scriptlog-debianizzati.org" all'interno della directory da cui è stato eseguito il precedente comando. In questo caso vengono automaticamente impostati i permessi di esecuzione per lo script. | |||
# Eseguire lo script con i permessi di [[root]]:<pre># ./ | # Eseguire da terminale (o emulatore di terminale) lo script con i permessi di [[root]]:<pre># ./scriptlog-debianizzati.org</pre>il comando precedente deve essere eseguito nella stessa directory in cui risiede lo script.<br/>L'utilizzo dei permessi di root è motivato dal fatto che alcuni comandi devono essere eseguiti necessariamente come utente privilegiato. | ||
# Leggere le informazioni a video. | # Leggere le informazioni a video. | ||
== Parametri dello script == | == Parametri dello script == | ||
Lo script accetta, in maniera facoltativa, alcuni parametri: | Lo script accetta, in maniera facoltativa, alcuni parametri: | ||
;--tipo={rete|video|audio|apt|mount|touchpad|generico}:specifica il tipo di problema | ;--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}:specifica il tipo di problema | ||
;--nocompress:non crea il file compresso del file di log | ;--nocompress:non crea il file compresso del file di log | ||
;--nopaste:non invia il file di log a paste.debian.net | ;--nopaste:non invia il file di log a paste.debian.net | ||
;--update:aggiorna lo script se esiste una versione recente | |||
;--base64:crea un file contenente la codifica base64 dello script | |||
;--debug:crea un file contenente le informazioni utili per il debug dello script | |||
;--versione:visualizza la versione dello script | |||
;--help:visualizza informazioni sull'utilizzo dei parametri | ;--help:visualizza informazioni sull'utilizzo dei parametri | ||
'''Esempi:''' | |||
<pre> | |||
# ./scriptlog-debianizzati.org --tipo=rete | |||
# ./scriptlog-debianizzati.org --tipo=apt --nocompress --nopaste | |||
# ./scriptlog-debianizzati.org --versione | |||
</pre> | |||
<!-- commento (leggibile per chi modifica la pagina) | |||
*IMPORTANTE* | |||
Se si modifica lo script è *necessario* seguire le istruzioni alla pagina: | |||
http://guide.debianizzati.org/index.php/Aiuto:LogScript | |||
in modo da aggiornare l'archivio in formato Base64 | |||
--> | |||
== Script == | == Script == | ||
<pre> | <pre> | ||
Riga 46: | Riga 84: | ||
# I file creati saranno leggibili e scrivibili da tutti | # I file creati saranno leggibili e scrivibili da tutti | ||
umask 0011 | umask 0011 | ||
# Intercettazione Ctrl+C | |||
trap _exit INT | |||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
Riga 70: | Riga 111: | ||
# Versione script | # Versione script | ||
readonly VERSIONE="1.0. | readonly VERSIONE="1.0.67" | ||
# Path e nome dello script | |||
readonly PATH_NAME="$(readlink -f "${BASH_SOURCE[0]}")" | |||
# Codename per stable e testing. Da modificare nei successivi rilasci di Debian | # Codename per oldstable, stable e testing. Da modificare nei successivi rilasci di Debian | ||
readonly STABLE=" | readonly OLDSTABLE="stretch" | ||
readonly TESTING=" | readonly STABLE="buster" | ||
readonly TESTING="bullseye" | |||
# Path dei comandi dello script | # Path dei comandi dello script | ||
Riga 82: | Riga 127: | ||
readonly log="log_$(date '+%d%b_%H%M%S')" | readonly log="log_$(date '+%d%b_%H%M%S')" | ||
# Nome del file | # Nome del file di debug | ||
# | readonly script_debug="/tmp/script_debug_$(date '+%d%b_%H%M%S')" | ||
# File descriptor per il debug | |||
FD=9 | |||
# URL remoto della pagina contenente lo script | |||
readonly SCRIPTURL="http://guide.debianizzati.org/index.php?title=Creazione_automatica_di_un_file_di_log_per_inviare_quesiti_al_forum&action=edit" | |||
# URL remoto della pagina contenente lo script codificato in base64 | |||
readonly SCRIPTURL_BASE64="http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit" | |||
# nome utente | # nome utente | ||
utente=$(logname) && | utente=$(logname) && | ||
[ "$utente" != "root" ] || { | [ "$utente" != "root" ] || { | ||
# NOTA: "root" è permesso (solo) se scelto esplicitamente dall'utente | |||
tmputente2=$(getent passwd 1000 2> /dev/null | cut -d ":" -f 1) || | |||
tmputente2="" | |||
echo -n "Inserisci il tuo nome utente" | |||
if [ -n "$tmputente2" ]; then | |||
echo -n " (lascia vuoto per \"$tmputente2\"): " | |||
else | |||
echo -n ": " | |||
echo " | |||
fi | fi | ||
read tmputente && | |||
tmputente=${tmputente:-$tmputente2} && | |||
# non può contenere: spazi, tabulazioni, nuove righe; né essere vuota | |||
[ -n "${tmputente##*[[:space:]]*}" ] && | |||
# deve esistere in /etc/passwd (o equivalente) | |||
getent passwd "$tmputente" > /dev/null 2>&1 || { | |||
echo "Nome utente non valido o non esistente!" >&2 | |||
exit 255 | |||
} | |||
utente=$tmputente | |||
unset tmputente | unset tmputente | ||
unset tmputente2 | |||
} | } | ||
readonly utente | readonly utente | ||
Riga 131: | Riga 174: | ||
readonly BOLD="\033[01m" # grassetto | readonly BOLD="\033[01m" # grassetto | ||
readonly FINE="\033[0m" # reset | readonly FINE="\033[0m" # reset | ||
# variabile che vale 1 se systemd è installato | |||
[ "$(ps -o comm= -p 1)" = "systemd" ] && systemd=1 || systemd=0 | |||
readonly systemd | |||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
Riga 154: | Riga 201: | ||
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato | # Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato | ||
function _parm_uso_err { | function _parm_uso_err { | ||
echo "Il parametro | echo "Il parametro $1 non deve essere accompagnato da altri parametri" && _parm_uso | ||
} | } | ||
Riga 162: | Riga 209: | ||
Utilizzo dei parametri: | Utilizzo dei parametri: | ||
$BOLD--tipo={rete|video|audio|apt|mount|touchpad|generico}$FINE | $BOLD--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}$FINE | ||
utilizzato per specificare un solo tipo di problema. | utilizzato per specificare un solo tipo di problema. | ||
Es: --tipo=apt | Es: --tipo=apt | ||
Riga 171: | Riga 218: | ||
$BOLD--nopaste$FINE | $BOLD--nopaste$FINE | ||
non viene inviato il log a paste.debian.net | non viene inviato il log a paste.debian.net | ||
$BOLD--update$FINE | |||
viene aggiornato lo script se è disponibile una nuova versione | |||
$BOLD--base64$FINE | |||
viene creato un file con la codifica base64 dello script | |||
$BOLD--debug$FINE | |||
crea un file contenente le informazioni utili per il debug dello script | |||
$BOLD--versione$FINE | |||
visualizza la versione dello script in esecuzione | |||
$BOLD--help$FINE | $BOLD--help$FINE | ||
Riga 176: | Riga 235: | ||
" && exit | " && exit | ||
} | |||
# Visualizza la versione corrente dello script | |||
function _showvers { | |||
echo "$VERSIONE" && exit | |||
} | } | ||
# Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni | # Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni | ||
# nel passaggio del parametro tipo=blabla | # nel passaggio del parametro tipo=blabla | ||
NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0 | NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0 TIPO_BOOT=0 | ||
TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 | TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0 | ||
DEBUG=0 | |||
while [ $# -gt 0 ] ; do | while [ $# -gt 0 ] ; do | ||
case "$1" in | case "$1" in | ||
"--base64") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || BASE64=1 ;; | |||
"--update") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || UPDATE=1 ;; | |||
"--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1 ;; | "--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1 ;; | ||
"--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1 ;; | "--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1 ;; | ||
Riga 190: | Riga 257: | ||
"--tipo=apt") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_APT=1 ;; | "--tipo=apt") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_APT=1 ;; | ||
"--tipo=video") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_VIDEO=1 ;; | "--tipo=video") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_VIDEO=1 ;; | ||
"--tipo=boot") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_BOOT=1 ;; | |||
"--tipo=audio") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_AUDIO=1 ;; | "--tipo=audio") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_AUDIO=1 ;; | ||
"--tipo=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1 ;; | "--tipo=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1 ;; | ||
"--tipo=touchpad") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_TOUCH=1 ;; | "--tipo=touchpad") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_TOUCH=1 ;; | ||
"--tipo=generico") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_COMM=1 ;; | "--tipo=generico") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_COMM=1 ;; | ||
"--help") [ $BASH_ARGC -gt 1 ] && _parm_uso_err || _parm_uso | "--debug") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || DEBUG=1 ;; | ||
"--versione") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || _showvers ;; | |||
"--help") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || _parm_uso ;; | |||
*) _parm_err | *) _parm_err | ||
esac | esac | ||
shift | shift | ||
done | done | ||
# -------------------------------------------------------------------------- | |||
# Debug | |||
# -------------------------------------------------------------------------- | |||
function _debug { | |||
[ "$DEBUG" -eq 1 ] && [ ! -e /proc/$$/fd/"$FD" ] && | |||
{ | |||
exec {FD}>"$script_debug" | |||
export BASH_XTRACEFD="$FD" | |||
set -x | |||
} | |||
} | |||
function _close_debug { | |||
set +x | |||
exec {FD}>&- | |||
} | |||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
Riga 211: | Riga 298: | ||
* * | * * | ||
* Script che crea un log utile alla risoluzione dei problemi più comuni * | * Script che crea un log utile alla risoluzione dei problemi più comuni * | ||
* Versione | * Versione $VERSIONE * | ||
* * | * * | ||
*********************************************************************************" | *********************************************************************************" | ||
Riga 241: | Riga 328: | ||
# stesso nome di quelli che verranno creati, lo script chiede se cancellarli o meno | # stesso nome di quelli che verranno creati, lo script chiede se cancellarli o meno | ||
local risp | local risp | ||
if [ -f "$log" ] || [ -f "${log}. | if [ -f "$log" ] || [ -f "${log}.xz" ] || [ -f "${log}.bz2" ] || [ -f "${log}.gz" ]; then | ||
echo $'\n'"Esiste già un file ${log}, ${log}. | echo $'\n'"Esiste già un file ${log}, ${log}.xz, ${log}.bz2 o ${log}.gz nella directory corrente." | ||
echo -n "Sovrascivere [S/n]? " | echo -n "Sovrascivere [S/n]? " | ||
read risp | read risp | ||
case "$risp" in | case "$risp" in | ||
""|[Ss]) rm -f -- "$log" "${log}. | ""|[Ss]) rm -f -- "$log" "${log}.xz" "${log}.bz2" "${log}.gz" > /dev/null 2>&1 ;; | ||
*) | *) exit 1 | ||
esac | esac | ||
fi | fi | ||
Riga 375: | Riga 462: | ||
# Funzione che crea il file compresso | # Funzione che crea il file compresso | ||
# Prova a creare nell'ordine: un file . | # Prova a creare nell'ordine: un file .xz, un file .bz2 o un file .gz | ||
function _compress { | function _compress { | ||
# La funzione termina se è stato utilizzato il parametro "--nocompress" | # La funzione termina se è stato utilizzato il parametro "--nocompress" | ||
Riga 387: | Riga 474: | ||
echo "Sta per essere creato un file compresso..." | echo "Sta per essere creato un file compresso..." | ||
sleep 1 | sleep 1 | ||
if | if which xz > /dev/null; then | ||
xz -e < "$log" > "${log}.xz" && _compress_ok || _compress_err | |||
elif | elif which bzip2 > /dev/null; then | ||
bzip2 -9 < "$log" > "${log}.bz2" && _compress_ok || _compress_err | |||
elif which gzip > /dev/null; then | |||
gzip -9 < "$log" > "${log}.gz" && _compress_ok || _compress_err | |||
else | else | ||
echo "Impossibile effettuare la compressione!" >&2 | |||
fi | fi | ||
;; | ;; | ||
Riga 409: | Riga 496: | ||
# Problemi selezionati in base al parametro passato allo script | # Problemi selezionati in base al parametro passato allo script | ||
[ "$TIPO_RETE" -eq 1 ] && _wait && | [ "$TIPO_RETE" -eq 1 ] && _wait && _header "rete" && _rete && return | ||
[ "$TIPO_VIDEO" -eq 1 ] && _wait && | [ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video" && _video && return | ||
[ "$TIPO_AUDIO" -eq 1 ] && _wait && | [ "$TIPO_BOOT" -eq 1 ] && _wait && _header "boot" && _boot && return | ||
[ "$TIPO_APT" -eq 1 ] && _wait && | [ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio" && _audio && return | ||
[ "$TIPO_MNT" -eq 1 ] && _wait && | [ "$TIPO_APT" -eq 1 ] && _wait && _header "APT" && _apt && return | ||
[ "$TIPO_TOUCH" -eq 1 ] && _wait && | [ "$TIPO_MNT" -eq 1 ] && _wait && _header "mount-unmount" && _mount && return | ||
[ "$TIPO_COMM" -eq 1 ] && _wait && | [ "$TIPO_TOUCH" -eq 1 ] && _wait && _header "touchpad" && _tpad && return | ||
[ "$TIPO_COMM" -eq 1 ] && _wait && _header "generico" && _common && return | |||
# La funzione presenta un menù di scelta nel caso non sia stato passato | # La funzione presenta un menù di scelta nel caso non sia stato passato alcun parametro | ||
local num | local num | ||
Riga 426: | Riga 514: | ||
[1] Problemi relativi alle connessioni di rete | [1] Problemi relativi alle connessioni di rete | ||
[2] Problemi video | [2] Problemi video | ||
[3] Problemi audio | [3] Problemi di boot | ||
[ | [4] Problemi audio | ||
[ | [5] Problemi di gestione dei pacchetti (APT) | ||
[ | [6] Problemi di mount/unmount | ||
[ | [7] Problemi di funzionamento del touchpad | ||
[8] Altro tipo di problema | |||
[0] Uscita" | [0] Uscita" | ||
Riga 437: | Riga 526: | ||
read num | read num | ||
case "$num" in | case "$num" in | ||
[1- | [1-8]) _wait ;;& # ;;& -> va alla successiva occorrenza del carattere immesso | ||
1) | 1) _header "rete" && _rete ;;& | ||
2) | 2) _header "video" && _video ;;& | ||
3) | 3) _header "boot" && _boot ;;& | ||
4) _header "audio" && _audio ;;& | |||
5) _header "APT" && _apt ;;& | |||
6) _header "mount-unmount" && _mount ;;& | |||
7) _header "touchpad" && _tpad ;;& | |||
[1- | 8) _header "generico" && _common ;;& | ||
[1-8]) break ;; # Termina il ciclo 'while' | |||
0) _exit ;; # È stato inserito '0' . Uscita dallo script | 0) _exit ;; # È stato inserito '0' . Uscita dallo script | ||
*) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda | *) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda | ||
Riga 458: | Riga 548: | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
# Funzione che stampa solo | # Funzione che stampa solo parentesi e il nome del comando, prima di eseguirlo | ||
function _prompt { | function _prompt { | ||
echo -n "[ ] $*" | echo -n "[ ] $*" | ||
} | } | ||
# Funzione che stampa un pallino | # Funzione che stampa un pallino colorato in base al primo parametro | ||
function _printdot { | |||
function | |||
echo | echo | ||
tput cuu1 # in alto di una riga | tput cuu1 # in alto di una riga | ||
tput cuf1 # a destra di uno spazio | tput cuf1 # a destra di uno spazio | ||
printf %b "$1•${FINE}\n" # stampa pallino e va a capo | |||
} | } | ||
# Funzione che stampa un pallino di colore verde in caso di comando con output | |||
function _ok { _printdot "${VERDE}"; } | |||
# Funzione che stampa una pallino rosso in caso di comando privo di output | # Funzione che stampa una pallino rosso in caso di comando privo di output | ||
function _error { | function _error { _printdot "${ROSSO}"; } | ||
} | |||
# Funzione che stampa in grassetto gli argomenti | # Funzione che stampa in grassetto gli argomenti | ||
function _bold { | function _bold { | ||
printf %b "$BOLD" | printf %b "${BOLD}" | ||
echo -n "$*" | echo -n "$*" | ||
printf %b\\n "$FINE" | printf %b\\n "${FINE}" | ||
} | } | ||
# Funzione che invia nel file di log due righe tra le quali viene visualizzato il | # Funzione che invia nel file di log due righe tra le quali viene visualizzato il | ||
# nome del comando (passato come primo parametro della funzione -> $1) | # nome del comando (passato come primo parametro della funzione -> $1) | ||
function | function _nome_e_riga { | ||
echo " | echo " | ||
****************************************** | ****************************************** | ||
Riga 514: | Riga 583: | ||
} | } | ||
# Funzione che stampa un messaggio di attesa | # Funzione che stampa un messaggio di attesa | ||
function _wait { | function _wait { | ||
echo $'\nCreazione del log in corso...\n' | echo $'\nCreazione del log in corso...\n' | ||
} | |||
# Intestazione del file di log | |||
function _header { | |||
echo "Tipo di problema: $1" >> "$log" | |||
_data | |||
_lastupd | |||
echo "Versione script: $VERSIONE" >> "$log" | |||
} | } | ||
# Stampa la data corrente nel file di log | # Stampa la data corrente nel file di log | ||
function _data { | function _data { | ||
echo "Log creato il $(date '+%d %B %Y alle %H.%M')" >> "$log" | echo "Log creato il: $(date '+%d %B %Y alle %H.%M')" >> "$log" | ||
} | } | ||
Riga 528: | Riga 605: | ||
# Sostituisce il nome utente e il nome host con 'nomeutente' e 'nomehost' se diversi da [dD]ebian | # Sostituisce il nome utente e il nome host con 'nomeutente' e 'nomehost' se diversi da [dD]ebian | ||
[ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log" | if [[ "$nomehost" =~ .*"$utente".* ]]; then | ||
[ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log" | [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log" | ||
[ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log" | |||
else | |||
[ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log" | |||
[ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log" | |||
fi | |||
# Nasconde gli ESSID gestiti attraverso Network Manager | # Nasconde gli ESSID gestiti attraverso Network Manager | ||
Riga 545: | Riga 627: | ||
fi | fi | ||
# Nasconde nel log | # Nasconde nel log i nomi delle connessioni gestite da NetworkManager | ||
sed -i -r "s/(NetworkManager.*keyfile.*((parsing)|(read connection))).*/\1 \*script-removed\*/" "$log" | sed -i -r "s/(NetworkManager.*keyfile.*((parsing)|(read connection))).*/\1 \*script-removed\*/" "$log" | ||
sed -i -r "s/(NetworkManager.*keyfile: new connection.*system-connections\/)(.*)( \(.*,\").*(\"\))/\1\*script-removed\*\3\*script-removed\*\4/g" "$log" | |||
sed -i -r "s/(NetworkManager.*policy: auto-activating connection ').*(')/\1\*script-removed\*\2/g" "$log" | |||
sed -i -r "s/(NetworkManager.*Activation: starting connection ').*(')/\1\*script-removed\*\2/g" "$log" | |||
sed -i -r "s/(NetworkManager.*policy: set ').*(')/\1\*script-removed\*\2/g" "$log" | |||
} | |||
# Invia al log l'output del comando passato come primo parametro e | |||
# con i permessi utente | |||
function _su { | |||
echo "$(su -c "$1" $utente)" >> "$log" | |||
} | } | ||
Riga 562: | Riga 654: | ||
convdate=$(date -d "$lastdate" '+%d %B %Y') | convdate=$(date -d "$lastdate" '+%d %B %Y') | ||
echo $ | echo $"Ultimo aggiornamento del sistema: ${convdate}" >> "$log" | ||
fi | |||
} | |||
# Funzione che effettua l'aggiornamento automatico dello script | |||
function _self_update { | |||
echo -n "Aggiornare questo script [S/n]? " | |||
local risp | |||
read risp | |||
[ "$risp" != "" ] && [ "$risp" != "s" ] && [ "$risp" != "S" ] && _exit || echo "Aggiornamento in corso..." | |||
# Controlla l'esistenza di wget | |||
[ ! "$(which wget)" ] && echo "Impossibile eseguire l'aggiornamento. Installare il pacchetto wget." && _exit | |||
# Ricava la versione remota dello script | |||
local vers="$(wget -q -O- "$SCRIPTURL" | sed -n '/^readonly VERSIONE.*/{p;q}' | cut -d '"' -f2)" | |||
if [ "$vers" = "" ]; then | |||
echo "Connessione non riuscita" && _exit | |||
fi | fi | ||
if [ "$vers" = "$VERSIONE" ]; then | |||
echo "Lo script è gia alla versione più recente" | |||
else | |||
echo -n "È disponibile una nuova versione dello script: " && _bold "$vers" | |||
echo -n "Procedere con l'aggiornamento [S/n]? " | |||
read risp | |||
case "$risp" in | |||
[Ss]|"") | |||
local tempfile="$(mktemp)" # viene creato un file temporaneo | |||
# lo script in formato base64 viene copiato nel file temporaneo | |||
wget -q -O- "$SCRIPTURL_BASE64" | sed -n "/^=S=/{n; :a /^==Fine/ ! {p; n; ba}}" | base64 -d | tar xz -O > "$tempfile" | |||
if [ ! -s "$tempfile" ]; then # Controlla se il file è vuoto | |||
echo "Connessione non riuscita" | |||
else | |||
cp "$tempfile" "$PATH_NAME" | |||
[ $? -eq 0 ] && echo "Aggiornamento effettuato" || echo "Aggiornamento fallito" | |||
#rm -f "$tempfile" # Rimuove il file temporaneo | |||
fi ;; | |||
*) | |||
echo "Non è stato eseguito alcun aggiornamento" | |||
esac | |||
fi | |||
} | |||
# funzione che crea un file con la codifica base64 dello script | |||
# Da utilizzare in caso di aggiornamenti per modificare la pagina | |||
# http://guide.debianizzati.org/index.php/Aiuto:LogScript | |||
function _base64 { | |||
echo -n "Verrà creato un file con la codifica base64 di questo script. Continuare [S/n]? " | |||
local risp | |||
read risp | |||
[ "$risp" != "" ] && [ "$risp" != "s" ] && [ "$risp" != "S" ] && _exit || | |||
local tempfile="$(mktemp)" # crea un file temporaneo | |||
tar cf - "${BASH_SOURCE[0]}" | gzip -9 | base64 > "$tempfile" | |||
if [ $? -eq 0 ]; then | |||
echo -n "Il file contenente la codifica base64 di questo script è " && _bold "$tempfile" | |||
else | |||
echo "Codifica non riuscita" | |||
fi | |||
# Modifica i permessi del file in modo che possa essere letto da tutti | |||
chmod 444 "$tempfile" | |||
} | } | ||
# Funzione che stampa un messaggio che indica i file creati e poi termina lo script | # Funzione che stampa un messaggio che indica i file creati e poi termina lo script | ||
function _exit { | function _exit { | ||
if [ -f "$log" ]; then | |||
# se è stato effettuato un update o una codifica base64 stampa solo il messaggio finale | |||
if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then | |||
local complog="" | |||
if [ -f "$log" ]; then | |||
echo -n $'\nFile contenente il log dello script: ' | |||
_bold "$log" | |||
else | |||
echo $'\nNon è stato creato un file di log' | |||
fi | |||
if [ -f "${log}.xz" ]; then | |||
complog="${log}.xz" | |||
elif [ -f "${log}.bz2" ]; then | |||
complog="${log}.bz2" | |||
elif [ -f "${log}.gz" ]; then | |||
complog="${log}.gz" | |||
fi | |||
if [ -z "$complog" ]; then | |||
echo "Non è stato creato un file compresso del log" | |||
else | |||
echo -n "File compresso da allegare alla discussione sul forum: " | |||
_bold "$complog" | |||
fi | |||
if [ -f "$script_debug" ]; then | |||
echo -n "File contenente l'output di debug: " | |||
_bold "$script_debug" | |||
fi | |||
fi | fi | ||
echo $'Script terminato\n' | |||
_close_debug | |||
exit 0 | exit 0 | ||
} | } | ||
Riga 592: | Riga 766: | ||
# Informazioni comuni a tutti i tipi di problema | # Informazioni comuni a tutti i tipi di problema | ||
function _common { | function _common { | ||
_dmi_decode | _dmi_decode | ||
_comando "/bin/uname -a" | _comando "/bin/uname -a" | ||
Riga 601: | Riga 773: | ||
_comando "/usr/bin/groups" "su" | _comando "/usr/bin/groups" "su" | ||
_file "/var/log/syslog" | _file "/var/log/syslog" | ||
_comando "/bin/systemctl --failed --no-pager" | |||
_comando "/bin/journalctl -x -b --no-pager" | |||
_comando "/bin/journalctl -x -b --no-pager -p err" | |||
_comando "/bin/journalctl -x -b --no-pager -p warning" | |||
_comando "/usr/bin/systemd-cgtop -b --iterations=5" | |||
_comando "/usr/bin/systemd-cgls -l" | |||
_comando "/usr/bin/systemd-delta" | |||
_comando "/bin/dmesg -l err" | _comando "/bin/dmesg -l err" | ||
_comando "/bin/dmesg -l warn" | _comando "/bin/dmesg -l warn" | ||
Riga 606: | Riga 785: | ||
_comando "/usr/bin/lspci -knn" | _comando "/usr/bin/lspci -knn" | ||
_comando "/usr/bin/lsusb" | _comando "/usr/bin/lsusb" | ||
_comando "/sbin/fdisk -l" | _comando "/sbin/fdisk -l" | ||
_comando "/sbin/blkid" | |||
_file "/etc/fstab" | _file "/etc/fstab" | ||
_dir "/etc/fstab.d/" | |||
_comando "/bin/findmnt" | _comando "/bin/findmnt" | ||
_comando "/bin/lsblk" | |||
_comando "/bin/df" | _comando "/bin/df" | ||
_dir "/etc/modprobe.d/" | |||
_dir "/etc/modules-load.d/" | |||
_file "/etc/modules" | |||
_file "/etc/apt/sources.list" | |||
_dir "/etc/apt/sources.list.d/" | |||
_comando "/usr/bin/apt-cache policy" | _comando "/usr/bin/apt-cache policy" | ||
_comando "/usr/bin/apt-cache stats" | _comando "/usr/bin/apt-cache stats" | ||
_comando "/usr/bin/dpkg --audit" | |||
_comando "/usr/bin/apt-get check" | _comando "/usr/bin/apt-get check" | ||
_firmware | _firmware | ||
Riga 619: | Riga 805: | ||
_pack "linux-headers" | _pack "linux-headers" | ||
_pack "linux-image" | _pack "linux-image" | ||
_comando "/usr/sbin/dkms status" | |||
} | } | ||
Riga 625: | Riga 812: | ||
_common | _common | ||
_file "/etc/network/interfaces" | _file "/etc/network/interfaces" | ||
_dir "/etc/network/interfaces.d/" | |||
_file "/etc/hosts" | _file "/etc/hosts" | ||
_comando "/sbin/ifconfig" | _comando "/sbin/ifconfig" | ||
_comando "/sbin/ifconfig -a" | _comando "/sbin/ifconfig -a" | ||
_comando "/sbin/ip -s -d link show" | |||
_comando "/usr/sbin/rfkill list all" | _comando "/usr/sbin/rfkill list all" | ||
_comando "/bin/ping -c3 8.8.8.8" #DNS di Google 8.8.8.8 | _comando "/bin/ping -c3 -W5 8.8.8.8" #DNS di Google 8.8.8.8 | ||
_comando "/bin/ip addr" | _comando "/bin/ip addr" | ||
_comando "/bin/ip route list" | _comando "/bin/ip route list" | ||
Riga 652: | Riga 841: | ||
_dir "/etc/X11/xorg.conf.d/" | _dir "/etc/X11/xorg.conf.d/" | ||
_file "/var/log/Xorg.0.log" | _file "/var/log/Xorg.0.log" | ||
_file "${utente}/.local/share/xorg/Xorg.0.log" | |||
_pack "xserver-xorg" | _pack "xserver-xorg" | ||
_pack "nouveau" | _pack "nouveau" | ||
Riga 658: | Riga 847: | ||
_pack "mesa" | _pack "mesa" | ||
_pack "fglrx" | _pack "fglrx" | ||
} | |||
# Funzione relativa ai problemi di avvio del sistema | |||
function _boot { | |||
_common | |||
_file "/etc/default/grub" | |||
_file "/boot/grub/grub.cfg" | |||
_dir "/etc/default/grub.d/" | |||
_dir "/etc/grub.d/" | |||
_file "/boot/grub/device.map" | |||
_comando "/usr/sbin/grub-mkdevicemap" | |||
_pack grub | |||
} | } | ||
Riga 664: | Riga 865: | ||
_common | _common | ||
_pack "alsa" | _pack "alsa" | ||
_nome_e_riga "dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel'" | |||
_prompt "ALSA dmesg" | |||
dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> "$log" && _ok || _error | |||
local risp alsaurl="http://www.alsa-project.org/alsa-info.sh" | local risp alsaurl="http://www.alsa-project.org/alsa-info.sh" | ||
Riga 688: | Riga 892: | ||
# Imposta i permessi dello script scaricato | # Imposta i permessi dello script scaricato | ||
chmod 777 "$tempfile" | chmod 777 "$tempfile" | ||
_nome_e_riga "Problemi audio" | |||
# rimuove il comando "dmesg" dallo script ALSA | |||
# perché non eseguibile da utente normale (il comando è | |||
# stato inserito a parte in questa funzione) | |||
sed -i "/^$(printf '\t')withdmesg/d" "$tempfile" | |||
# Esegue lo script ALSA | # Esegue lo script ALSA | ||
_prompt "Esecuzione script ALSA" | _prompt "Esecuzione script ALSA" | ||
_su "$tempfile --stdout" && _ok || _error | |||
else | else | ||
_error "Download script ALSA fallito" | _error "Download script ALSA fallito" | ||
Riga 712: | Riga 920: | ||
_common | _common | ||
_comando "/usr/bin/dpkg --print-architecture" | _comando "/usr/bin/dpkg --print-architecture" | ||
_comando "/usr/bin/dpkg --print-foreign-architectures" | |||
_comando "/usr/bin/apt-get update" | _comando "/usr/bin/apt-get update" | ||
_comando "/usr/bin/apt-get -s -y upgrade" | _comando "/usr/bin/apt-get -s -y upgrade" | ||
Riga 753: | Riga 962: | ||
function _file { | function _file { | ||
_nome_e_riga "$1" | |||
_prompt "$1" | _prompt "$1" | ||
if [ -f "$1" ]; then | if [ -f "$1" ]; then | ||
case "$1" in | case "$1" in | ||
/etc/fstab) | |||
# Nasconde username,password e dominio di mount cifs | |||
sed -e "s/\( cifs.*username *= *\)[^,]*/\1\*script-removed\*/" \ | |||
-e "s/\( cifs.*password *= *\)[^,]*/\1\*script-removed\*/" \ | |||
-e "s/\( cifs.*domain *= *\)[^,]*/\1\*script-removed\*/" "$1" &>> "$log" && _ok || _error ;; | |||
/etc/network/interfaces) | /etc/network/interfaces) | ||
# Nasconde nel log gli ESSID e le password criptate contenute in /etc/network/interfaces | |||
sed -r "s/((wpa-ssid)|(wpa-psk)|(wpa-identity)|(wpa-password)|(wireless-key)).*/\1 \*script-removed\*/" "$1" &>> "$log" && _ok || _error ;; | |||
/var/log/syslog) | /var/log/syslog) | ||
# se è installato systemd, il log viene ricavato da "journalctl -x" | |||
if [ $systemd -eq 0 ]; then | |||
# se il file contiene la stringa "rsyslogd.*start" ... | # se il file contiene la stringa "rsyslogd.*start" ... | ||
if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then | if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then | ||
Riga 769: | Riga 985: | ||
# in questo caso l'intero contenuto del file syslog viene inviato al log | # in questo caso l'intero contenuto del file syslog viene inviato al log | ||
cat "$1" &>> "$log" && _ok || _error | cat "$1" &>> "$log" && _ok || _error | ||
_nome_e_riga "$1".1 | |||
_prompt "$1".1 | _prompt "$1".1 | ||
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error | sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error | ||
fi ;; | fi | ||
else _error # systemd è installato. I log vengono ricavati da "journalctl -x" | |||
fi ;; | |||
*) | *) | ||
# per tutti i file non specificati sopra... | |||
cat "$1" &>> "$log" && _ok || _error | |||
esac | esac | ||
else | else | ||
Riga 798: | Riga 1 016: | ||
local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path | local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path | ||
local var2=${1%% *} # var2 conterrà il comando ($1) privo di eventuali opzioni ma con il path | local var2=${1%% *} # var2 conterrà il comando ($1) privo di eventuali opzioni ma con il path | ||
_nome_e_riga "$var" | |||
_prompt "$var" | _prompt "$var" | ||
if [ -f "$var2" ]; then # il comando esiste? | if [ -f "$var2" ]; then # il comando esiste? | ||
if [ $# -eq 2 ]; then # Se vi sono 2 parametri, viene | if [ $# -eq 2 ]; then # Se vi sono 2 parametri, viene chiamata la funzione "_su" | ||
case "$1" in | case "$1" in | ||
"/usr/bin/synclient -l") | "/usr/bin/synclient -l") | ||
# se $DISPLAY è vuota, usa :0 (default per il primo server X) | # se $DISPLAY è vuota, usa :0 (default per il primo server X) | ||
_su "DISPLAY=${DISPLAY:-:0} $1" && _ok || _error ;; | |||
*) | *) | ||
_su "$1" && _ok || _error | |||
esac | esac | ||
else # non viene utilizzato "su" | else # non viene utilizzato "su" | ||
Riga 826: | Riga 1 044: | ||
# nasconde gli ESSID visualizzati da "nmcli device show" (solo per Jessie e superiori) | # nasconde gli ESSID visualizzati da "nmcli device show" (solo per Jessie e superiori) | ||
"/usr/bin/nmcli device show") | "/usr/bin/nmcli device show") | ||
nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \ | LANG=C nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*|GENERAL.CONNECTION:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \ | ||
( _error && echo "Comando valido solo per Jessie" >> "$log" ) ;; | ( _error && echo "Comando valido solo per Jessie e versioni superiori" >> "$log" ) ;; | ||
/bin/dmesg*) | |||
# Il comando viene eseguito solo se è non installato systemd | |||
[ $systemd -eq 0 ] && $1 &>> "$log" && _ok || _error ;; | |||
"/usr/sbin/grub-mkdevicemap") | |||
local devicemaptempfile="$(mktemp)" && \ | |||
grub-mkdevicemap -m "$devicemaptempfile" && \ | |||
if [ -f "$devicemaptempfile" ]; then cat "$devicemaptempfile" >> "$log"; fi && _ok || _error ;; | |||
*) | *) | ||
# per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log | # per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log | ||
Riga 840: | Riga 1 065: | ||
# Funzione che invia il contenuto dei file di una directory al file di log | # Funzione che invia il contenuto dei file di una directory al file di log | ||
function _dir { | function _dir { | ||
_nome_e_riga "$1" | |||
_prompt "$1" | _prompt "$1" | ||
Riga 849: | Riga 1 074: | ||
fi | fi | ||
local file | local file | ||
# numfile contiene il numero di file contenuti nella directory. Solo primo livello. | # numfile contiene il numero di file contenuti nella directory. Solo primo livello. | ||
Riga 859: | Riga 1 083: | ||
echo "La directory non contiene file o directory" >> "$log" && _error | echo "La directory non contiene file o directory" >> "$log" && _error | ||
else | else | ||
echo "La directory contiene ${numfile} file e $(( | echo "La directory contiene ${numfile} file e $((numdir - 1)) directory" >> "$log" && _ok | ||
ls -al "$1" >> "$log" | ls -al "$1" >> "$log" | ||
# invia al log il contenuto dei file della directory | # invia al log il contenuto dei file della directory | ||
for file in "$1"*; do | for file in "$1"*; do | ||
if [ -f "$file" ]; then | if [ -f "$file" ]; then | ||
_nome_e_riga "$file" | |||
_prompt "$file" | _prompt "$file" | ||
cat "$file" &>> "$log" && _ok || _error | cat "$file" &>> "$log" && _ok || _error | ||
Riga 881: | Riga 1 105: | ||
} | } | ||
# Funzione che elenca i pacchetti installati | # Funzione che elenca i pacchetti installati che contengono la parola | ||
# passata come parametro ($1) | # passata come parametro ($1) | ||
function _pack { | function _pack { | ||
_nome_e_riga "Pacchetti che contengono \"$1\"" | |||
_prompt "$1" | _prompt "Nomi di pacchetti con $1" | ||
# Variabile che contiene i pacchetti trovati | # Variabile che contiene i pacchetti trovati | ||
Riga 910: | Riga 1 134: | ||
# vers = versione del demone ; var = nome dello script d'avvio del demone | # vers = versione del demone ; var = nome dello script d'avvio del demone | ||
local vers="" var="" | local vers="" var="" | ||
_nome_e_riga "$2" | |||
_prompt "$2" | _prompt "$2" | ||
if [ -f "$1" ]; then | if [ -f "$1" ]; then | ||
Riga 939: | Riga 1 163: | ||
function _dmi_decode { | function _dmi_decode { | ||
local var="/sys/class/dmi/id/*" | local var="/sys/class/dmi/id/*" | ||
_nome_e_riga "$var" | |||
_prompt "$var" | _prompt "$var" | ||
if [ -f /sys/class/dmi/id/sys_vendor ]; then | if [ -f /sys/class/dmi/id/sys_vendor ]; then | ||
Riga 955: | Riga 1 179: | ||
local i var="Firmware" | local i var="Firmware" | ||
_prompt "$var" | _prompt "$var" | ||
_nome_e_riga "$var" | |||
dpkg -l | grep -i firmware >> "$log" && _ok | dpkg -l | grep -i firmware >> "$log" && _ok || _error | ||
echo >> "$log" | echo >> "$log" | ||
Riga 963: | Riga 1 187: | ||
if [ -d "$i" ]; then | if [ -d "$i" ]; then | ||
echo "Contenuto di ${i}" >> "$log" | echo "Contenuto di ${i}" >> "$log" | ||
ls - | ls -alR "$i" >> "$log" | ||
else | else | ||
echo "${i} non trovata" >> "$log" | echo "${i} non trovata" >> "$log" | ||
Riga 1 012: | Riga 1 236: | ||
# Funzione che "cerca" di ricavare il nome e la versione del DE/WM utilizzato | # Funzione che "cerca" di ricavare il nome e la versione del DE/WM utilizzato | ||
function _de_wm { | function _de_wm { | ||
_nome_e_riga "Desktop Environment - Window Manager" | |||
_prompt "DE/WM" | _prompt "DE/WM" | ||
{ | { | ||
Riga 1 026: | Riga 1 250: | ||
# in esecuzione | # in esecuzione | ||
echo -n "In esecuzione: " >> "$log" | echo -n "In esecuzione: " >> "$log" | ||
if _is_running "ksmserver"; then kde4-config - | if _is_running "ksmserver"; then | ||
elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok || _error # | kf5-config -v 2>/dev/null >> "$log" || # KDE5 | ||
kde4-config -v 2>/dev/null >> "$log" && _ok || _error # KDE4 | |||
elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok || _error # GNOME Shell | |||
elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok || _error # Xfce4 | elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok || _error # Xfce4 | ||
elif _is_running "openbox"; then | elif _is_running "openbox"; then | ||
if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then | if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then | ||
echo -n "(altro x-session-manager) + " >> "$log" | echo -n "(altro x-session-manager) + " >> "$log" # Session manager (LXDE?) + Openbox | ||
fi | fi | ||
openbox --version | head -n 1 >> "$log" && _ok || _error # Openbox | openbox --version | head -n 1 >> "$log" && _ok || _error # Openbox | ||
else | else | ||
echo "Sconosciuto" >> "$log" && _error | echo "Sconosciuto" >> "$log" && _error # NON TROVATO | ||
fi | fi | ||
} | } | ||
Riga 1 042: | Riga 1 268: | ||
function _extpack { | function _extpack { | ||
local riga indirizzo rel linea release="" | |||
# variabile con il contenuto del file sources.list (solo righe che iniziano con deb | |||
# e che contengono "main" ) | |||
local sourceslist="$(sed -e '/^deb /!d' -e '/.* main.*/!d' /etc/apt/sources.list)" | |||
# variabile che contiene l'output del comando "apt-cache policy" | |||
local aptcachepol="$(apt-cache policy)" | |||
# ciclo sulle righe della variabile "sourceslist" | |||
while read linea; do | |||
# variabile che contiene l'URL dell'archivio (es. http://ftp.it.debian.org/debian/) | |||
indirizzo="$(echo "$linea" | awk '{print $2}')" | |||
# sostituisce / con \/ (necessario per il successivo sed) | |||
indirizzo="${indirizzo//\//\\/}" | |||
# release della riga corrente (es. wheezy o testing o sid) | |||
rel="$(echo "$linea" | awk '{print $3}')" | |||
# controlla che sia un nome di release valido | |||
if [ "$rel" = "oldstable" ] || [ "$rel" = "stable" ] || [ "$rel" = "testing" ] || [ "$rel" = "unstable" ] || | |||
[ "$rel" = "$OLDSTABLE" ] || [ "$rel" = "$STABLE" ] || [ "$rel" = "$TESTING" ] || [ "$rel" = "sid" ]; then | |||
# controlla che sia un repository di Debian | |||
# si basa sull'output di "apt-cache policy" e su o=Debian e l=Debian | |||
riga="$(echo "$aptcachepol" | sed -n '/'$indirizzo'*.*'$rel'\/main.*Packages$/ {N; /.*o=Debian,.*l=Debian,/p}')" | |||
# se è un archivio valido, aggiorna la variabile "release" | |||
if [ ! -z "$riga" ]; then | |||
if [ -z "$release" ]; then | |||
release="$rel" | |||
else | |||
release="$(printf %b "$release\n$rel")" | |||
fi | |||
fi | |||
fi | |||
done <<< "$sourceslist" | |||
local var="Pacchetti esterni" | |||
_prompt "$var" | |||
# Lo script DEVE rilevare almeno una release. Se la variabile "release" è nulla, c'è un errore in "sources.list" | |||
# oppure non è stato eseguito un aggiornamento della lista dei pacchetti (update) | |||
# (vedere anche il modo in cui viene ricavata la variabile "release" in alto) | |||
if [ -z "$release" ]; then | |||
_nome_e_riga "${var} all'archivio \"NON RILEVATO!\"" | |||
echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error | echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error | ||
return 1 | return 1 | ||
fi | |||
# Rimuove eventuali duplicati (esistono repository doppi in sources.list) | |||
release="$(echo "$release" | sort -u)" | |||
# Numero di release trovate | |||
local num=$(echo "$release" | wc -l) | |||
# Se il numero di release è diverso da 1 (pinning?), la funzione termina | |||
if [ "$num" -ne 1 ]; then | |||
_nome_e_riga "$var" | |||
echo "Sono presenti ${num} release in sources.list" >> "$log" && _error | |||
return | |||
fi | |||
local pkg="" | |||
# Se il numero di release è uguale a 1, la variabile pkg conterrà i pacchetti *non* facenti parte della release | |||
case "$release" in | |||
"$OLDSTABLE"|oldstable) | |||
release="oldstable" | |||
pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aoldstable' --disable-columns | column -t) ;; | |||
"$STABLE"|stable) | |||
release="stable" | |||
pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Astable' --disable-columns | column -t) ;; | |||
"$TESTING"|testing) | |||
release="testing" | |||
pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Atesting' --disable-columns | column -t) ;; | |||
sid|unstable) | |||
release="unstable" | |||
pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aunstable' --disable-columns | column -t) ;; | |||
esac | |||
# Invia al log il contenuto di pkg (se esiste) | |||
_nome_e_riga "${var} all'archivio \"${release}\"" | |||
if [ -z "$pkg" ]; then | |||
echo "Nessun pacchetto esterno installato" >> "$log" && _error | echo "Nessun pacchetto esterno installato" >> "$log" && _error | ||
else | |||
echo "$pkg" >> "$log" && _ok | echo "$pkg" >> "$log" && _ok | ||
fi | |||
} | } | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
# Main | # Main | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
clear | clear | ||
_intro | _intro | ||
_avvertenze | |||
_check | if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then | ||
_scelta | _debug | ||
_hide | _avvertenze | ||
_upload | _check | ||
_compress | _scelta | ||
_hide | |||
_upload | |||
_compress | |||
elif [ "$UPDATE" -eq 1 ]; then | |||
_self_update | |||
elif [ "$BASE64" -eq 1 ]; then | |||
_base64 | |||
fi | |||
_exit | _exit | ||
</pre> | </pre> | ||
== Changelog == | == Changelog == | ||
<!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) --> | <!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) --> | ||
;1.0.67 | |||
:''Aggiornamento per rilascio di Debian 10 ([[Buster]])'' | |||
:[[Utente:HAL 9000|HAL 9000]] 09:39, 7 lug 2019 (CEST) | |||
;1.0.66 | |||
:''Aggiunto problema per avvio del sistema (boot)'' | |||
:''Aggiunta funzione _su (c'erano problemi con lo script ALSA)'' | |||
:''Aggiunte directory <code>/etc/fstab/</code>, <code>/etc/modprobe.d/</code>'', | |||
:''<code>/etc/modules-load.d/</code>, <code>/etc/network/interfaces.d/</code> e il'' | |||
:''file <code>/etc/modules</code>'' | |||
:''dmesg dello scipt ALSA spostato nello script'' | |||
:''Modifiche e correzioni minori'' | |||
:[[Utente:S3v|S3v]] 10:37, 29 giu 2019 (CEST) | |||
;1.0.65 | |||
:''Aggiunti "ip -s -d link show" e Xorg.0.log locale'' | |||
:''Nascosti username, password e dominio per montaggi cifs'' | |||
:''Modifiche e correzioni minori'' | |||
:[[Utente:S3v|S3v]] 20:49, 20 feb 2018 (CET) | |||
;1.0.64 | |||
:''Aggiornamento per rilascio di Debian 9 ([[Stretch]])'' | |||
:[[Utente:HAL 9000|HAL 9000]] 10:46, 18 giu 2017 (CEST) | |||
;1.0.63 | |||
:''Debug come parametro'' | |||
:''KDE5 tra i DE rilevati'' | |||
:[[Utente:S3v|S3v]] 22:38, 19 mag 2017 (CEST) | |||
;1.0.62 | |||
:''Inserito debug'' | |||
:''Inserita funzione _printdot (per evitare ripetizioni)'' | |||
:''Modifiche minori'' | |||
:[[Utente:S3v|S3v]] 17:41, 26 feb 2017 (CET) | |||
;1.0.61 | |||
:''Aggiunta funzione _header() (intestazione del file di log)'' | |||
:''Aggiunto parametro "--versione"'' | |||
:''Modifiche e correzioni minori'' | |||
:[[Utente:S3v|S3v]] 13:53, 10 dic 2016 (CET) | |||
;1.0.60 | |||
:''Elenco ricorsivo delle directory contenenti firmware'' | |||
:''Nascosti (altri) ID di connessioni gestite da NM'' | |||
:[[Utente:S3v|S3v]] 20:53, 6 dic 2016 (CET) | |||
;1.0.59 | |||
:''Modificata funzione _hide() per nascondere completamente hostname contenuto nel'' | |||
:''nome utente (e viceversa)'' | |||
:[[Utente:S3v|S3v]] 21:33, 11 nov 2016 (CET) | |||
;1.0.58 | |||
:''Rimossa precedente istruzione e modificata regexp per far funzionare la ricerca di'' | |||
:''pacchetti esterni sia su stable che su testing'' | |||
:''Modifiche minori'' | |||
:[[Utente:S3v|S3v]] 16:44, 10 lug 2016 (CEST) | |||
;1.0.57 | |||
:''Istruzione per rimuovere eventuale slash alla fine dell'URL in "sources.list"'' | |||
:''Aggiunti comandi "systemd-cgtop -b --iterations=5", "systemd-cgls" e "systemd-delta" a problemi comuni'' | |||
:[[Utente:S3v|S3v]] 21:27, 9 lug 2016 (CEST) | |||
;1.0.56 | |||
:''Rimosse dal file interfaces anche le chiavi relative a wep e a wpa-enterprise'' | |||
:[[Utente:metaldaze|metaldaze]] 12:54, 04 feb 2016 (CET) | |||
;1.0.55 | |||
:''Opzioni per aggiornare lo script o crearne una codifica base64'' | |||
:''Corretti ESSID in "nmcli device show" non nascosti'' | |||
:''Rimozione duplicati in "release" (pacchetti esterni)'' | |||
:[[Utente:S3v|S3v]] 21:26, 15 giu 2015 (CEST) | |||
;1.0.54 | |||
:''Correzioni minori legate alla compressione xz; semplificata lettura nome utente in caso di errori con logname'' | |||
:[[Utente:HAL 9000|HAL 9000]] 18:41, 31 mag 2015 (CEST) | |||
;1.0.53 | |||
:''Vengono rimosse dalla variabile "release" (pacchetti esterni) le linee duplicate'' | |||
:[[Utente:S3v|S3v]] 18:22, 30 mag 2015 (CEST) | |||
;1.0.52 | |||
:''Aggiunta compressione xz, se disponibile, con ripiego su bzip2 oppure gzip'' | |||
:[[Utente:HAL 9000|HAL 9000]] 22:15, 17 mag 2015 (CEST) | |||
;1.0.51 | |||
:''Aggiunti comandi "systemctl --failed", "journal -x -b --no-pager [-p [err, warning]]",'' | |||
:''"blkid", "lsblk", "dpkg --audit"'' | |||
:''"/var/log/syslog" e "dmesg" solo se non è installato systemd'' | |||
:''Aggiunta variabile globale "oldstable" e aggiornate "testing" e "stable"'' | |||
:''Modifiche minori'' | |||
:[[Utente:HAL 9000|HAL 9000]] e [[Utente:S3v|S3v]] 17:12, 4 mag 2015 (CEST) | |||
;1.0.50 | |||
:''Rivista la funzione _extpack (repository Debian'' | |||
:''in base al comando "apt-cache policy")'' | |||
:[[Utente:S3v|S3v]] 22:37, 22 dic 2014 (CET) | |||
;1.0.49 | |||
:''Aggiunti trap INT e "dpkg --print-foreign-architectures"'' | |||
:''Spostato "dkms status" nei comandi generali'' | |||
:[[Utente:S3v|S3v]] 21:19, 20 dic 2014 (CET) | |||
;1.0.48 | ;1.0.48 | ||
:''Corretta la ricerca per i pacchetti esterni'' | :''Corretta la ricerca per i pacchetti esterni'' | ||
Riga 1 124: | Riga 1 478: | ||
:''Inserito "udisksctl dump"'' | :''Inserito "udisksctl dump"'' | ||
:[[Utente:S3v|S3v]] 15:55, 5 nov 2014 (CET) | :[[Utente:S3v|S3v]] 15:55, 5 nov 2014 (CET) | ||
(Prosegue nella pagina di [[Discussione:Creazione automatica di un file di log per inviare quesiti al forum|discussione]]). | |||
: | |||
{{Autori | {{Autori |
contributi