Ricerca nel sito web

Come creare facilmente pacchetti Linux utilizzando Fpm per piattaforme multiple


Esistono numerose distribuzioni Linux e creare pacchetti di applicazioni per diverse distribuzioni Linux è un compito difficile e dispendioso in termini di tempo. Le applicazioni di imballaggio non sono così facili per tutti. Fortunatamente esiste un modo alternativo e più semplice per creare pacchetti. Ti presentiamo Fpm (Effing package management), un programma a riga di comando che aiuta a creare facilmente Pacchetti Linux.

Utilizzando Fpm, puoi facilmente convertire un pacchetto in un formato diverso e installarlo utilizzando il gestore pacchetti predefinito della distribuzione.

E sì, gli Snap e i flatpak di Ubuntu stanno crescendo rapidamente e possono essere installati sulla maggior parte delle distribuzioni Linux. Ma, nel caso in cui desideri pacchettizzare un'applicazione che non è ancora disponibile per la tua distribuzione, Fpm è un modo per farlo.

Ed è molto più semplice rispetto ai metodi di imballaggio tradizionali. Fpm è uno strumento open source completamente gratuito scritto utilizzando il linguaggio di programmazione Ruby.

In questa guida discuteremo come creare un pacchetto utilizzando Fpm in Linux.

Installa Fpm su Linux

Dato che fpm è scritto usando Ruby, devi prima installare Ruby. Ruby viene preinstallato con alcuni sistemi operativi. Se non è già installato, esegui i seguenti comandi a seconda della distribuzione che utilizzi.

Su Arch Linux e le sue varianti:

sudo pacman -S ruby

Sui sistemi Red Hat (Fedora 22 o precedente, CentOS, ecc.):

sudo yum install ruby-devel gcc make rpm-build

Su Fedora 23 o successiva:

sudo dnf install ruby-devel gcc make rpm-build

Sui sistemi derivati da Debian (Debian, Ubuntu, ecc.):

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

Puoi anche installare Ruby utilizzando il gestore pacchetti Linuxbrew. Per installare Linuxbrew su Linux, fare riferimento alla seguente guida.

  • Linuxbrew: un gestore di pacchetti comune per Linux e Mac OS X

Dopo aver installato Linuxbrew, esegui questo comando per installare Ruby.

brew install ruby

Dopo aver installato Ruby, esegui il comando seguente per installare FPM:

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

Vedrai un output simile a quello riportato di seguito.

 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

Per assicurarti che Fpm sia installato correttamente, esegui il comando seguente.

fpm --version

O,

fpm --v

L'output di esempio sarebbe:

1.8.1

Se vedi un output come sopra, congratulazioni! Fpm è pronto per l'uso.

Crea pacchetti Linux utilizzando Fpm

Il comando tipico per utilizzare FPM per creare un pacchetto è riportato di seguito:

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

Qui,

  • -s - Il tipo del pacchetto sorgente. Sarebbe una directory (dir), un rubygem (gem), un RPM (rpm), un pacchetto Python (python), un modulo php Pear (pear), ecc.
  • -t - tipo del pacchetto di output, come .rpm, .deb ecc.

Ecco l'elenco completo dei tipi di file di origine e di destinazione.

Fonti :

  • gemma
  • moduli Python
  • Pera
  • directory
  • archivi tar(.gz).
  • giri/min
  • deb
  • pacchetti di nodi (npm)
  • pacchetti pacman (ArchLinux).

Obiettivi:

  • deb
  • giri/min
  • solaris
  • freebsd
  • catrame
  • directory
  • File .pkg di Mac OS X
  • pacchetti pacman (ArchLinux).

Puoi anche visualizzare la sezione della guida in qualsiasi momento digitando il seguente comando dal Terminale.

fpm --help

Costruisci un pacchetto RPM

Ti faccio qualche esempio per capire meglio. Il seguente comando scaricherà l'ultimo json gem e lo convertirà in un pacchetto .rpm:

fpm -s gem -t rpm json

Esempio di output:

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

Il comando precedente scaricherà l'ultimo rubygem "json" da rubygems.org e lo convertirà in un pacchetto .rpm. Come puoi vedere nell'output sopra, questo comando ha creato un pacchetto denominato 'rubygem-json-VERSION_ARCH.rpm' con la versione/arch appropriata al suo posto. Abbastanza facile, non è vero? Ovviamente è!

Ci è voluto solo un minuto per creare questo pacchetto .rpm. I pacchetti verranno archiviati nella directory di lavoro corrente. Ora puoi installare questo pacchetto RPM su qualsiasi distribuzione basata su RPM come RHEL, CentOS, Fedora ecc. Come mostrato di seguito.

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

Controlla i dettagli del pacchetto .rpm appena creato come di seguito.

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

Esempio di output:

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 : <root@server1.ostechnix.local>
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.

Come puoi vedere nell'output sopra, fpm ha selezionato automaticamente il nome del pacchetto, la versione, l'architettura, la data di installazione, il manutentore, la home page e la descrizione, tutto dal pacchetto Ruby stesso. Non è necessario aggiungere nulla manualmente. Fpm si occuperà di tutto.

Per visualizzare le dipendenze, basta eseguire:

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

Esempio di output

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

Vediamo un altro esempio.

Costruisci un pacchetto DEB

Nell'esempio sopra, abbiamo creato json gem e lo abbiamo convertito in un pacchetto .rpm utilizzando:

fpm -s gem -t rpm json

Allo stesso modo, per rendere deb un pacchetto, basta sostituire la parola rpm con deb.

fpm -s gem -t deb json

Esempio di output:

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

Per verificare i dettagli del pacchetto appena creato, eseguire:

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

Esempio di output:

 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: <sk@ubuntuserver>
 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

Per visualizzare le dipendenze del pacchetto precedente, eseguire:

dpkg -c ./rubygem-json_2.0.3_amd64.deb

Crea un pacchetto di versione specifico

Tutti i comandi precedenti hanno creato le ultime versioni stabili. Nel caso in cui sia necessario creare un pacchetto di versione specifico, è possibile farlo utilizzando il comando:

fpm -s gem -t deb -v 2.0.0 json

Il comando precedente scaricherà Rubyjson versione 2.0.0 e lo convertirà nel pacchetto .deb.

Esempio di output:

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

Allo stesso modo, puoi assegnare un nome specifico a un pacchetto come di seguito.

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

Esempio di output:

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

Come puoi vedere nell'output sopra, ho assegnato un nome personalizzato al pacchetto, ad esempio my-json_2.0.0_amd64.deb.

Converti pacchetti RPM in DEB e viceversa

Non è necessario creare pacchetti per piattaforme diverse. Convertili semplicemente da un formato all'altro. Il seguente comando convertirà un pacchetto rpm in un pacchetto deb.

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

Tieni presente che ho modificato leggermente la sintassi. il tipo di destinazione (-t) viene prima e il tipo di origine viene dopo.

Esempio di output:

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

Crea pacchetti da una directory di origine

Ecco i semplici passaggi per creare un RPM del programma 'ciao'.

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

Successivamente, installalo in una directory temporanea come mostrato di seguito:

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

Ora crea il pacchetto rpm usando Fpm come di seguito.

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

Qui,

  • -s indica il tipo di file di origine (directory),
  • -t è il tipo di pacchetto (rpm),
  • -n indica il nome del pacchetto
  • -v è la versione;
  • -C è la directory (ad esempio /tmp/installdir) in cui fpm cercherà i file.

Esempio di output:

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

Per creare il pacchetto deb, esegui il comando seguente:

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

Allo stesso modo, puoi creare qualsiasi pacchetto da una directory.

Lettura correlata:

  • Come creare pacchetti Debian dai sorgenti
  • Come creare pacchetti dal sorgente utilizzando CheckInstall
  • Come convertire pacchetti Linux con Alien

Conclusione

Fpm semplifica il processo di creazione di pacchetti per più distribuzioni senza avere molte conoscenze di programmazione. Anche un utente Linux intermedio può creare facilmente qualsiasi pacchetto per qualsiasi piattaforma in pochissimo tempo.

Risorse:

  • Repository GitHub Fpm
  • Documentazione Fpm

Articoli correlati