Zoeken op website

Hoe maak je een GNU Hello World RPM-pakket aan in Fedora


RPM (een recursief acroniem voor RPM Package Manager) is een gratis en open-source pakketbeheersysteem voor Linux. Hoewel het oorspronkelijk is gemaakt voor gebruik in Red Hat Linux, wordt het nu gebruikt in veel Linux-distributies zoals CentOS, Fedora en OpenSuse. Belangrijk is dat de naam RPM verwijst naar het pakketbeheerprogramma en dat .rpm een bestandsindeling is.

In dit artikel leggen we het schrijven van RPM-bestanden uit, waarbij we laten zien hoe je eenvoudig een eenvoudig broncode- en binair softwarepakket kunt maken, bijvoorbeeld het GNU “Hello World” RPM-pakket in Fedora Linux sterke> distributie. We gaan ervan uit dat u enige basiskennis heeft van vooraf gemaakte RPM-pakketten en van het bouwproces van gratis open source-software.

Installeer ontwikkelgereedschappen in Fedora

Laten we beginnen met het opzetten van de ontwikkelomgeving in Fedora Linux door het volgende commando uit te voeren om de benodigde gereedschappen voor het bouwen van RPM's te installeren.

sudo dnf install fedora-packager @development-tools

Voeg vervolgens uw niet-bevoorrechte account als volgt toe aan de groep ‘nep’ (vervang tecmint door uw daadwerkelijke gebruikersnaam). Hierdoor kunt u de bouwprocedure testen in een schone chroot.

sudo usermod -a -G mock tecmint

Maak nu een RPM-build in uw map ~/rpmbuild en verifieer de build met behulp van de volgende opdrachten. Het zal een lijst met submappen tonen, die de projectbroncode, RPM-configuratiebestanden en binaire pakketten bevat.

rpmdev-setuptree
tree ~/rpmbuild/

Hier is waar elke map voor bedoeld is:

  1. BUILD – slaat verschillende %buildroot-mappen op wanneer pakketten worden gebouwd.
  2. RPMS – bevat binaire RPM's in submappen van Architectuur.
  3. BRONNEN – slaat gecomprimeerde bronarchieven en eventuele patches op. Dit is waar het rpmbuild commando ernaar zal zoeken.
  4. SPECS – slaat de SPEC-bestanden op.
  5. SRPMS – slaat de bron-RPM op in plaats van een binaire RPM.

Een “Hello World” RPM opbouwen

In deze stap moet u de broncode (ook bekend als de “upstream” broncode) van het Hello World-project dat we aan het verpakken zijn, downloaden naar de ~/rpmbuild/SOURCE > map met de volgende wget-opdracht.

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

Laten we vervolgens het RPM-pakket configureren met behulp van een .spec-bestand (laten we het in dit geval hello.spec noemen) in de ~/rpmbuild/SPECS directory, met behulp van het programma rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Open vervolgens het bestand hello.spec met uw favoriete editor.

vim hello.spec

Het standaardsjabloon zou er als volgt uit moeten zien:

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

Laten we de standaardparameters in een .spec bestand kort uitleggen:

  • Naam – wordt gebruikt om een naam voor het pakket in te stellen.
  • Versie – zou upstream moeten spiegelen.
  • Release – nummers waarmee je binnen Fedora werkt.
  • Samenvatting – is een korte beschrijving van één regel van het pakket. De eerste letter moet een hoofdletter zijn om klachten over rpmlint te voorkomen.
  • Licentie – controleer de licentiestatus van de software door de bronbestanden en/of hun LICENTIEbestanden te inspecteren en/of door met de auteurs te praten.
  • URL – specificeert de startpagina van het softwarepakket.
  • Bron0 – specificeert de bronbestanden. Het kan een directe URL zijn of een pad naar de gecomprimeerde broncode van de software.
  • BuildRequires – specificeert de afhankelijkheden die nodig zijn om de software te bouwen.
  • Vereist – specificeert de afhankelijkheden die nodig zijn om de software uit te voeren.
  • %prep – wordt gebruikt om de omgeving te creëren voor het bouwen van het rpm-pakket.
  • %build – wordt gebruikt om de broncodes te compileren en te bouwen.
  • %install – dit wordt gebruikt om de programma's te installeren. Het vermeldt de opdracht(en) die nodig zijn om het resulterende bestand van het bouwproces naar de map BUILDROOT te kopiëren.
  • %files – deze sectie vermeldt de bestanden die door het pakket worden geleverd en die op het systeem zullen worden geïnstalleerd.
  • %changelog – zou het werk aan het voorbereiden van de RPM moeten opslaan, vooral als er beveiligings- en bugpatches zijn opgenomen bovenop de upstream-basisbron. Het wordt automatisch gegenereerd tijdens het maken van het hello.spec-bestand. De changelog-gegevens worden gewoonlijk weergegeven als rpm --changelog -q .

Bewerk nu uw .spec-bestand en breng wijzigingen aan zoals weergegeven.

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

U zult merken dat we in het bovenstaande bestand enkele nieuwe parameters hebben gebruikt die nog niet zijn uitgelegd. Deze worden macro's genoemd en worden gebruikt om systeemaanroepen te bouwen die zijn gedefinieerd door RPM om installatiepaden voor pakketten in te stellen. Daarom verdient het meestal de voorkeur om deze paden ook niet hard te coderen in spec-bestanden, maar dezelfde macro's te gebruiken voor consistentie.

Hieronder volgen RPM-build- en mapmacro's, samen met hun definities en standaardwaarden:

  • %{make_build – wordt gebruikt in de %build sectie van het spec-bestand, het voert de make-opdracht uit.
  • %{name} – definieert de pakket- of mapnaam.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, hetzelfde als $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, standaard: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, standaard: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, standaard: /usr/bin

Houd er rekening mee dat u de waarden voor deze macro's kunt vinden in /usr/lib/rpm/platform/*/macros of raadpleeg Packaging Guidelines:RPM Macros.

Het RPM-pakket bouwen

Om de broncode-, binaire en foutopsporingspakketten te bouwen, voert u de volgende rpmbuild-opdracht uit.

rpmbuild -ba hello.spec

Na het bouwproces worden de bron-RPM's en binaire RPM's respectievelijk aangemaakt in de mappen ../SRPMS/ en ../RPMS/. U kunt het rpmlint-programma gebruiken om te controleren en ervoor te zorgen dat het gemaakte spec-bestand en de gemaakte RPM-bestanden voldoen aan de RPM-ontwerpregels:

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

Als er fouten optreden zoals weergegeven in de bovenstaande schermafbeelding, herstel deze dan voordat u verder kunt gaan.

Tenslotte, maar daarom niet minder belangrijk, gebruik nepprogramma om te controleren of het bouwen van het pakket zal slagen in de beperkte Fedora-bouwomgeving.

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

Voor meer informatie, raadpleeg de Fedora documentatie: RPM-pakketten creëren.

Dat is alles! In dit artikel hebben we uitgelegd hoe je je Fedora systeem kunt uitbreiden om een eenvoudig bron- en binair softwarepakket te maken. We hebben ook laten zien hoe u een GUN Hello Word RPM-pakket kunt maken. Gebruik het onderstaande feedbackformulier om ons te bereiken voor eventuele vragen of opmerkingen.