2

libfoo-develオーバーライドするトリックを使用して、作成できる rpm があります_topdirbarここで、BuildRequires ' " を持つパッケージ " " をビルドしたいと考えています。ビルド ホストにインストールせずlibfoo-develに のコンテンツにアクセスする正しい方法が見つからないようです。どのようにすればよいですか?libfoo-devel

編集:

私のビルドとターゲット ディストリビューションはどちらも SuSE です。

を必要としないソリューションを好みますmock。なぜなら、SuSE はそれをストック リポジトリに含めていないと思うからです。

その後の編集:

私が求める答えはbuildパッケージにあると信じています。おそらく、それは ? に対する SuSE の答えmockでしょうか? それとも、oBS サービスの分散バージョンですか?

説明

build は、SuSE Linux RPM を安全かつクリーンな方法でビルドするためのツールです。build は最小限の SuSE Linux をビルド システムとしてディレクトリにインストールし、このシステムに chroot してパッケージをコンパイルします。こうすることで、パッケージが BuildRoot を使用していない場合でも、動作中のシステムを破損する危険を回避できます (仕様ファイルの破損などによる)。

build は、spec ファイルで BuildRequires: 行を検索します。そのような行が見つかった場合、指定されたすべての rpm がインストールされます。それ以外の場合は、デフォルト パッケージの選択が使用されます。ビルドは不足している依存関係を自動的に解決しないため、指定された rpm はビルドに十分なものでなければならないことに注意してください。

4

2 に答える 2

4

libfoo-develパッケージをビルドするためにインストールする必要が本当にない場合bar、最も賢明な代替手段はlibfoo-develBuildRequires ディレクティブから削除することです (そして、それが属する場所に要件を配置することもできます)。

ただし、何らかの理由でそれができない場合は、「開発用」rpm データベースを作成してください。基本的には を使用しrpm --initdb --root /path/to/fake/rootます。次に、標準のディストリビューション インストールのすべての「ターゲット パッケージ」を入力します。

これは多くのコマンドですが、データベース ファイルrpm --install --root /path/to/fake/root --justdb package-name.rpmをコピーして、それらを出発点として使用する方法を見つけられるかもしれません。/var/lib/rpm/*代替 rpm データベースを取得したら、 --justdb オプションを使用して libfoo-devel パッケージのインストールを偽装できます。その後、実際の rpm ビルドに取り掛かります。

于 2011-06-17T04:08:05.737 に答える
1

モックもopenSUSE Build Serviceも実行可能な選択肢ではない場合は、腰を落ち着けて直接または chroot でパッケージをインストールする必要があります。パッケージは、SRPM パッケージャーがビルドする必要があると判断したファイルを提供するため、BuildRequiresタグに含まれています。

于 2011-06-17T03:57:37.420 に答える