2008-08-28

玄箱Debian化~(4)localeとSamba導入

まだまだ玄箱(初代)の話です。
いくらDebianを入れて汎用Linuxとして使えるようになったとはいえ、そもそも備えていたNASの機能が使えないのでは意味がありません。ネットワーク越しにWindowsからファイルを保存できるようにします。

locale(ロケール)パッケージをインストール

まず、玄箱上で日本語のファイル名が使えるようにするため locales パッケージを導入します。
# aptitude install locales
どのロケールを入れるか選ぶ画面になりますので、ja_JP.UTF-8 をチェック。
今どきはおそらくUTF-8だけでも足りると思いますが、何となく「EUC-JPが入ってないと落ち着かない」という昔気質の人は ja_JP.EUC-JP にもチェックしてもよいでしょう。
デフォルトは ja_JP.UTF-8 にします。

いったんログアウトして入り直してから、確認します。
$ locale
LANG=ja_JP.UTF-8
(以下略)
ちゃんと「UTF-8」と表示されればOK。

sambaパッケージをインストール

# aptitude install samba
インストール時の設定はデフォルトのままで大丈夫です。ワークグループ名は、Windowsマシンと合わせましょう。
ワークグループ名は、「マイ コンピュータ」右クリック→「プロパティ」→「コンピュータ名」で確認できます。

インストールが終わったら、設定ファイル /etc/samba/smb.conf をちょっと編集します。
[global]
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8
これで、ファイル名としてUTF-8が使われるようになりました。
あとは共有フォルダの設定です。Debian化キットでは /mnt にマウントされているパーティション /dev/hda3 が丸々共有用に使えますので、これをWindowsからアクセスできるようにします。
[share]
   path = /mnt/share
   writable = yes
   create mask = 0600
   directory mask = 0700
これで、sambaを再起動すれば準備完了です。
# /etc/init.d/samba restart

Windowsからアクセスしてみましょう。エクスプローラのアドレスバーに「\\玄箱名」と入力すれば、「share」というフォルダが見えるはずです。(あ、smbpasswd でユーザ登録する必要があったかも)

ファイル名の文字コードとしてUTF-8を選んだおかげで、こんなファイル名だって作れます。
SambaでUTF-8ファイル名
……作らないほうがいいとは思うけど。

2008-08-25

雷が怖いのでサージプロテクタを買った

夏は雷雨が気になる季節です。落雷で電子機器が壊れた、という話は珍しくありません。
cf. Wikipedia:雷サージ

というわけで、PCにはサージプロテクタを付けて使っていたんですが、ふと気付いたらサージプロテクタの赤ランプが消えていました。機能が作動しなくなるとランプが消えるとのこと。……いつから使えなくなってたんだろう。役立たずになってた間に落雷がなくて良かったです。

ともかく、落雷があったのか経年劣化するものなのかは知りませんが、仕方ないので新しいものを購入。
お値段の幅が数百円~数千円とあって、やっぱり高いほうが保護能力が高いのかなと思いつつも、じゃあ高ければバッチリ保護できるのかもよく分かりませんし、いちばん安いのでいいやということで選んだのがコレ。

ヤザワ 雷サージ付トリプルタップ3コ口白 STT153W
ヤザワ 雷サージ付トリプルタップ3コ口白 STT153W

Amazonでは379円ですが、ヨドバシでも380円でした。3口のタップにもなってます。
コンセントに差し込めば、赤々と点る作動中ランプ。これで当面安心……だとは思いますが、近くで雷が鳴ってるときはPC使うのは諦めて、コンセントも抜いておいたほうが良いような。

玄箱Debian化~(3)時刻合わせ(ntpdate)

引き続き玄箱(初代)の話です。
ひととおりアップグレードも終わり最新版になったということで(カーネルは古いままですがこれは後日)、今回は玄箱をまともに動かすための設定を。

ntpdateを導入して自動時刻合わせ

玄箱の内蔵時計はハードウェアのバグ(回路設計ミス)のためかなり不正確とのこと。(cf. Revulo's Laboratory等)
ただ、今回使わせてもらったDebian化キットのカーネルはクロック補正の処理が入っていて、1日に1~2秒ずれる程度まで改善されているそうです。

というわけで、玄箱の時刻合わせに関しては、検索すると「adjtimexとntpを併用」という話がよく見つかりますが、この程度のズレならntpだけでも大丈夫じゃないかと。
まずインストールします。
# aptitude install ntpdate
設定ファイルは /etc/default/ntpdate です。ちょっと修正します。
NTPDATE_USE_NTP_CONF=no
NTPSERVERS="ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp"
NTPOPTIONS=""
2番目のNTPSERVERS で、日本で使う場合に適したNTPサーバーを指定します。スペース区切りで複数のサーバーを指定できます。
NTPサーバーを指定したので、1番目の「ntp.confを使うか」というオプションはnoでいいです。
3番目のオプション指定部分ですが、ここに何も指定しないのが今回の肝です。

検索してみると、ここに -b や -s オプションを指定している人が多いようです。
-b オプションは強制的にstepモードにするオプション。
マニュアルを読むと、ntpdateの時刻補正の仕方には2種類あるようです。

stepモード
標準では、NTPサーバに問い合わせて差が0.5秒より大きかったとき。(-bオプションを指定すると、ズレの大きさに関わらずstepモード)
一気に正しい時刻に設定する。

slewモード
標準では、NTPサーバとの差が0.5秒未満以内のとき。(-Bオプションを指定すると、ズレの大きさに関わらずslewモード)
1秒の長さを微妙に伸ばしたり縮めたりして、じわじわとつじつまを合わせていく。

(※ntpdateのmanには「0.5秒」と「128ミリ秒」が混在していて、実はどっちが正しいかよくわかりません…。あと細かいことですが、「0.5秒より大きい」「0.5秒より小さい」場合しか書かれておらず、0.5秒ちょうどの場合がどっちなのかも不明。どっちでもいいですが)

slewモードは何でそんな妙なことをやるかというと、いきなり時計が未来や過去に飛んだりすると、ソフトによっては困ったことになるかもしれないからです。
たとえば「10時丁度になったらメールを送る」というタイマーが仕掛けてあったとしましょう。で、9:59に時刻合わせをしたら2分遅れていたことが判明したと。それでいきなり10:01に時計を直してしまうと、10:00という時刻は訪れなかったことになり、そのメールは送信されないかもしれない。そこで、時計の針の回転をちょっと速めることで、じわじわと差を詰めていくという方法が用意されているのです。

というわけで、内蔵時計の誤差が激しかった玄箱の場合は、一時間に1回くらいstepモードで調整しないと追いつかなかったのかもしれませんが、カーネルで補正されてそんなにズレなくなったのなら「状況によってslewモードとstepモードを使い分ける」というデフォルトのほうが良いかと。

もう一つ、-sオプションというのは、ログを標準出力ではなくsyslogに出す設定。これはここで設定すべきではないのです。

Debianのntpdateの起動タイミングは、2つのパターンが想定されています。
 1. マシンを起動したときに実行(正確にはネットワークが利用可能になった直後)
 2. 手動で実行
このどちらの場合にも共通なオプションのみを、/etc/default/ntpdate に書くことになっています。

1. の起動時に実行されるスクリプトは /etc/network/if-up.d/ntpdate です。このスクリプトは /usr/sbin/ntpdate-debian というスクリプトを「-b -s」オプションを付けて呼ぶようになっています。ntpdate-debian は、/etc/default/ntpdate で設定された項目を読んで ntpdate を実行します。
そのため、/etc/default/ntpdate で -s を指定しないでおけば、2.の「手動で実行」の場合は、ntpdate-debian を実行するだけで標準出力に結果が表示されるようになるのです。

ntpdateをcronで一日一回自動実行

さて、ではこの仕組みを生かした上で、一日一回cronで回すようにしてみましょう。
デイリーで回したいものは /etc/cron.daily/ の下にスクリプトを置きます。さっきの /etc/network/if-up.d/ntpdate を参考にして /etc/cron.daily/ntpdate というスクリプトを作ります。

#!/bin/sh
if [ ! -x /usr/sbin/ntpdate-debian ]; then
    exit 0
fi
/usr/sbin/ntpdate-debian -s

-s オプションだけ付けて ntpdate-debian を呼びます。-b オプションは付けないので、ntpdateの標準の作法通り、つまりズレが0.5秒未満ならslewモード、0.5秒以上ならstepモードで時刻を修正します。

…という設定をしたのが実は1週間前。実際の稼働状況を見てみます。

# grep ntpdate /var/log/daemon.log*
Aug 18 06:27:18 kurobako ntpdate[1493]: adjust time server 210.173.160.57 offset 0.293154 sec
Aug 19 06:26:53 kurobako ntpdate[1426]: adjust time server 210.173.160.87 offset 0.107805 sec
Aug 20 06:25:34 kurobako ntpdate[1306]: adjust time server 210.173.160.87 offset 0.269930 sec
Aug 21 06:25:45 kurobako ntpdate[1572]: step time server 210.173.160.27 offset 1.098734 sec
Aug 22 06:25:35 kurobako ntpdate[2081]: step time server 210.173.160.57 offset 1.158114 sec
Aug 23 06:25:37 kurobako ntpdate[2199]: step time server 210.173.160.27 offset 1.145981 sec
Aug 24 06:25:42 kurobako ntpdate[3309]: adjust time server 210.173.160.27 offset 0.062564 sec

「adjust」とあるのがslewモードの日、「step」がstepモードの日です。0.06秒だったり1.15秒だったり、18倍も開きがあってなんだか極端ですが、ま、悪くないんじゃないでしょうか。

2008-08-24

玄箱Debian化~(2)最新版(etch)にアップグレード

玄箱(初代)のDebian化。前回導入したDebianを最新版にします。

aptの設定

Debianではaptというコマンドでソフトウェアの管理をします。設定ファイル /etc/apt/sources.list の内容を確認。
deb ダウンロード元URL stable main contrib

stable を取ってくるようになっています。stable というのは「現在の安定版」という意味なのですが、この玄箱Debian化キットは、安定版がリリース 3.1(コードネーム sarge)のときに作られたものです。ところが現在の安定版は 4.0(コードネーム etch)なので、アップグレードしてしまいましょう。

etchへのアップグレード

Debianの公式サイトに、アップグレードについての詳しいドキュメントがあるので、これに沿って進めていきます。日本語になっているのはありがたい。CPU(アーキテクチャ)の種類別に文書が用意されていますが、玄箱は「PowerPC」なので、間違えて他のアーキテクチャ向けの文書に従わないようにします。

文書は一見長いですが、既に運用中のシステムをアップグレードする場合の注意点も多いです。まっさらな玄箱に関係ないことを読み飛ばして、やることをまとめると以下のようになります。
# aptitude update
# aptitude upgrade
# aptitude install initrd-tools
これらを実行すると、いろいろ訊かれますが、ぜんぶデフォルトの Y (はい)で大丈夫でしょう。
これまで apt-get を使っていた方、aptitude を使ったほうが依存関係の解決の面で優れているそうです。

文書はこの次にカーネルのアップグレードを勧めていますが、玄箱は特別なカーネルを使っていますので、ここはスキップします。
ドキュメントによると「etchはバージョン2.6.15以前のカーネルをサポートしない」とありますが、Debian化キットのカーネルは 2.6.17 なので大丈夫です。
では続きです。
# aptitude dist-upgrade
/etc/init.d/halt と /etc/init.d/reboot が新しくなってるけどどうする? と訊かれますが、とりあえず Y と答えて置き換えて構いません。後から手直しします。
/etc/init.d/halt
# (中略)
echo -n "EEEE" > /dev/ttyS1 # この行を追加
halt -d -f -i $poweroff $hddown
/etc/init.d/reboot
# (中略)
echo -n "CCCC" > /dev/ttyS1 # この行を追加
reboot -d -f -i
このように、各々1行ずつ追加します。この行がないと、玄箱ではうまく電源OFFや再起動ができません。

なお、exim がどうのというエラーが出る場合、メールを使わないのであればいっそ削除してしまうのも手です。
# aptitude remove exim
仕上げとして、パッケージ情報を更新しておきましょう。
# aptitude update

2008-08-20

玄箱Debian化~(1)セットアップ

容量が足りなくなってきた玄箱(無印/初代)用に新しいHDD(WD6400AAKS/Western Digital・640GB SATA)を買ってきたので、入れ替えることにします。
ただのNASとして使うのもつまらないので、Debian化。手順をまとめておきます。

[注] 玄箱(無印/初代)についてです

世の中にはより高性能な「玄箱PRO」や「玄箱HG」なんてのもあるみたいですが、これは無印の初代「玄箱」についてです。今から買うならPROとかのほうが楽しいかもしれませんが、初代だとお安いという利点も。(たとえばアマゾンだと9,681円
で、これから書いていくのは初代・玄箱についての話です。玄箱PROとは随分違うみたいなのでご注意ください。

Debian化

そのままでもNASとして使えますが、せっかくなのでDebianをインストールして、より汎用的なLinux Boxとして使えるようにします。

  1. HDDを玄箱につなぐ
    注意すべき点としては、玄箱用IDE-SATA変換アダプタを使う場合、IDEケーブルを丁寧に折りたたむこと。最初、適当に組み立てたらケースが微妙にずれてしまい、電源ボタンを押しても戻ってこない状態になってしまいました。
  2. 公式ツールでHDDを初期化
    公式ツールは本体付属のCD-ROMに入っていますが、公式サイトからもダウンロードできます。
    Windowsマシンから実行することで、ネットワーク越しに玄箱のHDDのパーティションを切ったりしてくれます。
    また、玄箱のIPアドレスを調べるのにも便利です。
  3. HDDの自動初期設定に失敗
    ところが、この公式ツールがエラー終了してしまうのでした。仕方ないので直接玄箱にログインして確認してみます。
    telnet で普通にログインできます。IPアドレスは公式ツール上に表示されています。LAN内にDHCPサーバがある場合はDHCPでIPアドレスを取得しているようです。ID/passはroot/kuro。
    ログインして、まずはHDDがマウントされているかを確認。
    # mount
    
    マウントされていません。パーティションはどうなっているでしょう?
    # /sbin/mfdisk -p /dev/hda
    Units = /dev/hda, 173MB
    /dev/hda1 = Linux, ext3
    /dev/hda2 = Linux swap, swap
    /dev/hda3 = Linux, ext3
    
    640GBのHDDを「173MB」とか言ってるところにイヤ~なものを感じます。このHDDは対応していないのか? それとも初期不良? いやいやHDDじゃなくてIDE-SATA変換アダプタに問題が?
    とりあえず、パーティション設定を手動でやり直してみましょう。
  4. パーティションを切る
    玄箱のFlash ROMには簡易Linuxが入っているので、それを使って作業します。
    まず、いったんパーティションを全部削除します。
    # /sbin/mfdisk -e /dev/hda
    
    再度パーティションを作成。作成するシェルスクリプトが用意されているようなので、それを使います。
    # sh /sbin/mkfilesystem.sh
    
    スクリプトの中を見てみると、うまく行ったらマウントまでおこなうようなので、確認してみましょう。
    # mount
    /dev/root on / type auto (rw,errors=remount-ro,errors=remount-ro)
    proc on /proc type proc (rw)
    none on /dev/pts type devpts (rw,gid=5,mode=20)
    /dev/hda3 on /mnt2 type ext3 (rw)
    /dev/hda1 on /mnt type ext3 (rw)
    
    お! 今度はちゃんとマウントされました。df コマンドで容量も確認したところ、ちゃんと /dev/hda3 は584.6GBだと表示されました。(hda1がシステム用で2GB固定、hda2がswap、hda3が残り全部という分け方になっています)
    いささか不安が残らないわけでもないですが、とりあえず気にしないことにして先に進みます。
  5. Debian化キットを導入
    自分でやると大変なので、www.genbako.comで公開されているキットをありがたく使わせていただくことにします。
    http://www.genbako.com/debian-2.6.17.3/debian-sarge-2.6.17.3-kuroBOX-20060702.tgz をダウンロードして玄箱のHDDに置きます。いちどWindowマシンでダウンロードして、Windows機→玄箱はFTPを使うのがラクでしょう。(玄箱はこの状態でもftpdが走ってます)

    追記:http://www.revulo.com/kuro-box/Debian/Install.html で公開されているキットは etch/カーネル2.6.25.1 と新しいのでオススメです。
    /dev/hda3 が /mnt2 にマウントされていて、/mnt2 の下にはいくつかのディレクトリが作られているので、そのうち share というディレクトリにこのtgzファイルを置きます。
    そうしたら、telnetで玄箱に入って、第1パーティションのルート(=/mnt)に展開します。
    # cd /mnt
    # tar zxf /mnt2/share/debian-sarge-2.6.17.3-kuroBOX-20060702.tgz
    
  6. ネットワーク設定
    現在玄箱のIPアドレスはDHCPで決まっていますが、Debian化キットは 192.168.0.100 の固定IPアドレスを使うようになっています。もし変えたければ、 /mnt/etc/network/interfaces を編集します。(Debian化した場合はこのファイルが /etc/network/interfaces になります)
    ついでに下記ファイルも必要があればいじっておきましょう。
    /mnt/etc/hosts
    /mnt/etc/hosts.allow
    /mnt/etc/resolv.conf
    /mnt/etc/hostname
    
  7. 再起動
    さて、ネットワーク設定が完了したら再起動です。が、再起動する前に特別なコマンドを入力します。
    # echo -n 'OKOK' > /dev/fl3
    # reboot
    
    この1行目を入力することで、玄箱が「Flash ROM内の簡易Linux」ではなく「HDD内のLinux」で稼働するようになります。(Flash ROMのLinuxで起動した状態は俗に「EMモード」と呼ばれます。ログインプロンプトに「KURO-BOX-EM」と表示されるからでしょうか)
    再起動中は、POWER LED(4つあるLEDの一番上)が点滅します。これが点灯になったら再起動完了。

Debian化キットの初期設定

さて、ではさっき設定したIPアドレスでtelnetログインしてみます。
ログイン時のID/passは tmp-kun/tmp-kun です。

ログインしたら、何はともあれrootのパスワードを変更しましょう。デフォルトのパスワードは「root」です。
$ su
# passwd

次に、自分用のユーザアカウントを作成します。(tmp-kunのままでいいなら作らなくてもいいですが)
# adduser ユーザ名

アカウントを作成したら一度ログアウトして、いま作ったユーザアカウントでtelnetログインします。
もう使わない tmp-kun は削除しておきましょう。
$ su
# deluser --remove-home tmp-kun

長くなったので今日はここまで。
次は、Debianのアップデートをします。このDebian化キットは sarge(Debian 3.1)で作られていますが、現在のDebianの安定版(stable)は etch(Debian 4.0)なので、etch へのアップグレードもしたいところです。

2008-08-19

秋葉原で最安HDDとmicroSDを探した('08年夏現在)

というわけで土曜、台風接近とかで微妙な空模様の中、アキバに行ってきました。

HDDは、事前にネットで下調べしておいたかいもあって、だいたい相場の最安値に近い値段で買えました!
(ということは、秋葉原までの交通費と手間を考えると、送料払ったとしてもネット最安店で通販で買ったほうが安上がりなのですが……そこは気にしない方向で)

玄箱に入れるHDD(3.5インチSATA)は、500GBにするか640GBにするか悩みましたが、Western Digitalの640GB(WD6400AAKS)を7,950円で。パソコンハウス東映でした。ネット最安値は7,850円+送料なので、まあこんなものでしょう。ギガ単価12.4円。
実は夕方、ツクモで日立の500GBがタイムセールで5,980円だったんですよ。ギガ単価12円切ってる! これは第一候補や! と思って他店の価格調査して、やっぱツクモが一番安いなと思って戻ってきたらタイムセールが終わってました…。6,200円ちょいになってて、だったらギガ単価も大して変わらないし、最近評判の良いWDにしようかなと。

ノート用の2.5インチUltraATAは、こちらもWestern Digitalの120GB(WD1200BEVE)にしました。アークが一番安くて、5,880円。ネット最安値も同価格でした。というか同じ店。
日立の120GBだと、あきばお~でもう千円くらい安いのがあったんですが、こちらもWDが評判良いようなので奮発してみました。あきばお~って「雑貨と記録メディア」ってイメージがあったんですが、HDDも売っていたとは初めて知りました。まあHDDも「記録メディア」なのでおかしいわけじゃないんですが。

ついでにmicroSDも買おうとしたですが……。
2GBだと安くて700円台。たまに600円台もあったんですが、ノーブランドの謎の品。

結論としては、上海問屋のサイトで646円(送料無料)のトランセンド製を通販で買ったほうが安かったです。上海問屋のリアル店舗にも行ってみましたが、通販よりも高いとは……秋葉原の家賃が高いってこと?