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

1.0.12
(1.0.11)
(1.0.12)
Riga 26: Riga 26:
<pre>
<pre>
#!/bin/bash
#!/bin/bash
# Path dei comandi dello script
PATH=/bin:/sbin:/usr/bin:/usr/sbin


# Nome del file di log
# Nome del file di log
Riga 39: Riga 42:
# Funzione che stampa il messaggio introduttivo
# Funzione che stampa il messaggio introduttivo
function _intro {
function _intro {
  cat <<TESTO
  echo "
*********************************************************************************
*********************************************************************************
*  www.debianizzati.org                                                        *
*  www.debianizzati.org                                                        *
*                                                                              *
*                                                                              *
*  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.11                                                             *
*  Versione 1.0.12                                                             *
*                                                                              *
*                                                                              *
*********************************************************************************
*********************************************************************************"
TESTO
}
}


Riga 53: Riga 55:
function _avvertenze {
function _avvertenze {
   local risp
   local risp
cat <<TESTO
  echo "
-- Lo script richiede i permessi di root per essere eseguito
-- Lo script richiede i permessi di root per essere eseguito
-- Per inviare il log su paste.debian.net è necessario il pacchetto 'pastebinit'
-- Per inviare il log su paste.debian.net è necessario il pacchetto 'pastebinit'
-- L'invio del log a paste.debian.net avverrà solo dopo esplicito consenso
-- L'invio del log a paste.debian.net avverrà solo dopo esplicito consenso
-- Verrà creato un file ($log) contenente l'output di questo script
-- Verrà creato un file ($log) contenente l'output di questo script
-- Verrà creato un file in formato compresso da inviare al forum
-- Verrà creato un file in formato compresso da inviare al forum"
TESTO
   echo -n "Continuare [S/n]? "
   echo -n "Continuare [S/n]? "
   read risp
   read risp
Riga 134: Riga 135:
     if [ -f $chunkfile ]; then
     if [ -f $chunkfile ]; then


# invia dati tramite pastebinit
    # invia dati tramite pastebinit
pastelink="$(pastebinit -a '' -b $paste_url -i $chunkfile)"
    pastelink="$(pastebinit -a '' -b $paste_url -i $chunkfile)"
       
if [ $? = 0 ]; then
    if [ $? = 0 ]; then
    # invio apparentemente riuscito (pastebinit exit status = 0)
        # invio apparentemente riuscito (pastebinit exit status = 0)
   
       
    # 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
      
      
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
   
     fi
     fi
    
    
Riga 187: Riga 188:
       _split_and_send  
       _split_and_send  
       if [ $? == 0 ]; then
       if [ $? == 0 ]; then
  echo -e "\nIl log è stato inviato"  
      echo -e "\nIl log è stato inviato"  
       else
       else
  echo -e "\nSi sono verificati errori nell'invio del log!"
      echo -e "\nSi sono verificati errori nell'invio del log!"
       fi
       fi
       ;;
       ;;
Riga 236: Riga 237:
}
}


# --------------------------------------------------------------------------
# Funzione di stampa menù e selezione del problema
# --------------------------------------------------------------------------
function _scelta {
  local num
 
  echo "
Selezionare il tipo di problema per il quale verrà generato il file di log
[1] Tutti
[0] Uscita"
  while true; do
  echo -n "Scegliere il numero corrispondente: "
  read num
    case $num in
      1)
        _wait
        _tutti
        break
        ;;
      0)
        exit 1
        ;;
      *)
        tput cuu1 # in alto di una riga
        tput ed # cancella fino alla fine dello schermo
        ;;
    esac
  done
}


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
Riga 249: Riga 281:
# 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 {
   /bin/echo -e "  $1" "\033[35G\033[01;32m•\033[0m"
   echo -e "  $1" "\033[35G\033[01;32m•\033[0m"
}
}


# 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 {
   /bin/echo -e "  $1" "\033[35G\033[01;31m•\033[0m"
   echo -e "  $1" "\033[35G\033[01;31m•\033[0m"
}
}


Riga 261: Riga 293:
# parametro della funzione -> $1 )
# parametro della funzione -> $1 )
function nome_e_riga {
function nome_e_riga {
  cat <<FINE >> $log
  echo "
******************************************
******************************************
$1
$1
******************************************
******************************************" >> $log
FINE
}
}


Riga 276: Riga 307:


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
# Array che contiene la lista delle funzioni
# Funzioni reltive a ciascun problema selezionato
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------


# Questo array contiene tutte le funzioni utilizzate per il log
function _tutti  {
# dei comandi.
# Per aggiungere una nuova funzione, inserire qui il suo nome e
# scriverne il codice in basso.
 
comandi=(
   _dmi_decode
   _dmi_decode
   _unamea
   _comando "/bin/uname -a"
   _version
   _file "/etc/debian_version"
   _dmesg
   _file "/var/log/syslog.1"
   _syslog
   _file "/var/log/syslog"
   _syslog_1
   _comando "/bin/lsmod"
   _lsmod
   _comando "/usr/bin/lspci -knn"
   _lspci
   _comando "/usr/bin/lsusb"
   _lsusb
   _comando "/sbin/fdisk -l"
   _fdisk
   _file "/etc/fstab"
   _fstab
   _comando "/bin/mount"
   _mount
   _comando "/bin/df"
   _df
   _file "/var/log/Xorg.0.log"
   _xorg_log
   _file "/etc/apt/sources.list"
   _sources
   _comando "/usr/bin/apt-cache policy"
   _apt_cache
   _comando "/usr/bin/apt-cache stats"
   _apt_get_check
   _comando "/usr/bin/apt-get check"
   _interfaces
   _file "/etc/network/interfaces"
   _hosts
   _file "/etc/hosts"
   _ifconfig
   _comando "/sbin/ifconfig"
   _ping
   _comando "/sbin/ifconfig -a"
   _ip
   _comando "/bin/ping -c3 8.8.8.8"
  _comando "/bin/ip addr"
  _comando "/bin/ip route list"
   _iwconfig
   _iwconfig
   _iwlist
   _iwlist
   _route
   _comando "/sbin/route -n"
   _resolvconf
   _resolvconf
   _resolvconf2
   _file "/etc/resolv.conf"
   _firmware
   _firmware
   _dhcp
   _dhcp
   _dhclient
   _file "/etc/dhclient.conf"
   _nm
   _nm
   _wicd
   _wicd
)
}




# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
# Funzioni contenute nell'array
# Funzioni che si occupano di inviare l'output di un comando oppure il
# contenuto di un file al file di log
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
# Funzione che invia un file al file di log
# La funzione va richiamata specificando il path completo del file che
# sarà assegnato a $1
function _file {
  nome_e_riga $1
    if [ -f $1 ]; then
      cat $1 &>> $log && _ok $1 || _error $1
    else
      echo "File $1 non trovato" >> $log && _error $1
    fi
}
# Invia l'output di un comando al file di log
# La funzione va richiamata specificando il path completo del comando
# (con eventuali opzioni) che sarà assegnato a $1
function _comando {
  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
    $1 &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var2 non trovato" >> $log && _error "$var"
  fi
}


# comando 'cat /sys/class/dmi/id/{sys_vendor,product_name,product_version,bios_version}'
# comando 'cat /sys/class/dmi/id/{sys_vendor,product_name,product_version,bios_version}'
Riga 335: Riga 390:
   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
}
# comando 'uname -a'
function _unamea {
  local var="uname -a"
  nome_e_riga "$var"
  if [ -x /bin/uname ]; then
    /bin/uname -a &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /etc/debian/version'
function _version {
  local var="/etc/debian_version"
  nome_e_riga "$var"
  if [ -f /etc/debian_version ]; then
    cat /etc/debian_version &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'dmesg'
function _dmesg {
  local var="dmesg"
  nome_e_riga "$var"
  if [ -x /bin/dmesg ]; then
    /bin/dmesg &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /var/log/syslog'
function _syslog {
  local var="/var/log/syslog"
  nome_e_riga "$var"
  if [ -f /var/log/syslog ]; then
    cat /var/log/syslog &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /var/log/syslog.1'
function _syslog_1 {
  local var="/var/log/syslog.1"
  nome_e_riga "$var"
  if [ -f /var/log/syslog.1 ]; then
    cat /var/log/syslog.1 &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'lsmod'
function _lsmod {
  local var="lsmod"
  nome_e_riga "$var"
  if [ -x /bin/lsmod ]; then
    /bin/lsmod &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'lspci'
function _lspci {
  local var="lspci"
  nome_e_riga "$var"
  if [ -x /usr/bin/lspci ]; then
    /usr/bin/lspci -knn &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'lsusb'
function _lsusb {
  local var="lsusb"
  nome_e_riga "$var"
  if [ -x /usr/bin/lsusb ]; then
    /usr/bin/lsusb &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'fdisk'
function _fdisk {
  local var="fdisk -l"
  nome_e_riga "$var"
  if [ -x /sbin/fdisk ]; then
    /sbin/fdisk -l &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# file /etc/fstab
function _fstab {
  local var="/etc/fstab"
  nome_e_riga "$var"
  if [ -f /etc/fstab ]; then
    cat /etc/fstab &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'mount'
function _mount {
  local var="mount"
  nome_e_riga "$var"
  if [ -x /bin/mount ]; then
    /bin/mount &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'df'
function _df {
  local var="df -h"
  nome_e_riga "$var"
  if [ -x /bin/df ]; then
    /bin/df -h &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# log del server X
function _xorg_log {
  local var="/var/log/Xorg.0.log"
  nome_e_riga "$var"
  if [ -f /var/log/Xorg.0.log ]; then
    cat /var/log/Xorg.0.log &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /etc/apt/sources.list'
function _sources {
  local var="/etc/apt/sources.list"
  nome_e_riga "$var"
  if [ -f /etc/apt/sources.list ]; then
    ls -l /etc/apt/sources.list &>> $log || _error "$var"
    echo "" >> $log
    cat /etc/apt/sources.list &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'apt_cache'
function _apt_cache {
  local var="apt-cache policy"
  nome_e_riga "$var"
  if [ -x /usr/bin/apt-cache ]; then
    /usr/bin/apt-cache policy &>> $log && _ok "$var" || _error "$var"
    _spazi
    var="apt-cache stats"
    nome_e_riga "$var"
    /usr/bin/apt-cache stats &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'apt_get_check'
function _apt_get_check {
  local var="apt-get check"
  nome_e_riga "$var"
  if [ -x /usr/bin/apt-get ]; then
    /usr/bin/apt-get check &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /etc/network/interfaces'
function _interfaces {
  local var="/etc/newtork/interfaces"
  nome_e_riga "$var"
  if [ -f /etc/network/interfaces ]; then
    ls -l  /etc/network/interfaces &>> $log || _error "$var"
    echo "" >> $log
    cat /etc/network/interfaces &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /etc/hosts'
function _hosts {
  local var="/etc/hosts"
  nome_e_riga "$var"
  if [ -f /etc/hosts ]; then
    cat /etc/hosts &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
# comandi 'ifconfig' e 'ifconfig -a'
function _ifconfig {
  local var="ifconfig"
  nome_e_riga "$var"
  if [ -x /sbin/ifconfig ]; then
    /sbin/ifconfig &>> $log && _ok "$var" || _error "$var"
    _spazi
    nome_e_riga "$var -a"
    ifconfig -a &>> $log && _ok "$var -a" || _error "$var -a"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'ping -c3 8.8.8.8'
function _ping {
  local var="ping"
  #Ping verso l'IP del DNS di Google 8.8.8.8
  local host="8.8.8.8"
  nome_e_riga "$var"
  if [ -x /bin/ping ]; then
    /bin/ping -c3 $host &>> $log && _ok "$var" || _error "$var"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
   fi
   fi
}
}
Riga 577: Riga 399:
   nome_e_riga "$var"
   nome_e_riga "$var"
   if [ -x /sbin/iwconfig ]; then
   if [ -x /sbin/iwconfig ]; then
     /sbin/iwconfig > $tmpfile 2>&1
     iwconfig > $tmpfile 2>&1
     if [ $? = 0 ]; then
     if [ $? = 0 ]; then
       _ok "$var"
       _ok "$var"
       /bin/sed -e 's/ESSID:.*/ESSID:"*script-removed*"/g' -e '/^[ ]*IE: Unknown:.*/d' $tmpfile &>> $log
       sed -e 's/ESSID:.*/ESSID:"*script-removed*"/g' -e '/^[ ]*IE: Unknown:.*/d' $tmpfile &>> $log
     else
     else
       _error "$var"
       _error "$var"
Riga 596: Riga 418:
   nome_e_riga "$var"
   nome_e_riga "$var"
   if [ -x /sbin/iwlist ]; then
   if [ -x /sbin/iwlist ]; then
     /sbin/iwlist scan > $tmpfile 2>&1
     iwlist scan > $tmpfile 2>&1
     if [ $? = 0 ]; then
     if [ $? = 0 ]; then
       _ok "$var"
       _ok "$var"
       /bin/sed -e 's/ESSID:.*/ESSID:"*script-removed*"/g' -e '/^[ ]*IE: Unknown:.*/d' $tmpfile &>> $log
       sed -e 's/ESSID:.*/ESSID:"*script-removed*"/g' -e '/^[ ]*IE: Unknown:.*/d' $tmpfile &>> $log
     else
     else
       _error "$var"
       _error "$var"
Riga 607: Riga 429:
   fi
   fi
   rm $tmpfile
   rm $tmpfile
}
# comandi 'ip addrr list' e 'ip route list'
function _ip {
  if [ -x /bin/ip ]; then
    nome_e_riga "ip addr list"
    /bin/ip addr list &>> $log && _ok "ip addr list" || _error "ip addr list"
    _spazi
    nome_e_riga "ip route list"
    /bin/ip route list &>> $log && _ok "ip route list" || _error "ip route list"
  else
    echo "Comando ip non trovato" >> $log && _error "ip"
  fi
}
# comando 'route -n'
function _route {
  local var="route"
  nome_e_riga "$var -n"
  if [ -x /sbin/route ]; then
    /sbin/route -n &>> $log && _ok "$var -n" || _error "$var -n"
  else
    echo "Comando $var non trovato" >> $log && _error "$var"
  fi
}
# comando 'cat /etc/resolv.conf'
function _resolvconf2 {
  local var="/etc/resolv.conf"
  nome_e_riga "$var"
  if [ -f /etc/resolv.conf ]; then
    ls -l /etc/resolv.conf &>> $log || _error "$var"
    echo "" >> $log
    cat /etc/resolv.conf &>> $log && _ok "$var" || _error "$var"
  else
    echo "File $var non trovato" >> $log && _error "$var"
  fi
}
}


Riga 683: Riga 468:
   else
   else
     dpkg -l | grep -i dhcp >> $log && _ok "$var"
     dpkg -l | grep -i dhcp >> $log && _ok "$var"
  fi
}
# comando 'cat /etc/dhclient.conf'
function _dhclient {
  local var="/etc/dhclient.conf"
  nome_e_riga "$var"
  if [ -f /etc/dhclient.conf ]; then
    cat /etc/dhclient.conf &>> $log && _ok "$var" || _error "$var"
  else
    echo "File /etc/dhclient.conf non trovato" >> $log && _error "$var"
   fi
   fi
}
}
Riga 741: Riga 515:
_avvertenze
_avvertenze
_check
_check
_wait
_scelta
 
# Ciclo sull'array di funzioni
for ((i=0; i<${#comandi[@]}; i++)); do
  ${comandi[$i]}
  _spazi
  sleep 1
done
echo -e "\nIl file $log è stato creato correttamente nella directory corrente."
 
_upload
_upload
_compress
_compress
Riga 759: Riga 524:
== 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.12
:''Inserito il path di default''
:''Sostituito il comando cat con echo nei messaggi a video''
:''Inserito un menù di scelta e rimosso l'array delle funzioni''
:''Inserite due funzioni per inviare al log un file o un output generico''
:''lspci -knn''
:''Rimossa _dmesg (l'ouput è fornito da syslog)''
:[[Utente:S3v|S3v]] 15:25, 23 mag 2013 (CEST)
;1.0.11
;1.0.11
:''Modificata la funzione _wicd''
:''Modificata la funzione _wicd''
6 999

contributi