rpmbuild --rebuild: compilar paquets .src.rpm | Iespai

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

  1. Instal·la el .src.rpm al teu arbre de compilació, ~/rpmbuild/ (codi font a SOURCES/, recepta a SPECS/).
  2. 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).
  3. Empaqueta el resultat a ~/rpmbuild/RPMS/<arquitectura>/.
  4. 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
--rebuildCompila un .src.rpm i en crea els paquets binaris (equival a -rb)
--recompileFa %prep, %build i %install d’un .src.rpm, però no crea paquets
-ba fitxer.specA partir d’un .spec: crea el paquet de codi font i els binaris
-bb fitxer.specA partir d’un .spec: només els paquets binaris
-bs fitxer.specA partir d’un .spec: només el .src.rpm
-bp fitxer.specNomés la fase %prep: descomprimeix el codi i aplica els pedaços (per mirar-lo o modificar-lo)
-ta fitxer.tar.gzCom -ba, però amb un .tar.gz que porta el .spec a dins
--nocheckSe salta la fase %check (les proves)
--define 'macro valor'Defineix una macro, per exemple --define 'debug_package %{nil}' per no generar el debuginfo
--target arquitecturaCompila 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

Esta web usa cookies.