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 :)
