RedHat:RPMをビルドするために一種のモック環境にパッケージをインストールすることは可能ですか


10

RPM .specの依存関係を隔離された環境にインストールできるツールはありますか?このような依存関係をシステムにグローバルにインストールすることはありません。ルート権限がないため、インストールできません。

理由

新しいバージョンのBに依存するパッケージAをビルドしたい(システムにグローバルにインストールできない)。

私は、新しいバージョンの構築したいBを、ビルド・ツールをインストールしましょうBは「S -develのビルドに必要なすべてのファイルを提供するために、隔離された環境にそれをA

ソリューション

  • これを行うためのツールはありますか?
  • そうでなければ、言うことでこれを行おうとするとき、私は何に注意すべきchrootですか?
  • これは悪い習慣でしょうか?

回答:


8

はい、ツールが呼び出さmockれ、EPELにあります。

典型的な使用法:

rpmbuild -bs mypackage.spec
mock -r epel-6-x86_64 mypackage-0.1-1.src.rpm

これは、RPMをビルドするための実際の推奨方法です。これは、プロセスをシステムから分離して、予期しない依存関係が取り込まれないようにするためです。

のファイルを変更/etc/mockして、独自のパッケージやプライベートリポジトリなどを取得するか、ドキュメントをチェックして、mockchroot環境に手動でパッケージを追加する方法を確認できます。

mock使用を許可するには、ユーザーをグループに追加する必要があることに注意してくださいmock

偶然ではありませんが、kojiRed Hatが使用するビルドサーバーは、mock個々のパッケージをビルドするために呼び出しを使用します。常に多くのパッケージをビルドする必要がある場合は、kojiビルドサーバーの設定を検討する価値があります。


マイケルに感謝します。私の質問が思ったほど愚かではなかったことをうれしく思います。;)
try-catch-finally

3

本番ホストでパッケージをビルドしようとすることは悪い習慣であり、root権限なしでビルドしようとすることは、独自のビルドマシンを起動するよりも複雑だと思います。私が通常行うことは次のとおりです。

  1. VirtualBoxまたは同様のツールをデスクトップ/ラップトップにインストールします
  2. 本番環境で使用するOSの32/64 VMを作成する
  3. 通常はモック、rpmbuildなどのツールをインストールします
  4. パッケージのRPMとVMの両方のアーチの追加のdepを作成します
  5. テスト後、RPMをサーバーに配布するために内部リポジトリにプッシュします。
  6. もう一度テストして、適切な依存関係が取り込まれていることを確認します
  7. 設定管理を介してリリースします。

これは機能します。モックを使用するよりも優れていますか?モックの方が簡単だと思いますが、どちらにしてもほぼ同じことが起こっているのではないかと思います。
Emory、2013年

私はモックに問題はなく、ほぼすべての「rpmの作成方法」のドキュメントをインストールすると信じています。ただし、ルートアクセスがないと、OPがアカウントをモックグループに追加したり、モックをインストールしたりする方法がわかりません。また、クリーンビルドVMを使用すると、奇妙な依存関係が誤ってパッケージに追加されるのを防ぐことができます。
Ramin 2013年

優れた点。私はそれを考慮できませんでした。それを念頭に置いて、これが正解だと思います。
Emory 2013年

@emoryあなたのフィードバックに基づいて、ビルドVMが全体的に優れたソリューションであると考える理由を明確にしました。拍手してくれてありがとう。:-)
ラミン

@Raminの状況(仕事中)私は唯一のユーザーです。システムは専用のビルドシステムであり、そのホストのすべての開発者がroot権限を持っている場合、そのボックスは1週間後に起動しません。;)したがって、モックのようなツールを使用するのは、まさに正しい使用法です。自動化できる場合は、VMの設定もお勧めです。Vagrant(まだテストしていません)はそのための適切なツールだと思います。
try-catch-finally

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.