3 581
contributi
S3v (discussione | contributi) mNessun oggetto della modifica |
(→Script: nuova versione) |
||
Riga 30: | Riga 30: | ||
== Script == | == Script == | ||
<pre> | <pre> | ||
#!/bin/bash | #! /bin/bash | ||
# -------------------------------------------------------------------------- | |||
# Impostazioni | |||
# -------------------------------------------------------------------------- | |||
# I file creati saranno leggibili e scrivibili da tutti | |||
umask 0011 | |||
# -------------------------------------------------------------------------- | |||
# Funzioni che sovrascrivono comandi | |||
# -------------------------------------------------------------------------- | |||
# Rimpiazza echo ed echo -n, impedendo echo -e e le possibili combinazioni | |||
# Sintassi accettata: | |||
# echo -n "testo" # stampa senza a capo finale | |||
# echo "testo" # stampa con a capo finale | |||
# echo # stampa una riga vuota | |||
function echo { | |||
if [ $# -gt 1 ] && [ "$1" = "-n" ]; then | |||
shift | |||
printf %s "$*" | |||
else | |||
printf %s\\n "$*" | |||
fi | |||
} | |||
# -------------------------------------------------------------------------- | |||
# Costanti | |||
# -------------------------------------------------------------------------- | |||
# Codename per stable e testing. Da modificare nei successivi rilasci di Debian | # Codename per stable e testing. Da modificare nei successivi rilasci di Debian | ||
STABLE="wheezy" | readonly STABLE="wheezy" | ||
TESTING="jessie" | readonly TESTING="jessie" | ||
# Path dei comandi dello script | # Path dei comandi dello script | ||
PATH=/bin:/sbin:/usr/bin:/usr/sbin | readonly PATH="/bin:/sbin:/usr/bin:/usr/sbin" | ||
# Nome del file di log in base alla data corrente | # Nome del file di log in base alla data corrente | ||
log="log_ | readonly log="log_$(date '+%d%b_%H%M%S')" | ||
# Nome del file compresso. Viene usata l'estensione .bz2 a meno | # Nome del file compresso. Viene usata l'estensione .bz2 a meno | ||
# che non venga modificata da _compress | # che non venga modificata da _compress | ||
complog="$log.bz2" | readonly complog="${log}.bz2" | ||
# | # nome utente | ||
utente=$(logname) && | |||
[ "$utente" != "root" ] || { | |||
utente= | |||
tmputente= | |||
for tmputente in $(users); do | |||
if [ "$tmputente" = "root" ]; then | |||
continue | |||
elif [ -z "$utente" ]; then | |||
utente=$tmputente | |||
elif [ "$utente" != "$tmputente" ]; then | |||
utente= | |||
break | |||
fi | |||
done | |||
if [ -z "$utente" ]; then | |||
# NOTA: "root" è permesso (solo) se scelto esplicitamente dall'utente | |||
echo -n "Inserisci il tuo nome utente: " | |||
read tmputente && | |||
# non può contenere: spazi, tabulazioni, nuove righe; né essere vuota | |||
[ -n "${tmputente##*[[:space:]]*}" ] && | |||
# l'utente deve aver effettuato il login (anche in altre console) | |||
case " $(users) " in | |||
*" ${tmputente} "* ) true | |||
;; | |||
* ) false | |||
;; | |||
esac || { | |||
echo "Nome utente invalido o non ha effettuato il login!" >&2 | |||
exit 255 | |||
} | |||
utente=$tmputente | |||
fi | |||
unset tmputente | |||
} | |||
readonly utente | |||
# | # nome host | ||
readonly nomehost=$(hostname) | |||
nomehost= | |||
# Codici stile carattere | # Codici stile carattere | ||
ROSSO="\033[01;31m" # colore rosso e grassetto | readonly ROSSO="\033[01;31m" # colore rosso e grassetto | ||
VERDE="\033[01;32m" # colore verde e grassetto | readonly VERDE="\033[01;32m" # colore verde e grassetto | ||
BOLD="\033[01m" | readonly BOLD="\033[01m" # grassetto | ||
FINE="\033[0m" | readonly FINE="\033[0m" # reset | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
Riga 71: | Riga 132: | ||
* * | * * | ||
* 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 1.0. | * Versione 1.0.39 * | ||
* * | * * | ||
*********************************************************************************" | *********************************************************************************" | ||
Riga 86: | Riga 147: | ||
-- Verrà creato un file in formato compresso da inviare al forum" | -- Verrà creato un file in formato compresso da inviare al forum" | ||
echo -n "Continuare [S/n]? " | echo -n "Continuare [S/n]? " | ||
read risp | read risp || risp="ERROR" | ||
# Se non viene premuto "s" o "S" o [Invio], lo script termina | # Se non viene premuto "s" o "S" o [Invio], lo script termina | ||
[ -z "$risp" ] || [ "$risp" = "s" ] || [ "$risp" = "S" ] || _exit | |||
} | } | ||
Riga 101: | Riga 162: | ||
# 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 | if [ -f "$log" ] || [ -f "${log}.zip" ] || [ -f "${log}.bz2" ] || [ -f "${log}.tgz" ]; then | ||
echo | echo $'\n'"Esiste già un file ${log}, ${log}.zip, ${log}.bz2 o ${log}.tgz nella directory corrente." | ||
echo -n "Sovrascivere [S/n]? " | |||
read risp | read risp | ||
case $risp in | case "$risp" in | ||
""|[Ss]) rm -f $log $log.zip $log.bz2 $log.tgz ;; | ""|[Ss]) rm -f -- "$log" "${log}.zip" "${log}.bz2" "${log}.tgz" ;; | ||
*) _exit | *) _exit | ||
esac | esac | ||
fi | fi | ||
} | } | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
Riga 128: | Riga 189: | ||
# termina la funzione se il log è più grande di chunk_size x 4 (numero di parti impostate) | # termina la funzione se il log è più grande di chunk_size x 4 (numero di parti impostate) | ||
if [ | if [ "$(du -k "$log" | cut -f1)" -gt 240 ]; then | ||
echo "Log troppo grande per essere inviato a paste.debian.net" | echo "Log troppo grande per essere inviato a paste.debian.net" | ||
echo "Allegare il file compresso alla discussione sul forum." | echo "Allegare il file compresso alla discussione sul forum." | ||
Riga 136: | Riga 197: | ||
# rinomina parti di log preesistenti (se ve ne sono) | # rinomina parti di log preesistenti (se ve ne sono) | ||
# scarta i messaggi di errore (se presenti) | # scarta i messaggi di errore (se presenti) | ||
rename "s/$chunk_prefix/old-$chunk_prefix-$(date +%s)/ | rename "s/${chunk_prefix}/old-${chunk_prefix}-$(date '+%s')/" "$chunk_prefix".* > /dev/null 2>&1 | ||
# dividi il file di log in parti di $chunk_size bytes senza spezzare le linee | # dividi il file di log in parti di $chunk_size bytes senza spezzare le linee | ||
# scarta i messaggi di errore (se presenti) per log di dimensione superiore a 10 parti | # scarta i messaggi di errore (se presenti) per log di dimensione superiore a 10 parti | ||
# (max 10 parti con l'opzione -a) | # (max 10 parti con l'opzione -a) | ||
split -a 1 -d -C $chunk_size $log $chunk_prefix. > /dev/null 2>&1 | split -a 1 -d -C "$chunk_size" "$log" "${chunk_prefix}." > /dev/null 2>&1 | ||
# comunica il numero di parti inviate | # comunica il numero di parti inviate | ||
chunk_num=$( | chunk_num=$(find . -maxdepth 1 -type f -name "${chunk_prefix}.*" -printf x | | ||
if [ $chunk_num = 1 ]; then | wc -c) | ||
echo | if [ "$chunk_num" = 1 ]; then | ||
echo $'\nIl log sarà inviato in un singolo file.' | |||
else | else | ||
echo | echo $'\n'"Il log sarà inviato in ${chunk_num} parti." | ||
fi | fi | ||
# invia al massimo 4 parti | # invia al massimo 4 parti | ||
echo | echo $'\nIl log è consultabile ai seguenti indirizzi:' | ||
for chunkfile in $chunk_prefix. | for chunkfile in "${chunk_prefix}."[0-3]; do | ||
# verifica l'esistenza del file da inviare | # verifica l'esistenza del file da inviare | ||
if [ -f $chunkfile ]; then | if [ -f "$chunkfile" ]; then | ||
# invia dati tramite pastebinit, l'output d'errore viene soppresso | # invia dati tramite pastebinit, l'output d'errore viene soppresso | ||
pastelink= | pastelink=$(pastebinit -a '' -b "$paste_url" -i "$chunkfile" 2>/dev/null) | ||
if [ $? = 0 ]; then | if [ $? = 0 ]; then | ||
Riga 165: | Riga 227: | ||
# controlla URL restituita da pastebinit | # controlla URL restituita da pastebinit | ||
case $pastelink in | case "$pastelink" in | ||
# verifica in caso di url corretta | # verifica in caso di url corretta | ||
"$paste_url"/[0-9]*) | "$paste_url"/[0-9]*) | ||
echo ".. inviato $chunkfile all'indirizzo $pastelink" | echo ".. inviato ${chunkfile} all'indirizzo ${pastelink}" | ||
;; | ;; | ||
# verifica in caso di url non corretta | # verifica in caso di url non corretta | ||
*) | *) | ||
echo ".. $paste_url ha restituito una URL non valida ($pastelink) per $chunkfile!" | echo ".. ${paste_url} ha restituito una URL non valida (${pastelink}) per ${chunkfile}!" | ||
paste_exit_status=1 | paste_exit_status=1 | ||
esac | esac | ||
Riga 178: | Riga 240: | ||
else | else | ||
# Invio fallito (pastebinit exit status = 1) | # Invio fallito (pastebinit exit status = 1) | ||
echo ".. non riuscito invio $chunkfile" | echo ".. non riuscito invio ${chunkfile}" | ||
paste_exit_status=1 | paste_exit_status=1 | ||
fi | fi | ||
Riga 187: | Riga 249: | ||
# cancella le parti di log inviate | # cancella le parti di log inviate | ||
for chunkfile in "./${chunk_prefix}."[0-9]*; do | |||
if [ -f "$chunkfile" ]; then | |||
rm -f -- "$chunkfile" | |||
fi | |||
done | |||
return $paste_exit_status | return $paste_exit_status | ||
Riga 197: | Riga 263: | ||
# Pastebinit è installato? | # Pastebinit è installato? | ||
if [ ! -f /usr/bin/pastebinit ]; then | if [ ! -f /usr/bin/pastebinit ]; then | ||
echo | echo $'\nNon è possibile inviare il log a paste.debian.net\nIl pacchetto "pastebinit" non è installato.' | ||
return 1 | return 1 | ||
fi | fi | ||
# Invia il file log.txt a paste.debian.net | # Invia il file log.txt a paste.debian.net | ||
echo - | echo -n $'\nInviare il log a http://paste.debian.net [S/n]? ' | ||
read risp | read risp | ||
case $risp in | case "$risp" in | ||
""|[Ss]) | ""|[Ss]) | ||
_split_and_send | _split_and_send | ||
if [ $? | if [ $? = 0 ]; then | ||
echo | echo $'\nIl log è stato inviato' | ||
else | else | ||
echo | echo $'\nSi sono verificati errori nell\'invio del log!' | ||
fi | fi | ||
;; | ;; | ||
Riga 223: | Riga 289: | ||
# Funzione richiamata in caso di corretta/scorretta creazione del file compresso | # Funzione richiamata in caso di corretta/scorretta creazione del file compresso | ||
function _compress_ok { | function _compress_ok { | ||
echo "File compresso creato correttamente nella directory corrente." | |||
} | } | ||
function _compress_err { | function _compress_err { | ||
echo "Errore nella creazione del file compresso." | |||
} | } | ||
Riga 234: | Riga 300: | ||
function _compress { | function _compress { | ||
local risp | local risp | ||
echo - | echo -n $'\nCreare un file compresso [S/n]? ' | ||
read risp | read risp | ||
case $risp in | case "$risp" in | ||
""|[Ss]) | ""|[Ss]) | ||
echo "Sta per essere creato un file compresso..." | echo "Sta per essere creato un file compresso..." | ||
sleep 1 | sleep 1 | ||
if [ -f /bin/bzip2 ]; then | if [ -f /bin/bzip2 ]; then | ||
bzip2 -k9 $log && _compress_ok || _compress_err | bzip2 -k9 "$log" && _compress_ok || _compress_err | ||
elif [ -f /usr/bin/zip ]; then | elif [ -f /usr/bin/zip ]; then | ||
zip $log.zip $log && _compress_ok || _compress_err | zip "${log}.zip" "$log" && _compress_ok || _compress_err | ||
complog="$log.zip" | complog="${log}.zip" | ||
else | else | ||
tar czf $log.tgz $log && _compress_ok || _compress_err | tar czf "${log}.tgz" "$log" && _compress_ok || _compress_err | ||
complog="$log.tgz" | complog="${log}.tgz" | ||
fi | fi | ||
;; | ;; | ||
Riga 278: | Riga 344: | ||
echo -n "Scegliere il numero corrispondente: " | echo -n "Scegliere il numero corrispondente: " | ||
read num | read num | ||
case $num in | case "$num" in | ||
[1-7]) _wait ;;& # ;;& -> va alla successiva occorrenza del carattere immesso | [1-7]) _wait ;;& # ;;& -> va alla successiva occorrenza del carattere immesso | ||
1) echo | 1) echo $'### Problemi di rete ###\n' > "$log" && _rete ;;& | ||
2) echo | 2) echo $'### Problemi video ###\n' > "$log" && _video ;;& | ||
3) echo | 3) echo $'### Problemi audio ###\n' > "$log" && _audio ;;& | ||
4) echo | 4) echo $'### Problemi APT ###\n' > "$log" && _apt ;;& | ||
5) echo | 5) echo $'### Problemi mount-unmount ###\n' > "$log" && _mount ;;& | ||
6) echo | 6) echo $'### Problemi touchpad ###\n' > "$log" && _tpad ;;& | ||
7) echo | 7) echo $'### Solo informazioni generiche ###\n' > "$log" && _common ;;& | ||
[1-7]) break ;; # Termina il ciclo 'while' | [1-7]) break ;; # Termina il ciclo 'while' | ||
0) _exit ;; # È stato inserito '0' . Uscita dallo script | 0) _exit ;; # È stato inserito '0' . Uscita dallo script | ||
Riga 299: | Riga 365: | ||
# Funzioni varie | # Funzioni varie | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
# Funzione che stampa solo lo spazio e il nome del comando, prima di eseguirlo | |||
function _prompt { | |||
echo -n "[ ] $*" | |||
} | |||
# Funzione che stampa un pallino di colore verde in caso di comando con output | # Funzione che stampa un pallino di colore verde in caso di comando con output | ||
function _ok { | function _ok { | ||
printf %b "\r[${VERDE}•${FINE}] " | |||
echo -n "$*" | |||
# cancella fino a fine schermo e va a capo | |||
tput ed | |||
echo | |||
} | } | ||
# 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 { | ||
printf %b "\r[${ROSSO}•${FINE}] " | |||
echo -n "$*" | |||
# cancella fino a fine schermo e va a capo | |||
tput ed | |||
echo | |||
} | |||
# Funzione che stampa in grassetto gli argomenti | |||
function _bold { | |||
printf %b "$BOLD" | |||
echo -n "$*" | |||
printf %b\\n "$FINE" | |||
} | } | ||
Riga 316: | Riga 402: | ||
****************************************** | ****************************************** | ||
$1 | $1 | ||
******************************************" >> $log | ******************************************" >> "$log" | ||
} | } | ||
# Funzione che stampa un messaggio di attesa e aspetta 2 secondi | # Funzione che stampa un messaggio di attesa e aspetta 2 secondi | ||
function _wait { | function _wait { | ||
echo | echo $'\nCreazione del log in corso...\n' | ||
} | } | ||
# Stampa la data corrente nel file di log | # Stampa la data corrente nel file di log | ||
function _data { | function _data { | ||
echo "Log creato il | echo "Log creato il $(date '+%d %B %Y alle %H.%M')" >> "$log" | ||
} | } | ||
Riga 334: | Riga 419: | ||
# 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" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log" | ||
[ "$utente" != "Debian" | [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log" | ||
# Nasconde gli ESSID gestiti attraverso Network Manager | # Nasconde gli ESSID gestiti attraverso Network Manager | ||
local var file mydir="/etc/NetworkManager/system-connections/" | local var file mydir="/etc/NetworkManager/system-connections/" | ||
if [ -d $mydir ]; then # se esiste la directory /etc/NetworkManager/system-connections/ ... | if [ -d "$mydir" ]; then # se esiste la directory /etc/NetworkManager/system-connections/ ... | ||
for file in $mydir/*; do # ciclo attraverso il contenuto della directory | for file in "$mydir"/*; do # ciclo attraverso il contenuto della directory | ||
if [ -f "$file" ]; then # se l'elemento è un file... | if [ -f "$file" ]; then # se l'elemento è un file... | ||
var= | var=$(sed -n "s/ssid=//p" "$file") # ... var conterrà l'eventuale ESSID... | ||
if [ "$var" ]; then # ... e se è diverso dalla stringa vuota... | if [ -n "$var" ]; then # ... e se è diverso dalla stringa vuota... | ||
sed -i "s/$var/\*script-removed\*/g" $log # ... lo nasconde nel file di log | sed -i "s/${var}/\*script-removed\*/g" "$log" # ... lo nasconde nel file di log | ||
fi | fi | ||
fi | fi | ||
Riga 352: | Riga 437: | ||
# Nasconde nel log i i nomi delle connessioni gestite da NetworkManager | # Nasconde nel log i 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" | ||
} | } | ||
Riga 361: | Riga 446: | ||
if [ -f "$file" ]; then | if [ -f "$file" ]; then | ||
lastdate= | lastdate=$(sed -n '/^Start-Date/h ; $p' "$file" | awk '{print $2}') | ||
# se il file history.log non contiene la data dell'ultimo aggiornamento, viene utilizzato history.log.1.gz | # se il file history.log non contiene la data dell'ultimo aggiornamento, viene utilizzato history.log.1.gz | ||
[ -z "$lastdate" ] && [ -f "$file.1.gz" ] && lastdate= | [ -z "$lastdate" ] && [ -f "${file}.1.gz" ] && lastdate=$(zcat "${file}.1.gz" | sed -n '/^Start-Date/h ; $p' | awk '{print $2}') | ||
# variabile che contiene la data in formato "giorno mese anno" | # variabile che contiene la data in formato "giorno mese anno" | ||
convdate= | convdate=$(date -d "$lastdate" '+%d %B %Y') | ||
echo | echo $'\n'"Ultimo aggiornamento del sistema: ${convdate}" >> "$log" | ||
fi | fi | ||
} | } | ||
Riga 374: | Riga 459: | ||
# 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 | if [ -f "$log" ]; then | ||
echo - | echo -n $'\nFile contenente il log dello script: ' | ||
_bold "$log" | |||
else | else | ||
echo | echo $'\nNon è stato creato un file di log' | ||
fi | fi | ||
if [ -f $complog ]; then | if [ -f "$complog" ]; then | ||
echo - | echo -n "File compresso da allegare alla discussione sul forum: " | ||
_bold "$complog" | |||
else | else | ||
echo "Non è stato creato un file compresso del log" | echo "Non è stato creato un file compresso del log" | ||
fi | fi | ||
echo | echo $'Script terminato\n' | ||
exit 0 | exit 0 | ||
} | } | ||
Riga 467: | Riga 554: | ||
local risp alsaurl="http://www.alsa-project.org/alsa-info.sh" | local risp alsaurl="http://www.alsa-project.org/alsa-info.sh" | ||
echo | echo $'\nI log relativi ai problemi audio sono ricavati attraverso lo script di debug' | ||
echo "ALSA prelevabile all'indirizzo: $alsaurl" | echo "ALSA prelevabile all'indirizzo: ${alsaurl}" | ||
echo - | echo -n $'\nVerrà ora scaricato e eseguito lo script ALSA. Continuare [S/n]? ' | ||
read risp | read risp | ||
case $risp in | case "$risp" in | ||
""|[Ss]) | ""|[Ss]) | ||
# wget esiste? | # wget esiste? | ||
Riga 479: | Riga 566: | ||
fi | fi | ||
# Crea un file temporaneo in /tmp che conterrà lo script ALSA | # Crea un file temporaneo in /tmp che conterrà lo script ALSA | ||
local tempfile= | local tempfile=$(mktemp) | ||
# Scarica lo script ALSA | # Scarica lo script ALSA | ||
_prompt "Download script ALSA..." | |||
wget -q -O "$tempfile" "$alsaurl" | wget -q -O "$tempfile" "$alsaurl" | ||
# Se il download riesce... | # Se il download riesce... | ||
Riga 489: | Riga 577: | ||
nome_e_riga "Problemi audio" | nome_e_riga "Problemi audio" | ||
# Esegue lo script ALSA | # Esegue lo script ALSA | ||
su -c "$tempfile --stdout >> $log" $utente && _ok "Script ALSA eseguito" || _error "Script ALSA non eseguito" | _prompt "Script ALSA..." | ||
su -c "$tempfile --stdout >> $log" "$utente" && _ok "Script ALSA eseguito" || _error "Script ALSA non eseguito" | |||
else | else | ||
_error "Download script ALSA fallito" | _error "Download script ALSA fallito" | ||
Riga 495: | Riga 584: | ||
# Rimuove il file temporaneo | # Rimuove il file temporaneo | ||
rm $tempfile | rm -- "$tempfile" | ||
;; | ;; | ||
*) | *) | ||
echo "Lo script ALSA non è stato ancora eseguito." | echo "Lo script ALSA non è stato ancora eseguito." | ||
echo "Avviare manualmente lo script prelevabile a questo indirizzo:" | echo "Avviare manualmente lo script prelevabile a questo indirizzo:" | ||
_bold "$alsaurl" | |||
echo "Lo script ALSA va eseguito con i permessi di normale utente." | echo "Lo script ALSA va eseguito con i permessi di normale utente." | ||
esac | esac | ||
Riga 537: | Riga 626: | ||
_dir "/etc/X11/xorg.conf.d/" | _dir "/etc/X11/xorg.conf.d/" | ||
_file "/var/log/Xorg.0.log" | _file "/var/log/Xorg.0.log" | ||
_comando "/usr/bin/synclient -l" "su" | # se $DISPLAY è vuota, usa :0 (default per il primo server X) | ||
DISPLAY=${DISPLAY:-:0} _comando "/usr/bin/synclient -l" "su" | |||
} | } | ||
Riga 552: | Riga 642: | ||
nome_e_riga "$1" | nome_e_riga "$1" | ||
if [ -f "$1" ]; then | if [ -f "$1" ]; then | ||
_prompt "$1" | |||
case "$1" in | case "$1" in | ||
/etc/network/interfaces) | /etc/network/interfaces) | ||
# Nasconde nel log gli ESSID e le password criptate contenute in /etc/network/interfaces | # Nasconde nel log gli ESSID e le password criptate contenute in /etc/network/interfaces | ||
sed -r "s/((wpa-ssid)|(wpa-psk)).*/\1 \*script-removed\*/" $1 &>> $log && _ok $1 || _error $1 ;; | sed -r "s/((wpa-ssid)|(wpa-psk)).*/\1 \*script-removed\*/" "$1" &>> "$log" && _ok "$1" || _error "$1" ;; | ||
/var/log/syslog) | /var/log/syslog) | ||
# se il file contiene la stringa "rsyslogd.*start" ... | # se il file contiene la stringa "rsyslogd.*start" ... | ||
if [ | if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then | ||
# ... estrae da syslog tutto il contenuto dall'ultima occorrenza della stringa alla fine del file | # ... estrae da syslog tutto il contenuto dall'ultima occorrenza della stringa alla fine del file | ||
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' $1 >> $log && _ok $1 || _error $1 | sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1" >> "$log" && _ok "$1" || _error "$1" | ||
else | else | ||
# se syslog non contiene quella stringa, allora si effettuerà la stessa operazione su syslog.1 ($1.1) | # se syslog non contiene quella stringa, allora si effettuerà la stessa operazione su syslog.1 ($1.1) | ||
# 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 $1 || _error $1 | cat "$1" &>> "$log" && _ok "$1" || _error "$1" | ||
nome_e_riga $1.1 | nome_e_riga "$1".1 | ||
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' $1.1 >> $log && _ok $1.1 || _error $1.1 | _prompt "$1".1 | ||
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok "$1".1 || _error "$1".1 | |||
fi ;; | fi ;; | ||
*) | *) | ||
# per tutti i file non specificati sopra... | # per tutti i file non specificati sopra... | ||
cat "$1" &>> $log && _ok "$1" || _error "$1" | cat "$1" &>> "$log" && _ok "$1" || _error "$1" | ||
esac | esac | ||
else | else | ||
echo "File $1 non trovato" >> $log && _error $1 | echo "File \"$1\" non trovato" >> "$log" && _error "$1" | ||
fi | fi | ||
} | } | ||
Riga 594: | Riga 686: | ||
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" | nome_e_riga "$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 utilizzato "su" | if [ $# -eq 2 ]; then # Se vi sono 2 parametri, viene utilizzato "su" | ||
su -c "$1" "$utente" &>> "$log" && _ok "$var" || _error "$var" | |||
else # non viene utilizzato "su" | else # non viene utilizzato "su" | ||
case $var2 in | case "$var2" in | ||
# per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log | # per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log | ||
/sbin/iwconfig) | /sbin/iwconfig) | ||
(iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var" | (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok "$var" || _error "$var" | ||
;; | ;; | ||
/sbin/iwlist) | /sbin/iwlist) | ||
(iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var" | (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok "$var" || _error "$var" | ||
;; | ;; | ||
*) | *) | ||
# 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 | ||
$1 &>> $log && _ok "$var" || _error "$var" | $1 &>> "$log" && _ok "$var" || _error "$var" | ||
esac | esac | ||
fi | fi | ||
else | else | ||
echo "Comando $var2 non trovato" >> $log && _error "$var" | echo "Comando \"${var2}\" non trovato" >> "$log" && _error "$var" | ||
fi | fi | ||
} | } | ||
Riga 627: | Riga 716: | ||
# Se la directory non esiste, stampa un output sul log ed esce. | # Se la directory non esiste, stampa un output sul log ed esce. | ||
if [ ! -d "$1" ]; then | if [ ! -d "$1" ]; then | ||
echo "La directory non esiste" >> $log && _error "$1" | echo "La directory non esiste" >> "$log" && _error "$1" | ||
return | return | ||
fi | fi | ||
Riga 634: | Riga 723: | ||
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. | ||
local numfile= | local numfile=$(find "$1" -maxdepth 1 -type f | wc -l) | ||
# numdir contiene il numero di sottodirectory contenute nella directory. Solo primo livello. | # numdir contiene il numero di sottodirectory contenute nella directory. Solo primo livello. | ||
local numdir= | local numdir=$(find "$1" -maxdepth 1 -type d | wc -l) | ||
if [ $numfile -eq 0 | if [ "$numfile" -eq 0 ] && [ "$numdir" -eq 1 ]; then | ||
echo "La directory non contiene file o directory" >> $log && _error "$1" | echo "La directory non contiene file o directory" >> "$log" && _error "$1" | ||
else | else | ||
echo "La directory contiene $numfile file e $((numdir-1)) directory" >> $log | echo "La directory contiene ${numfile} file e $(($numdir - 1)) directory" >> "$log" | ||
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" | nome_e_riga "$file" | ||
cat "$file" &>> $log && _ok "$file" || _error "$file" | _prompt "$file" | ||
cat "$file" &>> "$log" && _ok "$file" || _error "$file" | |||
fi | fi | ||
done | done | ||
Riga 667: | Riga 757: | ||
function _pack { | function _pack { | ||
nome_e_riga "Pacchetti che contengono \"$1\"" | nome_e_riga "Pacchetti che contengono \"$1\"" | ||
_prompt "$1" | |||
# Variabile che contiene i pacchetti trovati | # Variabile che contiene i pacchetti trovati | ||
local packages= | local packages=$(dpkg -l | grep -i "$1") | ||
if [ -z "$packages" ]; then | if [ -z "$packages" ]; then | ||
echo "Nessun pacchetto installato" >> $log && _error "$1" | echo "Nessun pacchetto installato" >> "$log" && _error "$1" | ||
else | else | ||
echo "$packages" >> $log && _ok "$1" | echo "$packages" >> "$log" && _ok "$1" | ||
fi | fi | ||
} | } | ||
Riga 691: | Riga 783: | ||
local vers="" var="" | local vers="" var="" | ||
nome_e_riga "$2" | nome_e_riga "$2" | ||
if [ -f $1 ]; then | _prompt "$2" | ||
case $1 in | if [ -f "$1" ]; then | ||
case "$1" in | |||
/usr/sbin/NetworkManager) | /usr/sbin/NetworkManager) | ||
vers= | vers=$(NetworkManager --version) | ||
var="network-manager" | var="network-manager" | ||
;; | ;; | ||
/usr/sbin/wicd) | /usr/sbin/wicd) | ||
vers= | vers=$(wicd -h | head -2 | tail -1) | ||
var="wicd" | var="wicd" | ||
;; | ;; | ||
esac | esac | ||
echo "$2 è installato (versione "$vers")" >> $log && _ok "$2" | echo "$2 è installato (versione "$vers")" >> "$log" && _ok "$2" | ||
invoke-rc.d "$var" status &>/dev/null | invoke-rc.d "$var" status &>/dev/null | ||
[ $? -eq 0 ] && echo "$2 è in esecuzione" >> $log || echo "$2 non è in esecuzione" >> $log | [ $? -eq 0 ] && echo "$2 è in esecuzione" >> "$log" || echo "$2 non è in esecuzione" >> "$log" | ||
else | else | ||
echo "$2 non è installato" >> $log && _error "$2" | echo "$2 non è installato" >> "$log" && _error "$2" | ||
fi | fi | ||
} | } | ||
Riga 719: | Riga 812: | ||
local var="/sys/class/dmi/id/*" | local var="/sys/class/dmi/id/*" | ||
nome_e_riga "$var" | nome_e_riga "$var" | ||
_prompt "$var" | |||
if [ -f /sys/class/dmi/id/sys_vendor ]; then | if [ -f /sys/class/dmi/id/sys_vendor ]; then | ||
echo | echo "Produttore: $(cat /sys/class/dmi/id/sys_vendor)" &>> "$log" | ||
echo | echo "Prodotto: $(cat /sys/class/dmi/id/product_name)" &>> "$log" | ||
echo | echo "Versione: $(cat /sys/class/dmi/id/product_version)" &>> "$log" | ||
echo | echo "BIOS vers.: $(cat /sys/class/dmi/id/bios_version)" &>> "$log" && _ok "$var" || _error "$var" | ||
else | else | ||
echo "File /sys/class/dmi/id/sys_vendor non trovato" >> $log && _error "$var" | echo "File /sys/class/dmi/id/sys_vendor non trovato" >> "$log" && _error "$var" | ||
fi | fi | ||
} | } | ||
Riga 733: | Riga 827: | ||
local i var="Firmware" | local i var="Firmware" | ||
nome_e_riga "$var" | nome_e_riga "$var" | ||
dpkg -l | grep -i firmware >> $log && _ok "$var" | dpkg -l | grep -i firmware >> "$log" && _ok "$var" | ||
echo | echo >> "$log" | ||
# Elenca i file contenuti nelle directory specificate | # Elenca i file contenuti nelle directory specificate | ||
for i in "/usr/lib/firmware" "/usr/local/lib/firmware" "/lib/firmware" "/run/udev/firmware-missing"; do | for i in "/usr/lib/firmware" "/usr/local/lib/firmware" "/lib/firmware" "/run/udev/firmware-missing"; do | ||
if [ -d $i ]; then | if [ -d "$i" ]; then | ||
echo "Contenuto di $i" >> $log | echo "Contenuto di ${i}" >> "$log" | ||
ls -al $i >> $log | ls -al "$i" >> "$log" | ||
else | else | ||
echo "$i non trovata" >> $log | echo "${i} non trovata" >> "$log" | ||
fi | fi | ||
echo | echo >> "$log" | ||
done | done | ||
} | |||
# Stampa sullo standard output l'eseguibile associato a x-session-manager (il default) | |||
function _x_session_manager { | |||
update-alternatives --query "x-session-manager" | | |||
awk '$1 ~ /^Value:$/ { print $2; exit 0 }' | |||
} | |||
# Stampa sullo standard output l'eseguibile associato a x-window-manager (il default) | |||
function _x_window_manager { | |||
update-alternatives --query "x-window-manager" | | |||
awk '$1 ~ /^Value:$/ { print $2; exit 0 }' | |||
} | |||
# Stampa la lista dei pacchetti installati che soddisfano una data dipendenza | |||
# con versione (del programma e in Debian) e archivio di provenienza | |||
# Viene chiamata con un parametro: | |||
# $1 - nome della dipendenza | |||
function _soddisfa { | |||
echo "Installati (${1}):" | |||
aptitude search '?installed?provides('"$1"')' --disable-columns \ | |||
--display-format "- %p (versione: %n [Debian: %v]; archivio: %t)" | |||
} | |||
# Restituisce un exit status di 0 solo se l'eseguibile con il nome scelto è in esecuzione da parte dell'utente ($utente) | |||
# Viene chiamata con un parametro: | |||
# $1 - comando di cui controllare l'esecuzione da parte di $utente | |||
function _is_running { | |||
local list_pids_user list_pids_bin pid pid2 | |||
list_pids_user=$(ps -U "$utente" -o pid) # lista di interi, separati da spazi, con i PID dei processi avviati da $utente | |||
list_pids_bin=$(pidof -- "$1") # lista di interi, separati da spazi, con i PID dei processi del comando $1 | |||
for pid in $list_pids_user; do | |||
for pid2 in $list_pids_bin; do | |||
if [ "$pid" = "$pid2" ]; then | |||
return 0 # trovato | |||
fi | |||
done | |||
done | |||
return 1 # non trovato! | |||
} | } | ||
Riga 751: | Riga 884: | ||
function _de_wm { | function _de_wm { | ||
nome_e_riga "Desktop Environment - Window Manager" | nome_e_riga "Desktop Environment - Window Manager" | ||
_prompt "DE/WM" | |||
{ | |||
elif | # impostazione di default | ||
elif | echo -n $'Default:\n- x-session-manager: ' | ||
_x_session_manager | |||
echo -n "- x-window-manager: " | |||
_x_window_manager | |||
# installati | |||
_soddisfa "x-session-manager" | |||
#_soddisfa "x-window-manager" # non essenziale e impiega già tanto | |||
} >> "$log" | |||
# in esecuzione | |||
echo -n "In esecuzione: " >> "$log" | |||
if _is_running "ksmserver"; then kde4-config --version >> "$log" && _ok "DE/WM" || _error "DE/WM" # KDE4 | |||
elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok "DE/WM" || _error "DE/WM" # Gnome Shell | |||
elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok "DE/WM" || _error "DE/WM" # Xfce4 | |||
elif _is_running "openbox"; then | |||
if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then | |||
echo -n "(altro x-session-manager) + " >> "$log" # Session manager (LXDE?) + Openbox | |||
fi | |||
openbox --version | head -n 1 >> "$log" && _ok "DE/WM" || _error "DE/WM" # Openbox | |||
else | else | ||
echo "Sconosciuto" >> $log && _error "DE/WM" | echo "Sconosciuto" >> "$log" && _error "DE/WM" # NON TROVATO | ||
fi | fi | ||
} | } | ||
Riga 767: | Riga 917: | ||
# "deb http://ftp.XX.debian.org" e che *non* contengono un nome di release. | # "deb http://ftp.XX.debian.org" e che *non* contengono un nome di release. | ||
# Con "cut" viene prelevato il terzo campo (la release voluta) | # Con "cut" viene prelevato il terzo campo (la release voluta) | ||
local release= | local release=$(sed -e 's/^ *//' -e '/^deb http:\/\/ftp\...\.debian\.org.*\('"$STABLE"' \|stable \|'"$TESTING"' \|testing \|sid \|unstable \)/!d' /etc/apt/sources.list | cut -d ' ' -f3) | ||
# Numero di release trovate | # Numero di release trovate | ||
local num= | local num=$(echo "$release" | wc -l) | ||
local var="Pacchetti esterni" | local var="Pacchetti esterni" | ||
_prompt "$var" | |||
# Se il numero di release è diverso da 1, la funzione termina | # Se il numero di release è diverso da 1, la funzione termina | ||
if [ $num -ne 1 ]; then | if [ "$num" -ne 1 ]; then | ||
nome_e_riga "$var" | nome_e_riga "$var" | ||
echo "Sono presenti $num release in sources.list" >> $log && _error "$var" | echo "Sono presenti ${num} release in sources.list" >> "$log" && _error "$var" | ||
return | return | ||
fi | fi | ||
Riga 784: | Riga 935: | ||
# Se il numero di release è uguale a 1, la variabile pkg conterrà i pacchetti *non* facenti parte della release | # Se il numero di release è uguale a 1, la variabile pkg conterrà i pacchetti *non* facenti parte della release | ||
case $release in | case "$release" in | ||
$STABLE|stable) | "$STABLE"|stable) | ||
release="stable" | release="stable" | ||
pkg= | pkg=$(aptitude -F '%p %v %t' search '~i !~Astable' --disable-columns | column -t) ;; | ||
$TESTING|testing) | "$TESTING"|testing) | ||
release="testing" | release="testing" | ||
pkg= | pkg=$(aptitude -F '%p %v %t' search '~i !~Atesting' --disable-columns | column -t) ;; | ||
sid|unstable) | sid|unstable) | ||
release="unstable" | release="unstable" | ||
pkg= | pkg=$(aptitude -F '%p %v %t' search '~i !~Aunstable' --disable-columns | column -t) ;; | ||
esac | esac | ||
# Invia al log il contenuto di pkg (se esiste) | # Invia al log il contenuto di pkg (se esiste) | ||
nome_e_riga "$var all'archivio \"$release\"" | nome_e_riga "${var} all'archivio \"${release}\"" | ||
if [ -z "$pkg" ]; then | if [ -z "$pkg" ]; then | ||
echo "Nessun pacchetto esterno installato" >> $log && _error "$var" | echo "Nessun pacchetto esterno installato" >> "$log" && _error "$var" | ||
else | else | ||
echo "$pkg" >> $log && _ok "$var" | echo "$pkg" >> "$log" && _ok "$var" | ||
fi | fi | ||
} | } |
contributi