Existuje mnoho distribucí Linuxu a balení aplikací pro různé distribuce Linuxu je poměrně časově náročný a obtížný úkol. Balení aplikací není pro každého tak snadné. Naštěstí existuje alternativní a nejjednodušší způsob, jak sestavit balíčky. Seznamte se s Fpm (Ef prst p ackage m anagement), program příkazového řádku, který pomáhá snadno vytvářet balíčky pro Linux.
Pomocí Fpm můžete snadno převést balíček do jiného formátu a nainstalovat jej pomocí výchozího správce balíčků distribuce.
A ano, Snapy a flatpaky Ubuntu rychle rostou a lze je nainstalovat na většinu distribucí Linuxu. Ale pro případ, že byste chtěli zabalit aplikaci, která ještě není dostupná pro vaši distribuci, Fpm je jeden způsob, jak to udělat.
A je to mnohem jednodušší než tradiční způsoby balení. Fpm je zcela zdarma, open source nástroj napsaný pomocí Ruby programovací jazyk.
V této příručce budeme diskutovat o tom, jak vytvořit balíček pomocí Fpm v Linuxu.
Nainstalujte Fpm v Linuxu
Protože fpm je napsáno pomocí Ruby, musíte nejprve nainstalovat Ruby. Ruby je dodáván s předinstalovanými některými operačními systémy. Pokud ještě není nainstalován, spusťte následující příkazy v závislosti na distribuci, kterou používáte.
Na Arch Linuxu a jeho variantách:
$ sudo pacman -S ruby
Na systémech Red Hat (Fedora 22 nebo starší, CentOS atd.):
$ sudo yum install ruby-devel gcc make rpm-build
Na Fedoře 23 nebo novější:
$ sudo dnf install ruby-devel gcc make rpm-build
Na systémech odvozených z Debianu (Debian, Ubuntu atd.):
$ sudo apt-get install ruby ruby-dev rubygems gcc make rpm
Ruby můžete nainstalovat také pomocí Linuxbrew správce balíčků. Chcete-li nainstalovat Linuxbrew na Linux, postupujte podle následujícího průvodce.
- Linuxbrew – Společný správce balíčků pro Linux a Mac OS X
Po instalaci Linuxbrew spusťte tento příkaz a nainstalujte Ruby.
$ brew install ruby
Jakmile nainstalujete Ruby, spusťte následující příkaz pro instalaci FPM:
$ sudo gem install --no-ri --no-rdoc fpm
Uvidíte výstup podobný níže.
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
Abyste se ujistili, že je Fpm nainstalováno správně, spusťte následující příkaz.
$ fpm --version
Nebo,
$ fpm --v
Ukázkový výstup by byl:
1.8.1
Pokud vidíte výstup jako výše, gratulujeme! Fpm je připraveno k použití.
Stáhnout - Zdarma e-kniha:"Linux® Patch Management:Udržování linuxových systémů aktuální"Vytváření linuxových balíčků pomocí Fpm
Typický příkaz pro použití FPM k sestavení balíčku je uveden níže:
$ fpm -s <source type> -t <target type> [list of sources]...
Tady,
- -s
- Typ zdrojového balíčku. Byl by to adresář (dir), rubygem (gem), rpm (rpm), balíček python (python), modul php hruška (pear) atd. - -t
- typ vašeho výstupního balíčku, například .rpm, .deb atd.
Zde je úplný seznam typů zdrojových a cílových souborů.
Zdroje:
- drahokam
- moduly python
- hruška
- adresáře
- archivy tar(.gz)
- ot/min
- deb
- balíčky uzlů (npm)
- balíčky pacman (ArchLinux)
Cíle:
- deb
- ot/min
- solaris
- freebsd
- tar
- adresáře
- Soubory .pkg systému Mac OS X
- balíčky pacman (ArchLinux)
Sekci nápovědy můžete také kdykoli vyvolat zadáním následujícího příkazu z Terminálu.
$ fpm --help
Sestavení balíčku RPM
Ukážu vám několik příkladů, abyste to lépe pochopili. Následující příkaz stáhne nejnovější json gem a převést jej na balíček .rpm:
$ fpm -s gem -t rpm json
Ukázkový výstup:
Created package {:path=>"rubygem-json-2.0.3-1.x86_64.rpm"}
Výše uvedený příkaz stáhne nejnovější rubygem „json“ z rubygems.org a převede jej na .rpm
balík. Jak vidíte ve výše uvedeném výstupu, tento příkaz vytvořil balíček s názvem ‘rubygem-json-VERSION_ARCH.rpm’
s příslušnou verzí/obloukem na místě. Docela snadné, že? Samozřejmě, že je!
Vytvoření tohoto .rpm
trvalo jednu minutu balík. Balíčky budou uloženy v aktuálním pracovním adresáři. Nyní můžete tento rpm balíček nainstalovat na jakoukoli distribuci založenou na rpm, jako je RHEL, CentOS, Fedora atd., jak je uvedeno níže.
$ sudo rpm -ivh rubygem-json-2.0.3-1.x86_64.rpm
Podrobnosti o nově vytvořeném balíčku .rpm zkontrolujete níže.
$ sudo rpm -qip rubygem-json-2.0.3-1.x86_64.rpm
Ukázkový výstup:
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.
Jak můžete vidět ve výše uvedeném výstupu, fpm automaticky vybral název balíčku, verzi, architekturu, datum instalace, správce, domovskou stránku a popis ze samotného balíčku ruby. Nemusíte nic přidávat ručně. Fpm se o vše postará.
Chcete-li zobrazit závislosti, stačí spustit:
$ rpm -qRp rubygem-json-2.0.3-1.x86_64.rpm
Ukázkový výstup
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Podívejme se na další příklad.
Sestavení balíčku DEB
Ve výše uvedeném příkladu jsme sestavili json drahokam a převeďte jej na balíček .rpm pomocí:
$ fpm -s gem -t rpm json
Podobně, chcete-li vytvořit deb balíček, stačí nahradit slovo rpm
s deb
.
$ fpm -s gem -t deb json
Ukázkový výstup:
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"}
Chcete-li zkontrolovat podrobnosti o nově vytvořeném balíčku, spusťte:
$ dpkg --info rubygem-json_2.0.3_amd64.deb
Ukázkový výstup:
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
Chcete-li zobrazit závislosti výše uvedeného balíčku, spusťte:
$ dpkg -c ./rubygem-json_2.0.3_amd64.debStáhnout – Zdarma e-kniha:„Vývojová platforma Linuxu“
Sestavte balíček konkrétní verze
Všechny předchozí příkazy vytvořily nejnovější stabilní verze. V případě, že potřebujete sestavit konkrétní verzi balíčku, můžete to udělat pomocí příkazu:
$ fpm -s gem -t deb -v 2.0.0 json
Výše uvedený příkaz stáhne rubyjson verze 2.0.0 a převede ji na .deb
balíček.
Ukázkový výstup:
[...] Created package {:path=>"rubygem-json_2.0.0_amd64.deb"}
Podobně můžete balíčku přiřadit konkrétní název, jak je uvedeno níže.
$ fpm -s gem -t deb -n my_json -v 2.0.0 json
Ukázkový výstup:
[...] Created package {:path=>"my-json_2.0.0_amd64.deb"}
Jak vidíte ve výše uvedeném výstupu, přiřadil jsem balíčku vlastní název, tj. my-json_2.0.0_amd64.deb
.
Převod RPM na DEB balíčky a naopak
Nemusíte vytvářet balíčky pro různé platformy. Jednoduše je převeďte z jednoho formátu do druhého. Následující příkaz převede balíček rpm na balíček deb.
$ fpm -t deb -s rpm rubygem-json-2.0.3-1.x86_64.rpm
Vezměte prosím na vědomí, že jsem trochu změnil syntaxi. cílový typ (-t) je první a typ zdroje je další.
Ukázkový výstup:
[..] Created package {:path=>"rubygem-json_2.0.3-1_amd64.deb"}
Vytvářejte balíčky ze zdrojového adresáře
Zde jsou jednoduché kroky k vytvoření rpm programu 'ahoj'.
$ 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
Dále jej nainstalujte do dočasného adresáře, jak je znázorněno níže:
$ mkdir /tmp/installdir
$ make install DESTDIR=/tmp/installdir/
Nyní vytvořte balíček rpm pomocí Fpm, jak je uvedeno níže.
$ fpm -s dir -t rpm -n hello -v 2.10 -C /tmp/installdir
Zde,
-s
označuje typ zdrojového souboru (adresář),-t
je typ balíčku (rpm),-n
označuje název balíčku-v
je verze;-C
je adresář (např./tmp/installdir
), kde fpm vyhledá soubory.
Ukázkový výstup:
Created package {:path=>"hello-2.10-1.x86_64.rpm"}
Chcete-li vytvořit balíček deb, spusťte následující příkaz:
$ fpm -s dir -t deb -n hello -v 2.10 -C /tmp/installdir
Podobně můžete sestavit libovolný balíček z adresáře.
Související čtení:
- Jak sestavit balíčky Debianu ze zdroje
- Jak sestavit balíčky ze zdroje pomocí CheckInstall
- Jak převést balíčky Linuxu pomocí aplikace Alien
Závěr
Fpm zjednodušuje proces vytváření balíčků pro více distribucí, aniž byste měli velké znalosti programování. Dokonce i středně pokročilý uživatel Linuxu může snadno a rychle vytvořit libovolné balíčky pro jakoukoli platformu.