Patching Debian

Da Fabwiki.

Ogni tanto riesco a trovare del tempo per aggiornare il piccolo wiki :-)

Mi sono imbattuto di recente in un bug di debian relativo al pacchetto squirrelmail piuttosto fastidioso che impediva la ricerca nelle mail

Ho deciso quindi di patchare squirrelmail, vediamo nel dettaglio come fare (esistono anche altri metodi: riporto quello da me utilizzato)

mkdir squirrelmail-src  (potete sostituire squirrelmail-src, con il nome del pacchetto che dovete patchare)

cd squirrelmail-src

Adesso scarichiamo il sorgente del pacchetto (nel mio caso, squirrelmail)

apt-get source nomepacchetto

Ovviamente, per poter scaricare i sorgenti, nel vostro /etc/apt/source.list dovete avere il repository. Io uso

deb-src http://security.debian.org/ testing/updates main contrib non-free

A questo punto, all' interno della directory squirrelmail-src, troveremo tre file ed una directory:

-rw-r--r--  1 root root 648459 2009-10-14 11:24 squirrelmail_1.4.20~rc2.orig.tar.gz
-rw-r--r--  1 root root    987 2009-10-14 11:26 squirrelmail_1.4.20~rc2-1.dsc
-rw-r--r--  1 root root  20943 2009-10-14 11:26 squirrelmail_1.4.20~rc2-1.diff.gz
drwxr-xr-x 17 root root    568 2009-10-14 11:26 squirrelmail-1.4.20~rc2

Entriamo nella directory creata (nel mio caso la dir sarà /root/squirrel-src/squirrelmail-1.4.20~rc2/functions perchè il file da patchare si trova sotto tale directory)

Ora scarichiamo la patch con wget (o con qulsiasi cosa decidiate di usare)

wget http://link.com/patch

Eseguiamo il comando patch

patch -p1 < patch

e verificate che non compaiano errori. Ora spostatevi sopra di un livello (quindi /root/squirrelmail-src/squirrelmail-1.4.20~rc2) e lanciate

dpkg-buildpackage

A questo punto


Se ci sono errori relative alle dipendenze, potete risolverli nel seguente modo:

apt-get build-dep squirrelmail (ovviamente sostituite squirrelmail con il nome del vostro pacchetto)

Se tutto è andato a buon fine, dovreste trovarvi un file .deb nella directory /root/squirrelmail-src/squirrelmail-1.4.20~rc2 (nella radice, dalla quale avete lanciato apt-get source) Installatelo con

dpkg -i nomepacchetto.deb


Gestione repository

Una volta che abbiamo applicato la patch al nostro pacchetto, apt-get, purtroppo, al successivo update, cercherà di aggiornare il pacchetto appena patchato e quindi, lo sostituirà con quello buggato :( Per impedire questo, uso l' opzione HOLD del dpkg: questo impedisce l' aggiornameto automatico del pacchetto, evitando cosi' di scaricare/installare il pacchetto con il bug. Per farlo, ho fatto questo:

echo "{nome del package} hold" | dpkg --set-selections

(nel mio caso echo "squirrelmail hold" | dpkg --set-selections)


Ora, se provate a fare

apt-get update && apt-get upgrade

Dovreste trovarvi

..
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
squirrelmail  #oppure il nome del pacchetto che avete messo in hold

Potete controllare lo stato dei pacchetti in HOLD, in questo modo:

dpkg -l |grep ^hi

Che nel mio caso restituisce:

hi  squirrelmail                      2:1.4.20~rc2-1           Webmail for nuts

Se è cosi', siete a posto: il pacchetto squirrelmail non viene piu' aggiornato fino a quando non sarà tolto dall' HOLD

Per rimuoverlo dall' HOLD, è sufficiente utilizzare questo comando:

echo "{nome del package} install" | dpkg --set-selections

(nel mio caso echo "squirrelmail install" | dpkg --set-selections)

Controllate ora con

dpkg -l |grep ^hi

..non dovreste piu' trovare nulla :)