Ermitejo - エスペラント語日本語翻訳

#BLOGO
メール辞書引き機能のwillcom.comへの対応 >
2009/1/11

Perl 5.10.0のcoreserver.jpへの導入(実践編)

分類: 開発記 / タグ: , , ,

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ではこの辺りを結構気にする必要があります。例えば

等々です。ですが、Linux版ではその辺りの問題はないようです。今のところ。

もし「オメーActivePerlはないだろ、今時。漢(をとこ)は黙ってソースから入れろや」等というご意見がありましたら、ツッコミをいただければ幸いです。

備考

さて、前回の想定とは裏腹に、単にパッケージを突っ込むだけで巧く行ってしまいました。正直なところ拍子抜けなのですが、ともかくエスペラント日本語翻訳システムErmitejoの次版が動いてしまっているので、良しとしましょう。

ということで、近日中に次版の内容を先取りした字句解析などを公開出来そうです。乞うご期待!

#274 (2009/01/11 18:15:15), Gardejo

コメントはまだありません »

コメントはまだありません。

このコメント欄の RSS フィード トラックバック URL

ご意見・ご感想をお寄せください

メール辞書引き機能のwillcom.comへの対応 >
< 脇書非表示 > 脇書表示