メニューを飛ばして本文へ


Vine Linux

検索

Google

5.3. ファイルリスト部

%filesはじまる部分で、rpmパッケージにつめこむファイル名を列挙します。 このとき以下に注意してください。

  • ここに書くファイル名は重複したらいけません。

  • 列挙されたファイルは、%docで指定するものを除いて、 %installまでのスクリプトの実行によって、 記述した通りの場所(${RPM_BUILD_ROOT}を''/''とみなす) にinstallされるものでないといけません。

  • 列挙されたファイルがおかしな userID/groupID を持っていると、 rpmパッケージが正常にbuildできないことがあります。

rpmコマンドは、specファイルに基づいてrpmパッケージを作るときに、 (2)で設定した一連のスクリプトを実行した後、 ${RPM_BUILD_ROOT}をとみなして%files以下で指定されたファイルを回収し、 それを指定位置にinstallするようなrpmパッケージをつくります。

  • ドキュメント・ファイルの指定

    %docというマクロを用います。specファイルの例のように、%doc READMEとすると、 %setupで指定したホームディレクトリ下のREADMEが、 ${RPM_BUILD_ROOT}/usr/doc/hoge-1.1-2/にcpされたのち、 rpmパッケージに回収されます。つまり%docは、 ドキュメントファイルのインストールとパッケージングのためのファイル指定を同時に行うマクロとしてはたらきます。 以下のように、ディレクトリごと指定もできます。

    %doc doc/
  • rpmに含めるファイルの指定

    その絶対パスで指定します。

    • 個別ファイルはそのまま指定。(/usr/bin/hoge.bin など)

    • あるディレクトリ以下の全てのファイルをrpmパッケージにいれたいときには、 そのディレクトリ名を書きます。(タグなし、/usr/hoge/ など)。 アンインストール時には、そのディレクトリごとなくなります。

    • ワイルドカードも使えます。(/usr/hoge/* など)

    Warning

    rpm-3.0.5以降では、man ファイルや info ファイルは自動的にgzipで圧縮されます。 %filesにmanやinfoのファイル名を書くときには拡張子.gzをつけるのを忘れないようにしましょう。

  • タグを用いたファイル指定

    %dir <dir name>

    指定したディレクトリだけをパッケージに含める。

    ``/usr/hoge/'' = ``%dir /usr/hoge/'' + ``/usr/hoge/*''

    ってかんじです。

    %config <file name>

    configファイルであることを示す。 ファイルが書き換えられていた場合、 アンインストール時には .rpmsaveをつけた名前で保存されます。 アップグレード時には新しいファイルと置き換えられ、 元のファイルは .rpmsaveをつけた名前で保存されます。

    ファイルが変更されていた場合、 アップグレード時に新しいファイルに置き換えずにもとのファイルをそのまま使う場合には、 %config(noreplace) を指定します。

    %config(noreplace) <file name>

    この場合新しいパッケージに入っている設定ファイルは、 .rpmnew をつけた名前で保存されます。 また、アップグレードではなく、同じバージョンをインストールし直した時には、 .rpmorig をつけた名前で保存されます。

    存在しなくても問題ないファイルの場合は、 %config(missingok) を指定します。

    %config(missingok) <file name>

    これは、rpmコマンドの -V オプションでチェックした時に、 ファイルが無くてもエラーにならないようにするためのものです。

    %attr(<mode>,<owner>,<group>[, dirmode]) <file name>

    %filesに列挙するファイルのパーミッションやuser ID、group IDを設定する。 例えば、

    %attr(755,root,root) /usr/lib/hoge

    とする。一部の属性を省略(書き換えない)したいときには - を使って、

    %attr(755,-,root) /usr/lib/hoge

    とする。このタグを用いることによって、 root権限を持ってない人もrpmのパッケージ化を行える。

    %attr(755,root,root)

    のように( )の中には 3つしか書かないことが多いですが、

    %attr(755,root,root,755)

    のように 4つ書くこともできます。 4つ目の数字(dirmode)は、 ディレクトリとサブディレクトリのパーミッションになります。

    %defattr(<mode>,<owner>,<group>[, dirmode])

    それ以降の行に書かれた属性のデフォルト値を設定する。 %attr が出てきた行を除いて、それ以降に書かれたものに共通になります。

    %defattr も %attr も何度でも使えます。 次の例だと、/usr/bin/hoge と /usr/lib/hoge は一つ目の %defattr の 755 になり、 /usr/share/locale/ja 以降は二つ目の %defattr の 644 になります。

    %defattr(755,-,-)
    /usr/bin/hoge
    /usr/lib/hoge
    %defattr(644,-,-)
    /usr/share/locale/ja
    /usr/share/locale/lv

    %attrと同様、4つ目の数字は、 ディレクトリとサブディレクトリのパーミッションになります。

この%filesの指定は少々面倒なとこかもしれません。 %install までの、スクリプト部を書いたところで、 %files以下は何も書かないまま、一度、そのspecファ イルから rpm をbuildしてみるとよいかもしれませ ん。 (rpm -bi hoge.spec これについては次節)。そのあと、 ${RPM_BUILD_ROOT}以下にinstallされてるファイルを、 find コマンドで見てみて%filesの指定をします。