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

Riga 66: Riga 66:
*                                                                              *
*                                                                              *
*  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.30                                                             *
*  Versione 1.0.31                                                             *
*                                                                              *
*                                                                              *
*********************************************************************************"
*********************************************************************************"
Riga 82: Riga 82:
   echo -n "Continuare [S/n]? "
   echo -n "Continuare [S/n]? "
   read risp
   read risp
   case $risp in
    
    ""|[Ss])
  # Se non viene premuto "s" o "S" o [Invio], lo script termina
      ;;
  ! [ "$risp" = "s" -o "$risp" = "S" -o "$risp" = "" ] && _exit
    *)
      _exit
  esac
}
}


# Funzione che esegue un check preliminare
# Funzione che esegue un check preliminare
function _check {
function _check {
   if [[ $EUID -ne 0 ]]; then # Lo script viene lanciato da root?
   if [ $EUID -ne 0 ]; then # Lo script viene lanciato da root?
     echo "Lo script deve essere lanciato da root"
     echo "Lo script deve essere lanciato da root" && _exit
    _exit
   fi
   fi
   
   
Riga 105: Riga 101:
     read risp
     read risp
     case $risp in
     case $risp in
       ""|[Ss])
       ""|[Ss]) rm -f $log $log.zip $log.bz2 $log.tgz ;;
        rm -f $log $log.zip $log.bz2 $log.tgz
       *)       _exit
        ;;
       *)
        _exit
     esac
     esac
   fi
   fi
Riga 120: Riga 113:


# Funzione per separare il log in parti per l'invio a paste.debian.net
# Funzione per separare il log in parti per l'invio a paste.debian.net
function _split_and_send {
function _split_and_send {
   local paste_url='http://paste.debian.net'
   local paste_url='http://paste.debian.net'
Riga 191: Riga 183:
   
   
   # cancella le parti di log inviate
   # cancella le parti di log inviate
  # scarta i messaggi di errore (se presenti)
   rm -f $chunk_prefix.{0..9}
   rm $chunk_prefix.{0..9} > /dev/null 2>&1
   
   
   return $paste_exit_status
   return $paste_exit_status
Riga 309: Riga 300:
function _ok {
function _ok {
   echo -e "[$VERDE•$FINE]  $1"
   echo -e "[$VERDE•$FINE]  $1"
}
}


Riga 318: Riga 308:


# Funzione che invia nel file di log due righe tra le quali viene visualizzato il nome del comando
# 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 )
# (passato come primo parametro della funzione -> $1)
function nome_e_riga {
function nome_e_riga {
echo "
  echo "
******************************************
******************************************
$1
$1
Riga 350: Riga 340:
       if [ -f "$file" ]; then # se l'elemento è un file...
       if [ -f "$file" ]; then # se l'elemento è un file...
           var="`sed -n "s/ssid=//p" $file`" # ... var conterrà l'eventuale ESSID...
           var="`sed -n "s/ssid=//p" $file`" # ... var conterrà l'eventuale ESSID...
           if [ "$var" != "" ]; then # ... e se è diverso dalla stringa vuota...
           if [ "$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
Riga 375: Riga 365:
   fi
   fi
    
    
   echo -e "Script terminato.\n"
   echo -e "Script terminato\n"
   exit 0
   exit 0
}
}
Riga 391: Riga 381:
   _de_wm
   _de_wm
   _file "/etc/X11/default-display-manager"
   _file "/etc/X11/default-display-manager"
   _comando "su" "/usr/bin/groups"
   _comando "/usr/bin/groups" "su"
   _file "/var/log/syslog"
   _file "/var/log/syslog"
   _comando "/bin/dmesg -l err"
   _comando "/bin/dmesg -l err"
Riga 525: Riga 515:
   _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 "su" "/usr/bin/synclient -l"
   _comando "/usr/bin/synclient -l" "su"
}
}


Riga 540: Riga 530:
     nome_e_riga $1
     nome_e_riga $1
     if [ -f $1 ]; then
     if [ -f $1 ]; then
      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 [ `egrep -s1ci "rsyslogd.*start$" $1` -ne 0 ]; then
      if [ `egrep -s1ci "rsyslogd.*start$" $1` -ne 0 ]; then
Riga 558: Riga 548:
      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
Riga 571: Riga 561:
# 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"
# Es. _comando "/usr/bin/apt-get update"
#
#
# Nel caso in cui il comando debba essere eseguito tramite 'su', richiamare la funzione con
# Nel caso in cui il comando debba essere eseguito tramite 'su', richiamare la funzione con
# due parametri:
# due parametri:
# $1 = la stringa 'su'
# $1 = il comando da eseguire attraverso 'su'
# $2 = il comando da eseguire attraverso 'su'
# $2 = la stringa 'su'
# Es. _comando "/usr/bin/groups" "su"


function _comando {
function _comando {


   # Il comando è eseguito tramite su?
   local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path
  if [ "$1" == "su" ];then
  local var2=${1%% *} # var2 conterrà il comando ($1) privo di eventuali opzioni ma con il path
    local var=${2##*/} #var conterrà il comando ($2) con le opzioni ma privo del path
  nome_e_riga "$var"
    local var2=${2%% *} #var2 conterrà il comando ($2) privo di eventuali opzioni ma con il path
 
    # il comando esiste?
  if [ -f "$var2" ]; then # il comando esiste?
    nome_e_riga "$var"
      if [ $# -eq 2 ]; then # Se vi sono 2 parametri, viene utilizzato "su"
    if [ -f "$var2" ]; then
  case $var2 in
   
    *)
      case $var2 in
# Comando per tutti gli altri casi non specificati in precedenza
*)
su -c "$1" $utente &>> $log && _ok "$var" || _error "$var"
    # Comando per tutti gli altri casi non specificati in precedenza
  esac
    su -c "$2" $utente &>> $log && _ok "$var" || _error "$var"
      else # non viene utilizzato "su"
      esac
  case $var2 in
   
      # per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log
    else
      /sbin/iwconfig)
      echo "Comando "$var2" non trovato" >> $log && _error "$var"
  (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _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 l'output del comando è inviato inalterato al log
  $1 &>> $log && _ok "$var" || _error "$var"
  esac  
      fi
   else
   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"
       echo "Comando $var2 non trovato" >> $log && _error "$var"
    fi
   fi
   fi
}
}
Riga 671: Riga 651:
   local packages=`dpkg -l | grep -i "$1"`
   local packages=`dpkg -l | grep -i "$1"`


   if [ "$packages" = "" ]; then
   if [ -z "$packages" ]; then
     echo "Nessun pacchetto installato" >> $log && _error "$1"
     echo "Nessun pacchetto installato" >> $log && _error "$1"
   else
   else
Riga 680: Riga 660:
# Funzione che verifica l'esistenza e l'esecuzione di alcuni demoni
# Funzione che verifica l'esistenza e l'esecuzione di alcuni demoni
# Viene chiamata con due parametri:
# Viene chiamata con due parametri:
# $1 - persorso dell'eseguibile
# $1 - percorso dell'eseguibile
# $2 - nome da visualizzare
# $2 - nome da visualizzare
# Se si vuol visualizzare la versione del demone, inserire il comando adatto
# Se si vuol visualizzare la versione del demone, inserire il comando adatto
Riga 772: Riga 752:
   # Con "cut" viene prelevato il terzo campo (la release voluta)
   # Con "cut" viene prelevato il terzo campo (la release voluta)
   local release=`sed -e 's/^ *//' -e '/^deb http:\/\/ftp\...\.debian\.org.*\(wheezy \|stable \|jessie \|testing \|sid \|unstable \)/!d' /etc/apt/sources.list | cut -d ' ' -f3`
   local release=`sed -e 's/^ *//' -e '/^deb http:\/\/ftp\...\.debian\.org.*\(wheezy \|stable \|jessie \|testing \|sid \|unstable \)/!d' /etc/apt/sources.list | cut -d ' ' -f3`
 
   # Numero di release trovate
   # Numero di release trovate
   local pkg="" num=`echo "$release" | wc -l`
   local num=`echo "$release" | wc -l`
 
  local pkg="" var="Pacchetti esterni" linea linea2 var3


   local var="Pacchetti esterni"
  # Variabile che contiene le fonti di pacchetti disponibili
  nome_e_riga "$var"
   local origini=`apt-cache policy | sed -e '/o=/!d' -e 's/^.*o=//' -e 's/,.*$//' | sort | uniq`


  # File temporanei
  local filetemporaneo1=`mktemp`
  local filetemporaneo2=`mktemp`
 
  # 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"
     echo "Sono presenti $num release in sources.list" >> $log && _error "$var"
     echo "Sono presenti $num release in sources.list" >> $log && _error "$var"
     return
     return
   else
   else
  # 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
         wheezy|stable)   pkg=`aptitude -F '%p %v' search '~i !~Astable'   --disable-columns | column -t -s' '` ;;
         wheezy|stable)
         jessie|testing)   pkg=`aptitude -F '%p %v' search '~i !~Atesting'  --disable-columns | column -t -s' '` ;;
pkg=`aptitude -F '%p %v %t' search '~i !~Astable' --disable-columns | column -t`
         sid|unstable)     pkg=`aptitude -F '%p %v' search '~i !~Aunstable' --disable-columns | column -t -s' '` ;;
if [ "$pkg" ]; then
  echo "$pkg" > $filetemporaneo1
 
  while read linea; do
      # nome dei pacchetti installati, non appartenenti a stable e provenienti da origini
      # elencate nella variabile "origini". Vanno in filetemporaneo2
      var3="aptitude -F '%p' search '~i ?not(?archive(stable)) ?origin($linea)' > $filetemporaneo2"
      eval $var3
      while read linea2; do
  sed -i "/$linea2/ s/$/ $linea/" $filetemporaneo1
      done < $filetemporaneo2
  done <<< "$origini"
fi ;;
         jessie|testing)
pkg=`aptitude -F '%p %v %t' search '~i !~Atesting'  --disable-columns | column -t`
if [ "$pkg" ]; then
  echo "$pkg" > $filetemporaneo1
 
  while read linea; do
      # nome dei pacchetti installati, non appartenenti a testing e provenienti da origini
      # elencate nellaa variabile "origini". Vanno in filetemporaneo2
      var3="aptitude -F '%p' search '~i ?not(?archive(testing)) ?origin($linea)' > $filetemporaneo2"
      eval $var3
      # aggiunge l'origine del pacchetto in filetemporaneo1
      while read linea2; do
  sed -i "/$linea2/ s/$/ $linea/" $filetemporaneo1
      done < $filetemporaneo2
  done <<< "$origini"
fi ;;
         sid|unstable)
pkg=`aptitude -F '%p %v %t' search '~i !~Aunstable' --disable-columns | column -t`
if [ "$pkg" ]; then
  echo "$pkg" > $filetemporaneo1
 
  while read linea; do
      # nome dei pacchetti provenienti da un'origine. Vanno in filetemporaneo2
      var3="aptitude -F '%p' search '~i ?not(?archive(unstable)) ?origin($linea)' > $filetemporaneo2"
      eval $var3
      while read linea2; do
  sed -i "/$linea2/ s/$/ $linea/" $filetemporaneo1
      done < $filetemporaneo2
  done <<< "$origini"
fi ;;
     esac
     esac
   fi
   fi


  # Invia al log il contenuto di pkg (se esiste)
  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"
     cat $filetemporaneo1 >> $log && _ok "$var"
   fi
   fi
  # Rimuove i file temporanei
  rm -f $filetemporaneo1 $filetemporaneo2
}
}


6 999

contributi