Website-Suche

So erstellen Sie ein GNU Hello World RPM-Paket in Fedora


RPM (ein rekursives Akronym für RPM Package Manager) ist ein kostenloses Open-Source-Paketverwaltungssystem für Linux. Obwohl es ursprünglich für die Verwendung in Red Hat Linux erstellt wurde, wird es heute in vielen Linux-Distributionen wie CentOS, Fedora und OpenSuse. Wichtig ist, dass sich der Name RPM auf das Paketmanagerprogramm bezieht und dass es sich bei .rpm um ein Dateiformat handelt.

In diesem Artikel erklären wir das Schreiben von RPM-Dateien und zeigen, wie man auf einfache Weise einfache Quell- und Binärsoftwarepakete erstellt, zum Beispiel das GNU „Hello World“-RPM-Paket in Fedora Linux Verteilung. Wir gehen davon aus, dass Sie über grundlegende Kenntnisse zu vorgefertigten RPM-Paketen und zum Erstellungsprozess kostenloser Open-Source-Software verfügen.

Installieren Sie Entwicklungstools in Fedora

Beginnen wir mit der Einrichtung der Entwicklungsumgebung in Fedora Linux, indem wir den folgenden Befehl ausführen, um die notwendigen Tools zum Erstellen von RPMs zu installieren.

sudo dnf install fedora-packager @development-tools

Fügen Sie als Nächstes Ihr nicht privilegiertes Konto wie folgt zur Gruppe „mock“ hinzu (ersetzen Sie tecmint durch Ihren tatsächlichen Benutzernamen). Dadurch können Sie den Build-Vorgang in einer sauberen Chroot testen.

sudo usermod -a -G mock tecmint

Erstellen Sie nun einen RPM-Build in Ihrem Verzeichnis ~/rpmbuild und überprüfen Sie den Build mit den folgenden Befehlen. Es wird eine Liste von Unterverzeichnissen angezeigt, die Projektquellcode, RPM-Konfigurationsdateien und Binärpakete enthält.

rpmdev-setuptree
tree ~/rpmbuild/

Hier ist, wofür jedes Verzeichnis gedacht ist:

  1. BUILD – speichert verschiedene %buildroot-Verzeichnisse, wenn Pakete erstellt werden.
  2. RPMS – enthält binäre RPMs in Unterverzeichnissen von Architecture.
  3. QUELLEN – speichert komprimierte Quellarchive und alle Patches. Hier sucht der Befehl rpmbuild nach ihnen.
  4. SPECS – speichert die SPEC-Dateien.
  5. SRPMS – speichert die Quell-RPM anstelle einer Binär-RPM.

Erstellen eines „Hello World“-RPM

In diesem Schritt müssen Sie den Quellcode (auch bekannt als „Upstream“-Quelle) des Hello World-Projekts, das wir verpacken, in die Datei ~/rpmbuild/SOURCE herunterladen Verzeichnis mit dem folgenden wget-Befehl.

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

Als nächstes konfigurieren wir das RPM-Paket mithilfe einer .spec-Datei (nennen wir sie in diesem Fall hello.spec) im Verzeichnis ~/rpmbuild/SPECS -Verzeichnis mithilfe des Programms rpmdev-newspec.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

Öffnen Sie dann die Datei hello.spec mit Ihrem bevorzugten Editor.

vim hello.spec

Die Standardvorlage sollte so aussehen:

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

Lassen Sie uns kurz die Standardparameter in einer .spec-Datei erklären:

  • Name – wird verwendet, um einen Namen für das Paket festzulegen.
  • Version – sollte den Upstream widerspiegeln.
  • Release – Nummern, mit denen Sie in Fedora arbeiten.
  • Zusammenfassung – ist eine kurze einzeilige Beschreibung des Pakets. Der erste Buchstabe sollte in Großbuchstaben geschrieben werden, um rpmlint-Beschwerden zu vermeiden.
  • Lizenz – Überprüfen Sie den Lizenzstatus der Software, indem Sie die Quelldateien und/oder ihre LIZENZdateien prüfen und/oder mit den Autoren sprechen.
  • URL – gibt die Homepage des Softwarepakets an.
  • Source0 – gibt die Quelldateien an. Dabei kann es sich um eine direkte URL oder einen Pfad zum komprimierten Quellcode der Software handeln.
  • BuildRequires – gibt die Abhängigkeiten an, die zum Erstellen der Software erforderlich sind.
  • Erfordert – gibt die Abhängigkeiten an, die zum Ausführen der Software erforderlich sind.
  • %prep – wird verwendet, um die Umgebung zum Erstellen des RPM-Pakets zu erstellen.
  • %build – wird zum Kompilieren und Erstellen der Quellcodes verwendet.
  • %install – dies wird zur Installation der Programme verwendet. Es listet die Befehle auf, die zum Kopieren der resultierenden Datei aus dem Build-Prozess in das BUILDROOT-Verzeichnis erforderlich sind.
  • %files – dieser Abschnitt listet die vom Paket bereitgestellten Dateien auf, die auf dem System installiert werden.
  • %changelog – sollte die Arbeit zur Vorbereitung des RPM speichern, insbesondere wenn zusätzlich zur Basis-Upstream-Quelle Sicherheits- und Fehlerpatches enthalten sind. Es wird automatisch beim Erstellen der hello.spec-Datei generiert. Die Changelog-Daten werden normalerweise durch rpm --changelog -q angezeigt.

Bearbeiten Sie nun Ihre .spec-Datei und nehmen Sie die Änderungen wie gezeigt vor.

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

Sie werden feststellen, dass wir in der obigen Datei einige neue Parameter verwendet haben, die nicht erklärt wurden. Diese werden als Makros bezeichnet und zum Erstellen von durch RPM definierten Systemaufrufen verwendet, um Installationspfade für Pakete festzulegen. Daher ist es in der Regel vorzuziehen, diese Pfade auch nicht in Spezifikationsdateien fest zu codieren, sondern aus Konsistenzgründen dieselben Makros zu verwenden.

Im Folgenden sind RPM-Build- und Verzeichnismakros zusammen mit ihren Definitionen und Standardwerten aufgeführt:

  • %{make_build – wird im Abschnitt %build der Spezifikationsdatei verwendet und führt den Make-Befehl aus.
  • %{name} – definiert den Paket- oder Verzeichnisnamen.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, dasselbe wie $BUILDROOT
  • %{_infodir} – %{_datarootdir}/info, Standard: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, Standard: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, Standard: /usr/bin

Beachten Sie, dass Sie die Werte für diese Makros in /usr/lib/rpm/platform/*/macros finden oder unter Verpackungsrichtlinien: RPM-Makros nachlesen können.

Erstellen des RPM-Pakets

Führen Sie den folgenden rpmbuild-Befehl aus, um die Quell-, Binär- und Debugpakete zu erstellen.

rpmbuild -ba hello.spec

Nach dem Erstellungsprozess werden die Quell-RPMs und Binär-RPMs in den Verzeichnissen ../SRPMS/ bzw. ../RPMS/ erstellt. Sie können das Programm rpmlint verwenden, um zu überprüfen und sicherzustellen, dass die erstellten Spezifikationsdateien und RPM-Dateien den RPM-Designregeln entsprechen:

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

Wenn Fehler auftreten, wie im obigen Screenshot gezeigt, beheben Sie diese, bevor Sie fortfahren können.

Zu guter Letzt überprüfen Sie mithilfe eines Mock-Programms, ob die Paketerstellung in der eingeschränkten Fedora-Build-Umgebung erfolgreich ist.

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

Weitere Informationen finden Sie in der Fedora-Dokumentation: Erstellen von RPM-Paketen.

Das ist alles! In diesem Artikel haben wir erklärt, wie Sie Ihr Fedora-System erweitern, um ein einfaches Quell- und Binärsoftwarepaket zu erstellen. Wir haben auch gezeigt, wie man ein GUN Hello Word RPM-Paket erstellt. Verwenden Sie das unten stehende Feedback-Formular, um uns für Fragen oder Kommentare zu erreichen.