6 999
contributi
S3v (discussione | contributi) (1.0.65) |
S3v (discussione | contributi) (1.0.66) |
||
Riga 5: | Riga 5: | ||
* Connessioni di rete | * Connessioni di rete | ||
* Video | * Video | ||
* Avvio del sistema (boot) | |||
* Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui]) | * Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui]) | ||
* Sottosistema di gestione dei pacchetti (APT) | * Sottosistema di gestione dei pacchetti (APT) | ||
Riga 32: | Riga 33: | ||
== Parametri dello script == | == Parametri dello script == | ||
Lo script accetta, in maniera facoltativa, alcuni parametri: | Lo script accetta, in maniera facoltativa, alcuni parametri: | ||
;--tipo={rete|video|audio|apt|mount|touchpad|generico}:specifica il tipo di problema | ;--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}:specifica il tipo di problema | ||
;--nocompress:non crea il file compresso del file di log | ;--nocompress:non crea il file compresso del file di log | ||
;--nopaste:non invia il file di log a paste.debian.net | ;--nopaste:non invia il file di log a paste.debian.net | ||
Riga 98: | Riga 99: | ||
# Versione script | # Versione script | ||
readonly VERSIONE="1.0. | readonly VERSIONE="1.0.66" | ||
# Path e nome dello script | # Path e nome dello script | ||
readonly PATH_NAME="$(readlink -f "${BASH_SOURCE[0]}")" | readonly PATH_NAME="$(readlink -f "${BASH_SOURCE[0]}")" | ||
# Codename per stable e testing. Da modificare nei successivi rilasci di Debian | # Codename per oldstable, stable e testing. Da modificare nei successivi rilasci di Debian | ||
readonly OLDSTABLE="jessie" | readonly OLDSTABLE="jessie" | ||
readonly STABLE="stretch" | readonly STABLE="stretch" | ||
Riga 144: | Riga 145: | ||
# deve esistere in /etc/passwd (o equivalente) | # deve esistere in /etc/passwd (o equivalente) | ||
getent passwd "$tmputente" > /dev/null 2>&1 || { | getent passwd "$tmputente" > /dev/null 2>&1 || { | ||
echo "Nome utente | echo "Nome utente non valido o non esistente!" >&2 | ||
exit 255 | exit 255 | ||
} | } | ||
Riga 196: | Riga 197: | ||
Utilizzo dei parametri: | Utilizzo dei parametri: | ||
$BOLD--tipo={rete|video|audio|apt|mount|touchpad|generico}$FINE | $BOLD--tipo={rete|video|boot|audio|apt|mount|touchpad|generico}$FINE | ||
utilizzato per specificare un solo tipo di problema. | utilizzato per specificare un solo tipo di problema. | ||
Es: --tipo=apt | Es: --tipo=apt | ||
Riga 231: | Riga 232: | ||
# Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni | # Inizializzazione di variabili. La variabile TIPO serve ad evitare ripetizioni | ||
# nel passaggio del parametro tipo=blabla | # nel passaggio del parametro tipo=blabla | ||
NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0 | NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0 TIPO_BOOT=0 | ||
TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0 | TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0 | ||
DEBUG=0 | DEBUG=0 | ||
Riga 244: | Riga 245: | ||
"--tipo=apt") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_APT=1 ;; | "--tipo=apt") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_APT=1 ;; | ||
"--tipo=video") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_VIDEO=1 ;; | "--tipo=video") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_VIDEO=1 ;; | ||
"--tipo=boot") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_BOOT=1 ;; | |||
"--tipo=audio") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_AUDIO=1 ;; | "--tipo=audio") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_AUDIO=1 ;; | ||
"--tipo=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1 ;; | "--tipo=mount") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_MNT=1 ;; | ||
Riga 484: | Riga 486: | ||
[ "$TIPO_RETE" -eq 1 ] && _wait && _header "rete" && _rete && return | [ "$TIPO_RETE" -eq 1 ] && _wait && _header "rete" && _rete && return | ||
[ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video" && _video && return | [ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video" && _video && return | ||
[ "$TIPO_BOOT" -eq 1 ] && _wait && _header "boot" && _boot && return | |||
[ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio" && _audio && return | [ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio" && _audio && return | ||
[ "$TIPO_APT" -eq 1 ] && _wait && _header "APT" && _apt && return | [ "$TIPO_APT" -eq 1 ] && _wait && _header "APT" && _apt && return | ||
Riga 499: | Riga 502: | ||
[1] Problemi relativi alle connessioni di rete | [1] Problemi relativi alle connessioni di rete | ||
[2] Problemi video | [2] Problemi video | ||
[3] Problemi audio | [3] Problemi di boot | ||
[ | [4] Problemi audio | ||
[ | [5] Problemi di gestione dei pacchetti (APT) | ||
[ | [6] Problemi di mount/unmount | ||
[ | [7] Problemi di funzionamento del touchpad | ||
[8] Altro tipo di problema | |||
[0] Uscita" | [0] Uscita" | ||
Riga 510: | Riga 514: | ||
read num | read num | ||
case "$num" in | case "$num" in | ||
[1- | [1-8]) _wait ;;& # ;;& -> va alla successiva occorrenza del carattere immesso | ||
1) _header "rete" && _rete ;;& | 1) _header "rete" && _rete ;;& | ||
2) _header "video" && _video ;;& | 2) _header "video" && _video ;;& | ||
3) _header "audio" && _audio ;;& | 3) _header "boot" && _boot ;;& | ||
4) _header "audio" && _audio ;;& | |||
5) _header "APT" && _apt ;;& | |||
6) _header "mount-unmount" && _mount ;;& | |||
7) _header "touchpad" && _tpad ;;& | |||
[1- | 8) _header "generico" && _common ;;& | ||
[1-8]) break ;; # Termina il ciclo 'while' | |||
0) _exit ;; # È stato inserito '0' . Uscita dallo script | 0) _exit ;; # È stato inserito '0' . Uscita dallo script | ||
*) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda | *) # Tutti gli altri caratteri. Cancella l'input immesso e ripete la domanda | ||
Riga 531: | Riga 536: | ||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
# Funzione che stampa solo | # Funzione che stampa solo parentesi e il nome del comando, prima di eseguirlo | ||
function _prompt { | function _prompt { | ||
echo -n "[ ] $*" | echo -n "[ ] $*" | ||
Riga 559: | Riga 564: | ||
# Funzione che invia nel file di log due righe tra le quali viene visualizzato il | # Funzione che invia nel file di log due righe tra le quali viene visualizzato il | ||
# nome del comando (passato come primo parametro della funzione -> $1) | # nome del comando (passato come primo parametro della funzione -> $1) | ||
function | function _nome_e_riga { | ||
echo " | echo " | ||
****************************************** | ****************************************** | ||
Riga 616: | Riga 621: | ||
sed -i -r "s/(NetworkManager.*Activation: starting connection ').*(')/\1\*script-removed\*\2/g" "$log" | sed -i -r "s/(NetworkManager.*Activation: starting connection ').*(')/\1\*script-removed\*\2/g" "$log" | ||
sed -i -r "s/(NetworkManager.*policy: set ').*(')/\1\*script-removed\*\2/g" "$log" | sed -i -r "s/(NetworkManager.*policy: set ').*(')/\1\*script-removed\*\2/g" "$log" | ||
} | |||
# Invia al log l'output del comando passato come primo parametro e | |||
# con i permessi utente | |||
function _su { | |||
echo "$(su -c "$1" $utente)" >> "$log" | |||
} | } | ||
Riga 692: | Riga 703: | ||
echo "Codifica non riuscita" | echo "Codifica non riuscita" | ||
fi | fi | ||
# Modifica i permessi del file in modo che possa essere letto da tutti | |||
chmod 444 "$tempfile" | |||
} | } | ||
Riga 763: | Riga 776: | ||
_comando "/sbin/blkid" | _comando "/sbin/blkid" | ||
_file "/etc/fstab" | _file "/etc/fstab" | ||
_dir "/etc/fstab.d/" | |||
_comando "/bin/findmnt" | _comando "/bin/findmnt" | ||
_comando "/bin/lsblk" | _comando "/bin/lsblk" | ||
_comando "/bin/df" | _comando "/bin/df" | ||
_dir "/etc/modprobe.d/" | |||
_dir "/etc/modules-load.d/" | |||
_file "/etc/modules" | |||
_file "/etc/apt/sources.list" | _file "/etc/apt/sources.list" | ||
_dir "/etc/apt/sources.list.d/" | _dir "/etc/apt/sources.list.d/" | ||
Riga 783: | Riga 800: | ||
_common | _common | ||
_file "/etc/network/interfaces" | _file "/etc/network/interfaces" | ||
_dir "/etc/network/interfaces.d/" | |||
_file "/etc/hosts" | _file "/etc/hosts" | ||
_comando "/sbin/ifconfig" | _comando "/sbin/ifconfig" | ||
Riga 817: | Riga 835: | ||
_pack "mesa" | _pack "mesa" | ||
_pack "fglrx" | _pack "fglrx" | ||
} | |||
# Funzione relativa ai problemi di avvio del sistema | |||
function _boot { | |||
_common | |||
_file "/etc/default/grub" | |||
_file "/boot/grub/grub.cfg" | |||
_dir "/etc/default/grub.d/" | |||
_dir "/etc/grub.d/" | |||
_file "/boot/grub/device.map" | |||
_comando "/usr/sbin/grub-mkdevicemap" | |||
_pack grub | |||
} | } | ||
Riga 823: | Riga 853: | ||
_common | _common | ||
_pack "alsa" | _pack "alsa" | ||
_nome_e_riga "dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel'" | |||
_prompt "ALSA dmesg" | |||
dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> "$log" && _ok || _error | |||
local risp alsaurl="http://www.alsa-project.org/alsa-info.sh" | local risp alsaurl="http://www.alsa-project.org/alsa-info.sh" | ||
Riga 847: | Riga 880: | ||
# Imposta i permessi dello script scaricato | # Imposta i permessi dello script scaricato | ||
chmod 777 "$tempfile" | chmod 777 "$tempfile" | ||
_nome_e_riga "Problemi audio" | |||
# 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 "$tempfile --stdout" && _ok || _error | |||
else | else | ||
_error "Download script ALSA fallito" | _error "Download script ALSA fallito" | ||
Riga 913: | Riga 950: | ||
function _file { | function _file { | ||
_nome_e_riga "$1" | |||
_prompt "$1" | _prompt "$1" | ||
if [ -f "$1" ]; then | if [ -f "$1" ]; then | ||
Riga 936: | Riga 973: | ||
# in questo caso l'intero contenuto del file syslog viene inviato al log | # in questo caso l'intero contenuto del file syslog viene inviato al log | ||
cat "$1" &>> "$log" && _ok || _error | cat "$1" &>> "$log" && _ok || _error | ||
_nome_e_riga "$1".1 | |||
_prompt "$1".1 | _prompt "$1".1 | ||
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error | sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error | ||
Riga 967: | Riga 1 004: | ||
local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path | local var=${1##*/} # var conterrà il comando ($1) con le opzioni ma privo del path | ||
local var2=${1%% *} # var2 conterrà il comando ($1) privo di eventuali opzioni ma con il path | local var2=${1%% *} # var2 conterrà il comando ($1) privo di eventuali opzioni ma con il path | ||
_nome_e_riga "$var" | |||
_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 | 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 "DISPLAY=${DISPLAY:-:0} $1" && _ok || _error ;; | |||
*) | *) | ||
_su "$1" && _ok || _error | |||
esac | esac | ||
else # non viene utilizzato "su" | else # non viene utilizzato "su" | ||
Riga 996: | Riga 1 033: | ||
"/usr/bin/nmcli device show") | "/usr/bin/nmcli device show") | ||
LANG=C nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*|GENERAL.CONNECTION:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \ | LANG=C nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*|GENERAL.CONNECTION:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \ | ||
( _error && echo "Comando valido solo per Jessie" >> "$log" ) ;; | ( _error && echo "Comando valido solo per Jessie e versioni superiori" >> "$log" ) ;; | ||
/bin/dmesg*) | /bin/dmesg*) | ||
# Il comando viene eseguito solo se è non installato systemd | # Il comando viene eseguito solo se è non installato systemd | ||
[ $systemd -eq 0 ] && $1 &>> "$log" && _ok || _error ;; | [ $systemd -eq 0 ] && $1 &>> "$log" && _ok || _error ;; | ||
"/usr/sbin/grub-mkdevicemap") | |||
local devicemaptempfile="$(mktemp)" && \ | |||
grub-mkdevicemap -m "$devicemaptempfile" && \ | |||
if [ -f "$devicemaptempfile" ]; then cat "$devicemaptempfile" >> "$log"; fi && _ok || _error ;; | |||
*) | *) | ||
# per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log | # per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log | ||
Riga 1 012: | Riga 1 053: | ||
# Funzione che invia il contenuto dei file di una directory al file di log | # Funzione che invia il contenuto dei file di una directory al file di log | ||
function _dir { | function _dir { | ||
_nome_e_riga "$1" | |||
_prompt "$1" | _prompt "$1" | ||
Riga 1 035: | Riga 1 076: | ||
for file in "$1"*; do | for file in "$1"*; do | ||
if [ -f "$file" ]; then | if [ -f "$file" ]; then | ||
_nome_e_riga "$file" | |||
_prompt "$file" | _prompt "$file" | ||
cat "$file" &>> "$log" && _ok || _error | cat "$file" &>> "$log" && _ok || _error | ||
Riga 1 052: | Riga 1 093: | ||
} | } | ||
# Funzione che elenca i pacchetti installati | # 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\"" | |||
_prompt "$1" | _prompt "Nomi di pacchetti con $1" | ||
# Variabile che contiene i pacchetti trovati | # Variabile che contiene i pacchetti trovati | ||
Riga 1 081: | Riga 1 122: | ||
# vers = versione del demone ; var = nome dello script d'avvio del demone | # vers = versione del demone ; var = nome dello script d'avvio del demone | ||
local vers="" var="" | local vers="" var="" | ||
_nome_e_riga "$2" | |||
_prompt "$2" | _prompt "$2" | ||
if [ -f "$1" ]; then | if [ -f "$1" ]; then | ||
Riga 1 110: | Riga 1 151: | ||
function _dmi_decode { | function _dmi_decode { | ||
local var="/sys/class/dmi/id/*" | local var="/sys/class/dmi/id/*" | ||
_nome_e_riga "$var" | |||
_prompt "$var" | _prompt "$var" | ||
if [ -f /sys/class/dmi/id/sys_vendor ]; then | if [ -f /sys/class/dmi/id/sys_vendor ]; then | ||
Riga 1 126: | Riga 1 167: | ||
local i var="Firmware" | local i var="Firmware" | ||
_prompt "$var" | _prompt "$var" | ||
_nome_e_riga "$var" | |||
dpkg -l | grep -i firmware >> "$log" && _ok || _error | dpkg -l | grep -i firmware >> "$log" && _ok || _error | ||
echo >> "$log" | echo >> "$log" | ||
Riga 1 183: | Riga 1 224: | ||
# Funzione che "cerca" di ricavare il nome e la versione del DE/WM utilizzato | # Funzione che "cerca" di ricavare il nome e la versione del DE/WM utilizzato | ||
function _de_wm { | function _de_wm { | ||
_nome_e_riga "Desktop Environment - Window Manager" | |||
_prompt "DE/WM" | _prompt "DE/WM" | ||
{ | { | ||
Riga 1 262: | Riga 1 303: | ||
# (vedere anche il modo in cui viene ricavata la variabile "release" in alto) | # (vedere anche il modo in cui viene ricavata la variabile "release" in alto) | ||
if [ -z "$release" ]; then | if [ -z "$release" ]; then | ||
_nome_e_riga "${var} all'archivio \"NON RILEVATO!\"" | |||
echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error | echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error | ||
return 1 | return 1 | ||
Riga 1 273: | Riga 1 314: | ||
local num=$(echo "$release" | wc -l) | local num=$(echo "$release" | wc -l) | ||
# Se il numero di release è diverso da 1, la funzione termina | # Se il numero di release è diverso da 1 (pinning?), la funzione termina | ||
if [ "$num" -ne 1 ]; then | if [ "$num" -ne 1 ]; then | ||
_nome_e_riga "$var" | |||
echo "Sono presenti ${num} release in sources.list" >> "$log" && _error | echo "Sono presenti ${num} release in sources.list" >> "$log" && _error | ||
return | return | ||
Riga 1 299: | Riga 1 340: | ||
# Invia al log il contenuto di pkg (se esiste) | # Invia al log il contenuto di pkg (se esiste) | ||
_nome_e_riga "${var} all'archivio \"${release}\"" | |||
if [ -z "$pkg" ]; then | if [ -z "$pkg" ]; then | ||
echo "Nessun pacchetto esterno installato" >> "$log" && _error | echo "Nessun pacchetto esterno installato" >> "$log" && _error | ||
Riga 1 334: | Riga 1 375: | ||
== Changelog == | == Changelog == | ||
<!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) --> | <!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) --> | ||
;1.0.66 | |||
:''Aggiunto problema per avvio del sistema (boot)'' | |||
:''Aggiunta funzione _su (c'erano problemi con lo script ALSA)'' | |||
:''Aggiunte directory <code>/etc/fstab/</code>, <code>/etc/modprobe.d/</code>'', | |||
:''<code>/etc/modules-load.d/</code>, <code>/etc/network/interfaces.d/</code> e il'' | |||
:''file <code>/etc/modules</code>'' | |||
:''dmesg dello scipt ALSA spostato nello script'' | |||
:''Modifiche e correzioni minori'' | |||
:[[Utente:S3v|S3v]] 10:37, 29 giu 2019 (CEST) | |||
;1.0.65 | ;1.0.65 | ||
:''Aggiunti "ip -s -d link show" e Xorg.0.log locale'' | :''Aggiunti "ip -s -d link show" e Xorg.0.log locale'' |
contributi