Perlの設定



●Perlのモジュールのインストール

 サーバにPerlの各種モジュールをインストールするには、CPANを使うと非常に簡単になります。ここでは、サーバにモジュールをインストールするためのツール、CPANの設定方法と、その使い方を解説します。
 CPANとは、「モジュール(機能のかたまり)」を簡単にインストールしてくれるシステムです。自動的に、モジュールの最新ソースファイルを取って来て、コンパイルし、インストールし、依存関係も解決してくれる優れものです。

CPAN環境の設定

 CPANからダウンロードできるようにするため、「perl-CPAN」をインストールします。
# yum -y install perl-CPAN
 次に、設定を行います。shell(コマンドライン)で、以下のとおり打ちます。
# perl -MCPAN -e shell
 実行すると、下記のように表示されます。
CPAN is the world-wide archive of perl resources. It consists of about
300 sites that all replicate the same contents around the globe. Many
countries have at least one CPAN site already. The resources found on
CPAN are easily accessible with the CPAN.pm module. If you want to use
CPAN.pm, lots of things have to be configured. Fortunately, most of
them can be determined automatically. If you prefer the automatic
configuration, answer 'yes' below.
If you prefer to enter a dialog instead, you can answer 'no' to this
question and I'll let you configure in small steps one thing after the
other. (Note: you can revisit this dialog anytime later by typing 'o
conf init' at the cpan prompt.)
Would you like me to configure as much as possible automatically? [yes] 
 この状態で「リターン」キーを押下すると、OS環境状態をもとに自動的に設定([]の中がデフォルト)されます。個別に設定したい場合は「No」を入力してください(「No」を入力すると、かなりの質問項目が表示されます)。
 今回は自動で設定することとします(後で設定変更可能。後述)。設定したファイルは「/usr/lib/perl5/5.10.0/CPAN/Config.pm」に保存されます。
 設定が完了すると、
cpan[1]>
というプロンプト(cpanモード)が起動します。終了するには「quit」または「q」と入力します。
 CPANの初期化は下記コマンドにより可能です。
cpan[1]>o conf init

CPANを使ったPerlモジュールのインストール方法

 下記のコマンドを入力すると、
# perl -MCPAN -e shell
または
# cpan
cpan[1]>
というプロンプト(cpanモード)が起動します。インストールの書式は下記のとおりです。
cpan[1]> install [モジュール名]
 または、
# cpan [モジュール名]
 モジュールのインストール時、または、初期設定時に「'YAML' not installed」と表示された場合は「YAML」をインストールする必要があります。社内からインターネットにアクセスする環境の場合は、Proxyの設定を参照してProxyを設定してください。
# cpan YAML
 YMALモジュールがインストールされます。
 「Can't locate Test/More.pm」も出力されるようなので、このモジュールもインストールします。
cpan[1]> install Test::More
 これ以降、問題なくモジュールをインストールすることができるはずです(できないばあいは、不足しているモジュールをインストールします)。問題なくインストール出来れば、下記のように表示されます。
/usr/bin/make install  -- OK
 この後、上記の「'YAML' not installed」と「Can't locate Test/More.pm」のエラーによりインストール出来なかった「Jcode.pm」モジュールをインストールすることが出来るようになりました。 というプロンプト(cpanモード)が起動します。終了するには「quit」または「q」と入力します。

Perlモジュールの手動インストール方法

 Perlモジュールを手動でインストールする方法を示します。
 インストールしたいモジュールを「/usr/local/src」に保存したとします。
$ cd /usr/local/src
$ tar zxvf pgsql_perl5-1.9.0.tar.gz
$ cd pgsql_perl5-1.9.0
$ perl Makefile.PL
$ make
$ make test
# su
# make install

CPANの設定を表示・変更するには

 最初に登録した設定内容は、以下のコマンドで一覧できます。
cpan[1]> o conf
 設定を変更するには、以下のようにします。
cpan[1]> o conf [オプション名] [新しい設定内容]
Proxyの設定

 社内からCPANを利用する際、Proxyを設定しなければならない場合があります。設定方法を以下に示します。
cpan[1]>o conf http_proxy プロキシ名:ポート番号
cpan[1]>o conf ftp_proxy プロキシ名:ポート番号
cpan[1]>o conf commit
 「urllist」の値を変更するには、まず現在の設定値を表示させます。設定されていなければ、何も表示されません。
cpan[1]>o conf urllist
  urllist
    ftp://ftp.ring.gr.jp/lang/CPAN/
    http://ftp.cpan.jp/
Type 'o conf' to view configuration edit options
 値をURLリストから削除したい場合は、
cpan[1]>o conf
cpan[1]>o conf urllist pop 削除したいurl名
cpan[1]>o conf commit
 値をURLリストに追加したい場合は、
cpan[1]>o conf
cpan[1]>o conf urllist push 追加したいurl名
cpan[1]>o conf commit
です。URLリストはo conf urllistで表示される順番でデータ取得を試みます。どうも、***.jp系のサーバは落ちている場合がよくあるので、http://www.cpan.org/SITES.htmlから適当な場所を探してurllistに追加しておくとよいかもしれません。
 また、ネットワーク環境によっては、httpしか通さない場合もあるので、その場合にurllistにftpのサーバを登録してしまうとタイムアウト待ちが発生してモジュールインストールが激しく遅くなるので注意が必要です。

モジュールの存在確認

 下記のように実行すると、mod.txtに@INC(Perlがモジュール検索対象にするディレクトリ)以下のファイル一覧が入ります。
$ find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" > mod.txt
 jcode.plのようなファイル名が*.plのライブラリを検索するには下記を実行します。
$ find `perl -e 'print join(" ", @INC)'` -type f -name "*.pl" > mod.txt
 もしかしたら、インストールしなくても、目的のCPANモジュールは既に存在する場合があります。その場合は以下のように実行することにより分かります。
# perl -e 'use モジュール;'
 例えば、Jcodeモジュール場合は下記のようになります。
# perl -e 'use Jcode;'
 何も起こらずにプロンプトが表示されれば、そのモジュールはインストールされていることになります。もし、インストールされていなければ、「Can't locate Jcode.pm in @INC、、、」というようなエラーが表示されます。

おすすめモジュール

 Bundle::CPANモジュールを入れると、CPANシェルにおいて[↑]キーで以前の入力コマンドを呼び出すことが出来るようになするなど便利です(try installと催促もされるようになります)。
cpan[1]> install Bundle::CPAN


●rootでcpanコマンドを実行するとモジュールが/root/perl5にインストールされる

 rootでcpanコマンドを実行するとモジュールが/root/perl5にインストールされてしまう現象が発生ました。どうも環境設定がおかしようです。
# perl -V
  %ENV:
    PERL5LIB="/root/perl5/lib/perl5:"
    PERL_LOCAL_LIB_ROOT=":/root/perl5"
    PERL_MB_OPT="--install_base /root/perl5"
    PERL_MM_OPT="INSTALL_BASE=/root/perl5"
  @INC:
    /root/perl5/lib/perl5/x86_64-linux-thread-multi
    /root/perl5/lib/perl5
    /usr/local/lib64/perl5
    /usr/local/share/perl5
    /usr/lib64/perl5/vendor_perl
    /usr/share/perl5/vendor_perl
    /usr/lib64/perl5
    /usr/share/perl5
    .
 .bashrcの下記行をコメントアウトします。
# vi .bashrc
#export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5";
#export PERL_MB_OPT="--install_base /root/perl5";
#export PERL_MM_OPT="INSTALL_BASE=/root/perl5";
#export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB";
#export PATH="/root/perl5/bin:$PATH";
# source .bashrc
 もし、これでも同様のエラーが表示される場合はモジュールをfindコマンドで検索し、@INCに表示されるディレクトリ配下にコピーするかリンクしてください。

 <2017.1.23追記>
 どうにもこうにもモジュールが/root/perl5にインストールされてしまう現象が直らないので、下記を実施しました。この方法は危険な方法です。自分の環境がperlをあまり使用している状況でなかったため出来る方法です。
# rm -rf /root/perl5/* /root/.cpan/*
# yum -y remove perl-CPAN
# yum -y install perl-CPAN
# perl -MCPAN -e shell
 最初からPerlの環境を作り直しました。その後、必要なモジュールを再インストールしました。インストール場所が/root/perl5以下のディレクトリではなかったため問題は解消されたと判断しました。

●cpanを実行するとsymbol lookup errorが表示される

 参考URL:perlにて「symbol lookup error: undefined symbol: Perl_Gthr_key_ptr」エラーがでる

 cpanを起動すると下記のようなエラーが表示されるようになってしまいました。
# cpan
Loading internal null logger. Install Log::Log4perl for logging messages
/usr/bin/perl: symbol lookup error: /usr/local/lib/perl5/auto/Term/ReadKey/ReadKey.so: undefined symbol: Perl_xs_apiversion_bootcheck
# perl -MCPAN -e shell
perl: symbol lookup error: /usr/local/lib/perl5/auto/Term/ReadKey/ReadKey.so: undefined symbol: Perl_xs_apiversion_bootcheck
# printenv|grep perl

 下記を実行したところ修復されました。
# env PERL5LIB=/usr/lib64/perl5/vendor_perl cpan -r
 この後、モジュール環境の再構築のためなのかアップデートのためなのか、色々なモジュールがインストールされました。