Banana Docet!

Appunti tecnici di un programmatore impazzito …

Non salvare i comandi su .bash_history

Premesso che tutto questo è solo a scopo informativo/educativo, oggi vi do un semplice trick per evitare di loggare sulla history dei comandi della vostra bash.
Piuttosto che utilizzare metodi barbari tipo rimuovere il file .bash_history dalla home dell’utente, basterà digitare da console:

export HISTFILE=/dev/null

Una volta eseguito il comando, tutti i comandi editati in quella sessione non verranno salvati.

Semplice ed efficace …

VN:F [1.9.16_1159]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.16_1159]
Rating: +1 (from 1 vote)
PDF Creator    Invia l'articolo in formato PDF   

Impostare java tramite update-alternatives

Stavolta ci troviamo di fronte al dilemma di aver installato la Java Virtual Machine su una macchina (CentOS 6 nel nostro caso) dove non ce ne era installata nessuna e ci serve che sia definito globalmente nel path l’eseguibile java.

Per ottenere questo risultato dovremo utilizzare il comando update-alternatives, tramite il quale, per prima cosa gli diciamo di configurare un link che si appoggerà al nostro eseguibile e di conseguenza ce lo renderà disponibile.

La sintassi è davvero molto semplice.

update-alternatives –install "/usr/bin/java" "java" "/usr/java/latest/bin/java" 1
update-alternatives –install "/usr/bin/javac" "javac" "/usr/java/latest/bin/javac" 1
update-alternatives –install "/usr/bin/javaws" "javaws" "/usr/java/latest/bin/javaws" 1
VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF Creator    Invia l'articolo in formato PDF   

Monitorare le interfacce di rete tramite bash script e RRD

Oggi vedremo una semplice tecnica per monitorare il traffico sulle interfacce di rete utilizzando degli script in bash e interfacciarli con RRD (Round Robin Database) per ottenere dei grafici sull’andamento del traffico.

Non entreremo molto nel dettaglio, ma questi scripts possono essere caricati su qualunque server Linux che abbia installato a bordo rrdtool.

Come prima cosa creiamo uno script che ci crei la struttura della nostra applicazione.

vim /usr/local/bin/setupRRDInterface.sh

Il codice al suo interno sarà:

#!/bin/bash
DB_PATH="/usr/local/rrd" # Percorso base del nostro applicativo
# Ricaviamoci le interfacce di rete presenti sul sistema
ARR=`ifconfig | awk -F " " ‘{ print $1 }’ | grep -v "^$"`

INTERFACES=(`echo -e $ARR`)
FILEIMG=$DB_PATH/images
FILEIMG_HOUR=$FILEIMG/hour
FILEIMG_DAY=$FILEIMG/day
FILEIMG_WEEK=$FILEIMG/week
FILEIMG_MONTH=$FILEIMG/month
FILEIMG_YEAR=$FILEIMG/year
CARTELLE=($DB_PATH $FILEIMG_HOUR $FILEIMG_DAY $FILEIMG_WEEK $FILEIMG_MONTH $FILEIMG_YEAR)

echo "Creazione cartelle …"
for x in "${CARTELLE[@]}"
do
if [ ! -d $x ]
then
mkdir -p $x
fi
done

# Adesso per ognuna delle interfacce creeremo un file rrd dove caricheremo le informazioni.
echo "Creazione Files rrd … "
if [ ${#INTERFACES[@]} -gt 0 ]
then

for interface in "${INTERFACES[@]}"
do
echo $interface

if [ ! -e $DB_PATH/$interface.rrd ]
then
echo "Creo file RRD per $interface"
rrdtool create $DB_PATH/$interface.rrd \
DS:in:DERIVE:600:0:12500000 \
DS:out:DERIVE:600:0:12500000 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:6:672 \
RRA:AVERAGE:0.5:24:732 \
RRA:AVERAGE:0.5:144:1460
else
echo "Il file RRD per $interface ESISTE!"
fi
done
fi

Adesso ci creiamo uno script che legga il traffico dalle interfacce e lo riporti nei rispettivi databases.

vim /usr/local/bin/collectInterfaceData.sh


#!/bin/sh
MAILTO=""
DB_PATH="/usr/local/rrd"
ARR=`ifconfig | awk -F "   " ‘{ print $1 }’ | grep -v "^$"`

INTERFACES=(`echo -e $ARR`)

if [ ${#INTERFACES[@]} -gt 0 ]
then
        for interface in "${INTERFACES[@]}"
        do
            IN=`/sbin/ifconfig $interface |grep bytes|cut -d":" -f2|cut -d" " -f1`
            OUT=`/sbin/ifconfig $interface |grep bytes|cut -d":" -f3|cut -d" " -f1`
            rrdtool update $DB_PATH/$interface.rrd -t in:out N:$IN:$OUT
        done
       
fi

Questo non fa altro che aggiungere un record al nostro database rrd che ci serviranno per la successiva creazione del grafico.
A questo punto creare il grafico diventa abbastanza semplice.

vim /usr/local/bin/creaGraficoRete.sh
#!/bin/sh
MAILTO=""
DB_PATH=/usr/local/rrd
FILEIMG=$DB_PATH/images
FILEIMG_DAY=$FILEIMG/day
FILEIMG_WEEK=$FILEIMG/week
FILEIMG_MONTH=$FILEIMG/month
FILEIMG_YEAR=$FILEIMG/year

ARR=`ifconfig | awk -F "   " ‘{ print $1 }’ | grep -v "^$"`
echo -e $ARR

INTERFACES=(`echo -e $ARR`)
# Il grafico attuale ha il segnaposto ogni 3 ore e gli intervalli lineari di 1 ora
# E si basa su un periodo di 12 ore.
for interface in "${INTERFACES[@]}"
do
# Intervallo su 24 ore
rrdtool graph $FILEIMG_DAY/$interface.png -a PNG -h 200 -w 800 -v ‘bytes/sec’ \
        -t "Traffico $interface Intervallo 24h" -x ‘HOUR:1:HOUR:3:HOUR:3:0:%b %d %H:00′ \
        -s -24h –slope-mode \
        DEF:in=$DB_PATH/$interface.rrd:in:AVERAGE \
        DEF:out=$DB_PATH/$interface.rrd:out:AVERAGE \
        CDEF:out_neg=out,-1,* \
        VDEF:inmax=in,MAXIMUM \
        VDEF:inavg=in,AVERAGE \
        VDEF:inlast=in,LAST \
        VDEF:outmax=out,MAXIMUM \
        VDEF:outavg=out,AVERAGE \
        VDEF:outlast=out,LAST \
        AREA:in#32CD32:"Incoming" \
        LINE1:in#336600 \
        GPRINT:inmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:inavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:inlast:"Current\: %5.1lf %Sbytes/sec\\n" \
        AREA:out_neg#4169E1:"Outgoing" \
        LINE1:out_neg#0033CC \
        GPRINT:outmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:outavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:outlast:"Current\: %5.1lf %Sbytes/sec" > /dev/null
       
# Intervallo su 7 giorni
rrdtool graph $FILEIMG_WEEK/$interface.png -a PNG -h 200 -w 800 -v ‘bytes/sec’ \
        -t "Traffico $interface Intervallo 1 settimana" -x ‘HOUR:2:DAY:1:DAY:1:0:%b %d’ \
        -s -1w –slope-mode \
        DEF:in=$DB_PATH/$interface.rrd:in:AVERAGE \
        DEF:out=$DB_PATH/$interface.rrd:out:AVERAGE \
        CDEF:out_neg=out,-1,* \
        VDEF:inmax=in,MAXIMUM \
        VDEF:inavg=in,AVERAGE \
        VDEF:inlast=in,LAST \
        VDEF:outmax=out,MAXIMUM \
        VDEF:outavg=out,AVERAGE \
        VDEF:outlast=out,LAST \
        AREA:in#32CD32:"Incoming" \
        LINE1:in#336600 \
        GPRINT:inmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:inavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:inlast:"Current\: %5.1lf %Sbytes/sec\\n" \
        AREA:out_neg#4169E1:"Outgoing" \
        LINE1:out_neg#0033CC \
        GPRINT:outmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:outavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:outlast:"Current\: %5.1lf %Sbytes/sec" > /dev/null
       

# Intervallo su 30 giorni
rrdtool graph $FILEIMG_MONTH/$interface.png -a PNG -h 200 -w 800 -v ‘bytes/sec’ \
        -t "Traffico $interface Intervallo 1 mese" -x ‘DAY:1:DAY:7:DAY:7:0:%b %d’ \
        -s -1m –slope-mode \
        DEF:in=$DB_PATH/$interface.rrd:in:AVERAGE \
        DEF:out=$DB_PATH/$interface.rrd:out:AVERAGE \
        CDEF:out_neg=out,-1,* \
        VDEF:inmax=in,MAXIMUM \
        VDEF:inavg=in,AVERAGE \
        VDEF:inlast=in,LAST \
        VDEF:outmax=out,MAXIMUM \
        VDEF:outavg=out,AVERAGE \
        VDEF:outlast=out,LAST \
        AREA:in#32CD32:"Incoming" \
        LINE1:in#336600 \
        GPRINT:inmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:inavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:inlast:"Current\: %5.1lf %Sbytes/sec\\n" \
        AREA:out_neg#4169E1:"Outgoing" \
        LINE1:out_neg#0033CC \
        GPRINT:outmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:outavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:outlast:"Current\: %5.1lf %Sbytes/sec" > /dev/null

# Intervallo su 1 anno
rrdtool graph $FILEIMG_YEAR/$interface.png -a PNG -h 200 -w 800 -v ‘bytes/sec’ \
        -t "Traffico $interface Intervallo 1 anno" -x ‘DAY:1:MONTH:1:MONTH:1:0:%m’ \
        -s -1y –slope-mode \
        DEF:in=$DB_PATH/$interface.rrd:in:AVERAGE \
        DEF:out=$DB_PATH/$interface.rrd:out:AVERAGE \
        CDEF:out_neg=out,-1,* \
        VDEF:inmax=in,MAXIMUM \
        VDEF:inavg=in,AVERAGE \
        VDEF:inlast=in,LAST \
        VDEF:outmax=out,MAXIMUM \
        VDEF:outavg=out,AVERAGE \
        VDEF:outlast=out,LAST \
        AREA:in#32CD32:"Incoming" \
        LINE1:in#336600 \
        GPRINT:inmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:inavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:inlast:"Current\: %5.1lf %Sbytes/sec\\n" \
        AREA:out_neg#4169E1:"Outgoing" \
        LINE1:out_neg#0033CC \
        GPRINT:outmax:"Max\: %5.1lf %Sbytes/sec" \
        GPRINT:outavg:"Avg\: %5.1lf %Sbytes/sec" \
        GPRINT:outlast:"Current\: %5.1lf %Sbytes/sec" > /dev/null

done

Schedualiamo in crontab ogni 5 minuti il file /usr/local/bin/collectInterfaceData.sh e come nel mio caso anche il file /usr/local/bin/creaGraficoRete.sh

crontab -e
*/5 * * * * /usr/local/bin/collectInterfaceData.sh
*/5 * * * * /usr/local/bin/creaGraficoRete.sh

Ed il gioco è fatto!!

A questo punto possiamo crearci una pagina web con collegamento alle relative immagini, od in alternativa possiamo inoltrarci via email le immagini generate.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF    Invia l'articolo in formato PDF   

Personalizzare dinamicamente il MOTD di linux

Ero stanco dei soliti motd (message of the day) di Linux che trovavo sui vari server, così ho deciso di implementare un piccolissimo script che mi permettesse di vedere qualcosa di diverso ad ogni login.

Vediamo come fare.

Questa procedura è stata provata su una debian, ma può essere riprodotta su qualunque sistema unix. Ci occorrerà installare i package cowsay e fortune (se preferiamo quelli con localizzazione italiana e se siamo “audaci” anche quelli un po più spinti)

Installiamo i pacchetti digitando da console:

apt-get install cowsay fortunes-it fortunes-it-off

A questo punto creiamoci un semplicissimo script in bash che chiameremo mymotd e per l’esempio in questione lo posizioniamo sotto /usr/local/bin/.

#!/bin/bash
ALTER=(`echo -n \`/usr/games/cowsay -l\` | awk -F": " ‘{ print $2 }’`)
NUMBER=$[ ($RANDOM % ${#ALTER[@]}) + 1 ]

/usr/games/cowsay -f ${ALTER[$NUMBER]} `/usr/games/fortune`

Diamo i privilegi di esecuzione allo script tramite:

chmod +x /usr/local/bin/mymotd

Per concludere, modifichiamo il file /etc/profile aggiungendo in fondo allo stesso il percorso dello script ed il gioco è fatto. Potrete ottenere risultati simili a quello riportato in figura:

 

 

 

 

 

 

 

Buon divertimento …

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
Creare PDF    Invia l'articolo in formato PDF   

Aggiornare la cache DNS sotto Linux

Può capitare di aggiornare la propria zona DNS e malgrado tutto al ping risponde ancora l’indirizzo vecchio.
Se controllando tramite il comando nslookup nomeDelServer vediamo che viene risolto con il nuovo indirizzo, allora abbiamo un problema di cache DNS.
Per risolverlo sarà sufficiente fare il reload del demone nscd tramite il comando:

/etc/init.d/nscd reload

Pingando nuovamente il server, vedremo che verrà risolto correttamente.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
Stampante PDF    Invia l'articolo in formato PDF   

Script per allineare scadenza password tra 389-ds (LDAP) e Samba

Ho creato questo script per risolvere un problema che si è presentato durante la fase di cambio password da computer in un dominio NT4 gestito tramite samba-3 + LDAP (questo in realtà gestito tramite un 389-ds) su una CentOS 5.6.


Sono state applicate le password policies su ldap e su samba.
Ho notato che cambiando la password direttamente dal client Windows, alcune applicazioni che si autenticano tramite LDAP, restituivano degli errori.

Indagando, su cosa cambiasse nella struttura LDAP dell’utente, ho trovato che quando si cambia la password dal client, un campo di LDAP, nello specifico passwordexpirationtime, veniva resettato al valore di default corrispondente al 1 Gennaio 1970.

Dal momento che non è prevedibile sapere quando qualcuno decide di cambiare la password, ho creato questo semplice ma efficace script di shell che viene lanciato via crontab.

#!/bin/bash
source ~/.bash_profile
FILE_REPORT=/var/log/aggiusta_scadenza_pwd.log
ERROR_REPORT=/root/tmp/errori_scadenze_password.log

TEST=0 # 0 -> ESEGUE …. 1 -> TEST
#  
GIORNI_DALLA_SCADENZA=15
# Ripuliamo i nostri files di reportistica
echo "" > $FILE_REPORT
echo "" > $ERROR_REPORT
function convertiMeseNum(){
                # Convertiamo il mese da letterale a numerico
                case $1 in
                        "gen")
                                MESE="01"
                        ;;
                        "feb")
                                MESE="02"
                        ;;
                        "mar")
                                MESE="03"
                        ;;
                        "apr")
                                MESE="04"
                        ;;
                        "mag")
                                MESE="05"
                        ;;
                        "giu")
                                MESE="06"
                        ;;
                        "lug")
                                MESE="07"
                        ;;
                        "ago")
                                MESE="08"
                        ;;
                        "set")
                                MESE="09"
                        ;;
                        "ott")
                                MESE="10"
                        ;;
                        "nov")
                                MESE="11"
                        ;;
                        "dic")
                                MESE="12"
                        ;;
                esac
}

function allineaScadenzaPwd(){
        TMP_LDIF_DIR=/root/tmp
        if [ -d $TMP_FILE_DIR ]
        then
                mkdir -p $TMP_LDIF_DIR
        fi
       
        # Estraiamo la data da samba e rendiamola utilizzabile dal comanda date
        DATA_SCADENZA=`pdbedit -v $1 | grep "Password must change:" | awk -F ": " ‘{ print $2 }’`
        case "$DATA_SCADENZA" in
                # Questo è il caso in cui l’utente non ha una scadenza della password
                "never")
                        echo "L’utente $1 NON ha scadenza password" >> $ERROR_REPORT
                ;;
                # Nel caso in cui non è settata la data di scadenza
                "0")
                        echo "L’utente $1 NON HA IMPOSTATO una data di scadenza!! (Verificare) " >> $ERROR_REPORT
                ;;

                # Case di default
                *)

                        MESE_SCADENZA="`echo $DATA_SCADENZA | awk ‘{ print $3 }’`"
                        GIORNO_SCADENZA="`echo $DATA_SCADENZA | awk ‘{ print $2 }’`"
                        ANNO_SCADENZA="`echo $DATA_SCADENZA | awk ‘{ print $4 }’`"
                        ORARIO_SCADENZA="`echo $DATA_SCADENZA | awk ‘{ print $5 }’`"
               
                        # Estraiamo il mese numerico dal mese di scadenza
                        convertiMeseNum $MESE_SCADENZA
                       
                        # Trasformiamo la data ottenuta in formato unix timestamp      
                        SCADENZA_PASSWORD=`date -d "$ANNO_SCADENZA-$MESE-$GIORNO_SCADENZA $ORARIO_SCADENZA" "+%s"`
                        # Su LDAP il campo di segnalazione scadenza è impostato a 15 giorni prima della scadenza reale dell’account
                        SCADENZA_CALCOLATA=`date -d @$(( $SCADENZA_PASSWORD – $(( $GIORNI_DALLA_SCADENZA * 86400 )) ))`
                        MESE_SCADENZA_1="`echo $SCADENZA_CALCOLATA | awk ‘{ print $2 }’`"
       
                        convertiMeseNum $MESE_SCADENZA_1
       
                        GIORNO_SCADENZA_1="`echo $SCADENZA_CALCOLATA | awk ‘{ print $3 }’`"
                        if [ $((GIORNO_SCADENZA_1)) -lt 10 ]
                        then
                                # Trovato numero minore di 10 per utente $1 … converto
                                GIORNO_SCADENZA_1="0"$GIORNO_SCADENZA_1
                                # echo "Giorno scadenza 1 -> $GIORNO_SCADENZA_1" >> $FILE_REPORT
                        fi
                        ORARIO_SCADENZA_1="`echo $SCADENZA_CALCOLATA | awk ‘{ print $4 }’ | sed ‘s/://g’`"
                        ANNO_SCADENZA_1="`echo $SCADENZA_CALCOLATA | awk ‘{ print $6 }’`"
                        SCADENZA_REALE=$ANNO_SCADENZA_1$MESE$GIORNO_SCADENZA_1$ORARIO_SCADENZA_1
                        SCADENZA_PASSWORD_Z=$SCADENZA_REALE"Z"
                        # echo $1 $DATA_SCADENZA $SCADENZA_CALCOLATA >> $FILE_REPORT
       
                        if [ $SCADENZA_PASSWORD ]
                        then
                                echo "Modifico data di scadenza per $1 -> $DATA_SCADENZA in data $SCADENZA_PASSWORD_Z" >> $FILE_REPORT
                                TMP_LDAP_FILE=$TMP_LDIF_DIR/$1.modify.ldif
                                echo "dn: uid=$1,ou=People,dc=dominio" > $TMP_LDAP_FILE
                                echo "changetype: modify" >> $TMP_LDAP_FILE
                                echo "replace: passwordexpirationtime" >> $TMP_LDAP_FILE
                                echo "passwordexpirationtime: $SCADENZA_PASSWORD_Z" >> $TMP_LDAP_FILE
                                echo "-" >> $TMP_LDAP_FILE
                                echo "changetype: modify" >> $TMP_LDAP_FILE
                                echo "replace: passwordexpwarned" >> $TMP_LDAP_FILE
                                echo "passwordexpwarned: 0" >> $TMP_LDAP_FILE

                                # Se questa non è l’esecuzione di un test, applichiamo le modifiche a LDAP
                                if [ $TEST -eq 0 ]
                                then
                                        /usr/bin/ldapmodify -x -Z -D "cn=Directory Manager" -w lamiapassword -f $TMP_LDAP_FILE
                                fi
                        fi
                ;;
        esac
}

#
# Eseguiamo una scansione sull’albero LDAP ed estraiamo tutti gli utenti di dominio attivi
for uid in `ldapsearch -x -Z -b ou=People,dc=dominio "(&(uid=*)(!(sambaAcctFlags=[DU*]))(passwordexpirationtime=19700101000000Z))" | grep uid: | awk -F ": " ‘{ print $2 }’`
do
        allineaScadenzaPwd $uid
done

L’esecuzione di questo script anche con qualche migliaio di utenti censiti, impiega pochi secondi.

Buon Divertimento.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF Download    Invia l'articolo in formato PDF   

Configurare un syslog server con linux.

Oggi vediamo come si può configurare in maniera molto semplice e veloce un syslog server che utilizzeremo per registrare tutti i log delle nostre macchine in un unico punto.
Per il test abbiamo utilizzato una Debian Squeeze, ma la procedura è ripercorribile con qualunque altra distribuzione senza particolari differenze.

Per la gestione del syslog, utilizzeremo rsyslog che di default viene installato su Debian e rispetto a syslogd presenta una serie di vantaggi, fra i quali la possibilità di lavorare sia in tcp che in udp, è compatibile con syslog, è più facile da configurare rispetto ad un syslog-ng, e possiamo agganciarlo ad un database mysql per una gestione maggiormente semplificata.

Una volta installato rsyslog ed il suo relativo supporto mysql (rsyslog-mysql sotto debian) procediamo alla configurazione del suo database. In questo il debian ci agevola chiedendoci tramite dbconfig-common di configurare l’utente e la password per l’utente rsyslog. Risponderemo si alla domanda se vogliamo configurare il database tramite dbconfig-common e forniremo:

  • La password di root dell’utente mysql
  • La password per l’utente rsyslog

Terminata la procedura avremo creato un database chiamato Syslog ed un utente rsyslog che sarà di fatto l’amministratore del database creato.

Procediamo adesso alla configurazione di rsyslog editando il file /etc/rsyslog.conf

vim /etc/rsyslog.conf

Decommentiamo le righe relative a

$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514

Riavviamo il demone:

service rsyslog restart

In questo modo abiliteremo sia la funzionalità del syslog tramite tcp che tramite udp.

Adesso per abilitare le funzionalità sui client esterni, sarà sufficiente modificare le impostazioni di syslog e indicare nel caso di syslog o rsyslog la sintassi è molto semplice e del tipo:

facility.level destinazione

quindi, nello specifico, invieremo ad esempio tutti i log relativi agli accessi di una nostra macchina (x.x.x.x) al server (x.y.z.x)

auth,authpriv.* @x.y.z.x

Riavviamo il servizio di syslog sul client, e a questo punto vedremo arrivare sul server syslog i dati relativi agli accessi sul server da monitorare.
In un prossimo post vedremo come configurare un client che utilizza syslog-ng.


LogAnalyzer

Il vantaggio di poter utilizzare un database per tracciare i dati di syslog è che possiamo anche utilizzare una comoda interfaccia web per gestirlo, e loganalyzer fa proprio al caso nostro.

Possiamo scaricare questa applicazione web, scritta in php, collegandoci a http://loganalyzer.adiscon.com/downloads. Una volta scaricata, decomprimiamola in una cartella del nostro disco rigido e spostiamo il contenuto della cartella src in /var/www/loganalyzer

mv /usr/local/src/loganalyzer-x.y/src /var/www/loganalyzer

Adesso, prima di procedere con l’installazione di loganalyzer, creiamo un database per la gestione della configurazione di loganalyzer.

mysql -u root -p

Al prompt di mysql digitare:

CREATE DATABASE loganalyzer;
CREATE USER loganalyzer IDENTIFIED BY ‘password’;
GRANT ALL PRIVILEGES ON loganalyzer.* TO loganalyzer@localhost IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;

Passiamo adesso all’installazione del nostro loganalyzer.
Spostiamoci dove abbiamo precendentemente decompresso i sorgenti di loganalyzer e dalla cartella contrib copiamo i file configure.sh e secure.sh.

cp /usr/local/src/loganalyzer-x.y/contrib/configure.sh /var/www/loganalyzer/
cp /usr/local/src/loganalyzer-x.y/contrib/secure.sh /var/www/loganalyzer/

e diamo i permessi di esecuzione ai suddetti files.

chmod +x /var/www/loganalyzer/*.sh
cd /var/www/loganalyzer

e lanciamo

./configure.sh

Colleghiamoci all’indirizzo: http://ipdelserver/loganalyzer/ e procediamo nella wizard di installazione associando quando richiesto le info relativo al database loganalyzer precedentemente creati, ed una volta giunti allo step 7 (configurazione dei log) bisogna dare le seguenti info:

  • Name of the source: Un nome a nostra scelta
  • Source type: Mysql Native
  • Select View: Syslog Fields
  • Table type: MonitorWare
  • Database host: localhost
  • Database name: Syslog
  • Database tablename: SystemEvents
  • Database user: rsyslog
  • Password: passwordUtenteRsyslog
  • Rnable Row Counting: No

Terminata l’installazione possiamo vedere adesso i nostri log collegandoci all’indirizzo http://server/loganalyzer.

Buon divertimento.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
Free PDF    Invia l'articolo in formato PDF   

Failed to get lock on destination repos. Ecco come risolvere.

Ecco lo scenario:
Abbiamo due server subversion che si sincronizzando utilizzando svnsync, come abbiamo visto in un post precedente.
Adesso vediamo che quando cerca di sincronizzarsi con il server remoto, compare questo messaggio:

Failed to get lock on destination repos, currently held by ‘myserver:d27d5a7c-7d79-11e0-b5bd-a5a363c8406c’

Molto probabilmente il problema è stato causato a seguito di una caduta di connessione con la macchina da sincronizzare.


Non disperiamo! Ecco la procedura per risolvere il problema.

svn propdel svn:sync-lock –revprop -r 0 indirizzoTargetRepository

Ovviamente il paramentro indirizzoTargetRepository può essere di tipo svn:// oppure file:/// o anche https:// etc etc.

Non ci resta che attendere lanciare il comando per richiamare il sync, oppure aspettare il prossimo commit.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF Creator    Invia l'articolo in formato PDF   

Cambiare editor di default in debian/ubuntu? Semplice!

Abbiamo visto qui come cambiare l’editor di default in gentoo, ed oggi vediamo un semplice trick per modificare l’editor di default in debian e derivate (Ubuntu & Co.)

Basta aprire una console e in Ubuntu digitare:

sudo update-alternatives –config editor

In debian come utente root

update-alternatives –config editor

Basterà digitare il numero corrispondente all’editor che si vuole utilizzare ed il gioco è fatto.


VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF Creator    Invia l'articolo in formato PDF   

Script per eseguire il backup dei nostri repository subversion (svn)

Oggi voglio postarvi un semplice script che possiamo utilizzare per fare il backup dei repository progetti che sono sotto controllo di versioning, e nello specifico che utilizzano svn.

Questo script esegue un controllo su tutta la cartella dei repository di subversion ed esegue un backup di tutti quelli che sono repository validi, che hanno cioè un file format all’interno della cartella del repository.

Dopo di che fa il backup e li sposta in una directory di backup dove il dump viene poi compresso.
Il perchè di questa modalità è semplice. Per subversion la copia fisica del file è deleteria, in quanto poi ci troveremmo costretti a fare un successivo check della struttura stessa del database del repository.


#!/bin/bash
# svn-backup.sh

# Un file di log per il controllo delle operazioni
LOGFILE="/var/log//svn_backup.`date +%Y-%m-%d`.log"

# Programma per mail
# e relativi parametri di configurazione
MAIL_PROGRAM="mailx"
MAIL_DEST="mioindirizzo@mailserver.tld"

# La directory dei nostri repository
DIR_SVN="/var/svn"

# Una directory temporanea dove appoggiare una copia del repository
DIR_TMP="/home/backup/backup_svn/tmp"

# La directory dove salvare il dump compresso del repository

DIR_BACKUP="/home/backup/backup_svn/svn"

# Directory dove salveremo il tar con i nostri repository
DIR_DUMP_TAR="/home/backup/backup_svn"

# Nome del nostro file di backup
BACKUP_FILE="`date +%Y-%m-%d`_backup_repos_svn.tar.gz"

# Se non esiste il file di log, crealo
if [ ! -e "$LOGFILE" ]; then
  touch $LOGFILE
fi

for i in `find $DIR_SVN -name ‘db’`
do
  # Con questa espressione ci facciamo restituire il percorso relativo del repository
  # sul quale andremo a fare il dump dei dati
  # NOTA.
  # Per estrarre la substring la sintassi è
  # ${stringa:punto_partenza:lunghezza}
  # Per estrarre la lunghezza della stringa    
  # ${#stringa}
  REPO=`dirname "${i:${#DIR_SVN}+1:${#i}-${#DIR_SVN}}"`

  echo "`date +%Y-%m-%d` `date +%r` : $REPO" >> $LOGFILE
  echo "`date +%Y-%m-%d` `date +%r` : Creo la cartella $REPO nella dir temporanea " >> $LOGFILE

  mkdir -p $DIR_TMP/svn_backup/$REPO
  echo "`date +%Y-%m-%d` `date +%r` : Creo la cartella del backup per il repository $REPO" >> $LOGFILE
  mkdir -p $DIR_BACKUP/$REPO

  echo "`date +%Y-%m-%d` `date +%r` : Eseguo hotcopy del repository $REPO" >> $LOGFILE

  /usr/bin/svnadmin hotcopy $DIR_SVN/$REPO $DIR_TMP/svn_backup/$REPO

  echo "`date +%Y-%m-%d` `date +%r` : Eseguo il dump del repository $REPO" >> $LOGFILE
  /usr/bin/svnadmin dump "$DIR_TMP/svn_backup/$REPO" > "$DIR_BACKUP/$REPO/dump"

  echo "`date +%Y-%m-%d` `date +%r` : Rimuovo cartella temporanea" >> $LOGFILE
  rm -Rf $DIR_TMP/svn_backup/$REPO
  echo "" >> $LOGFILE
done;

# Compressione dei dump
for i in `find $DIR_BACKUP -name ‘dump’`
do
        bzip2 $i
done

tar -zcf $DIR_DUMP_TAR/$BACKUP_FILE $DIR_BACKUP

# Ripuliamo i dump …
rm -Rf $DIR_BACKUP/*

echo "`date +%Y-%m-%d-%T` … Fine" >> $LOGFILE

case $MAIL_PROG in
        mailx)
                # Su gentoo va decommentata la seguente riga
                uuenview $LOGFILE | mailx -s "Log Backup repository svn" $MAIL_DEST
        #       Questa invece va su debian
        #       uuencode $LOGFILE $LOGFILE | mailx -s "Log Backup repository svn" $MAIL_DEST
        ;;

        mutt)
                echo | mutt -a $LOGFILE -s "Log Backup repository svn" $MAIL_DEST
        ;;
esac

Carichiamo il nostro script in crontab ed il nostro backup è pronto!

Questo è tutto per ora.

VN:F [1.9.16_1159]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.16_1159]
Rating: 0 (from 0 votes)
PDF    Invia l'articolo in formato PDF