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