rpmパッケージの作成

rpmパッケージの作成方法について説明します。

最近は、source.tar.gz内に、specファイルが含まれている事が多いので、このspecファイルを利用します。

いちいちrpmを作る必要って。。。これが意外に多くあるんです。。。

なお、specから作るのはしんどいと思う方は、Checkinstallを利用してみると良いでしょう。

Checkinstallでは、Slackware,RPM,Debian用パッケージを比較的手軽に作成出来ます。

 

環境の準備

利用するコマンド類を、yumからインストールします。

yum install rpm-build rpmdevtools

 

ディレクトリの作成

rpmの作成は、ディストリビューションにもよりますが、/usr/src/rpmや/var/src/rpmなどの場所で作成できます。が、ここはrootでの作業になるため、自分のhomeに環境を作成するのがいいでしょう。

 

で、まずはrpm作成用のディレクトリを作成します。

cd ~
rpmdev-setuptree

 

$HOME/rpmbuild
    	|------rpm
            	|---BUILD<---コンパイル作業用ディレクトリ
            	|---RPMS<---作成されたパッケーッジの置き場所
            	|      |---x86_64
            	|      |---i386
            	|      |---i486
            	|      |---i586
            	|      |---i686
            	|      |---noarch
            	|---SOURCES<---ソースファイルの置き場所
            	|---SPECS<---specファイルの置き場所
            	|---SRPMS<---作成されたソースパッケージの置き場所

 

設定ファイルの作成

今作成したrpmbuild用ディレクトリを使用する設定を確認します。

指定するには、homeに.rpmmacrosファイルを以下のコマンドで作成しますが、rpmdev-setuptree コマンドで作成した場合は、既に設定は終了しています。必要であれば変更をしてください。

(これが無いとシステムの設定に従います。具体的には、/usr/src/rpmや/var/src/rpmなど。)

echo "%_topdir /home/hoge/rpm" > ~/.rpmmacros

 

試しに、srpmをリビルドしてみると、動作が確認が容易です。

rpmbuild --rebuild hogehoge-2.3.1-1.src.rpm

すると、こんなrpmパッケージが作成されるはずです。

/home/hoge/rpm/RPMS/i386/hogehoge-2.3.1-1.i586.rpm

/home/hoge/rpm/RPMS/i386/hogehoge-devel-2.3.1-1.i586.rpm

 

ちなみに、srpmをインストールすると、作成したディレクトリ内にファイルが展開されます。

rpm -ivh hogehoge-2.3.1-1.src.rpm

 

 

specファイルの作成

環境は整いましたので、specファイルからrpmパッケージの作り方です。

specファイルは、tarボールに含まれていればそれを改造、無ければ自分で作ります。

なにかのパッケージのspecファイルを参考にしながら作るのも良いです。

とりあえず、specファイルで指定してある代表的なものを上げておきます。

宣言部

%define: 変数みたいなもの、値を格納する宣言
Summary: パッケージの内容を説明するメモ書き 必項
Name: パッケージ名 必項
Version: バージョンです。ソースのバージョンと合わすのがいいでしょう。 必項
Release: パッケージのリリース番号です。対応ディストなどを略称で含める場合もあります。 必項
Packager: パッケージングした人を明記
Group: パッケージのグループ 必項
Copyright: 著作権表示 必項
Vendor: 開発ベンダー
URL: 開発ベンダーのURL
Source: ソースの入手先を明記 必項
Prefix: configure時のprefix先を明記
BuildRoot: 一般的には、”/var/tmp/****-%{ver}-root”などを指定 必項
BuildRequires: Build時の依存関係を記入
Requires: パッケージインストール時の依存関係を記入
Conflicts: このパッケージと競合する(共存できない)パッケージ名
BuildArchitectures: パッケージが対象とするシステムアーキテクチャ
BuildConflicts: パッケージをビルドする際に競合するパッケージ名
Patch0: パッチファイルの指定(複数の場合は数字を増やして)
%description: パッケージの詳細
%package: 一つのspecファイルから、複数のパッケージを作成する場合必要
%changelog: 変更履歴を書きます。

実行部

%prep: パッケージ作成前に行う作業を記述 必項
%setup -q: ソースファイルを展開後、そこに移動する命令、-nで移動先の指定も可 必項
%patch0 -p1: パッチを適応します。
%build: ここで、configureとmakeを書きます。最初に”rm -rf $RPM_BUILD_ROOT”を忘れずに。 必項
%install: make installを書きます。 必項
%clean: 作業した場所を掃除しておきます。(rm -rf $RPM_BUILD_ROOT) 必項
%files: パッケージに含まれるファイルリストのリスト
%doc: FAQ INSTALL NEWS QUOTES README:ドキュメントファイルのリスト
%config: 設定ファイルのリスト

 

システム変数。

SPECファイル中に、%{__tmppath}など、”_”で始まる変数があります。

これはシステム変数です。以下のようにする と、指定できる変数が確認できます。

rpm --showrc|more

 

以下は、specファイルの作成例です。実際には、ソースアーカイブに含まれるspecファイルを利用し、変更すると楽です。

なお、specファイルは、/home/hoge/rpm/SPCES/以下に作成します。

hogehoge.spce

%define         name    hogehoge
%define         version 2.0.15
%define         release 01UL1
%define         prefix  /usr

Summary:        Multithreaded FTP client for X Windows
Name:           %{name}
Version:        %{version}
Release:        %{release}
Copyright:      GPL
Group:          Applications/Internet
Url:            http://www.hogehoge.org/
Vendor:        Hoge Hoge <hogehoge@hogehoge.org>
Source:         http://www.hogehoge.org/%{name}-%{version}.tar.gz
Packager:       Tomoya Sakurai
BuildRoot:      /var/tmp/%{name}-%{version}-root
Requires:       gtk+ >= 1.2.3

%description
hogehoge is a multithreaded FTP client for X Windows written using Gtk. It
features simultaneous downloads, resuming of interrupted file transfers, file
transfer queues, downloading of entire directories, ftp proxy support, remote
directory caching, passive and non-passive file transfers, drag-n-drop support,
bookmarks menu, stop button, and many more features.

%prep
%setup -q

%build
rm -rf $RPM_BUILD_ROOT
CFLAGS=$RPM_OPT_FLAGS \
        ./configure --prefix=%{prefix}
make

%install
[ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT;
make -e prefix=$RPM_BUILD_ROOT%{prefix} install

%clean
[ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT;

%files
%defattr(-,root,root)
%doc ChangeLog COPYING README TODO docs/USERS-GUIDE
%{prefix}/bin/hogehoge
%{prefix}/bin/hogehoge-gtk
%{prefix}/bin/hogehoge-text
%{prefix}/share/hogehoge
%{prefix}/share/gnome/apps/Internet/hogehoge.desktop
%{prefix}/share/pixmaps/hogehoge.png
%{prefix}/man/*/hogehoge.*
%{prefix}/share/locale/*/LC_MESSAGES/hogehoge.mo

%changelog
* Fri May 24 2009 Tomoya Sakurai
- create rpm package

 

 

rpmパッケージの作成

specファイルからのBuildしてパッケージを作成します。
specファイルは、/home/hoge/rpm/SPCES/に、ソースアーカイブは、/home/hoge/rpm/SOURCES/にある事を確認してください。

準備出来たら、/home/hoge/rpm/SPCES/に移動して、BUILDコマンドを発行します。

rpmbuild -ba hogehoge.spec

 

BUILDが上手く行けば、以下のファイルが作成されます。

/home/hoge/rpm/RPMS/i386/hogehoge-2.0.15-01UL1.i386.rpm

/home/hoge/rpm/SRPMS/hogehoge-2.0.15-01UL1.src.rpm

 

rpmbuildオプション

-bp <---ソースの展開とパッチ当てまで。
-bc <---makeまで。
-bb <---バイナリパッケージの作成。
-bs <---ソースパッケージの作成。
-ba <---バイナリパッケージとソースパッケージの作成。
-bi <---バイナリパッケージとソースパッケージの作成、インストールまで。
--target **** <---指定したアーキテクチャ向けにコンパイルしパッケージする。(i686とか)
--clean <---BUILD時に利用したファイル群を削除
--rebuild <---SRPMをリビルドして、RPMを作成

specファイルを調整しながら、何度か繰り返して、お好みのrpmパッケージを作成してください。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">