2003 年 7 月 9 日 (水) 自宅

さて、諸事情で Perl 5.8.0 を FreeBSD 4.x 上で使いたくなったわけなのですが、 これが色々と悩ましいのでした。

このページの件ですが、7 月 13 日に情報を頂きました。 Ports/packages からインストールされる use.perl というスクリプトを用いると、 use.perl port と use.perl system で、 この切り替えを行ってくれるのだそうです。 詳しくはこちらを。
(2003/07/13 追記)

いや、Perl 5.8.0 単体で使いたいだけなら、 ports/lang/perl5.8 をインストールすればいいのですが、 CPAN 系のライブラリを ports から入れようと考えると途端にアレなわけです。 FreeBSD 4.x では標準の Perl が 5.00503 で、 ports をいじっても 5.8.0 ではなく 5.00503 で make して、 5.00503 のディレクトリにインストールしまうのでありました。

ふう。 そうは言っても、最近では ports/databases/p5-DBI をコンパイルすると、 こんな感じで怒られて気分が悪いんですよね。

===>  Configuring for p5-DBI-1.37

**************************************************************************
**************************************************************************
  Version 5.00503 of perl will NOT BE SUPPORTED by future DBI releases.
  You will have to upgrade your perl or stop upgrading DBI.
  Perl version 5.6.1 will be the lowest version supported.
  Using perl 5.00503 you may notice some test warnings and two failures.
  Press return to continue...
**************************************************************************
**************************************************************************

で、FreeBSD 4.x は、 5.x とは違ってベースシステムの make にも Perl を利用するため、 安易に /etc/make.conf で 「NOPERL= yes」するわけにもいかないわけですよ (しかも、それを設定したところで CPAN 系の make はうまくいかない…)。 また、たとえ 5.x にしたところで標準の Perl は ports/lang/perl5 の 5.6.1 なわけで、 5.8.0 は標準じゃないのでありました。

一応、試行錯誤の結果、 CPAN 系の ports の make 時に次のように実行すればよいことが分かってきました。

# make PERL5=/usr/local/bin/perl install clean

しかしこれでは問題が部分的にしか解決されません。 たとえば、ports/databases/p5-DBD-Pg をインストールする場合に、 これは ports/databases/p5-DBI に依存しているため、 結局依存性チェックで Perl 5.00503 のディレクトリに DBI.pm が含まれていないと、 再度 ports/databases/p5-DBI をコンパイルしにいってしまい、 結局このインストールが /var/db/pkg/p5-DBI-*/ の存在によって失敗してしまうわけです。トホホ。

てなわけで、結局こんな感じで妥協してみました。 まず、Perl 系 ports を make する前に、make clean で依存性のチェックを行い、 他の Perl 系 ports に依存しているかどうかチェックします。

# cd /usr/ports/databases/p5-DBD-Pg/
# make clean
===>  Cleaning for libiconv-1.9.1_1
===>  Cleaning for p5-DBI-1.37
===>  Cleaning for postgresql-7.3.3
===>  Cleaning for gettext-0.11.5_1
===>  Cleaning for gmake-3.80
===>  Cleaning for libgnugetopt-1.2
===>  Cleaning for libtool-1.3.5_1
===>  Cleaning for expat-1.95.6_1
===>  Cleaning for p5-DBD-Pg-1.22

で、普通に ports を make してしまいましょう。

# make install clean

そして、依存している ports を順番に、 先ほどのコンパイル法をちょっと変更して、 5.8.0 用のインストールをしていきましょう。

# cd /usr/ports/databases/p5-DBI/
# make NO_PKG_REGISTER=yes PERL5=/usr/local/bin/perl install clean
...(略)...
# cd ../p5-DBD-Pg/
# make NO_PKG_REGISTER=yes PERL5=/usr/local/bin/perl install clean
...(略)...

これで、一応 /usr/local/bin/perl (5.8.0) 経由でも、 DBI と DBD-Pg が使えているように思えます。 ところで、こんなやり方でいいのでしょうか? どなたか、正しいやり方はこれだ! とかいうのをご存じでしたら、 ぜひ教えてください。 よろしくお願いします。


この話題、7 月 13 日に続く…


このサイトへのリンクには何ら許可は必要ありません。 ただし、無断で写真をダウンロードして他の場所に掲載したり、 画像加工の素材として利用するなど、再配布に当たる行為はしないようにしてください。 また、このサイトへのリンクであることを明示すること無しに <img src="..."> などで他のページの内部に画像ファイルを取り込むことも、 ご遠慮下さい。