Perlの最近のブログ記事


ImageMagick : http://www.imagemagick.org/script/index.php
PerlMagick : http://www.imagemagick.org/script/perl-magick.php
PerlMagick cpan : http://search.cpan.org/~jcristy/PerlMagick/

ImageMagickのインストール

tar xvfz ImageMagick.tar.gz
cd ImageMagick-6.5.8
./configure
make
sudo make install
make check
make checkでエラーが出なかったらOK
Ubuntuの方は ~/.bashrc に export LD_LIBRARY_PATH=/usr/local/lib を追加する

PerlMagickのインストール

ImageMagickのソースディレクトリにそのバージョンに適用しているPerlMagickが入っているのでそれを使う

perl Makefile.pl
make
sudo make install

私の場合はmake中に下記のエラーが出た。

LD_RUN_PATH="/usr/local/src/ImageMagick-6.5.8-6/PerlMagick/../magick/.libs:/usr/lib" cc  -L../magick/.libs -lMagickCore -shared -O2 -L/usr/local/lib -fstack-protector  Magick.o  -o blib/arch/auto/Image/Magick/Magick.so     \
       -L/usr/local/src/ImageMagick-6.5.8-6/PerlMagick/../magick/.libs -lMagickCore -lperl -lm      \
     
/usr/bin/ld: cannot find -lperl
collect2: ld returned 1 exit status
make: *** [blib/arch/auto/Image/Magick/Magick.so] Error 1


これはlibperlが見つからないため。
 
sudo apt-get install libperl-dev

で入る。これでもう一度make && make installインストールをしたら問題なく入る








Apache 2.2を再インストールして、mod_perlを使ってCatalystを起動する設定にした。
Catalyst内のページにアクセスしようとするとApacheのログに下記のエラーが出てた。

[Mon Sep 14 13:48:50 2009] [error] [client 203.112.27.142] client denied by server configuration: /www/dev_koba206/cpanauthors, referer: http://www.koba206.com/

何が原因か探していたら、server confのアクセス権限の設定がApache 2.20から変わっていた。

Apache 2.0のは
<Directory > Options FollowSymLinks AllowOverride None </Directory>

Apache 2.20のは
<Directory> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory>

このセキュリティー強化設定でvhostのdocrootへのアクセス拒否を起こしていたのであった。

コメントアウトしたらOKになったけど、セキュリティー上どうなんだろ。。

Perl5.10以前ではPseudo-hashesを使っても「Pseudo-hashes are deprecated」とWarningが出るだけだったが、Perl5.10では使えなくなっている。Restricted hashesを使うように推奨されている。

もちろん、Pseudo-hashesは使わないほうがいいのだが、どうしてもという時がある。
その時は、Class::PseudoHash モジュールを使うとPseudo-hashesをPerl5.10でも使えることができる。みたい。。


参照:Pro Perl
通常root権限がないとCPANモジュールをインストールする時に権限がなくてエラーが発生する。
これを回避することができる。自分にフルアクセスがあるホームディレクトリに全部入れることができる。

perl -MCPAN -e shell

cpan[6]> o conf makepl_arg "LIB=~/perl/lib \
    > INSTALLMAN1DIR=~/perl/man/man1 \
    > INSTALLMAN3DIR=~/perl/man/man3"
    makepl_arg         [LIB=~/perl/lib INSTALLMAN1DIR=~/perl/man/man1 INSTALLMAN3DIR=~/perl/man/man3]
Please use 'o conf commit' to make the config permanent!
↑フルパスじゃないとダメみたい

cpan[3]> o conf makepl_arg "LIB=/mnt/nfs/home/tkobayashi/perl/lib \
    > PREFIX=/mnt/nfs/home/tkobayashi/perl \
    > INSTALLMAN1DIR=/mnt/nfs/home/tkobayashi/perl/man/man1 \
    > INSTALLMAN3DIR=/mnt/nfs/home/tkobayashi/perl/man/man3"
    makepl_arg         [LIB=/mnt/nfs/home/tkobayashi/perl/lib PREFIX=/mnt/nfs/home/tkobayashi/perl INSTALLMAN1DIR=/mnt/nfs/home/tkobayashi/perl/man/man1 INSTALLMAN3DIR=/mnt/nfs/home/tkobayashi/perl/man/man3]
Please use 'o conf commit' to make the config permanent!

↓これでちゃんと値が入力しているかチェック
cpan[5]> o conf makepl_arg
    makepl_arg         [LIB=/mnt/nfs/home/tkobayashi/perl/lib PREFIX=/mnt/nfs/home/tkobayashi/perl INSTALLMAN1DIR=/mnt/nfs/home/tkobayashi/perl/man/man1 INSTALLMAN3DIR=/mnt/nfs/home/tkobayashi/perl/man/man3]
Type 'o conf' to view all configuration items

この修正をコミットしておく
cpan[3]> o conf commit
commit: wrote '/mnt/nfs/home/tkobayashi/.cpan/CPAN/MyConfig.pm'
これだけだとインストール先のディレクトリがPerlのライブラリパスに含まれていないので、せっかくインストールしたモジュールが使えない。そこでPERL5LIBという環境変数を設定する。

export PERL5LIB=/mnt/nfs/home/tkobayashi/perl/lib:/mnt/nfs/home/tkobayashi/perl/lib/site_lib

.bash_profileなどにこの設定を書き込んでおくとそのユーザでは常に野良インストールしたモジュールが使えるようになる。逆に言えばこの設定を無効にすることで、いつでも元の環境に戻すことができる。