Applicare una patch ad un pacchetto Debian: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (firma)
m (→‎PROCEDIAMO: sistemati i titoli dei paragrafi)
Riga 1: Riga 1:
==Introduzione==
==Introduzione==


In questa guida spiegher� come sostituire il filtro antispam di evolution (che usa spamassassin) con un filtro molto pi� veloce (in quanto bayesiano): bogofilter.
In questo howto vedremo come sia possibile applicare una patch ad un pacchetto
Usando Evolution ho notato che il filtro antispam che richiede l'uso di spamassassin � molto lento soprattutto inserendo i controlli esterni (ovvero ogni mail viene confrontata con una lista di mail-spam note). Vi sar� capitato forse anche di usare Thunderbird che include un filtro anti-spam bayesiano (� un tecnica statistica) e di notare che questo tipo di filtro � molto pi� veloce ed ugualmente accurato (non so in termini assoluti quale sia il migliore ma per usi SOHO entrambi sono ampiamente soddisfacenti).
ufficiale Debian.
Prima di proseguire, però, vedremo quando non è possibile farlo:
* il pacchetto non è stato distribuito anche in forma di sorgenti (capita per
qualche repository non ufficiale e per alcuni pecchetti uff. (una volta mi era
successo...).


possibile usare un filtro bayesiano anche con evolution, con conseguente aumento della velocit. A tal scopo basta usare bogofilter, un filtro antispam bayessiano da linea di comando. Per i pi smaliziati descriver sinteticamente il procedimento, gli altri troveranno informazioni pi dettagliate nel seguito. In pratica basta usare la funzionalit di evolution di creare filtri che come condizione di verifica discriminano il valore di ritorno di un programma al quale stata mandata in pipe l'email. molto pi semplice di quello che sembra in realt. Il vantaggio di velocit notevole anche perch si possono filtrare prima tutte le mail delle mailing list e mandare al filtro antispam solo le altre email. Lo svantaggio che, usando una tecnica statistica, bisogna inizialmente "istruire" bogofilter a riconoscere lo spam, ma la cosa non presenta problemi se si dispone gi di alcune decine di email di spam.


==Preparazione del sistema==


==Usare bogofilter sulle mailbox di Evolution==
Per prima cosa bisogna assicurarsi di avere, in '''/etc/apt/sources.list''',
le sorgenti per scaricare i pacchetti di tipo deb-src:
<pre>
#--CUT HERE--#
#per stable
deb-src http://ftp2.it.debian.org/debian/ stable main non-free contrib
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib
non-free


Evolution mette le mail in /home/$USER/.evolution/mail/local/, un file (in formato mbox) per ogni cartella che abbiamo in Evolution. Le email della cartella "Posta in arrivo" compreso lo spam ("da Cestinare") st� tutta nel file Inbox: evolution aggiunge infatti un header che gli permette di distinguere lo spam dall'ham (prosciutto in inglese: tutto ci� che non � spam). Ora, per istruire bogofilter � molto pi� comodo di disporre dello spam in un file separato. A tal scopo apriamo evolution e spostiamo tutta la posta in "Da cestinare" in una nuova cartella che chiameremo fantasiosamente Spam.
#per testing
 
deb-src http://ftp2.it.debian.org/debian/ testing main non-free contrib
Per istruire ora bogofilter su cosa sia spam, scriveremo in un terminale dalla cartella /home/$USER/.evolution/mail/local/:
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib
non-free


#per unstable
deb-src http://ftp2.it.debian.org/debian/ sid main non-free contrib
deb-src http://non-us.debian.org/debian-non-US sid/non-US main contrib non-free
#--CUT HERE--#
</pre>
ora aggiorniamo il contenuto del database dei pacchetti:
<pre>
<pre>
    $ cat Spam | bogofilter -M -s
# apt-get update
</pre>
</pre>




dove "Spam" � la cartella di evolution (qui file mbox) in cui abbiamo spostato lo spam. Se abbiamo indicato come spam un file di mail "pulite" possiamo annullare l'operazione con lo stesso comando sostituendo -S al posto di -s.
==Procediamo==


Per indicare quali mail non sono spam scriveremo invece:
===Metodo 1: `apt-get source && dpkg-buildpackage`===


Per scaricare i sorgenti, seguiamo questa procedura:
Per avere tutto in ordine, creiamo una cartella di lavoro
<pre>
<pre>
    $ cat Inbox | bogofilter -M -n
$ mkdir nomepacchetto && cd nomepacchetto
</pre>
</pre>


Ora possiamo scaricare i sorgenti:
<pre>
$ apt-get source nomepacchetto
</pre>


Potremo ripetere il precendente comando anche per gli altri file corrispondenti a posta "pulita". Ad esempio io l'ho anche eseguito sugli altri file che contenevano i messaggi delle mailing list a cui sono iscritto. Se abbiamo indicato come mail "pulite" un file contentente spam, possiamo annullare l'operazione con lo stesso comando sostituendo -N al posto di -n.
così facendo, scaricheremo 3 file, che verranno decompressi in una cartella
(nomepacchetto-ver.sio.ne)


Per vedere quanto adesso sia chiara a bogofilter la differenza tra spam e ham possiamo visualizzare un diagramma con il comando (dalla home):
Ora possiamo entrare in questa cartella, scaricare la patch e applicarla:
<pre>
$ cd nomepacchetto-ver.sio.ne
$ wget http://indirizzo/per/la/patch.patch
</pre>


supponendo che la patch non sia compressa...
<pre>
<pre>
    $ bogoutil -H ~/.bogofilter/wordlist.db
$ patch -p1 < patch.patch
</pre>
</pre>


se è compressa:
<pre>
$ zcat patch.patch | patch -p1
</pre>


dovremmo vedere in istogramma con due massimi nettamente distinti, questo vuol dire che a bogofilter � abbastanza chiara la differenza tra spam e ham. Ad esempio ecco come appare il mio istogramma, dopo aver inserito alcune centinaia di email come ham e una ottantina di mail come spam:
Una volta applicata la patch, se non riceviamo errori, siamo pronti a
 
compilare il pacchetto.
Per fare questo utilizzeremo un altro tool Debian: dpkg-buildpackage
<pre>
<pre>
    Histogram
# dpkg-buildpackage
    score  count  pct  histogram
    0.00    59199 81.65 ################################################
    0.05      178  0.25 #
    0.10      114  0.16 #
    0.15      114  0.16 #
    0.20      139  0.19 #
    0.25      159  0.22 #
    0.30      139  0.19 #
    0.35      147  0.20 #
    0.40      160  0.22 #
    0.45      201  0.28 #
    0.50      151  0.21 #
    0.55      187  0.26 #
    0.60      150  0.21 #
    0.65      155  0.21 #
    0.70      243  0.34 #
    0.75      227  0.31 #
    0.80      251  0.35 #
    0.85      324  0.45 #
    0.90      356  0.49 #
    0.95    9905 13.66 #########
    tot    72499
    hapaxes:  ham  30363 (41.88%), spam      2 ( 0.00%)
      pure:  ham  59036 (81.43%), spam    9161 (12.64%)
</pre>
</pre>


 
Il comando proverà a compilare il pacchetto, ed in caso di errori ci chiederà
Se abbiamo una email possiamo ora controllare se sia spam o meno dandola in pipe a bogofilter con il seguente comando:
di sistemare le dipendenze (se l'errore è dovuto alla mancanza di alcune
 
librerie) elencando tutti i pacchetti necessari, installabili con un normale
<pre>
<pre>
    $ cat messaggio | bogofilter
# apt-get buid-dep 'nomepacchetto_da_installare'
</pre>
</pre>


 
una volta giunta a termine la compilazione, troveremo (nella cartella
Se il valore di ritorno (echo $?) � 0 la mail sar� spam, se � 1 sar� ham, se � 2 bogofilter � incerto.
nomepacchetto da noi creata) una serie di file .deb!
 
ora possiamo installarli:
Da qui si capisce come sia possibile costruire un piccolo script al quale mandare in pasto (in pipe, tecnicamente) le nostre mail ed a seconda del valore di ritorno evolution sposter� o meno il messagio nella cartella dello Spam. Un esempio � il seguente:
 
<pre>
<pre>
    #!/bin/sh
# dpkg -i nomepacchetto_ver.sio.ne.deb
    # antispam - Wrapper per bogofilter
</pre>
    #
    # Dare in pipe a questo script l'email da controllare
    # Ritorna:
    #  0  per lo spam
    #  1  per l'ham
    #  2  se il messaggio e' incerto
    #


    SPAMBOX="/home/$USER/.evolution/mail/local/Spam"
Bene, se non riceviamo errori...il pacchetto è installato.
    HAMBOX="/home/$USER/.evolution/mail/local/Inbox"


    # Commentare se non si vuole istruire bogofilter sullo spam ogni volta
    # che si scarica la posta
    cat $SPAMBOX | bogofilter -M -s
   
    # Commentare se non si vuole istruire bogofilter sull'ham ogni volta
    # che si scarica la posta
    cat $HAMBOX | bogofilter -M -n


   
===Metodo 2: `apt-build`===
    # Controlla il messaggio dato in pipe (legge lo stdin)
    bogofilter


    # Valore di ritorno
Prima di iniziare, è d'obbligo una introduzione su apt-build.
    RESULT=$?
Questo tool è abbastanza giovane, e consente di compilare i pacchetti Debian
ottimizzandoli per la propria macchina. Durante l'installazione vengono poste
delle domande (tipo di processore, livello di ottimizzazione), e rispondendo
nel modo opportuno, sarà possibile compilare i pacchetti ottimizzandoli per la
propria macchina, cosa che, nel METODO 1 non avviene.


    echo $RESULT
Apt-build ci mette a disposizione una opzione, '''--patch''', che consente di applicare delle patch al pacchetto da installare.
    exit $RESULT
Vediamo, ora, come fare.
Scarichiamo la patch:
<pre>
$ wget http://indirizzo/per/la/patch.patch
</pre>
</pre>


ora diamo il semplice comando:
<pre>
# apt-build -p 0 --patch patch.patch install 'pacchetto'
</pre>


Potete, ad esempio, salvare lo script precedente col nome antispam, copiarlo nel PATH (ad es. /usr/local/bin/) e renderlo eseguibile (chmod +x antispam). Ogni volta che viene mandato in pipe una email a questo script, bogofilter viene aggiornato su cosa � spam e su cosa no e poi ci dir� se il messagio passato � spam o meno.
ora mettiamoci comodi, armati di tazzona di caffè (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:
 
* vengono scaricate i pacchetti *-dev per la compilazione;
==Configurare Evolution per l'uso di bogofilter==
* viene aggiornato l'elenco dei pacchetti dei vari repository (usare l'opzione '''--noupdate''' per evitarlo);
 
* vengono scaricati i sorgenti del pacchetto;
Non ci resta ora che configurare Evolution. Disabilitiamo innanzi tutto il filtro antispam integrato di evolution. Poi creiamo un nuovo filtro per la posta in entrata. Come condizione di verifica del filtro (riquadro '''Se''') mettiamo "In pipe a programma", come nome del programma il nome dello script (/usr/local/antispam) e come valore di ritorno 0. Ora baster� aggiungere l'azione da compiere (riquadro '''allora''') che sar� ovviamente "Sposta nella cartella" Spam.
* viene applicata la patch;
 
* inizia la compilazione del pacchetto:
Ultimo consiglio che do � quello di inserire il filtro antispam alla fine della lista filtri (se ne avete altri), spostandolo in basso. Inserendo poi negli altri filtri come azione oltre a "Sposta nella cartella" anche "Arresta l'elaborazione" in modo che se il messagio corrisponde al filtro non verr� pi� processato dai filtri successivi. In questo modo arriveranno a bogofilter molti meno messaggi e l'elaborazione sar� ancora pi� veloce. Io uso questo metodo perch� non arriva spam alle mailng list a cui sono iscritto. Se vi arrivase spam anche dalle mailing list, potete non usarlo e fare filtrare tutto a bogofilter.
* viene/vengono installato/i il/i pacchetto/i generato/i.
 
==Conclusioni==
 


Concludo dicendo che questa � solo una delle implementazioni possibili. Ad esempio per velocizzare ulteriormente il controllo antispam si possono commentare i cat nello script, e poi di tanto in tanto aggiornare a mano bogofilter su cosa � spam e cosa � ham. Oppure si pu� usare questo procedimento con una altro programma di posta (MUA) diverso da Evolution.Le possibilit� sono infinite. Spero di essere riuscito a spiegare la logica delle cose (piuttosto che aver dato una soluzione bell'e pronta) in modo che ognuno di voi possa adattare quanto detto per rispondere alle proprie esigenze, e anche (perch� no) al proprio capriccio. E, in fondo, non � proprio questo il bello di usare software libero?
Bene, ora il pacchetto è installato nel vostro sistema!


Happy hacking!


----
---- [[User:MaXeR|MaXeR]]
Autore: [[Utente:TheNoise|~ The_Noise]]
[[Categoria:Desktop]]
[[Categoria:Tips&Tricks]]

Versione delle 07:51, 15 mag 2005

Introduzione

In questo howto vedremo come sia possibile applicare una patch ad un pacchetto ufficiale Debian. Prima di proseguire, però, vedremo quando non è possibile farlo:

  • il pacchetto non è stato distribuito anche in forma di sorgenti (capita per

qualche repository non ufficiale e per alcuni pecchetti uff. (una volta mi era successo...).


Preparazione del sistema

Per prima cosa bisogna assicurarsi di avere, in /etc/apt/sources.list, le sorgenti per scaricare i pacchetti di tipo deb-src:

#--CUT HERE--#
#per stable
deb-src http://ftp2.it.debian.org/debian/ stable main non-free contrib
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib
non-free

#per testing
deb-src http://ftp2.it.debian.org/debian/ testing main non-free contrib
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib
non-free

#per unstable
deb-src http://ftp2.it.debian.org/debian/ sid main non-free contrib
deb-src http://non-us.debian.org/debian-non-US sid/non-US main contrib non-free
#--CUT HERE--#

ora aggiorniamo il contenuto del database dei pacchetti:

# apt-get update


Procediamo

Metodo 1: `apt-get source && dpkg-buildpackage`

Per scaricare i sorgenti, seguiamo questa procedura: Per avere tutto in ordine, creiamo una cartella di lavoro

$ mkdir nomepacchetto && cd nomepacchetto

Ora possiamo scaricare i sorgenti:

$ apt-get source nomepacchetto

così facendo, scaricheremo 3 file, che verranno decompressi in una cartella (nomepacchetto-ver.sio.ne)

Ora possiamo entrare in questa cartella, scaricare la patch e applicarla:

$ cd nomepacchetto-ver.sio.ne
$ wget http://indirizzo/per/la/patch.patch

supponendo che la patch non sia compressa...

$ patch -p1 < patch.patch

se è compressa:

$ zcat patch.patch | patch -p1

Una volta applicata la patch, se non riceviamo errori, siamo pronti a compilare il pacchetto. Per fare questo utilizzeremo un altro tool Debian: dpkg-buildpackage

# dpkg-buildpackage

Il comando proverà a compilare il pacchetto, ed in caso di errori ci chiederà di sistemare le dipendenze (se l'errore è dovuto alla mancanza di alcune librerie) elencando tutti i pacchetti necessari, installabili con un normale

# apt-get buid-dep 'nomepacchetto_da_installare'

una volta giunta a termine la compilazione, troveremo (nella cartella nomepacchetto da noi creata) una serie di file .deb! ora possiamo installarli:

# dpkg -i nomepacchetto_ver.sio.ne.deb

Bene, se non riceviamo errori...il pacchetto è installato.


Metodo 2: `apt-build`

Prima di iniziare, è d'obbligo una introduzione su apt-build. Questo tool è abbastanza giovane, e consente di compilare i pacchetti Debian ottimizzandoli per la propria macchina. Durante l'installazione vengono poste delle domande (tipo di processore, livello di ottimizzazione), e rispondendo nel modo opportuno, sarà possibile compilare i pacchetti ottimizzandoli per la propria macchina, cosa che, nel METODO 1 non avviene.

Apt-build ci mette a disposizione una opzione, --patch, che consente di applicare delle patch al pacchetto da installare. Vediamo, ora, come fare. Scarichiamo la patch:

$ wget http://indirizzo/per/la/patch.patch

ora diamo il semplice comando:

# apt-build -p 0 --patch patch.patch install 'pacchetto'

ora mettiamoci comodi, armati di tazzona di caffè (rigorosamente marchiata con un bel Tux) e controlliamo a video mentre:

  • vengono scaricate i pacchetti *-dev per la compilazione;
  • viene aggiornato l'elenco dei pacchetti dei vari repository (usare l'opzione --noupdate per evitarlo);
  • vengono scaricati i sorgenti del pacchetto;
  • viene applicata la patch;
  • inizia la compilazione del pacchetto:
  • viene/vengono installato/i il/i pacchetto/i generato/i.

Bene, ora il pacchetto è installato nel vostro sistema!



MaXeR