Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
本日、リリースしました。ダウンロードはこちらから

今回の内容はメンテナンスリリースとなっています。文字化け問題対応を含む、細かい改善とバグフィックが行われました。
詳しくは更新履歴をご覧ください (Mac OS X / Windows)。

ユーザの皆さんに送信して頂いている、「致命的なエラーの報告」機能が非常に良く働いています。
今回のバグフィックス 2 件は、いずれもこの機能を通じて把握したものです。

また、気がつくと Redmine を活用し始めてから 1 年以上が経過していました。
その間、ユーザさんに切って頂いたチケットは 20 件 (全体で 98 件) と予想以上に活用されていてありがたい限りです。
ユーザ登録の手間はありますが、引き続き要望/ご質問などお寄せいただければと思います。
Category: Linux
FIt-PC2i の RT3070 で無線 LAN の RX レイテンシがひどかった (TX は問題ない)。具体的には、以下のように周期的に TAT が 1 ~ 1,000 msec の間で変化する状態になった。
$ ping 192.168.10.13
PING 192.168.10.13 (192.168.10.13) 56(84) bytes of data.
64 bytes from 192.168.10.13: icmp_seq=1 ttl=64 time=187 ms
64 bytes from 192.168.10.13: icmp_seq=2 ttl=64 time=219 ms
64 bytes from 192.168.10.13: icmp_seq=3 ttl=64 time=242 ms
64 bytes from 192.168.10.13: icmp_seq=4 ttl=64 time=264 ms
64 bytes from 192.168.10.13: icmp_seq=5 ttl=64 time=285 ms
64 bytes from 192.168.10.13: icmp_seq=6 ttl=64 time=309 ms
64 bytes from 192.168.10.13: icmp_seq=7 ttl=64 time=221 ms
64 bytes from 192.168.10.13: icmp_seq=8 ttl=64 time=354 ms
64 bytes from 192.168.10.13: icmp_seq=9 ttl=64 time=380 ms
64 bytes from 192.168.10.13: icmp_seq=10 ttl=64 time=403 ms
64 bytes from 192.168.10.13: icmp_seq=11 ttl=64 time=425 ms
64 bytes from 192.168.10.13: icmp_seq=12 ttl=64 time=448 ms
64 bytes from 192.168.10.13: icmp_seq=13 ttl=64 time=470 ms
64 bytes from 192.168.10.13: icmp_seq=14 ttl=64 time=493 ms
64 bytes from 192.168.10.13: icmp_seq=15 ttl=64 time=506 ms
64 bytes from 192.168.10.13: icmp_seq=16 ttl=64 time=1555 ms
64 bytes from 192.168.10.13: icmp_seq=17 ttl=64 time=556 ms
64 bytes from 192.168.10.13: icmp_seq=18 ttl=64 time=577 ms
64 bytes from 192.168.10.13: icmp_seq=19 ttl=64 time=600 ms
64 bytes from 192.168.10.13: icmp_seq=20 ttl=64 time=628 ms
64 bytes from 192.168.10.13: icmp_seq=21 ttl=64 time=646 ms
64 bytes from 192.168.10.13: icmp_seq=22 ttl=64 time=669 ms
64 bytes from 192.168.10.13: icmp_seq=23 ttl=64 time=692 ms
64 bytes from 192.168.10.13: icmp_seq=24 ttl=64 time=718 ms
64 bytes from 192.168.10.13: icmp_seq=25 ttl=64 time=740 ms
64 bytes from 192.168.10.13: icmp_seq=26 ttl=64 time=770 ms
64 bytes from 192.168.10.13: icmp_seq=27 ttl=64 time=795 ms
64 bytes from 192.168.10.13: icmp_seq=28 ttl=64 time=820 ms
64 bytes from 192.168.10.13: icmp_seq=29 ttl=64 time=733 ms
64 bytes from 192.168.10.13: icmp_seq=30 ttl=64 time=858 ms
64 bytes from 192.168.10.13: icmp_seq=31 ttl=64 time=881 ms
64 bytes from 192.168.10.13: icmp_seq=32 ttl=64 time=906 ms
64 bytes from 192.168.10.13: icmp_seq=33 ttl=64 time=1.30 ms
最初はドライバの問題かなと思ったので Ralink から最新版のドライバを入手して試してみたが、Ubuntu Server 12.04 (i386) ではビルドできるものの動作せず (ハング)。

症状的に怪しいのはパワーマネジメント系かなと当たりをつけてパワーマネジメントを無効化したら、あっさり解消した。
$ iwconfig wlan0 power off
$ ping 192.168.10.13
PING 192.168.10.13 (192.168.10.13) 56(84) bytes of data.
64 bytes from 192.168.10.13: icmp_seq=1 ttl=64 time=0.729 ms
64 bytes from 192.168.10.13: icmp_seq=2 ttl=64 time=0.751 ms
64 bytes from 192.168.10.13: icmp_seq=3 ttl=64 time=0.765 ms
64 bytes from 192.168.10.13: icmp_seq=4 ttl=64 time=0.715 ms
64 bytes from 192.168.10.13: icmp_seq=5 ttl=64 time=0.701 ms
消費電力がどれくらい変わるのかはよく判らない。パワーマネジメントは off (完全無効化) 以外にもパラメータがいくつかあるので、要チューニングか。
Category: Linux
今更感がありますが、ずっとタンスの肥やしになっていた Fit-PC2i を使いたくなったので。

Fit-PC2i はかなり発熱するので HDD を入れるとすぐに壊れそうだな…と考えた結果 miniSD カード (実際には microSD + miniSD アダプタ) に Ubuntu をインストールして使うことにしました。まずインストールの段階で結構苦労したのですが、その話は別の記事にまとめました。

で、いざインストールが終わって使い始めたところ、いくつか問題が発覚しましたが全て解消。

1. ディスプレイに何も表示されない (SSH は繋がる)
Intel GMA 500 を使うためには起動時のカーネルオプションを修正する必要がある。console=tty1 を追加しても変化がなかったので、splash の削除を行って解消。Ubuntu なので update-grub を忘れずに。

2. SD カードの認識がブートに間に合わない事象が偶発する
reboot 時、たまに "Operating System not found" となってしまう。
あまり気乗りがしませんでしたが、この問題は Watchdog を使って自動再起動することで解消しました。詳しくは別記事を参照。

3. 無線 LAN のレイテンシが非常に大きい (Ralink RT3070) ※2013/7/27 追記
省電力周りのトラブル。詳細は別記事にて。解消済み。
Category: Linux
Fit-PC2i で Watchdog を使用する方法は以下の通り。環境は Ubuntu Server 12.04 LTS (i386)。
なお、Fit-PC2i 用の Watchdog ドライバ (sbc_fitpc2_wdt) はカーネルのメインラインに取り込まれており、Ubuntu / RHEL 6 ともインストール不要で利用できます。

まず、パッケージをインストールします。
sudo apt-get install watchdog
次に、/etc/default/watchdog と /etc/watchdog.conf を設定。
sudo perl -pi -e 's|^(watchdog_module)=".+"$|$1="sbc_fitpc2_wdt"|' /etc/default/watchdog
sudo perl -pi -e 's|^#(watchdog-device\s+)|$1|' /etc/watchdog.conf
今回のユースケースでは wd_keepalive があれば機能十分だったので、watchdog の自動起動は無効化。
sudo update-rc.d watchdog disable
ここまで完了したら BIOS で Watchdog を有効にします (自分はタイマーを 60 秒に調整しています)。reboot して、OS が落ちなければできあがり。
Category: Linux
Ubuntu Server インストーラの initramfs には SD カードのドライバが入っておらず難儀しました。

必要なドライバは linux-image というパッケージ (ここらへんからインストーラの kernel に合致したものを探してください。今回は 32-bit だったので linux-image-3.2.0-23-generic-pae_3.2.0-23.36_i386.deb を利用) に含まれているので、ここからドライバを抽出してインストーラ環境で insmod してやればよいです。

まず、既存の Ubuntu 環境で以下の手順を実行します (インストーラ環境では deb パッケージの展開に必要な dpkg コマンドが利用できないため、パッケージの展開を別環境で行い、展開されたドライバをインストーラ環境に転送する必要があります)。
wget "http://ftp.jaist.ac.jp/pub/Linux/ubuntu/pool/main/l/linux/linux-image-3.2.0-23-generic-pae_3.2.0-23.36_i386.deb"
dpkg -x "linux-image-3.2.0-23-generic-pae_3.2.0-23.36_i386.deb" extract
tar czf mmc_driver.tgz extract/lib/modules/3.2.0-23-generic-pae/kernel/drivers/mmc/
mmc_driver.tgz は適当な Web サーバにアップロードしておきます (インストーラ環境では SCP も使えません)。

次に、インストーラ環境で Ctrl-Alt-F2 を押してコンソールに落ち、mmc_driver.tgz をダウンロードしてモジュールを (ざくっと全部) insmod します。
cd /tmp
wget http:// ... /mmc_driver.tgz
tar xzf mmc_driver.tgz
find extract -type f -exec insmod {} \;
これで、SD カードが /dev/mmcblk0 に見えるようになり、インストーラに認識されます。

# VM で SD カードにインストールしてから移動するとか、USB な SD カードアダプタを使う方が簡単だったかも...。