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

m
versione 1.0.73 - correzione bug funzione _hide
Nessun oggetto della modifica
m (versione 1.0.73 - correzione bug funzione _hide)
 
(79 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
<!--
NOTA DI COMMENTO RELATIVA A OGNI NUOVO RILASCIO DI DEBIAN:
 
* modificare il codename nella riga "#ifeq" sottostante con quello della nuova stable, dopo aver aggiornato questa guida.
* In caso contrario sarà mostrato un messaggio di avvertenza al posto del template "Versioni compatibili".
* Il codename *deve* essere scritto tutto minuscolo (per esempio: jessie).
* Modificare anche lo script in formato base64 in: https://guide.debianizzati.org/index.php/Aiuto:LogScript (leggere lì le istruzioni, basta lanciare un comando)
 
-->
{{#ifeq: {{Codename|stable|IN_TEMPLATE}} | bullseye |
  {{Versioni compatibili}} |
  {{Cautionbox | [[Guide@Debianizzati.Org:Passaggio_alla_stable_-_pagine_da_aggiornare | Script non ancora aggiornato]] in seguito al rilascio di Debian {{Codename|Stable}}, pertanto le informazioni restituite riguardo la provenienza dei pacchetti installati nel sistema potrebbero non essere accurate. }}
}} <br/>
 
== Introduzione ==
== Introduzione ==
Questo [[script]] permette la creazione di un file contenente informazioni utili che possono aiutare a comprendere meglio il proprio problema oppure che è possibile portare a conoscenza del [http://forum.debianizzati.org forum] per tentare di risolverlo insieme. Le informazioni riguardano i seguenti tipi di problema:
Questo [[script]] permette la creazione di un file contenente informazioni utili che possono aiutare a comprendere meglio il proprio problema oppure che è possibile portare a conoscenza del [http://forum.debianizzati.org forum] per tentare di risolverlo insieme.<br/>
Le informazioni riguardano i seguenti tipi di problema:
* 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 APT
* Sottosistema di gestione dei pacchetti (APT)
* Mount/unmount di periferiche
* Mount/unmount di periferiche
* Touchpad
* Touchpad
* Altro. Verranno inserite nel log solo informazioni generiche (già presenti nel log creato con tutte le tipologie di problema precedenti).


Lo script crea due file:
Lo script crea due file:
;log_''data'':contiene le informazioni in formato testo
;log_''data'':contiene le informazioni in formato testo
;log_''data''.{bz2,zip,tgz}:il file precedente ma in formato compresso. Può essere allegato ad una discussione sul forum
;log_''data''.{xz,bz2,gz}:il file precedente ma in formato compresso. Può essere allegato ad una discussione sul forum
 
Se si vuole, attraverso lo script è anche possibile inviare il file direttamente a [https://paste.debian.net paste.debian.net] per poterlo condividere pubblicamente, in questo caso il file non potrà superare la grandezza complessiva di 240K circa (diviso in parti della dimensione massima di 60K circa) e le informazioni saranno disponibili a chiunque per una settimana.<br/>
Prima di effettuare l'invio, lo script chiede un esplicito consenso all'utente.
 
{{Box|Nota|Lo script è liberamente modificabile.<br/>Per ogni segnalazione, informazione o suggerimento fare riferimento a [http://forum.debianizzati.org/viewtopic.php?f{{=}}13&t{{=}}45098 questa] discussione sul forum.}}
 
== Pacchetti opzionali ==
Lo script utilizza alcuni comandi che potrebbero non essere installati di default sulla propria macchina. L'installazione di questi pacchetti è del tutto facoltativa e la loro assenza non pregiudica in alcun modo le funzionalità messe a disposizione dallo script.
;aptitude:Viene utilizzato per ricavare informazioni quali il gestore di sessione e i pacchetti non appartenenti alla [[release]] di Debian predefinita. Per installarlo:<pre># apt install aptitude</pre>
;pastebinit:Permette di usufruire del servizio offerto da paste.debian.net per la condivisione del testo. Per installarlo:<pre># apt install pastebinit</pre>


Se si vuole, attraverso lo script è anche possibile inviare il file direttamente a [http://paste.debian.net paste.debian.net] per poterlo condividere pubblicamente, in questo caso il file non potrà superare la grandezza complessiva di 240K circa (diviso in parti della dimensione massima di 60K circa) e le informazioni saranno disponibili a chiunque per una settimana.<br/>
== Privacy dell'utente ==
Prima di effettuare l'invio, lo script chiede un esplicito consenso all'utente.<br/>
Questo script raccoglie informazioni che potenzialmente potrebbero violare la privacy dell'utente che mette a disposizione '''pubblicamente''' il file di log generato (attraverso ''paste.debian.net'' oppure come allegato ad una discussione sul forum).


Per usufruire del servizio offerto da paste.debian.net è necessaria l'installazione del pacchetto <code>pastebinit</code>:
Il diritto alla privacy dell'utente che esegue lo script è sempre stato la priorità nel corso degli anni e molte informazioni personali sono già nascoste nel file di log generato. È però possibile che non tutto venga correttamente rilevato per sopravvenute modifiche all'output dei comandi o log di sistema o a personalizzazioni dell'utente.
<pre># apt-get install pastebinit</pre>


{{Box|Nota|Lo script è liberamente modificabile.<br/>Per ogni segnalazione, informazione o suggerimento fare riferimento a [http://forum.debianizzati.org/viewtopic.php?f{{=}}13&t{{=}}45098 questa] discussione sul forum.}}
Si raccomanda caldamente, prima di rendere pubblico il log, di leggere attentamente le informazioni raccolte dallo script; in particolare i messaggi dei log di sistema, i contenuti dei servizi di systemd (soprattutto se sono stati creati nuovi servizi o se si è provveduto a personalizzarne di esistenti) e il file ''/etc/fstab''.
 
Se si ravvisa la comparsa di informazioni sensibili, quali indirizzi IP pubblici, URL, nomi utente o di connessioni di rete, o comunque di qualunque dato ritenuto in violazione del proprio diritto alla privacy, non rendere pubblico il file di log raccolto e segnalare il problema nella [http://forum.debianizzati.org/viewtopic.php?f=13&t=45098 discussione apposita] o all'interno della pagina di discussione.


== Utilizzo ==
== Utilizzo ==
# Eseguire un upgrade del sistema, se possibile, in modo che le informazioni raccolte dallo script siano aggiornate.
# Eseguire un upgrade del sistema, se possibile, in modo che le informazioni raccolte dallo script siano aggiornate.
# Copiare manualmente il codice dello script in un file di testo. Il nome del file può essere scelto liberamente.<br/>Se si preferisce, è possibile eseguire il seguente comando:<pre>$ wget -q -O- "http://guide.debianizzati.org/index.php?title=Creazione_automatica_di_un_file_di_log_per_inviare_quesiti_al_forum&action=edit" | sed -n "/^== Script/{n;:a n; /^&lt/ ! {s/\&amp;amp;/\&/g; p; ba}}" > nomefile</pre>Questo creerà il file di testo "nomefile" contenente lo script.<br/>Si presuppone che '''non esista''' nella directory corrente un file avente lo stesso nome (altrimenti verrà sovrascritto), che il pacchetto "wget" sia installato e che, ovviamente, la connessione alla Rete sia funzionante.
# Copiare manualmente il codice dello script in un file di testo all'interno di una directory a propria scelta. Il nome del file può essere scelto liberamente, ad esempio <code>scriptlog-debianizzati.org</code>. <br/> E assegnare i permessi di esecuzione al file appena creato; ad esempio, da terminale o emulatore di terminale:<pre>$ chmod a+x scriptlog-debianizzati.org</pre>'''In alternativa''', se si preferisce, è possibile eseguire il seguente comando:<pre>wget -qO- "http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit"|awk '/=S=/{while(getline&&!index($0,"=F"))print}'|base64 -d|tar xz</pre>con cui verrà creato il file "scriptlog-debianizzati.org" all'interno della directory da cui è stato eseguito il precedente comando. In questo caso vengono automaticamente impostati i permessi di esecuzione per lo script.
# Dare i permessi di esecuzione al file appena creato. Supponendo che si chiami ''nomefile'':<pre>$ chmod +x nomefile</pre>
# Eseguire da terminale (o emulatore di terminale) lo script con [[privilegi di amministrazione]]:<pre># ./scriptlog-debianizzati.org</pre>il comando precedente deve essere eseguito nella stessa directory in cui risiede lo script.<br/>L'utilizzo dei permessi di root è motivato dal fatto che alcuni comandi devono essere eseguiti necessariamente come utente privilegiato.
# Eseguire lo script con i permessi di [[root]]:<pre># ./nomefile</pre>il comando precedente deve essere eseguito nella stessa directory in cui risiede lo script.<br/>L'utilizzo dei permessi di root è motivato dal fatto che alcuni comandi devono essere eseguiti necessariamente come utente privilegiato.
# Leggere le informazioni a video.
# Leggere le informazioni a video.


== Parametri dello script ==
Lo script accetta, in maniera facoltativa, alcuni parametri:
;--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}:specifica il tipo di problema
;--nocompress:non crea il file compresso del file di log
;--nopaste:non invia il file di log a paste.debian.net
;--update:aggiorna lo script se esiste una versione recente
;--base64:crea un file contenente la codifica base64 dello script
;--debug:crea un file contenente le informazioni utili per il debug dello script
;--versione:visualizza la versione dello script
;--help:visualizza informazioni sull'utilizzo dei parametri
'''Esempi:'''
<pre>
# ./scriptlog-debianizzati.org --tipo=rete
# ./scriptlog-debianizzati.org --tipo=apt --nocompress --nopaste
# ./scriptlog-debianizzati.org --versione
# ./scriptlog-debianizzati.org --help
</pre>
<!-- commento (leggibile per chi modifica la pagina)
*IMPORTANTE*
Se si modifica lo script è *necessario* seguire le istruzioni alla pagina:
https://guide.debianizzati.org/index.php/Aiuto:LogScript
in modo da aggiornare l'archivio in formato Base64
-->
== Script ==
== Script ==
<pre>
<syntaxhighlight lang="bash">
#! /bin/bash
#! /bin/bash


Riga 38: Riga 96:
# I file creati saranno leggibili e scrivibili da tutti
# I file creati saranno leggibili e scrivibili da tutti
umask 0011
umask 0011
# Intercettazione Ctrl+C
trap _exit INT
# Abilitazione dell'opzione 'extdebug' necessaria per espandere ARGC in
# Bash 5 e versioni successive
shopt -s extdebug


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
Riga 54: Riga 119:
   else
   else
     printf %s\\n "$*"
     printf %s\\n "$*"
  fi
}
# Sostituisce il comando 'cat' per controllare che al file di log
# venga inviato effettivamente il contenuto di un file di testo
function cat {
  if [ "$(file -bL $1)" = 'ASCII text' ]; then
    /bin/cat -- "$1"
  else
    echo "File non di testo"
   fi
   fi
}
}
Riga 62: Riga 137:


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


# Codename per stable e testing. Da modificare nei successivi rilasci di Debian
# Codename per oldoldstable, oldstable, stable e testing.
readonly STABLE="wheezy"
# Da modificare nei successivi rilasci di Debian
readonly TESTING="jessie"
readonly OLDOLDSTABLE="stretch"
readonly OLDSTABLE="buster"
readonly STABLE="bullseye"
readonly TESTING="bookworm"


# Path dei comandi dello script
# Path dei comandi dello script
Riga 74: Riga 155:
readonly log="log_$(date '+%d%b_%H%M%S')"
readonly log="log_$(date '+%d%b_%H%M%S')"


# Nome del file compresso. Viene usata l'estensione .bz2 a meno
# Nome del file di debug
# che non venga modificata da _compress
readonly script_debug="/tmp/script_debug_$(date '+%d%b_%H%M%S')"
readonly complog="${log}.bz2"
 
# File descriptor per il debug
FD=9
 
# URL remoto della pagina contenente lo script
readonly SCRIPTURL="http://guide.debianizzati.org/index.php?title=Creazione_automatica_di_un_file_di_log_per_inviare_quesiti_al_forum&action=edit"
 
# URL remoto della pagina contenente lo script codificato in base64
readonly SCRIPTURL_BASE64="http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit"


# nome utente
# nome utente
utente=$(logname) &&
utente=$(logname) &&
[ "$utente" != "root" ] || {
[ "$utente" != "root" ] || {
   utente=
   # NOTA: "root" è permesso (solo) se scelto esplicitamente dall'utente
  tmputente=
  tmputente2=$(getent passwd 1000 2> /dev/null | cut -d ":" -f 1) ||
  for tmputente in $(users); do
      tmputente2=""
    if [ "$tmputente" = "root" ]; then
  echo -n "Inserisci il tuo nome utente"
      continue
  if [ -n "$tmputente2" ]; then
    elif [ -z "$utente" ]; then
      echo -n " (lascia vuoto per \"$tmputente2\"): "
      utente=$tmputente
  else
    elif [ "$utente" != "$tmputente" ]; then
       echo -n ": "
      utente=
      break
    fi
  done
  if [ -z "$utente" ]; then
    # NOTA: "root" è permesso (solo) se scelto esplicitamente dall'utente
    echo -n "Inserisci il tuo nome utente: "
    read tmputente &&
    # non può contenere: spazi, tabulazioni, nuove righe; né essere vuota
    [ -n "${tmputente##*[[:space:]]*}" ] &&
    # l'utente deve aver effettuato il login (anche in altre console)
    case " $(users) " in
      *" ${tmputente} "* ) true
                          ;;
      * ) false
          ;;
    esac || {
       echo "Nome utente invalido o non ha effettuato il login!" >&2
      exit 255
    }
    utente=$tmputente
   fi
   fi
  read tmputente &&
  tmputente=${tmputente:-$tmputente2} &&
  # non può contenere: spazi, tabulazioni, nuove righe; né essere vuota
  [ -n "${tmputente##*[[:space:]]*}" ] &&
  # deve esistere in /etc/passwd (o equivalente)
  getent passwd "$tmputente" > /dev/null 2>&1 || {
    echo "Nome utente non valido o non esistente!" >&2
    exit 255
  }
  utente=$tmputente
   unset tmputente
   unset tmputente
  unset tmputente2
}
}
readonly utente
readonly utente
Riga 123: Riga 202:
readonly BOLD="\033[01m"        # grassetto
readonly BOLD="\033[01m"        # grassetto
readonly FINE="\033[0m"        # reset
readonly FINE="\033[0m"        # reset
# variabile che vale 1 se systemd è installato
[ "$(ps -o comm= -p 1)" = "systemd" ] && systemd=1 || systemd=0
readonly systemd
# --------------------------------------------------------------------------
# Sezione relativa ai parametri dello script
# --------------------------------------------------------------------------
# Funzione che segnala un errato utilizzo dei parametri e termina lo script
function _parm_err {
  echo "Parametri non validi" && _parm_uso
}
# Messaggio di errore se viene specificato più di un tipo di problema attraverso
# i parametri.
function _parm_tipo_err {
  echo "È possibile specificare un solo di tipo di problema" && _parm_uso
}
# Messaggio visualizzato nel caso in cui venga specificato lo stesso parametro
function _parm_rip_err {
  echo "È stato immesso lo stesso parametro" && _parm_uso
}
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato
function _parm_uso_err {
  echo "Il parametro $1 non deve essere accompagnato da altri parametri" && _parm_uso
}
# Funzione che stampa informazioni sull'utilizzo dei parametri
function _parm_uso {
  printf %b "
Utilizzo dei parametri:
$BOLD--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}$FINE
  utilizzato per specificare un solo tipo di problema.
  Es: --tipo=apt
 
$BOLD--nocompress$FINE
  non viene creato un file compresso del log
 
$BOLD--nopaste$FINE
  non viene inviato il log a paste.debian.net
$BOLD--update$FINE
  viene aggiornato lo script se è disponibile una nuova versione
$BOLD--base64$FINE
  viene creato un file con la codifica base64 dello script
$BOLD--debug$FINE
  crea un file contenente le informazioni utili per il debug dello script
$BOLD--versione$FINE
  visualizza la versione dello script in esecuzione
 
$BOLD--help$FINE
  visualizza queste informazioni
 
"  && exit
}
# Visualizza la versione corrente dello script
function _showvers {
  echo "$VERSIONE" && exit
}
# Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni
# nel passaggio del parametro tipo=blabla
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
DEBUG=0
while [ $# -gt 0 ] ; do
  case "$1" in
    "--base64") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || BASE64=1 ;;
    "--update") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || UPDATE=1 ;;
    "--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1      ;;
    "--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1       ;;
    "--tipo=rete") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_RETE=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=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=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1  ;;
    "--tipo=touchpad") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_TOUCH=1 ;;
    "--tipo=generico") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_COMM=1  ;;
    "--debug") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || DEBUG=1  ;;
    "--versione") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || _showvers ;;
    "--help") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || _parm_uso ;;
    *) _parm_err
  esac
  shift
done
# --------------------------------------------------------------------------
# Debug
# --------------------------------------------------------------------------
function _debug {
  [ "$DEBUG" -eq 1 ] && [ ! -e /proc/$$/fd/"$FD" ] &&
    {
    exec {FD}>"$script_debug"
    export BASH_XTRACEFD="$FD"
    set -x
    }
}
function _close_debug {
  set +x
  exec {FD}>&-
}


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
Riga 135: Riga 326:
*                                                                              *
*                                                                              *
*  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 "$VERSIONE"                                                        *
*  Versione $VERSIONE                                                             *
*                                                                              *
*                                                                              *
*********************************************************************************"
*********************************************************************************"
Riga 165: Riga 356:
   # stesso nome di quelli che verranno creati, lo script chiede se cancellarli o meno
   # stesso nome di quelli che verranno creati, lo script chiede se cancellarli o meno
   local risp
   local risp
   if [ -f "$log" ] || [ -f "${log}.zip" ] || [ -f "${log}.bz2" ] || [ -f "${log}.tgz" ]; then
   if [ -f "$log" ] || [ -f "${log}.xz" ] || [ -f "${log}.bz2" ] || [ -f "${log}.gz" ]; then
     echo $'\n'"Esiste già un file ${log}, ${log}.zip, ${log}.bz2 o ${log}.tgz nella directory corrente."
     echo $'\n'"Esiste già un file ${log}, ${log}.xz, ${log}.bz2 o ${log}.gz nella directory corrente."
     echo -n "Sovrascivere [S/n]? "
     echo -n "Sovrascivere [S/n]? "
     read risp
     read risp
     case "$risp" in
     case "$risp" in
       ""|[Ss]) rm -f -- "$log" "${log}.zip" "${log}.bz2" "${log}.tgz" ;;
       ""|[Ss]) rm -f -- "$log" "${log}.xz" "${log}.bz2" "${log}.gz" > /dev/null 2>&1 ;;
       *)      _exit
       *)      exit 1
     esac
     esac
   fi
   fi
Riga 181: Riga 372:


# 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='https://paste.debian.net'
   local chunk_prefix='pastebin'
   local chunk_prefix='pastebin'
   local chunk_num=1
   local chunk_num=1
Riga 231: Riga 422:
  # 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}!"
Riga 263: Riga 454:
# Funzione che invia il log a paste.debian.net
# Funzione che invia il log a paste.debian.net
function _upload {
function _upload {
  # Nessun invio a paste.debian.net se viene scelto "--nopaste"
  [ "$NOPASTE" -eq 1 ] && return
 
   local risp
   local risp
   # Pastebinit è installato?
   # Pastebinit è installato?
Riga 290: Riga 484:
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------


# Funzione richiamata in caso di corretta/scorretta creazione del file compresso
# Funzioni richiamate in caso di corretta/scorretta creazione del file compresso
function _compress_ok {
function _compress_ok { echo "File compresso creato correttamente nella directory corrente."; }
  echo "File compresso creato correttamente nella directory corrente."
}


function _compress_err {
function _compress_err { echo "Errore nella creazione del file compresso."; }
  echo "Errore nella creazione del file compresso."
}


# Funzione che crea il file compresso
# Funzione che crea il file compresso
# Prova a creare nell'ordine: un file .bz2, un file .zip o un file .tgz
# Prova a creare nell'ordine: un file .xz, un file .bz2 o un file .gz
function _compress {
function _compress {
  # La funzione termina se è stato utilizzato il parametro "--nocompress"
  [ "$NOCOMPRESS" -eq 1 ] && return
   local risp
   local risp
   echo -n $'\nCreare un file compresso [S/n]? '
   echo -n $'\nCreare un file compresso [S/n]? '
Riga 309: Riga 502:
       echo "Sta per essere creato un file compresso..."
       echo "Sta per essere creato un file compresso..."
       sleep 1
       sleep 1
       if [ -f /bin/bzip2 ]; then
       if [ "$(command -v xz)" ]; then
         bzip2 -k9 "$log" && _compress_ok || _compress_err
         xz -e < "$log" > "${log}.xz" && _compress_ok || _compress_err
       elif [ -f /usr/bin/zip ]; then
       elif [ "$(command -v bzip2)" ]; then
         zip "${log}.zip" "$log" && _compress_ok || _compress_err
         bzip2 -9 < "$log" > "${log}.bz2" && _compress_ok || _compress_err
         complog="${log}.zip"
      elif [ "$(command -v gzip)" ]; then
         gzip -9 < "$log" > "${log}.gz" && _compress_ok || _compress_err
       else
       else
         tar czf "${log}.tgz" "$log" && _compress_ok || _compress_err
         echo "Impossibile effettuare la compressione!" >&2
        complog="${log}.tgz"
       fi
       fi
       ;;
       ;;
Riga 329: Riga 522:


function _scelta {
function _scelta {
  # Problemi selezionati in base al parametro passato allo script
  [ "$TIPO_RETE"  -eq 1 ] && _wait && _header "rete"          && _rete  && 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_APT"  -eq 1 ] && _wait && _header "APT"            && _apt    && return
  [ "$TIPO_MNT"  -eq 1 ] && _wait && _header "mount-unmount"  && _mount  && return
  [ "$TIPO_TOUCH" -eq 1 ] && _wait && _header "touchpad"      && _tpad  && return
  [ "$TIPO_COMM"  -eq 1 ] && _wait && _header "generico"      && _common && return
 
  # La funzione presenta un menù di scelta nel caso non sia stato passato alcun parametro
   local num
   local num
   
   
Riga 337: Riga 542:
[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 348: Riga 554:
     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) echo $'### Problemi di rete ###\n'            > "$log" && _rete  ;;&
             1) _header "rete"         && _rete  ;;&
             2) echo $'### Problemi video ###\n'              > "$log" && _video  ;;&
             2) _header "video"         && _video  ;;&
             3) echo $'### Problemi audio ###\n'              > "$log" && _audio  ;;&
             3) _header "boot"          && _boot  ;;&
             4) echo $'### Problemi APT ###\n'                > "$log" && _apt    ;;&
            4) _header "audio"         && _audio  ;;&
             5) echo $'### Problemi mount-unmount ###\n'      > "$log" && _mount  ;;&
             5) _header "APT"           && _apt    ;;&
             6) echo $'### Problemi touchpad ###\n'          > "$log" && _tpad  ;;&
             6) _header "mount-unmount" && _mount  ;;&
             7) echo $'### Solo informazioni generiche ###\n' > "$log" && _common ;;&
             7) _header "touchpad"     && _tpad  ;;&
         [1-7]) break  ;; # Termina il ciclo 'while'
             8) _header "generico"     && _common ;;&
      0) _exit  ;; # È stato inserito '0' . Uscita dallo script
         [1-8]) break  ;; # Termina il ciclo 'while'
      *) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda
            0) _exit  ;; # È stato inserito '0' . Uscita dallo script
            *) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda
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
Riga 369: Riga 576:
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------


# 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 "[ ]  $*"
}
}


# Funzione che stampa un pallino di colore verde in caso di comando con output
# Funzione che stampa un pallino colorato in base al primo parametro
function _ok {
function _printdot {
   echo
   echo
   tput cuu1  # in alto di una riga
   tput cuu1  # in alto di una riga
   tput cuf1 # a destra di uno spazio
   tput cuf1 # a destra di uno spazio
   printf %b "${VERDE}•${FINE}\n" # stampa pallino
   printf %b "$1•${FINE}\n" # stampa pallino e va a capo
}
}
# Funzione che stampa un pallino di colore verde in caso di comando con output
function _ok { _printdot "${VERDE}"; }


# 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 { _printdot "${ROSSO}"; }
  echo
  tput cuu1  # in alto di una riga
  tput cuf1 # a destra di uno spazio
  printf %b "${ROSSO}•${FINE}\n" # stampa pallino
}


# Funzione che stampa in grassetto gli argomenti
# Funzione che stampa in grassetto gli argomenti
function _bold {
function _bold {
   printf %b "$BOLD"
   printf %b "${BOLD}"
   echo -n "$*"
   echo -n "$*"
   printf %b\\n "$FINE"
   printf %b\\n "${FINE}"
}
}


# 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 406: Riga 611:
}
}


# Funzione che stampa un messaggio di attesa e aspetta 2 secondi
# Funzione che stampa un messaggio di attesa
function _wait {
function _wait {
   echo $'\nCreazione del log in corso...\n'
   echo $'\nCreazione del log in corso...\n'
}
# Intestazione del file di log
function _header {
echo "Tipo di problema: $1" >> "$log"
_data
_lastupd
echo "Versione script: $VERSIONE" >> "$log"
}
}


# Stampa la data corrente nel file di log
# Stampa la data corrente nel file di log
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"
}
 
# Quota i caratteri specificati per le parole da nascondere con sed
# Es: abc.def -> abc\.def
function _sed_quote {
  # array di caratteri da quotare
  local quotearr=("." "/")
 
  local retstr="$1"
  for char in "${quotearr[@]}"; do
    retstr="${retstr//$char/\\$char}"
  done
  echo "$retstr"
}
}


Riga 420: Riga 646:


  # Sostituisce il nome utente e il nome host con 'nomeutente' e 'nomehost' se diversi da [dD]ebian
  # Sostituisce il nome utente e il nome host con 'nomeutente' e 'nomehost' se diversi da [dD]ebian
  [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log"
  # Inoltre non sostituisce l'utente "root", in quanto l'informazione potrebbe essere rilevante
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
if [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && [ "$utente" != "root" ]; then
  sed -i -e "s/\\b${utente}\\b/*nomeutente*/g" "$log"
  fi
if [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ]; then
  sed -i -e "s/\\b${nomehost}\\b/*nomehost*/g" "$log"
fi


  # Nasconde gli ESSID gestiti attraverso Network Manager
  # Nasconde gli ESSID gestiti attraverso Network Manager
Riga 437: Riga 668:
  fi
  fi


  # Nasconde nel log i i nomi delle connessioni gestite da NetworkManager
  # Nasconde nel log i nomi delle connessioni gestite da NetworkManager
  sed -i -r "s/(NetworkManager.*keyfile.*((parsing)|(read connection))).*/\1 \*script-removed\*/" "$log"
  sed -i -r "s/(NetworkManager.*keyfile.*((parsing)|(read connection))).*/\1 \*script-removed\*/" "$log"
sed -i -r "s/(NetworkManager.*keyfile: new connection.*system-connections\/)(.*)( \(.*,\").*(\"\))/\1\*script-removed\*\3\*script-removed\*\4/g" "$log"
sed -i -r "s/(NetworkManager.*policy: auto-activating 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"
# Nasconde l'indirizzo MAC delle interfacce wireless
local interfaces macaddress line
if [ -f /proc/net/wireless ]; then
  # array che contiene i nomi delle interfacce wireless
  mapfile -s 2 interfaces < <(awk -F'[: ]+' '{ print $2 }' /proc/net/wireless)
  for i in "${interfaces[@]}"; do
    # indirizzo MAC dell'interfaccia solo se questa ne ha uno
    line="$(ip -br link show $i)"
    if [ "$(echo $line | wc -w)" -gt 3 ]; then
      macaddress="$(awk '{ print $3 }' <<< $line)"
      macaddress="$(_sed_quote $macaddress)"
      # l'indirizzo MAC viene nascosto nel file
      sed -i 's/'$macaddress'/\*script-removed\*/g' "$log"
    fi
  done
fi
}
# 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 447: Riga 706:
    
    
   if [ -f "$file" ]; then
   if [ -f "$file" ]; then
     lastdate=$(sed -n '/^Start-Date/h ; $p' "$file" | awk '{print $2}')
     lastdate=$(sed -n '/^Start-Date/h ; $p' "$file" | cut -d ' ' -f 2)
     # se il file history.log non contiene la data dell'ultimo aggiornamento, viene utilizzato history.log.1.gz
     # se il file history.log non contiene la data dell'ultimo aggiornamento, viene utilizzato history.log.1.gz
     [ -z "$lastdate" ] && [ -f "${file}.1.gz" ] && lastdate=$(zcat "${file}.1.gz" | sed -n '/^Start-Date/h ; $p' | awk '{print $2}')
     [ -z "$lastdate" ] && [ -f "${file}.1.gz" ] && lastdate=$(zcat "${file}.1.gz" | sed -n '/^Start-Date/h ; $p' | cut -d ' ' -f 2)


     # variabile che contiene la data in formato "giorno mese anno"
     # variabile che contiene la data in formato "giorno mese anno"
     convdate=$(date -d "$lastdate" '+%d %B %Y')
     convdate=$(date -d "$lastdate" '+%d %B %Y')
      
      
     echo $'\n'"Ultimo aggiornamento del sistema: ${convdate}" >> "$log"
     echo $"Ultimo aggiornamento del sistema: ${convdate}" >> "$log"
  fi
}
 
# Funzione che effettua l'aggiornamento automatico dello script
function _self_update {
 
  echo -n "Aggiornare questo script [S/n]? "
  local risp
  read risp
  [ "$risp" != "" ] && [ "$risp" != "s" ] && [ "$risp" != "S" ] && _exit || echo "Aggiornamento in corso..."
 
  # Controlla l'esistenza di wget
  [ ! "$(command -v wget)" ] && echo "Impossibile eseguire l'aggiornamento. Installare il pacchetto wget." && _exit
 
  # Ricava la versione remota dello script
  local vers="$(wget -q -O- "$SCRIPTURL" | sed -n '/^readonly VERSIONE.*/{p;q}' | cut -d '"' -f2)"
  if [ "$vers" = "" ]; then
    echo "Connessione non riuscita" && _exit
  fi
 
  if [ "$vers" = "$VERSIONE" ]; then
    echo "Lo script è gia alla versione più recente"
  else
    echo -n "È disponibile una nuova versione dello script: " && _bold "$vers"
    echo -n "Procedere con l'aggiornamento [S/n]? "
    read risp
    case "$risp" in
      [Ss]|"")
          local tempfile="$(mktemp)" # viene creato un file temporaneo
          # lo script in formato base64 viene copiato nel file temporaneo
          wget -q -O- "$SCRIPTURL_BASE64" | sed -n "/^=S=/{n; :a /^==Fine/ ! {p; n; ba}}" | base64 -d | tar xz -O > "$tempfile"
          if [ ! -s "$tempfile" ]; then # Controlla se il file è vuoto
            echo "Connessione non riuscita"
          else
            cp "$tempfile" "$PATH_NAME"
            [ $? -eq 0 ] && echo "Aggiornamento effettuato" || echo "Aggiornamento fallito"
            #rm -f "$tempfile" # Rimuove il file temporaneo
          fi ;;
      *)
          echo "Non è stato eseguito alcun aggiornamento"
    esac
   fi
   fi
}
# funzione che crea un file con la codifica base64 dello script
# Da utilizzare in caso di aggiornamenti per modificare la pagina
# http://guide.debianizzati.org/index.php/Aiuto:LogScript
function _base64 {
  echo -n "Verrà creato un file con la codifica base64 di questo script. Continuare [S/n]? "
  local risp
  read risp
  [ "$risp" != "" ] && [ "$risp" != "s" ] && [ "$risp" != "S" ] && _exit ||
    local tempfile="$(mktemp)" # crea un file temporaneo
    tar cf - "${BASH_SOURCE[0]}" | gzip -9 | base64 > "$tempfile"
    if [ $? -eq 0 ]; then
      echo -n "Il file contenente la codifica base64 di questo script è " && _bold "$tempfile"
    else
      echo "Codifica non riuscita"
    fi
    # Modifica i permessi del file in modo che possa essere letto da tutti
    chmod 444 "$tempfile"
}
}


# 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 [ -f "$log" ]; then
 
    echo -n $'\nFile contenente il log dello script: '
# se è stato effettuato un update o una codifica base64, stampa solo il messaggio finale
    _bold "$log"
   if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
  else
    local complog=""
    echo $'\nNon è stato creato un file di log'
 
    if [ -f "$log" ]; then
      echo -n $'\nFile contenente il log dello script: '
      _bold "$log"
    else
      echo $'\nNon è stato creato un file di log'
    fi
 
    if [ -f "${log}.xz" ]; then
      complog="${log}.xz"
    elif [ -f "${log}.bz2" ]; then
      complog="${log}.bz2"
    elif [ -f "${log}.gz" ]; then
      complog="${log}.gz"
    fi
 
    if [ -z "$complog" ]; then 
      echo "Non è stato creato un file compresso del log"
    else
      echo -n "File compresso da allegare alla discussione sul forum: "
      _bold "$complog"
    fi
 
    if [ -f "$script_debug" ]; then
      echo -n "File contenente l'output di debug: "
      _bold "$script_debug"
    fi
   fi
   fi
    
    
   if [ -f "$complog" ]; then
   echo $'Script terminato\n'
    echo -n "File compresso da allegare alla discussione sul forum: "
   _close_debug
    _bold "$complog"
  else
    echo "Non è stato creato un file compresso del log"
   fi
    
    
  echo $'Script terminato\n'
   exit 0
   exit 0
}
}
Riga 484: Riga 825:
# Informazioni comuni a tutti i tipi di problema
# Informazioni comuni a tutti i tipi di problema
function _common {
function _common {
  _data
  _lastupd
   _dmi_decode
   _dmi_decode
   _comando "/bin/uname -a"
   _comando "/bin/uname -a"
Riga 493: Riga 832:
   _comando "/usr/bin/groups" "su"
   _comando "/usr/bin/groups" "su"
   _file "/var/log/syslog"
   _file "/var/log/syslog"
  _comando "/bin/systemctl --failed --no-pager"
  _comando "/bin/journalctl -x -b --no-pager -p err"
  _comando "/bin/journalctl -x -b --no-pager -p warning"
  _comando "/bin/journalctl -x -b --no-pager"
  _comando "/usr/bin/systemd-cgtop -b --iterations=5"
  _comando "/usr/bin/systemd-cgls -l"
  _comando "/usr/bin/systemd-delta"
   _comando "/bin/dmesg -l err"
   _comando "/bin/dmesg -l err"
   _comando "/bin/dmesg -l warn"
   _comando "/bin/dmesg -l warn"
Riga 498: Riga 844:
   _comando "/usr/bin/lspci -knn"
   _comando "/usr/bin/lspci -knn"
   _comando "/usr/bin/lsusb"
   _comando "/usr/bin/lsusb"
  _file "/etc/apt/sources.list"
  _dir "/etc/apt/sources.list.d/"
   _comando "/sbin/fdisk -l"
   _comando "/sbin/fdisk -l"
  _comando "/sbin/blkid"
   _file "/etc/fstab"
   _file "/etc/fstab"
  _dir "/etc/fstab.d/"
   _comando "/bin/findmnt"
   _comando "/bin/findmnt"
  _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"
  _dir "/etc/apt/sources.list.d/"
   _comando "/usr/bin/apt-cache policy"
   _comando "/usr/bin/apt-cache policy"
   _comando "/usr/bin/apt-cache stats"
   _comando "/usr/bin/apt-cache stats"
  _comando "/usr/bin/apt-mark showhold"
  _comando "/usr/bin/dpkg --audit"
  _comando "/usr/bin/dpkg -l"
   _comando "/usr/bin/apt-get check"
   _comando "/usr/bin/apt-get check"
   _firmware
   _firmware
   _extpack
   _extpack
   _pack "linux-headers"
   _pack "linux-headers"
  _pack "linux-image"
  _comando "/usr/sbin/dkms status"
}
}


Riga 516: Riga 873:
   _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"
   _comando "/sbin/ifconfig -a"
   _comando "/sbin/ifconfig -a"
  _comando "/sbin/ip -s -d link show"
   _comando "/usr/sbin/rfkill list all"
   _comando "/usr/sbin/rfkill list all"
   _comando "/bin/ping -c3 8.8.8.8" #DNS di Google 8.8.8.8
   _comando "/bin/ping -c3 -W5 8.8.8.8" #DNS di Google 8.8.8.8
   _comando "/bin/ip addr"
   _comando "/bin/ip addr"
   _comando "/bin/ip route list"
   _comando "/bin/ip route list"
Riga 531: Riga 890:
   _file "/etc/dhclient.conf"
   _file "/etc/dhclient.conf"
   _file "/etc/NetworkManager/NetworkManager.conf"
   _file "/etc/NetworkManager/NetworkManager.conf"
  _comando "/usr/bin/nmcli dev list"
  _comando "/usr/bin/nmcli device show"
   _demone "/usr/sbin/NetworkManager" "Network Manager"
   _demone "/usr/sbin/NetworkManager" "Network Manager"
   _demone "/usr/sbin/wicd" "Wicd"
   _demone "/usr/sbin/wicd" "Wicd"
Riga 541: Riga 902:
   _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 "/usr/sbin/dkms status"
   _file "${utente}/.local/share/xorg/Xorg.0.log"
   _pack "xserver-xorg"
   _pack "xserver-xorg"
   _pack "nouveau"
   _pack "nouveau"
Riga 547: Riga 908:
   _pack "mesa"
   _pack "mesa"
   _pack "fglrx"
   _pack "fglrx"
  _pack "amdgpu"
}
# 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 553: Riga 927:
   _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 577: Riga 954:
      # 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 "Script ALSA eseguito" || _error "Script ALSA non eseguito"
      _su "$tempfile --stdout" && _ok || _error
  else
  else
      _error "Download script ALSA fallito"
      _error "Download script ALSA fallito"
Riga 601: Riga 982:
   _common
   _common
   _comando "/usr/bin/dpkg --print-architecture"
   _comando "/usr/bin/dpkg --print-architecture"
  _comando "/usr/bin/dpkg --print-foreign-architectures"
   _comando "/usr/bin/apt-get update"
   _comando "/usr/bin/apt-get update"
   _comando "/usr/bin/apt-get -s -y upgrade"
   _comando "/usr/bin/apt-get -s -y upgrade"
Riga 616: Riga 998:
function _mount {
function _mount {
   _common
   _common
   _comando "/usr/bin/udisks --dump"
   _comando "/usr/bin/udisksctl dump"
   _pack "usbmount"
   _pack "usbmount"
}
}
Riga 641: Riga 1 023:


function _file {
function _file {
     nome_e_riga "$1"
     _nome_e_riga "$1"
     _prompt "$1"
     _prompt "$1"
     if [ -f "$1" ]; then
     if [ -f "$1" ]; then
case "$1" in
case "$1" in
            /etc/fstab)
                  # Nasconde username, password e dominio di mount CIFS
                  sed -e "s/\( cifs.*username *= *\)[^,]*/\1\*script-removed\*/" \
                      -e "s/\( cifs.*password *= *\)[^,]*/\1\*script-removed\*/" \
                      -e "s/\( cifs.*domain *= *\)[^,]*/\1\*script-removed\*/" "$1" &>> "$log" && _ok || _error ;;
    /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)|(wpa-identity)|(wpa-password)|(wireless-key)).*/\1 \*script-removed\*/" "$1" &>> "$log" && _ok || _error ;;
    /var/log/syslog)
    /var/log/syslog)
                  # se è installato systemd, il log viene ricavato da "journalctl -x"
                  if [ $systemd -eq 0 ]; then
      # se il file contiene la stringa "rsyslogd.*start" ...
      # se il file contiene la stringa "rsyslogd.*start" ...
      if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then
      if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then
# ... estrae da syslog tutto il contenuto dall'ultima occorrenza della stringa alla fine del file
# ... estrae da syslog tutto il contenuto dall'ultima occorrenza della stringa alla fine del file
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1" >> "$log" && _ok "$1" || _error "$1"
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1" >> "$log" && _ok || _error
      else
      else
# se syslog non contiene quella stringa, allora si effettuerà la stessa operazione su syslog.1 ($1.1)
# se syslog non contiene quella stringa, allora si effettuerà la stessa operazione su syslog.1 ($1.1)
# 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 "$1" || _error "$1"
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 "$1".1 || _error "$1".1
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error
      fi ;;
      fi
  else _error # systemd è installato. I log vengono ricavati da "journalctl -x"
  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 || _error
esac
esac
     else
     else
       echo "File \"$1\" non trovato" >> "$log" && _error "$1"
       echo "File \"$1\" non trovato" >> "$log" && _error
     fi
     fi
}
}
Riga 686: Riga 1 077:
   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 "$var" || _error "$var" ;;
      _su "DISPLAY=${DISPLAY:-:0} $1" && _ok || _error ;;
      *)     
      *)     
      su -c "$1" "$utente" &>> "$log" && _ok "$var" || _error "$var"
      _su "$1" && _ok || _error
  esac
  esac
       else # non viene utilizzato "su"
       else # non viene utilizzato "su"
  case "$var2" in
  case "$1" in
      # per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log
      # per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log
      /sbin/iwconfig)
      /sbin/iwconfig)
  (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok "$var" || _error "$var"
  (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok || _error
  ;;
  ;;
      /sbin/iwlist)
 
  (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok "$var" || _error "$var"
      "/sbin/iwlist scan")
  (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok || _error
  ;;
  ;;
              # nasconde gli ESSID visualizzati da "nmcli dev list" (fino a Wheezy)
              # L'array PIPESTATUS mostra il codice d'uscita dei comandi della pipe. PIPESTATUS[0] è il codice d'uscita di "nmcli dev list" (0=successo)
              "/usr/bin/nmcli dev list")
                  nmcli dev list 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \
                      ( _error && echo "Comando valido solo per Wheezy" >> "$log" ) ;;
              # nasconde gli ESSID visualizzati da "nmcli device show" (da Jessie in poi)
              "/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 || \
                      ( _error && echo "Comando valido solo per Jessie e versioni superiori" >> "$log" ) ;;
              /bin/dmesg*)
  # Il comando viene eseguito solo se è non installato systemd
  [ $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 ;;
      # lista dei pacchetti con stato diverso da ii e rc, e quelli con errori
      "/usr/bin/dpkg -l")
                  echo "Elenco dei pacchetti installati con stato diverso da ii e rc, e con errori" >> "$log"
  echo >> "$log"
                  # il carattere vuoto dopo (ii|rc) prima dell'apice cattura eventuali errori,
                  # che sono presenti in terza posizione dell'output di "dpkg -l"
                  # (si noti che l'opzione "-v" inverte la selezione)
                  dpkg -l | grep -Ev '^(ii|rc) ' >> "$log" && _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 in precedenza, l'output del comando è inviato inalterato al log
  $1 &>> "$log" && _ok "$var" || _error "$var"
  $1 &>> "$log" && _ok || _error
  esac    
  esac    
       fi
       fi
   else
   else
       echo "Comando \"${var2}\" non trovato" >> "$log" && _error "$var"
       echo "Comando \"${var2}\" non trovato" >> "$log" && _error
   fi
   fi
}
}
Riga 719: Riga 1 141:
# 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"


   # Se la directory non esiste, stampa un output sul log ed esce.
   # Se la directory non esiste, stampa un output sul log ed esce.
   if [ ! -d "$1" ]; then
   if [ ! -d "$1" ]; then
     echo "La directory non esiste" >> "$log" && _error "$1"
     echo "La directory non esiste" >> "$log" && _error
     return
     return
   fi
   fi


  # Variabili locali
   local file
   local file
   # numfile contiene il numero di file contenuti nella directory. Solo primo livello.
   # numfile contiene il numero di file contenuti nella directory. Solo primo livello.
Riga 736: Riga 1 157:


   if [ "$numfile" -eq 0 ] && [ "$numdir" -eq 1 ]; then
   if [ "$numfile" -eq 0 ] && [ "$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
   else
   else
     echo "La directory contiene ${numfile} file e $(($numdir - 1)) directory" >> "$log"
     echo "La directory contiene ${numfile} file e $((numdir - 1)) directory" >> "$log" && _ok
     ls -al "$1" >> "$log"
     ls -al "$1" >> "$log"
     # invia al log il contenuto dei file della directory
     # invia al log il contenuto dei file della directory
     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 "$file" || _error "$file"
         cat "$file" &>> "$log" && _ok || _error
       fi
       fi
     done
     done


     # Funzione che invia al log il contenuto dei file presenti nelle sottodirectory
     # 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
     # I due cicli "for" sono separati per permettere l'output di un file subito dopo
     # la directory a cui appartiene
     # la directory a cui appartiene
     for file in "$1"*; do
     for file in "$1"*; do
Riga 760: Riga 1 181:
}
}


# 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 771: Riga 1 192:


   if [ -z "$packages" ]; then
   if [ -z "$packages" ]; then
     echo "Nessun pacchetto installato" >> "$log" && _error "$1"
     echo "Nessun pacchetto installato" >> "$log" && _error
   else
   else
     echo "$packages" >> "$log" && _ok "$1"
     echo "$packages" >> "$log" && _ok
   fi
   fi
}
}
Riga 789: Riga 1 210:
   # 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 803: Riga 1 224:
     esac
     esac
    
    
     echo "$2 è installato (versione "$vers")" >> "$log" && _ok "$2"
     echo "$2 è installato (versione "$vers")" >> "$log" && _ok
     invoke-rc.d "$var" status &>/dev/null
     invoke-rc.d "$var" status &>/dev/null
     [ $? -eq 0 ] && echo "$2 è in esecuzione" >> "$log" || echo "$2 non è in esecuzione" >> "$log"
     [ $? -eq 0 ] && echo "$2 è in esecuzione" >> "$log" || echo "$2 non è in esecuzione" >> "$log"
   else
   else
     echo "$2 non è installato" >> "$log" && _error "$2"
     echo "$2 non è installato" >> "$log" && _error
   fi
   fi
}
}
Riga 818: Riga 1 239:
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 824: Riga 1 245:
     echo "Prodotto:  $(cat /sys/class/dmi/id/product_name)"    &>> "$log"
     echo "Prodotto:  $(cat /sys/class/dmi/id/product_name)"    &>> "$log"
     echo "Versione:  $(cat /sys/class/dmi/id/product_version)" &>> "$log"
     echo "Versione:  $(cat /sys/class/dmi/id/product_version)" &>> "$log"
     echo "BIOS vers.: $(cat /sys/class/dmi/id/bios_version)"    &>> "$log" && _ok "$var" || _error "$var"
     echo "BIOS vers.: $(cat /sys/class/dmi/id/bios_version)"    &>> "$log" && _ok || _error
   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
   fi
   fi
}
}
Riga 834: Riga 1 255:
   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 "$var"
   dpkg -l | grep -i firmware >> "$log" && _ok || _error
   echo >> "$log"
   echo >> "$log"


Riga 842: Riga 1 263:
     if [ -d "$i" ]; then
     if [ -d "$i" ]; then
       echo "Contenuto di ${i}" >> "$log"
       echo "Contenuto di ${i}" >> "$log"
       ls -al "$i" >> "$log"
       ls -alR "$i" >> "$log"
     else
     else
       echo "${i} non trovata" >> "$log"
       echo "${i} non trovata" >> "$log"
Riga 891: Riga 1 312:
# 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 900: Riga 1 321:
     _x_window_manager
     _x_window_manager
     # installati
     # installati
     _soddisfa "x-session-manager"
     if [ "$(command -v aptitude)" ]; then
    #_soddisfa "x-window-manager" # non essenziale e impiega già tanto
      _soddisfa "x-session-manager"
      # _soddisfa "x-window-manager" # non essenziale e impiega già tanto
    fi
   } >> "$log"
   } >> "$log"
   # in esecuzione
   # in esecuzione
   echo -n "In esecuzione: " >> "$log"
   echo -n "In esecuzione: " >> "$log"
   if _is_running "ksmserver"; then kde4-config --version >> "$log" && _ok "DE/WM" || _error "DE/WM"                        # KDE4
   if _is_running "ksmserver"; then
   elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok "DE/WM" || _error "DE/WM"                     # Gnome Shell
    kf5-config -v 2>/dev/null >> "$log" ||                                                                # KDE5
   elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok "DE/WM" || _error "DE/WM" # Xfce4
    kde4-config -v 2>/dev/null >> "$log" && _ok || _error                                                 # KDE4
   elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok || _error                    # GNOME Shell
   elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok || _error # Xfce4
   elif _is_running "openbox"; then
   elif _is_running "openbox"; then
     if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then
     if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then
       echo -n "(altro x-session-manager) + " >> "$log"                                                                     # Session manager (LXDE?) + Openbox
       echo -n "(altro x-session-manager) + " >> "$log"                                                     # Session manager (LXDE?) + Openbox
     fi
     fi
     openbox --version | head -n 1 >> "$log" && _ok "DE/WM" || _error "DE/WM"                                               # Openbox
     openbox --version | head -n 1 >> "$log" && _ok || _error                                                # Openbox
   else
   else
     echo "Sconosciuto" >> "$log" && _error "DE/WM"                                                                          # NON TROVATO
     echo "Sconosciuto" >> "$log" && _error                                                                 # NON TROVATO
   fi
   fi
}
}
Riga 921: Riga 1 346:
function _extpack {
function _extpack {


  # Variabile che contiene la release attualmente utilizzata
local var="Pacchetti esterni"
  # Vengono tolti da sources.list eventuali spazi iniziali e tolte le righe che *non* iniziano con la stringa
_prompt "$var"
  # "deb http://ftp.XX.debian.org" e che *non* contengono un nome di release.
 
  # Con "cut" viene prelevato il terzo campo (la release voluta)
# La funzione termina se aptitude non è installato
  local release=$(sed -e 's/^ *//' -e '/^deb \(http\|ftp\):\/\/ftp\...\.debian\.org.*\('"$STABLE"' \|stable \|'"$TESTING"' \|testing \|sid \|unstable \)/!d' /etc/apt/sources.list | cut -d ' ' -f3)
if [ ! "$(command -v aptitude)" ]; then
 
  _nome_e_riga "$var"
  # Numero di release trovate
  echo "Aptitude non è installato" >> "$log" && _error
  local num=$(echo "$release" | wc -l)
  return 1
 
fi
  local var="Pacchetti esterni"
 
  _prompt "$var"
local riga indirizzo rel linea release=""
 
# variabile con il contenuto del file sources.list (solo righe che iniziano con deb
# e che contengono "main" )
local sourceslist="$(sed -e '/^deb /!d' -e '/.* main.*/!d' /etc/apt/sources.list)"
# variabile che contiene l'output del comando "apt-cache policy"
local aptcachepol="$(apt-cache policy)"
 
# ciclo sulle righe della variabile "sourceslist"
while read linea; do
 
    # variabile che contiene l'URL dell'archivio (es. http://ftp.it.debian.org/debian/)
    indirizzo="$(awk '{ print $2 }' <<< "$linea")"
 
    # sostituisce / con \/ (necessario per il successivo sed)
    indirizzo="$(_sed_quote "$indirizzo")"
 
    # release della riga corrente (es. wheezy o testing o sid)
    rel="$(awk '{ print $3 }' <<< "$linea")"
 
    # controlla che sia un nome di release valido
    if [ "$rel" = "oldstable" ] || [ "$rel" = "stable" ] || [ "$rel" = "testing" ] || [ "$rel" = "unstable" ] ||
      [ "$rel" = "$OLDSTABLE" ] || [ "$rel" = "$STABLE" ] || [ "$rel" = "$TESTING" ] || [ "$rel" = "sid" ] ||
      [ "$rel" = "oldoldstable" ] || [ "$rel" = "$OLDOLDSTABLE" ]; then
   
      # controlla che sia un repository di Debian
      # si basa sull'output di "apt-cache policy" e su o=Debian e l=Debian
      riga="$(echo "$aptcachepol" | sed -n '/'$indirizzo'*.*'$rel'\/main.*Packages$/ {N; /.*o=Debian,.*l=Debian,/p}')"
   
      # se è un archivio valido, aggiorna la variabile "release"
        if [ ! -z "$riga" ]; then
          if [ -z "$release" ]; then
              release="$rel"
          else
              release="$(printf %b "$release\n$rel")"
          fi
        fi
    fi
done <<< "$sourceslist"
 
# Lo script DEVE rilevare almeno una release. Se la variabile "release" è nulla, c'è un errore in "sources.list"
# oppure non è stato eseguito un aggiornamento della lista dei pacchetti (update)
# (vedere anche il modo in cui viene ricavata la variabile "release" in alto)
if [ -z "$release" ]; then
    _nome_e_riga "${var} all'archivio \"NON RILEVATO!\""
    echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error
    return 1
fi


  # Se il numero di release è diverso da 1, la funzione termina
# Rimuove eventuali duplicati (esistono repository doppi in sources.list)
  if [ "$num" -ne 1 ]; then
release="$(echo "$release" | sort -u)"
    nome_e_riga "$var"
    echo "Sono presenti ${num} release in sources.list" >> "$log" && _error "$var"
# Numero di release trovate
    return
local num=$(echo "$release" | wc -l)
  fi
 
 
# Se il numero di release è diverso da 1 (pinning?), la funzione termina
  local pkg=""
if [ "$num" -ne 1 ]; then
    _nome_e_riga "$var"
    echo "Sono presenti ${num} release in sources.list" >> "$log" && _error
    return
fi
 
local pkg=""


  # Se il numero di release è uguale a 1, la variabile pkg conterrà i pacchetti *non* facenti parte della release
# 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
        "$STABLE"|stable)
    "$OLDOLDSTABLE"|oldoldstable)
release="stable"
                    release="oldoldstable"
pkg=$(aptitude -F '%p %v %t' search '~i !~Astable'   --disable-columns | column -t) ;;
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aoldoldstable') ;;
        "$TESTING"|testing)
    "$OLDSTABLE"|oldstable)
release="testing"
                    release="oldstable"
pkg=$(aptitude -F '%p %v %t' search '~i !~Atesting' --disable-columns | column -t) ;;
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aoldstable') ;;
        sid|unstable)
    "$STABLE"|stable)
release="unstable"
                    release="stable"
pkg=$(aptitude -F '%p %v %t' search '~i !~Aunstable' --disable-columns | column -t) ;;
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Astable') ;;
  esac
    "$TESTING"|testing)
                    release="testing"
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Atesting') ;;
    sid|unstable)
                    release="unstable"
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aunstable') ;;
esac


  # 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 "$var"
  echo "Nessun pacchetto esterno installato" >> "$log" && _error
  else
else
     echo "$pkg" >> "$log" && _ok "$var"
  if [ "$(command -v column)" ]; then
  fi
     echo "$pkg" | column -t >> "$log" && _ok
  else
    echo "$pkg" >> "$log" && _ok
  fi
fi
}
}


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
# Main
# Main
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
clear
clear


_intro
_intro
_avvertenze
 
_check
if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
_scelta
  _debug
_hide
  _avvertenze
_upload
  _check
_compress
  _scelta
  _hide
  _upload
  _compress
elif [ "$UPDATE" -eq 1 ]; then
  _self_update
elif [ "$BASE64" -eq 1 ]; then
  _base64
fi
 
_exit
_exit
 
</syntaxhighlight>
</pre>


== 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.41
;1.0.73
:''Corretta _extpack per righe in sources.list che iniziano con "ftp"''
:''Limitazione del [https://forum.debianizzati.org/viewtopic.php?p=225467#p225467 bug nella funzione _hide] in presenza di username e hostname che possono comparire all'interno di parole dei vari log. Esclusione della sostituzione per l'utente root.''
:''Log dei pacchetti che contengono linux-heaaders''  
:[[Utente:HAL 9000|HAL 9000]] ([[Discussioni utente:HAL 9000|discussioni]]) 08:22, 17 ott 2021 (UTC)
:[[Utente:S3v|S3v]] 10:27, 15 ago 2014 (CEST)
;1.0.72
;1.0.40
:''Aggiornamento per rilascio di Debian 11 ([[bullseye]])''
:''Modificate _ok e _error''
:''Ridotto l'output di "dpkg -l" ai soli pacchetti con stato diverso da "ii" e "rc" (ma includendo sempre quelli con errori)''
:''Aggiunto un "case" nella funzione _comando (caso "su")''
:[[Utente:HAL 9000|HAL 9000]] ([[Discussioni utente:HAL 9000|discussioni]]) 06:39, 22 ago 2021 (UTC)
;1.0.71
:''Aggiunti "apt-mark showhold" e "dpkg -l" (solo per pacchetti con stato != ii)''
:''Gestita la mancanza di column''
:''Corretto typo "OLDOLDSTABLE" -> "$OLDOLDSTABLE"''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 08:55, 12 ago 2014 (CEST)
:[[Utente:S3v|S3v]] 08:54, 10 apr 2021 (UTC)
;1.0.39
;1.0.70
:''Ampliata la parte su DE/WM con rilevamento di default e versioni installate, e riconoscimento Openbox''
:''Aggiunta oldoldstable''
:''Alternativa a logname per riconoscere l'utente''
:''Uniformazione della sintassi, più altri controlli sulle espansioni (per lo più come precauzione), uso delle costanti al posto di variabili globali''
:''Ridefinizione di echo (solo come precauzione) e nuovo prompt, stampato prima dell'esecuzione di un comando''
:[[Utente:HAL 9000|HAL 9000]] 19:41, 11 ago 2014 (CEST)
;1.0.38
:''Corretto il rilevamento di Xfce''
:''Invio al log dell'intero file NetworkManager.conf''
:''Corrette alcune variabili non quotate''
:[[Utente:S3v|S3v]] 17:15, 31 lug 2014 (CEST)
;1.0.37
:''Corretto invio data ultimo aggiornamento in mancanza di history.log''
:''Invio al log di "managed=true/false" contenuto in /etc/NetworkManager/NetworkManager.conf''
:[[Utente:S3v|S3v]] 07:34, 11 lug 2014 (CEST)
;1.0.36
:''corretto errore di sintassi dovuta ad una mancata istruzione if
:[[Utente:Selky|Selky]] 22:48, 10 lug 2014 (CEST)
:''
;1.0.35
:''All'inizio del log viene visualizzato il tipo di problema scelto''
:''Non vengono nascosti il nome utente e il nome host se uguali a [Dd]ebian
:''La data dell'ultimo aggiornamento viene prelevata da <code>history.log.1.gz</code>''
:''se non contenuta in <code>history.log</code>''
:''Rimossa la funzione <code>_extpack_supp</code> (lentissima)''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 13:00, 4 lug 2014 (CEST)
:[[Utente:S3v|S3v]] ([[Discussioni utente:S3v|discussioni]]) 21:08, 15 mar 2021 (UTC)
:''
;1.0.69
;1.0.34
:''http->https per paste.debian.net''
:''Corretta la variabile contenente spazi''
:''Sostituito "which" con "command -v"''
:''/etc/NetworkManager/system-connections''
:''Aggiunto _pack "amdgpu"''
;1.0.33
:''Aggiunta funzione per quotare stringhe prima di passarle a sed''
:''Corretta la funzione _extpack_supp che non mostrava correttamente tutti''
:''Rimosso comando "udisks --dump" (non più presente in Debian)''
:''i pacchetti con origine''
:''Gestita la mancanza di aptitude''
:[[Utente:S3v|S3v]] 23:46, 29 apr 2014 (CEST)
;1.0.32
:''Create le funzioni _lastupd (visualizza la data dell'ultimo aggiornamento),''
:''_extpack_supp (inserisce l'origine da cui provengono i pacchetti esterni)''
:''Sostituito il comando mount con findmnt''
:[[Utente:S3v|S3v]] 13:04, 14 apr 2014 (CEST)
;1.0.31
:''Modificata la funzione _comando per renderla più breve''
:''Aggiunta l'informazione nel log sull'origine dei pacchetti esterni''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 00:19, 8 apr 2014 (CEST)
:[[Utente:S3v|S3v]] 13:21, 23 ott 2020 (CEST)
;1.0.30
;1.0.68
:''Bloccato l'invio a p.d.n per un file più grande di 60x4 K''
:''Nascosti indirizzi MAC delle interfacce wireless''
:''Variabile "var" in _demone per tener conto del nome dello script d'avvio''
:''Sovrascrittura del comando cat per evitare che al file di''
:[[Utente:S3v|S3v]] 19:41, 4 mar 2014 (CET)
:''log venga inviato il contenuto di un file non di testo''
;1.0.29
:''Impostata a 'on' l'opzione 'extdebug' per consentire l'espansione''
:''Introduzione variabile in _pack e _extpack''
:''di ARGC per Bash >= 5''
:''Rilevamento Xfce4''
:''Modifiche e correzioni minori''
:[[Utente:S3v|S3v]] 15:00, 23 mag 2020 (CEST)
;1.0.67
:''Aggiornamento per rilascio di Debian 10 ([[Buster]])''
:[[Utente:HAL 9000|HAL 9000]] 09:39, 7 lug 2019 (CEST)
;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 script ALSA spostato nello script''
:''Modifiche e correzioni minori''
:[[Utente:S3v|S3v]] 10:37, 29 giu 2019 (CEST)
;1.0.65
:''Aggiunti "ip -s -d link show" e Xorg.0.log locale''
:''Nascosti username, password e dominio per montaggi cifs''
:''Modifiche e correzioni minori''
:[[Utente:S3v|S3v]] 20:49, 20 feb 2018 (CET)
;1.0.64
:''Aggiornamento per rilascio di Debian 9 ([[Stretch]])''
:[[Utente:HAL 9000|HAL 9000]] 10:46, 18 giu 2017 (CEST)
;1.0.63
:''Debug come parametro''
:''KDE5 tra i DE rilevati''
:[[Utente:S3v|S3v]] 22:38, 19 mag 2017 (CEST)
;1.0.62
:''Inserito debug''
:''Inserita funzione _printdot (per evitare ripetizioni)''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 14:39, 23 feb 2014 (CET)
:[[Utente:S3v|S3v]] 17:41, 26 feb 2017 (CET)
;1.0.28
;1.0.61
:''Modificata la funzione _hide per nascondere nel log ulteriori informazioni''
:''Aggiunta funzione _header() (intestazione del file di log)''
:''sensibili introdotte da NM''
:''Aggiunto parametro "--versione"''
:[[Utente:S3v|S3v]] 13:03, 17 feb 2014 (CET)
:''Modifiche e correzioni minori''
;1.0.27
:[[Utente:S3v|S3v]] 13:53, 10 dic 2016 (CET)
:''Aggiunto comando "rfkill list all" ai problemi di rete''
;1.0.60
:[[Utente:S3v|S3v]] 20:51, 10 feb 2014 (CET)
:''Elenco ricorsivo delle directory contenenti firmware''
;1.0.26
:''Nascosti (altri) ID di connessioni gestite da NM''
:''Aggiunta funzione "_extpack" alla funzione "_common" per visualizzare i pacchetti installati''
:[[Utente:S3v|S3v]] 20:53, 6 dic 2016 (CET)
:''che non appartengono alla release di default utilizzata''
;1.0.59
:''Gnome Shell tra i DE rilevati''
:''Modificata funzione _hide() per nascondere completamente hostname contenuto nel''
:[[Utente:S3v|S3v]] 13:02, 5 feb 2014 (CET)
:''nome utente (e viceversa)''
;1.0.25
:[[Utente:S3v|S3v]] 21:33, 11 nov 2016 (CET)
:''Aggiunti codici carattere e accorciato il "case" di scelta''
;1.0.58
:''Aggiunto comando "dkms status" a problemi video.
:''Rimossa precedente istruzione e modificata regexp per far funzionare la ricerca di''
:''pacchetti esterni sia su stable che su testing''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 11:17, 31 dic 2013 (CET)
:[[Utente:S3v|S3v]] 16:44, 10 lug 2016 (CEST)
;1.0.24
;1.0.57
:''Aggiunta la scelta per problemi generici''
:''Istruzione per rimuovere eventuale slash alla fine dell'URL in "sources.list"''
:''Nascosto gli ESSID e nomi connessione inviati da NM in syslog''
:''Aggiunti comandi "systemd-cgtop -b --iterations=5", "systemd-cgls" e "systemd-delta" a problemi comuni''
:[[Utente:S3v|S3v]] 15:24, 6 dic 2013 (CET)
:[[Utente:S3v|S3v]] 21:27, 9 lug 2016 (CEST)
;1.0.23
;1.0.56
:''rimossa la variabile "stat_log" e modificato l'umask per permettere l'esecuzione dello script ALSA''
:''Rimosse dal file interfaces anche le chiavi relative a wep e a wpa-enterprise''
:''logname al posto di who''
:[[Utente:metaldaze|metaldaze]] 12:54, 04 feb 2016 (CET)
:''create funzioni _audio (problemi audio) e _tpad (problemi touchpad)''
;1.0.55
:''creata la funzione _hide per sostituire il vero nome utente e il vero nome dell'host''
:''Opzioni per aggiornare lo script o crearne una codifica base64''
:''rimossi i parametri da _compress_ok e _compress_error (inutilizzati)''
:''Corretti ESSID in "nmcli device show" non nascosti''
:''modificato _comando per l'esecuzione del comando "su"''
:''Rimozione duplicati in "release" (pacchetti esterni)''
:''sostituito pgrep con ps''
:[[Utente:S3v|S3v]] 21:26, 15 giu 2015 (CEST)
:''modifiche minori''
;1.0.54
:[[Utente:S3v|S3v]] 18:51, 29 nov 2013 (CET)
:''Correzioni minori legate alla compressione xz; semplificata lettura nome utente in caso di errori con logname''
;1.0.22
:[[Utente:HAL 9000|HAL 9000]] 18:41, 31 mag 2015 (CEST)
:''create funzioni _exit, _data, _common (output per tutti i tipi di problema),''
;1.0.53
:''_apt (problemi con i pacchetti), _mount (problemi di mount/umount), _de_wm''
:''Vengono rimosse dalla variabile "release" (pacchetti esterni) le linee duplicate''
:''(cerca di stabilire il DE/WM) e _demone (esistenza e versione di un demone)''
:[[Utente:S3v|S3v]] 18:22, 30 mag 2015 (CEST)
:''cancellate le funzioni _altro (rinominata in _common), _nm e _wicd (inglobate in _demone),''
;1.0.52
:''_syslog (inglobata in _file), _iwconfig e _iwlist (inglobate in _comando)''
:''Aggiunta compressione xz, se disponibile, con ripiego su bzip2 oppure gzip''
:''output per ricavare il DM da /etc/X11/default-display-manager''
:[[Utente:HAL 9000|HAL 9000]] 22:15, 17 mag 2015 (CEST)
:''tolto l'array da _firmware e "resolvconf in _pack"''
;1.0.51
:''nome del log in base alla data corrente e variabile "utente" (nome utente != root)''
:''Aggiunti comandi "systemctl --failed", "journal -x -b --no-pager [-p [err, warning]]",''
:''Modificata _comando per contemplare il comando "su"''
:''"blkid", "lsblk", "dpkg --audit"''
:''modifiche minori''
:''"/var/log/syslog" e "dmesg" solo se non è installato systemd''
:[[Utente:S3v|S3v]] 15:50, 22 nov 2013 (CET)
:''Aggiunta variabile globale "oldstable" e aggiornate "testing" e "stable"''
;1.0.21
:''Modificata la funzione _file: essid e psk presenti in /etc/network/interfaces non vengono più riportati nel log''
:[[Utente:Metaldaze|Metaldaze]] 18:34, 1 nov 2013 (CET)
;1.0.20
:''Creata la funzione _pack per inviare al log i pacchetti installati in base ad una parola''
:''Rimossa _dhcp, la sua funzione è stata inglobata in _pack''
:''Invio al log dei pacchetti nVidia attraverso _pack''
:''Invio al log dei pacchetti nouveau attraverso _pack''
:''Invio al log dei pacchetti mesa attraverso _pack''
:[[Utente:S3v|S3v]] 20:01, 5 ott 2013 (CEST)
;1.0.19
:''Funzione _dir - contemplato il caso di directory inesistente''
:[[Utente:S3v|S3v]] 14:42, 4 ott 2013 (CEST)
;1.0.18
:''Creata la funzione _dir che invia al log il contenuto dei file di una directory''
:''Modificate le funzioni _ok e _error per consentire lunghezze dell'output maggiori''
:''Aggiunto in output il contenuto di xorg.conf, xorg.conf.d/ e sources.list.d/''
:[[Utente:S3v|S3v]] 13:59, 4 ott 2013 (CEST)
;1.0.17
:''Aggiunta la funzione _video - Problemi video''
:[[Utente:S3v|S3v]] 13:31, 3 ott 2013 (CEST)
;1.0.16
:''Aggiunta directory /run/udev/firmware-missing alla funzione _firmware''
:[[Utente:S3v|S3v]] 17:25, 26 ago 2013 (CEST)
;1.0.15
:''Tolta la funzione _spazi (inutilizzata)''
:''Soppresso l'output di errore di pastebinit''
:''Modificate _iwconfig e _iwlist per mostrare ESSID=off/any
:[[Utente:S3v|S3v]] 11:34, 21 giu 2013 (CEST)
;1.0.14
:''Voce del menù per la risoluzione dei problemi di rete (funzione _rete)''
:''Creata funzione _altro''
:''_resolvconf inglobata in _comando''
:''Introdotto il comando dmesg per filtrare errori e warning separatamente''
:[[Utente:S3v|S3v]] 20:49, 7 giu 2013 (CEST)
:''
;1.0.13
:''Reinserita la funzione _syslog per prelevare l'ultimo output utile solo da syslog o, eventualmente,''
:''da syslog.1 e syslog''
:[[Utente:S3v|S3v]] 16:07, 1 giu 2013 (CEST)
;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
:''Modificata la funzione _wicd''
:[[Utente:S3v|S3v]] 00:57, 15 mag 2013 (CEST)
;1.0.10
:''Tolta la funzione iptables per motivi di sicurezza''
:''Impostata una maschera di default per i file creati dallo script''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 11:19, 14 mag 2013 (CEST)
:[[Utente:HAL 9000|HAL 9000]] e [[Utente:S3v|S3v]] 17:12, 4 mag 2015 (CEST)
;1.0.9
;1.0.50
:''Aggiunta funzionalità per aggiungere i log di sistema (/var/log/syslog e /var/log/syslog.1)
:''Rivista la funzione _extpack (repository Debian''
:[[Utente:Aki|Aki]] 14:20 3 mag 2013 (CEST);
:''in base al comando "apt-cache policy")''
;1.0.8
:[[Utente:S3v|S3v]] 22:37, 22 dic 2014 (CET)
:''Integrazione funzionalità upload per supportare la verifica della ricezione da parte di http://paste.debian.net
;1.0.49
:''Revisione messaggistica in caso di fallito invio a http://paste.debian.net
:''Aggiunti trap INT e "dpkg --print-foreign-architectures"''
:[[Utente:Aki|Aki]] 12:40 2 mag 2013 (CEST);
:''Spostato "dkms status" nei comandi generali''
;1.0.7
:[[Utente:S3v|S3v]] 21:19, 20 dic 2014 (CET)
:''Aggiunta funzionalità per identificazione produttore e modello del computer secondo lo standard SMBIOS/DMI
;1.0.48
:''Aggiunta rimozione valore ESSID dall'output del comando iwconfig
:''Corretta la ricerca per i pacchetti esterni''
:''Aggiunto controllo esito invio log verso http://paste.debian.net (in caso di falito invio)
:''Aggiunto _pack "linux-image"''
:''Anticipazione ed unificazione nell'ordine del codice sorgente delle sezioni relative al controllo del sistema apt
:[[Utente:S3v|S3v]] 20:16, 19 nov 2014 (CET)
:[[Utente:Aki|Aki]] 13:40 27 apr 2013 (CEST);
;1.0.47
;1.0.6
:''Inseriti "nmcli dev list" (per Wheezy) e "nmcli device show" (per Jessie e superiori)''
:''Aggiunta funzionalità per verifiche sullo stato del gestiore dei pacchetti (comandi apt-cache policy, apt-cache status)
:''Inserito "udisksctl dump"''
:[[Utente:Aki|Aki]] 10:39 26 apr 2013 (CEST)
:[[Utente:S3v|S3v]] 15:55, 5 nov 2014 (CET)
;1.0.5
 
:''Aggiunta funzionalità frammentazione log per invio a http://paste.debian.net''
(Prosegue nella pagina di [[Discussione:Creazione automatica di un file di log per inviare quesiti al forum|discussione]]).
:''Aggiunta funzionalità per verifiche sullo stato dei dischi (comandi fdisk -l , mount, df -h)''
:''Aggiunta funzionalità per verifica del file /etc/fstab''
:''Apportate alcune variazioni ai messaggi diagnostici''
:''Collegamento con la guida su'' [[Come formulare quesiti tecnici al forum]]
:[[Utente:Aki|Aki]] 13:30 25 apr 2013 (CEST)
;1.0.4
:''Tolto qualche echo e inserito un messaggio di mancato invio log a p.d.n''
:[[Utente:S3v|S3v]] 18:15, 20 apr 2013 (CEST)
;1.0.3
:''Aggiunta rimozione valore ESSID dalla scansione delle reti wireless''
:[[Utente:Aki|Aki]] 20:34 14 apr 2013 (CEST)
;1.0.2
:''Aggiunta avvertenza su esplicito consenso all'invio verso paste.debian.net''
:[[Utente:S3v|S3v]] 14:56, 14 apr 2013 (CEST)
;1.0.1
:''Corretta la funzione "dmesg" che svuotava il buffer e non produceva output''
:[[Utente:S3v|S3v]] 12:22, 14 apr 2013 (CEST)


{{Autori
{{Autori
3 581

contributi