一般権限 (非root) で Perl モジュールをインストールする方法 (Red Hat 7.3)

レンタルサーバを使っていると、Root 権限が与えられていないことが多い。その際、必要な Perl モジュールをインストールしようとしても、Web 上には Root 権限がある前提で書かれた記事が多かったため、役に立たないことが多い。そこで今回は、一般権限ユーザで Perl モジュールをインストールする方法を紹介する。

※ この記事では、Red Hat Enterprise Linux Server release 7.3 (x86_64) 環境 (perl のバージョンは 5.18.2) で試した結果を載せている。

スポンサーリンク
レクタングル(大)

モジュールがない!

そもそもこの記事を書こうと思ったきっかけは、古いサーバから Perl のプログラムを新しいサーバに移したところ、実行時に以下のようなエラーが出たからである。

CGI.pm というモジュール (ある機能を提供するコードの集まり) がライブラリのパス(これは @INC という変数に入っている)から見つからないという意味のエラーである。あるモジュールがインストールされているかは、以下のコマンドでチェックすることができる。

このコマンドを実行すると、前述のエラーが表示された。

なお、Perl ではモジュールは PERL5LIB という環境変数を基に検索される(これがない場合は PERLLIB、されには標準のライブラリディレクトリから検索される)。なので、たとえば上の例で言えば /usr/local/lib64/perl5 の下に CGI.pm というファイルがあれば、プログラム中で

と書くことでそれが読み込まれる仕組みとなっている。なので、今回の場合には上記のいずれかのパスに CGI.pm を配置できればいいのだが、非 Root 権限のユーザではそれはできない。そこで、一般ユーザが自由に触れる場所にインストールする必要があるのである。

CPANM とは?

Perl のモジュールは、そのモジュールの最新バージョンのソースコードをダウンロードし、コンパイルしてインストールすることで手動で導入することが可能である。しかし、そのモジュールが別のモジュールに依存している場合、コンパイルができなかったり、インストールしても動作しないということが起こり得る。また、最新バージョンはどれか、あるいはそのソースコードをどこから入手したら良いのかという悩みも発生する。

CPAN とはそのような悩みを解決するために作られたサイトで、様々な Perl モジュールが集められ、公開されている。さらに、CPAN シェルというツールも提供されており、これを使えばあるモジュールのインストールが簡単に行える。しかも、最新バージョンを特定してダウンロードし、それが依存しているモジュールもダウンロードし、すべてをコンパイルしてインストールし、そのモジュールのテストまでの作業を自動で行ってくれる。

しかし、本記事の環境ではそもそも CPAN もインストールされておらず、当然そのコマンドも使用することができなかった。しかし、色々調べると現在では CPANM というツールのほうが、面倒な初期設定も不要で他のモジュールへの依存もなく使いやすいという評判であることが分かった。そこで、これを導入することにした。

CPANM のインストール

それでは、Root 権限を持たない一般権限ユーザで CPANM をインストールしてみよう。これは、CPANM を単体でダウンロードしてそれに実行権限を与えるだけで OK である。

cpanm の中を覗いてみれば分かるが、これは1000行あまりの一つの Perl プログラムである。早速、以下のコマンドで CGI.pm のインストールを試みた。

しかし、上記のように ExtUtils/Manifest.pm というモジュールがないと怒られてしまった。そこで以下のようにこれをインストールしようとしてみたのだが、

上記のようにまたもや同じエラーが出て、依存関係の堂々巡りになってしまった。Web で調べると、Root 権限で

とやれば問題ないらしいが、しかし当環境では Root ユーザになることは不可能だった。

ExtUtils/MakeMaker.pm とは?

上記のエラーの原因だが、これは CGI.pm というモジュールが ExtUtils/MakeMaker.pm というモジュールを使って作られているからである。それが存在しないから、エラーになっているのである。では、これをダウンロードして手動でインストール (Makefile.PL から makefile を作成し、make && make install) すれば解決するはずである。

以下のようにコマンドを実行すればよい。

これにより ~/perl5/lib/perl5 というディレクトリの下に ExtUtils/MakeMaker.pm というファイルができる(インストールされる)。このパスを使ったのは、cpanm は ~/perl5 以下のディレクトリにモジュールをインストールするからである。

さてインストールしたモジュールを使う(シェルから)ためには、前述の PERL5LIB という環境変数をセットする必要がある。実行パスである PATH も合わせてセットする。~/.bashrc の中に以下のように記述してほしい。

CGI.pm を CPANM でインストール

では、早速 CPANM で CGI.pm をインストールしてみよう。

これで ~/perl5/lib/perl5 に CGI.pm というモジュールがインストールされ、使えるようになるはずである。

なお、このモジュールを CGI 実行時に使いたい場合は、本来であれば Apache 等の Web サーバの設定を変える必要があるが、一般権限ユーザではそれができないため、スクリプトに次の一行を加える必要がある(hoge は実際のユーザ名)。

スポンサーリンク
レクタングル(大)
レクタングル(大)
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。