Daily Archives: 08/28/2014

[FreeBSD][メモ] pkg 1.3.7による問答無用の全パッケージ再インストールを避けるには

Pocket

pkgを1.3.7にアップグレードすると、インストール済み全パッケージの再インストールが求められる。
この回避方法について示す。

そもそも、なんでそんな事になっているかというと。
端的に言って、パッケージシステムでのshared libraryの扱いに難があったため、1.3.7でキッチリ修正したのだと。
その影響で、何も知らずにパッケージをアップグレードしようとすると、「shared libraryに変更があったため」と全パッケージを再インストールしようとしてしまう。

もちろん、別に全部再インストールしたって問題ないわけだが、帯域も時間も電気ももったいないので、再インストールを必要最低限に止める方法が公儀から発表された次第である。

詳細は以下をご覧あれ。

http://lists.freebsd.org/pipermail/freebsd-ports-announce/2014-August/000086.html

手順1.なにはともあれpkgを1.3.7に

2014/8/28現在である。

キター。
さっそくpkgをアップグレードする。

オゲ。

手順2.レポジトリカタログの強制更新とパッケージ解析

pkgをアップグレードした瞬間にレポジトリカタログの更新も走っている。
したがって、もう一回pkg updateする必要はないのだが、念のため手順に沿ってもう一回やる。

当たり前だがアップデートも削除もなし。
次。
手順によるとpkg check -Baせよと。
これは何かというと、下記の通りインストール済みshared librariesを解析するものだそうな。
つまりこの解析の結果、全ファイル再インストールという事態を避けられるわけですな?

以下、-B, -aのオプション説明をmanから抜粋。

実行…するが、ひょっとすると時間がかかるかも。
仮想マシン、かつ750個くらいパッケージがある状態で1時間近くかかった。
しかし実マシン(hp microserver)、120個くらいで2分。
パッケージの数、装置スペックによって前後するだろうが覚悟のこと。

改めて実行。

あとは通常通りpkg upgradeでよい。
理不尽な再インストールを求められることもありません。