ユーザー領域にインストールしたcpanをシェル以外から実行したときの問題点
カテゴリー:Linux
ユーザー領域にインストールしたcpanをシェル以外から実行したときの問題点
cpanのインストールディレクトリをユーザ領域に設定することで ルート権限を持たないユーザでもcpanライブラリを利用することができる。
参考URL:
注意しなければいけないのはライブラリの保存場所の環境変数を設定しておく必要があること。
例えばbashであれば、インストールしたディレクトリが/home/user/perllibだとすると
export PERL5LIB=/home/user/perllib
としてライブラリを指定する必要がある。
(いちいち打ち込まなくても.bashrcを設定しておけば大丈夫)
しかし、この方法でCrypt::CBCをインストールした後、perlプログラムをbash以外から実行しようとした時、環境変数の設定が上の方法だと通らないことに気づいた。
(今回はメールの自動応答プログラム作成のため.forwardから実行するようにしていた、詳細はこの記事を参考に)
プログラム中に以下のようなことを試してみたがダメだった。
exec("export PERL5LIB=/home/user/perllib");
$ENV{"PERL5LIB"} = "/home/start/perllib";
そこで環境変数を通さずにローカルにインストールしたライブラリを読み込む方法を調べてみた。
環境変数を通さずにローカルにインストールしたライブラリを読み込む方法
プログラムを実行するときのカレントディレクトリにperlのライブラリディレクトリ(perllib)がインストールされている場合は
use perllib::Crypt::CBC
とすれば実行することができる。
ただし今回は.forwardが実行するのでカレントディレクトリがインストールディレクトリと一致しなく、ディレクトリの移動もできなかったため、上の方法では動作しなかった。
最終的にperlの-Iオプションでライブラリのパスが指定できることがわかり
これで対応した。 .forwardで実行する部分を以下のように書き換えた。
/usr/bin/perl -I /home/user/perllib ~/filename.pl