Esistono numerose distribuzioni Linux e il confezionamento di applicazioni per diverse distribuzioni Linux è un'operazione piuttosto dispendiosa in termini di tempo e difficile. Le applicazioni di packaging non sono così facili per tutti. Fortunatamente, esiste un modo alternativo e più semplice per creare pacchetti. Incontra Fpm (Ef fing p ackage m anagement), un programma da riga di comando che aiuta a creare facilmente pacchetti Linux.
Utilizzando Fpm, puoi convertire facilmente un pacchetto in un formato diverso e installarlo utilizzando il gestore di 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 impacchettare un'applicazione che non è ancora disponibile per la tua distribuzione, Fpm è un modo per farlo.
Ed è molto più semplice dei metodi di confezionamento tradizionali. Fpm è uno strumento open source completamente gratuito scritto utilizzando Ruby linguaggio di programmazione.
In questa guida, discuteremo di come creare un pacchetto utilizzando Fpm in Linux.
Installa Fpm in Linux
Poiché fpm viene scritto utilizzando 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 precedenti, CentOS, ecc.):
$ sudo yum install ruby-devel gcc make rpm-build
Su Fedora 23 o versioni successive:
$ sudo dnf install ruby-devel gcc make rpm-build
Su sistemi derivati da Debian (Debian, Ubuntu, ecc):
$ sudo apt-get install ruby ruby-dev rubygems gcc make rpm
Puoi anche installare Ruby usando Linuxbrew gestore di pacchetti. 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 seguente comando per installare FPM:
$ sudo gem install --no-ri --no-rdoc fpm
Vedrai un output simile a quello 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
Oppure,
$ fpm --v
L'output di esempio sarebbe:
1.8.1
Se vedi un output come sopra, congratulazioni! Fpm è pronto per l'uso.
Scarica - Ebook gratuito:"Linux® Patch Management:mantenere aggiornati i sistemi Linux"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]...
Ecco,
- -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 tuo pacchetto di output, come .rpm, .deb ecc.
Ecco l'elenco completo dei tipi di file di origine e di destinazione.
Fonti:
- gioiello
- moduli Python
- pera
- directory
- archivi tar(.gz)
- giri/min
- deb
- pacchetti di nodi (npm)
- Pacchetti pacman (ArchLinux)
Obiettivi:
- deb
- giri/min
- solari
- libero
- catrame
- directory
- File .pkg di Mac OS X
- Pacchetti pacman (ArchLinux)
Puoi anche aprire la sezione della guida in qualsiasi momento digitando il seguente comando dal Terminale.
$ fpm --help
Crea un pacchetto RPM
Vi mostro alcuni esempi per capire meglio. Il comando seguente scaricherà l'ultimo json gem e convertilo in un pacchetto .rpm:
$ fpm -s gem -t rpm json
Risultato di esempio:
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 .rpm
pacchetto. Come puoi vedere nell'output sopra, questo comando ha creato un pacchetto chiamato ‘rubygem-json-VERSION_ARCH.rpm’
con la versione/arcata appropriata in atto. Abbastanza facile, non è vero? Certo che lo è!
Ci è voluto solo un minuto per creare questo .rpm
pacchetto. 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
Puoi controllare i dettagli del pacchetto .rpm appena creato come di seguito.
$ sudo rpm -qip rubygem-json-2.0.3-1.x86_64.rpm
Risultato di esempio:
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.
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 penserà a tutto.
Per visualizzare le dipendenze, esegui:
$ rpm -qRp rubygem-json-2.0.3-1.x86_64.rpm
Risultato di esempio
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Vediamo un altro esempio.
Crea un pacchetto DEB
Nell'esempio sopra, abbiamo build json gem e convertilo in un pacchetto .rpm usando:
$ 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
Risultato di esempio:
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 controllare i dettagli del pacchetto appena creato, esegui:
$ dpkg --info rubygem-json_2.0.3_amd64.deb
Risultato di esempio:
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
Per visualizzare le dipendenze del pacchetto precedente, eseguire:
$ dpkg -c ./rubygem-json_2.0.3_amd64.debScarica - eBook gratuito:"La piattaforma di sviluppo Linux"
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, puoi farlo usando il comando:
$ fpm -s gem -t deb -v 2.0.0 json
Il comando precedente scaricherà rubyjson verion 2.0.0 e lo convertirà in .deb
pacchetto.
Risultato di esempio:
[...] 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
Risultato di esempio:
[...] 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
.
Convertire pacchetti RPM in DEB e viceversa
Non è necessario creare pacchetti per piattaforme diverse. Basta convertirli da un formato all'altro. Il comando seguente 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 leggermente modificato la sintassi. il tipo di destinazione (-t) viene prima e il tipo di origine viene dopo.
Risultato di esempio:
[..] 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
Quindi, 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
Ecco,
-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 es./tmp/installdir
) dove fpm cercherà i file.
Risultato di esempio:
Created package {:path=>"hello-2.10-1.x86_64.rpm"}
Per creare il pacchetto deb, esegui il seguente comando:
$ 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 dal sorgente
- Come creare pacchetti dal sorgente utilizzando CheckInstall
- Come convertire i pacchetti Linux con Alien
Conclusione
Fpm semplifica il processo di creazione di pacchetti per distribuzioni multiple senza avere molte conoscenze di programmazione. Anche un utente Linux intermedio può facilmente creare qualsiasi pacchetto per qualsiasi piattaforma in pochissimo tempo.