So erstellen Sie ein Drehzahlpaket

So erstellen Sie ein Drehzahlpaket

RPM ist sowohl der Paketmanager als auch das Paketformat, das von vielen Linux -Verteilungen wie Fedora, Red Hat und CentOS verwendet wird, um Software in Binärform zu verwalten und zu verteilen. In diesem Tutorial sehen wir, wie Sie eine einfache Anwendung erstellen und verpacken können.

In diesem Tutorial lernen Sie:

  • Was sind die grundlegenden Konzepte hinter dem Drehbuchbauprozess.
  • Was ist die Bauumgebung?.
  • Was ist eine Spezifile.
  • So verwenden Sie Makros in einem Specfile.
  • So installieren Sie die Build -Abhängigkeiten.
  • So erstellen Sie eine Spezifile.
  • So erstellen Sie ein Drehzahlpaket.

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Fedora 29
Software N / A
Andere Privilegierter Zugriff auf Ihr Linux -System als Root oder über die sudo Befehl zur Installation der erforderlichen Pakete.
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

RPM grundlegende Konzepte

Installieren, Entfernen, Aktualisieren, (in einem Wort, Verwaltung) Software ist in jedem Betriebssystem eine wesentliche Aufgabe. Wenn Paketmanager keine Sache waren, bestand die einzige Möglichkeit, ein Programm zu installieren. Es war wirklich schwierig und zeitaufwändig, die Abhängigkeiten jedes Code -Stücks zu verfolgen. Dann wurden Paketmanager eingeführt, und alles wurde einfacher.

Jede moderne Linux -Verteilung hat heutzutage ihren Paketmanager: Debian und seine Derivate verwendet dpkg, während
Drehzahl wird in der Red Hat -Familie der Verteilungen verwendet. Software wird in Form von vorgefertigt Pakete, Dies sind im Grunde genommen komprimierte Archive, die Metadaten über die Softwareversion, ihre Abhängigkeiten und mögliche Konflikte mit anderen Paketen enthalten.



In diesem Tutorial sehen wir, wie Sie ein RPM -Paket aus einem Anwendungsquellcode erstellen können. Die Anwendung, die wir verpacken, ist Feh, Ein einfacher Befehlszeilenbild -Betrachter: Es ist ziemlich klein und hat nur wenige Abhängigkeiten. Bevor wir anfangen, unser erstes Paket aufzubauen, sollten wir jedoch einige wesentliche Konzepte erfassen.

Die Bauumgebung

Die Wurzel eines Drehzahlbauumgebungsbaums ist der rpmbuild Verzeichnis, das 6 Unterverzeichnisse enthält: BAUEN, Bauroot, Drehzahl, Quellen, Spezifikationen Und Srpms. Wir werden sehen, wie möglich, diese Umgebung zu generieren, indem wir einen einfachen Befehl starten. Lassen Sie uns vorerst die Rolle dieser Verzeichnisse erwähnen. Hier ist eine Darstellung des Arbeitsbaums:

 rpmbuild |- Build |- Buildroot |- RPMS |- Quellen |- Spezifikationen |- SRPMS 

Jedes dieser Verzeichnisse spielt eine spezifische Rolle im Bauprozess:

  • Der BAUEN In Verzeichnis wird der Quellcode des Programms, das wir verpacken möchten, erstellt
  • Der Bauroot In Verzeichnis werden die Dateien, die sich aus der Zusammenstellung der Software im Build -Verzeichnis ergeben, kopiert, wobei die Struktur des Zielsystems in einem Unterverzeichnis mit dem Paket -MAME widerspiegelt:
    In unserem Fall die „FEH“ -Kinärin, die in installiert werden würde /usr/Bin wird als Buildroot/FEH-3 gemeldet.0-1.FC29.x86_64/usr/bin/bin.
  • Der Drehzahl Verzeichnis ist wo Drehzahl Pakete werden generiert: Jede Drehzahl wird in ein Unterverzeichnis platziert
    nach seiner Architektur benannt, oder, Keinarch Wenn es nicht architekturspezifisch ist.
  • Der Quellen Das Verzeichnis hostet den komprimierten Quellcode der Software, die wir verpacken möchten, häufig in Form eines Tarballs einer ZIP -Datei.
  • Der Spezifikationen Verzeichnis ist, wo wir das setzen .Spezifikation Datei mit den Anweisungen zum Erstellen unseres Pakets: Wir werden die Struktur dieser Datei in einem Moment analysieren.
  • Der Srpms Das Verzeichnis ist das Äquivalent zu RPMs, jedoch für Quell -RPMs. Diese Spezialpakete enthalten den ursprünglichen Quellcode der Anwendung, spätere Patches und die zum Erstellen des Pakets verwendeten Speclape.

Die Spezifikationsdatei

Die Datei, in der alle Anweisungen und Informationen zum Erstellen eines RPM -Pakets definiert sind, ist die .Spezifikation Datei. Ein Spezifil enthält unter den anderen Dingen die Abhängigkeiten bauen (Die Software, die zum Kompilieren des Programms, das wir verpacken möchten, benötigt), die Laufzeitabhängigkeiten (Die Bibliotheken, die das Programm korrekt ausführen benötigen) und die Ommands, die ausgeführt werden sollten, um die Software zu kompilieren.



Die Datei wird durch zwei Makroschnitte komponiert: a Präambel und das Körper. In jedem dieser Abschnitte können unterschiedliche Anweisungen angegeben werden. Lassen Sie uns einige von ihnen sehen. Der Präambel Der Abschnitt kann die folgenden Anweisungen enthalten:

    • Name: Der Grundname des Pakets (dies sollte mit dem Namen der Spezifikationsdatei übereinstimmen)
    • Ausführung: Die vorgelagerte Version der verpackten Software
    • Freigeben: Die Veröffentlichungsnummer des Pakets
    • Lizenz: Die Lizenz, die für die Software verwendet wird, die wir verpacken möchten
    • URL: Die vorgelagerte URL der Software
    • Quelle0: Die direkte URL oder der Pfad des komprimierten Quellcodes der Software (Tarball- oder Reißverschlussdatei)
    • Buildarch: Die Architektur des Pakets: Wenn keine Architektur angegeben ist, wird der des Host -Systems verwendet
    • BuildRequires: Die Abhängigkeiten, die zum Erstellen der Software erforderlich sind
    • Erfordert: Die Abhängigkeiten, die für die Ausführung der Software erforderlich sind

Der Körper Der Abschnitt des Speclape enthält typischerweise die folgenden Abschnitte:

  • %Beschreibung: Eine optional mehrzeilige Beschreibung der verpackten Software
  • %prep: Die Befehl (n), die zur Erstellung des Quellcodes erforderlich sind (z. B. die Befehle, die zum Extrahieren eines Tarballs erforderlich sind)
  • %bauen: Die Befehl (en), die zum Erstellen der Software erforderlich sind
  • %Installieren: Die Befehl (n), die zum Kopieren der aus dem erstellten Vorgang resultierenden Datei zum Kopieren von Kopie auf die Bauroot Verzeichnis
  • %Dateien: Die Liste der vom Paket bereitgestellten Dateien, die auf dem System installiert wird

Makros

Um unsere Arbeit zu erleichtern, können wir in einem Specfile einige Makros verwenden, mit denen wir viele nützliche Dinge verweisen und bestimmte Aufgaben automatisch ausführen können. Erstens haben wir das RPM -Verzeichnis Makros die die Verweise auf die Verzeichnisse unserer Build -Umgebung verwenden lassen; Wir sollten sie immer anstelle von direkten Pfaden verwenden:

  • %_ TOPDIR: Dieser Makro bezieht sich auf die rpmbuild Verzeichnis
  • %_ BuildDir: Verweist auf BAUEN Verzeichnis in unserem Build -Baum
  • %_ rpmdir: Verweist auf den Pfad der Drehzahl Verzeichnis
  • %_ Sourcedir: Dieses Makro wird auf den Weg des Weges bewertet Quellen Verzeichnis
  • %_ SpecDir: Ein Makro, das den Weg des Weges darstellt Spezifikationen Verzeichnis
  • %_ srcrpmdir: Verweist auf den Pfad von Srpms Verzeichnis
  • %_ Buildrootdir: Verweist auf den Pfad der Bauroot Verzeichnis

Andere Makros lassen uns auf die wichtigsten Verzeichnisse in unserem Maschinen -Dateisystem verweisen, zum Beispiel:

  • %_ sysconfigdir: Der /usw Verzeichnis
  • %_Präfix: Der /usr Verzeichnis
  • %_ Bindir: Der /usr/Bin Verzeichnis
  • %_ Mandir: Der Weg zum Weg zum /usr/share/mann Verzeichnis

Der oben genannte ist keine vollständige Liste, aber es gibt Ihnen eine Idee. Zusätzlich können wir auch einen Satz von Makros verwenden, die bestimmte Aufgaben ausführen. Um die Definition eines Makros zu erweitern und so den Inhalt zu sehen, können wir die verwenden Drehzahl -Event Befehl, das das Makro als Argument nimmt. Hier sind einige Beispiele für häufig verwendete Makros:



  • Der %aufstellen Makro wird in der verwendet %config Abschnitt des Speclape und führt im Grunde die folgenden Aktionen aus:
    1. Extrahiert den Quellcode des Programms, den wir in die verpacken möchten Builddir Verzeichnis
    2. Schaltet in das extrahierte Verzeichnis ein
    3. Legt die entsprechenden Dateiberechtigungen darin fest
  • Der %make_build Makro wird in der verwendet %bauen Abschnitt des Speclades und leitet im Grunde die machen Befehl mit vordefinierten Optionensätzen, um den Quellcode der Software zu kompilieren. Wenn wir es erweitern, können wir den von ihm ausgeführten Befehl überprüfen:
    $ rpm --eval "%make_build"/usr/bin/make -o -j4 
  • Der %make_install Makro wird stattdessen in der verwendet %Installieren Abschnitt der Datei und ausgeführt Installation machen mit dem Destdir Parameter, verwendet, um den Befehl zur Installation der kompilierten Dateien relativ in ein bestimmtes Verzeichnis anstelle des realen Systems zu installieren /:
    $ rpm --eval "%make_install"/usr/bin/make install destDir =/home/egdoc/rpmbuild/buildroot/%name-%Version-%Release.x86_64 install = "/usr/bin/install -p" 

So erstellen Sie Schritt für Schritt ein RPM -Paket Anweisungen

Nachdem wir das grundlegende Konzept des Paketbauprozesses gelernt haben, können wir sehen, wie wir unsere Build -Umgebung und unser erstes Drehzahlpaket erstellen können. Lassen Sie uns unser Paket erstellen.

Installieren Sie die Build -Abhängigkeiten

Als erstes müssen wir installieren rpmdevtools, Plus die Abhängigkeiten, die zum Bauen benötigt werden Feh:

$ sudo dnf installieren rpmdevtools gcc maken imlib2-devel libjpeg-devel libpng-devel libxer libxinerama-devel libexif-devel 


Sobald die Pakete installiert sind, können wir unsere Build -Umgebung generieren. Wir müssen nur den folgenden Befehl starten:

$ rpmdev-setuptree

Zu diesem Zeitpunkt die rpmbuild Verzeichnis und alle Unterverzeichnisse, die wir zuvor gesehen haben, sollten erstellt werden. Der nächste Schritt besteht darin, unsere Speclape zu schreiben.

Erstellen Sie die Speclape

Wir erstellen das SpeciLe mit unserem bevorzugten Texteditor und speichern sie in der Spezifikationen Verzeichnis mit demselben Namen wie dem Paket. So sollte eine minimale Spezifile aussehen:

Name: FEH Version: 3.0 Release: 1%?Dist Zusammenfassung: FAST -Befehlszeilenbildbilder -Betrachter mit IMLIB2 Lizenz: MIT URL: http: // feh.Finalrewind.org Source0: http: // feh.Finalrewind.org/feh-%Version.Teer.BZ2 BuildRires: GCC BuildRires: Imlib2-Devel BuildRires: libcurl-Devel BuildRequires: libjpeg-Devel BuildRires: libpng-devel buildRires: libxt-devel buildrequires: libxinera-desvel buildrequires: libxify-darvel-darvel-darvel-darvel-darvel-darvel: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: perl-trequires: libxify-darvel-darvvel: perl-trequires: perl-trequires: perl-treque TEST -HARTNESSGEBRAUCHE BESCHREIBUNG FAST -Befehlszeilungsbilde -Betrachter mit IMLIB2 %Prep %Setup -q %Build %make_build %install %make_install Präfix = %_ Präfix %Dateien/usr/bin/feh/usr/lib/debug/debug /usr/bin/feh-3.0-1.FC29.x86_64.Debugg/usr/Share/Anwendungen/FEH.Desktop/usr/share/doc/feh/Autoren/usr/share/doc/feh/changelog/usr/share/doc/feh/readme.md/usr/share/doc/feh/todo/usr/share/doc/feh/Beispiele/Schaltflächen/usr/Share/doc/feh/Beispiele/find-lowres/usr/share/doc/feh/Beispiele/Keys/ usr/share/doc/feh/Beispiele/Themen/usr/share/feh/fonts/schwarz.style/usr/share/feh/fonts/Menü.style/usr/share/feh/fonts/yudit.ttf/usr/share/feh/images/feh.png/usr/shary/feh/bilder/feh.svg/usr/share/feh/bilder/Menubg_default.png/usr/shary/icons/hicolor/48x48/apps/feh.png/usr/shary/icons/hicolor/scalable/apps/feh.svg/usr/share/mAN/mAN1/feh.1.gz 

Lassen Sie es uns analysieren. Zuerst haben wir einige grundlegende Informationen über die Software angegeben, die wir verpacken möchten: den Namen und die stromaufwärts gelegene Version, seine Lizenz, den Ort der Projekt Main -Seite und den direkten Link zum Quellcode -Tarball. Dann haben wir das deklariert Abhängigkeiten bauen Verwendung Buildrequires. Die Liste der Abhängigkeiten kann als Raum- oder Kommas -Inline -Liste dargestellt werden, aber wir haben die Lesbarkeit willen eine Abhängigkeit pro Zeile deklariert, wobei wir die wiederholt haben Buildrequires Anweisung.



Nachdem wir die zum Erstellen der Software benötigten Abhängigkeiten deklariert hatten, gaben wir eine kurze Beschreibung in der %Beschreibung Abschnitt und als der wichtigste Teil des Specfile: die Anweisungen zur Erstellung, Erstellung und Installation der Software in der %prep, %bauen Und %Installieren Abschnitte.

Im %prep Abschnitt bereitstellen die %Setup -q Das Makro reichte aus: Wie bereits erwähnt, wird dieses Makro die Befehle ausführen BAUEN Ordner.

Der %bauen In Abschnitt geben wir die Befehle an, die ausgeführt werden sollten, um den Quellcode zu erstellen. Sogar hier mussten wir nur das verwenden, war nur die %make_build Makro, das die betreibt machen Befehl mit den Optionen, die wir zuvor gesehen haben, in das Verzeichnis, in dem der ausgepackte Quellcode der Anwendung gehostet wird, die wir verpacken möchten.

Im %Installieren Abschnitt haben wir ein anderes Makro verwendet, %make_install, Bereitstellung auch die PRÄFIX Parameter, einstellen auf %_Präfix, das wird erweitert in /usr. Der resultierende Befehl führt dazu Destdir Parameter im Makro enthalten. Da in der %make_install Makro, "destdir" ist auf /home/egdoc/rpmbuild/buildroot/%name-%Version-%Release.x86_64, Die Dateien werden unter: /home/egdoc/rpmbuild/buildroot/%name-%Version-%Release.x86_64/usr.

Schließlich haben wir in der zur Verfügung gestellt %Dateien Abschnitt, eine Liste der Dateien, die von unserem Paket installiert werden. Diese Liste könnte später durch das Ausführen des rpm -qlp/path/to/the/rpm Befehl oder, wenn das Paket bereits installiert ist, durch einfaches Ausführen RPM -QL Packagename.

Holen Sie sich die Quellen und erstellen Sie das RPM -Paket

Nachdem unsere Spezifikationsdatei endlich fertig ist, können wir unsere erstellen Drehzahl. Sie können feststellen, dass wir den Quell -Tarball von „Feh“ noch nicht heruntergeladen haben Spectool Befehl:



$ spectool -g -r ~/rpmbuild/specs/feh.Spezifikation erhalten http: // feh.Finalrewind.org/feh-3.0.Teer.BZ2 bis/Home/EGDOC/RPMBUILD/Quellen/FEH-3.0.Teer.BZ2 % Gesamt % erhalten % xferd Geschwindigkeitszeitzeitzeitlaufzeit Strom DOD Upload Gesamtzahl der linken Geschwindigkeit 100 185 100 185 0 0 898 0-:-:--:-:--:-:-:- -898 100 2057k 100 2057k 0 0 0 1988K 0 0:00:01 0:00:01-:-:-4191k 

In diesem Befehl wird die Quellen heruntergeladen, auf die wir uns mit einer URL in der Specfile in dem entsprechenden Verzeichnis unseres Arbeitsbaums verwiesen haben: ~/rpmbuild/Quellen. Mit den vorhandenen Quellen können wir unsere Drehzahl aufbauen: Wir müssen nur die Start haben, um das zu starten rpmbuild Befehl und geben Sie den Pfad zum Speciile. Beim Start mit dem -BB Option, RPMBuild erstellt nur a Binärpaket: Wenn wir auch a generieren wollen Quelldrehzahl, Wir müssen verwenden -ba Stattdessen (wenden Sie sich an das RPMBuild -Manpage, um einen Überblick über die Möglichkeiten der Möglichkeit).

Eine sehr wichtige Sache, an die Sie sich erinnern sollten, ist, dass der Befehl rpmbuild niemals mit Root -Berechtigungen gestartet werden sollte: Wenn dies dies tut. Lassen Sie uns RPMBuild durchführen:

$ rpmbuild -bb ~/rpmbuild/specs/feh.Spezifikation

Die Ausgabe der durchgeführten Operationen wird auf dem Bildschirm gedruckt, und wenn alles wie erwartet läuft, wird das RPM -Paket in den generiert Drehzahl Verzeichnis.

Schlussfolgerungen

In diesem Tutorial haben wir die grundlegenden Konzepte gelernt, die an der Schaffung eines RPM -Pakets verbunden sind. Wir haben einige Makros gelernt und wie man a baut .Spezifikation Datei, die alle erforderlichen Anweisungen für den Bauprozess enthält. Wir haben auch ein tatsächliches Beispiel für Gebäude und Verpackung bereitgestellt Feh, Ein einfacher Befehlszeilenbildbieter. Ich empfehle Ihnen, den offiziellen Red Hat Packaging Guide zu konsultieren, um die in diesem Tutorial genannten Konzepte weiter zu erweitern.

Verwandte Linux -Tutorials:

  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Dinge zu installieren auf Ubuntu 20.04
  • Mastering -Bash -Skriptschleifen beherrschen
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • So aktualisieren Sie CentOs
  • Linux -Download
  • Ubuntu 20.04 Leitfaden
  • Wie man von CentOS nach Almalinux migriert
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten