Shino's Bar

お家で使うLinux Tux

SRPMパッケージのリビルドとインストール

12 Jun 2007 (初出:26 May 2001)

RPMの使い方は Vine-Linuxならオンラインマニュアル中に、あるいはWeb上に RPMによるパッケージ管理があります。 とくに「5.3. RPM - RPM Package Manager」、 「5.4. ソースパッケージからバイナリパッケージを再構築(rebuild)する」などが参考になるでしょう。

*.src.rpm、*.nosrc.rpm などのソースパッケージ(SRPM)をリビルドすることにより、*.i386.rpm、*.noarc.rpm などのバイナリパッケージ(RPM)を作ることができます。 できあがったバイナリパッケージを root権限でインストーするのが基本的な手順となります。

SRPMリビルドの環境設定

リビルドに必要なソフト

ソースパッケージを rebuild するためには、rpmbuild というコマンドが必要になります。 (古いシステムでは rpm --rebuild コマンドで代用される。) その他にもコンパイル作業に必要となるコマンドなどを含んださまざまなパッケージが必要となります。 Vine Linux では、これらのパッケージをまとめてインストールするために、build-essential というパッケージが用意されています。root ユーザーでインストールしてください。

# apt-get install build-essential

Vine Linux 以外の RedHat系OS(少なくとも rpm コマンドが使える)では、 「開発ツール」などに分類されているパッケージ群となります。

一般ユーザーでリビルドするために

Vine Linuxでは問題ありませんが、 一部のシステムではSRPMのリビルドに root権限を要求するものがあります。 そのようなシステムでは一般ユーザーでリビルドできる環境を整えることをお勧めします。

  1. ディレクトリの準備
    システムにより場所が異りますが、RedHat系のOSでは /usr/src/redhat、あるいは /var/src/rpm などの下に、 BUILD/ RPMS/ SOURCES/ SPECS/ SRPMS/ などのディレクトリが用意されているでしょう。 これらのディレクトリは root権限でなければ書き込みができません。 そこで、一般ユーザー(ユーザー名を仮に tako とします。)のホームディレクトリに、同じものを用意します。
    $ cp -r /usr/src/redhat ~/rpm
    /usr/src/redhat のところはシステムにより異ります。
    あるいは、次のようなコマンドでこれらのディレクトリを作成してもよいでしょう。
    $ mkdir -p ~/rpm/{BUILD,SOURCES,SPECS,SRPMS,RPMS/{i386,i586,i686,noarch}}
  2. 設定ファイル
    ホームディレクトリに次の内容を ~/.rpmmacros として置いて置きます。 tako のところはユーザーのホームディレクトリ名、 My name <myaccound@mydomain> のところはユーザーのメールアドレスです。
    %_topdir /home/tako/rpm
    %packager My name <myaccound@mydomain>
    %_sysconfdir /etc

SRPMパッケージのリビルド

ppxp-2001051623-1.src.rpm を使ってインストールする例を示します。

ppxp-2001051623-1.src.rpm を適当なディレクトリにダウンロードし、ユーザー権限で

$ rpmbuild --rebuild ppxp-2001051623-1.src.rpm

としてバイナリを作ります。 古いシステムでは rpmbuild --rebuild ではなく rpm --rebuild の場合もあります。 できたバイナリはVine2.0で標準のままだと/usr/src/redhat/RPMS/i386に、 Vine2.1では~/rpm/RPMS/i386にあるはず。 リビルドのときにたくさん出てくるメッセージの最後のほうに
書き込み中:/home/tako/rpm/RPMS/i386/ppxp-2001051623-1.i386.rpm」 あるいは
Writing...」などで表示されます。 コピーしてくるか、そのディレクトリへ移り、root権限でインストールします。

$ su
$ Password: (rootパスワード)
# cd /usr/src/redhat/RPMS/i386
# rpm -Uvh ppxp-2001051623-1.i386.rpm

インストールの確認は
$ rpm -q ppxp として
ppxp-2001051623-1
とでてくればOK。

nosrc.rpmからの導入法

一部のシステムではRPMのリビルドのroot権限が必要ですが、 RPMを一般ユーザーでリビルドできる環境を整えることをお勧めします。 以下、そのような環境を想定して説明します。

  1. *.nosrc.rpm を適当なディレクトリにダウンロードします。
  2. オリジナルの配布元から*.tar.gz(nosrc.rpmが*.tar.bz2を指定している場合もある)をダウンロードし、 ~/rpm/SOURCES に置きます。 (root権限でリビルドする場合は /usr/src/redhat/SOURCES)
  3. *.nosrc.rpm のあるディレクトリで、
  4.          $ rpmbuild --rebuild *.nosrc.rpm
    古いシステムでは rpmbuild --rebuild ではなく rpm --rebuild の場合もあります。
  5. ~/rpm/RPMS/i386 に移動します。 (root権限でリビルドした場合は /usr/src/redhat/RPMS/i386) *.i386.rpmのバイナリができているはずです。
  6. リビルドのときにたくさん出てくるメッセージの最後のほうに
    「書き込み中:...」 あるいは 「Writing...」などで表示されます。
  7. rootになって、上記のバイナリを導入します。
  8.          $ su
    	 $ password: ルートのパスワードを入力
    	 # rpm -Uvh  *.i386.rpm

FAQ

  1. rpmbuld コマンドが無い と叱られます。

    古いシステムでは rpmbuild --rebuild ではなく rpm --rebuild の場合もあります。 rpmbuild コマンドは rpm-build パッケージに納められている場合があります。 これをインストールするか、 Vine Linuxの場合は build-essential パッケージをインストールしてください。

  2. リビルドしようとすると
    + make
    /var/tmp/rpm-tmp.74455: make: command not found
    /var/tmp/rpm-tmp.74455 の不正なステータス (%build)
    のようなメッセージが出てエラー終了します。

    makeやautoconfなどコンパイル作業に必要なコマンドがインストールされていません。 Vine Linuxの場合は build-essential パッケージをインストールしてください。 あるいは「開発ツール」などに分類されているパッケージ群をごっそり入れてください。

  3. リビルドできたので
    # rpm -Uvh ppxp-2001051623-1.i386.rpm
    としてアップデートしようとすると、 ppxp-0.0012.923-8がすでにインストールされていて、 しかもそっちの方が新しいからインストールできない、というメッセージが出て進めません。

    A. ppxp-0.0012.923-8というのが何だかわかりませんが

    # rpm -Uvh --oldpackage ppxp-2001051623-1.i386.rpm
    と、--oldpackageオプションを加えて入れてください。

ご意見、ご質問は Linux 掲示板

Shino's Bar goto [お家で使う Linux]