FreeBSDでパッケージを更新しようとしたときに、以下のようなエラーが出て、うまくいかないときがあります。
pkg: sqlite error while executing PRAGMA user_version; in file pkgdb.c:2372: database is lockedこれは、パッケージのデータベースディレクトリに、ロックのための空ディレクトリが残ってしまっていることが原因です。なので、このサイトに書かれているとおり、空ディレクトリを削除してやると更新がうまくいきます。
sudo rmdir /var/db/pkg/local.sqlite.lockエラーがたまにしか起きないときは、いちいち手動で空ディレクトリを削除すればよいのですが、パッケージデータベースディレクトリがNFSマウントされているときには、このエラーが頻繁に起きてしまいます。(例えば、NFSルートでディスクレス運用しているマシンのパッケージを更新するときが該当しますね。)
このようなときには、pkgコマンドが「ちゃんとした」ロックを行なうように、/usr/local/etc/pkg.confに以下の一行を追加するとうまくいきます。
NFS_WITH_PROPER_LOCKING = true;参考文献
- FreeBSD problems and solutions, http://conocimiento.subteni.com/