6 999
contributi
S3v (discussione | contributi) m (→Script) |
S3v (discussione | contributi) Nessun oggetto della modifica |
||
Riga 27: | Riga 27: | ||
# 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. | # 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|audio|apt|mount|touchpad|generico}:specifica il tipo di problema<br/>Es: --tipo=apt | |||
;--nocompress:non crea il file compresso del file di log | |||
;--nopaste:non invia il file di log a paste.debian.net | |||
;--help:visualizza informazioni sull'utilizzo dei parametri | |||
== Script == | == Script == | ||
Riga 62: | Riga 69: | ||
# Versione script | # Versione script | ||
readonly VERSIONE="1.0. | readonly VERSIONE="1.0.42" | ||
# Codename per stable e testing. Da modificare nei successivi rilasci di Debian | # Codename per stable e testing. Da modificare nei successivi rilasci di Debian | ||
Riga 121: | Riga 128: | ||
readonly ROSSO="\033[01;31m" # colore rosso e grassetto | readonly ROSSO="\033[01;31m" # colore rosso e grassetto | ||
readonly VERDE="\033[01;32m" # colore verde e grassetto | readonly VERDE="\033[01;32m" # colore verde e grassetto | ||
readonly BOLD="\033[01m" | readonly BOLD="\033[01m" # grassetto | ||
readonly FINE="\033[0m" | readonly FINE="\033[0m" # reset | ||
# -------------------------------------------------------------------------- | |||
# 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 && exit | |||
} | |||
# 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 && exit | |||
} | |||
# Messaggio visualizzato nel caso in cui venga specificato lo stesso parametro | |||
function _parm_rip_err { | |||
echo "È stato immesso lo stesso parametro" && _parm_uso && exit | |||
} | |||
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato | |||
function _parm_uso_err { | |||
echo "Il parametro --help non deve essere accompagnato da altri parametri" && _parm_uso && exit | |||
} | |||
# Funzione che stampa informazioni sull'utilizzo dei parametri | |||
function _parm_uso { | |||
printf %b " | |||
Utilizzo dei parametri: | |||
$BOLD--tipo={rete|video|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--help$FINE | |||
visualizza queste informazioni | |||
" | |||
} | |||
# 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_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 | |||
while [ $# -gt 0 ] ; do | |||
case "$1" in | |||
"--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=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 ;; | |||
"--help") [ $BASH_ARGC -gt 1 ] && _parm_uso_err || _parm_uso && exit ;; | |||
*) _parm_err | |||
esac | |||
shift | |||
done | |||
# -------------------------------------------------------------------------- | # -------------------------------------------------------------------------- | ||
Riga 135: | Riga 210: | ||
* * | * * | ||
* 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 181: | Riga 256: | ||
# Funzione per separare il log in parti per l'invio a paste.debian.net | # Funzione per separare il log in parti per l'invio a paste.debian.net | ||
function _split_and_send { | function _split_and_send { | ||
local paste_url='http://paste.debian.net' | local paste_url='http://paste.debian.net' | ||
local chunk_prefix='pastebin' | local chunk_prefix='pastebin' | ||
Riga 263: | Riga 338: | ||
# 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 291: | Riga 369: | ||
# Funzione richiamata in caso di corretta/scorretta creazione del file compresso | # Funzione richiamata in caso di corretta/scorretta creazione del file compresso | ||
function _compress_ok { | function _compress_ok { echo "File compresso creato correttamente nella directory corrente."; } | ||
} | |||
function _compress_err { | function _compress_err { 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 .bz2, un file .zip o un file .tgz | ||
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 329: | Riga 406: | ||
function _scelta { | function _scelta { | ||
# Problemi selezionati in base al parametro passato allo script | |||
[ "$TIPO_RETE" -eq 1 ] && _wait && echo $'### Problemi di rete ###\n' > "$log" && _rete && return | |||
[ "$TIPO_VIDEO" -eq 1 ] && _wait && echo $'### Problemi video ###\n' > "$log" && _video && return | |||
[ "$TIPO_AUDIO" -eq 1 ] && _wait && echo $'### Problemi audio ###\n' > "$log" && _audio && return | |||
[ "$TIPO_APT" -eq 1 ] && _wait && echo $'### Problemi APT ###\n' > "$log" && _apt && return | |||
[ "$TIPO_MNT" -eq 1 ] && _wait && echo $'### Problemi mount-unmount ###\n' > "$log" && _mount && return | |||
[ "$TIPO_TOUCH" -eq 1 ] && _wait && echo $'### Problemi touchpad ###\n' > "$log" && _tpad && return | |||
[ "$TIPO_COMM" -eq 1 ] && _wait && echo $'### Solo informazioni generiche ###\n' > "$log" && _common && return | |||
# La funzione presenta un menù di scelta nel caso non sia stato passato nessun parametro | |||
local num | local num | ||
Riga 357: | Riga 445: | ||
7) echo $'### Solo informazioni generiche ###\n' > "$log" && _common ;;& | 7) echo $'### Solo informazioni generiche ###\n' > "$log" && _common ;;& | ||
[1-7]) break ;; # Termina il ciclo 'while' | [1-7]) break ;; # Termina il ciclo 'while' | ||
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 375: | Riga 463: | ||
# Funzione che stampa un pallino di colore verde in caso di comando con output | # Funzione che stampa un pallino di colore verde in caso di comando con output | ||
# Visualizza a video l'eventuale stringa passata come primo parametro ($1). | |||
function _ok { | 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 | ||
printf %b "${VERDE}•${FINE}\n" # stampa pallino | # se non ci sono parametri, viene stampato solo il pallino | ||
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 | |||
} | } | ||
Riga 387: | Riga 485: | ||
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 "${ROSSO}•${FINE}\n" # stampa pallino | # 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 | |||
} | } | ||
Riga 580: | Riga 687: | ||
# Esegue lo script ALSA | # Esegue lo script ALSA | ||
_prompt "Esecuzione script ALSA" | _prompt "Esecuzione script ALSA" | ||
su -c "$tempfile --stdout >> $log" "$utente" && _ok | su -c "$tempfile --stdout >> $log" "$utente" && _ok || _error | ||
else | else | ||
_error "Download script ALSA fallito" | _error "Download script ALSA fallito" | ||
Riga 647: | Riga 754: | ||
/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 | sed -r "s/((wpa-ssid)|(wpa-psk)).*/\1 \*script-removed\*/" "$1" &>> "$log" && _ok || _error ;; | ||
/var/log/syslog) | /var/log/syslog) | ||
# 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 | 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 | 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 | sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error | ||
fi ;; | fi ;; | ||
*) | *) | ||
# per tutti i file non specificati sopra... | # per tutti i file non specificati sopra... | ||
cat "$1" &>> "$log" && _ok | cat "$1" &>> "$log" && _ok || _error | ||
esac | esac | ||
else | else | ||
echo "File \"$1\" non trovato" >> "$log" && _error | echo "File \"$1\" non trovato" >> "$log" && _error | ||
fi | fi | ||
} | } | ||
Riga 694: | Riga 801: | ||
"/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 | su -c "DISPLAY=${DISPLAY:-:0} $1" "$utente" &>> "$log" _ok || _error ;; | ||
*) | *) | ||
su -c "$1" "$utente" &>> "$log" && _ok | su -c "$1" "$utente" &>> "$log" && _ok || _error | ||
esac | esac | ||
else # non viene utilizzato "su" | else # non viene utilizzato "su" | ||
Riga 702: | Riga 809: | ||
# 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 | (iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok || _error | ||
;; | ;; | ||
/sbin/iwlist) | /sbin/iwlist) | ||
(iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok | (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$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 sopra l'output del comando è inviato inalterato al log | ||
$1 &>> "$log" && _ok | $1 &>> "$log" && _ok || _error | ||
esac | esac | ||
fi | fi | ||
else | else | ||
echo "Comando \"${var2}\" non trovato" >> "$log" && _error | echo "Comando \"${var2}\" non trovato" >> "$log" && _error | ||
fi | fi | ||
} | } | ||
Riga 724: | Riga 831: | ||
# 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 | echo "La directory non esiste" >> "$log" && _error | ||
return | return | ||
fi | fi | ||
Riga 736: | Riga 843: | ||
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 | 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" | ||
Riga 745: | Riga 852: | ||
nome_e_riga "$file" | nome_e_riga "$file" | ||
_prompt "$file" | _prompt "$file" | ||
cat "$file" &>> "$log" && _ok | cat "$file" &>> "$log" && _ok || _error | ||
fi | fi | ||
done | done | ||
Riga 771: | Riga 878: | ||
if [ -z "$packages" ]; then | if [ -z "$packages" ]; then | ||
echo "Nessun pacchetto installato" >> "$log" && _error | echo "Nessun pacchetto installato" >> "$log" && _error | ||
else | else | ||
echo "$packages" >> "$log" && _ok | echo "$packages" >> "$log" && _ok | ||
fi | fi | ||
} | } | ||
Riga 803: | Riga 910: | ||
esac | esac | ||
echo "$2 è installato (versione "$vers")" >> "$log" && _ok | 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 | echo "$2 non è installato" >> "$log" && _error | ||
fi | fi | ||
} | } | ||
Riga 824: | Riga 931: | ||
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 | 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 | echo "File /sys/class/dmi/id/sys_vendor non trovato" >> "$log" && _error | ||
fi | fi | ||
} | } | ||
Riga 835: | Riga 942: | ||
_prompt "$var" | _prompt "$var" | ||
nome_e_riga "$var" | nome_e_riga "$var" | ||
dpkg -l | grep -i firmware >> "$log" && _ok | dpkg -l | grep -i firmware >> "$log" && _ok | ||
echo >> "$log" | echo >> "$log" | ||
Riga 905: | Riga 1 012: | ||
# in esecuzione | # in esecuzione | ||
echo -n "In esecuzione: " >> "$log" | echo -n "In esecuzione: " >> "$log" | ||
if _is_running "ksmserver"; then kde4-config --version >> "$log" && _ok | if _is_running "ksmserver"; then kde4-config --version >> "$log" && _ok || _error # KDE4 | ||
elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok | 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 | 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 | openbox --version | head -n 1 >> "$log" && _ok || _error # Openbox | ||
else | else | ||
echo "Sconosciuto" >> "$log" && _error | echo "Sconosciuto" >> "$log" && _error # NON TROVATO | ||
fi | fi | ||
} | } | ||
Riga 936: | Riga 1 043: | ||
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 | ||
fi | fi | ||
Riga 958: | Riga 1 065: | ||
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 | ||
else | else | ||
echo "$pkg" >> "$log" && _ok | echo "$pkg" >> "$log" && _ok | ||
fi | fi | ||
} | } | ||
Riga 983: | Riga 1 090: | ||
== 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.42 | |||
:''Introduzione parametri dello script'' | |||
:''Modificate _ok e _error per accettare un parametro'' | |||
:[[Utente:S3v|S3v]] 12:27, 20 ago 2014 (CEST) | |||
;1.0.41 | ;1.0.41 | ||
:''Corretta _extpack per righe in sources.list che iniziano con "ftp"'' | :''Corretta _extpack per righe in sources.list che iniziano con "ftp"'' |
contributi