La comanda rpmbuild –rebuild a Linux: compilar un paquet .src.rpm
La comanda rpmbuild --rebuild paquet.src.rpm compila un paquet de codi font (.src.rpm) i en genera els paquets binaris (.rpm) llestos per instal·lar. Es fa servir quan necessites un paquet per a una arquitectura o versió de la distribució que no el té compilat, quan vols aplicar-hi un pedaç, o quan vols canviar-ne les opcions de compilació.
Un .src.rpm (o SRPM) conté el codi font original, els pedaços de la distribució i el fitxer .spec, que és la recepta: com es compila, què s’instal·la i quines dependències té.
Sintaxi
rpmbuild --rebuild [opcions] paquet.src.rpm rpmbuild és al paquet rpm-build (sudo dnf install rpm-build). No el facis servir com a root: un error al .spec podria escriure fitxers al sistema. Compila sempre amb un usuari normal.
Què fa --rebuild
- Instal·la el
.src.rpmal teu arbre de compilació,~/rpmbuild/(codi font aSOURCES/, recepta aSPECS/). - Executa les fases del
.spec:%prep(descomprimeix i aplica els pedaços),%build(compila),%install(instal·la en un directori temporal) i%check(proves, si n’hi ha). - Empaqueta el resultat a
~/rpmbuild/RPMS/<arquitectura>/. - Esborra els fitxers temporals.
En versions antigues de Red Hat l’arbre de compilació era /usr/src/redhat/; avui és ~/rpmbuild/ de cada usuari (ho pots comprovar amb rpm --eval '%_topdir').
Exemple
A Rocky Linux 9, recompilar el paquet tree:
# Eines i dependències de compilació
sudo dnf install rpm-build dnf-plugins-core gcc make
# Descarregar el paquet de codi font
dnf download --source tree
# Compilar
rpmbuild --rebuild tree-pkg-1.8.0-10.el9.src.rpm Al final de la sortida veuràs on ha deixat els paquets:
Wrote: /home/joan/rpmbuild/RPMS/aarch64/tree-1.8.0-10.el9.aarch64.rpm
Wrote: /home/joan/rpmbuild/RPMS/aarch64/tree-debuginfo-1.8.0-10.el9.aarch64.rpm
...
+ exit 0 $ ls ~/rpmbuild/RPMS/aarch64/
tree-1.8.0-10.el9.aarch64.rpm
tree-debuginfo-1.8.0-10.el9.aarch64.rpm
tree-pkg-debugsource-1.8.0-10.el9.aarch64.rpm El paquet bo és el primer. Els debuginfo i debugsource contenen els símbols de depuració i només els necessites per depurar el programa amb gdb. Per instal·lar-lo:
sudo dnf install ~/rpmbuild/RPMS/aarch64/tree-1.8.0-10.el9.aarch64.rpm Si falten dependències de compilació
Si el .spec necessita biblioteques que no tens, rpmbuild s’atura amb un error: Failed build dependencies:. dnf les pot instal·lar totes de cop, llegint-les del mateix .src.rpm:
sudo dnf builddep tree-pkg-1.8.0-10.el9.src.rpm A RHEL, Rocky i AlmaLinux moltes dependències de desenvolupament són al repositori CRB (sudo dnf config-manager --set-enabled crb).
Opcions més útils
| Opció | Què fa |
|---|---|
--rebuild | Compila un .src.rpm i en crea els paquets binaris (equival a -rb) |
--recompile | Fa %prep, %build i %install d’un .src.rpm, però no crea paquets |
-ba fitxer.spec | A partir d’un .spec: crea el paquet de codi font i els binaris |
-bb fitxer.spec | A partir d’un .spec: només els paquets binaris |
-bs fitxer.spec | A partir d’un .spec: només el .src.rpm |
-bp fitxer.spec | Només la fase %prep: descomprimeix el codi i aplica els pedaços (per mirar-lo o modificar-lo) |
-ta fitxer.tar.gz | Com -ba, però amb un .tar.gz que porta el .spec a dins |
--nocheck | Se salta la fase %check (les proves) |
--define 'macro valor' | Defineix una macro, per exemple --define 'debug_package %{nil}' per no generar el debuginfo |
--target arquitectura | Compila per a una altra arquitectura (si l’entorn ho permet) |
Atenció: les opcions -b… treballen amb un fitxer .spec, no amb un .src.rpm. La versió anterior d’aquest post deia el contrari, i també confonia el que fan -ta i -bb.
Modificar un paquet abans de compilar-lo
Si vols aplicar-hi un canvi, en lloc de --rebuild fes el procés en dos passos:
# 1. Instal·la el codi font a ~/rpmbuild (no cal sudo)
rpm -ivh tree-pkg-1.8.0-10.el9.src.rpm
# 2. Edita la recepta (puja el número de Release, afegeix un pedaç a SOURCES...)
vi ~/rpmbuild/SPECS/tree-pkg.spec
# 3. Compila des del .spec
rpmbuild -ba ~/rpmbuild/SPECS/tree-pkg.spec Compilar en un entorn net: mock
rpmbuild compila amb el que tens instal·lat, de manera que el resultat pot dependre de la teva màquina. Per a paquets que han d’anar a altres servidors, Fedora i EPEL fan servir mock, que compila dins d’un entorn aïllat i net per a la versió de la distribució que triïs (mock -r rocky-9-x86_64 --rebuild paquet.src.rpm). Està al repositori EPEL.
Comandes relacionades
- La comanda rpm: instal·lar i consultar els paquets que has compilat.
rpm2cpio: mirar què hi ha dins d’un.rpmsense instal·lar-lo.yumidnf:dnf download --sourceidnf builddep.- La gestió de paquets a Linux: visió general.
Esta web usa cookies.