* RPMパッケージをSPECファイルを作ってビルドする [#i32fe4c6]

** ソースを用意する。 [#pb308a3f]
** ソースを用意する [#pb308a3f]
ここではSlony-I ver 1.2.9のパッケージを作ることにする。取得したファイルはslony1-1.2.9.tar.bz2とする。

** パッケージ作成ツリーの設定 [#xddbb766]
一般ユーザでパッケージをビルドするには以下のように$HOME/.rpmmacrosに%_topdirなどを設定する。デフォルトでは/usr/src/redhatなのでROOT権限が必要。
 %_topdir    /home/taro/RPM
 %_srcrpmdir /home/taro/RPM/SRPMS
 %_specdir   /home/taro/RPM/SPECS
 %_sourcedir /home/taro/RPM/SOURCES
 %_builddir  /home/taro/RPM/BUILD

実際にディレクトリを作る。
 mkdir -p ~/RPM/{BUILD,SOURCES,SPECS,SRPMS,RPMS/{i386,i586,i686,noarch}}

*** %_topdirなどのマクロを確認するには [#q141b58d]
以下のコマンドを実行する。
 rpm --swhorc |grep _topdir
 rpm --showrc |grep _topdir
もしくは、以下のコマンドを実行する。
 rpm --eval %_topdir

** SPECファイルの作成 [#k00998b6]
SPECファイルは以下の通り。

- SPECファイル名:slony1-1.spec
- ソースファイル名:%_topdir/SOURCES/slony1-1.2.9.tar.bz2

 Summary: Slony-I
 Name: slony1
 Version: 1.2.9
 Release: 1
 Source0: %{name}-%{version}.tar.bz2
 License: GPL
 Group: Applications/Databases
 BuildRoot: %{_builddir}/%{name}-root
 %description
 Slony-I is a "master to multiple slaves" replication system 
 supporting cascading and failover.
 %define prefix /usr/local
 %prep
 %setup -q
 %build
 ./configure --prefix=%{prefix}
 make
 %install
 rm -rf $RPM_BUILD_ROOT
 make DESTDIR=$RPM_BUILD_ROOT install
 %clean
 rm -rf $RPM_BUILD_ROOT
 %files
 %defattr(-,root,root)
 %{prefix}/bin/*
 %{_libdir}/pgsql/slony1_funcs.so
 %{_libdir}/pgsql/xxid.so
 %{_datadir}/pgsql/*.sql

*** %filesセクション [#ud39cb22]
インストールするファイルを列挙する。いったん仮ディレクトリなどに手動でインストールをしてみて、インストールされるファイルを確認しておくとよい。

%defattrを使って、パーミッションやオーナーを指定できる。例えば以下のように。
 %defattr(755,-,-)
 /usr/bin/hoge
 /usr/lib/hoge
 %defattr(644,-,-)
 /usr/share/locale/ja
 /usr/share/locale/lv

あるいは%attrで個別に指定してもよい。
 %attr(755,root,root) /usr/lib/hoge

*** マクロ変数の定義 [#w03f8af3]
%defineで自分でマクロを定義出来る。
 %define prefix /usr/local

なお、ここで使われているマクロ変数のデフォル値は以下の通り。
- %{_prefix} /usr 
- %{_bindir} %{_prefix}/bin
- %{_libdir} %{_prefix}/lib
- %{_datadir} %{_prefix}/share

*** build root [#b8609acc]
シェル変数RPM_BUILD_ROOT(BuildRoot)を定義して、ソフトウェアの一時的なインストール先を指定する。

GNUなどが配布するソフトウェアの多くは、make installを実行する際にDESTDIRを定義すると、すべてのインストール・パスの先頭にDESTDIRの値が追加される。もし./configure --prefix=$RPM_BUILD_ROOTでコンパイルして、インストール後に$RPM_BUILD_ROOTのフルパスを利用するソフトウェアがあるとマズイので。

*** グループ名 [#sdb944b9]
 $ cat /usr/share/doc/rpm-4.4.2/GROUPS
 Amusements/Games
 Amusements/Graphics
 Applications/Archiving
 Applications/Communications
 Applications/Databases
 Applications/Editors
 Applications/Emulators
 Applications/Engineering
 Applications/File
 Applications/Internet
 Applications/Multimedia
 Applications/Productivity
 Applications/Publishing
 Applications/System
 Applications/Text
 Development/Debuggers
 Development/Languages
 Development/Libraries
 Development/System
 Development/Tools
 Documentation
 System Environment/Base
 System Environment/Daemons
 System Environment/Kernel
 System Environment/Libraries
 System Environment/Shells
 User Interface/Desktops
 User Interface/X
 User Interface/X Hardware Support

** SPECファイルからRPMパッケージを作る [#k951263c]
 rpmbuild -ba slony-1.29-1.spec 

** RPMパッケージをインストールする [#g82b334a]
ROOT権限が必要。
 rpm -ivh slony-1.29-1.rpm

** 参考 [#n8bb0e4a]
- http://www-06.ibm.com/jp/developerworks/linux/020125/j_l-rpm1.html
- http://www-06.ibm.com/jp/developerworks/linux/020222/j_l-rpm2.html
- http://nekomimists.ddo.jp/~tom/nekokick/rpm.html

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS