TeraStation に Perl をインストールする

さて、普通に使うことができるのはわかったので、もうひとつの目標(?)、TeraStationPOPFile を動かす、に挑戦してみる。試している人はいないかなと探してみたのだけれど見つからなかったので、ひょっとすると初の試みなのかもしれない。道のりは長そうだが、ぼちぼちやってみよう。今回は、PerlPerl 5.8.8)のインストールまでできたので、そこまでの話。TeraStation で遊ぼう というサイトを大いに参考にさせてもらった。こういう情報はとてもありがたい。

TeraStation で遊ぼうによると、TS-TGL では Web からシリアルコンソールを有効にすることができるようだけれど、無線 LAN 経由で iBook G4 からつなげなければ不便で仕方がないので、この方法はだめ。そうすると、telnet などをつっこむ必要があるが、シリアルコンソールから作業するか、ファームウェアのファイルに手を入れることになる。なんだかどちらも面倒だなぁとあちこちさまよっていたら、某所で telnet と root アクセスの機能を追加したファームウェアを見つけたので、ありがたく使わせていただくことにする(何か他にも仕込まれていやしないかという懸念もあるが、まあそのときはそのときで(ぉぃ))。
ファームウェアのアップデートは、上で書いたように Windows マシンからしかできない。ここだけはあきらめて Windows マシンを起動。アップデート自体は、付属のインストーラ(?)を実行してパスワードを入力するだけのことで、さくさくっと完了。アップデート後の起動もまったく問題なし。
さっそく telnetTeraStation に接続してみる(-l オプションでアカウントを指定できる)。これもあっさり成功。こんなに楽でいいのだろうか。root でログインする方法がわからず戸惑ったけれど、ドキュメントにちゃんと書いてあった。root でログインしたらまずはパスワード変更(passwd)。また、常に root でいるというのもいやなので、root 権限奪取を参考に、/etc/sudoers を作成。それが済んだらログアウトして一般ユーザでログインしてテスト。これも問題なし。手抜きをしただけあってなかなかいいペースだ。
telnet で接続してみたところ、Perl が最初からインストールされていることを発見。中で何かに使われているのかしら。しかし、バージョンは 5.6.1 で、必要なモジュールもほとんど足りない状態なので、やはり別にインストールするのがよさそうな感じだ。

  • 必要なプログラムやライブラリのインストール

必要なプログラムやライブラリ類は rpm ファイルから取り出したものをインストールするのが楽なようなので、rpm2cpio のインストールを参考に rpm2cpio と cpio をインストールした。Mac OS X では rpm2cpio コマンドが用意されていないので、こことかここあたりから Perl 版を入手して使うか、RPMinator などの GUI ツールを使って必要なファイルを取り出す。また、上記ページのリンク先はリンク切れになっているので、代わりにこのあたりから rpm ファイルを入手した。rpm2cpio も cpio もライブラリもそれほど大きなファイルではないようなので、/usr/bin/ や /usr/lib/ にコピーしてしまった。あとで容量の問題が発生するようであれば、他のところに移し替える必要があるかもしれない。
さらに、make やら diff やらのツールも足りないので、各種ツールのインストールを参考に make やら何やらをインストール。これも面倒なので /usr/bin/ などにコピーしてしまった。また、sort や comm、split なども必要なので、textutils-2.0.17-0vl4.ppc.rpm をダウンロードして /bin/ や /usr/bin/ へコピーした。
Perlrpm からのインストールがうまくいかなかった(libperl.a がないと言われる)ため、先に gcc などをインストールして、ソースからビルドすることにした。gcc などのインストールは、gcc のインストール を参考にした。ここからは、/ にインストールするのはやめ、/mnt/array1/share/ にインストールして必要なファイルはシンボリックリンクを貼っていくことに。例えば、gcc は /mnt/array1/share/usr/bin/gcc-3.3.2 にインストールされるので、/usr/bin/gcc からここにリンクを貼る。また、as や ld、ar についても同じように。ライブラリ関係は、libopcodes-2.14.90.0.7.so、libbfd-2.14.90.0.7.so、libc_nonshared.a、libm.a、libm.so(libm はここで貼らなかったせいで、あとで Makefile などを編集するはめになった)を /usr/lib/ にそれぞれのファイル名のままリンクを作成した。
(2006/6/18 追記)nm と libdl.a、libdl.so のシンボリックリンクも作成しておく必要があった(nm は必須という訳でもないが)。libdl がないと、モジュールの使用の際に Perl の dynamic loading が無効になっている、と怒られることになる。
ヘッダファイルは数がたくさんありすぎて面倒なので、まとめてコピーしてしまった。use/include の中身を、フォルダも含めて /usr/include/ へコピー。また、/usr/include/asm がないとあとで怒られる(というか怒られてから気がついた)ので、/usr/include/asm-ppcシンボリックリンクを、/usr/include/asm として作成しておく。ここまでで準備完了だ。

  • Perl のインストール

いよいよ Perl のインストール。ソースコードを展開し、./Configure(なぜか root で実行しないと、一時ファイルが作成できないなどと文句を言われるので、sudo ./Configure とした。
(2006/6/18 追記)/tmp へのアクセス権がないのが原因だった。先に sudo chmod +w /tmp として書き込み権限を与えておくことで解決)。
質問にはほとんどデフォルトで答えていけばよいが(というかまじめに答えようと思っても、意味が解らない質問が多くて困る(汗))、コンパイラgcc を、インストール先(prefix)は /mnt/array1/share/usr/local を指定した。ここまでは、上記手順を正しく行っていれば問題ないはず(実際にはここでのエラーをもとに上記手順を書いたようなものだが……)。
(2006/6/18 追記)./Configure -Dprefix=/mnt/array1/share/usr/local -Dcc=gcc -Dusedl -Ddlsrc=dl_dlopen.xs -d ですべての質問をデフォルトでクリアできる(usedl を指定しておかないと、dynamic loading が有効にならないようで、Perl モジュールを使うときにモジュールがロードできないと怒られることになる)。
make も、なぜか root 権限でないと怒られるので(考えたら作業フォルダのアクセス権に問題があったのかも?)これも sudo make で。./Configure の際にほとんどデフォルトで答えていたのが原因なのかどうかわからないが、sv.c のコンパイル

sv.c:2141: error: `undef' undeclared (first use in this function)

といようなエラーが発生してしまった。どうも NV_PRESERVES_UV_BITS が undef となっているのが問題なようなので、Mac OS XPerl をインストールしたときの config.h を参考に、config.h の

#undef NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS undef

という部分を、

#define NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS 32

と修正した。これで、あとは問題ないはず(作業したときには、libm のシンボリックリンクを作り忘れていたので、ここで Makefile を編集して libs = の行の最後に「-lm」を追加する必要があった)。
make ではひとつエラーが出たようだけれど、なぜか (ignored) と書かれていたので、私も無視してしまった(汗)。make install 後、/mnt/array1/share/usr/local/bin/perl -V を実行すると、

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=linux, osvers=2.4.20_mvl31-ppc_terastation, archname=ppc-linux
uname='linux terastation 2.4.20_mvl31-ppc_terastation #5 mon mar 27 21:02:35 jst 2006 ppc unknown '
config_args=''
hint=recommended, useposix=true, d_sigaction=undef
usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-fno-strict-aliasing -pipe -Wdeclaration-after-statement -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O1',
cppflags='-fno-strict-aliasing -pipe -Wdeclaration-after-statement'
ccversion='', gccversion='3.3.2 20031218 (Vine Linux 3.3.2-0vl8)', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='ld', ldflags =''
libpth=/lib /usr/lib
libs=-lgdbm -ldbm -ldb
perllibs=-lgdbm -ldbm -ldb
libc=/lib/libc-2.3.2.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version='2.3.2'
Dynamic Linking:
dlsrc=dl_none.xs, dlext=none, d_dlsymun=undef, ccdlflags=''
cccdlflags='', lddlflags=''


Characteristics of this binary (from libperl):
Compile-time options: PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO
Built under linux
Compiled at Jun 17 2006 09:32:50
@INC:
/mnt/array1/share/usr/local/lib/perl5/5.8.8/ppc-linux
/mnt/array1/share/usr/local/lib/perl5/5.8.8
/mnt/array1/share/usr/local/lib/perl5/site_perl/5.8.8/ppc-linux
/mnt/array1/share/usr/local/lib/perl5/site_perl/5.8.8
/mnt/array1/share/usr/local/lib/perl5/site_perl

と表示された。む、libs や perllibs に -lm がないのはあとで問題になるかもしれないなぁ。うーむ。Config_heavy.pl を編集しないといけないのかな。
(2006/6/18 追記)結局 Perl 自体を再インストールすることになってしまったので、libs = -lgdbm -ldbm -ldb -lm -ldl ということになった。また、Dynamic Linking 欄も、dlsrc=dl_dlopen.xs などに修正された。
Perl モジュールのインストールなどはまた次回にでも。