多数のLinuxディストリビューションがあり、さまざまなLinuxディストリビューション用のアプリケーションのパッケージ化は非常に時間がかかり、困難な作業です。アプリケーションのパッケージ化は、誰にとってもそれほど簡単ではありません。幸いなことに、パッケージを作成するための代替の最も簡単な方法があります。 Fpmに会う (E f fing p ackage m anagement)、Linuxパッケージを簡単に構築するのに役立つコマンドラインプログラム。
Fpmを使用すると、パッケージを別の形式に簡単に変換し、ディストリビューションのデフォルトのパッケージマネージャーを使用してインストールできます。
そして、はい、Ubuntuのスナップとフラットパックは急速に成長しており、ほとんどのLinuxディストリビューションにインストールできます。ただし、ディストリビューションでまだ利用できないアプリケーションをパッケージ化する場合に備えて、Fpmはそれを行う1つの方法です。
また、従来のパッケージ方法よりもはるかに簡単です。 Fpmは完全に無料で、 Rubyを使用して作成されたオープンソースツールです。 プログラミング言語。
このガイドでは、LinuxでFpmを使用してパッケージをビルドする方法について説明します。
LinuxにFpmをインストールする
fpmはRubyを使用して記述されているため、最初にRubyをインストールする必要があります。 Rubyには、いくつかのオペレーティングシステムがプリインストールされています。まだインストールされていない場合は、使用するディストリビューションに応じて次のコマンドを実行します。
Arch Linuxとそのバリアントの場合:
$ sudo pacman -S ruby
Red Hatシステム(Fedora 22以前、CentOSなど)の場合:
$ sudo yum install ruby-devel gcc make rpm-build
Fedora 23以降の場合:
$ sudo dnf install ruby-devel gcc make rpm-build
Debianから派生したシステム(Debian、Ubuntuなど)の場合:
$ sudo apt-get install ruby ruby-dev rubygems gcc make rpm
Linuxbrewを使用してRubyをインストールすることもできます パッケージマネージャー。 LinuxにLinuxbrewをインストールするには、次のガイドを参照してください。
- Linuxbrew –LinuxおよびMacOSX用の一般的なパッケージマネージャー
Linuxbrewをインストールした後、このコマンドを実行してRubyをインストールします。
$ brew install ruby
Rubyをインストールしたら、次のコマンドを実行してFPMをインストールします。
$ sudo gem install --no-ri --no-rdoc fpm
以下のような出力が表示されます。
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
Fpmが正しくインストールされているかどうかを確認するには、次のコマンドを実行します。
$ fpm --version
または、
$ fpm --v
サンプル出力は次のようになります:
1.8.1
上記のような出力が表示された場合は、おめでとうございます。 Fpmを使用する準備が整いました。
ダウンロード -無料の電子書籍:「Linux®パッチ管理:Linuxシステムを最新の状態に保つ」Fpmを使用してLinuxパッケージを構築する
FPMを使用してパッケージをビルドする一般的なコマンドを以下に示します。
$ fpm -s <source type> -t <target type> [list of sources]...
ここで
- -s<ソースタイプ> -ソースパッケージのタイプ。これは、ディレクトリ(dir)、rubygem(gem)、rpm(rpm)、pythonパッケージ(python)、php pearモジュール(pear)などになります。
- -t
ソースファイルとターゲットファイルの種類の完全なリストは次のとおりです。
出典:
- gem
- Pythonモジュール
- 梨
- ディレクトリ
- tar(.gz)アーカイブ
- rpm
- デブ
- ノードパッケージ(npm)
- pacman(ArchLinux)パッケージ
ターゲット:
- デブ
- rpm
- ソラリス
- freebsd
- タール
- ディレクトリ
- Mac OSX.pkgファイル
- pacman(ArchLinux)パッケージ
ターミナルから次のコマンドを入力して、いつでもヘルプセクションを表示できます。
$ fpm --help
RPMパッケージを作成する
理解を深めるために、いくつかの例を示します。次のコマンドは、最新の json gemをダウンロードします .rpmパッケージに変換します:
$ fpm -s gem -t rpm json
出力例:
Created package {:path=>"rubygem-json-2.0.3-1.x86_64.rpm"}
上記のコマンドは、rubygems.orgから最新の「json」rubygemをダウンロードし、それを.rpm
に変換します。 パッケージ。上記の出力にあるように、このコマンドは‘rubygem-json-VERSION_ARCH.rpm’
という名前のパッケージを作成しました。 適切なバージョン/アーチが配置されている。とても簡単ですね。もちろんです!
この.rpm
をビルドするのに1分しかかかりませんでした パッケージ。パッケージは現在の作業ディレクトリに保存されます。これで、このrpmパッケージを、以下に示すように、RHEL、CentOS、Fedoraなどのrpmベースのディストリビューションにインストールできます。
$ sudo rpm -ivh rubygem-json-2.0.3-1.x86_64.rpm
新しく作成した.rpmパッケージの詳細を以下で確認します。
$ sudo rpm -qip rubygem-json-2.0.3-1.x86_64.rpm
出力例:
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.
上記の出力からわかるように、fpmは、パッケージ名、バージョン、アーキテクチャ、インストール日、メンテナ、ホームページ、および説明をすべてrubyパッケージ自体から自動的に選択しました。手動で追加する必要はありません。 Fpmがすべてを処理します。
依存関係を表示するには、次を実行するだけです:
$ rpm -qRp rubygem-json-2.0.3-1.x86_64.rpm
サンプル出力
rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
別の例を見てみましょう。
DEBパッケージを作成する
上記の例では、 json gemをビルドしています 次を使用して.rpmパッケージに変換します:
$ fpm -s gem -t rpm json
同様に、debをパッケージにするには、rpm
という単語を置き換えるだけです。 deb
を使用 。
$ fpm -s gem -t deb json
出力例:
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"}
新しく作成されたパッケージの詳細を確認するには、次のコマンドを実行します。
$ dpkg --info rubygem-json_2.0.3_amd64.deb
出力例:
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
上記のパッケージの依存関係を表示するには、次を実行します:
$ dpkg -c ./rubygem-json_2.0.3_amd64.debダウンロード -無料の電子書籍:「Linux開発プラットフォーム」
特定のバージョンのパッケージを作成する
以前のコマンドはすべて、最新の安定したバージョンを作成しました。特定のバージョンのパッケージをビルドする必要がある場合は、次のコマンドを使用してこれを行うことができます:
$ fpm -s gem -t deb -v 2.0.0 json
上記のコマンドは、rubyjson verion 2.0.0をダウンロードし、.deb
に変換します。 パッケージ。
出力例:
[...] Created package {:path=>"rubygem-json_2.0.0_amd64.deb"}
同様に、以下のようにパッケージに特定の名前を割り当てることができます。
$ fpm -s gem -t deb -n my_json -v 2.0.0 json
出力例:
[...] Created package {:path=>"my-json_2.0.0_amd64.deb"}
上記の出力にあるように、パッケージにカスタム名を割り当てました。つまり、 my-json_2.0.0_amd64.deb
。
RPMをDEBパッケージに、またはその逆に変換する
異なるプラットフォーム用のパッケージを作成する必要はありません。それらをあるフォーマットから別のフォーマットに変換するだけです。次のコマンドは、rpmパッケージをdebパッケージに変換します。
$ fpm -t deb -s rpm rubygem-json-2.0.3-1.x86_64.rpm
構文を少し変更したことに注意してください。ターゲットタイプ(-t)が最初に来て、ソースタイプが次に来ます。
出力例:
[..] Created package {:path=>"rubygem-json_2.0.3-1_amd64.deb"}
ソースディレクトリからパッケージをビルドする
'hello'プログラムのrpmを作成する簡単な手順は次のとおりです。
$ 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
次に、以下に示すように、一時ディレクトリにインストールします。
$ mkdir /tmp/installdir
$ make install DESTDIR=/tmp/installdir/
次に、以下のようにFpmを使用してrpmパッケージを作成します。
$ fpm -s dir -t rpm -n hello -v 2.10 -C /tmp/installdir
ここで、
-
-s
ソースファイルの種類(ディレクトリ)を示します。 -
-t
パッケージのタイプ(rpm)です。 -
-n
パッケージの名前を示します -
-v
バージョンです。 -
-C
ディレクトリです(例:/tmp/installdir
)fpmがファイルを検索する場所。
出力例:
Created package {:path=>"hello-2.10-1.x86_64.rpm"}
debパッケージを作成するには、次のコマンドを実行します。
$ fpm -s dir -t deb -n hello -v 2.10 -C /tmp/installdir
同様に、ディレクトリから任意のパッケージをビルドできます。
関連記事:
- ソースからDebianパッケージを構築する方法
- CheckInstallを使用してソースからパッケージを構築する方法
- エイリアンを使用してLinuxパッケージを変換する方法
結論
Fpmは、プログラミングの知識があまりなくても、複数のディストリビューションのパッケージを構築するプロセスを簡素化します。中級のLinuxユーザーでも、あらゆるプラットフォーム向けのあらゆるパッケージを短時間で簡単に構築できます。