Com crear un paquet GNU Hello World RPM a Fedora


sistema de gestió de paquets per a Linux. Tot i que originalment es va crear per utilitzar-lo a Red Hat Linux, ara s'utilitza en moltes distribucions de Linux com CentOS, Fedora i OpenSuse. És important destacar que el nom RPM fa referència al programa gestor de paquets i el .rpm és un format de fitxer.

En aquest article, explicarem com escriure fitxers RPM, mostrant com crear fàcilment una font simple i paquets de programari binari, per exemple, el paquet RPM GNU Hello World a la distribució Fedora Linux. Suposem que teniu una comprensió bàsica dels paquets RPM prefabricats i amb el procés de creació de programari lliure de codi obert.

Instal·leu les eines de desenvolupament a Fedora

Comencem configurant l'entorn de desenvolupament a Fedora Linux executant l'ordre següent per instal·lar les eines necessàries per crear RPM.

$ sudo dnf install fedora-packager @development-tools

A continuació, afegiu el vostre compte no privilegiat al grup simulat de la manera següent (substituïu tecmint pel vostre nom d'usuari real). Això us permetrà provar el procediment de compilació en un chroot net.

$ sudo usermod -a -G mock tecmint

Ara, creeu una compilació RPM al vostre directori ~/rpmbuild i verifiqueu la compilació utilitzant les ordres següents. Mostrarà una llista de subdirectoris, que conté el codi font del projecte, fitxers de configuració RPM i paquets binaris.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

A continuació s'explica per a què està destinat cada directori:

  1. BUILD: emmagatzema diversos directoris %buildroot quan es construeixen paquets.
  2. RPMS: contindrà RPM binaris als subdirectoris d'Arquitectura.
  3. FONTS: emmagatzema els arxius font comprimits i qualsevol pedaç, aquí és on els cercarà l'ordre rpmbuild.
  4. SPECS: emmagatzema els fitxers SPEC.
  5. SRPMS: emmagatzema l'RPM font en lloc d'un RPM binari.

Construint un RPM Hello World.

En aquest pas, heu de descarregar el codi font (també conegut com a font amunt) del projecte Hello World que estem empaquetant, al directori ~/rpmbuild/SOURCE amb la següent comanda wget.

$ cd ~/rpmbuild/SOURCES
$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

A continuació, configurem el paquet RPM utilitzant un fitxer .spec (en aquest cas, anomenem-lo hello.spec) al directori ~/rpmbuild/SPECS, utilitzant el fitxer rpmdev- programa de novetats.

$ cd ~/rpmbuild/SPECS
$ rpmdev-newspec hello
$ ls

A continuació, obriu el fitxer hello.spec amb el vostre editor preferit.

$ vim hello.spec

La plantilla predeterminada hauria de ser així:

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

Expliquem breument els paràmetres per defecte en un fitxer .spec:

  • Nom: s'utilitza per definir un nom per al paquet.
  • Versió: hauria de reflectir aigües amunt.
  • Alliberament: números que treballeu a Fedora.
  • Resum: és una breu descripció d'una línia del paquet, la primera lletra ha d'estar en majúscula per evitar queixes de rpmlint.
  • Llicència: comproveu l'estat de la llicència del programari inspeccionant els fitxers font i/o els seus fitxers de LLICÈNCIA i/o parlant amb els autors.
  • URL: especifica la pàgina d'inici del paquet de programari.
  • Source0: especifica els fitxers font. Pot ser un URL directe o una ruta del codi font comprimit del programari.
  • BuildRequires: especifica les dependències necessàries per crear el programari.
  • Requereix: especifica les dependències necessàries per executar el programari.
  • %prep: s'utilitza per crear l'entorn per construir el paquet rpm.
  • %build: s'utilitza per compilar i construir els codis font.
  • %install: s'utilitza per instal·lar els programes. Llista les ordres necessàries per copiar el fitxer resultant del procés de creació al directori BUILDROOT.
  • %files: aquesta secció enumera els fitxers proporcionats pel paquet, que s'instal·laran al sistema.
  • %changelog: hauria d'emmagatzemar el treball de preparació de l'RPM, especialment si hi ha pedaços de seguretat i errors inclosos a la part superior de la font aigües amunt base. Es genera automàticament mentre es crea el fitxer hello.spec. Les dades del registre de canvis solen mostrar-se mitjançant rpm --changelog -q .

Ara editeu el vostre fitxer .spec i feu els canvis tal com es mostra.

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{make_build}

%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir

%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi

%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

Notareu que hem utilitzat alguns paràmetres nous al fitxer anterior que no s'han explicat. S'anomenen macros, que s'utilitzen per crear invocacions del sistema definides per RPM per establir camins d'instal·lació per als paquets. Per tant, normalment és preferible no codificar aquests camins tampoc als fitxers d'especificacions, però utilitzar les mateixes macros per a la coherència.

A continuació es mostren macros de compilació i directori RPM juntament amb les seves definicions i valors predeterminats:

  • %{make_build}: s'utilitza a la secció %build del fitxer d'especificacions, executa l'ordre make.
  • %{name}: defineix el nom del paquet o del directori.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, igual que $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, per defecte: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, per defecte: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, per defecte: /usr/bin

Tingueu en compte que podeu trobar els valors d'aquestes macros a /usr/lib/rpm/platform/*/macros o consultar Pautes d'embalatge: Macros RPM.

Construcció del paquet RPM

Per crear els paquets font, binaris i de depuració, executeu la següent comanda rpmbuild.

$ rpmbuild -ba hello.spec

Després del procés de creació, els RPM font i els RPM binaris es crearan als directoris ../SRPMS/ i ../RPMS/ respectivament. Podeu utilitzar el programa rpmlint per comprovar i assegurar-vos que el fitxer d'especificacions i els fitxers RPM creats compleixen les regles de disseny RPM:

$ rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

Si hi ha errors com es mostra a la captura de pantalla anterior, solucioneu-los abans de continuar.

Per últim, però no menys important, utilitzeu un programa simulat per comprovar que la construcció del paquet tindrà èxit a l'entorn de compilació restringit de Fedora.

$ mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

Per a més informació, consulteu la documentació de Fedora: Creació de paquets RPM.

Això és tot! En aquest article, hem explicat com augmentar el vostre sistema Fedora per crear una font senzilla i un paquet de programari binari. També vam mostrar com crear un paquet RPM GUN Hello Word. Utilitzeu el formulari de comentaris a continuació per posar-vos en contacte amb nosaltres per a qualsevol pregunta o comentari.