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 |