前回はmixhostのレンタルサーバーにWP-CLIというツールを導入して、WordPressをコマンドラインで操作する方法を紹介しました。
今回もmixhostのコマンドライン(シェル)を活用するためにPerlのモジュールを追加してみたいと思います。
なおmixhostのコマンドラインを使うためにはSSHでレンタルサーバに接続する必要があります。SSHでの接続方法については下記を参照してみてください。
mixhostのPerl環境
mixhostではCGI用にPerlが実行できるようになっています。しかし、しかしこのPerlについてはCGIに関係なく普通にコマンドラインで利用することができます。
$ which perl /usr/bin/perl
バージョンを確認してみるとv5.16.3であることがわかります。
$ perl --version This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi (with 40 registered patches, see perl -V for more detail) Copyright 1987-2012, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.
デフォルトでインストールされているモジュールを表示させてみましょう。
$ perl -MExtUtils::Installed -e '$inst=ExtUtils::Installed->new();print $_." ".$inst->version($_)."\n" for $inst->modules' Alien::Build 2.21 Alien::Libxml2 0.16 AppConfig 1.71 Authen::Simple 0.5 Authen::Simple::Passwd 0.6 CPAN 1.9800 CPAN::Meta::Requirements 2.140 CPAN::Meta::YAML 0.018 Canary::Stability 2013 Capture::Tiny 0.48 Class::Accessor 0.51 Class::Data::Inheritable 0.08 Crypt::PasswdMD5 1.40 Digest::MD5 2.55 Expect 1.35 ExtUtils::MakeMaker 7.36 ExtUtils::ParseXS 3.35 FFI::CheckLib 0.23 File::Which 1.23 File::chdir 0.1010 HTTP::Tiny 0.076 IO::Stringy 2.113 IO::Tty 1.12 JSON::XS 4.02 List::Util 1.55 Module::Implementation 0.09 Module::Runtime 0.016 Params::Validate 1.29 Path::Tiny 0.108 Perl 5.16.3 Template 3.008 Test::Simple 1.302162 Try::Tiny 0.30 XML::LibXML 2.0204 XML::NamespaceSupport 1.12 XML::Parser 2.44 XML::SAX 1.00 XML::SAX::Base 1.09 XML::SAX::Expat 0.51 XML::Simple 2.25 YAML::Syck 1.32 local::lib 2.000024 version 0.9924
JSONやXMLなどのモジュールは入っていそうです。
必要なモジュールの確認
モジュールがインストールされているかどうかというのは、perlを実行することで確認可能です。
$ perl -e 'use モジュール名;'
このコマンドを実行して何も表示されなければ(=エラーがなければ)そのモジュールはインストールされていることになります。
私はレンタルサーバ上で自前のperlスクリプトを動かして、ExcelファイルからHTMLファイルを生成したいと思っています。
この自前スクリプトで使用しているモジュールとmixhostのインストール状況を調べると次のようになっていました。
モジュール名 | インストール状況 |
---|---|
DateTime | 未 |
DateTime::Format::Strptime | 未 |
Digest::MD5 | 済 |
Encode | 済 |
File::Path | 済 |
Image::Imlib2 | 未 |
LWP::UserAgent | 済 |
Spreadsheet::ParseExcel | 未 |
自前スクリプトを実行するには「未」となっているモジュールをインストールする必要があります。
モジュールのインストール
mixhostの管理ツールであるcPanelではPerlモジュールをインストールする機能が提供されています。
cPanelへのログイン方法については下記を参照してください。
このcPanelの「ソフトウェア」から「Perlモジュール」を選択しましょう。
これでPerl Module Installerという画面が表示されます。
この画面の「Find a “Perl Module”」にモジュール名を入力して「検索」を選択してみましょう。
例えば「DateTime」で検索すると大量にモジュールが出てきますが、2ページ目に目的のモジュールが出てきます。
目的のモジュールを見つけたら「インストール」を選択します。
これでインストール処理が始まります。
モジュールによると思いますが結構時間がかかります。DateTimeモジュールの場合は2・3分かかったと思います。
「完了」と表示されればインストール完了です。
コマンドラインでインストールしたモジュールが使えるか確認してみましょう。
このときperlコマンドではなくperlmlコマンドを使うのがポイントです。
$ perlml -e 'use DateTime;' (エラーなし)
あるいは先にcPanelUserConfigモジュールをロードするようにします。
$ perl -e 'use cPanelUserConfig; use DateTime;' (エラーなし)
従来通りperlコマンドを使うとエラーになる(=追加インストールしたモジュールが使えない)ので注意してください。
$ perl -e 'use DateTime;' Can't locate DateTime.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at -e line 1. BEGIN failed--compilation aborted at -e line 1.
このようにして必要なモジュールを入れていきます。
インストールエラー
必要なモジュールをインストーすれば完了と思ったら、「Image::Imlib2」はエラーになってしまいました。
「完了」と表示されて終わったように見えますが「failed」となっています。
もちろん確認してみても、このモジュールを使おうとするとエラーになります。
$ perlml -e 'use Image::Imlib2' Can't locate Image/Imlib2.pm in @INC (@INC contains: 省略 /usr/lib64/perl5 /usr/share/perl5 .) at -e line 1. BEGIN failed--compilation aborted at -e line 1.
どうやらPerlのImage::imlib2というモジュールは、C言語で作成されているlibimlib2というライブラリを利用しており、libimlib2がインストールされていないと利用できないようです。
mixhostではコンパイラ(gcc)が利用できるので頑張ればlibimlib2を導入できるかもしれませんが、libimlib2自体が様々なライブラリに依存しており、芋づる式に導入すべきライブラリが増えそうです。
結局、私はImage::imlib2の代わりにImage::Magickを利用することでこの問題を回避することにしました。
Image::Magickモジュールについては正常にインストールすることができます。
Image::Magickモジュールも動作にはImageMagickというプログラムが必要になるのですが、mixhostではIamgeMagickが利用可能なためImage::Magickモジュールも利用できます。
Perlスクリプトの実行
必要なモジュールをインストールしたら、mixhost上で実行したいPerlスクリプトをmixhostに転送して実行してみましょう。
ファイルを転送した後は実行ビットをつけるのを忘れないようにしましょう。
$ chmod +x 実行したいperlスクリプト
perlスクリプトを実行すると次のようなエラーが出る場合があります。
Can't locate Spreadsheet/ParseExcel.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./スクリプト名 line 2. BEGIN failed--compilation aborted at ./スクリプト名 line 2.
これはperlスクリプトの1行目のインタープリタの指定が間違っているため生じます。
1行目の「#!/usr/bin/perl
」を「#!/usr/bin/perlml
」に書き換えるとこのエラーは解消するはずです。
まとめ
今回はmixhostのレンタルサーバーでPerlモジュールを追加する方法を紹介しました。
mixhostで自作のPerlスクリプトを実行する場合は、デフォルトで導入されているモジュールでは不足するケースもあると思います。CPanelを使えばモジュールは追加可能なので、自作のPerlスクリプトが動かない場合は試してみましょう。
コメント