Il existe de nombreuses distributions Linux, et l'empaquetage d'applications pour différentes distributions Linux est une tâche assez longue et difficile. Les applications d'emballage ne sont pas si faciles pour tout le monde. Heureusement, il existe un moyen alternatif et plus simple de créer des packages. Rencontrez Fpm (Ef trouver p forfait m management), un programme en ligne de commande qui permet de créer facilement des packages Linux.
En utilisant Fpm, vous pouvez facilement convertir un package dans un format différent et l'installer à l'aide du gestionnaire de packages par défaut de la distribution.
Et oui, les Snaps et les flatpaks d'Ubuntu se développent rapidement et peuvent être installés sur la plupart des distributions Linux. Mais, juste au cas où vous voudriez empaqueter une application qui n'est pas encore disponible pour votre distribution, Fpm est une façon de le faire.
Et c'est beaucoup plus facile que les méthodes d'emballage traditionnelles. Fpm est un outil open source entièrement gratuit écrit à l'aide de Ruby langage de programmation.
Dans ce guide, nous expliquerons comment créer un package à l'aide de Fpm sous Linux.
Installer Fpm sous Linux
Comme fpm est écrit avec Ruby, vous devez d'abord installer Ruby. Ruby est préinstallé avec certains systèmes d'exploitation. S'il n'est pas déjà installé, exécutez les commandes suivantes en fonction de la distribution que vous utilisez.
Sur Arch Linux et ses variantes :
$ sudo pacman -S ruby
Sur les systèmes Red Hat (Fedora 22 ou antérieur, CentOS, etc.) :
$ sudo yum install ruby-devel gcc make rpm-build
Sur Fedora 23 ou plus récent :
$ sudo dnf install ruby-devel gcc make rpm-build
Sur les systèmes dérivés de Debian (Debian, Ubuntu, etc.) :
$ sudo apt-get install ruby ruby-dev rubygems gcc make rpm
Vous pouvez également installer Ruby en utilisant Linuxbrew directeur chargé d'emballage. Pour installer Linuxbrew sur Linux, reportez-vous au guide suivant.
- Linuxbrew :un gestionnaire de packages commun pour Linux et Mac OS X
Après avoir installé Linuxbrew, exécutez cette commande pour installer Ruby.
$ brew install ruby
Une fois que vous avez installé Ruby, exécutez la commande suivante pour installer FPM :
$ sudo gem install --no-ri --no-rdoc fpm
Vous verrez une sortie comme ci-dessous.
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
Pour vous assurer que Fpm est correctement installé, exécutez la commande suivante.
$ fpm --version
Ou,
$ fpm --v
Exemple de sortie :
1.8.1
Si vous voyez une sortie comme ci-dessus, félicitations ! Fpm est prêt à être utilisé.
Télécharger - Ebook gratuit :"Gestion des correctifs Linux® :Maintenir les systèmes Linux à jour"Créer des packages Linux à l'aide de Fpm
La commande typique pour utiliser FPM pour construire un package est donnée ci-dessous :
$ fpm -s <source type> -t <target type> [list of sources]...
Ici,
- -s
- Le type du paquet source. Ce serait un répertoire (dir), un rubygem (gem), un rpm (rpm), un package python (python), un module php pear (pear), etc. - -t
- type de votre package de sortie, comme .rpm, .deb etc.
Voici la liste complète des types de fichiers source et cible.
Origine :
- joyau
- modules Python
- poire
- répertoires
- archives tar(.gz)
- tr/min
- deb
- paquets de nœuds (npm)
- paquets pacman (ArchLinux)
Cibles :
- deb
- tr/min
- solaris
- freebsd
- goudron
- répertoires
- Fichiers .pkg Mac OS X
- paquets pacman (ArchLinux)
Vous pouvez également afficher la section d'aide à tout moment en tapant la commande suivante depuis le terminal.
$ fpm --help
Créer un package RPM
Je vais vous montrer quelques exemples pour mieux comprendre. La commande suivante téléchargera le dernier json gem et convertissez-le en un package .rpm :
$ fpm -s gem -t rpm json
Exemple de résultat :
Created package {:path=>"rubygem-json-2.0.3-1.x86_64.rpm"}
La commande ci-dessus téléchargera le dernier rubygem "json" de rubygems.org et le convertira en un .rpm
emballer. Comme vous le voyez dans la sortie ci-dessus, cette commande a créé un package nommé ‘rubygem-json-VERSION_ARCH.rpm’
avec la version/l'arche appropriée en place. Plutôt facile, n'est-ce pas ? Bien sûr, ça l'est !
Il a juste fallu une minute pour construire ce .rpm
emballer. Les packages seront stockés dans le répertoire de travail actuel. Maintenant, vous pouvez installer ce package rpm sur toutes les distributions basées sur rpm telles que RHEL, CentOS, Fedora, etc., comme indiqué ci-dessous.
$ sudo rpm -ivh rubygem-json-2.0.3-1.x86_64.rpm
Vous vérifiez les détails du package .rpm nouvellement créé comme ci-dessous.
$ sudo rpm -qip rubygem-json-2.0.3-1.x86_64.rpm
Exemple de résultat :
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.
Comme vous pouvez le voir dans la sortie ci-dessus, fpm a automatiquement sélectionné le nom du package, la version, l'architecture, la date d'installation, le responsable, la page d'accueil et la description du package ruby lui-même. Vous n'avez rien à ajouter manuellement. Fpm s'occupe de tout.
Pour afficher les dépendances, exécutez simplement :
$ rpm -qRp rubygem-json-2.0.3-1.x86_64.rpm
Exemple de sortie
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Voyons un autre exemple.
Créer un package DEB
Dans l'exemple ci-dessus, nous avons construit json gem et convertissez-le en un package .rpm en utilisant :
$ fpm -s gem -t rpm json
De même, pour faire de deb un paquet, remplacez simplement le mot rpm
avec deb
.
$ fpm -s gem -t deb json
Exemple de résultat :
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"}
Pour vérifier les détails du package nouvellement créé, exécutez :
$ dpkg --info rubygem-json_2.0.3_amd64.deb
Exemple de résultat :
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
Pour afficher les dépendances du package ci-dessus, exécutez :
$ dpkg -c ./rubygem-json_2.0.3_amd64.debTélécharger - Ebook gratuit :"La plate-forme de développement Linux"
Créer un package de version spécifique
Toutes les commandes précédentes ont créé les dernières versions stables. Si vous avez besoin de créer un package de version spécifique, vous pouvez le faire à l'aide de la commande :
$ fpm -s gem -t deb -v 2.0.0 json
La commande ci-dessus téléchargera rubyjson version 2.0.0 et la convertira en .deb
paquet.
Exemple de résultat :
[...] Created package {:path=>"rubygem-json_2.0.0_amd64.deb"}
De même, vous pouvez attribuer un nom spécifique à un package comme ci-dessous.
$ fpm -s gem -t deb -n my_json -v 2.0.0 json
Exemple de résultat :
[...] Created package {:path=>"my-json_2.0.0_amd64.deb"}
Comme vous le voyez dans la sortie ci-dessus, j'ai attribué un nom personnalisé au package, c'est-à-dire my-json_2.0.0_amd64.deb
.
Convertir les packages RPM en DEB et vice versa
Vous n'avez pas besoin de créer des packages pour différentes plates-formes. Convertissez-les simplement d'un format à un autre. La commande suivante convertira un package rpm en package deb.
$ fpm -t deb -s rpm rubygem-json-2.0.3-1.x86_64.rpm
Veuillez noter que j'ai un peu modifié la syntaxe. le type cible (-t) vient en premier et le type source vient ensuite.
Exemple de résultat :
[..] Created package {:path=>"rubygem-json_2.0.3-1_amd64.deb"}
Créer des packages à partir d'un répertoire source
Voici les étapes simples pour créer un rpm du programme 'hello'.
$ 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
Ensuite, installez-le dans un répertoire temporaire comme indiqué ci-dessous :
$ mkdir /tmp/installdir
$ make install DESTDIR=/tmp/installdir/
Maintenant, créez le package rpm en utilisant Fpm comme ci-dessous.
$ fpm -s dir -t rpm -n hello -v 2.10 -C /tmp/installdir
Ici,
-s
indique le type de fichier source (répertoire),-t
est le type de package (rpm),-n
indique le nom du package-v
est la version ;-C
est le répertoire (par exemple/tmp/installdir
) où fpm cherchera les fichiers.
Exemple de résultat :
Created package {:path=>"hello-2.10-1.x86_64.rpm"}
Pour créer le package deb, exécutez la commande suivante :
$ fpm -s dir -t deb -n hello -v 2.10 -C /tmp/installdir
De même, vous pouvez créer n'importe quel package à partir d'un répertoire.
Lire connexe :
- Comment créer des packages Debian à partir de la source
- Comment créer des packages à partir de la source à l'aide de CheckInstall
- Comment convertir des packages Linux avec Alien
Conclusion
Fpm simplifie le processus de création de packages pour plusieurs distributions sans avoir beaucoup de connaissances en programmation. Même un utilisateur Linux intermédiaire peut facilement créer n'importe quel package pour n'importe quelle plate-forme en un rien de temps.