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

Vai alla navigazione Vai alla ricerca
m
ridotta la gravità dell'avviso
mNessun oggetto della modifica
m (ridotta la gravità dell'avviso)
(12 versioni intermedie di 2 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 con la prima lettera maiuscola (per esempio: Jessie).
 
-->
{{#ifeq: {{Codename|Stable}} | Buster |
  {{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 di gestione dei pacchetti (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 nei log creato con tutte le tipologie di problema precedenti).
* 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:
Riga 24: Riga 38:
== 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, per esempio con nome <code>scriptlog-debianizzati.org</code> e dargli permessi di esecuzione (<code>chmod a+x scriptlog-debianizzati.org</code>).<br/>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>
# 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>.
# Eseguire lo script con i permessi di [[root]]:<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.
# 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.
# Eseguire da terminale (o emulatore di terminale) lo script con i permessi di [[root]]:<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.
# Leggere le informazioni a video.
# Leggere le informazioni a video.


== 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<br/>Es: --tipo=apt
;--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
;--update:aggiorna lo script se esiste una versione recente
;--update:aggiorna lo script se esiste una versione recente
;--base64:crea un file contenente la codifica base64 dello script
;--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
;--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
</pre>


<!-- commento (leggibile per chi modifica la pagina)
<!-- commento (leggibile per chi modifica la pagina)
Riga 87: Riga 111:


# Versione script
# Versione script
readonly VERSIONE="1.0.56"
readonly VERSIONE="1.0.67"


# 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="wheezy"
readonly OLDSTABLE="stretch"
readonly STABLE="jessie"
readonly STABLE="buster"
readonly TESTING="stretch"
readonly TESTING="bullseye"


# Path dei comandi dello script
# Path dei comandi dello script
Riga 102: Riga 126:
# Nome del file di log in base alla data corrente
# Nome del file di log in base alla data corrente
readonly log="log_$(date '+%d%b_%H%M%S')"
readonly log="log_$(date '+%d%b_%H%M%S')"
# Nome del file di debug
readonly script_debug="/tmp/script_debug_$(date '+%d%b_%H%M%S')"
# File descriptor per il debug
FD=9


# URL remoto della pagina contenente lo script
# URL remoto della pagina contenente lo script
Riga 127: Riga 157:
   # 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 171: Riga 201:
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato
function _parm_uso_err {
function _parm_uso_err {
   echo "Il parametro --help non deve essere accompagnato da altri parametri" && _parm_uso
   echo "Il parametro $1 non deve essere accompagnato da altri parametri" && _parm_uso
}
}


Riga 179: Riga 209:
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 194: Riga 224:
$BOLD--base64$FINE
$BOLD--base64$FINE
   viene creato un file con la codifica base64 dello script
   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
$BOLD--help$FINE
Riga 199: Riga 235:
    
    
"  && exit
"  && exit
}
# Visualizza la versione corrente dello script
function _showvers {
  echo "$VERSIONE" && exit
}
}


# 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


while [ $# -gt 0 ] ; do
while [ $# -gt 0 ] ; do
   case "$1" in
   case "$1" in
     "--base64") [ $BASH_ARGC -gt 1 ] && _parm_uso_err "$1" || BASE64=1 ;;
     "--base64") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || BASE64=1 ;;
     "--update") [ $BASH_ARGC -gt 1 ] && _parm_uso_err "$1" || UPDATE=1 ;;
     "--update") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || UPDATE=1 ;;
     "--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1      ;;
     "--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1      ;;
     "--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1       ;;
     "--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1       ;;
Riga 215: Riga 257:
     "--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  ;;
     "--tipo=touchpad") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_TOUCH=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  ;;
     "--tipo=generico") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_COMM=1  ;;
     "--help") [ $BASH_ARGC -gt 1 ] && _parm_uso_err || _parm_uso           ;;
    "--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
     *) _parm_err
   esac
   esac
   shift
   shift
done
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 236: Riga 298:
*                                                                              *
*                                                                              *
*  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 434: Riga 496:


   # Problemi selezionati in base al parametro passato allo script
   # Problemi selezionati in base al parametro passato allo script
   [ "$TIPO_RETE"  -eq 1 ] && _wait && echo $'### Problemi di rete ###\n'            > "$log" && _rete  && return
   [ "$TIPO_RETE"  -eq 1 ] && _wait && _header "rete"           && _rete  && return
   [ "$TIPO_VIDEO" -eq 1 ] && _wait && echo $'### Problemi video ###\n'              > "$log" && _video  && return
   [ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video"          && _video  && return
   [ "$TIPO_AUDIO" -eq 1 ] && _wait && echo $'### Problemi audio ###\n'              > "$log" && _audio  && return
  [ "$TIPO_BOOT"  -eq 1 ] && _wait && _header "boot"           && _boot  && return
   [ "$TIPO_APT"  -eq 1 ] && _wait && echo $'### Problemi APT ###\n'                > "$log" && _apt    && return
   [ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio"         && _audio  && return
   [ "$TIPO_MNT"  -eq 1 ] && _wait && echo $'### Problemi mount-unmount ###\n'      > "$log" && _mount  && return
   [ "$TIPO_APT"  -eq 1 ] && _wait && _header "APT"           && _apt    && return
   [ "$TIPO_TOUCH" -eq 1 ] && _wait && echo $'### Problemi touchpad ###\n'          > "$log" && _tpad  && return
   [ "$TIPO_MNT"  -eq 1 ] && _wait && _header "mount-unmount" && _mount  && return
   [ "$TIPO_COMM"  -eq 1 ] && _wait && echo $'### Solo informazioni generiche ###\n' > "$log" && _common && 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
   # La funzione presenta un menù di scelta nel caso non sia stato passato alcun parametro
Riga 451: Riga 514:
[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 462: Riga 526:
     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 ;;&
         [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 483: Riga 548:
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------


# 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
# Visualizza a video l'eventuale stringa passata come primo parametro ($1).
function _printdot {
function _ok {
   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
   # se non ci sono parametri, viene stampato solo il pallino
   printf %b "$1•${FINE}\n" # stampa pallino e va a capo
  if [ $# -eq 0 ]; then
    printf %b "${VERDE}•${FINE}\n" # stampa pallino e va a capo
  # se c'è un parametro, viene stampato il pallino e il parametro
  elif [ $# -eq 1 ]; then
    printf %b "${VERDE}•${FINE}"
    tput cuf 3 # a destra di tre spazi
    tput el    # cancella fino a fine riga
    printf %b "$1\n" # stampa il parametro e va a capo
  fi
}
}
# 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
  # se non ci sono parametri, viene stampato solo il pallino
  if [ $# -eq 0 ]; then
    printf %b "${ROSSO}•${FINE}\n" # stampa pallino e va a capo
  # se c'è un parametro, viene stampato il pallino e il parametro
  elif [ $# -eq 1 ]; then
    printf %b "${ROSSO}•${FINE}"
    tput cuf 3 # a destra di tre spazi
    tput el    # cancella fino a fine riga
    printf %b "$1\n" # stampa il parametro e va a capo
  fi
}


# 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 539: Riga 583:
}
}


# 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"
}
}


Riga 553: Riga 605:


  # 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"
  if [[ "$nomehost" =~ .*"$utente".* ]]; then
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
  [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log"
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
  else
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
  [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log"
fi 


  # Nasconde gli ESSID gestiti attraverso Network Manager
  # Nasconde gli ESSID gestiti attraverso Network Manager
Riga 570: Riga 627:
  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"
}
# 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 587: Riga 654:
     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
   fi
}
}
Riga 648: Riga 715:
       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 677: Riga 746:
       echo -n "File compresso da allegare alla discussione sul forum: "
       echo -n "File compresso da allegare alla discussione sul forum: "
       _bold "$complog"
       _bold "$complog"
    fi
    if [ -f "$script_debug" ]; then
      echo -n "File contenente l'output di debug: "
      _bold "$script_debug"
     fi
     fi
   fi
   fi
    
    
   echo $'Script terminato\n'
   echo $'Script terminato\n'
  _close_debug
 
   exit 0
   exit 0
}
}
Riga 690: Riga 766:
# 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 703: Riga 777:
   _comando "/bin/journalctl -x -b --no-pager -p err"
   _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 -p warning"
  _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 711: Riga 788:
   _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 731: Riga 812:
   _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 -W5 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
Riga 758: Riga 841:
   _dir "/etc/X11/xorg.conf.d/"
   _dir "/etc/X11/xorg.conf.d/"
   _file "/var/log/Xorg.0.log"
   _file "/var/log/Xorg.0.log"
  _file "${utente}/.local/share/xorg/Xorg.0.log"
   _pack "xserver-xorg"
   _pack "xserver-xorg"
   _pack "nouveau"
   _pack "nouveau"
Riga 763: Riga 847:
   _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 769: Riga 865:
   _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 793: Riga 892:
      # 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 859: Riga 962:


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
Riga 877: Riga 985:
# 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 908: Riga 1 016:
   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 937: Riga 1 045:
               "/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 953: Riga 1 065:
# 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 962: Riga 1 074:
   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 972: Riga 1 083:
     echo "La directory non contiene file o directory" >> "$log" && _error
     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 || _error
         cat "$file" &>> "$log" && _ok || _error
Riga 994: Riga 1 105:
}
}


# 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 023: Riga 1 134:
   # 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 052: Riga 1 163:
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 068: Riga 1 179:
   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 076: Riga 1 187:
     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 1 125: Riga 1 236:
# 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 139: Riga 1 250:
   # in esecuzione
   # in esecuzione
   echo -n "In esecuzione: " >> "$log"
   echo -n "In esecuzione: " >> "$log"
   if _is_running "ksmserver"; then kde4-config --version >> "$log" && _ok || _error                         # KDE4
   if _is_running "ksmserver"; then
   elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok || _error                    # Gnome Shell
    kf5-config -v 2>/dev/null >> "$log" ||                                                                # KDE5
    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 "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok || _error # Xfce4
   elif _is_running "openbox"; then
   elif _is_running "openbox"; then
Riga 1 177: Riga 1 290:


     # controlla che sia un nome di release valido
     # controlla che sia un nome di release valido
     if [ "$rel" = "stable" ] || [ "$rel" = "testing" ] || [ "$rel" = "unstable" ] ||
     if [ "$rel" = "oldstable" ] || [ "$rel" = "stable" ] || [ "$rel" = "testing" ] || [ "$rel" = "unstable" ] ||
       [ "$rel" = "$STABLE" ] || [ "$rel" = "$TESTING" ] || [ "$rel" = "sid" ]; then
       [ "$rel" = "$OLDSTABLE" ] || [ "$rel" = "$STABLE" ] || [ "$rel" = "$TESTING" ] || [ "$rel" = "sid" ]; then
      
      
       # controlla che sia un repository di Debian
       # controlla che sia un repository di Debian
       # si basa sull'output di "apt-cache policy" e su o=Debian e l=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}')"
       riga="$(echo "$aptcachepol" | sed -n '/'$indirizzo'*.*'$rel'\/main.*Packages$/ {N; /.*o=Debian,.*l=Debian,/p}')"
      
      
       # se è un archivio valido, aggiorna la variabile "release"
       # se è un archivio valido, aggiorna la variabile "release"
Riga 1 198: Riga 1 311:
  _prompt "$var"
  _prompt "$var"
    
    
  # Lo script DEVE rilevare almeno una release. Se la variabile "release" è nulla, c'è un errore nei in "sources.list"
  # 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)
  # oppure non è stato eseguito un aggiornamento della lista dei pacchetti (update)
  # (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 213: Riga 1 326:
  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 239: Riga 1 352:


  # 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 256: Riga 1 369:


if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
  _debug
   _avvertenze
   _avvertenze
   _check
   _check
Riga 1 269: Riga 1 383:


_exit
_exit
</pre>
</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.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 scipt 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''
:[[Utente:S3v|S3v]] 17:41, 26 feb 2017 (CET)
;1.0.61
:''Aggiunta funzione _header() (intestazione del file di log)''
:''Aggiunto parametro "--versione"''
:''Modifiche e correzioni minori''
:[[Utente:S3v|S3v]] 13:53, 10 dic 2016 (CET)
;1.0.60
:''Elenco ricorsivo delle directory contenenti firmware''
:''Nascosti (altri) ID di connessioni gestite da NM''
:[[Utente:S3v|S3v]] 20:53, 6 dic 2016 (CET)
;1.0.59
:''Modificata funzione _hide() per nascondere completamente hostname contenuto nel''
:''nome utente (e viceversa)''
:[[Utente:S3v|S3v]] 21:33, 11 nov 2016 (CET)
;1.0.58
:''Rimossa precedente istruzione e modificata regexp per far funzionare la ricerca di''
:''pacchetti esterni sia su stable che su testing''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 16:44, 10 lug 2016 (CEST)
;1.0.57
:''Istruzione per rimuovere eventuale slash alla fine dell'URL in "sources.list"''
:''Aggiunti comandi "systemd-cgtop -b --iterations=5", "systemd-cgls" e "systemd-delta" a problemi comuni''
:[[Utente:S3v|S3v]] 21:27, 9 lug 2016 (CEST)
;1.0.56
;1.0.56
:''Rimosse dal file interfaces anche le chiavi relative a wep e a wpa-enterprise''
:''Rimosse dal file interfaces anche le chiavi relative a wep e a wpa-enterprise''
3 581

contributi

Menu di navigazione