FreeBSD: pkg upgrade が Checking integrity…Assertion failedで止まる

1台の FreeBSD10.3 サーバーを “pkg upgrade” コマンドで更新しようとしたところ、次のエラーで更新が失敗してしまいました。

# pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking for upgrades (110 candidates): 100%
Processing candidates (110 candidates): 100%
Checking integrity...Assertion failed: (strcmp(uid, p->uid) != 0), function pkg_conflicts_check_local_path, file pkg_jobs_conflicts.c, line 386.
Child process pid=86035 terminated abnormally: Abort trap

この現象は過去にも発生したことがあり、検索してみると過去のメモが見つかりました。

確かに、/var/log/messages に core dump の記録が残っていました。

kernel: pid 85920 (pkg), uid 0: exited on signal 6 (core dumped)

その時は、pkg コマンドを portupgrade コマンドで更新して解決したのですが、今回は解決せず。
Web検索してみると、/var/db/pkg 以下のファイルが壊れているのでは?と、ヒントが見つかったので、pkg check コマンドでチェックしてみたところ、trousers パッケージ破損が見つかりました。

# pkg check -s -a
Checking all packages:  94%
trousers-0.3.14_1: missing file /usr/local/man/man3/Tspi_Key_GetPubKey.3.cz
Checking all packages: 100%

こんなパッケージの破損で、pkg upgrade が失敗する?と疑問に感じながらも、対象パッケージを強制削除。

# pkg delete -f trousers
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	trousers-0.3.14_1

Number of packages to be removed: 1

The operation will free 2 MiB.

Proceed with deinstalling packages? [y/N]: y
[1/1] Deinstalling trousers-0.3.14_1...
[1/1] Deleting files for trousers-0.3.14_1:  59%
trousers-0.3.14_1: missing file /usr/local/man/man3/Tspi_Key_GetPubKey.3.cz
[1/1] Deleting files for trousers-0.3.14_1: 100%
==> You should manually remove the "_tss" user. 
==> You should manually remove the "_tss" group 

再びインストールしようとすると、「お〜い」、別のエラーで入らないではないか。

# pkg install trousers
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking integrity... done (0 conflicting)
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	trousers: 0.3.14_2

Number of packages to be installed: 1

The process will require 2 MiB more space.

Proceed with this action? [y/N]: y
[1/1] Installing trousers-0.3.14_2...
pkg: sqlite error while executing iterator in file pkgdb_iterator.c:1035: database disk image is malformed
pkg: sqlite error while executing INSERT OR REPLACE INTO files (path, sha256, package_id) VALUES (?1, ?2, ?3) in file pkgdb.c:1791: database disk image is malformed

今度は pkg が使っている sqlデータベースが壊れているとのこと。

これもまた検索してみると、キャッシュファイルの破損なので、ファイルを消してしまえばいいとのこと。

#ll /var/db/pkg/repo-FreeBSD.sqlite 
-rw-r--r--  1 root  wheel  43589632  2月  2 07:17 /var/db/pkg/repo-FreeBSD.sqlite

では、消しましょう。

再び、pkg install コマンドを発行したところ、消去したファイルをダウンロードしてくれました。

#pkg install trousers
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD load error: access repo file(/var/db/pkg/repo-FreeBSD.sqlite) failed: No such file or directory
Fetching meta.txz: 100%    940 B   0.9kB/s    00:01    
Fetching packagesite.txz: 100%    6 MiB   6.1MB/s    00:01

気持ち悪いので、pkgデータベースを強制アップデート。

#pkg update -f
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%    940 B   0.9kB/s    00:01    
Fetching packagesite.txz: 100%    6 MiB   6.1MB/s    00:01    
Processing entries: 100%
FreeBSD repository update completed. 28723 packages processed.

その後で、再度 pkg upgrade コマンドを発行しました。

#pkg upgrade
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Checking for upgrades (109 candidates): 100%
Processing candidates (109 candidates): 100%
Checking integrity... done (0 conflicting)
The following 5 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	trousers: 0.3.14_2

Installed packages to be UPGRADED:
	tiff: 4.0.9 -> 4.0.9_1
	glib: 2.50.2_7,1 -> 2.50.3_1,1
	curl: 7.57.0 -> 7.58.0
	ca_root_nss: 3.34.1 -> 3.35

Number of packages to be installed: 1
Number of packages to be upgraded: 4

The process will require 2 MiB more space.

Proceed with this action? [y/N]: y
[1/5] Upgrading ca_root_nss from 3.34.1 to 3.35...
[1/5] Extracting ca_root_nss-3.35: 100%
[2/5] Upgrading tiff from 4.0.9 to 4.0.9_1...
[2/5] Extracting tiff-4.0.9_1: 100%
[3/5] Upgrading glib from 2.50.2_7,1 to 2.50.3_1,1...
[3/5] Extracting glib-2.50.3_1,1: 100%
スキーマファイルが見つかりません: 何もしません。
[4/5] Upgrading curl from 7.57.0 to 7.58.0...
[4/5] Extracting curl-7.58.0: 100%
[5/5] Installing trousers-0.3.14_2...
pkg: sqlite error while executing iterator in file pkgdb_iterator.c:1035: database disk image is malformed
pkg: sqlite error while executing INSERT OR REPLACE INTO files (path, sha256, package_id) VALUES (?1, ?2, ?3) in file pkgdb.c:1791: database disk image is malformed

なんか、trousers パッケージだけ入りませんけど、依存関係で入っているだけのパッケージですし、pkg upgrade では、その後はエラーが出なくなりました。

pkg delete コマンドを途中まで発行して、依存関係をチェックしてみたのが次の結果。

# pkg delete trousers
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 6 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
	trousers-0.3.14_2
	gnutls-3.5.16
	gnupg-2.2.4
	ffmpeg-3.4.1_3,1
	gpgme-1.9.0_1
	mutt-1.9.2

Number of packages to be removed: 6

The operation will free 74 MiB.

心当たりがあるのが、ffmpeg  と mutt コマンド。とりあえず放置して、次回 ffmpeg/mutt の更新時にエラーが出るようであれば調査を進めようと考えているところです。

コメントを残す