TeraStation 購入

TeraStation を買ってしまった(新しいのの 1TB モデル)。データ類のバックアップ先にしようかなと。

  • セットアップ

マニュアルには Mac ではセットアップできないなんて書いてあったのだけれど、DHCP サーバのある環境では自動的に IP アドレスが取得されるのだからブラウザで管理画面につなぐことができれば何とかなりそうな感じ。液晶画面で IP アドレスを調べブラウザでつなぎにいくと、認証を求められ、ユーザ ID「admin」と初期パスワードを入力したらあっさり管理画面につながった。あとはここで設定を変更していけばそのまま使える。付属の CD-ROM を開封する必要もなければ、Windows マシンも必要ない。なんで Windows 搭載パソコンでないとだめ、なんて書いてあるんだろう。
確かに Windows からしかできないことも一部ある。一番大きいのは、ファームウェアのアップデートかな。これは実行ファイルつきのファームウェアをダウンロードしてきて Windows から実行するしか(少なくとも今のところは)なさそう。以前使っていた YAMAHA のルータなんかでは専用ツールを使わなくても tftp でファームウェアを転送することができたし、今使っている NEC のルータは管理画面から直接更新することもできる。なんかそういう別の手だても用意しておいてほしいものだ。ま、今回のところは、購入した時点の最新バージョンのファームウェアがインストールされているようなので、普通に使う分には問題なしか。

  • Mac OS X から共有フォルダを使う

Mac OS X から共有フォルダを使う場合、afp と smb の 2 つの接続方法が選べるのだけれど、afp では日本語などのファイル名も使えるけれどファイル名が 32 文字までしか使えない(それ以上長いファイル名のファイルはコピーできないし、共有フォルダ内にあっても見えない)、smb では長いファイル名が使える代わりに日本語などのファイル名は使えない(コピーするとファイル名が変更されてしまう)という制限がある。購入する前は、32 文字より長いファイル名なんてそうそうないだろうと思っていたのだけれど、いくつかのフォルダをバックアップしようとしたら、いきなり文字数制限にひっかかってしまった。
何かいい方法はないものかと探してみたところ、Sharity というソフトを発見(何か実覚えるのあるドメインだなと思ったら、iJect を作っていたところだ)。これを使って接続すれば、文字数制限もなく、日本語ファイル名も使用できるようだ。しかし、新しいバージョン(3.1)ではインストールして設定するだけではうまくいかない。インストール先(/Library/StartupItems/Sharity3/)にある、文字コード変換テーブルのファイル(etc/unicode 以下)のうち、クライアント側(client)の「ShiftJis.cfg」ファイルをサーバ側(server)にコピーし、これを使うように設定する必要がある。シェアウェアだけれど、5 ライセンスで $59 というお手頃価格なので、もう少し動作テストしたら登録することにしよう。
上記の Sharity でだいたい問題は解決したと思ったのだけれど、実はまだコピーできないファイルがあった。それは、アクセント記号つきのアルファベットなど、ShiftJIS では表現できない文字や、半角スラッシュ「/」など互換性のために使用できなくなっている文字が使われているファイルだ。数としてはあまり多くないが、まとめてコピーしたときにこういうファイルがひとつでも存在するとそこでコピーが止まってしまうのでやはり問題だ。上に書いた変換テーブルを編集することによって回避できそう(もちろんファイル名は変更されてしまうことになるので問題がない訳でもないが……)な気もするけれど、現時点ではうまくいっていない。最終的には、TeraStation にインストールされている Samba をアップデートするしかないのかもしれない。

  • 転送速度?

転送速度は、無線 LAN 経由となるためまったく大した速度は出ない(ベンチマークをとる気にもならない)。ま、大きなファイルを大量にバックアップ、なんてことは滅多にないのでそれほど問題はないだろう。それよりも、ケーブルから解放され、無線 LAN の先にデータ置き場がある、ということの方が重要だ。

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 モジュールのインストールなどはまた次回にでも。