Creazione automatica di un file di log per inviare quesiti al forum: differenze tra le versioni

+ 1.0.23
mNessun oggetto della modifica
(+ 1.0.23)
Riga 37: Riga 37:
log="log_`date +%d%b_%H%M%S`"
log="log_`date +%d%b_%H%M%S`"


# Inizializzazione di complog e stat_log
# Nome del file compresso. Viene usata l'estensione .bz2 a meno
# complog contiene il nome del file compresso di log
# che non venga modificata da _compress
# stat_log contiene un intero che indica se il file di log è stato creato
complog="$log.bz2"
complog=""
stat_log=0


# I file creati saranno leggibili e scrivibili da tutti
# I file creati saranno leggibili e scrivibili da tutti
umask 0111
umask 0011


# Nome utente
# Nome utente e nome host
utente=`who -s | head -n1 | cut -f1 -d ' '`
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.22                                                             *
*  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 $log.bz2 || _compress_err $log.bz2
         bzip2 -k9 $log && _compress_ok || _compress_err
        complog="$log.bz2"
       elif [ -f /usr/bin/zip ]; then
       elif [ -f /usr/bin/zip ]; then
         zip $log.zip $log && _compress_ok $log.zip || _compress_err $log.zip
         zip $log.zip $log && _compress_ok || _compress_err
         complog="$log.zip"  
         complog="$log.zip"  
       else
       else
         tar czf $log.tgz $log && _compress_ok $log.tgz || _compress_err $log.tgz
         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 mount/umount
[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: "
    echo -n "Scegliere il numero corrispondente: "
  read num
    read num
    case $num in
    case $num in
       1)
       1)
         _wait
         _wait
Riga 281: Riga 281:
         ;;
         ;;
       3)
       3)
_wait
_audio
break
;;
      4)
_wait
_wait
_apt
_apt
break
break
;;
;;
       4)
       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
    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 [ $stat_log -eq 1 ]; then
   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 [ "$complog" == "" ]; then
   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"
  else
    echo -e "File compresso da allegare alla discussione sul forum: \033[01m$complog\033[0m"
   fi
   fi
    
    
Riga 365: Riga 380:
   _de_wm
   _de_wm
   _file "/etc/X11/default-display-manager"
   _file "/etc/X11/default-display-manager"
   _comando "su -c /usr/bin/groups $utente"
   _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 relative ai problemi di rete
# 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 relative a problemi video
# 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 [ "${1:0:2}" == "su" ];then
   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
      
      
    # variabile "comando" priva del nome utente, di su -c e del path
      case $var2 in
     local comando1="${1% *}" # comando1 conterrà $1 senza nome utente
*)
     local comando="${comando1##*/}" # comando conterrà solo il nome del comando
    # Comando per tutti gli altri casi non specificati in precedenza
 
    su -c "$2" $utente &>> $log && _ok "$var" || _error "$var"
     nome_e_riga "$comando"
      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
      
      
    # nell'output viene sostituito il vero nome utente con "nomeutente"
      # per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log
    $1 | sed "s/$utente/nomeutente/g" &>> $log && _ok "$comando" || _error "$comando"
      case $var2 in
    return # Funzione _comando terminata
/sbin/iwconfig)
  fi
      (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var"
      ;;
  local var=${1##*/} #var conterrà il comando con le opzioni ma privo del path
/sbin/iwlist)
  local var2=${1%% *} #var2 conterrà il comando privo di eventuali opzioni ma con il path
      (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var"
  nome_e_riga "$var"
      ;;
  if [ -f "$var2" ]; then
*)
 
      # per tutti gli altri comandi non specificati sopra...
    # per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log
      $1 &>> $log && _ok "$var" || _error "$var"
    case $var2 in
      esac
      /sbin/iwconfig)
    else
    (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var"
      echo "Comando $var2 non trovato" >> $log && _error "$var"
    ;;
    fi
      /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
}
}
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"
    return
   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
 
  # 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
  done
}
}


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 il contenuto dei 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
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 "`pgrep ksmserver`" != "" ]; then kde4-config --version >> $log && _ok "DE/WM" || _error "DE/WM"; return # KDE 4
   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
# Se il file di log esiste, stat_log=1
if [ -f $log ]; then
  stat_log=1
fi
_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 on base alla data corrente e variabile "utente" (nome utente != root)''
:''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''
6 999

contributi