RPM パッケージの作り方2011年1月3日 | ||||||||||||||||||||||||||||||||
はじめにソースパッケージからの RPM パッケージの作り方について。 使用バージョンopenSUSE 11.3 x86_64, RPM 4.8.0。 セットアップRPM パッケージを作るためのセットアップを行う。まず RPM 用のディレクトリを作成。
$ mkdir -p ~/redhat/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
redhat ディレクトリのパスを ~/.rpmmacros で設定。 $ echo "%_topdir $HOME/redhat" > ~/.rpmmacros RPM パッケージを作り始める前にソースパッケージの RPM パッケージを作ろうとする場合、その前に SRPM パッケージが存在していないか確認してみる。もし SRPM ファイルがあれば、以下のようにして RPM ファイルを作ることができる。 $ rpmbuild --rebuild sample-1.0.src.rpm あるいは、ソースパッケージが SPEC ファイル (*.spec) を含む場合は、ソースパッケージから直接 RPM ファイルを作ることができる。 $ rpmbuild -tb sample-1.0.tar.gz RPM ファイルは ~/redhat/RPMS のなかに作成される。 以上の手段が採用できない場合は、自分で SPEC ファイルを書いて RPM パッケージを作ることになる。 コンパイルまずは RPM パッケージを作りたいソースパッケージのコンパイルを成功させる。コンパイルの手順は詳細に書き留めておく。コンパイルに必要になったライブラリなどの情報も必要。 最近のソースパッケージの多くは以下のようにコンパイルできる。 $ mkdir ~/temp $ tar xvzf sample-1.0.tar.gz $ cd sample-1.0 $ ./configure --prefix=$HOME/temp/usr/local $ make $ make install インストールされるファイルのリストを得るために、ホームディレクトリの temp ディレクトリをルートディレクトリに見立ててインストールしている。 インストールされたファイルのリストを取得する。 $ cd $ find temp > list 以下のようなリストが得られる。 temp temp/usr temp/usr/local temp/usr/local/bin temp/usr/local/bin/sample ... エディタの置換機能で行頭の "temp" を削除し、手動でディレクトリの行を削除する。 SPEC ファイルを作るRPM パッケージを作るためには SPEC ファイルが必要である。SPEC ファイルは ~/redhat/SPECS に作る。たとえばつぎのようなものである。 sample.spec
Name: sample
Summary: This is sample
Version: 1.0
Release: 1.0
License: GPL
Group: Productivity/Graphics/3D Editors
Source: %name-%version.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: make autoconf automake gcc gcc-c++
%description
SAMPLE is a sample source package for an exercise building RPM package.
%prep
%setup
%build
./configure --prefix=$RPM_BUILD_ROOT/usr/local
make
%install
make install
%clean
rm -rf $RPM_BUILD_ROOT
%files
/usr/local/bin/sample
/usr/local/lib/libsample.so
"%files" 以下に前もって作っておいたファイルのリストを挿入する。 "Group" に何を書いたらよいのかで迷うかもしれない。これはディストリビューションにより異なる。openSUSE の場合は YaST の "ソフトウエア管理" の "RPM グループ" を参考にすればよい。関連する既存の SRPM ファイル (バージョン違いの同パッケージなど) の SPEC ファイルを参考にするのが早い。 既存の SRPM ファイルの SPEC ファイルを参考にしたい場合は、つぎのようにして SRPM ファイルをインストールする。 $ rpm -i sample-0.9-1.0.src.rpm ~/redhat/SPECS に SPEC ファイル (上の場合たぶん "sample.spec") がインストールされる。 RPM パッケージを作るソースパッケージを ~/redhat/SOURCES に入れる。 $ cp sample-1.0-1.0.rpm ~/redhat/SOURCES つぎのようにして SPEC ファイルから RPM ファイルを作成できる。 $ rpmbuild -bb sample.spec RPM ファイルは ~/redhat/RPMS の中に作成される。RPM パッケージと SRPM パッケージを同時に作りたい場合はつぎのようにする。 $ rpmbuild -ba sample.spec SRPM ファイルは ~/redhat/SRPMS の中にできる。SRPM ファイルだけ作りたい場合はオプション "-ba" の代わりに "-bs" を指定すればよい。 CheckInstall を使うCheckInstall というものを使えば、もっと簡単に RPM パッケージを作成できる (openSUSE であれば YaST の "ソフトウエア管理" でインストール可能)。以下は Netgen 4.9.13 の RPM ファイルを CheckInstall で作成した例である。configure 実行後、checkinstall を実行している。
$ cd netgen-4.9.13
$ ./configure \
--with-tcl=/usr/lib64 \
--with-tk=/usr/lib64 \
--enable-occ --with-occ=/opt/OpenCASCADE \
--enable-nglib \
--enable-jpeglib \
--prefix=/usr/local \
--libdir=/usr/local/lib64
...
$ /usr/sbin/checkinstall
checkinstall 1.6.2, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
このソフトウェアはGNU GPLの下でリリースしています。
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: (Enter を入力)
パッケージのドキュメンテーションを準備..OK
使用するパッケージ方式を選んでください。
Slackwareなら[S], RPMなら[R], Debianなら[D]を入力r (RPM なので r を入力)
このパッケージの説明を書いてください
説明の末尾は空行かEOFにしてください。
>> (Enter を入力)
**************************************
**** RPM package creation selected ***
**************************************
このパッケージは以下の内容で構成されます:
1 - Summary: [ Package created with checkinstall 1.6.2 ]
2 - Name: [ netgen ]
3 - Version: [ 4.9.13 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ x86_64 ]
8 - Source location: [ netgen-4.9.13 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ netgen ]
変更するものの番号を入力してください。Enterで続行します: (Enter を入力)
... (コンパイルが実行される)
**********************************************************************
Done. The new package has been saved to
/home/adelie/redhat/RPMS/x86_64/netgen-4.9.13-1.x86_64.rpm
You can install it in your system anytime using:
rpm -i netgen-4.9.13-1.x86_64.rpm
**********************************************************************
これで ~/redhat/RPMS 以下に RPM ファイルができる。SPEC ファイルを用意する必要はない。 | ||||||||||||||||||||||||||||||||
| PENGUINITIS | ||||||||||||||||||||||||||||||||