fpm を使って任意のプログラムを rpm にまとめてみる。


みむらです。
作業中に見つけたことで、たぶん今後も使いそうな気がするのでメモ。

SPEC ファイルがあれば rpmbuild で一発なのですが、
そんなうれしいことはあまりないので、どうしようかと。

fpm コマンドを使うと良い感じに rpm にまとめてくれるので、
これを使ってみましょう、というそんな話。


1.fpm の準備

yum install gcc ruby ruby-devel ruby-libs rubygems rpm-build
gem install fpm

rubygem で提供されているのでそれ経由で入れる。


2.普通にコンパイル

今回は ruby で試しました。

configure の時は、
prefix を “/usr” に向けておくと良い感じです。

(別に /usr/local/ でも大丈夫だとは思いますが、気分的に。)

あとは make に “-j” を付けて CPU を良い感じに唸らせて。

(他にこのプログラムで使うパッケージがあれば入れておく。)

 

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
tar zxvf ruby-2.1.2.tar.gz
cd ruby-2.1.2
./configure --prefix=/usr
make -j8

3. rpm を作る

make が完了したら、
出力用のフォルダを作ってそこに出力します。

私の場合はホームディレクトリ以下に ruby というディレクトリを作成しました。

mkdir ~/ruby

でもって、コンパイル結果をそのディレクトリに向けて出力します。

make install DESTDIR=~/ruby

インストールが完了すると、指定したディレクトリ内にファイルが作られます。

[mimura1133@localhost ruby]# find ~/ruby
/home/mimura1133/ruby
/home/mimura1133/ruby/usr
/home/mimura1133/ruby/usr/lib
/home/mimura1133/ruby/usr/lib/pkgconfig
/home/mimura1133/ruby/usr/lib/pkgconfig/ruby-2.1.pc
/home/mimura1133/ruby/usr/lib/libruby-static.a
/home/mimura1133/ruby/usr/lib/ruby
/home/mimura1133/ruby/usr/lib/ruby/site_ruby
/home/mimura1133/ruby/usr/lib/ruby/site_ruby/2.1.0
/home/mimura1133/ruby/usr/lib/ruby/site_ruby/2.1.0/x86_64-linux
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby/2.1.0
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby/2.1.0/x86_64-linux

 

次にホームディレクトリに移動して、 fpm コマンドを使って rpm パッケージを作ります。

 

なお、 fpm コマンドについてのヘルプは下記URL にあります。
 https://github.com/jordansissel/fpm/wiki

・・deb パッケージを作ったり、deb から rpm にしたりとかも出来るっぽいですね。

 

何も気にせずさくっと作るのであれば、

fpm -s dir -t rpm -n (名前) -v (バージョン) -C (出力したディレクトリ) -p (RPMファイル名) usr/

というような、こんな感じ。

 

なので先ほどまでやっていた ruby の場合は、

fpm -s dir -t rpm -n ruby -v 2.1.2 -C /root/ruby -p ruby-2.1.2.rpm usr/

こんな感じ。

 

凝る場合は “-d” で依存関係を指定できるので

-d “openssl-devel (> 1.0.1)”

とか。こういう感じで。

 


4.出来た RPM をインストールする。

あとは、

rpm -ivh ruby-2.1.2.rpm

とか叩いてインストール。

削除の場合は

rpm -e ruby-2.1.2

としてもいいし、

yum remove ruby

とかやっても消えます。


 

関連記事