FreeBSDのportupgradeが正しい判定をしてくれない

2007年04月26日 07時09分26秒

データベースの不整合で portupgrade が正しく機能しなくなるときがある。

 marryrush# portversion -c
 Stale dependency: zoo-2.10.1_2 <-- clamav-0.88_1 -- manually run 'pkgdb -F' to fix, or specify -O to force.
 marryrush# 
 marryrush# pkgdb -F
 --->  Checking the package registry database
 marryrush# 

依存関係に不正部分があるので pkgdb -F で修正しろと言われるのだが、いざ pkgdb -F を実行すると問題が見つからないと出る。 上記の様な場合、/var/db/pkg/*/* のファイルに問題が隠れている場合がある。

 marryrush# grep clamav /var/db/pkg/*/*
 /var/db/pkg/arc-5.21o_1/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/arj-3.10.22/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/clamav-0.88.7_1/+CONTENTS:@name clamav-0.88.7_1
   :
   :
 /var/db/pkg/clamav-0.88.7_1/+INSTALL:           echo "* and remove $PREFIX/etc/clamav.conf *"
 /var/db/pkg/curl-7.16.0/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/lha-1.14i_6/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/libgmp-4.2.1_1/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/libunrar-3.6.8,1/+DESC:    This package containe small fixes from the http://mcmcc.bat.ru/clamav/.
 /var/db/pkg/libunrar-3.6.8,1/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/openldap-sasl-client-2.3.31/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/unzip-5.52_2/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/unzoo-4.4_2/+REQUIRED_BY:clamav-0.88.7_1
 /var/db/pkg/zoo-2.10.1_2/+REQUIRED_BY:clamav-0.88_1   ←!リビジョンがおかしい
 marryrush#

この例であれば、 zoo-2.10.1_2 を一度消して再導入することで問題が解決する。

 marryrush# pkg_delete zoo-2.10.1_2
 marryrush# portversion -c
 [Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 139 packages found (-1 +0) (...) done]
 #
 #  apache
 #  needs updating (port has 2.2.3)
 #
 pkgs="$pkgs apache-2.2.0_7"
    :
    :
 if [ X"$pkgs" != X"" ]; then
   portupgrade "$@" $pkgs
 fi
 marryrush#

portversion コマンドが動作したので(多分)不整合は解決された。

 marryrush# portinstall zoo
 --->  Installing 'zoo-2.10.1_2' from a port (archivers/zoo)
 --->  Building '/usr/ports/archivers/zoo'
 ===>  Cleaning for zoo-2.10.1_2
 ===>  Vulnerability check disabled, database not found
 ===>  Extracting for zoo-2.10.1_2
 => MD5 Checksum OK for zoo-2.10pl1.tar.gz.
 => SHA256 Checksum OK for zoo-2.10pl1.tar.gz.
 ===>  Patching for zoo-2.10.1_2
 ===>  Applying FreeBSD patches for zoo-2.10.1_2
 ===>  Configuring for zoo-2.10.1_2
 ===>  Building for zoo-2.10.1_2
   :
   :
 ===>  Checking if archivers/zoo already installed
 install  -s -o root -g wheel -m 555 zoo fiz /usr/local/bin
 install  -o root -g wheel -m 444 zoo.1 fiz.1 /usr/local/man/man1
 ===>   Compressing manual pages for zoo-2.10.1_2
 ===>   Registering installation for zoo-2.10.1_2
 ===>  Cleaning for zoo-2.10.1_2
 marryrush#

zooの再インストールも無事終わる。