linkstation ls-hgl を MacOSX Lion のTimeMachineに対応させよう
はじめに
MacOSX 10.7になり、TimeMachineのバックアップ先にsambaで接続したNAS(Linkstation ls-hgl)が使用できなくなってしまいました。さらにAFPによる接続も、セキュリティの高い認証を行う新しいバージョンのプロトコルのみ有効となり、古いAFPプロトコルにしか対応していないls-hglはバックアップ先に指定してもエラーが出てバックアップが始まりません。
既に販売終了のうえ、ファームウェアも2008年の年末を最後に更新が止まっているls-hglでは、メーカーのアクションは期待できそうにもありません。自力でなんとかするとしましょう。
今回は、ARMアーキテクチャのlinuxマシンであるls-hglにnetatalk2.2.xの最新版をインストールしてみます。
製品オリジナルの機能と設定インターフェースをそのままにした上で機能追加したいので、オリジナルの環境を削除してdebianやgentooをインストールしたりはしません。
ssh接続をできるようにする
まずは、linux PCからリモートログインとファイルの転送を可能にするため、ls-hglへのssh接続を可能にします。
以下の手順は、http://blog.sakatam.net/2009/04/linkstation-ls-whgl-shell-connection-setting/をまるまるトレースしたものです。
- acp_commander.jarをダウンロードする
% wget http://downloads.buffalo.nas-central.org/TOOLS/ALL_LS_KB_ARM9/ACP_COMMANDER/acp_commander.jar
- acp_commander.jarを起動する
% java -jar acp_commander.jar -t X.X.X.X -o (X.X.X.Xはls-hglのIPアドレス)
- 「パスワードなしのrootユーザーとしてtelnetできるようになったよ」という旨のメッセージが表示される。
% telnet X.X.X.X (そのままroot ユーザーとしてls-hglにログインする)
- passwdコマンドで、rootユーザーのパスワードを設定する。
# passwd
- viで、起動スクリプトに眠っていたsshdを追記する(実は、ls-hglのシステムにはもとからsshdがインストールされています。)
# vi /etc/init.d/rcS (最終行に "/usr/local/sbin/sshd" を追記する。)
- ls-hglからログアウトする
# exit
- WEB設定ページのメンテナンスメニューから再起動する。
- sshでログインしてみる。初回で見知らぬマシンに接続した事を警告されるがyesと答える
% ssh root@X.X.X.X
% sftp root@X.X.X.X
クロスコンパイル環境を構築する
ここからの作業は、http://home1.catvmics.ne.jp/~kanemoto/linux/index.htmlの手順を参考にしています。
この工程では、linux PC上で動作するls-hgl(ARM)用コンパイラを作成します。
クロスコンパイル環境を構築するLinux環境は、gentoo linux (~x86_64)をインストールしたMacmini(Mid 2010)です。
arm-linux用のクロスコンパイラを作成
- 以下の作業用ディレクトリを作成する。
~/ls-hgl/CROSS (クロスコンパイル環境のインストール先)
~/ls-hgl/build (ビルドディレクトリ)
~/ls-hgl/rootfs (ls-hgl本体にインストールするファイルは一度このディレクトリにインストールする)
~/ls-hgl/src (ソース置き場)
- http://opensource.buffalo.jp/gpl_storage.html の LS-HGL series -> Firmware version 1.00 or later から
binutils-2.17pre-1.src.rpm
gcc-2005q3-2.src.rpm
glibc-devel-arm_trg-2005q3-2.arm.rpm
をダウンロードする。
- rpm2tbz2コマンドで、ダウンロードしたrpmファイルからアーカイブファイルを取り出す。取り出したファイルは、 ~/ls-hgl/src に置く。
- ~/ls-hgl/src の アーカイブを解凍し、binutilsとgccのソースにパッチを当てる
binutils-2.17pre-missing-makeinfo.patch (texinfoの最近のバージョンをconfigureが認識できない)
gcc-2005q3-c-parse.patch (bisonの最近のバージョンでは記述が厳格になり、一部の古いソースでエラーを出す )
- ~/ls-hgl/CROSS に glibc-devel-arm_trg-2005q3-2.arm.rpmから取り出した include と lib を 置く
~/ls-hgl/CROSS/include
~/ls-hgl/CROSS/lib
- ssh でls-hglにログインし、/lib以下と/usr/lib以下をtarで固める。ファイル名はそれぞれ lib.tar, usrlib.tarとする。
- sftpで、ls-hgl上の lib.tar, usrlib.tarをPC上の ~/ls-hgl/src以下に転送する。
- 転送した本体の/libと/usr/libを ~/ls-hgl/CROSS以下に展開し、include ディレクトリを作成しておく。
~/ls-hgl/CROSS/include
~/ls-hgl/CROSS/lib (本体の/libで上書きする)
~/ls-hgl/CROSS/usr/lib (本体から持ってきた/usr/lib)
- binutilsのビルド
binutils_cross.sh を~/ls-hgl/build に置き実行する。
- crt1.oが見つけられずに gcc のビルドが中断してしまうのでその対策
1. ~/ls-hgl/CROSS/usr/lib/ldscripts を削除し、~/ls-hgl/CROSS/arm-none-linux-gnueabi/lib/ldscripts をコピーする
2. ~/ls-hgl/CROSS/arm-none-linux-gnueabi/libを削除し、~/ls-hgl/CROSS/usr/lib へのシンボリックリンクと置き換える
- libcのパス記述により gcc のビルドが中断してしまうのでその対策
~/ls-hgl/CROSS/usr/lib/libc.so をエディタで編集する
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a ) となっている箇所を
GROUP ( libc.so.6 libc_nonshared.a ) に修正
~/ls-hgl/CROSS/usr/lib/libpthread.soをエディタで編集する
GROUP ( /lib/libpthread.so.6 /usr/lib/libpthread_nonshared.a ) となっている箇所を
GROUP ( libpthread.so.6 libpthread_nonshared.a ) に修正
- gccのビルド
gcc_cross.shを~/ls-hgl/build に置き実行する。
ネイティブコンパイル環境を作成
クロスコンパイル環境の作成で、PCで動作しls-hgl(ARM)のバイナリを出力するクロスコンパイラが完成しました。つぎは、このコンパイラを使って、ls-hgl(ARM)で動作しls-hgl(ARM)のバイナリを出力するネイティブコンパイラを作成します。
- binutilsのビルド
binutils.sh を~/ls-hgl/build に置き実行する。
- gccのビルド
gcc.sh を~/ls-hgl/build に置き実行する。
- makeのビルド( http://ftp.gnu.org/gnu/make/ )
make.sh を~/ls-hgl/build に置き実行する。
- gawkのビルド( http://ftp.gnu.org/gnu/gawk/ )
gawk.sh を~/ls-hgl/build に置き実行する。
- sedのビルド( http://ftp.gnu.org/gnu/sed/ )
sed.sh を~/ls-hgl/build に置き実行する。
- BerkelayDBのビルド( Berkeley DB 4.8.30.tar.gz )
db.sh を~/ls-hgl/build に置き実行する。
ネイティブコンパイル環境をインストール
- ~/ls-hgl/rootfs をtarで固める (TOOLCHAIN.tarとします)
- sftpでls-hglに転送する
- ls-hglにsshログインし、TOOLCHAIN.tarを展開する
- 展開されたrootfs以下をls_hglの/以下に配置する
# mv rootfs/include / (includeディレクトリは/に置く)
# mv rootfs/usr/local/develop /usr/local/
- パスを通す
# cd
# vi .bashrc (以下の行を書き込み、$PATHに/usr/local/develop/binを追加する)
export PATH=/usr/local/develop/bin:$PATH
# vi /etc/ld.so.conf (/usr/local/develop/libを追加する)
# ldconfig
# source .bashrc
ls-hgl上でビルドする
- libgpg-errorのビルド( http://www.ring.gr.jp/pub/net/gnupg/libgpg-error/ )
CFLAGS=”-O2” ./configure --prefix=/usr/local/develop/
make
make install
- Libgcryptのビルド( http://www.ring.gr.jp/pub/net/gnupg/libgcrypt/ )
CFLAGS=”-O2” ./configure --prefix=/usr/local/develop/
make
make install
- opensslをビルド( http://www.openssl.org/source/ )
./config shared threads -L/usr/lib -ldl --prefix=/usr/local/develop
make
make install
- linuxpamのヘッダ取り出し
http://opensource.buffalo.jp/gpl_storage.html の LS-HGL series -> Firmware version 1.00 or later から
linux-pam-0.81_arm.tgz をダウンロードし、展開
cd Linux-PAM-0.81
make FAKEROOT=/tmp install
mv /tmp/usr/include/security /usr/include
- cp /usr/local/develop/lib/libpthread_nonshared.a /usr/lib
- netatalkをビルド( http://netatalk.sourceforge.net/ )
LDFLAGS=”-L/usr/lib -ldl” CFLAGS=”-O2 -I/include” ./configure --prefix=/usr/local/develop --with-bdb=/usr/local/develop --without-ldap --with-ssl-dir=/usr/local/develop
設定ファイルの変更
- netatalkの起動ファイルをバックアップします
mv /etc/rc.d/init.d/atalk.sh ~/atalk_old.sh
- 以下のファイルに更新します
atalk.sh
- ブラウザからの設定は今までとおり行えます。
- “Time-Machine”という名前の共有フォルダがTimemachine対応になります(netatalkのtmフラグがつく)
- appletalk経由のプリンタ共有はできません。
- 以下のファイルを設定します。
/usr/local/develop/etc/netatalk/afpd.conf
/usr/local/develop/etc/netatalk/netatalk.conf
/TOP/