pkgdb で修正できない問題を直す ― 2007年05月06日 09時52分44秒
今回、portupgrade が /var/db/pkg を更新している間に、止まってしまい、/var/db/pkg のいくつかが壊れてしまった。
見ただけでは /var/db/pkg の情報が壊れているのが判らない事も多い。pkg_info をやると、壊れているものがあるときには標準エラーに出力される。
まずは、現状。
# ls /var/db/pkg/xulrunner-1.8.0.4_6/
+COMMENT +DESC +MTREE_DIRS
+DEINSTALL +INSTALL +REQUIRED_BY
# pkg_info !$
pkg_info /var/db/pkg/xulrunner-1.8.0.4_6/
pkg_info: the package info for package 'xulrunner-1.8.0.4_6' is corrupt
そこで、pkgdb をやる。
# pkgdb -F
---> Checking the package registry database
[Updating the pkgdb in /var/db/pkg ... - 553 packages found (
-0 +0) done]
Stale dependency: epiphany-2.18.0 -> xulrunner-1.8.0.4_6 (www/xulrunner):
Install stale dependency? ([y]es/[n]o/[a]ll) [yes]
実際には、xulrunner はインストール済なのだが、pkg 情報だけを入れる方法はない。もう一度、コンパイルし直す必要がある。
ここで、yes を押し、見つからない ports をインストールする。
# pkgdb -F
---> Checking the package registry database
[Updating the pkgdb in /var/db/pkg ... - 553 packages
found (-0 +0) done]
Stale dependency: epiphany-2.18.0 -> xulrunner-1.8.0.4_6 (www/xulrunner):
Install stale dependency? ([y]es/[n]o/[a]ll) [yes] yes
---> Installing 'xulrunner-1.8.0.4_6' from a port (www/xulrunner)
---> Building '/usr/ports/www/xulrunner'
===> Found saved configuration for xulrunner-1.8.0.4_6
===> Extracting for xulrunner-1.8.0.4_6
=> MD5 Checksum OK for xulrunner-1.8.0.4-source.tar.bz2.
=> SHA256 Checksum OK for xulrunner-1.8.0.4-source.tar.bz2.
===> xulrunner-1.8.0.4_6 depends on file: /usr/local/bin/perl5.8.8 - found
echo "libdata/pkgconfig/xulrunner-js.pc" >> /ports/tmp/usr/ports/www/xulrunner/w
ork/plist
echo "libdata/pkgconfig/xulrunner-xpcom.pc" >> /ports/tmp/usr/ports/www/xulrunne
r/work/plist
echo "libdata/pkgconfig/xulrunner-plugin.pc" >> /ports/tmp/usr/ports/www/xulrunn
er/work/plist
echo "@exec /usr/local/bin/update-desktop-database > /dev/null || true" >> /port
s/tmp/usr/ports/www/xulrunner/work/plist
echo "@unexec /usr/local/bin/update-desktop-database > /dev/null || true" >> /po
rts/tmp/usr/ports/www/xulrunner/work/plist
echo "@unexec /bin/rmdir %D/share/idl 2>/dev/null || true" >> /ports/tmp/usr/por
ts/www/xulrunner/work/plist
===> Generating temporary packing list
===> Checking if www/xulrunner already installed
...
pkg_info: the package info for package 'xulrunner-1.8.0.4_6' is corrupt
...
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall.2871.0 env
make reinstall
** Fix the installation problem and try again.
[Updating the pkgdb in /var/db/pkg ... - 560 packages found (
-0 +7) ....... done]
** Listing the failed packages (*:skipped / !:failed)
! www/xulrunner (install error)
---> Packages processed: 0 done, 0 ignored, 0 skipped and 1 failed
Command failed [exit code 1]: /usr/local/sbin/portinstall www/xulrunner
しかし、既に xulrunner は既にインストールされているので、make install、make reinstall 共に失敗するのだ。
残念ながら、pkgdb では修正は出来ない。手で以下のように直す。
なお、壊れている pkg は pkg_delete では消せない。
# pkg_delete /var/db/pkg/xulrunner-1.8.0.4_6
pkg_delete: the package info for package 'xulrunner-1.8.0.4_6' is corrupt (use -
f to force removal)
そこで、-f を付けて、強制的に削除する。
# pkg_delete -f /var/db/pkg/xulrunner-1.8.0.4_6
pkg_delete: the package info for package 'xulrunner-1.8.0.4_6' is corrupt (but I
'll delete it anyway)
pkg_delete: couldn't completely deinstall package 'xulrunner-1.8.0.4_6',
only the log entry in /var/db/pkg/xulrunner-1.8.0.4_6 was removed
しかし、これだけでは pkg 情報は消してくれるが、インストールされているファイルは残されているので、make reinstall は失敗する。
# pushd /usr/ports/www/xulrunner
# make -DFORCE_PKG_REGISTER install
そこで、FORCE_PKG_REGISTER
を make に渡し、強制的にインストールする。
これで、xulrunner の pkg 情報が直った。
最近のコメント