pkg_add を使用した FreeBSD パッケージのアップグレードの処理

pkg_add を使用した FreeBSD パッケージのアップグレードの処理

私はFreeBSDのpkg_addコマンドを使って、一度ビルドして複数のマシンにインストールするシナリオでバイナリパッケージをインストールおよびアップグレードしようとしています。新しいパッケージをインストールするときはうまく機能しますが、アップグレードは私を困惑させています。たとえば、依存していた別のパッケージによって、インストールすることはできません。

# pkg_add /path/to/somepackage-2.0.tbz
pkg_add: package 'somepackage' or its older version already installed

-fこの時点で、次のコマンドを渡すと、パッケージの古いバージョンを削除できますpkg_delete

# pkg_delete -f somepackage-1.0
pkg_delete: package 'somepackage-1.0' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
anotherpackage-1.0

しかし...これが致命的です...依存関係情報が消えてしまいました! アップグレードをインストールできます:

# pkg_add /path/to/somepackage-2.0.tbz

そして、これを削除しようとすると、エラーが発生することなく成功します。

# pkg_delete somepackage-2.0

これを適切に処理するにはどうすればよいでしょうか (ここでの「適切に」とは、「依存関係チェーン全体を再構築/再インストールする必要なく、依存関係情報を保持する方法」を意味します)。

ありがとう!

答え1

ご存知のとおり、pkg_addポートを正常にアップグレードすることはできません。portupgradeただし、パッケージはこれを非常にうまく実行します。これは私が使用し、推奨する方法です (この方法が気に入らない場合は、他の方法も利用できます)。

ポートがインストールされたら、 を実行するだけでportupgrade -aPP、パッケージを使用してシステムにインストールされているすべてのポートをアップグレードできます。すべてのポートを更新したくない場合は、 を実行して、portupgrade -RPP [category/port]特定のポートとそれが依存するポートをアップグレードできます。引数なしでプログラムを実行すると、現在のディレクトリに属する​​ポートがアップグレードされます (つまり、 がcd /usr/ports/security/openssl ; portupgradeアップグレードされます。オプションopensslなしでは、-PPソースからポートがビルドされます)。また、ポート ディレクトリにいない場合は、ヘルプが表示されます (オプションと同じ-h)。

編集:
デフォルトでは、portupgrade は、環境変数で定義されたディレクトリPKG_PATH(デフォルトは$PACKAGES/All$PACKAGESデフォルトは$PORTSDIR/packagesなので、デフォルトのパスは/usr/ports/packages/All) にパッケージが存在する場合にパッケージをインストールします。

そこに存在しない場合は、パッケージは (優先設定により) (サブフォルダーと$PKG_SITESを含む URI を取ります。デフォルト値はありません)、または(その下に通常のミラー パスを含む URI を取ります。デフォルトは です) からダウンロードされます。LatestAll$PACKAGEROOT"ftp://ftp.freebsd.org"

これを行う簡単な方法の 1 つは、1 台のマシンを使用して、他のマシンにインストールされるパッケージをビルド/キャッシュすることです。

  • ポートのディレクトリ内のポート ツリーからパッケージをビルドできますmake package(これによりポートもインストールされます)。
  • 1 台のマシンをアップグレードし、他のマシンで使用するためにパッケージ ファイルをキャッシュするには、前述のコマンドを使用しますportupgrade。パッケージ ファイルは、デフォルトのディレクトリ (上記を参照) にキャッシュされます。
  • portupgrade -aPPFまたは を使用して、portupgrade を使用すると、パッケージを取得するだけでインストールは行いませんportupgrade -RPPF [category/port]

キャッシュされたパッケージ ファイルを取得したら、他のマシンからファイルにアクセスできる限り、NFS、FTP、HTTP などを介してディレクトリを共有できます。 または をPACKAGES適切PKG_SITEな値に設定して、キャッシュ サーバーを指定します。通常のportupgradeコマンドを実行すると、キャッシュ サーバーからパッケージが取得され、インストールされます。

注: 正しく動作するには、すべてのサーバーでポート ツリーが最新である必要がありますportupgrade(ローカル ポート ツリーにあるバージョンに更新しようとします)。すべてのコンピューターに同じポート/パッケージをインストールする場合は、1 つのサーバー/usr/portsディレクトリを共有し (たとえば NFS 経由)、それを他のすべてのサーバーにマウントするのが最も簡単です。

答え2

たぶん、pkg_replaceあなたが探しているのはそれでしょう。

私はこれをかなり長い間使っています。私の FreeBSD マシンの 1 つはビルド サーバーとして機能し、portmaster他のマシンのすべてのパッケージをビルド (使用) します。私はこれを使用して、pkg_replace他のすべてのマシンにこれらのビルド済みパッケージをインストールしています。

http://www.FreeBSD.org/cgi/url.cgi?ports/ports-mgmt/pkg_replace/pkg-descr

答え3

または、ここで説明されている Portsnap または CVSup を利用することもできます。

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html

関連情報