contatore free

solutioncafe IT

Il System Architect è il punto di unione tra IT, processi aziendali e esigenze del cliente

ago
2010
23

Sono appena rientrato dalla vacanza itinerante americana, e vittima del “jet lag”, non riuscendo a dormire ho deciso di aggiornare il blog alla versione 3 di wordpress.
Post per nulla interessante, ma serve per erificare l’installazione.

Tag:

Commenti (1)

apr
2010
4

In questi giorni, avendo un pochino di tempo a disposizione mi sono deciso a dedicarne una parte al blog che da un po’ di tempo giaceva abbandonato.
Mentre davo un’occhiata alle statistiche generate da “Statpress” ho notato che i dati venivano estratti con estrema lentezza e nonostante il server sul quale risiede attualmente Mysql non sia un fulmine (devo decidermi a mettere in produzione la nuova VM) non era sicuramente una situazione “accettabile”.
Fatta una piccola analisi alla tabella di Statpress (wp_statpress) ho notato un indice solo sul campo “id” che da un’occhiata veloce al codice del plugin sembra anche essere inutile, anzi un indice sul campo “date” e sul campo “time”, seppur contenente valori non univoci, avrebbe giovato.
Ho provveduto quindi alla creazione degli indici.

Per il campo “date”:

mysql>ALTER TABLE wp_statpress ADD INDEX wp_statpress_date_idx (date(8));

Per il campo “time”:

mysql>ALTER TABLE wp_statpress ADD INDEX wp_statpress_time_idx (time(8));

Per verificare:

mysql>desc wp_statpress;

Risultato: Un quarto, circa, del tempo precedente per estrarre le statistiche.

Tag:

Scrivi un commento

giu
2009
15

Può capitare a volte, per un motivo o per l’altro, di avere bisogno di un tunnel privato che ci colleghi ad un host remoto garantendo sicurezza e stabilità. Connessioni di questo tipo trovano largo impiego sia in ambito aziendale che privato, sebbene non tutte le soluzioni esistenti siano economiche o facili da realizzare.

Vediamo ora com’è possibile realizzare un tunnel fra due macchine senza necessità di agire su firewall per impostare regole di port forwarding.

Supponendo di volerci collegare alla macchina A alla macchina B, su cui sia già installato un server SSH, fra i vari client utilizzabili a tale scopo c’è Putty: leggero ed Open Source, non richiede installazione, e fa al caso nostro per risolvere la questione che ci siamo posti.

Aprendo Putty, inseriamo l’indirizzo della nostra macchina B verso cui vorremmo collegarci:

Putty - 1

Spostiamoci poi nel menù a sinistra, verso il basso, aprendo il sottomenù Tunnels come in figura:

2

Qui, scegliamo Dynamic fra le scelte multiple in basso, immettiamo nel campo Source port la porta verso cui la macchina remota si collegherà alla nostra per aprire il tunnel (non è necessario che questa sia aperta verso l’esterno, poiché la connessione avverrà in reverse) e lasciamo bianco il campo Destination.

3

A questo punto, premendo Add dovrebbe comparire nell’elenco Forwarded ports la porta che abbiamo scelto, preceduta da una D:

4

La configurazione è finita, prememdo su Open si instaurerà la connessione, e una volta autenticatici nel server come di consueto avremo creato il nostro tunnel. Un esempio di utilizzo: proxy SOCKS – anche per accesso a servizi nella lan locale della macchina cui ci siamo collegati.

Impostando su FireFox come proxy SOCKS l’indirizzo localhost e come porta quella che abbiamo poc’anzi specificato, navigheremo usando la macchina remota come tramite.

5

Tag:

Scrivi un commento

apr
2009
25

Linux, da sempre, si è dimostrato essere un sistema operativo eccellente in termini di performance e parsimonioso in termini di risorse, ricco di evoluzioni e aggiornamenti da parte delle fitta schiera di sviluppatori che partecipano al progetto. Questi aggiornamenti, se riguardano i vari software o librerie, vengono rilasciati dalle varie comunità sotto forma di “package”, ma se un aggiornamento riguarda il kernel, questo viene rilasciato sotto forma di file .patch. Un file patch non è altro che un file contenente le istruzione codificate (in C oppure C++) che dovranno essere aggiunte e/o rimosse dal file originale.
Ma come applicare questi aggiornamenti al codice sergente del kernel?
Utilizzando il comando “patch”, come illustrato di seguito.

Assumendo che i sorgenti del kernel sul quale applicare le patch si trovino nella directory /usr/src/linux-2.6 oppure in /usr/src/linux, copiare il file .patch in /usr/src e digitare il seguente comando:

$ patch -p1 < /usr/src/file.patch

E' possibile simulare l'installazione della patch e verificare la presenza di errori indicando l'opzione —dry-run (nessun file sarà modificato).

$ patch -p1 —dry-run < /usr/src/file.patch

Nel caso dobbiate applicare un set di patch (nell'esempio patch.bzip2) digitare:

$ bzip2 -dc /usr/src/patch.bz2 | patch -p1 —dry-run
$ bzip2 -dc /usr/src/patch.bz2 | patch -p1

Oppure se il formato archivio è gzip digitare:

$ gunzip -c /usr/src/patch.gz | patch -p1 —dry-run
$ gunzip -c /usr/src/patch.gz | patch -p1

Tag:

Scrivi un commento

feb
2009
23

Uno dei principali tool messi a disposizione all’amministratore di MySQL per effettuare il backup dei dati è mysqldump.
mysqldump è molto versatile, permette di effettuare backup in formato ASCII contenenti le istruzioni SQL dal quale è possibile ripristinare il database da zero oppure, apportandone semplici modifiche, ripristinare la singola tabella.
Un altro vantaggio dei backup creati con mysqldump è rappresentato dal fatto che possono essere ripristinati su piattaforme diverse dall’originale.
Di seguito ecco illustrato uno script per effettuare il backup di tutti i database MySql del vostro server Linux.

#!/bin/bash

ADMINUSER="backup"
ADMINPASS="password"
SERVERNAME=`uname -n`

MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
MUTT="$(which mutt)"
GZIP="$(which gzip)"

NOW=`date +%Y%m%d%H%M`
DUMPDIR=/opt/dumpdb
MAILINGLIST=mysql@vostrodominio.it

RETVAL=0

# SKIPPED BACKUP LIST
SKIP=""

[ ! -d $DUMPDIR ] && mkdir -p $DUMPDIR || :

$CHOWN root.root -R $DUMPDIR
$CHMOD 0600 $DUMPDIR

DBLIST="$($MYSQL -u $ADMINUSER -h $SERVERNAME -p$ADMINPASS
-Bse 'show databases')"

for db in $DBLIST
do
        skipdb=-1
        if [ "$SKIP" != "" ]
        then
                for i in $SKIP
                do
                        [ "$db" == "$i" ] && skipdb=1 || :
                done
        fi

        if [ "$skipdb" == "-1" ]
        then
                FILE="$DUMPDIR/$db.sql.$SERVERNAME.$NOW.gz"
                $MYSQLDUMP -u $ADMINUSER -h $SERVERNAME
-p$ADMINPASS $db | $GZIP -9 > $FILE
                RETVAL=$?
                if [ $RETVAL -eq 0 ]
                then
                 # Cancella i file con data superiore a 7 GG
                 find $DUMPDIR -name $db.sql.$SERVERNAME.*
-mtime +7 \! -type d -exec rm -f {} \;

                        $MUTT -s "Dump database $db on
$SERVERNAME --> OK" -a $FILE $MAILINGLIST < /dev/null
                else
                        $MUTT -s "Dump database $db on
$SERVERNAME --> FALLITO"  $MAILINGLIST < /dev/null
                fi
        fi
done
Tag:

Scrivi un commento

feb
2009
20

Per mantenere la directory log pulita, avendo cura di cancellare solo i files ritenuti obsoleti dopo il periodo di ritenzione da voi stabilito (es. 15 giorni), potete pianificare l’esecuzione giornaliera del seguente comando.

$ find /var/log -mtime +15 \! -type d -exec rm -f {} \;
Tag:

Scrivi un commento

dic
2008
10

Uno script di autoconfigurazione con estensione *.pac, chiamato per comodità proxy.pac contiene genericamente una funzione JavaScript chiamata “FindProxyForURL(url, host)” che restituisce uno o più risultati, basandosi su condizioni definite dal gestore del sistema di proxy, che un moderno browser è in grado di interpretare.
Viene solitamente utilizzato quando è necessario discriminare la modalità di navigazione al fine di indirizzare l’utente, in modo trasparente, a rivolgere la sua richiesta attraverso il proxy oppure in modalità “diretta”.
Eccone un esempio:

function FindProxyForURL(url, host)
{
       if (isPlainHostName(host))
       {
       return "DIRECT";
       }
// NAME HOSTS --> DIRECT

        if ((host=="domainname.it")||
            (host=="domainname.com"))
        {
        return "DIRECT";
        }

// NAME HOSTS --> PROXY

        if ((host=="abcd.domainname.it")||
            (host=="efgh.subdomain.domainname.it"))
        {
        return ProxyServer(url);
        }

// IP HOSTS --> DIRECT

        if ((host=="10.60.50.141") ||      // Servizio XYZ;
            (host=="10.32.1.103"))          // Servizio ZXY;
        {
        return "DIRECT";
        }

// IP HOSTS --> PROXY A

        if ((host=="10.128.64.50")   ||    // Servizio A
            (host=="10.51.8.50")     ||     // Servizio B
            (host=="10.51.76.202"))        // Servizio C
        {
        return ProxyServer(url);
        }

// IP HOSTS --> PROXY B;

        if ((host=="XXX.201.99.120") ||
            (host=="YYY.223.212.242") ||
            (host=="ZZZ.221.99.154"))
        {
        return "PROXY aa.bbb.ccc.d:8080; DIRECT";
        }

 //LOCAL DOMAIN NAME --> DIRECT

        if (dnsDomainIs(host, "subdomain.mydomain.it") ||
            dnsDomainIs(host, "subdomain.mydomain.com") ||
            dnsDomainIs(host, "internaldomain.loc") ||
            dnsDomainIs(host, "otherdomain.it"))
        {
        return "DIRECT";
        }

//PRIVATE NETWORK --> DIRECT

        if (isInNet(host, "10.0.0.0", "255.0.0.0") ||
            isInNet(host, "127.0.0.0", "255.0.0.0")  ||
            isInNet(host, "172.16.0.0", "255.240.0.0")  ||
            isInNet(host, "192.168.0.0", "255.255.0.0"))
        {
        return "DIRECT";
        }

        // otherwise use Proxy Server

        else

        function ProxyServer(url);

function ProxyServer(url) {
   return "PROXY cache.internaldomain.it:3128; DIRECT";
}

Il proxy.pac per essere utilizzato deve essere messo in linea su un web server opportunamente configurato, argomento che tratteremo in un prossimo articolo.

Per ulteriori informazioni sull’uso degli script di autoconfigurazione consultate Wikipedia
Per verificare la sintassi e/o i risultati del vostro proxy.pac potete utilizzare pactester.

Tag:

Scrivi un commento

nov
2008
24

Dopo lo script visto nell’articolo precedente, eccone un altro un pochino più complesso, che restituisce giorno mese e anno retroattivi di un numero arbitrario di giorni rispetto alla data corrente. es. => $ sh subtractdays.sh 90

#!/bin/bash
# Source function library.
. /etc/rc.d/init.d/functions

OFFSET=$1

[ -z $OFFSET ] && OFFSET=0

eval `date "+DAY=%d; MONTH=%m; YEAR=%Y"`

DAY=${DAY#0}
MONTH=${MONTH#0}

if [ -n $OFFSET ] && [ $OFFSET -gt 0 ]
then
        for x in `seq 1 $OFFSET`
        do
                DAY=$((DAY - 1))

                if [ $DAY -lt 1 ]
                then
                        MONTH=$((MONTH - 1))
                        if [ $MONTH -lt 1 ]
                        then
                                YEAR=$((YEAR - 1))
                                MONTH=12
                        fi

                        typeset -a DAYS
                        i=0
                        for day in `cal $MONTH $YEAR | grep
-vE 'Su|Mo|Tu|We|Th|Fr|Sa|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug
|Sep|Oct|Nov|Dec|$YEAR'`
                        do
                                i=`expr $i + 1`
                                DAYS[i]=$day
                        done

                        DAY=$((${DAYS[ ${#DAYS[*]}]}))
                        unset DAYS[*]
                fi
        done
fi

[ $DAY -lt 10 ] && DAY=0$DAY
[ $MONTH -lt 10 ] && MONTH=0$MONTH

echo $DAY $MONTH $YEAR
Tag:

Scrivi un commento

nov
2008
23

Dovendo automatizzare alcune operazioni di storicizzazione su server Linux, ho preparato questo script in grado di restiruire il mese e l’anno retroattivo di un numero arbitrario di mesi, a partire dalla data corrente.
Per utilizzarlo e’ sufficiente lanciare lo script indicando il numero di mesi che volete sottrarre come parametro. es. => $ sh subtractmonths.sh 2

#!/bin/bash

# Source function library.
. /etc/rc.d/init.d/functions

OFFSET=$1
MONTH=`date "+%m"`
YEAR=`date "+%Y"`

MONTH=${MONTH#0}

[ -z $OFFSET ] && OFFSET=0

if [ -n $OFFSET ] && [ $OFFSET -gt 0 ]
then
        for x in `seq 1 $OFFSET`
        do
                MONTH=$((MONTH - 1))

                if [ $MONTH -lt 1 ]
                then
                        YEAR=$(($YEAR - 1))
                        MONTH=12
                fi
        done
fi

[ $MONTH -lt 10 ] && MONTH=0$MONTH

echo $MONTH $YEAR
Tag:

Scrivi un commento

set
2008
30

Se volete conoscere quali porte sono aperte sul vostro server Linux,
eseguite:

$ lsof -i -n

oppure solo le porte TCP:

$ lsof -i TCP -n

oppure solo le porte UDP:

$ lsof -i UDP -n
Tag:

Commenti (1)

Banner