wiki:self-build-creation

Version 5 (modified by kazutaka, 16 years ago) (diff)

--

self-build パッケージについて

仕組みの概要

  • 事前にターゲットの rpm パッケージを作成するのに必要な、spec と patch やその他のファイルを用意しておきます。
  • 上記のファイル類を self-build-%{target} な rpm パッケージに含めておきます。
  • %post で以下の処理を一括して行います。
    • まず rpm ビルド用のテンポラリディレクトリと作成
    • 次に patch やその他のファイルを /テンポラリ/rpm/SOURCES にコピー
    • 続いて wget を使ってソースをダウンロード
    • 後は、rpmbuild -bb でターゲットのパッケージを所定のディレクトリにビルド
    • rpm2cpio | cpio を使ってビルドしたパッケージからファイルを事前に展開 (オプショナル)
  • apt/synaptic を使ってインストールされた場合は、Scripts::PM::Post:: というスロットを使って、rpm の DB に変更がコミットされた(= self-build-%{target} 自体のインストールが完了した)直後にヘルパースクリプトを呼び出します。
    このスクリプトが所定のディレクトリ(/var/chache/self-build)に置かれたターゲットの rpm ファイルをインストールします。

作り方

  1. 最初にターゲットのプログラム(以下 lame を例に説明) の rpm パッケージが作成できる spec ファイルを用意します。
    もし patch やその他のファイルが必要な場合は、これも一緒に準備しておきます。
  2. 上記の spec ファイルを使って rpm のバイナリパッケージが作成できることを確認したら、次に self-buiild-lame 用の spec を作成します。
    1. ターゲットのプログラム用の spec や patch、その他のファイルを Source? で定義しておきます。
    2. PreReq: にターゲットのプログラムの BuildRequires: と同じものを書いておきます。
      こうすることで、%post でコンパイルする時に必要となるパッケージが一緒にインストールされます。
    3. %install で Source? で定義した各種ファイルを全て ${RPM_BUILD_ROOT}/%{_datadir}/self-build-lame にインストールします。
      またこれらのファイルを %files でも指定しておきます。
    4. %post で rpm パッケージをビルドするヘルパースクリプトを、以下のように実行します。
      %post
      /usr/lib/rpm/self-build-rpm.sh self-build-lame lame.spec !http://...(ソースダウンロード URL)
      
      • 1つ目の引数は、self-build パッケージの名前を指定します。
        この名前を使って spec や patch 類が置いてあるディレクトリ(ここでは /usr/share/self-build-lame)を特定します。
      • 2つ目の引数は、rpm のビルドに使用する spec ファイル名を指定します。
      • 3つ目の引数は、ソースファイルをダウンロードするための URL を指定します。
        ヘルパースクリプトはこの URL から wget を使ってソースをダウンロードしようとします。
        3つめ以降の引数は全てソースの URL と解釈するので、複数のファイルをダウンロードする必要がある場合は、続けて指定できます。
    5. 他の self-build パッケージから依存される場合は、%post で以下のようヘルパースクリプトを実行して、作成した rpm パッケージが実際にインストールされるより前に、必要なファイルをファイルシステム上に展開します。(オプショナル)
      /usr/lib/rpm/pre-allocate-rpm.sh %{pkgname}-%{version}-%{release} \
                                       %{pkgname}-devel-%{version}-%{release}
      
      • 引数には、ターゲットの rpm パッケージ名を指定します。
        対象のファイルが特定できるように Version と Release まで指定する必要があります。
      • ヘルパースクリプトは指定された rpm から 設定ファイル(rpm -qc で表示されるもの)とドキュメント(rpm -qd で表示されるもの)を除いたファイルを rpm2cpio | cpio コマンドで抽出し、ファイルシステム上に展開します。
      • なおこの展開したファイルは、直後の rpm パッケージのインストールにより上書きされます。
  3. spec ができたら、$ rpm -ba self-build-lame.spec で rpm パッケージを作成し、その後 root になって # rpm -Uvh self-build-lame-3.97-0vl3.i386.rpm のようにしてインストールし、ターゲットの rpm ファイルが /var/cache/self-build 以下にできあがることを確認します。

実際にはパッケージ名やターゲットのプログラムの名前、ソースのダウンロード URL 等は %define でマクロとして最初に宣言しておいた方が管理しやすくなります。 self-build-lame.spec がサンプルとして使えると思いますので、初めて作成する方は apt-get source self-build-lame を実行して ~/rpm/SPECS に展開された spec ファイルを参考してみてください。