Crear RPMs
Ingredients
* L'eina rpm i (per RPM>4.1) rpmbuild * Els fonts del software * Tenir instal·lat tot el que necessiti el software (això pot requerir forces paquets més, generalment *-devel
Previ
La construcció d'RPMs pot ser molt fàcil o molt complexa depenent del software que vols empaquetar, el temps que vulguis invertir-hi i els teus coneixements. No entraré en detalls, aquesta recepta està pensada principalment com a xuleta meva. Per més informació mira la secció de enllaços
Verificar l'estat dels ingredients
Abans de posar-nos a fer el paquet farem una construcció 'manual' d'aquest compilant els fonts per verificar que compila correctament i si necessitem algunes opcions especials. Evidentment els fitxers README o INSTALL que vagin amb el software poden ser de molta ajuda. Exemple:
$ ./configure --prefix=/usr $ make DESTDIR=/tmp/proves $ make DESTDIR=/tmp/proves
Enlloc de /usr com a prefix posarem el directori on volem que s'instal·li el paquet definitiu. El directori /tmp/proves és un directori temporal buit on instal·larem els fitxers per no interferir amb el sistema. És important:
Notes
- Examina el fonts per si ja porten un fitxer .spec fet i guarda'l a part
- Anotar les opcions que necessitem del configure (provar primer un ./configure –help
- Anotar requeriments 'extranys' que mostri el configure
- Si cal tocar els fonts fer un patch per cada canvi
- Anotar la llista de fitxers que instal·la. (Truc: find /tmp/proves -type f)
Preparar els ingredients
Ara posa els fonts (el tarball comprimit) i els patchs que hagis necessitat al directori /usr/src/packages/SOURCES, si ja tens un fitxer .spec va al subdirectori SPECS
La clau: el fitxer .spec
La clau de tot està en el fitxer .spec, que regeix les característiques que tindrà el paquet. Les opcions que té són nombroses i variades, i la majoria són bastant autocomentades o evidents, aquí només comentaré les més importants o crítiques.
Explicar el fitxer .spec dona per una altra recepta sencera, tot i així no m'extendré i suposaré que et saps autodocumentar i ets autodidacte i estàs fent un paquet per un software força simple. A grans trets, un fitxer .spec conté uns quants camps amb informació del paquets (nom, versió, categories, autor, requeriments, …) i una seqüència de passos (gairebé idèntics als manuals) per generar i instal·lar els binaris com si féssim un script.
Dependències
La gestió de dependències és capaç de fer-la sol el mateix RPM. Però nosaltres podem forçar-ne algunes (fins i tot especificar paquets virtuals o números de versió). Aquí n'hi ha un resum:
BuildRequires | Marca què es necessita per compilar/construïr el paquet |
Requires | Què requereix el paquet per instal·lar-se |
Obsoletes | Paquets que queden obsolets (s'actualitzen amb aquest) |
Conflicts | Paquets que entren amb conflicte amb aquest. (No poden co-existir en el sistema). |
Cal fer notar que enlloc li diem quins paquets 'actualitza' ja que RPM ho pressuposa a partir del nom, és a dir si un paquet es diu X actualitzarà qualsevol versió de X que hi hagi al sistema. RPM elimina la versió per fer aquesta comparació, aquesta característica (que el distingueix per exemple del format DEB) té els seus avantatges i inconvenients: Per exemple les llibreries DB o el mateix GTK codifiquen en el nom la versió (per exemple db3 o db4 i gtk2) per poder tenir diverses versions instal·lades en el sistema.
Fitxers instal·lats
La secció %files ha de contenir la llista de tots els fitxers amb el path absolut que tindran un cop instal·lats que instal·la el paquet i el tipus (configuració, documentació, …). És important marcar el tipus d'almenys els fitxers de configuració i documentació, ja que permetrà no instal·lar la documentació (per estalviar espai per exemple) i les posteriors actualitzacions del paquet no sobreescriuran canvis de configuració. Hi ha una macro per cada tipus i es poden especificar permisos i propietaris dels fitxers.
Procediment
Cuinant el nou paquet
Si s'ha fet la preparació correctament aquesta part és molt simple, només cal deixar la feina a rpmbuild per que construeixi el paquet:
rpmbuild -ba SPECS/fitxer.spec
Crearà dos paquets un i?86.rpm i un .src.rpm, aquest últim és simplement els fonts, els patches i el fitxer .spec, però és important guardar-lo ja que a partir d'ell es poden fer noves versions o canvis al paquet molt fàcilment.
Consells i trucs
Per generar la llista de fitxers i posar-la en l'spec
# cd $RPM_BUILDROOT # find . -type f | sed 's%^.%$DESTDIR%' >> /usr/src/packages/SPECS/fitxer.spec
Paquet virtual
Un paquet virtual és un paquet que no existeix com a tal, sinó que és un servei o característica que proporciona un altre paquet. Exemples típics són el smtp_daemon que l'ofereixen tant postfix com sendmail o webserver que tant l'ofereix apache (httpd) com roxen).