2016年5月28日土曜日

FreeBSD Perl5 の関連パッケージのマニュアル・インストール・エラー

以前より気になっていた FreeBSD において portmaster や portupgrade を使ったインストールにおいて、インストールの最終段階においてマニュアルのインストールができなくてエラーとなる現象を対策しました。

これまでは、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 件のコメント:

コメントを投稿