So erstellen Sie ein Drehzahlpaket
- 4859
- 406
- Janin Pletsch
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
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ährendDrehzahl
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 woDrehzahl
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:- Extrahiert den Quellcode des Programms, den wir in die verpacken möchten
Builddir
Verzeichnis - Schaltet in das extrahierte Verzeichnis ein
- Legt die entsprechenden Dateiberechtigungen darin fest
- Extrahiert den Quellcode des Programms, den wir in die verpacken möchten
- Der
%make_build
Makro wird in der verwendet%bauen
Abschnitt des Speclades und leitet im Grunde diemachen
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ührtInstallation machen
mit demDestdir
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
- « Wie man in Ubuntu nicht erfüllt
- So starten Sie externe Prozesse mit Python und dem Subprozessmodul »