GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear fácilmente paquetes de Linux usando Fpm para múltiples plataformas

Existen numerosas distribuciones de Linux, y empaquetar aplicaciones para diferentes distribuciones de Linux es una tarea difícil y que requiere mucho tiempo. Empaquetar aplicaciones no es tan fácil para todos. Afortunadamente, existe una forma alternativa y más fácil de crear paquetes. Conoce a Fpm (Ef fing p paquete m administración), un programa de línea de comandos que ayuda a crear fácilmente paquetes de Linux.

Usando Fpm, puede convertir fácilmente un paquete a un formato diferente e instalarlo usando el administrador de paquetes predeterminado de la distribución.

Y sí, los Snaps y flatpaks de Ubuntu están creciendo rápidamente y se pueden instalar en la mayoría de las distribuciones de Linux. Pero, en caso de que desee empaquetar una aplicación que aún no está disponible para su distribución, Fpm es una forma de hacerlo.

Y es mucho más fácil que los métodos de envasado tradicionales. Fpm es una herramienta de código abierto completamente gratuita escrita con Ruby lenguaje de programación.

En esta guía, discutiremos cómo construir un paquete usando Fpm en Linux.

Instalar Fpm en Linux

Dado que fpm está escrito con Ruby, primero debe instalar Ruby. Ruby viene preinstalado con algunos sistemas operativos. Si aún no está instalado, ejecute los siguientes comandos según la distribución que utilice.

En Arch Linux y sus variantes:

$ sudo pacman -S ruby

En sistemas Red Hat (Fedora 22 o anterior, CentOS, etc.):

$ sudo yum install ruby-devel gcc make rpm-build

En Fedora 23 o posterior:

$ sudo dnf install ruby-devel gcc make rpm-build

En sistemas derivados de Debian (Debian, Ubuntu, etc.):

$ sudo apt-get install ruby ruby-dev rubygems gcc make rpm

También puede instalar Ruby usando Linuxbrew gerente de empaquetación. Para instalar Linuxbrew en Linux, consulte la siguiente guía.

  • Linuxbrew:un administrador de paquetes común para Linux y Mac OS X

Después de instalar Linuxbrew, ejecute este comando para instalar Ruby.

$ brew install ruby

Una vez que haya instalado Ruby, ejecute el siguiente comando para instalar FPM:

$ sudo gem install --no-ri --no-rdoc fpm

Verá una salida similar a la siguiente.

 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

Para asegurarse de que Fpm esté instalado correctamente, ejecute el siguiente comando.

$ fpm --version

O,

$ fpm --v

La salida de muestra sería:

1.8.1

Si ve un resultado como el anterior, ¡felicidades! Fpm está listo para usar.

Descargar - Libro electrónico gratuito:"Gestión de parches de Linux®:mantener los sistemas Linux actualizados"

Crear paquetes de Linux usando Fpm

El comando típico para usar FPM para construir un paquete se da a continuación:

$ fpm -s <source type> -t <target type> [list of sources]...

Aquí,

  • -s - El tipo del paquete fuente. Sería un directorio (dir), un rubygem (gem), un rpm (rpm), un paquete python (python), un módulo php pear (pear), etc.
  • -t - tipo de su paquete de salida, como .rpm, .deb, etc.

Aquí está la lista completa de tipos de archivos de origen y de destino.

Fuentes:

  • gema
  • módulos de Python
  • pera
  • directorios
  • archivos tar(.gz)
  • rpm
  • deuda
  • paquetes de nodos (npm)
  • paquetes pacman (ArchLinux)

Objetivos:

  • deuda
  • rpm
  • solaris
  • freebsd
  • alquitrán
  • directorios
  • Archivos .pkg de Mac OS X
  • paquetes pacman (ArchLinux)

También puede abrir la sección de ayuda en cualquier momento escribiendo el siguiente comando desde la Terminal.

$ fpm --help

Crear un paquete RPM

Te voy a mostrar algunos ejemplos para que lo entiendas mejor. El siguiente comando descargará la última gema json y conviértalo en un paquete .rpm:

$ fpm -s gem -t rpm json

Salida de muestra:

Created package {:path=>"rubygem-json-2.0.3-1.x86_64.rpm"}

El comando anterior descargará el último rubygem 'json' de rubygems.org y lo convertirá en un .rpm paquete. Como puede ver en el resultado anterior, este comando ha creado un paquete llamado ‘rubygem-json-VERSION_ARCH.rpm’ con la versión/arco apropiado en su lugar. Bastante fácil, ¿no? ¡Claro que lo es!

Solo tomó un minuto construir este .rpm paquete. Los paquetes se almacenarán en el directorio de trabajo actual. Ahora, puede instalar este paquete rpm en cualquier distribución basada en rpm como RHEL, CentOS, Fedora, etc., como se muestra a continuación.

$ sudo rpm -ivh rubygem-json-2.0.3-1.x86_64.rpm

Comprueba los detalles del paquete .rpm recién creado como se muestra a continuación.

$ sudo rpm -qip rubygem-json-2.0.3-1.x86_64.rpm

Salida de muestra:

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.

Como puede ver en el resultado anterior, fpm seleccionó automáticamente el nombre del paquete, la versión, la arquitectura, la fecha de instalación, el mantenedor, la página de inicio y la descripción, todo desde el propio paquete Ruby. No necesita agregar nada manualmente. Fpm se encargará de todo.

Para ver las dependencias, simplemente ejecute:

$ rpm -qRp rubygem-json-2.0.3-1.x86_64.rpm

Salida de muestra

rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1

Veamos otro ejemplo.

Crear un paquete DEB

En el ejemplo anterior, hemos compilado json gem y conviértalo a un paquete .rpm usando:

$ fpm -s gem -t rpm json

Del mismo modo, para hacer deb un paquete, simplemente reemplace la palabra rpm con deb .

$ fpm -s gem -t deb json

Salida de muestra:

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"}

Para verificar los detalles del paquete recién creado, ejecute:

$ dpkg --info rubygem-json_2.0.3_amd64.deb

Salida de muestra:

 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

Para ver las dependencias del paquete anterior, ejecute:

$ dpkg -c ./rubygem-json_2.0.3_amd64.deb
Descargar - Libro electrónico gratuito:"La plataforma de desarrollo de Linux"

Crear un paquete de versión específico

Todos los comandos anteriores han creado las últimas versiones estables. En caso de que necesite crear un paquete de versión específico, puede hacerlo usando el comando:

$ fpm -s gem -t deb -v 2.0.0 json

El comando anterior descargará rubyjson versión 2.0.0 y lo convertirá a .deb paquete.

Salida de muestra:

[...]
Created package {:path=>"rubygem-json_2.0.0_amd64.deb"}

Del mismo modo, puede asignar un nombre específico a un paquete como se muestra a continuación.

$ fpm -s gem -t deb -n my_json -v 2.0.0 json

Salida de muestra:

[...]
Created package {:path=>"my-json_2.0.0_amd64.deb"}

Como puede ver en el resultado anterior, asigné un nombre personalizado al paquete, es decir, my-json_2.0.0_amd64.deb .

Convertir paquetes RPM a DEB y viceversa

No tiene que crear paquetes para diferentes plataformas. Simplemente conviértalos de un formato a otro. El siguiente comando convertirá un paquete rpm en un paquete deb.

$ fpm -t deb -s rpm rubygem-json-2.0.3-1.x86_64.rpm

Tenga en cuenta que he cambiado un poco la sintaxis. el tipo de destino (-t) viene primero y el tipo de fuente va después.

Salida de muestra:

[..]
Created package {:path=>"rubygem-json_2.0.3-1_amd64.deb"}

Crear paquetes desde un directorio fuente

Estos son los pasos simples para crear un rpm del programa 'hola'.

$ 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

A continuación, instálelo en un directorio temporal como se muestra a continuación:

$ mkdir /tmp/installdir
$ make install DESTDIR=/tmp/installdir/

Ahora, crea el paquete rpm usando Fpm como se muestra a continuación.

$ fpm -s dir -t rpm -n hello -v 2.10 -C /tmp/installdir

Aquí,

  • -s indica el tipo de archivo de origen (directorio),
  • -t es el tipo de paquete (rpm),
  • -n indica el nombre del paquete
  • -v es la versión;
  • -C es el directorio (por ejemplo, /tmp/installdir ) donde fpm buscará los archivos.

Salida de muestra:

Created package {:path=>"hello-2.10-1.x86_64.rpm"}

Para crear un paquete deb, ejecute el siguiente comando:

$ fpm -s dir -t deb -n hello -v 2.10 -C /tmp/installdir

De manera similar, puede crear cualquier paquete desde un directorio.

Lectura relacionada:

  • Cómo compilar paquetes Debian desde el código fuente
  • Cómo compilar paquetes desde el origen mediante CheckInstall
  • Cómo convertir paquetes de Linux con Alien

Conclusión

Fpm simplifica el proceso de creación de paquetes para múltiples distribuciones sin tener muchos conocimientos de programación. Incluso un usuario intermedio de Linux puede crear fácilmente cualquier paquete para cualquier plataforma en muy poco tiempo.


Linux
  1. Cómo crear paquetes desde el origen mediante CheckInstall

  2. Cómo enumerar los paquetes instalados que pertenecen a un grupo particular en Linux

  3. Cómo enumerar los paquetes instalados desde un determinado repositorio en Linux

  4. Cómo cambiar el nombre de varios archivos juntos en Linux usando 3 métodos

  5. Cómo verificar el proveedor de paquetes RPM instalados en Linux

Cómo instalar paquetes de forma segura usando Npm o Yarn en Linux

Cómo instalar Anaconda en Linux

Cómo enumerar los paquetes instalados en Linux

Cómo enumerar los paquetes instalados en Linux mediante la administración de paquetes

¿Cómo puedo generar cobertura de código para paquetes Swift en Linux u OS X?

¿Cómo construir fácilmente su propia distribución de Linux?