昨年末、FreeBSD 9.3 のサポートが終了してしまいました。OSの更新や ports のバイナリー供給が止まるだけで、ソースからビルドすればいいだけ。
と、思っていたのですが、いきなり BINDに脆弱性が見つかりソースからビルドしようとしたところ、ビルドは出来るもののインストールが出来ないという症状に陥りました。調べれば解決できそうなものの、急を要するので、OSをFreeBSD 9.3 → FreeBSD10.3 に上げ、回避版をバイナリーインストールすることにしました。
更新作業はいつものように、「freebsd-update」コマンドによるもの。約2時間で更新作業は終了したものの、FreeBSD10へのリモートアップデートは、初回リブート時にコンソールからコマンドを発行するまでネットワークが使用できなくなるという問題があります。回避策は、cron などを使って、本来はコンソールから発行しなくてはいけないコマンドを、スケジュールしたスクリプトにやらせるというもの。
今回もその回避策を使ったのですが、何らかの要因により失敗!
いくら待ってもリモートログインできるようになりません。
結局、設置場所まで出かける羽目になりました。この件はまた後日記述したいと思います。
ようやく FreeBSD10.3 にログインできるようになったので、named のバージョン状況を確認しようとしたところ、
Shared object "libcrypto.so.6" not found, required by "pkg"
と出て来て、確認できません。
この症状はよく出くわすので回避策は覚えています。ライブラリファイルがより新しいバージョンに置き換えられているものの、機能は全バージョンと互換性があるので、シンボリックリンクしてしまえば回避できます。
libcrypto.so.6 を回避したらと思ったら、次は libssl.so.6。これもシンボリックリンクで回避。そして、このメモのタイトルにある、libarchive.so.5 が無いと出て来ました。このままではモグラたたきになると感じた時、そういえば過去に同様の対処方法を記録したことを思い出しました。pkg が使えない問題を解決するために pkg コマンドは使用できないのでもう一度 pkg を ports の下でソースからビルドせよと書いてありました。
メモにはそう書いたものの、make するとアンインストールした後インストールし直さなくちゃいけないので、ちょっと面倒。そうだ、portupgrade を使ってしまおう! と pkg の下で make じゃなく、portsupgrade pkg を行ったところ、、、、、
# portupgrade pkg pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended [Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 459 packages found (-0 +0) done]
と出て来ました。
ふむ、make しなくてもバイナリインストールで片付くようです。
# pkg-static install -f pkg pkg-static: Warning: Major OS version upgrade detected. Running "pkg-static install -f pkg" recommended Updating FreeBSD repository catalogue... Repository FreeBSD has a wrong packagesite, need to re-create database Fetching meta.txz: 100% 944 B 0.9kB/s 00:01 Fetching packagesite.txz: 100% 6 MiB 151.1kB/s 00:39 Processing entries: 100% FreeBSD repository update completed. 25860 packages processed. The following 1 package(s) will be affected (of 0 checked): Installed packages to be REINSTALLED: pkg-1.9.4_1 (ABI changed: 'freebsd:9:x86:32' -> 'freebsd:10:x86:32') Number of packages to be reinstalled: 1 The process will require 1 MiB more space. 2 MiB to be downloaded. Proceed with this action? [y/N]: Y Fetching pkg-1.9.4_1.txz: 100% 2 MiB 233.5kB/s 00:11 Checking integrity... done (0 conflicting) [1/1] Reinstalling pkg-1.9.4_1... [1/1] Extracting pkg-1.9.4_1: 100% You may need to manually remove /usr/local/etc/pkg.conf if it is no longer needed.
そして、この後で、pkg upgrade コマンドを発行したところ、
# pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Checking for upgrades (471 candidates): 100%
Processing candidates (471 candidates): 100%
Cannot solve problem using SAT solver, trying another plan
Cannot solve problem using SAT solver, trying another plan
The following 473 package(s) will be affected (of 0 checked):
Installed packages to be REMOVED:
mutt-1.7.2
gpgme-1.8.0
gnupg-2.1.16_2
dbus-1.10.14_1
New packages to be INSTALLED:
libunistring: 0.9.7
libva: 1.7.2
libvdpau: 1.1.1
opencv2-core: 2.4.13.1_1
Installed packages to be UPGRADED:
lsof: 4.90.g,8 -> 4.90.i,8
linux_base-c6: 6.8_6 -> 6.8_7
libvpx: 1.6.0_1 -> 1.6.1
gnutls: 3.4.17 -> 3.5.8
dropbox-api-command: 2.09,1 -> 2.11,1
bind910: 9.10.4P4_1 -> 9.10.4P5_1
目的の bind が更新されることが確認できました。
ちなみに、大量のパッケージの出入りが行われ、次のようになりました。
Number of packages to be removed: 4 Number of packages to be installed: 4 Number of packages to be upgraded: 6 Number of packages to be reinstalled: 454 Number of packages to be downgraded: 5 The operation will free 16 MiB. 317 MiB to be downloaded.
今回のまとめ
FreeBSD OS メジャーアップデート後にpkgコマンドを使おうとして、ライブラリがない とエラーが出たら、pkg コマンドを ports 以下でリビルドする(←これでも解決する。)よりも「pkg-static install -f pkg」で pkg コマンドを入れ直す方が早い ということでした。