FreeBSD 10.0-RELEASEから導入された新しいパッケージ管理システムpkg(8)のおかげでFreeBSD 10.0-RELEASE以降のサーバやシステム管理は格段と簡単になりました。pkg(8)の恩恵を受けているサーバ管理者は数多くいらっしゃると思います。
pkg(8)は便利ですが、ときどきアップグレードできないことがあります。理由はPorts Collectionの構造上の変更などに伴うものが多いといえます。複数のバージョンを共存させるために元のports(7)がバージョン別に分離したとか、ほかのports(7)と衝突が発生するためアップグレードの前に削除しておく必要があるといったものです。
次の出力は衝突が発生してアップグレードできないというメッセージを出力してpkg upgradeが失敗している例です。
こういった場合には解決方法を「pkg updating」で調べます。インストールされているソフトウェアに関連した問題解決方法がずらずらと表示されます。インストールしているソフトウェアに依存して表示されるメッセージはかわります。このあたりも直接/usr/ports/UPDATINGファイルを読むよりも便利になったところです。
説明によると、複数のバージョンを共存させるためにports(7)を3つに分離したことがわかります。一時的な回避策的な処理なので将来的にこのports(7)でまた何らかの手動での作業が必要になりそうな雰囲気もわかります。
対象となっているソフトウェアを特定してみます。「py27-setuptools-2.0.1」がそれで、これが「/usr/ports/devel/py-setuptools」から「/usr/ports/deve/py-setuptools27」に変わったんだなということがわかります。
「pkg updating」の出力に解決するためのコマンドが表示されていましたので、それに従って変更処理を実行します。
このように問題を解決してからアップグレード作業を実施すると、次のようにアップグレードが完了します。
Ports Collectionベースのアップグレードの場合、依存するソフトウェアなどを再構築する必要がある場合などそちらのソフトウェアについてもビルドが発生しますが、pkg(8)ではすでにFreeBSDクラスタの方で関連するすべてのソフトウェアがビルドされた状態で配布されていますので、そうした時間が発生しません。アップグレード作業はとても短時間に済むようになりました。