2013/03/20

Buffalo LinkStation LS-X1.0TLJで遊ぶ。


ついに約1万円という大枚をはたいて念願のNAS(Buffalo Linkstation LS-X1.0TLJ)を購入。
これで家の中でファイル共有とかができる!!
早速分解。
実は、今まで購入を躊躇しつづけた理由はこうしてジャンクにしてしまうことで1万円をドブに捨てることが怖かったからだ!
キーボードとかモニタが繋げないシステムは怖い。シリアルコンソールとか持ってないし。。boot成功→ssh起動→接続までできなければすなわちjunkである。
PCから復元しようにも壊した後だとHW環境がわからなかったりしてお手上げ。。
今回、勇気を出して購入してみた。
分解したら、小さな基板とSATAの3.5inchHDDがくっついていた。HDDはTOSHIBA。
ちっちゃさに感動。
LS-X1.0TLJはLS-XLシリーズという種類であり、Linuxが動いている。ということがわかった。
まず、普通に本体を起動。きちんと動くことを確認。
Windows機(VMwareだが)にBuffaloのツールを入れる。
すなわち、Buffalo NAS Navigator2と、ファームウェアアップデータ(LSUpdater)だ。
http://buffalo.jp/download/driver/hd/ls_fw.html
特にLSUpdater.exeはBuffalo純正、改造の際必須のツールである(とのちに悟った)。

次に、nas_central.orgでacp_commander.jarというツールを入手。ググれば詳細が出てくるが、
root権限でコマンドを外から実行させることができる。sshを有効化する前のつなぎや復旧困難になったときの助けになる。

使い方はtargetが192.168.0.10として
$ java -jar acp_commander.jar -t 192.168.0.10 -ip 192.168.0.10 -pw password -c "whoami"
root
みたいな感じ。最後がroot権限で動作するコマンドである。


今回はまず、試行錯誤の末、LS-XLのHDD交換手順を把握したのでまとめたい。

1) HDDセットアップ
まず新品(でなくてもよいが)のHDDをPCにセット。/dev/sdbとする。
# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                              
Model: ATA TOSHIBA DT01ACA1 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  1000MB  1000MB  ext3         primary  boot

とりあえずpartedでこのような状態まで持ち込む。boot flagはparted上でset 1 boot onでsetできる。


2) HDDをlinkstationからブートできるようにする。
ファームウェアは今回はls_series-164を使用。v.1.64だ。
上記LSUpdater.exeに同梱されてきたuImage.img、initrd.imgをそれぞれcopy、zipにリネームしunzip。
パスワードは http://buffalo.nas-central.org/wiki/How_to_modify_an_initrd などネット上に書いてある。
initrd.zipからinitrd.buffaloを、uImage.zipからはuImage-lsp.5.x.buffaloを取り出す(uImage-88f5182はLS-XLの場合スルーでよい)。
uImage-lsp.5.x.buffaloをuImage.buffaloにrename。
こうして得たinitrd.buffal、uImiage.buffaloを上記partitionにぶち込む。
# mount /dev/sdb1 /mnt/hdd && mv initrd.buffalo uImage.buffalo /mnt/hdd
でOK。
ここでHDDをlinkstationにセット。linkstationの電源を投入する。

3) firmware書き込み
LSUpdate.exeの出番である。まず、LSUpdate.iniを編集し
[Flags]
VersionCheck = 0
NoFormatting = 0

[SpecialFlags]
Debug = 1
最後のほうをこのように書き換える。
LSUpdate.exeを起動したら左上のアイコンを右クリックし、デバッグモードを選択。
この段階でネットワーク上のlinkstationは検出されているべきだ。linkstationはu-bootというbootloaderを使用しており(ROM上にある)、先ほどのuImage.buffaloがu-boot対応kernelである。
initrdが立ち上がり、initrd環境内でdhcp clientが立ち上がるはずとなっている。linkstationが見つからない場合はネットワーク設定およびHDDの状態を見直す。
とりあえずチェックボックスに全部チェックをつけて(IPアドレス云々のところは無視してよい)、ファームウェア更新。
ここでfirmwareの書き換え、再起動などが始まるわけだが、かなり待っていると"Linkstationの起動完了を待っています" "しばらくお待ち下さい"の後に"LinkStationからの応答を1200秒間待機しましたが応答がありませんでした もう一度待機してよろしいですか?"と出るのでいいえとする。すると"LinkStationからの応答がありませんでした アップデートを中止します"となる。
その後、"LS-XL-EMD89からの応答を確認できませんでした"となりlinkstationが検出できなくなる。

ここでLinkStationの電源を切り、ふたたびHDDを取り外しPCに接続。
(parted) p                                                              
Model: ATA TOSHIBA DT01ACA1 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name     Flags
 1      1049kB  1026MB  1024MB  ext3            primary
 2      1026MB  6146MB  5120MB  ext3            primary
 3      6146MB  6147MB  1049kB                  primary
 4      6147MB  6148MB  1049kB                  primary
 5      6148MB  7172MB  1024MB  linux-swap(v1)  primary
 6      7172MB  992GB   985GB   xfs             primary
このようにformatしてくれたことがわかる。
ここで
(parted) set 1 boot on
し # mount /dev/sdb1 /mnt/hddでマウント。
# ls /mnt/hdd
builddate.txt              u-boot_lsxlv2_64mb.bin  uImage.map
hddrootfs.buffalo.updated  uImage-88f5182.buffalo
initrd.buffalo             uImage-lsp.5.x.buffalo
このような状態。最初にいれたuImageは消されてる。。。?ここで
# cp uImage-lsp.5.x.buffalo uImage.buffalo
で再びuImage.buffaloを作成(シンボリックリンクでいいかは試してない)
これが必要だと悟るまでしばらくかかった。
ふたたびumount、PCからHDDを取り外しlinkstationに戻し、電源投入。

4) 起動。
ここが最大のポイントなのだが、ここでしばらく待つ。5-6分は覚悟したほうがよい。
この時間は、おそらくhddrootfs.buffalo.updatedを/などに展開している時間である(/dev/sdb2に相当)。
電源ランプは青く点滅しておりboot失敗の状態やエラーと外から区別がつかないが、待ち続ける。ここが最大のハマりどころである。
すると電源ランプの点滅が終わり、青く点灯した状態となる。
BUFFALO NAS Navigatorで確認すると認識できており、正常起動したとわかる。めだたしめでたし。

NAS Navigatorからshutdown。パスワードはdefaultのpasswordである。

5) root passwordクリア、ssh導入
以上で終わってもよいが、とりあえず続ける。

rootパスワードクリア /etc/shadow編集
# sed -i 's/root:[^:]*:/root::/g' /etc/shadow

/etc/sshd_config編集、初回ログインのためPermitEmptyPasswordにしておく
# sed -i 'sed -i 's/UsePAM yes/UsePAM no/g' /etc/sshd_config'
# sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config
# echo "PermitEmptyPassword yes" >> /etc/sshd_config

hosts.allow作成
# echo "sshd:ALL" >> /etc/hosts.allow

inetdに登録 -iはinetdから起動するオプション。sshdは/usr/local/sbin/にある。
# echo "ssh stream tcp nowait root /usr/local/sbin/sshd /usr/local/sbin/sshd -i" >> /etc/initd.conf

別に全部emacsでやってもいいです。

これでふたたびlinkstationにHDDを接続、起動。
ssh root@192.168.0.10でログインできる。めでたしめでたし。

6) sshログイン、rootパスワード設定ww
まず# passwd rootでパスワードを設定し、PermitEmptyPasswordをnoにする。

このLinkStationは11,000円くらいで購入した。1TB HDDの値段を7,000円前後としても、4,000程度でlinuxマシンを入手できたことになり、感動。