La màgia dels RPM és que en un sol fitxer SPEC s'inclouen totes les instruccions per construir un paquet. Això sí, primer cal entendre-ho, i de vegades no és fàcil ... |
Què és el fitxer SPEC?
Bàsicament, és el fitxer en el qual s'indica com construir, instal·lar i desinstal·lar el paquet.
Les instruccions que anem a donar-li es divideixen per etapes, que al seu torn són macros. Aquestes són les etapes bàsiques que hi ha:
- % prep: Es descomprimeixen les fonts i se li apliquen els pegats.
- % build: Es compilen els binaris.
- % check: Es comprova que s'hagi compilat bé.
- % install: Es realitza el simulacre d'instal·lació.
- % files: Llista tots els fitxers que apareixeran en el paquet. Se sol utilitzar també per assignar atributs. Si hi ha algun fitxer que no està llistat, no es construirà.
Alguns SPEC pot ser que no tinguin algunes de les etapes. No són d'ús obligatori.
Hi ha altres etapes que es diuen scriptlets. són especials perquè no s'executen en el moment de la construcció del paquet, sinó quan s'instal·la o desinstal. Fins i tot pots programar que s'executi un trigger quan s'instal·li un altre paquet. Aquesta és una de les grans avantatges que té RPM sobre els fitxers DEB.
El gran embolic dels RPM és que té la mateixa sintaxi per a tot. És a dir, totes aquestes paraules especials precedides d'un signe de percentatge (%) Són macros de RPM, però hi ha macros de tot tipus:
- Funcions (% setup,% configuri,% patch ...)
- Variables predefinides (% _bindir,% dist ...)
- Variables definides en el propi SPEC (% buildroot,% name,% versió ...)
- Seccions estàtiques (% description,% changelog ...)
- Etapes (% build,% install ...)
- Triggers (% triggerin,% triggerpostun ...)
- Scriptlets (% pretrans,% postun ...)
Per saber com es fa servir una determinada macro, l'única forma és consultar la documentació. Bé, en realitat sempre pots usar altres trucs com fixar-se en com està fet un SPEC d'un paquet semblant a el teu, O el mètode de prova i error. Un parell de ordres pràctics:
rpmbuild --showrc # Mostra totes les teves macros
rpmbuild --eval = "% nombre_macro" # Mostra la macro expandida
Les macros són el mateix si porten un claudàtor voltant. Si després de l'claudàtor hi ha un signe d'interrogació, quedarà en blanc si no hi ha res a expandir. Per exemple, 1% {? Dist} s'expandirà a 1.fc16 a Fedora 16, però en una altra distro es quedarà com 1.
Obrint la gana
Ja anem per la segona entrega d'aquest tutorial i encara no sabeu el que empaquetarem, així que aquí va el vídeo perquè obriu boca: