Il software è come il sesso, è meglio quando è libero. (Software is like sex, it's better when it's free).
Avete mai pensato di creare o più semplicemente (si fà per dire...) applicare una patch ad un pacchetto RPM ? No ? Allora non continuate a leggere ;)
Per gli altri ecco come creare un patchfile delle vostre modifiche e come applicarle durante la creazione del pacchetto RPM usando rpmbuild.
Di default in una distro basata su RedHat (Fedora, CentOS, ...) viene usata la directory /usr/src/redhat come destinazione nella creazione dei pacchetti RPM. Non che non si possa ignorare il problema ma per evitare le compilazioni come superutente è probabilmente (anzi consigliato) più opportuno piazzare questa nella home del nostro utente. In questo modo, dirottando appunto tutto il processo su cartelle nella nostra home, possiamo lanciare e portare a termine il processo di compilazione/creazione evitando sia di autenticarci come root che errori tipo "permission denied".
La "location"" viene definita nella macro %_topdir che possiamo cambiare editando il file ~/.rpmmacros:
nano ~/.rpmmacros
# Path build area
%_topdir /home/steno/rpmbuild
Ora però dobbiamo anche creare la struttura necessaria :
mkdir ~/rpmbuild
cd ~/rpmbuild
mkdir BUILD RPMS SOURCES SPECS SRPMS
mkdir RPMS/i{3,4,5,6}86 RPMS/noarch RPMS/athlon
Se vogliamo ricreare un pacchetto senza apportare alcuna modifica non è nemmeno necessario installare il corrispondente pacchetto sorgente SRPM ma possiamo usarlo direttamente digitando :
rpmbuild --rebuild pacchetto-1.0.src.rpm
rpmbuild --rebuild --target i686 pacchetto-1.0.src.rpm
Se invece qualche modifica la dobbiamo fare allora dobbiamo installare i pacchetto sorgente:
rpm -ivh pacchetto-1.0.src.rpm
Se abbiamo bisogno di modificare i flag di configurazione per la successiva compilazione non c'e' bisogno di metter mano al sorgente: basta agire sullo spec file nella sezione %configure in cui in modo abbbastanza evidente vediamo cosa dobbiamo fare ;)
Siccome rpmbuild elimina i file estratti ripartendo da zero quando crea il pacchetto è meglio fare il nostro lavoro su una copia dei sorgenti dandogli un nome differente. Ad esempio se estraendo il nostro pacchetto-1.0.tar.gz viene creata una directory pacchetto-1.0, facciamone una copia chiamata pacchetto-1.0p e applichiamo qui le nostre modifiche.
In seguito, per creare una patch che contiene le nostre personalizzazioni andiamo nella direcory BUILD e usiamo il comando diff per creare il nostro patchfile nella cartella SOURCES. Siccome potrebbero esserci altri file di questo genere diamo un nome univoco al nostro magari specificando anche la natura della patch.
Usiamo diff con il parametro "-u" per ottenere un formato standard per le patches, "-N" per includere eventuali nuovi file da noi creati nella patch e "-r" per operare ricorsivamente nelle cartelle dei sorgenti :
diff -uNr pacchetto-1.0/ pacchetto-1.0p/ > ../SOURCES/pacchetto-1.0-my.patch
--- pacchetto-1.0/file Sun Sep 14 16:24:49 2008
+++ pacchetto-1.0p/file Thu Sep 18 01:24:17 2008
Ora dobbiamo istruire rpmbuild affinchè applichi la nostra patch al pacchetto risultante. Per fare questo ritorniamo al nostro specfile:
nano /home/steno/rpmbuild/SPECS/pacchetto.spec
Patch0: pacchetto-1.0-my.patch
%setup ...
%patch0 -p1
%build ...
Ora siamo pronti, possiamo ricreare il pacchetto con le nostre personalizzazioni:
rpmbuild -ba SPECS/pacchetto.spec
A parte che rileggendo questo post mi rendo conto che non ci si capisce una benemerita fava, ma porcaccia miseria, tutto stò casino per una patch ?
Bè se vogliamo che la nostra patch possa essere applicata e compilata anche da altri e se vogliamo un pacchetto RPM non c'e' molta scelta.
Forse possiamo saltare qualche piccolo passaggio ma in linea di massima il procedimento pare proprio essere questo.
Altrimenti c'e' sempre la tripletta :
./configure
make
make install
Recent comments
9 hours 6 min ago
6 weeks 1 day ago
9 weeks 6 days ago
11 weeks 3 hours ago
12 weeks 6 days ago
14 weeks 3 days ago
14 weeks 3 days ago
14 weeks 3 days ago
14 weeks 3 days ago
14 weeks 3 days ago