6 999
contributi
S3v (discussione | contributi) mNessun oggetto della modifica |
S3v (discussione | contributi) (+ 1.0.23) |
||
Riga 37: | Riga 37: | ||
log="log_`date +%d%b_%H%M%S`" | log="log_`date +%d%b_%H%M%S`" | ||
# | # Nome del file compresso. Viene usata l'estensione .bz2 a meno | ||
# che non venga modificata da _compress | |||
# | complog="$log.bz2" | ||
complog="" | |||
# I file creati saranno leggibili e scrivibili da tutti | # I file creati saranno leggibili e scrivibili da tutti | ||
umask | umask 0011 | ||
# Nome utente | # Nome utente e nome host | ||
utente=` | utente=`logname` | ||
nomehost=`hostname` | |||
Riga 61: | Riga 60: | ||
* * | * * | ||
* 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.23 * | ||
* * | * * | ||
*********************************************************************************" | *********************************************************************************" | ||
Riga 234: | Riga 233: | ||
sleep 1 | sleep 1 | ||
if [ -f /bin/bzip2 ]; then | if [ -f /bin/bzip2 ]; then | ||
bzip2 -k9 $log && _compress_ok | 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 | zip $log.zip $log && _compress_ok || _compress_err | ||
complog="$log.zip" | complog="$log.zip" | ||
else | else | ||
tar czf $log.tgz $log && _compress_ok | tar czf $log.tgz $log && _compress_ok || _compress_err | ||
complog="$log.tgz" | complog="$log.tgz" | ||
fi | fi | ||
Riga 262: | Riga 260: | ||
[1] Problemi relativi alle connessioni di rete | [1] Problemi relativi alle connessioni di rete | ||
[2] Problemi video | [2] Problemi video | ||
[3] Problemi di gestione dei pacchetti (APT) | [3] Problemi audio | ||
[ | [4] Problemi di gestione dei pacchetti (APT) | ||
[5] Problemi di mount/umount | |||
[6] Problemi di funzionamento del touchpad | |||
[0] Uscita" | [0] Uscita" | ||
while true; do | while true; do | ||
echo -n "Scegliere il numero corrispondente: " | |||
read num | |||
case $num in | |||
1) | 1) | ||
_wait | _wait | ||
Riga 281: | Riga 281: | ||
;; | ;; | ||
3) | 3) | ||
_wait | |||
_audio | |||
break | |||
;; | |||
4) | |||
_wait | _wait | ||
_apt | _apt | ||
break | break | ||
;; | ;; | ||
5) | |||
_wait | _wait | ||
_mount | _mount | ||
break | |||
;; | |||
6) | |||
_wait | |||
_tpad | |||
break | break | ||
;; | ;; | ||
Riga 296: | Riga 306: | ||
tput cuu1 # in alto di una riga | tput cuu1 # in alto di una riga | ||
tput ed # cancella fino alla fine dello schermo | tput ed # cancella fino alla fine dello schermo | ||
esac | |||
done | done | ||
} | } | ||
Riga 333: | Riga 343: | ||
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 | ||
} | |||
# Funzione che sostituisce nel log il nome utente e il nome host con 'nomeutente' e 'nomehost' | |||
function _hide { | |||
sed -i -e "s/$nomehost/nomehost/g" -e "s/$utente/nomeutente/g" $log | |||
} | } | ||
# 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 [ $ | if [ -f $log ]; then | ||
echo -e "\nFile contenente il log dello script: \033[01m$log\033[0m" | echo -e "\nFile contenente il log dello script: \033[01m$log\033[0m" | ||
else | else | ||
Riga 343: | Riga 358: | ||
fi | fi | ||
if [ | if [ -f $complog ]; then | ||
echo -e "File compresso da allegare alla discussione sul forum: \033[01m$complog\033[0m" | |||
else | |||
echo "Non è stato creato un file compresso del log" | echo "Non è stato creato un file compresso del log" | ||
fi | fi | ||
Riga 365: | Riga 380: | ||
_de_wm | _de_wm | ||
_file "/etc/X11/default-display-manager" | _file "/etc/X11/default-display-manager" | ||
_comando "su | _comando "su" "/usr/bin/groups" | ||
_file "/var/log/syslog" | _file "/var/log/syslog" | ||
_comando "/bin/dmesg -l err" | _comando "/bin/dmesg -l err" | ||
Riga 384: | Riga 399: | ||
} | } | ||
# Funzione | # Funzione relativa ai problemi di rete | ||
function _rete | function _rete { | ||
_common | _common | ||
_file "/etc/network/interfaces" | _file "/etc/network/interfaces" | ||
Riga 405: | Riga 420: | ||
} | } | ||
# Funzione | # Funzione relativa a problemi video | ||
function _video { | function _video { | ||
_common | _common | ||
Riga 411: | Riga 426: | ||
_dir "/etc/X11/xorg.conf.d/" | _dir "/etc/X11/xorg.conf.d/" | ||
_file "/var/log/Xorg.0.log" | _file "/var/log/Xorg.0.log" | ||
_pack "xserver-xorg" | |||
_pack "nouveau" | _pack "nouveau" | ||
_pack "nvidia" | _pack "nvidia" | ||
_pack "mesa" | _pack "mesa" | ||
} | |||
# Funzione relativa ai problemi audio. Scarica ed esegue lo script ALSA | |||
function _audio { | |||
_common | |||
_pack "alsa" | |||
local alsaurl="http://www.alsa-project.org/alsa-info.sh" | |||
local risp | |||
echo -e "\nI log relativi ai problemi audio sono ricavati attraverso lo script di debug" | |||
echo "ALSA prelevabile all'indirizzo: $alsaurl" | |||
echo -en "\nVerrà ora scaricato e eseguito lo script ALSA. Continuare [S/n]? " | |||
read risp | |||
case $risp in | |||
""|Ss) | |||
# wget esiste? | |||
if [ ! -f /usr/bin/wget ]; then | |||
echo "Impossibile scaricare lo script ALSA. Installare il pacchetto wget." | |||
return | |||
fi | |||
# Crea un file temporaneo in /tmp che conterrà lo script ALSA | |||
local tempfile=`mktemp` | |||
echo $tempfile | |||
# Scarica lo script ALSA | |||
wget -q -O "$tempfile" "$alsaurl" | |||
# Se il download riesce... | |||
if [ $? -eq 0 ]; then | |||
_ok "Download script ALSA riuscito" | |||
# Imposta i permessi dello script scaricato | |||
chmod 777 "$tempfile" | |||
nome_e_riga "Problemi audio" | |||
# Esegue lo script ALSA | |||
su -c "$tempfile --stdout >> $log" $utente && _ok "Script ALSA eseguito" || _error "Script ALSA non eseguito" | |||
else | |||
_error "Download script ALSA fallito" | |||
fi | |||
# Rimuove il file temporaneo | |||
rm $tempfile | |||
;; | |||
*) | |||
echo "Lo script ALSA non è stato ancora eseguito." | |||
echo "Avviare manualmente lo script prelevabile a questo indirizzo:" | |||
echo "$alsaurl" | |||
echo "Lo script ALSA va eseguito con i permessi di normale utente." | |||
esac | |||
} | } | ||
Riga 438: | Riga 502: | ||
_pack "usbmount" | _pack "usbmount" | ||
} | } | ||
# Funzione relativa al funzionamento del touchpad | |||
function _tpad { | |||
_common | |||
_pack "xserver-xorg" | |||
_pack "touchpad" | |||
_file "/etc/X11/xorg.conf" | |||
_dir "/etc/X11/xorg.conf.d/" | |||
_file "/var/log/Xorg.0.log" | |||
_comando "su" "/usr/bin/synclient -l" | |||
} | |||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
# Funzioni utilizzate per tipo di problema (generiche) | # Funzioni utilizzate per tipo di problema (generiche) | ||
Riga 480: | Riga 556: | ||
# che sarà assegnato a $1 . L'output dei comandi viene inviato interamente al file di log. Se | # che sarà assegnato a $1 . L'output dei comandi viene inviato interamente al file di log. Se | ||
# si ha necessità di modificare gli output, creare una entry nel ciclo "case" | # si ha necessità di modificare gli output, creare una entry nel ciclo "case" | ||
# | |||
# Nel caso in cui il comando debba essere eseguito tramite 'su', richiamare la funzione con | |||
# due parametri: | |||
# $1 = la stringa 'su' | |||
# $2 = il comando da eseguire attraverso 'su' | |||
function _comando { | function _comando { | ||
# Il comando è eseguito tramite su? | # Il comando è eseguito tramite su? | ||
if [ "$ | if [ "$1" == "su" ];then | ||
local var=${2##*/} #var conterrà il comando ($2) con le opzioni ma privo del path | |||
local var2=${2%% *} #var2 conterrà il comando ($2) privo di eventuali opzioni ma con il path | |||
# il comando esiste? | |||
nome_e_riga "$var" | |||
if [ -f "$var2" ]; then | |||
case $var2 in | |||
local | *) | ||
local | # Comando per tutti gli altri casi non specificati in precedenza | ||
su -c "$2" $utente &>> $log && _ok "$var" || _error "$var" | |||
esac | |||
else | |||
echo "Comando "$var2" non trovato" >> $log && _error "$var" | |||
fi | |||
else | |||
# il comando non è eseguito tramite su | |||
local var=${1##*/} #var conterrà il comando con le opzioni ma privo del path | |||
local var2=${1%% *} #var2 conterrà il comando privo di eventuali opzioni ma con il path | |||
nome_e_riga "$var" | |||
if [ -f "$var2" ]; then | |||
# per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log | |||
case $var2 in | |||
/sbin/iwconfig) | |||
(iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var" | |||
;; | |||
/sbin/iwlist) | |||
(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... | |||
$1 &>> $log && _ok "$var" || _error "$var" | |||
esac | |||
else | |||
echo "Comando $var2 non trovato" >> $log && _error "$var" | |||
fi | |||
fi | fi | ||
} | } | ||
Riga 538: | Riga 625: | ||
if [ $numfile -eq 0 -a $numdir -eq 1 ]; then | if [ $numfile -eq 0 -a $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 | ||
Riga 547: | Riga 633: | ||
nome_e_riga "$file" | nome_e_riga "$file" | ||
cat $file &>> $log && _ok $file || _error $file | cat $file &>> $log && _ok $file || _error $file | ||
fi | |||
done | |||
# Funzione che invia al log il contenuto dei file presenti nelle sottodirectory | |||
# I due cicli for sono separati per permettere l'output di un file subito dopo | |||
# la directory a cui appartiene | |||
for file in "$1"*; do | |||
if [ -d "$file" ]; then | |||
_dir "$file/" | |||
fi | fi | ||
done | done | ||
fi | fi | ||
} | } | ||
Riga 566: | Riga 651: | ||
function _pack { | function _pack { | ||
nome_e_riga "$1" | nome_e_riga "Pacchetti che contengono \"$1\"" | ||
if [ $(dpkg -l | grep -s1ci "$1") -eq 0 ]; then | if [ $(dpkg -l | grep -s1ci "$1") -eq 0 ]; then | ||
echo "Nessun pacchetto installato" >> $log && _error "$1" | echo "Nessun pacchetto installato" >> $log && _error "$1" | ||
Riga 632: | Riga 717: | ||
echo "" >> $log | echo "" >> $log | ||
# Elenca | # 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 | ||
Riga 648: | Riga 733: | ||
nome_e_riga "Desktop Environment - Window Manager" | nome_e_riga "Desktop Environment - Window Manager" | ||
if false; then : | if false; then : | ||
elif [ -f /usr/bin/kde4-config -a "` | elif [ -f /usr/bin/kde4-config -a "`ps -u $utente | grep ksmserver`" != "" ]; then kde4-config --version >> $log && _ok "DE/WM" || _error "DE/WM" #KDE4 | ||
else | else | ||
echo "Sconosciuto" >> $log && _error "DE/WM" | echo "Sconosciuto" >> $log && _error "DE/WM" | ||
Riga 664: | Riga 749: | ||
_check | _check | ||
_scelta | _scelta | ||
_hide | |||
_upload | _upload | ||
_compress | _compress | ||
_exit | _exit | ||
</pre> | </pre> | ||
Riga 677: | Riga 757: | ||
== Changelog == | == Changelog == | ||
<!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la 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 all'interno del codice (la versione iniziale è 1.0.0) --> | ||
;1.0.23 | |||
:'rimossa la variabile "stat_log" e l'umask per permettere l'esecuzione dello script ALSA' | |||
:'logname al posto di who' | |||
:'create funzioni _audio (problemi audio) e _tpad (problemi touchpad)' | |||
:'creata la funzione _hide per sostituire il vero nome utente e il vero nome dell'host' | |||
:'rimossi i parametri da _compress_ok e _compress_error (inutilizzati)' | |||
:'modificato _comando per l'esecuzione del comando "su"' | |||
:'sostituito pgrep con ps' | |||
:'modifiche minori' | |||
:[[Utente:S3v|S3v]] 18:51, 29 nov 2013 (CET) | |||
;1.0.22 | ;1.0.22 | ||
:''create funzioni _exit, _data, _common (output per tutti i tipi di problema),'' | :''create funzioni _exit, _data, _common (output per tutti i tipi di problema),'' | ||
Riga 685: | Riga 775: | ||
:''output per ricavare il DM da /etc/X11/default-display-manager'' | :''output per ricavare il DM da /etc/X11/default-display-manager'' | ||
:''tolto l'array da _firmware e "resolvconf in _pack"'' | :''tolto l'array da _firmware e "resolvconf in _pack"'' | ||
:''nome del log | :''nome del log in base alla data corrente e variabile "utente" (nome utente != root)'' | ||
:''Modificata _comando per contemplare il comando "su"'' | :''Modificata _comando per contemplare il comando "su"'' | ||
:''modifiche minori'' | :''modifiche minori'' |
contributi