6 999
contributi
S3v (discussione | contributi) m (→Changelog) |
S3v (discussione | contributi) (→Script) |
||
Riga 66: | Riga 66: | ||
* * | * * | ||
* 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 1.0. | * Versione 1.0.31 * | ||
* * | * * | ||
*********************************************************************************" | *********************************************************************************" | ||
Riga 82: | Riga 82: | ||
echo -n "Continuare [S/n]? " | echo -n "Continuare [S/n]? " | ||
read risp | read risp | ||
# Se non viene premuto "s" o "S" o [Invio], lo script termina | |||
! [ "$risp" = "s" -o "$risp" = "S" -o "$risp" = "" ] && _exit | |||
} | } | ||
# Funzione che esegue un check preliminare | # Funzione che esegue un check preliminare | ||
function _check { | function _check { | ||
if | if [ $EUID -ne 0 ]; then # Lo script viene lanciato da root? | ||
echo "Lo script deve essere lanciato da root" | echo "Lo script deve essere lanciato da root" && _exit | ||
fi | fi | ||
Riga 105: | Riga 101: | ||
read risp | read risp | ||
case $risp in | case $risp in | ||
""|[Ss]) | ""|[Ss]) rm -f $log $log.zip $log.bz2 $log.tgz ;; | ||
*) _exit | |||
*) | |||
esac | esac | ||
fi | fi | ||
Riga 120: | Riga 113: | ||
# 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' | ||
Riga 191: | Riga 183: | ||
# cancella le parti di log inviate | # cancella le parti di log inviate | ||
rm -f $chunk_prefix.{0..9} | |||
rm $chunk_prefix.{0..9} | |||
return $paste_exit_status | return $paste_exit_status | ||
Riga 309: | Riga 300: | ||
function _ok { | function _ok { | ||
echo -e "[$VERDE•$FINE] $1" | echo -e "[$VERDE•$FINE] $1" | ||
} | } | ||
Riga 318: | Riga 308: | ||
# Funzione che invia nel file di log due righe tra le quali viene visualizzato il nome del comando | # 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 ) | # (passato come primo parametro della funzione -> $1) | ||
function nome_e_riga { | function nome_e_riga { | ||
echo " | |||
****************************************** | ****************************************** | ||
$1 | $1 | ||
Riga 350: | Riga 340: | ||
if [ -f "$file" ]; then # se l'elemento è un file... | if [ -f "$file" ]; then # se l'elemento è un file... | ||
var="`sed -n "s/ssid=//p" $file`" # ... var conterrà l'eventuale ESSID... | var="`sed -n "s/ssid=//p" $file`" # ... var conterrà l'eventuale ESSID... | ||
if [ "$var | if [ "$var" ]; then # ... e se è diverso dalla stringa vuota... | ||
sed -i "s/$var/\*script-removed\*/g" $log # ... lo nasconde nel file di log | sed -i "s/$var/\*script-removed\*/g" $log # ... lo nasconde nel file di log | ||
fi | fi | ||
Riga 375: | Riga 365: | ||
fi | fi | ||
echo -e "Script terminato | echo -e "Script terminato\n" | ||
exit 0 | exit 0 | ||
} | } | ||
Riga 391: | Riga 381: | ||
_de_wm | _de_wm | ||
_file "/etc/X11/default-display-manager" | _file "/etc/X11/default-display-manager" | ||
_comando | _comando "/usr/bin/groups" "su" | ||
_file "/var/log/syslog" | _file "/var/log/syslog" | ||
_comando "/bin/dmesg -l err" | _comando "/bin/dmesg -l err" | ||
Riga 525: | Riga 515: | ||
_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 | _comando "/usr/bin/synclient -l" "su" | ||
} | } | ||
Riga 540: | Riga 530: | ||
nome_e_riga $1 | nome_e_riga $1 | ||
if [ -f $1 ]; then | if [ -f $1 ]; then | ||
case $1 in | |||
/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)).*/\1 \*script-removed\*/" $1 &>> $log && _ok $1 || _error $1 | ||
;; | ;; | ||
/var/log/syslog) | |||
# se il file contiene la stringa "rsyslogd.*start" ... | # se il file contiene la stringa "rsyslogd.*start" ... | ||
if [ `egrep -s1ci "rsyslogd.*start$" $1` -ne 0 ]; then | if [ `egrep -s1ci "rsyslogd.*start$" $1` -ne 0 ]; then | ||
Riga 558: | Riga 548: | ||
fi | 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 $1 || _error $1 | ||
esac | |||
else | else | ||
echo "File $1 non trovato" >> $log && _error $1 | echo "File $1 non trovato" >> $log && _error $1 | ||
Riga 571: | Riga 561: | ||
# che sarà assegnato a $1 . L'output dei comandi viene inviato interamente al file di log. Se | # che sarà assegnato a $1 . L'output dei comandi viene inviato interamente al file di log. Se | ||
# si ha necessità di modificare gli output, creare una entry nel ciclo "case" | # si ha necessità di modificare gli output, creare una entry nel ciclo "case" | ||
# Es. _comando "/usr/bin/apt-get update" | |||
# | # | ||
# Nel caso in cui il comando debba essere eseguito tramite 'su', richiamare la funzione con | # Nel caso in cui il comando debba essere eseguito tramite 'su', richiamare la funzione con | ||
# due parametri: | # due parametri: | ||
# $1 = | # $1 = il comando da eseguire attraverso 'su' | ||
# $2 = | # $2 = la stringa 'su' | ||
# Es. _comando "/usr/bin/groups" "su" | |||
function _comando { | function _comando { | ||
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 | |||
nome_e_riga "$var" | |||
if [ -f "$var2" ]; then # il comando esiste? | |||
if [ $# -eq 2 ]; then # Se vi sono 2 parametri, viene utilizzato "su" | |||
case $var2 in | |||
*) | |||
# Comando per tutti gli altri casi non specificati in precedenza | |||
su -c "$1" $utente &>> $log && _ok "$var" || _error "$var" | |||
esac | |||
else # non viene utilizzato "su" | |||
case $var2 in | |||
# per "iwconfig" e "iwlist scan" gli ESSID non vengono inviati al log | |||
/sbin/iwconfig) | |||
(iwconfig | sed -e '/ESSID:/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var" | |||
;; | |||
/sbin/iwlist) | |||
(iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> $log && _ok "$var" || _error "$var" | |||
;; | |||
*) | |||
# per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log | |||
$1 &>> $log && _ok "$var" || _error "$var" | |||
esac | |||
fi | |||
else | else | ||
echo "Comando $var2 non trovato" >> $log && _error "$var" | echo "Comando $var2 non trovato" >> $log && _error "$var" | ||
fi | fi | ||
} | } | ||
Riga 671: | Riga 651: | ||
local packages=`dpkg -l | grep -i "$1"` | local packages=`dpkg -l | grep -i "$1"` | ||
if [ "$packages | if [ -z "$packages" ]; then | ||
echo "Nessun pacchetto installato" >> $log && _error "$1" | echo "Nessun pacchetto installato" >> $log && _error "$1" | ||
else | else | ||
Riga 680: | Riga 660: | ||
# Funzione che verifica l'esistenza e l'esecuzione di alcuni demoni | # Funzione che verifica l'esistenza e l'esecuzione di alcuni demoni | ||
# Viene chiamata con due parametri: | # Viene chiamata con due parametri: | ||
# $1 - | # $1 - percorso dell'eseguibile | ||
# $2 - nome da visualizzare | # $2 - nome da visualizzare | ||
# Se si vuol visualizzare la versione del demone, inserire il comando adatto | # Se si vuol visualizzare la versione del demone, inserire il comando adatto | ||
Riga 772: | Riga 752: | ||
# Con "cut" viene prelevato il terzo campo (la release voluta) | # Con "cut" viene prelevato il terzo campo (la release voluta) | ||
local release=`sed -e 's/^ *//' -e '/^deb http:\/\/ftp\...\.debian\.org.*\(wheezy \|stable \|jessie \|testing \|sid \|unstable \)/!d' /etc/apt/sources.list | cut -d ' ' -f3` | local release=`sed -e 's/^ *//' -e '/^deb http:\/\/ftp\...\.debian\.org.*\(wheezy \|stable \|jessie \|testing \|sid \|unstable \)/!d' /etc/apt/sources.list | cut -d ' ' -f3` | ||
# Numero di release trovate | # Numero di release trovate | ||
local | local num=`echo "$release" | wc -l` | ||
local pkg="" var="Pacchetti esterni" linea linea2 var3 | |||
local | # Variabile che contiene le fonti di pacchetti disponibili | ||
local origini=`apt-cache policy | sed -e '/o=/!d' -e 's/^.*o=//' -e 's/,.*$//' | sort | uniq` | |||
# File temporanei | |||
local filetemporaneo1=`mktemp` | |||
local filetemporaneo2=`mktemp` | |||
# Se il numero di release è diverso da 1, 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 "$var" | echo "Sono presenti $num release in sources.list" >> $log && _error "$var" | ||
return | return | ||
else | else | ||
# 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 | ||
wheezy|stable) | wheezy|stable) | ||
jessie|testing) | pkg=`aptitude -F '%p %v %t' search '~i !~Astable' --disable-columns | column -t` | ||
sid|unstable) | if [ "$pkg" ]; then | ||
echo "$pkg" > $filetemporaneo1 | |||
while read linea; do | |||
# nome dei pacchetti installati, non appartenenti a stable e provenienti da origini | |||
# elencate nella variabile "origini". Vanno in filetemporaneo2 | |||
var3="aptitude -F '%p' search '~i ?not(?archive(stable)) ?origin($linea)' > $filetemporaneo2" | |||
eval $var3 | |||
while read linea2; do | |||
sed -i "/$linea2/ s/$/ $linea/" $filetemporaneo1 | |||
done < $filetemporaneo2 | |||
done <<< "$origini" | |||
fi ;; | |||
jessie|testing) | |||
pkg=`aptitude -F '%p %v %t' search '~i !~Atesting' --disable-columns | column -t` | |||
if [ "$pkg" ]; then | |||
echo "$pkg" > $filetemporaneo1 | |||
while read linea; do | |||
# nome dei pacchetti installati, non appartenenti a testing e provenienti da origini | |||
# elencate nellaa variabile "origini". Vanno in filetemporaneo2 | |||
var3="aptitude -F '%p' search '~i ?not(?archive(testing)) ?origin($linea)' > $filetemporaneo2" | |||
eval $var3 | |||
# aggiunge l'origine del pacchetto in filetemporaneo1 | |||
while read linea2; do | |||
sed -i "/$linea2/ s/$/ $linea/" $filetemporaneo1 | |||
done < $filetemporaneo2 | |||
done <<< "$origini" | |||
fi ;; | |||
sid|unstable) | |||
pkg=`aptitude -F '%p %v %t' search '~i !~Aunstable' --disable-columns | column -t` | |||
if [ "$pkg" ]; then | |||
echo "$pkg" > $filetemporaneo1 | |||
while read linea; do | |||
# nome dei pacchetti provenienti da un'origine. Vanno in filetemporaneo2 | |||
var3="aptitude -F '%p' search '~i ?not(?archive(unstable)) ?origin($linea)' > $filetemporaneo2" | |||
eval $var3 | |||
while read linea2; do | |||
sed -i "/$linea2/ s/$/ $linea/" $filetemporaneo1 | |||
done < $filetemporaneo2 | |||
done <<< "$origini" | |||
fi ;; | |||
esac | esac | ||
fi | fi | ||
# 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 "$var" | echo "Nessun pacchetto esterno installato" >> $log && _error "$var" | ||
else | else | ||
cat $filetemporaneo1 >> $log && _ok "$var" | |||
fi | fi | ||
# Rimuove i file temporanei | |||
rm -f $filetemporaneo1 $filetemporaneo2 | |||
} | } | ||
contributi