8.4. ソースパッケージからバイナリパッケージを再構築(rebuild)する。

rpmパッケージを apt-get や rpm -i や rpm -U でうまくインストールできない場合は、ソースパッケージ(src.rpm)からバイナリパッケージを作成する必要があります。 また、お使いのVine Linux用に用意されたパッケージ以外(Fedora 向けや Vine Linux の他のバージョン向けのパッケージなど)をインストールする場合は必ずソースパッケージから再構築して下さい。

8.4.1. root で作業する危険性

root ユーザーは全ての権限をもっています。 そのために、パッケージ再構築時の "操作ミス" や、"パッケージに含まれるミス" によって、 重要なファイルを書き換えたり削除して、システム全体に致命的なダメージを与えたり、 登録されているユーザーやグループを削除してしまったりすることがあるかもしれません。

また、パッケージに "悪意のあるコード" が含まれていれば、ネットワークを通じてユーザー情報を漏洩させたり、外部からあなたのPCを自由に操作できるようにしてしまうことがあるかもしれません。

これらの危険を避けるために、root 権限が必要となるインストール、アンインストール以外の作業は全て一般ユーザーで行って下さい。 Vine Linux で提供しているパッケージについては、再構築時に root 権限が必要となるものはないはずです。

また、Vine Linux 3.0 からは、パッケージングに関する指針に従って、パッケージに GnuPG による署名が施されるようになりました。

もし、Vine Linux で提供しているパッケージのミスなどが見つかった場合には、メーリングリスト等を通じて報告して下さい。 ミスの発見の情報だけでも歓迎され、パッケージが改善されるでしょう。

8.4.2. 環境設定

8.4.2.1. 開発環境のインストール

ソースパッケージを rebuild するためには、rpmbuild というコマンドが必要になります。[4]このコマンドは rpm-build というパッケージに含まれています。

また、圧縮されたファイルを展開するためのコマンドや、コンパイル作業に必要となるコマンドなどを含んださまざまなパッケージが必要となります。

Vine Linux では、これらのパッケージをまとめてインストールするために、build-essential というパッケージが用意されています。root ユーザーでインストールしてください。

# apt-get install build-essential

rpm-build,gcc,gcc-c++,glibc-devel,libstdc++3-devel,make,gzip,bzip2,tar,patch,findutils,fileutils,file,libtool,automake,autoconf などがインストールされます。

最低限の開発環境はインストールされましたが、パッケージによってはその他にもライブラリ等のパッケージが必要になる場合があります。詳細は、項8.4.3. 「再構築に必要なパッケージ」で説明します。

8.4.2.2. 必要なディレクトリやファイルの準備

一般ユーザーの権限で src.rpm を rebuild するために、パッケージを展開し、構築するための場所が用意されています。 このディレクトリは ~/rpm となっています。もし、ホームディレクトリ(~)にこのディレクトリがなければ以下のようにして作成してください。

$ cd
$ mkrpmdir .

mkrpmdir コマンドを実行すると、必要なディレクトリと 設定ファイル ~/.rpmmacros を作成してくれます。

手動でディレクトリを作成するには、以下のようにします。

$ mkdir -p ~/rpm/{BUILD,SOURCES,SPECS,SRPMS,RPMS/{i386,i586,i686,noarch}}

また、~/.rpmmacros に設定を記述しておく必要があります。以下のようにしてください。

$ echo "%_topdir $HOME/rpm" > ~/.rpmmacros

8.4.3. 再構築に必要なパッケージ

8.4.3.1. インストール時に必要なパッケージ

再構築しようとしているパッケージが、再構築後のインストール時に他のパッケージを必要とする場合があります。 apt-get install に -s オプション(simulateのs)をつけて、インストールを試行すると確認できます。 他のパッケージの再構築も行うなら、確認しておきましょう。 root で行ってください。

# apt-get -s install パッケージ名

xemacs の場合は次のようになります。

# apt-get -s install xemacs
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下の追加パッケージがインストールされます:
 xemacs-sumo
以下のパッケージが新たにインストールされます:
 xemacs xemacs-sumo
アップグレード: 0 個, 新規インストール: 2 個, 削除: 0 個, 保留: 0 個

xemacs をインストールするには、xemacs-sumo も必要なことがわかりました。

8.4.3.2. 再構築に必要なライブラリ等のインストール

ソースパッケージを再構築する場合には、開発用のパッケージを必要とするものがあります。 必要なコンパイラーやdevelパッケージは以下のようにするとインストールすることができます。 root で実行してください。

# apt-get build-dep パッケージ名

xemacs の場合は次のようになります。

# apt-get build-dep xemacs
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  Canna-devel XOrg-devel autoconf213 faces-devel libdnd-devel libjpeg-devel 
  libpng-devel libtiff-devel libwnn6-devel openMotif-devel xemacs-sumo
  略

xemacs の再構築に、xemacs-sumo も必要なようです。xemacs-sumo は再構築せずにインストールしてしまうことにします。xemacs-sumo も再構築する場合は、xemacs より先に再構築して、インストールしてください。

8.4.4. ソースパッケージの入手方法

特定のコマンドのソースを読みたい場合など、どのパッケージに含まれているかを知りたい場合は、項8.2.8. 「apt-cacheコマンドによるパッケージの検索」項8.3.4. 「rpmパッケージに関する情報を得る (rpm -q)」を参照してください。

8.4.4.1. apt-get コマンドによる src.rpm の入手

Vine Linux 向けに用意されているパッケージのソースパッケージは apt-get コマンドで簡単に入手できます。

$ apt-get source パッケージ名

コマンドを実行したディレクトリにソースパッケージがダウンロードされます。

例 8.8. xemacs のソースパッケージを入手する

$ apt-get source xemacs
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
8846kB のソースアーカイブを取得します。
取得:1 http://updates.vinelinux.org 3.0/i386/plus xemacs 21.4.15-0vl2 (srpm) [8846kB]
8846kB を 2m24s 秒で取得しました (61.1kB/s)
   1:xemacs                 ########################################### [100%]

8.4.4.2. ftp サイトなどからの src.rpm の入手

Vine Linuxを配布しているftpサイトにアクセスすると Vine-バージョン/SRPMS/ というディレクトリがあり、そこにソースパッケージがあります。

また、Errata 等で更新されたパッケージについては、Vine-バージョン/updates/SRPMS/ にソースパッケージが置かれています。

VinePlus のパッケージは VinePlus/バージョン/ の中にあり、3.0からカテゴリによって、SRPMS.extras/、SRPMS.nonfree/、SRPMS.orphaned/、SRPMS.plus/、SRPMS.task/ のようにわけられています。

ftp サイトによって、多少ディレクトリの構成が異なるかもしれませんが、SRPMS というところを探していけば見付けることができます。

具体的なパッケージ名がわかっている場合には、apt-get コマンドを利用したほうが簡単に入手できます。

8.4.5. ソースRPMの再構築

8.4.5.1. apt-get コマンドによる再構築

apt-getコマンドでソースパッケージを再構築するには、sourceコマンドに-bオプションを付加します。

$ apt-get -b source パッケージ名

カレントディレクトリにソースパッケージがあるかどうかチェックが行われ、無い場合はダウンロードされます。既にダウンロードしている場合は、パッケージ名の代わりにソースパッケージ名でも構いません。

再構築が完了すると 書き込み完了: ファイル名 と表示されるのでメッセージを頼りにできあがったバイナリRPMをインストールしてください。

例 8.9. xemacs の再構築

$ apt-get -b source xemacs

パッケージリストを読みこんでいます...
依存情報ツリーを作成しています...
8846kB のソースアーカイブを取得します。
取得:1 http://updates.vinelinux.org 3.0/i386/plus xemacs 21.4.15-0vl2 (srpm) [8846kB]
1B を 10s 秒で取得しました (0B/s)
xemacs-21.4.15-0vl2.src.rpm をインストール中
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.66891
  略
書き込み完了: /home/user/rpm/RPMS/i386/xemacs-21.4.15-0vl2.i386.rpm
書き込み完了: /home/user/rpm/RPMS/i386/xemacs-el-21.4.15-0vl2.i386.rpm
  略
+ umask 022
+ rm -rf xemacs-21.4.15
+ exit 0

8.4.5.2. rpmbuild コマンドによる再構築

FedraやTurbo Linuxなど、他のディストリビューション向けに配布されているパッケージを利用する場合は、そのソースRPMを取得して再構築する必要があります。 この場合、apt-getによる再構築はできませんのでrpmコマンドを使って再構築する必要があります。

rpmbuild --rebuild ソースパッケージ

8.4.6. パッケージの再構築に関するQ&A

8.4.6.1. 他のディストリビューションのソースパッケージはどこにありますか?
8.4.6.2. ソースパッケージの再構築に失敗します。
8.4.6.3. *.tar.gzや*.tar.bz2という形式のソースアーカイブからRPMパッケージを作成したいのですが。
8.4.6.4. 『RPMパッケージの作成』を読みましたが、よく分かりません。個人的に使うアプリケーションを簡単にRPMパッケージにする方法はありませんか?
8.4.6.1.

他のディストリビューションのソースパッケージはどこにありますか?

できるだけ Vine Linux 向けに作成されたパッケージの使用をお薦めしますが、Vine Linux 向けのパッケージが用意されていない場合など他のディストリビューション向けのパッケージを探したい場合は、それぞれのディストリビューションの公式サイトやRpmfindなどを利用してください。また、目的のアプリケーションの公式サイトにソースパッケージ(*.src.rpm)が用意されている場合もあります。

8.4.6.2.

ソースパッケージの再構築に失敗します。

いくつかの原因が考えられます。いずれの場合にしろ、RPMパッケージを作成するための知識が必要になりますのでRPMパッケージの作成を参照してください。

ビルドに必要なパッケージの名前が、使用中のVine Linuxのバージョンでは異なった名前になっている。

必要なパッケージを再構築するために必要なパッケージをインストールしようとしたが、見つからない場合、パッケージ名が異なっている場合があります。例えば、Vine Linux 2.6 では docbook-dtd41-sgml と呼ばれていたパッケージは、3.0以降 docbook-dtds に統合されています。この様な場合は、specファイルの修正が必須になります。当然、該当するパッケージもインストールしておく必要があります。

ビルドに必要なパッケージの情報が不足している。

パッケージを作成した環境にインストールされていたためにパッケージ開発者がspecファイルへの記述を忘れてしまったパッケージが存在する場合があります。パッケージの再構築に失敗する直前のエラーメッセージなどを参考に必要なパッケージをインストールし、できるだけspecファイルを修正してください。

ビルドに必要なパッケージのバージョンに問題がある。

過去のバージョンで依存パッケージに互換性のない仕様変更が行われており、specファイルでバージョンの制限に問題があるために再構築に失敗する場合が考えられます。この場合は、古いバージョンをインストールするためのパッケージがないか、逆に新しいバージョンに対応したソースRPMがないか探してください。例えば、PNGフォーマットを扱うためのライブラリであるlibpngには、libpng10という古いlibpngをインストールするためのパッケージが存在します。

8.4.6.3.

*.tar.gzや*.tar.bz2という形式のソースアーカイブからRPMパッケージを作成したいのですが。

基本的には、RPMパッケージの作成を参照してください。

ただし、それらの圧縮ファイルにspecファイルが含まれているとrpmbuildコマンドの-tを利用して再構築できる場合があります。

$ rpmbuild -ta packagename-version.tar.gz

この例の場合は、再構築が成功した場合、バイナリRPMとソースRPMの両方が作成されます。

8.4.6.4.

『RPMパッケージの作成』を読みましたが、よく分かりません。個人的に使うアプリケーションを簡単にRPMパッケージにする方法はありませんか?

将来のメンテナンスを考えると個人的に使うアプリケーション等であってもRPMの管理下に置いた方が便利でしょう。

rpm で配布されていないもの、spec ファイルの無いもの でも、インストール用のシェルスクリプト や Makefile が用意されているものなら、CheckInstall を利用すると rpm としてインストールできます。ソースアーカイブにインストール用の Makefile や シェルスクリプト があっても、アンインストール用のものは用意されていないことも多いですが、CheckInstall を利用すると、アンインストールが簡単にできるようになります。

CheckInstallは、VinePlusに用意されていますのでroot権限で以下のコマンドを実行してください。

# apt-get install checkinstall

使い方は、

# make install

とする代わりに

# checkinstall

を実行する場合や

# sh install.sh

の代わりに

# checkinstall sh install.sh

を実行する場合などがあります。詳細については、CheckInstallに付属のドキュメントを参照してください。



[4] RPM Version 4 で 再構築等にかかわる rpm -b や rpm --rebuild が rpm 本体のパッケージから分離され rpm-build のパッケージとなり、コマンドも rpmbuild -b , rpmbuild --rebuild となりました。過去との互換性のためにVine Linux では、rpm-build のパッケージがインストールされていれば、rpm -b や rpm --rebuild も使えますが、今後はrpmbuildを使う様にしてください。