Wéi erstellen ech e GNU Hello World RPM Package zu Fedora


Package Management System fir Linux. Och wann et ursprénglech erstallt gouf fir am Red Hat Linux ze benotzen, gëtt et elo a ville Linux Verdeelungen wéi CentOS, Fedora, an OpenSuse benotzt. Wichteg ass, den Numm RPM bezitt sech op de Package Manager Programm an de .rpm ass e Dateiformat.

An dësem Artikel erkläre mir iwwer RPM-Dateien ze schreiwen, ze weisen wéi einfach eng einfach Quell a binär Software Packagen erstellen, zum Beispill GNU Hello World RPM Package an der Fedora Linux Verdeelung. Mir huelen un datt Dir e puer Basisverständnis vu pre-made RPM Packagen hutt, a mam Bauprozess vum Free Open Source Software.

Installéiert Entwécklungsinstrumenter a Fedora

Loosst eis ufänken mat der Entwécklungsëmfeld an Fedora Linux opzestellen andeems Dir de folgende Kommando ausféiert fir déi néideg Tools fir RPMs ze bauen.

$ sudo dnf install fedora-packager @development-tools

Als nächst füügt Ären net-privilegiéierte Kont un de 'Mock' Grupp wéi follegt (ersetzt tecmint mat Ärem aktuellen Benotzernumm). Dëst erlaabt Iech d'Bauprozedur an engem propperem Chroot ze testen.

$ sudo usermod -a -G mock tecmint

Erstellt elo en RPM Build an Ärem ~/rpmbuild Verzeichnis a verifizéiert de Build mat de folgende Kommandoen. Et wäert eng Lëscht vun Ënner-Verzeichnungen weisen, déi de Projet Quellcode, RPM Konfiguratiounsdateien a binäre Packagen enthält.

$ rpmdev-setuptree
$ tree ~/rpmbuild/

Hei ass wat all Verzeichnis geduecht ass:

  1. BUILD - späichert verschidde %buildroot Verzeichnisser wann Packagen gebaut ginn.
  2. RPMS - wäert binär RPMs an Ënnerverzeechnunge vun der Architektur enthalen.
  3. SOURCES - späichert kompriméiert Quellarchiven an all Patches, dat ass wou de Kommando rpmbuild no se sicht.
  4. SPECS - späichert d'SPEC Dateien.
  5. SRPMS - späichert d'Quell RPM amplaz vun engem binäre RPM.

Bauen eng Hallo Welt RPM

An dësem Schrëtt musst Dir de Quellcode eroflueden (och bekannt als upstream Quell) vum Hello World Projet dee mir packen, an de ~/rpmbuild/SOURCE Verzeechnes mat dem folgenden wget Kommando.

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

Als nächst, loosst eis den RPM Package mat enger .spec Datei konfiguréieren (loosst eis et hello.spec an dësem Fall nennen) am ~/rpmbuild/SPECS Verzeichnis, mam rpmdev- newspec Programm.

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

Da öffnen d'hello.spec Datei mat Ärem Liiblingseditor.

$ vim hello.spec

D'Standard Schabloun soll esou ausgesinn:

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

Loosst eis kuerz d'Standardparameter an enger .spec Datei erklären:

  • Numm - benotzt fir en Numm fir de Package ze setzen.
  • Versioun - soll upstream spigelen.
  • Verëffentlechung - Zuelen déi Dir bannent Fedora schafft.
  • Zesummefaassung - ass eng kuerz Zeilbeschreiwung vum Package, den éischte Buschtaf soll grouss Buschtawen sinn fir Rpmlint Reklamatiounen ze vermeiden.
  • Lizenz - kontrolléiert de Lizenzstatus vun der Software andeems Dir d'Quelldateien an/oder hir LICENSE-Dateien iwwerpréift, an/oder andeems Dir mat den Auteuren schwätzt.
  • URL - spezifizéiert d'Homepage vum Softwarepaket.
  • Source0 - spezifizéiert d'Quelldateien. Et kann eng direkt URL oder e Wee vum kompriméierte Quellcode vun der Software sinn.
  • BuildRequires - spezifizéiert d'Ofhängegkeete fir d'Software ze bauen.
  • Verlaangt - spezifizéiert d'Ofhängegkeete fir d'Software ze lafen.
  • %prep - gëtt benotzt fir d'Ëmfeld ze kreéieren fir den rpm Package ze bauen.
  • %build - gëtt benotzt fir d'Quellcoden ze kompiléieren an ze bauen.
  • %install - dëst gëtt benotzt fir d'Programmer z'installéieren. Et listet Kommando(en) déi néideg sinn fir déi resultéierend Datei vum Buildprozess an de BUILDROOT Verzeichnis ze kopéieren.
  • % Dateien - dës Sektioun lëscht d'Fichier'en, déi vum Package geliwwert ginn, déi um System installéiert ginn.
  • %changelog - soll d'Aarbecht bei der Virbereedung vun der RPM späicheren, besonnesch wann et Sécherheets- a Bugspatches uewen op der Basis Upstream Quell abegraff sinn. Et gëtt automatesch generéiert beim Schafe vun der hello.spec Datei. D'Ännerungslogdaten ginn normalerweis duerch rpm --changelog -q ugewisen.

Ännert elo Är .spec Datei a maacht Ännerungen wéi gewisen.

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

Dir wäert feststellen datt mir e puer nei Parameteren an der uewen Datei benotzt hunn déi net erkläert goufen. Dës ginn Makroen genannt, benotzt fir Systeminvokatiounen ze bauen, definéiert vun RPM fir Installatiounsweeër fir Packagen ze setzen. Dofir ass et normalerweis léiwer dës Weeër och a Spezifizéierungsdateien net schwéier ze codéieren, awer déiselwecht Makroen fir Konsistenz ze benotzen.

Déi folgend sinn RPM Build a Verzeechnes Makroen zesumme mat hiren Definitiounen an Default Wäerter:

  • %{make_build} – gëtt an der %build Sektioun vun der Spezifizéierungsdatei benotzt, et leeft de Make Kommando.
  • %{name} – definéiert Package oder Verzeechnesnumm.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, selwecht wéi $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, default: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, default: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, default: /usr/bin

Bedenkt datt Dir d'Wäerter fir dës Makroen an den /usr/lib/rpm/platform/*/macros fannt oder op Packaging Guidelines:RPM Macros kuckt.

Baut de RPM Package

Fir d'Quell, binär an Debugging Packagen ze bauen, fuert de folgenden rpmbuild Kommando.

$ rpmbuild -ba hello.spec

Nom Bauprozess ginn d'Quell RPMs a binär RPMs an den ../SRPMS/ an ../RPMS/ Verzeichnisser respektiv erstallt. Dir kënnt den rpmlint Programm benotzen fir ze kontrolléieren an sécherzestellen datt d'Spezifikatiounsdatei an d'RPM-Dateien erstallt mat RPM Designregelen entspriechen:

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

Wann et Feeler wéi am uewe genannte Screenshot gewisen, fixéiert se ier Dir weidergoe kënnt.

Lescht awer net zulescht, benotzt Mock Programm fir ze kontrolléieren datt de Package Build am Fedora limitéierter Build Ëmfeld geléngt.

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

Fir méi Informatioun, konsultéiert d'Fedora Dokumentatioun: RPM Packagen erstellen.

Dat ass alles! An dësem Artikel hu mir erkläert wéi Dir Äre Fedora System eropgeet fir en einfache Quell a binäre Software Package ze kreéieren. Mir hunn och gewisen wéi een e GUN Hello Word RPM Package erstellt. Benotzt de Feedbackformular hei ënnen fir eis fir all Froen oder Kommentarer z'erreechen.