Perl 5.10.0のcoreserver.jpへの導入(発起編)という記事を年末に書きましたが、正月休みには作業が出来ませんでした。ということで少々時間が出来たことで作業したのですが、存外に簡単に出来てしまいました。以下にその手順をご紹介します。XREA plusでも同様の手順だと思います。
問題
Perl5.10.0を、ホスティングサービス会社の共有サーバのユーザ領域にインストールしたい。例えばcoreserver.jp等で使いたい。
解法
ActiveState社の用意したパッケージを使ってインストールします。coreserver.jpへのインストール方法の詳細は以下の通りです。
1. ダウンロード
1.1. ダウンロードするバイナリの物色
Perl公式サイトのGet Perlページの「Download Perl Distributions」という節にある、「ActivePerl for Windows, Linux, Mac OS X, Solaris, AIX and HP-UX」というリンクを辿ると、ActiveState社のActivePerlのページに辿り着きます。
「ActivePerl DOWNLOAD NOW」とでっかく書いてあるリンクボタンはWindows用なので、その下に載っているOther Systems and Versionsというリンクを辿ります。
色々なプラットフォーム向けの色々なバージョンのバイナリが載っていますが、ここでは2009年1月現在での最新版である「Version 5.10.0」(2008年12月公開)を使います。Perl 5.10.0の公開とほぼ同時にバイナリを作っていただいていて、ActiveState社には感謝です。
プラットフォームはサーバ仕様の通り、32bitのLinuxである「Linux i686 glibc」とします。予めSSHでログインしておいて以下のようにプラットフォームを調べておくと安心です。
ermitejo@s32:~> cat /proc/version Linux version 2.6.23.16-smp (root@s32) (gcc version 3.4.6) #1 SMP Sat Feb 16 05:02:37 JST 2008
なお、「Version 5.10.0.1000-B」というのはβ版なので、ここでは使わないこととします。
1.2. wgetによるダウンロードの実行
coreserver.jpの場合、wgetで取得します。
ermitejo@s32:~> wget -P ./tmp http://downloads.activestate.com/ActivePerl/Linux/5.10/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz --2009-01-11 15:31:18-- http://downloads.activestate.com/ActivePerl/Linux/5.10/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz Resolving downloads.activestate.com... 204.244.102.19 Connecting to downloads.activestate.com|204.244.102.19|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 24617160 (23M) [application/x-gzip] Saving to: `./tmp/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz' 100%[=================================================>] 24,617,160 5.21M/s in 8.1s 2009-01-11 15:31:26 (2.90 MB/s) - `./tmp2/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz' saved [24617160/24617160]
容量が約23.4MBありますが、わずか8秒余、2.9MB/sの速さで落としてきました。流石に線が太いと快適ですね。
参考:一旦自宅のPCに落としてきてからFTP putする方法
無駄といえば無駄ですが、一旦バイナリをダウンロードしておいて自宅のPCなどの作業場所に置いてから、coreserver.jpへFTPアップロードする方法もあります。その場合は、ごく普通にバイナリをダウンロードして、お使いのFTPクライアントでアップロードしておきましょう。
卑近な例ですが、自宅のADSL 8Mbsp環境だと50KB/sくらいにしかならず、泣けてきます。また、夜などの混雑した時間帯だと、coreserver.jpへのアップロード中にFTP接続が途切れてしまうこともあるので、注意が必要です。
1.3. チェックサムの確認
ファイルの整合性確認のためにMD5ハッシュ値を確認しておくと安心です。上記バイナリだと、「98813ec55e249b04e3cc78ac8aa20a73」という値になっています。確認のためには、UNIX系ではmd5sumコマンドを、WindowsではMS純正のfcivコマンドを使います。
ermitejo@s32:~> md5sum ./tmp/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz 98813ec55e249b04e3cc78ac8aa20a73 ./tmp/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz
参考までに、Windows XPでのfcivコマンドの実行結果は以下の通りです。
D:\usr\gardejo > %ProgramFiles%\fciv\fciv.exe d:\ermitejo\tmp\ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz // // File Checksum Integrity Verifier version 2.05. // 98813ec55e249b04e3cc78ac8aa20a73 d:\ermitejo\tmp\activeperl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz
2. インストール
2.1. TARボールの展開
さっくりTARボールを展開します。tar -Cしてもいいのですが、そろそろ相対パス指定も面倒なので~/tmp以下に降ります。
ermitejo@s32:~> cd tmp ermitejo@s32:~/tmp> tar xvzf ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188.tar.gz (実行結果は省略)
これで、~/tmp/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188ディレクトリが出来ました。
2.2. インストール用シェルスクリプトの実行
それでは、インストール用シェルスクリプトを実行します。
ermitejo@s32:~/tmp> cd ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188 ermitejo@s32:~/tmp/ActivePerl-5.10.0.1004-i686-linux-glibc-2.3.2-287188> ./install.sh Checking package...done Welcome to ActivePerl ActivePerl is ActiveState's quality-assured binary build of Perl. In order to install ActivePerl you need to agree to the ActivePerl License Agreement.
2.3. ライセンスの確認
続いて、以下のプロンプトが出力されて処理が一時停止します。
Did you read the LICENSE.txt file? [no]
ライセンスファイルを読んだか、と訊かれるので、yesを入力してEnterを押下します。[no]と書かれているのは、yes/noを書かずにそのままEnterを押下した場合、[]の中をデフォルト値として使う、という意味です。ここでは、Enterの押下を<ENTER>として表記します。
Did you read the LICENSE.txt file? [no] yes<ENTER>
noまたはそのままEnterを押下すると、
Do you want to read it now? [yes]
と、じゃあ今読むかと訊かれますので、yesにして文面を読みます。
Do you want to read it now? [yes] <ENTER>
なお、ここでnoとすると、
Ok. Aborting installer.
と出力され、インストールが終了してしまいます。
2.4. ライセンスへの同意
さて、ライセンスを読んだと答えたか、或いはその場で読んだ後には、以下の質問が出されます。
Do you agree to the ActivePerl License Agreement? [no]
ライセンスへ同意するか訊かれるので、yesと答えて次に進みます。
Do you agree to the ActivePerl License Agreement? [no] yes<ENTER>
例によって、noと答えると
Ok. Aborting installer.
と出力され、インストールが終了してしまいます。
2.5. インストール先の指定
次に、インストーラはインストール先を訊いてきます。
前回お話したように、perlが置いてある場所は/usr/local/bin/perlであって、一般の私達のようなユーザは触れません。従って、ユーザエリア(自分のクォータ)である/virtual/USERNAME/以下にインストールする必要があります。
This installer can install ActivePerl in any location of your choice. You do not need root privileges. However, please make sure that you have write access to this location. Enter top level directory for install? [/opt/ActivePerl-5.10]
ここでは、/virtual/USERNAME/perl5.10.0以下にインストールすることにしましょう。/virtual/USERNAME/perl以下としない理由は、後述します。
Enter top level directory for install? [/opt/ActivePerl-5.10] /virtual/ermitejo/perl5.10.0<ENTER>
2.6. ドキュメントインストール先の指定
次に、ドキュメントをインストールするか訊かれます。
The ActivePerl documentation is available in HTML format. If installed it will be available from file:///virtual/ermitejo/perl5.10.0/html/index.html. If not installed you will still be able to read all the basic perl and module documentation using the man or perldoc utilities. Install HTML documentation [yes]
サーバはあくまで運用コードの置き場であって、開発は自分のPCで行うべきです。開発しない以上、ドキュメントは不要ですね。ドキュメントのサイズも馬鹿になりませんので、ここではインストールしないことにします(勿論、インストールしても構いません)。
Install HTML documentation [yes] no<ENTER>
2.7. インストールの実行
インストールの最終確認を求められます。
Proceed? [yes]
万感の思いを込めて、小指でEnterキーを叩き込みましょう。
Proceed? [yes] <ENTER> Ok. Installing ActivePerl... Copying files to /virtual/ermitejo/perl5.10.0...done Relocating...done (151 files relocated) Syncing perl PPM database with .packlists...done ActivePerl has been successfully installed at /virtual/ermitejo/perl5.10.0. Please modify your startup environment by adding: /virtual/ermitejo/perl5.10.0/site/bin:/virtual/ermitejo/perl5.10.0/bin to PATH /virtual/ermitejo/perl5.10.0/site/man:/virtual/ermitejo/perl5.10.0/man to MANPATH For general questions or comments about ActivePerl, please contact us at <support@activestate.com>. Thank you for using ActivePerl!
これで完了です。時間にして1分も掛かりません。ゆっくりお茶も飲んでいられませんね。
3. インストール後の環境設定
3.1. シンボリックリンクの作成
さて、今後のPerlの改版に備えて、/virtual/USERNAME/perl5.10.0/bin/perlを、/virtual/USERNAME/perl/bin/perlとして使えるようにしましょう。
わざわざインストール先のディレクトリにバージョン番号を付けたのは、このためです。こうしておけば、Perlを5.12に改版した場合でも、自分のスクリプトのシェバン行(シュバング行。shebang line。一番先頭の#!/usr/local/bin/perl等と書かれている行)を直して回る必要がありません。
ermitejo@s32:~> ln -s ~/perl5.10.0 perl<ENTER>
これだけです。簡単ですね。変に凝って/virtual/ermitejo/perl5.10.0/bin/perlファイルのシンボリックリンクを作らず、親ディレクトリを丸ごとリンクしてしまうのが楽です。
今後5.12が出たら、
ermitejo@s32:~> ln -s ~/perl5.12.0 perl<ENTER>
するだけですね。
3.2. パスの指定
インストール結果にあるように、オレオレperlの置き場所にはPATHが通っていません。従って、この時点でperl -vしても、
ermitejo@s32:~> perl -v This is perl, v5.8.8 built for i686-linux Copyright 1987-2006, 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が実行されます。これは、whichすると判ります。
ermitejo@s32:~> which perl /usr/local/bin/perl
perlスクリプトを実行する場合には、シェバン行(シュバング行)をオレオレperlに指定すれば問題ありませんが、サーバ上でone-linerを使う場合もありますし、折角なのでPATHを通しておきましょう。
シェルとしてBashを使っている場合、~/.bashrcをviなどで作成します。
export PATH=/virtual/ermitejo/perl/site/bin:/virtual/ermitejo/perl/bin:$PATH
export MANPATH=/virtual/ermitejo/perl/site/man:/virtual/ermitejo/perl/man:$MANPATH
こんな感じで書いて保存して、
ermitejo@s32:~> source ~/.bashrc
で反映します。
4. インストール後の確認
さて、これで準備が完了しました。
ermitejo@s32:~> which perl /virtual/ermitejo/perl/bin/perl
ちゃんと意図したところで実行出来ますね。
ermitejo@s32:~> perl -v This is perl, v5.10.0 built for i686-linux-thread-multi (with 4 registered patches, see perl -V for more detail) Copyright 1987-2007, Larry Wall Binary build 1004 [287188] provided by ActiveState http://www.ActiveState.com Built Sep 3 2008 11:22:08 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.
想定通りです。参考のため、-Vの結果も貼っておきます。
ermitejo@s32:~> perl -V Summary of my perl5 (revision 5 version 10 subversion 0) configuration: Platform: osname=linux, osvers=2.4.21-297-default, archname=i686-linux-thread-multi uname='linux gila 2.4.21-297-default #1 sat jul 23 07:47:39 utc 2005 i686 i686 i386 gnulinux ' config_args='-ders -Dcc=gcc -Dusethreads -Duseithreads -Ud_sigsetjmp -Uinstallusrbinperl -Ulocincpth= -Uloclibpth= -Accflags=-DUSE_SITECUSTOMIZE -Duselargefiles -Accflags=-DPRIVLIB_LAST_IN_INC -Dprefix=/virtual/ermitejo/perl5.10.0 -Dprivlib=/virtual/ermitejo/perl5.10.0/lib -Darchlib=/virtual/ermitejo/perl5.10.0/lib -Dsiteprefix=/virtual/ermitejo/perl5.10.0/site -Dsitelib=/virtual/ermitejo/perl5.10.0/site/lib -Dsitearch=/virtual/ermitejo/perl5.10.0/site/lib -Dsed=/bin/sed -Duseshrplib -Dcf_by=ActiveState -Dcf_email=support@ActiveState.com' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -fno-strict-aliasing -pipe' ccversion='', gccversion='3.3.1 (SuSE Linux)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='gcc', ldflags ='' libpth=/lib /usr/lib /usr/local/lib libs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=, so=so, useshrplib=true, libperl=libperl.so gnulibc_version='2.3.2' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/virtual/ermitejo/perl5.10.0/lib/CORE' cccdlflags='-fPIC', lddlflags='-shared -O2' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API USE_SITECUSTOMIZE Locally applied patches: ActivePerl Build 1004 [287188] 33741 avoids segfaults invoking S_raise_signal() (on Linux) 32809 Load 'loadable object' with non-default file extension 32728 64-bit fix for Time::Local Built under linux Compiled at Sep 3 2008 11:22:08 @INC: /virtual/ermitejo/perl5.10.0/site/lib /virtual/ermitejo/perl5.10.0/lib .
ということで完了です。
ermitejo@s32:~> perl -MEnglish -E 'say qq{hello, perl $PERL_VERSION !!}'
hello, perl v5.10.0 !!
後は適当にCPANモジュールを入れましょう。ppmも使えます。ひたすらppm install PACKAGEなりppm install DISTRIBUTIONするか、或いは必要なモジュールを書いたファイルを食わせましょう。
しつこいようですが、これまで自分のスクリプトで「#!/usr/bin/local/perl」と書いていたシェバン行(シュバング行)は、「#!/virtual/USERNAME/perl/bin/perl」に書き換えないと、相変わらず5.8.8のままで動いてしまうので、お気をつけください。
解説
パッケージを使う理由
coreserver.jpでは利用規約やサーバヘルプの各ページでの言及がありませんが、XREAでは仕様のページで「あらかじめコンパイルしてアップロードしてください」と書かれています。従って、ソースからコンパイルするのではなく、出来合のパッケージでインストールすることにしました。
ActivePerlで大丈夫……ですよね?
ActivePerlは、Windows環境でPerlを使う人にとってはおなじみなのではないでしょうか。細かいことをやろうとするとStrawberry Perlの方が便利なのですが、ActivePerlの方が利用者が多いような気がします。AtriaからRationalを経て今はIBMの一ブランドになったRationalも、Windows版のパッケージではActivePerlを同梱しています(例えばRational ClearCaseのクライアントをインストールしたPCであれば、ccperl -vをすると、ActivePerlが入っていることが判ります)。
閑話休題、そんなわけでActivePerlを使っているのですが、今のところ私の使い方ではActivePerl特有の問題は起きていません。Windowsではこの辺りを結構気にする必要があります。例えば
- \nと\r\nのお節介問題
qx{$command}した場合に、内部的にencodeを2回繰り返しているバグ(木村浩一さんの「どきどきの雑記帖 i戦士篇」 @ スクリプティング言語資料室(仮) より)
等々です。ですが、Linux版ではその辺りの問題はないようです。今のところ。
もし「オメーActivePerlはないだろ、今時。漢(をとこ)は黙ってソースから入れろや」等というご意見がありましたら、ツッコミをいただければ幸いです。
備考
さて、前回の想定とは裏腹に、単にパッケージを突っ込むだけで巧く行ってしまいました。正直なところ拍子抜けなのですが、ともかくエスペラント日本語翻訳システムErmitejoの次版が動いてしまっているので、良しとしましょう。
ということで、近日中に次版の内容を先取りした字句解析などを公開出来そうです。乞うご期待!