doc:guides:rpm

Crear RPMs

* 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

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

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:

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

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 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.

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.

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.

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.

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

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

  • doc/guides/rpm.txt
  • Last modified: 2021/06/10 21:44
  • by 127.0.0.1