GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erstellen Sie ganz einfach Linux-Pakete mit Fpm für mehrere Plattformen

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 - Der Typ des Quellpakets. Es wäre ein Verzeichnis (dir), ein Rubygem (gem), ein RPM (rpm), ein Python-Paket (python), ein PHP-Pear-Modul (Pear) usw.
  • -t - Typ Ihres Ausgabepakets, wie .rpm, .deb usw.

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.deb
Herunterladen - 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.


Linux
  1. So erstellen Sie Pakete aus der Quelle mit CheckInstall

  2. So listen Sie installierte Pakete aus einem bestimmten Repository in Linux auf

  3. So listen Sie alle installierten Pakete in Linux auf

  4. So suchen Sie nach Dateien mit Regex im Linux-Shell-Skript

  5. Wie man GLFW 3 erstellt und installiert und in einem Linux-Projekt verwendet

So installieren Sie Pakete sicher mit Npm oder Yarn unter Linux

So installieren Sie Anaconda unter Linux

So listen Sie installierte Pakete in Linux auf

So listen Sie installierte Pakete in Linux mithilfe der Paketverwaltung auf

Wie kann ich Codeabdeckung für Swift-Pakete unter Linux oder OS X generieren?

Wie kann man ganz einfach seine eigene Linux-Distribution erstellen?