Help us understand the problem. What is going on with this article?

rpmの作り方(rpmbuild/checkinstall/fpm)とrpmレポジトリの作り方

More than 5 years have passed since last update.

概要

rpmを作る方法の備忘ログです。
srpmファイルがある場合はrpmbuildで作ります。
make installするものはcheckinstallとかfpmを使って作ります。
いずれもrpmだけじゃなくてdebも作れるけど紹介しません。
おまけでrpmレポジトリの立て方も紹介します。
自分でSPECファイルを一から書く方法は紹介しません。

specファイルがある場合

  • 必要に応じてrpmbuild等の必要なパッケージをyumでインストールします。
yum -y install rpmbuild gcc gcc-c++ glibc glibc-devel
  • srpm(src.rpm)ファイル入手します。
  • srpmファイルをインストールします。 (srpmから直接rpmをビルドすることもできますが、SPECファイルを修正する必要がある場合等にはsrpmをインストールする必要があります)
rpm -i hogehoge.src.rpm
  • rpmbuildコマンドでspecファイルからrpmを作成します。 (specファイルに修正が必要な場合もあります)
rpmbuild --bb --clean ~/rpmbuild/SPECS/hogehoge.spec
  • 出来上がったrpmをインストールします。
yum localinstall ~/rpmbuild/RPMS/x86_64/hogehoge.rpm
  • ちなみに64ビットOSで32ビット版のrpmを作る場合はこんな感じでrpmbuildコマンドを叩きます。 (事前にyumでglibc-devel.i686辺りを入れておく必要があります)
CC='gcc -m32' CXX='g++ -m32' linux32 rpmbuild --rebuild --target=i686 hogehoge.src.rpm

make installするやつのrpmを作る

checkinstall

checkinstallは昔からあるrpm作成ツールです。
最新版は2009年に出たもので最近のLinuxだと動かないこともあるようですが、CentOS6.5では普通に動きました。

  • まずは必要なパッケージをインストールします。
yum -y install make gcc rpm-build gettext git
  • gitレポジトリからchekinstallを落としてきます。
git clone http://checkinstall.izto.org/checkinstall.git
  • checkinstallをインストールします。 残念ながら最初はmake install叩くしか無いです。
cd checkinstall
make
sudo make install
  • soファイルを64ビット版のlibディレクトリに移します(シンボリックリンク)。
sudo ln -s /usr/local/lib/installwatch.so /usr/local/lib64/installwatch.so
  • Makefileのあるディレクトリでcheckinstallを叩くとrpmが出来上がります。 (実際はインタラクティブなシェルですが聞かれる内容は明らかなため省略します)
sudo /usr/local/sbin/checkinstall

上記をcheckinstallのディレクトリで実行するとcheckinstall自体のrpmを作成できます。
他のrpmを作る場合はconfigureとmakeしてからcheckinstallを実行します。

fpm

fpmはruby製のパッケージ作成ツールです。
ここで紹介するソースのtarボールからrpmを作る他、様々なソース(gemとかnpmとか)から様々な形式のパッケージ(debとかsolarisとか)が作れます。
新しいLinuxでも動くのでcheckinstallが動かない場合はこちらが良いと思います。

  • 必要なパッケージをインストールします。
yum -y install gcc ruby ruby-devel ruby-libs rubygems rpm-build
  • fpmをインストールします。
sudo gem install fpm
  • rpm作りたいソースを入手してmake installまでします。 (普通にmake installするじゃん、とか思うかもですが場所指定でインストールするためrpm作成後はキレイに消せます)
wget http://hogehoge.com/hogehoge.tar.gz
tar xfz hogehoge.tar.gz
cd hogehoge
./configure
make
sudo make install DESTDIR=/path/to/destdir
cd /path/to/destdir/
fpm -s dir -t rpm -n hogehoge -v 0.0.1 -C /path/to/destdir -p hogehoge-0.0.1.rpm .
  • 出来上がったrpmをインストールします。
sudo yum localinstall libpafe-0.0.8.rpm
  • /path/to/destdirは消しちゃってOKです。

(おまけ)rpmレポジトリの立て方

社内にrpmレポジトリは立てておいた方が良いですよね。
先日こちらの記事でちらっと触れましたが、例えばAnsibleとかChefで複数台のOSにパッケージをインストールする際に全ノードがインターネット上のMirrorレポジトリを見に行くのは非効率ですね。
Mirrorレポジトリだけでなく独自レポジトリも立てて置いた方が管理面・効率面でオススメです。

  • 必要なパッケージのインストール
sudo yum -y install createrepo httpd
  • httpdをstart
sudo service httpd start
sudo chkconfig httpd on
  • httpdの公開ディレクトリ以下にrpmレポジトリ用のディレクトリを作成 (httpdの実行ユーザが読み取り権限を持つ必要があります)
mkdir /var/www/html/rpmrepo/x86_64/
  • 何かrpmを置く
cp hogehoge.rpm /var/www/html/rpmrepo/x86_64/
  • repositoryの作成
createrepo /var/www/html/rpmrepo/x86_64/
  • yum実行するマシンで以下のファイルを作成します。
/etc/yum.repos.d/hogehoge.repo
[hogehoge]
name=hogehoge-CentOS-$releasever - additional
baseurl=http://hostname/rpmrepo/$basearch/
enabled=1
gpgcheck=0

(hostnameは上記rpmレポジトリを作ったマシンのhost名かipです)

  • これでyumを実行時に上記のレポジトリに置いたrpmが取得できます。
kiida
San Joseの教育系スタートアップ(YC W18)でCTO兼フルスタックソフトウェアエンジニアしてます。その前は同じくSan Joseの採用系スタートアップ、その前は日本のITコンサル(SIer?)的なところにいました。気軽に絡んでください。
https://daikikohara.github.io/about/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした