portupgrade での置き換えの動作2008年04月18日 19時13分19秒

portupgrade で -o を付けると category/name からなる ports の名称が異なっているパッケージをあたかも同じ物のようにして更新できる。主にパッケージの名称が変更になった時に使われる。JDK の数を減らそうとして、今回の現象に遭遇した。

portupgrade は元となるパッケージが BROKEN となっていると更新できない。今回は jdk-1.4 が古くなりビルドも出来ないので、jdk-1.6 に置き換えようとした。

まずは、単純な削除を試みた。


# pkg_delete /var/db/pkg/jdk-1.4.2p8_5
pkg_delete: package 'jdk-1.4.2p8_5' is required by these other packages
and may not be deinstalled:
jakarta-tomcat-5.0.30
# pkg_delete /var/db/pkg/jdk-1.5.0.13p7_4,1
pkg_delete: package 'jdk-1.5.0.13p7_4,1' is required by these other packages
and may not be deinstalled:
apache-ant-1.7.0_1
eclipse-3.2.2_1
j2sdkee-1.3.1_5
jaf-1.1_1
jakarta-struts-1.2.4_1
jalbum-7.3.1
javamail-1.4_1
netbeans-6.0
springframework-2.5
tomcat-5.5.25
# pkgdb -uFf

結構な数の ports が依存しているので、単純に削除は出来ない。そこで、-o を用いての置換を試みた。

# portupgrade -o java/jdk16 -f /var/db/pkg/jdk-1.4.2p8_5
** No such installed package: /var/db/pkg/jdk-1.4.2p8_5
# grep BROKEN /usr/ports/java/jdk14/Makefile
BROKEN=         Does not compile with GCC 4.2

そのようなパッケージは無いとの事だ。現実には、pkg_delete で消せないと言われている。調べたら、BROKEN が原因だった。一時的に BROKEN を外すと jdk-1.6 に置き換えられる。1.4 が BROKEN でも実際にインストールするのは 1.6 なので、何ら問題も無い。