これまでは、portmaster や portupgrade でインストールできない Perl5 関連のパッケージは、pkg コマンドでビルド済みのものをインストールしていました。しかし度々、依存関係にあるパッケージが古いバージョンに置き換えられるなど苦労をしていました。
現象
現象としては次のような感じでエラーが発生してインストールが中断してしまいます。pkg-static: Unable to access file
/usr/ports/work/databases/p5-DBI/stage/usr/local/share/man/man1/dbiproxy.1.gz:
No such file or directory
*** [fake-pkg] Error code 74
原因
原因としては、Perl5 のバージョン情報によって制御を変更する設定ファイル(/usr/ports/Mk/Uses/perl5.mk)に問題がありました。・・・というか、現在の標準バージョンの 5.20 から次期バージョンの 5.22 への過渡期で、一時的な対応で問題が発生しているようでした。正確には、各 ports 側のマニュアルの保管場所の問題なのかもしれません。/usr/ports/Mk/Uses/perl5.mk には、バージョン 5.20 が終わったら消去するように求める部分が存在しています。ここで "THIS_IS_OLD_PERL" と設定されてしまうことによって、マニュアルのインストールに障害を発生させているようです。
- /usr/ports/Mk/Uses/perl5.mk の過渡期対策 -
# remove when 5.20 goes away.
.sinclude "${LOCALBASE}/etc/perl5_version"
.if defined(PERL_VERSION)
PERL5_DEPEND= ${PERL5}
THIS_IS_OLD_PERL= yes
.else
# end of remove
対策
対策としては、上記の "THIS_IS_OLD_PERL" の部分を削除するのはなく、後続にある "THIS_IS_OLD_PERL" とによってマニュアルのインストール・ディレクトリを制御している部分を修正しました。113 行目付近にあるマニュアルのインストール・ディレクトリを切り替えている部分を下記のとおり、"THIS_IS_OLD_PERL" の "yes" / "no" に係わらず、同じディレクトリへインストールさせるようにしました。具体的には、赤文字部分の先頭に # を付加してコメント化した後、青文字部分を追加しました。
.if defined(THIS_IS_OLD_PERL)
#SITE_MAN1_REL?= share/man/man1
SITE_MAN1_REL?= ${SITE_PERL_REL}/man/man1
.else
SITE_MAN1_REL?= ${SITE_PERL_REL}/man/man1
.endif
以上の対策により、portmaster や portupgrade で Perl5 関係のパッケージのインストールが できるようになりました。
そしてマニュアルのインストール先のディレクトリは次の場所となりました。
/usr/local/lib/perl5/site_perl/man/man1/
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。