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

1.0.66
(1.0.65)
(1.0.66)
Riga 5: Riga 5:
* Connessioni di rete
* Connessioni di rete
* Video
* Video
* Avvio del sistema (boot)
* Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui])
* Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui])
* Sottosistema di gestione dei pacchetti (APT)
* Sottosistema di gestione dei pacchetti (APT)
Riga 32: Riga 33:
== Parametri dello script ==
== Parametri dello script ==
Lo script accetta, in maniera facoltativa, alcuni parametri:
Lo script accetta, in maniera facoltativa, alcuni parametri:
;--tipo={rete|video|audio|apt|mount|touchpad|generico}:specifica il tipo di problema
;--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}:specifica il tipo di problema
;--nocompress:non crea il file compresso del file di log
;--nocompress:non crea il file compresso del file di log
;--nopaste:non invia il file di log a paste.debian.net
;--nopaste:non invia il file di log a paste.debian.net
Riga 98: Riga 99:


# Versione script
# Versione script
readonly VERSIONE="1.0.65"
readonly VERSIONE="1.0.66"


# Path e nome dello script
# Path e nome dello script
readonly PATH_NAME="$(readlink -f "${BASH_SOURCE[0]}")"
readonly PATH_NAME="$(readlink -f "${BASH_SOURCE[0]}")"


# Codename per stable e testing. Da modificare nei successivi rilasci di Debian
# Codename per oldstable, stable e testing. Da modificare nei successivi rilasci di Debian
readonly OLDSTABLE="jessie"
readonly OLDSTABLE="jessie"
readonly STABLE="stretch"
readonly STABLE="stretch"
Riga 144: Riga 145:
   # deve esistere in /etc/passwd (o equivalente)
   # deve esistere in /etc/passwd (o equivalente)
   getent passwd "$tmputente" > /dev/null 2>&1 || {
   getent passwd "$tmputente" > /dev/null 2>&1 || {
     echo "Nome utente invalido o non esistente!" >&2
     echo "Nome utente non valido o non esistente!" >&2
     exit 255
     exit 255
   }
   }
Riga 196: Riga 197:
Utilizzo dei parametri:
Utilizzo dei parametri:


$BOLD--tipo={rete|video|audio|apt|mount|touchpad|generico}$FINE
$BOLD--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}$FINE
   utilizzato per specificare un solo tipo di problema.
   utilizzato per specificare un solo tipo di problema.
   Es: --tipo=apt
   Es: --tipo=apt
Riga 231: Riga 232:
# Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni
# Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni
# nel passaggio del parametro tipo=blabla
# nel passaggio del parametro tipo=blabla
NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0
NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0 TIPO_BOOT=0
TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0
TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0
DEBUG=0
DEBUG=0
Riga 244: Riga 245:
     "--tipo=apt") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_APT=1  ;;
     "--tipo=apt") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_APT=1  ;;
     "--tipo=video") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_VIDEO=1 ;;
     "--tipo=video") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_VIDEO=1 ;;
    "--tipo=boot") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_BOOT=1 ;;
     "--tipo=audio") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_AUDIO=1 ;;
     "--tipo=audio") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_AUDIO=1 ;;
     "--tipo=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1  ;;
     "--tipo=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1  ;;
Riga 484: Riga 486:
   [ "$TIPO_RETE"  -eq 1 ] && _wait && _header "rete"          && _rete  && return
   [ "$TIPO_RETE"  -eq 1 ] && _wait && _header "rete"          && _rete  && return
   [ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video"          && _video  && return
   [ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video"          && _video  && return
  [ "$TIPO_BOOT"  -eq 1 ] && _wait && _header "boot"          && _boot  && return
   [ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio"          && _audio  && return
   [ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio"          && _audio  && return
   [ "$TIPO_APT"  -eq 1 ] && _wait && _header "APT"            && _apt    && return
   [ "$TIPO_APT"  -eq 1 ] && _wait && _header "APT"            && _apt    && return
Riga 499: Riga 502:
[1] Problemi relativi alle connessioni di rete
[1] Problemi relativi alle connessioni di rete
[2] Problemi video
[2] Problemi video
[3] Problemi audio
[3] Problemi di boot
[4] Problemi di gestione dei pacchetti (APT)
[4] Problemi audio
[5] Problemi di mount/unmount
[5] Problemi di gestione dei pacchetti (APT)
[6] Problemi di funzionamento del touchpad
[6] Problemi di mount/unmount
[7] Altro tipo di problema
[7] Problemi di funzionamento del touchpad
[8] Altro tipo di problema
[0] Uscita"
[0] Uscita"
   
   
Riga 510: Riga 514:
     read num
     read num
     case "$num" in
     case "$num" in
         [1-7]) _wait  ;;& # ;;& -> va alla successiva occorrenza del carattere immesso
         [1-8]) _wait  ;;& # ;;& -> va alla successiva occorrenza del carattere immesso
             1) _header "rete"          && _rete  ;;&
             1) _header "rete"          && _rete  ;;&
             2) _header "video"        && _video  ;;&
             2) _header "video"        && _video  ;;&
             3) _header "audio"        && _audio  ;;&
             3) _header "boot"          && _boot  ;;&
             4) _header "APT"          && _apt    ;;&
            4) _header "audio"        && _audio  ;;&
             5) _header "mount-unmount" && _mount  ;;&
             5) _header "APT"          && _apt    ;;&
             6) _header "touchpad"      && _tpad  ;;&
             6) _header "mount-unmount" && _mount  ;;&
             7) _header "generico"      && _common ;;&
             7) _header "touchpad"      && _tpad  ;;&
         [1-7]) break  ;; # Termina il ciclo 'while'
             8) _header "generico"      && _common ;;&
         [1-8]) break  ;; # Termina il ciclo 'while'
             0) _exit  ;; # È stato inserito '0' . Uscita dallo script
             0) _exit  ;; # È stato inserito '0' . Uscita dallo script
             *) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda
             *) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda
Riga 531: Riga 536:
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------


# Funzione che stampa solo lo spazio e il nome del comando, prima di eseguirlo
# Funzione che stampa solo parentesi e il nome del comando, prima di eseguirlo
function _prompt {
function _prompt {
   echo -n "[ ]  $*"
   echo -n "[ ]  $*"
Riga 559: Riga 564:
# Funzione che invia nel file di log due righe tra le quali viene visualizzato il
# 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)
# nome del comando (passato come primo parametro della funzione -> $1)
function nome_e_riga {
function _nome_e_riga {
   echo "
   echo "
******************************************
******************************************
Riga 616: Riga 621:
  sed -i -r "s/(NetworkManager.*Activation: starting connection ').*(')/\1\*script-removed\*\2/g" "$log"
  sed -i -r "s/(NetworkManager.*Activation: starting connection ').*(')/\1\*script-removed\*\2/g" "$log"
  sed -i -r "s/(NetworkManager.*policy: set ').*(')/\1\*script-removed\*\2/g" "$log"
  sed -i -r "s/(NetworkManager.*policy: set ').*(')/\1\*script-removed\*\2/g" "$log"
}
# Invia al log l'output del comando passato come primo parametro e
# con i permessi utente
function _su {
  echo "$(su -c "$1" $utente)" >> "$log"
}
}


Riga 692: Riga 703:
       echo "Codifica non riuscita"
       echo "Codifica non riuscita"
     fi
     fi
    # Modifica i permessi del file in modo che possa essere letto da tutti
    chmod 444 "$tempfile"
}
}


Riga 763: Riga 776:
   _comando "/sbin/blkid"
   _comando "/sbin/blkid"
   _file "/etc/fstab"
   _file "/etc/fstab"
  _dir "/etc/fstab.d/"
   _comando "/bin/findmnt"
   _comando "/bin/findmnt"
   _comando "/bin/lsblk"
   _comando "/bin/lsblk"
   _comando "/bin/df"
   _comando "/bin/df"
  _dir "/etc/modprobe.d/"
  _dir "/etc/modules-load.d/"
  _file "/etc/modules"
   _file "/etc/apt/sources.list"
   _file "/etc/apt/sources.list"
   _dir "/etc/apt/sources.list.d/"
   _dir "/etc/apt/sources.list.d/"
Riga 783: Riga 800:
   _common
   _common
   _file "/etc/network/interfaces"
   _file "/etc/network/interfaces"
  _dir "/etc/network/interfaces.d/"
   _file "/etc/hosts"
   _file "/etc/hosts"
   _comando "/sbin/ifconfig"
   _comando "/sbin/ifconfig"
Riga 817: Riga 835:
   _pack "mesa"
   _pack "mesa"
   _pack "fglrx"
   _pack "fglrx"
}
# Funzione relativa ai problemi di avvio del sistema
function _boot {
  _common
  _file "/etc/default/grub"
  _file "/boot/grub/grub.cfg"
  _dir "/etc/default/grub.d/"
  _dir "/etc/grub.d/"
  _file "/boot/grub/device.map"
  _comando "/usr/sbin/grub-mkdevicemap"
  _pack grub
}
}


Riga 823: Riga 853:
   _common
   _common
   _pack "alsa"
   _pack "alsa"
  _nome_e_riga "dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel'"
  _prompt "ALSA dmesg"
  dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> "$log" && _ok || _error
    
    
   local risp alsaurl="http://www.alsa-project.org/alsa-info.sh"
   local risp alsaurl="http://www.alsa-project.org/alsa-info.sh"
Riga 847: Riga 880:
      # Imposta i permessi dello script scaricato
      # Imposta i permessi dello script scaricato
      chmod 777 "$tempfile"
      chmod 777 "$tempfile"
      nome_e_riga "Problemi audio"
      _nome_e_riga "Problemi audio"
      # rimuove il comando "dmesg" dallo script ALSA
      # perché non eseguibile da utente normale (il comando è
      # stato inserito a parte in questa funzione)
      sed -i "/^$(printf '\t')withdmesg/d" "$tempfile"
      # Esegue lo script ALSA
      # Esegue lo script ALSA
               _prompt "Esecuzione script ALSA"
               _prompt "Esecuzione script ALSA"
      su  -c "$tempfile --stdout >> $log" "$utente" && _ok || _error
      _su "$tempfile --stdout" && _ok || _error
  else
  else
      _error "Download script ALSA fallito"
      _error "Download script ALSA fallito"
Riga 913: Riga 950:


function _file {
function _file {
     nome_e_riga "$1"
     _nome_e_riga "$1"
     _prompt "$1"
     _prompt "$1"
     if [ -f "$1" ]; then
     if [ -f "$1" ]; then
Riga 936: Riga 973:
# 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 || _error
cat "$1" &>> "$log" && _ok || _error
nome_e_riga "$1".1
_nome_e_riga "$1".1
                         _prompt "$1".1
                         _prompt "$1".1
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error
Riga 967: Riga 1 004:
   local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path
   local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path
   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"
   _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 chiamata la funzione "_su"
  case "$1" in
  case "$1" in
      "/usr/bin/synclient -l")
      "/usr/bin/synclient -l")
      # se $DISPLAY è vuota, usa :0 (default per il primo server X)
      # se $DISPLAY è vuota, usa :0 (default per il primo server X)
      su -c "DISPLAY=${DISPLAY:-:0} $1" "$utente" &>> "$log" && _ok || _error ;;
      _su "DISPLAY=${DISPLAY:-:0} $1" && _ok || _error ;;
      *)     
      *)     
      su -c "$1" "$utente" &>> "$log" && _ok || _error
      _su "$1" && _ok || _error
  esac
  esac
       else # non viene utilizzato "su"
       else # non viene utilizzato "su"
Riga 996: Riga 1 033:
               "/usr/bin/nmcli device show")
               "/usr/bin/nmcli device show")
                   LANG=C nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*|GENERAL.CONNECTION:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \
                   LANG=C nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*|GENERAL.CONNECTION:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \
                       ( _error && echo "Comando valido solo per Jessie" >> "$log" ) ;;
                       ( _error && echo "Comando valido solo per Jessie e versioni superiori" >> "$log" ) ;;
               /bin/dmesg*)
               /bin/dmesg*)
  # Il comando viene eseguito solo se è non installato systemd
  # Il comando viene eseguito solo se è non installato systemd
  [ $systemd -eq 0 ] && $1 &>> "$log" && _ok || _error ;;
  [ $systemd -eq 0 ] && $1 &>> "$log" && _ok || _error ;;
              "/usr/sbin/grub-mkdevicemap")
  local devicemaptempfile="$(mktemp)" && \
  grub-mkdevicemap -m "$devicemaptempfile" && \
  if [ -f "$devicemaptempfile" ]; then cat "$devicemaptempfile" >> "$log"; fi && _ok || _error ;;
      *)
      *)
  # 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
Riga 1 012: Riga 1 053:
# Funzione che invia il contenuto dei file di una directory al file di log
# Funzione che invia il contenuto dei file di una directory al file di log
function _dir {
function _dir {
   nome_e_riga "$1"
   _nome_e_riga "$1"
   _prompt "$1"
   _prompt "$1"


Riga 1 035: Riga 1 076:
     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"
         _prompt "$file"
         _prompt "$file"
         cat "$file" &>> "$log" && _ok || _error
         cat "$file" &>> "$log" && _ok || _error
Riga 1 052: Riga 1 093:
}
}


# Funzione che elenca i pacchetti installati in base alla parola
# Funzione che elenca i pacchetti installati che contengono la parola
# passata come parametro ($1)
# passata come parametro ($1)


function _pack {
function _pack {
   nome_e_riga "Pacchetti che contengono \"$1\""
   _nome_e_riga "Pacchetti che contengono \"$1\""
   _prompt "$1"
   _prompt "Nomi di pacchetti con $1"


   # Variabile che contiene i pacchetti trovati
   # Variabile che contiene i pacchetti trovati
Riga 1 081: Riga 1 122:
   # vers = versione del demone ; var = nome dello script d'avvio del demone
   # vers = versione del demone ; var = nome dello script d'avvio del demone
   local vers="" var=""
   local vers="" var=""
   nome_e_riga "$2"
   _nome_e_riga "$2"
   _prompt "$2"
   _prompt "$2"
   if [ -f "$1" ]; then
   if [ -f "$1" ]; then
Riga 1 110: Riga 1 151:
function _dmi_decode {
function _dmi_decode {
   local var="/sys/class/dmi/id/*"
   local var="/sys/class/dmi/id/*"
   nome_e_riga "$var"
   _nome_e_riga "$var"
   _prompt "$var"
   _prompt "$var"
   if [ -f /sys/class/dmi/id/sys_vendor ]; then
   if [ -f /sys/class/dmi/id/sys_vendor ]; then
Riga 1 126: Riga 1 167:
   local i var="Firmware"
   local i var="Firmware"
   _prompt "$var"
   _prompt "$var"
   nome_e_riga "$var"
   _nome_e_riga "$var"
   dpkg -l | grep -i firmware >> "$log" && _ok || _error
   dpkg -l | grep -i firmware >> "$log" && _ok || _error
   echo >> "$log"
   echo >> "$log"
Riga 1 183: Riga 1 224:
# Funzione che "cerca" di ricavare il nome e la versione del DE/WM utilizzato
# Funzione che "cerca" di ricavare il nome e la versione del DE/WM utilizzato
function _de_wm {
function _de_wm {
   nome_e_riga "Desktop Environment - Window Manager"
   _nome_e_riga "Desktop Environment - Window Manager"
   _prompt "DE/WM"
   _prompt "DE/WM"
   {
   {
Riga 1 262: Riga 1 303:
  # (vedere anche il modo in cui viene ricavata la variabile "release" in alto)
  # (vedere anche il modo in cui viene ricavata la variabile "release" in alto)
  if [ -z "$release" ]; then
  if [ -z "$release" ]; then
     nome_e_riga "${var} all'archivio \"NON RILEVATO!\""
     _nome_e_riga "${var} all'archivio \"NON RILEVATO!\""
     echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error
     echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error
     return 1
     return 1
Riga 1 273: Riga 1 314:
  local num=$(echo "$release" | wc -l)
  local num=$(echo "$release" | wc -l)
    
    
  # Se il numero di release è diverso da 1, la funzione termina
  # Se il numero di release è diverso da 1 (pinning?), 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
     echo "Sono presenti ${num} release in sources.list" >> "$log" && _error
     return
     return
Riga 1 299: Riga 1 340:


  # 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
     echo "Nessun pacchetto esterno installato" >> "$log" && _error
Riga 1 334: Riga 1 375:
== Changelog ==
== Changelog ==
<!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile 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 (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) -->
;1.0.66
:''Aggiunto problema per avvio del sistema (boot)''
:''Aggiunta funzione _su (c'erano problemi con lo script ALSA)''
:''Aggiunte directory <code>/etc/fstab/</code>, <code>/etc/modprobe.d/</code>'',
:''<code>/etc/modules-load.d/</code>, <code>/etc/network/interfaces.d/</code> e il''
:''file <code>/etc/modules</code>''
:''dmesg dello scipt ALSA spostato nello script''
:''Modifiche e correzioni minori''
:[[Utente:S3v|S3v]] 10:37, 29 giu 2019 (CEST)
;1.0.65
;1.0.65
:''Aggiunti "ip -s -d link show" e Xorg.0.log locale''
:''Aggiunti "ip -s -d link show" e Xorg.0.log locale''
6 999

contributi