amministrazione di sistema

Svuotare una casella di posta con FetchMail

Mi è capitato di dover svuotare una casella di posta periodicamente.

Una soluzione veloce è quella di mettere in cron la seguente istruzione:

fetchmail -a -K -p POP3 --bsmtp /dev/null \
          -u nomeUtente serverSmtp

bisogna anche configurare la password in un file .netrc da mettere nella vostra home.
Il file deve avere la seguente struttura:

machine serverSmtp
login nomeUtente
password laPassword

A questo punto ho configurato il tutto nel cron tramite il comando

crontab -e

e poi aggiungendo il seguente comando per svuotare la casella di posta ogni ora:

@hourly fetchmail -a -K -p POP3 --bsmtp /dev/null \
        -u nomeUtente serverSmtp

Per maggiori informazioni su fetchmail visitare il sito ufficiale.

 

Mirroring di un repository SVN (Subversion)

Spesso si ha necessità di avere una o più copie di un repository Subversion su una macchina remota.

In tali occasioni ci viene in aiuto l'utilissimo tool svnsync. Tale software è installato di default insieme al server SVN ma la sua documentazione è lacunosa.

Supponiamo di avere un repository SVN già funzionante che risponde all'URL

svn://10.0.0.1/repository

e di voler creare un mirror. Supponiamo anche che sul repository appena indicato esista un utente con username svnsync.

Installiamo Subversion sulla macchina mirror (supponiamo di voler mettere il repository nella cartella /svn-mirror). Se siamo sotto Ubuntu basta lanciare il comando:

sudo apt-get install subversion

mentre sotto FreeBSD eseguiamo:

cd /usr/ports/devel/subversion
make
make install
make clean

Maggiori informazioni sull'installazione sono reperibili qui.

Procediamo, prima creando il repository mirror

svnadmin create /svn-mirror

poi creiamo un hook che faccia in modo che solo l'utente svnsync possa fare commit sul repository (di fatto lo stiamo rendere un repository a solo lettura - quasi):

cat <<'EOF' > /svn-mirror/hooks/pre-revprop-change
#!/bin/sh
USER="$3"

if [ "$USER" = "svnsync" ]; then exit 0; fi

echo "Questa operazione puo' essere eseguita\
      solo dall'utente svnsync" >&2
exit 1
EOF

rendiamo l'hook eseguibile:

chmod a+x /svn-mirror/hooks/pre-revprop-change

a questo eseguiamo la prima sincronizzazione tra il repository originale ed il mirror

svnsync init --username svnsync \
        file:///svn-mirror svn://10.0.0.1/repository
svnsync sync --username svnsync file:///svn-mirror

Da questo momento in poi basterà eseguire periodicamente (ad esempio configurandolo nel cron) il seguente comando per far in modo che il mirror si sincronizzi con il repository principale:

svnsync sync --username svnsync file:///svn-mirror

Da notare che sul repository principale non è stato necessario eseguire nessuna operazione se non l'aggiunta dell'utente svnsync. In realtà potreste tranquillamente usare un qualsiasi altro utente valido (in tal caso cambiate il nome utente in tutti i comandi indicati fino ad ora).

Nota 1: per maggiori informazioni sull'amministrazione di un repository SVN vi consiglio di consultare l'ottimo manuale reperibile all'url http://svnbook.red-bean.com/

Nota 2: se quello che serve è semplicemente una copia di backup di un repository ed il repository non è troppo grosso (in termini di spazio occupato) è possibile eseguire un più semplice svnadmin hotcopy. Maggiori informazioni qui.

 

Accedere ad un database Access da Linux tramite driver ODBC

Mi è capitato di dover estrarre dei dati da un database Access tramite un script PHP.

La soluzione più immediata che mi è venuta in mente è stata quella di accedere al database tramite le API ODBC.

Essendo la mia una Linux box (in particolare ho al momento una Ubuntu 9.10) ho provveduto ad installare l'interprete PHP e i driver ODBC per linux tramite i seguenti comandi:

sudo apt-get install unixodbc
sudo apt-get install unixodbc-bin
sudo apt-get install libmdbodbc
sudo apt-get install php5-cli
sudo apt-get install php5-odbc

A questo punto bisogna configurare il datasource ODBC indicando la posizione del database Access (il file .mdb) al quale vogliamo accere. Se fossimo stati sotto Microsoft Windows avremmo configurato il tutto dal pannello di controllo, ma sotto linux dovremo utilizzare dei tool appositi (a tal proposito consultare il manuale il quale è abbastanza chiaro) oppure modificare qualche file di configurazione.
Scegliamo la seconda via:

creiamo il file /etc/odbcinst.ini ed aggiungiamo le seguenti righe:

[MDB]
Description = Driver per l'accesso a database Access
Driver = /usr/lib/libmdbodbc.so.0
Usage = 1
FileUsage = 1 

creiamo il file /etc/odbc.ini ed aggiungiamo le seguenti righe:

[NomeDataSource]
Description = Il nostro database access
Driver = /usr/lib/libmdbodbc.so.0
Database = /var/db/dbAccess.mdb 

Al posto di NomeDataSource potete mettere il nome che preferite.

 A questo punto possiamo accedere al database Access da PHP . Ecco ad esempio uno script che visualizza l'elenco delle tabelle presenti nel database:

#!/usr/bin/php
<?php

$dsn = "NomeDataSource";
$username = "";
$password = "";

$conn = odbc_connect($dsn, $username, $password) 
        or die(odbc_errormsg());

// Ottengo l'elenco delle tabelle presenti nel database
$result = odbc_tables($conn);
while ($row = odbc_fetch_object($result)) {
    if($row->TABLE_TYPE == 'TABLE') {
            print $row->TABLE_NAME . "\n";
        }
}
odbc_free_result($result);

odbc_close($conn);
?>

per eseguirlo create un file (es. lo chiamate mdblist) e incollate lo script precedente. Poi dategli i permessi di esecuzione (es. chmod a+x mdblist) ed eseguitelo (es ./mdblist)

A questo punto potete modificare lo script utilizzando le API ODBC messe a disposizione da PHP per eseguire query o altro (n.b. le query si eseguono attraverso la funzione odbc_exec)

 

Condividi contenuti

Home Back To Top