FreeBSD10.3に開発環境があります。 FreeBSDはパッケージの依存関係をそのように管理し、メインパッケージが依存するすべてのパッケージの最新バージョンを常に探すと聞きました。そしてそれは本当のように見えます。だから、私の質問は:
FreeBSDがパッケージを構築する方法
FreeBSDプロジェクトは、リリース用のパッケージのビルドに使用され、STABLEブランチ用のパッケージも作成されていました。古いパッケージビルダーは、Portbuildという名前の分散システムを使用していました。それは、パッケージを構築するために、より小さな2GB-4GBマシンの大きなクラスターを使用します。これはエラーが発生しやすく、主に古いマシンが原因で時間がかかりました。フルビルドにはまだ1週間かかる場合があります。今日のパッケージは、Poudriereを使用した単一の大型マシンを使用して構築されています。 ( Brian Dreweryによるウェブページ から)。
参照: FreeBSDでパッケージとポートの組み合わせを更新する方法
FreeBSDにはSolarisやWindowsと同様に進化するABI(およびAPI)があり、Linuxには安定した(停滞している?)ABI(およびAPI)があるため、Linuxでは古いバイナリは新しいOSバージョンでも実行されますが、Linux以外のOSではそうではありません。 t常に当てはまります(場合によってはそうです)。
pkg lock
を使用すると、それでも 頭痛につながる になる可能性がありますが、pkg upgrade
を使用してアップグレードしようとすると、lock(警告が表示されます)になります。より高い番号のバージョンはbetter(望ましい)であり、それは実行したいことです。したがって、許可を求め、許可することはできますが、他のものが壊れないことは保証されません。上記のURL、またはこの議論を参照してください: " OSバージョンのpkgを介して配布されたバイナリパッケージのバージョンをロックするためにFreeBSDを希望しますか? "。
1つのパッケージがロックされている場合時々ロックを解除してアップグレードを実行する権限を与える必要がありますが、それはwork 1つのパッケージ(およびそのすべての依存関係)にはありません他のものが新しいライブラリと互換性がないことを保証します(したがって、アップグレードも必要ですif1つは現在利用可能)。
Brian Dreweryのブログ: " FreeBSD Journal:Poudriere " opines:
「サーバーでのportmaster、portupgrade、portsの使用を停止し、パッケージに切り替えてください。
Poudriereを使用して独自のパッケージビルドを設定すると、ほんの数分で済み、将来的に多くの時間を節約できます。
...
複数のFreeBSDシステムを保守していて、まだパッケージを使用していない場合は、そうする必要があります。私は20台のサーバーしか保守していませんが、各システムでポートを構築するのに多くの時間を費やし、運用マシンのリソースを無駄にしました。複数のサーバーでポートを構築する場合、オプションやバージョンを同期させるのは非常に簡単です。 1つのシステムでパッケージを1回ビルドすることで、システムの負荷を軽減し、実行する必要のある作業量を減らし、すべてのシステムの一貫性を確保しました。各システムで同じ障害を処理する代わりに、ビルドシステムで処理するだけで済みます。
しかし、ヒッチ...
公式パッケージから逸脱する必要があるのはなぜですか?ポートフレームワークは、ビルド時の構成を変更するためのポートのオプションサポートを提供します。すべてのアプリケーションがランタイム構成をサポートしているわけではありません。一部のアプリケーションは、有効になっている機能に応じて異なる方法でコンパイルする必要があります。その他には、デフォルトのポートの機能と依存関係の量を減らすためのオプションがあります。サーバー管理者にとって、これにより、一部のデフォルトパッケージが要件を満たしていないことがすぐにわかります。
そう ...
カスタムパッケージを取得する方法はいくつかあります。 Pkgは、複数のリポジトリの使用をサポートしています。公式のFreeBSDリポジトリをプライマリとして使用し、カスタムリポジトリをセカンダリとして使用するように設定できます。 Pkgは、追跡できるリポジトリの数に制限されず、優先順位を付けて並べ替えることができます。複数のリポジトリの問題は、現在維持するのが難しい場合があることです。インストールされたパッケージが追跡しているリポジトリとは異なるオプションまたは依存関係を持っていることをPkgが検出すると、パッケージはリモートバージョンから潜在的に再インストールされます。アップグレード中にpkglockPKGNAMEとpkgunlock PKGNAMEを使用してパッケージをロックするか、pkg annotate -APKGNAMEリポジトリREPONAMEを使用して特定のリポジトリにバインドすることができます。カスタムリポジトリのポートツリーをFreeBSDパッケージと同期させておくという微妙な問題もあります。パッケージは週に1回作成されたportsツリーのスナップショットから構築されるため、カスタムリポジトリが一致しない場合、競合が発生する可能性があります。必要なオプションを使用して、必要なものだけのパッケージセット全体を構築する方がはるかに簡単です。
ソリューション:
Poudriere(おおざっぱにpoo-dree-year、フランス語で「powder keg」を意味する)は、Tinderboxのより高速でシンプルな代替として書かれました。これは、Pkgの作者であるBaptiste Daroussinによって書かれ、現在はほとんどがBaptisteや他の寄稿者とともに私によって管理されています。それはすぐに事実上のFreeBSDポートテストとパッケージ構築ツールになりました。これは公式のビルドクラスターツールであり、FreeBSD Portsプロジェクトで「exp-runs」と呼ばれるパッチをスイープするために使用されます。これはPOSIXシェルで記述されており、徐々にCコンポーネントに移行しています。 Tinderboxとは異なり、依存関係がなく、データベースを必要としません。すべての操作で高度に並列化されるように大幅に最適化されています。非常に厳しい条件でサンドボックス環境にポートを構築するために刑務所を使用します。刑務所の作成は、簡単なコマンドで1回実行されます。ビルド中、jailは、ポートがビルドするためのクリーンな場所を提供するために使用されている各CPUに対して自動的に複製されます。
poudriere を使用して独自のリポジトリを設定すると、ポートの柔軟性とパッケージの管理の容易さを実現できます。