「玄箱/LinkStation」カテゴリーアーカイブ

Buffalo LS-GLでLinuxbox(7)

NTPがさっくりと入ったような気がしたんだけど、どうも安定して動かない。起動してしばらくするとNTPサーバに同期するんだけど、小一時間して様子を伺うとntpdが落ちている。psしてもプロセスが存在しない。どうもシステムクロックの精度が悪くて落ちてるっぽい。こういうところは不親切だよな~、ntpdは。

と、嘆いているだけでは埒があかないので、玄箱時代に同じようなことがあったことを思い出してゴソゴソと調べてみた。どうもntpdは±8.64秒/日以下の精度がないとちゃんと動かなさそうなことが書いてあった。そして、玄箱時代もシステムクロックの精度の悪さに対応するためにadjtimexを使ったっけ、と昔を懐かしながらipkgにadjtimexを探したけどなかった。もう少し探してみたら ntpclient に含まれているようだ。# ipkg install ntpclientでさくっと adjtimexは入ったけど、使い方が分からない。。。 ウェブにあるadjtimexのmanページを見てもあるはずのオプションがないから、普通のものよりもちょっと特殊なものが入っているよう。

以前は確かこの方法でadjtimexを使ったと思うけどこのスクリプトはLinkStation+Optwareには使えなさそう。そこで、# adjtimexを実行すると表示される情報を元に試行錯誤をしてみた。方法はSlashdotの記事を参考に、# adjtimex -t x -f 0のx(tickと呼ばれる値で、デフォルトは10000)をntpq -pで表示されるoffsetの値を元に増減させる。offsetがプラスに大きくなってきたら10001、10002と大きくしていく。逆にマイナスに大きくなってきたらtickを少なくする。

Linuxがどのようにシステムクロックを管理しているか深く理解していないけど、10000 tickを基準に±1000 tickの範囲で粗く調整し、1 tick=6553600 frequencyでさらに細かく調整できるよう。で、ntpdはfrequencyは調整してくれるみたいだけど、tickは手動で設定するみたい。# ntpq -p
# adjtimex
を繰り返してntpqのoffsetとadjtimexのfrequencyに注目する。adjtimexのfrequencyの絶対値が6553600を超えたら、tickを調整する。6553600以上になったらtickを1増やして# adjtimex -t tick+1 -f 0とfrequencyをリセットする。

いまのところtick=10007、frequency=5651930あたりで落ち着いてる。これで様子を見よう。

Buffalo LS-GLでLinuxbox(6)

いつものとおりにLinkStationにtelnetしようと思ったら、接続できなくなっていた。あれ? 何を間違えたんだろうと思ったら、acp_commander.jarで起動したtelnetは再起動したら自動起動してこないんだった。ちゃんと/etc/init.d/rcSのtelnetの設定のコメントアウトを解除# /usr/sbin/telnetd (← "#" をとる)しないと、と思ったけど、この際だからopensshを入れよう。

とりあえずacp_commanderでtelnetでログインして、
# ipkg install opensshで簡単インストール。で、でも、実は1回目はなぜか失敗した。”Bus error”が出て何もできなくなったので、しかたなく電源ボタンを長押しして強制終了。無事再起動できたので、再度インストールしたら今度はすんなりと入った。なぜだろう???

これでLinkStationを再起動してもSSHでログインできるようになった。Tera TermはデフォルトでSSHになっているから、こちらのほうが好都合だね。

Buffalo LS-GLでLinuxbox(5)

そういえば、LinkStationにNTPサーバを入れていなかった。NTPクライアント機能があるんだから、サーバもついでに入れておいてくれても良かったのに。。。

ま、さておき、Optwareが入っているのでパッケージの導入は簡単。# ipkg install ntpこれだけ。/opt/etc/ntp/ntp.confに国内サーバを追加する。太字の部分を追加する。#Default conf file for ntpd

driftfile /var/spool/ntp/ntp.drift

server ntp.jst.mfeed.ad.jp
server ntp.ring.gr.jp

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
同期をとる場合は# ntpdate ntp.jst.mfeed.ad.jpこれはntpdが動いていない状態で実行する必要がある。ちなみに、Optwareで入るntpdの起動スクリプトは/opt/etc/init.d/S77ntpだけど、これは再起動とかの機能はない。ntpdを中止する場合は# ps | grep ntpでプロセスIDを探して# kill プロセスIDで強制終了させるのが手っ取り早い。起動は# /opt/etc/init.d/S77ntpでOK。

時刻同期の状態を確認するには# ntpq -pこれはいつもどおり。

Buffalo LS-GLでLinuxbox(4)

さて、今回Linuxboxを立ち上げる目的であるDNSとDHCPサービスの追加を行おう。

パッケージ導入はとっても簡単。TelnetでLS-GLにログインして、# ipkg install bind dhcpを実行するだけ。Optwareのアプリケーションは /opt 以下にインストールされ、その設定ファイルは /opt/etc 以下にある。

DHCPは /opt/etc/dhcpd.conf を編集する。こんな感じ。ddns-update-style none;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name "hogehoge.com";
option domain-name-servers 192.168.0.xxx;
option ntp-servers 192.168.0.xxx;

range 192.168.0.aaa 192.168.0.bbb;
default-lease-time 21600;
max-lease-time 43200;
}
192.168.0.x のネットワークで、ゲートウェイは192.168.0.1、DNSはxxx、DHCPリース範囲はaaa~bbbという設定の例。

DHCPに比べてちょっとDNSは敷居が高い。BIND9になって色々とセキュリティが見直されたみたい(そもそもコード書き直ししたみたい)で、以前のようにてきとーな設定ファイルでは動かない。まず、インストールの後にはこのようなメッセージが表示される。You must now create your named.conf file
When it is installed in /opt/etc/named/named.conf, execute
/opt/etc/init.d/S09named start
to start service
You will probably also want to create rndc.conf by running
rndc-confgen. Of course, you may want to set your name server
in the GUI to 127.0.0.1 or your local ip-address
named.confはサンプルもないので自分で作るしかない。例えば、こんな感じで。options {
directory "/opt/etc/named";
pid-file "/opt/etc/named/named.pid";
};
controls {
inet 127.0.0.1 allow { any; } keys { "rndc-key"; };
};
include "/opt/etc/named/rndc.key";

zone "0.0.127.in-addr.arpa" in {
type master;
file "named.local";
};
zone "." in {
type hint;
file "named.root";
};
zone "hogehoge.com" in {
type master;
file "hogehoge.com.zone";
};
ゾーンファイル(hogehoge.com.zone)も作る必要がある。

次にrndcキーを作成する。# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST RNDCRNDCの部分が重要。任意につけることができる名前だけど、統一して用いないといけない。

で、rndc.confは# rndc-confgen -a -b 512 -k RNDCで作成できる。

最後にrndc.keyからキーをrndc.confにコピーする。key "rndckey" {
algorithm hmac-md5;
secret "rndc.keyからキーをコピー";
};

これでうまくいくはず。キーファイルのパーミッションとか、キーの設定(キー名あたり)が躓きやすいけど、これらは/opt/var/messageファイルを手がかりにするといい。

Buffalo LS-GLでLinuxbox(3)

気を取り直して弐号機の作成に取り掛かろう。まず用意するのがLS-GL(当たり前)。これもガワだけなので、これまた余っている(どんだけあるんだ?)SSDを組み込むんだけど、あいにくMSD-PATA3018032-ZIF2しかなくって、当然ながらそのままではLS-GLには装着できない。そこですかさずTFTEC 変換名人 ZIF→SATA 変換アダプタを買ってきてつけてみた。SSDの固定は養生テープだけど、バッチリ。

今回もUbuntuであらかじめパーティション+フォーマット+ファームウェア転送を行ってしまう方法を採用。今回のパーティションサイズはこんな感じ。
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 87 498015 83 Linux
/dev/sda4 88 3890 30547597+ 5 Extended
/dev/sda5 88 104 136521 82 Linux swap
/dev/sda6 105 3890 30411013+ 83 Linux
同じ32GBのSSDながら、やはり容量が微妙に違う。前回同様、fdiskでパーティションを切って、Gpartedでフォーマットして、スワップをオンにして、sda1のbootフラグをチェックする。

ファームウェアはBuffaloのダウンロードサイトから落としてきたHS-DHGL 1.20で、解凍して中のファイルを取り出し、hddrootfs.img→hddrootfs.zipとinitrd.img→initrd.zipとリネームしてそれぞれをbuffalo.nas-central.orgのFAQにあるパスワードを使って解凍する。”password”の項目にある40文字程度のほぼランダムな文字列が4種類ある。その中の一つが合うはず。sda1パーティションにinitrd.buffalo
uImage.buffalo
hddrootfs.buffalo.updated
を転送したら準備OK。

SSDをLS-GLに装着して、LANに接続したらスイッチオン。LEDがチカチカ点滅するのをしばし眺める。いかにも「さあ、使えますよ」っていう感じの電子音がして、POWERとLINK/ACT LEDが点灯したら設定完了。これでDHCPに割り振られたIPアドレスにブラウザでアクセスすればLinkStationの管理トップページが現れる。ちなみに今回は「HS-DHGLDB9」という名前になった。

さて、今回はこのままoptwareのインストールまでいってしまおう。まずはLinkStationにtelnetでログインできるようにしよう。buffalo.nas-central.orgからacp_commander.jarを落としてくる。READMEに使い方が書いてある。基本的にはJAVAベースのコンソールアプリで、コマンドプロンプトから実行する。と言っても大して難しくなく、c:\Workと言うディレクトリにacp_commander.jarがあって、LinkStationのIPが192.168.0.10だとすれば、c:\Work>java -jar acp_commander.jar -t 192.168.0.10 -o -addonsと実行すれば自動的にrootのパスワードをクリアして、wgetなどのツールをインストールしてtelnetを有効にしてくれる。それにしても凄まじい破壊力のツールだこと。怖い、怖い。

定番のTeraTermでLinkStationにtelnetでログインする。rootでパスワードなしで入れちゃうので、# passwd rootでrootのパスワードだけは変えておく。あとはMSSIIページにあるように、optwareをインストールする。一応ダウンロードサイトをブラウザで確認しておこう。現時点で最新はmssii-bootstrap_1.2-5_arm.xshなので、LS-GLのtelnetコンソールにて、
# mkdir -p /share/tmp; cd /share/tmp
# wget http://ipkg.nslu2-linux.org/feeds/optware/mssii/cross/stable/mssii-bootstrap_1.2-5_arm.xsh
# sh mssii-bootstrap_1.2-5_arm.xsh
と実行する。ちなみに、汎用性のある手順として# mkdir -p /share/tmp; cd /share/tmp
# FEED=http://ipkg.nslu2-linux.org/feeds/optware/mssii/cross/stable
# XSH=`wget -q -O- "$FEED/?C=M;O=D" | grep mssii-bootstrap | head -n 1 | sed 's/.*href="//; s/".*//'`
# wget $FEED/$XSH
# sh $XSH
が紹介されてたけど、入力を間違えそうで怖かったからやめた。

この先はスクリプトが勝手にレポジトリからipkgなるパッケージを使うoptwareをインストールしてくれる。# ipkg updateと実行してパッケージをアップデートしたら後は好きなパッケージをインストールするだけ。

う~ん、こんなに簡単にハックできちゃっていいのだろうか。

Buffalo LS-GLでLinuxbox(2)

無事HS-DHGLとして稼動を開始したLS-GLはその後、telnetでrootでログインできるようになり、optwareによってDHCP、DNSの機能を追加することができたのであるが。。。

さて、一通り作業が終わったからここに記事としてまとめるか、と思ったのであるが。。。 なんとDNSとして稼動させておくとプチフリっぽい現象が現れた。ブラウザが固まることは良くあるんだけど、「ホスト名の解決」で引っ掛かることが多くなった。あと、スリープから復帰する端末においてたまにアプリが強制終了するようになった。どうもDNSとしての役割を担わせるとプチフリが現れるようである。

LS-GLはARMだし、そもそもGUIもコンソールも動いていないんだからいくらJM602入りのSSDだからってプチフリはしないだろう、と安易に考えていた。でも、やはりプチフリするものはプチフリするものである。どんなに軽い作業でも読み込みと書き出しが重なる処理は苦手なんだ。。。

ということで、ただいま弐号機を作成中。。。

Buffalo LS-GLでLinuxbox(1)

オークションに出ていたBuffalo LS-GLの抜け殻を落札したので、あまっているSSDを接続して静音Linuxboxを作ろう! というのが今回の企画。

数年前に玄箱に凝ってサーバを立ててたときもあったけど、サーバを仮想化してからお役御免になって廃棄してしまった。のに、ここでまた似たようなことをしよう、と。いや、サーバは仮想化できたから良かったんだけど、集約しすぎちゃってDNS、DHCP、NTPとかの極々ベーシックな機能もサーバに含めちゃうと、サーバメンテ中はネットワークが全滅することになる。ベーシックなサービスは細々と小ぢんまりとLinuxboxで提供できないかな、と思ったわけで。

さて、LS-GLといってもちょっと古い機種だけどその道ではBuffalo LinkStationシリーズ最高傑作とも言われているとか。玄箱Pro譲りのシンプルな構造、比較的多機能で改造のしやすさのバランスが取れているとか。

  • HS-DHGLとハードウェアが同じ(LS-GLをHS-DHGL化できる)
  • 新型はシリアルコンソールの取り付けが簡単(LS-GLおよびHS-DHGLには新型と旧型がある)
  • 温度センサによるファンコントロール

あたりがポイントかな。

まあ、いろいろと弄り倒す前に、ガワだけのLS-GLがちゃんと使えるようになるのか。。。 情報によるとBuffaloでダウンロードできるファームウェアを、ある決まったパーティションを切ったHDDに入れれば何とかなる、と。そしてLinuxboxとして弄るのが目的なのでHDDではなく、不要になったSATA SSD(トランセンドの32GB TS32GSSD25S-M)を使ってみる。ということで、とりあえずの目標はガワとSSDでLinkStationとして機能できるところを目指そう。

LS-GLをまっさらのHDD/SSDから立ち上げるには主に二つの方法があるらしい。

  1. TFTPサーバを用いる方法
    まっさらのHDD/SSDをそのままLS-GLに装着して、TFTPサーバにブートに必要なファイルを置いておき、ネットワーク経由でブートさせる。そのあとにBuffaloのファームウェアアップデータを使ってファームウェアをインストールする。
  2. HDD/SSDにファームウェアを展開しておく方法
    HDD/SSDに決まったパーティションをきり、フォーマットを行い、ファームウェアのファイルを入れた後にブートする。あとは初回ブート時に勝手にLS-GLがセットアップを実行し、普通にLinkStationとして使えるようになる。

多くのサイトでは上の方法をレポートしているのだけど、なんとなく下の方法のほうが簡単そうなので下の方法を採用。ちなみに、LS-GLもHS-DHGLもハードウェアは同じらしいので、ダウンロードしてくるファームウェアによってどちらにするか選べるとのこと。そりゃ、HS-DHGLにしますわな。

まずはファームウェアをBuffaloのサイトからダウンロードする。面倒なのでここで一気にHS-DHGL化してしまうことにして、HS-DHGLの最新ファームウェア(Ver. 1.20)を選択する。とりあえずファイルの中身を取り出す。hddrootfs.img
initrd.img
linkstation_version.txt
LSUpdater.exe
LSUpdater.ini
u-boot.buffalo.updated
uImage.buffalo
を含むフォルダがいきなりデスクトップに現れる。この中のimgファイルは実はzip圧縮されていて、この2つのファイルの中身が必要となる。

まずはhddrootfs.img→hddrootfs.zipとinitrd.img→initrd.zipとリネームする。ここからが最初の難関で、zipファイルの解凍を行うときにパスワードの入力を要求される。このパスワードは海外のサイトに掲載されている。buffalo.nas-central.orgのFAQにある、ほぼランダムな英数字の羅列(40文字程度)が4パターンあるので、この4つのうちのどれかがきっとうまくいく。

hddrootfs.imgからhddrootfs.buffalo.updated、initrd.imgからinitrd.buffaloが無事取り出せたら、今度はSSD側の準備に取り掛かる。といってもこちらも簡単で、他のHDD/SSDドライブを外してLinkStationに使うSSDのみを接続したマシンをUbuntu 9.04のLive CDで起動させて、そこでSSDに必要なパーティション/フォーマットを行い、必要なファイルを転送しておくだけ。LinkStationが起動するときにシステムをイメージから展開して自動的にセットアップするらしい。必要なファイルはinitrd.buffalo、uImage.buffalo、hddrootfs.buffalo.updatedで、これらはUSBメモリに入れておく。

Knoppixでもいいんだけど、普段からUbuntuを使い慣れているし、パーティションエディタで視覚的にパーティションを確認できるからいい。さて、Live CDが立ち上がったら対象SSDをパーティションエディタで確認する。ここでパーティションエディタでさくさくとパーティションを作ってフォーマットしてもいいんだけど、なぜかここは万全を尽くしてコンソールのfdiskを使ったりする。

コンソールのfdiskで、SSDに Device Boot Start End Blocks Id System
/dev/sda1 1 25 200781 83 Linux
/dev/sda2 26 87 498015 83 Linux
/dev/sda4 88 3895 30587760 5 Extended
/dev/sda5 88 104 136521 82 Linux swap
/dev/sda6 105 3895 30451176 83 Linux
こんな感じでパーティションを切る。

ポイントは、1,2は基本領域で作って、拡張領域を4に作る。パーティションの容量はシリンダで1が1~25、2が26~87、拡張領域の4に残りすべて。拡張領域の最初の論理領域はswapで88~104で、領域6に残りのすべてを割り当てる。ここまではfdiskでやったほうがわかり易く、その後はGpartedでフォーマット、swaponを行う。上記リストの83はext3で82はswapでフォーマットする。sda1はbootパーティションで200MBくらい。sda2が /(ルート) で500MBくらいを割り当ててある。このとおりである必要はないけど、これでうまくいっているからとりあえず困らない限りこれでいこう。Gpartedで領域1(sda1)のbootフラグを立てることも忘れずに。

その後に、必要なファイルを入れたUSBメモリをさして、sda1にinitrd.buffalo、uImage.buffalo、hddrootfs.buffalo.updatedをコピーする。

ここでSSDをLinuxマシンから取り外してLinkStationに取り付ける。DHCPを有効にしたネットワークに有線でつなぎ、スイッチ、オン。にぎやかにLEDがいろいろと点滅して、「あ~、なんかミスっちゃったかな~」と冷や汗がでつつも、しばらくそのままにしていたら(5~10分後かな)LEDが静かになった。試しにLSUpdaterを起動するとなんとHS-DHGLを探した、と! でも、ファームウェアアップデートに失敗しました、と。そういえば最新のファームウェアを転送済みだから当たり前か、と思ってDHCPで割り当てられたであろうIPにブラウザでアクセスしたらLinkStationのトップページが見事に表示された!! やたっ! これでガワ+SSDから全く新規にLinkStationを立ち上げ、同時にHS-DHGL化もできた。たぶん、元のLS-GLに戻すのも簡単だろう。

adminでログインしてすぐさまパスワード変更+諸々の初期設定。このWebインターフェースは使いやすいね。さて、普通に使えるようになったLinkStation、これからどうやって料理していこうかな。

Webminのupgrade

ここのところ玄箱のメンテはほとんどwebmin経由となっている (-_-;; ハードディスクの状態を監視するためにSMART監視モジュールを入れようと思ったら、webminのバージョンが1.200以上でないとだめよ、って怒られちゃう。

しかたないからapt-get install webminしてみたけど、最新版が入ってるよ、って言われちゃう。Webminは結構良く出来たアプリケーションだから、自分自身のupgradeもあるだろう、、、と見ていたら本当にあった。[webmin]-[Webmin Configuration]-[Upgrade Webmin]
続きを読む Webminのupgrade

玄箱のfdisk

Debian化もIDE増設もすんなりうまくいったんだけど、これまで引っかかっていたのがDebian化キットにfdiskが含まれていないこと。apt-get install fdiskとかやっても、「util-linuxにあるよん」、みたいなこといわれるだけで、apt-get update util-linuxやっても、「最新版が入っているよん」、と言われる。cfdiskがあるからいいものの、webminのhardwareのPartitions on Local Disksでfdiskがない、って怒られるし、なんか気持ちわるい。

そこで玄箱うぉううぉう♪さんのこのパッケージにfdiskが入っているので拝借してみることにした。

解凍して、/sbinディレクトリにおいて、
# chown root:root fdisk
して、
# chmod 755 fdisk
したら使えるようになった。WebminのPartitions on Local Disksも初めてちゃんと動いているし。とりあえずfdiskはread onlyにして、いざってときはcfdiskを使うことにしよう。

玄箱にIDEドライブを増設する

玄箱にUSB接続でHDDを増設しているんだけど、カーネルにデバッグコードが埋め込まれてて、USB HDDにアクセスするたびに

kernel: usb-storage: task-switchin

がログに出力されるし(数千回も!!)、そのためにアクセス速度が遅い。カーネルはファームウェアに書き込まれているからそう簡単には入れ替えられないし。最新のDebian化パッケージにはloader.oを使ってファームウェア書き換えなしに別のカーネルを使えるようになったらしいけど、まだこれを試す勇気はないし。

転送速度が遅くなると言っても、使えないほどではないし、task-switchinログさえ気にならなければそのままでもいいんだけど。。。 やっぱり精神衛生上よくないので、USBでのHDD増設はあきらめることにした。

と言うことで、裏ワザのIDE増設にチャレンジすることにした。玄箱とHDDを接続するIDEケーブルはHDDコネクタが一つしかなくって、ケーブルは基板に直付けされているから取り外すことはできない。山下さんはATA-33用の延長ケーブルを流用しているみたいだけど、そのようなものはあまり出回っていない。ATA-100用の(80芯)延長ケーブルがあればそもそも苦労しないんだけどね。そんなものは噂でも聞いたことない。

80芯用は難しそうだから、40芯用の延長ケーブルを作っちゃった。
続きを読む 玄箱にIDEドライブを増設する