自分で作るRPMパッケージ
RPMパッケージの自作
このように、RPMパッケージを作成すること自体はrpmコマンドで簡単にできます。問題は、specファイルをどのように作るかに帰着するといっていいでしょう。
ただ、ソースコードからコンパイルする場合、まずコンパイルをエラーなく行えるようにしなければなりません。これに関しては本稿で扱う範囲を逸脱するので、割愛させていただきます。申し訳ありませんが、この作業はできるもの、という前提です。最近のソフトウェアは、たいてい./configureで設定できるので楽です。
また、オリジナルに対する変更を記述した差分ファイル(パッチ)を作っておくと、後で変更点がすぐ分かります。
■パッケージ作成の下準備
作業用のディレクトリは、前述のように~/RPM/BUILDを使いましょう。この下にパッケージ名に即したディレクトリを作り、その下で試行錯誤します。
1つ注意する必要があるのは、rpmコマンドはパッケージを作るとき、1度インストールを行うということです。つまり、普段と同じようにコンパイルすると、システムに存在するファイルを書き換えてしまうということです。これを回避するため、一時インストール用のディレクトリを/var/tmpあたり作成するようにMakefileなり、configureなりを書き換えておく必要があります。
最近のソフトウェアなら、makeまでは比較的簡単にできるはずです。そこでいきなりmake installせず(インストール用のコマンドがあってもそれを実行せず)、make -n installで様子を見ます。これで/var/tmpあたりにインストールするように、Makefileの該当部分を書き換えます。これはあくまでインストール時の話で、コンパイル時には実際にインストールするディレクトリを指定してやります。例えば、
$ ./configure --prefix=/usr |
としてからmakeコマンドを実行し、make -n installで様子を見るわけです。
本番のインストール先にしても、/usrにするか、/usr/localにするか、ちょっと悩むところです。一般に/usr/local以下はパッケージ管理システムの管轄外であり、ソースコードからコンパイルする場合のインストール先になっています。従って、RPMパッケージを作るのであれば、インストール先は/usrとしておくべきでしょう。
■specファイルの書き方
では、ctags.specを例にして、specファイルの中身を見てみましょう。もちろん、これですべてが解説できるわけではありませんので、細かい部分はマニュアルやドキュメントを参照してください。また、リスト1に今回作成したspecファイルの完成版を掲載しておきます。
Summary:
パッケージの内容を簡潔に説明する部分。いわば、一口メモです。
Name:
パッケージの名前です。
Version:
パッケージのバージョンです。元になるソフトウェアのバージョンに合わせましょう。
Release:
同じバージョンを元にしても、微妙に違うパッケージを作ることもあります。バグの修正や、特別なオプションの指定などですね。それを見分けるために、リリース番号を使います。
Copyright:
著作権表示です。
Group:
rpmパッケージとしての分類を記述します。LASER5 Linux 6.4の場合は/usr/doc/rpm-3.0.5/GROUPS(リスト2)に各グループが記載されています。
Source:
ソースコードの在りかです。URLを記述しておくと便利ですが、実際には~/RPM/SOURCESにコピーしておきます。
Patch0:
パッチファイルです。番号を変えて、複数指定できます。これも~/RPM/SOURCESにコピーしておきます。
Buildroot:
パッケージ作成時、一時的にインストールに利用するディレクトリです。ここに書くだけでは駄目で、Makefileやconfigureを修正する必要があります。
%description
ちょっと長めの解説です。
%prep
パッケージ作成前に行う作業を記述するセクションです。普通は何も書く必要がありません。
%setup -q
ソースファイルを展開して、できたディレクトリに移動する命令です。普通はソースファイルの名前に応じたディレクトリが作成されますが、-nオプションで明示的に指定できます。ちなみに-qは表示を抑制するオプションです。
%patch0 -p1
これは展開したソースにパッチを当てるコマンドです。最近ではほとんどパッチを当てる必要はないのですが、Makefileなどはかなり変更するのでrcsなどを使ってdiffを取れるようにしておいた方がいいでしょう。
%build
ここから後ろにはコンパイル時に実行するコマンドを並べます。ここには記述されていませんが、rm -rf $RPM_BUILD_ROOTを実行しておいた方が安全です。
%clean
パッケージ作成後の動作を記述します。作業ディレクトリをきれいに削除するのが一般的です。
%files
%doc FAQ INSTALL NEWS QUOTES README
/usr/bin/ctags
/usr/man/man1/ctags.1.gz
これはパッケージに含まれるファイルの一覧です。%docの行に記述した場合はソースコードを展開したディレクトリにあるファイルを意味します。それ以外のファイルは、続く行にパッケージインストール後の絶対パス名で記述します。make
-n installなどで確認のこと。
%changelog
変更履歴です。いつ、だれが、どこを、何のために直したのかを書いておくべきです。
ここには記述されていませんが、%descriptionよりも前にRequires:を記述しておくと、依存関係を定義できます。
Requires: foo |
はそれぞれ「fooに依存」「バージョン2.1のfooに依存」「バージョン2.1以上のfooに依存」ということになります。
ほかにもいろいろと記述できますが、最低このくらいを書いておくべきでしょう。
■rpmコマンドの実行
さて、無事にmakeとmake installができるようになったら、RPMパッケージを作るための最後の準備です。
まずソースコード一式とパッチファイルを~/RPM/SOURCESにコピーします。まあ、最初からここにダウンロードした方がいいかもしれません。次に、作成したspecファイルを~/RPM/SPECSにコピーします。
そこでおもむろに
$ rpm -bb ctags.spec |
を実行するわけです。幸運を祈る!
2/3
|
Index | |
自分で作るRPMパッケージ | |
RPMによる管理のメリット | |
SRPMの利用 作業用ディレクトリの作成 SRPMのリビルド |
|
RPMパッケージの自作 パッケージ作成の下準備 specファイルの書き方 rpmコマンドの実行 |
|
Appendix パッケージ作成のrpmオプション 各種リスト |
Linux Square全記事インデックス |
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|