web-dev-qa-db-ja.com

RPMをビルドしてファイルをインストールするだけ

いくつかのフォントをインストールすることのみを目的としたRPMを構築する必要があります。私はいくつかのチュートリアルを読みましたが、誰もが何か違うことを提案しているようで、それを行うための非常に基本的なセットアップのようなものを見つけることができませんでした。

仕様の%filesセクション内のファイルを単に参照することは可能ですか?しかし、私は試しましたが、RMPは常にtmpディレクトリ内のファイルを見つけようとします。必要なすべてをtmpディレクトリにコピーする特定のビルドステップを追加する必要がありますか?

RPMをビルドするときに、これらのファイルをSOURCEまたはBUILDディレクトリに配置する必要がありますか?私はそれについて多くの異なる情報を見つけてきました。ファイルを含むtarballを作成してSOURCEディレクトリの下に配置することをお勧めする人もいますが、フォントファイルは実際のソースファイルではないため、これは少し間違っているようです。

理想的には、BUILDフォルダー内のすべてのフォントファイルを./usr/share/fonts/のようなディレクトリ構造の下に置き、SPECの%fileセクション内でそれを参照して、rpmを実行させます魔法です。おそらく私はここで何かが足りないか誤解しています。

%filesセクションは常にtmpディレクトリ内のソースファイルを見つけることを期待していますか、それとも私の設定に問題がありますか?を含む~/.rpmmacrosを作成しました

%_topdir             /Users/user/rpm

これは、ルートビルドディレクトリであり、BUILD、RPMS、SOURCES、SPECS、およびtmpディレクトリが含まれています。

それをきれいに動作させるために、スペックファイルで最低限必要なアイテムを誰かが提供できたらうれしいです。

編集

User3159253の提案に従い、次のスペックファイルを使用しています。

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/usr/share/fonts
cp ./usr/share/fonts/* %buildroot/usr/share/fonts/

%clean

%files
/usr/share/fonts/*

フォントをBUILD/usr/share/fonts /ディレクトリにコピーしました。 rpmでファイルのリストを照会すると、すべてのフォントが存在します。しかし、rpmをインストールすると、

/usr/share/fonts is needed by test-1.0.0-1.noarch

ただし、このディレクトリが存在するかどうかは関係ないので、rpmはこのリソースがデータベースにリストされていないことを報告しています。

%fileセクションを次のように変更することで、これを修正できました:

/usr/
/usr/share/
/usr/share/fonts/
/usr/share/fonts/*

しかし、これが良い考えだとは思えません。これを修正するより良い方法はありますか?

14
st-h

_%files_セクションにファイルをリストすると、これらのファイルは%{buildroot}ディレクトリ内にあることが期待されます。 Fedoraのドキュメントには、Fedora 10 buildroot 再定義できない が仕様書に記載されているため、そうです、%buildroot内に必要なファイルシステム階層を作成し、そこにフォントファイルをコピーして、_%files_:

_...
%install

mkdir -p %{buildroot}/usr/share/fonts
cp /path/to/existing/MyFont.ttf %buildroot/usr/share/fonts/
...

%files
%defattr(0644, root,root)
/usr/share/fonts/*
_

ディストリビューションにはおそらく標準フォントファイルの場所に便利なマクロがあり、rpmのインストール時にシステムに適切に登録されますが、これらのマクロのほとんどはベンダー固有です。また、フォントファイルをSOURCES /サブディレクトリにコピーし、rpm仕様の_Source:_(_Source<N>:_)タグでそれらを言及する必要があります(単なる例で、数値は任意です):

_Name: myfonts
Summary: my fonts package
...
Source5: MyFont.ttf
...
_

次に、_%install_セクションで次のようなものを使用できます。

_cp %{SOURCE5} %buildroot/usr/share/fonts/
_

myFont.ttfへの絶対パスの代わりに。

Update:依存関係の欠如は正しい:これはファイルシステム上のアーティファクト(ファイル、ディレクトリなど)ではなく、RPM db(/var/lib/rpmにあります)。したがって、問題を解決するには、そのDBを使用する必要があります。

したがって、生成されたRPMパッケージに満たされていない依存関係がある場合は、2つのオプションがあります。

  1. 少数のファイルを標準システム機能(下記参照)と緊密に統合せずに配布する便利な方法が必要な場合は、すべてのrpm依存関係の自動計算。これらすべてを完全に無効にするには、_AutoReqProv: no_を使用します。
  2. ただし、残りのOSとの統合を強化したパッケージをビルドする必要がある場合があります。たとえば、フォントは、適切なシステム機能内で登録を必要とする場合があります。 fontconfig。残念ながら、異なるLinux rpmディストリビューションでは、それに関する慣習が少し異なります。実際には、このプロセスが既存のフォントパッケージのディストリビューションでどのように構成されているかを確認する必要があります。適切なソースrpmパッケージ( http://rpmfind.net または http://rpm.pbone.net RPM検索エンジンを確認してください)を取得し、.specを抽出することができます。 -仕様の_%prein_、_%postin_、_%preun_および_%postun_セクションがどのように構成されているかをファイルして調査します。明らかに、フォントパッケージは通常その名前に-fonts-を付けています:)

結局のところ、依存関係を表示して、アンインストールしたrpmパッケージを_rpm --query --requires --package </path/to/file.rpm>_および_rpm --query --provides --package </path/to/file.rpm>_で提供できます。インストールされたパッケージのdepは_rpm --query --requires <rpm_name>_などで示されます。

7
user3159253

編集した質問に対する回答として、以下があなたが求める回答である可能性があります。

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/
cp -r ./* %buildroot/

%clean

%files
/*

ここでは、BUILDディレクトリ内のすべてのファイルがパッケージの一部であると見なします。これは/*%files

これがあなたの質問に正しく答えることを願っています。

2
fury.slay