Es gibt zahlreiche Linux-Distributionen, und das Packen von Anwendungen für verschiedene Linux-Distributionen ist ziemlich zeitaufwändig und eine schwierige Aufgabe. Verpackungsanwendungen sind nicht für jeden so einfach. Glücklicherweise gibt es eine alternative und einfachste Möglichkeit, Pakete zu erstellen. Lernen Sie Fpm kennen (Ef fing p ackage m management), ein Befehlszeilenprogramm, das hilft, Linux-Pakete einfach zu erstellen.
Mit Fpm können Sie ein Paket einfach in ein anderes Format konvertieren und es mit dem Standard-Paketmanager der Distribution installieren.
Und ja, die Snaps und Flatpaks von Ubuntu wachsen schnell und können auf den meisten Linux-Distributionen installiert werden. Aber für den Fall, dass Sie eine Anwendung paketieren möchten, die noch nicht für Ihre Distribution verfügbar ist, ist Fpm eine Möglichkeit, dies zu tun.
Und es ist viel einfacher als herkömmliche Verpackungsmethoden. Fpm ist ein völlig kostenloses Open-Source-Tool, das mit Ruby geschrieben wurde Programmiersprache.
In dieser Anleitung werden wir besprechen, wie man ein Paket mit Fpm unter Linux baut.
Fpm unter Linux installieren
Da fpm mit Ruby geschrieben wurde, müssen Sie zuerst Ruby installieren. Ruby ist bei einigen Betriebssystemen vorinstalliert. Wenn es noch nicht installiert ist, führen Sie je nach verwendeter Distribution die folgenden Befehle aus.
Auf Arch Linux und seinen Varianten:
$ sudo pacman -S ruby
Auf Red Hat-Systemen (Fedora 22 oder älter, CentOS usw.):
$ sudo yum install ruby-devel gcc make rpm-build
Auf Fedora 23 oder neuer:
$ sudo dnf install ruby-devel gcc make rpm-build
Auf von Debian abgeleiteten Systemen (Debian, Ubuntu usw.):
$ sudo apt-get install ruby ruby-dev rubygems gcc make rpm
Sie können Ruby auch mit Linuxbrew installieren Paket-Manager. Informationen zur Installation von Linuxbrew unter Linux finden Sie in der folgenden Anleitung.
- Linuxbrew – Ein gemeinsamer Paketmanager für Linux und Mac OS X
Führen Sie nach der Installation von Linuxbrew diesen Befehl aus, um Ruby zu installieren.
$ brew install ruby
Führen Sie nach der Installation von Ruby den folgenden Befehl aus, um FPM zu installieren:
$ sudo gem install --no-ri --no-rdoc fpm
Sie werden eine Ausgabe wie unten sehen.
Fetching: cabin-0.9.0.gem (100%) Successfully installed cabin-0.9.0 Fetching: backports-3.6.8.gem (100%) Successfully installed backports-3.6.8 Fetching: arr-pm-0.0.10.gem (100%) Successfully installed arr-pm-0.0.10 Fetching: clamp-1.0.1.gem (100%) Successfully installed clamp-1.0.1 Fetching: ffi-1.9.17.gem (100%) Building native extensions. This could take a while... Successfully installed ffi-1.9.17 Fetching: childprocess-0.6.1.gem (100%) Successfully installed childprocess-0.6.1 Fetching: archive-tar-minitar-0.5.2.gem (100%) Successfully installed archive-tar-minitar-0.5.2 Fetching: io-like-0.3.0.gem (100%) Successfully installed io-like-0.3.0 Fetching: ruby-xz-0.2.3.gem (100%) Successfully installed ruby-xz-0.2.3 Fetching: stud-0.0.22.gem (100%) Successfully installed stud-0.0.22 Fetching: mustache-0.99.8.gem (100%) Successfully installed mustache-0.99.8 Fetching: insist-1.0.0.gem (100%) Successfully installed insist-1.0.0 Fetching: dotenv-2.2.0.gem (100%) Successfully installed dotenv-2.2.0 Fetching: pleaserun-0.0.28.gem (100%) Successfully installed pleaserun-0.0.28 Fetching: fpm-1.8.1.gem (100%) Successfully installed fpm-1.8.1 15 gems installed
Um sicherzustellen, dass Fpm korrekt installiert ist, führen Sie den folgenden Befehl aus.
$ fpm --version
Oder,
$ fpm --v
Beispielausgabe wäre:
1.8.1
Wenn Sie eine Ausgabe wie oben sehen, herzlichen Glückwunsch! Fpm ist einsatzbereit.
Herunterladen - Kostenloses eBook:"Linux® Patch Management:Linux-Systeme auf dem neuesten Stand halten"Linux-Pakete mit Fpm erstellen
Der typische Befehl zur Verwendung von FPM zum Erstellen eines Pakets ist unten angegeben:
$ fpm -s <source type> -t <target type> [list of sources]...
Hier,
- -s
- -t
Hier ist die vollständige Liste der Quell- und Zieldateitypen.
Quellen:
- Juwel
- Python-Module
- Birne
- Verzeichnisse
- tar(.gz)-Archive
- U/min
- deb
- Knotenpakete (npm)
- pacman (ArchLinux) Pakete
Ziele:
- deb
- U/min
- solaris
- freebsd
- tar
- Verzeichnisse
- Mac OS X .pkg-Dateien
- pacman (ArchLinux) Pakete
Sie können den Hilfebereich auch jederzeit aufrufen, indem Sie den folgenden Befehl im Terminal eingeben.
$ fpm --help
Erstelle ein RPM-Paket
Ich werde Ihnen einige Beispiele zeigen, um es besser zu verstehen. Der folgende Befehl lädt das neueste json-Gem herunter und konvertieren Sie es in ein .rpm-Paket:
$ fpm -s gem -t rpm json
Beispielausgabe:
Created package {:path=>"rubygem-json-2.0.3-1.x86_64.rpm"}erstellt
Der obige Befehl lädt das neueste „json“-Rubygem von rubygems.org herunter und konvertiert es in eine .rpm
Paket. Wie Sie in der obigen Ausgabe sehen, hat dieser Befehl ein Paket mit dem Namen ‘rubygem-json-VERSION_ARCH.rpm’
erstellt mit entsprechender Version/Bogen vorhanden. Ganz einfach, oder? Natürlich ist es das!
Es dauerte nur eine Minute, diese .rpm
zu erstellen Paket. Die Pakete werden im aktuellen Arbeitsverzeichnis gespeichert. Jetzt können Sie dieses RPM-Paket auf allen RPM-basierten Distributionen wie RHEL, CentOS, Fedora usw. installieren, wie unten gezeigt.
$ sudo rpm -ivh rubygem-json-2.0.3-1.x86_64.rpm
Sie überprüfen die Details des neu erstellten .rpm-Pakets wie folgt.
$ sudo rpm -qip rubygem-json-2.0.3-1.x86_64.rpm
Beispielausgabe:
Name : rubygem-json Version : 2.0.3 Release : 1 Architecture: x86_64 Install Date: (not installed) Group : Languages/Development/Ruby Size : 1487109 License : Ruby Signature : (none) Source RPM : rubygem-json-2.0.3-1.src.rpm Build Date : Tue 21 Feb 2017 03:45:50 PM IST Build Host : server1.ostechnix.local Relocations : / Packager : <[email protected]> Vendor : Florian Frank URL : http://flori.github.com/json Summary : This is a JSON implementation as a Ruby extension in C. Description : This is a JSON implementation as a Ruby extension in C.
Wie Sie in der obigen Ausgabe sehen können, hat fpm den Paketnamen, die Version, die Architektur, das Installationsdatum, den Betreuer, die Homepage und die Beschreibung automatisch aus dem Ruby-Paket selbst ausgewählt. Sie müssen nichts manuell hinzufügen. Fpm kümmert sich um alles.
Um die Abhängigkeiten anzuzeigen, führen Sie einfach Folgendes aus:
$ rpm -qRp rubygem-json-2.0.3-1.x86_64.rpm
Beispielausgabe
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Sehen wir uns ein weiteres Beispiel an.
Erstellen Sie ein DEB-Paket
Im obigen Beispiel haben wir json gem erstellt und konvertieren Sie es in ein .rpm-Paket mit:
$ fpm -s gem -t rpm json
Um deb zu einem Paket zu machen, ersetzen Sie einfach das Wort rpm
mit deb
.
$ fpm -s gem -t deb json
Beispielausgabe:
Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn} Debian packaging tools generally labels all files in /etc as config files, as mandated by policy, so fpm defaults to this behavior for deb packages. You can disable this default behavior with --deb-no-default-config-files flag {:level=>:warn} Created package {:path=>"rubygem-json_2.0.3_amd64.deb"}
Um die Details des neu erstellten Pakets zu überprüfen, führen Sie Folgendes aus:
$ dpkg --info rubygem-json_2.0.3_amd64.deb
Beispielausgabe:
new debian package, version 2.0. size 581592 bytes: control archive=4018 bytes. 327 bytes, 12 lines control 11986 bytes, 126 lines md5sums Package: rubygem-json Version: 2.0.3 License: Ruby Vendor: Florian Frank Architecture: amd64 Maintainer: <[email protected]> Installed-Size: 1640 Provides: rubygem-json Section: Languages/Development/Ruby Priority: extra Homepage: http://flori.github.com/json Description: This is a JSON implementation as a Ruby extension in C
Um die Abhängigkeiten des obigen Pakets anzuzeigen, führen Sie Folgendes aus:
$ dpkg -c ./rubygem-json_2.0.3_amd64.debHerunterladen - Kostenloses eBook:"Die Linux-Entwicklungsplattform"
Erstelle ein spezifisches Versionspaket
Alle vorherigen Befehle haben die neuesten stabilen Versionen erstellt. Falls Sie ein bestimmtes Versionspaket erstellen müssen, können Sie dies mit dem Befehl:
tun$ fpm -s gem -t deb -v 2.0.0 json
Der obige Befehl lädt rubyjson Version 2.0.0 herunter und konvertiert es in .deb
Paket.
Beispielausgabe:
[...] Created package {:path=>"rubygem-json_2.0.0_amd64.deb"}
Ebenso können Sie einem Paket wie unten einen bestimmten Namen zuweisen.
$ fpm -s gem -t deb -n my_json -v 2.0.0 json
Beispielausgabe:
[...] Created package {:path=>"my-json_2.0.0_amd64.deb"}erstellt
Wie Sie in der obigen Ausgabe sehen, habe ich dem Paket einen benutzerdefinierten Namen zugewiesen, z. B. my-json_2.0.0_amd64.deb
.
Konvertieren Sie RPM- in DEB-Pakete und umgekehrt
Sie müssen keine Pakete für verschiedene Plattformen erstellen. Konvertieren Sie sie einfach von einem Format in ein anderes. Der folgende Befehl konvertiert ein RPM-Paket in ein Deb-Paket.
$ fpm -t deb -s rpm rubygem-json-2.0.3-1.x86_64.rpm
Bitte beachten Sie, dass ich die Syntax ein wenig geändert habe. der Zieltyp (-t) kommt zuerst und der Quelltyp kommt als nächstes.
Beispielausgabe:
[..] Created package {:path=>"rubygem-json_2.0.3-1_amd64.deb"}
Pakete aus einem Quellverzeichnis erstellen
Hier sind die einfachen Schritte zum Erstellen eines RPM-Programms „Hallo“.
$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
$ tar -zxvf hello-2.10.tar.gz
$ cd hello-2.10/
$ ./configure --prefix=/usr
$ make
Als nächstes installieren Sie es wie unten gezeigt in einem temporären Verzeichnis:
$ mkdir /tmp/installdir
$ make install DESTDIR=/tmp/installdir/
Erstellen Sie nun das RPM-Paket mit Fpm wie unten beschrieben.
$ fpm -s dir -t rpm -n hello -v 2.10 -C /tmp/installdir
Hier,
-s
gibt den Quelldateityp (Verzeichnis) an,-t
ist der Pakettyp (rpm),-n
gibt den Namen des Pakets an-v
ist die Version;-C
ist das Verzeichnis (zB/tmp/installdir
), wo fpm nach den Dateien sucht.
Beispielausgabe:
Created package {:path=>"hello-2.10-1.x86_64.rpm"}erstellt
Um das Deb-Paket zu erstellen, führen Sie den folgenden Befehl aus:
$ fpm -s dir -t deb -n hello -v 2.10 -C /tmp/installdir
Ebenso können Sie jedes Paket aus einem Verzeichnis erstellen.
Verwandte Lektüre:
- Wie man Debian-Pakete aus den Quellen erstellt
- Wie man mit CheckInstall Pakete aus der Quelle erstellt
- So konvertieren Sie Linux-Pakete mit Alien
Schlussfolgerung
Fpm vereinfacht das Erstellen von Paketen für mehrere Distributionen ohne große Programmierkenntnisse. Selbst ein fortgeschrittener Linux-Benutzer kann im Handumdrehen beliebige Pakete für jede Plattform erstellen.