sshd を別ポートで起動してみる。

新年明けましておめでとうございます。今年も宜しくお願いします。

今年の一発目。FreeBSD ネタですが、sshd を port:22 ではないポートで起動するようにしてみたいと思います。そんなの簡単じゃん。て?そりゃーそーだけどさー。rcNG な起動スクリプトを書くのが難儀なのよ。

port:22 で起動する sshd は /etc/rc.conf に

sshd_enable="YES"

 
と書けば良いのだけど、これとは別に、例えば port:22022 で sshd を起動したい。どうしてか?と、言えば網内では port:22 で ssh するんだけど、BB ルータの外側から各サーバにダイレクトに ssh したい場合、個々のサーバで sshd を別ポートで起動して、BB ルータ側でポートの転送をしてあげればダイレクトに入れるよねー。って感じですかね。

なんだよー。そんなの IPv6 あればできるじゃん。と思うんですけど、IPv4 の世界しか無い場合は不可能なので・・。

で、ここまでが前置きで、サーバを起動したときに sshd を port:22022 で起動するようにスクリプトを書くわけです。しかし、これがまた大変・・。例えば、sshd だけでなく、httpd を port:8080 で起動するスクリプトはどうするのだ?とか、色々出てきてですねぇ・・。

一応できたスクリプトがこんな感じ。

#!/bin/sh
#
# PROVIDE: sshd-diff-port
# REQUIRE: LOGIN cleanvar
#
# Define these smartd_* variables in one of these files:
#       /etc/rc.conf
#       /etc/rc.conf.local
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
port="22022" sshd_diff_port_enable="${sshd_diff_port_enable-NO}" sshd_diff_port_pidfile="/var/run/sshd-${port}.pid"
. /etc/rc.subr
name="sshd_diff_port" rcvar=`set_rcvar` command="/usr/sbin/sshd" pidfile=${sshd_diff_port_pidfile}
load_rc_config $name
command_args="-o PidFile=${sshd_diff_port_pidfile} -p ${port}"
run_rc_command "$1"

 
簡単かぁ?これを書くために jman rc.subr してじっくりと眺めます。後はコマンド、今回の場合は sshd ですが、それのオプションをじっくりと調査します。

で、スクリプト名は sshd_diff_port としました。command_args で sshd のオプションを書きました。/etc/rc.conf.local には以下のように書けば起動できることでしょう。

sshd_diff_port_enable="YES"

 
良かった良かった。

それにしても rcNG スクリプトを書く上で疑問な点がまだ残っています。

スクリプトを起動してその中から実際のデーモンを起動した場合(firefox みたいなイメージかな) stop ができない。例えば kdm は スクリプトでそれを起動時に呼ぶのだけど、その中では kdm-bin をキックしている。その場合、stop オプションで実行しても kdm が終了しない。pidfile=${kdm_pidfile} を記述しても 以下のメッセージが出力され終了できない。なんで〜(?_?)。ちょっとだけrc.subr 見てみたけど $name とかが絡んでいる? けど、実際のプロセスは kdm ではなく、kdm-bin なのよー。どうすれば kill できるのー?

kdm not running? (check /var/run/kdm.pid).

 
で、できたスクリプトがこれ。stop は受け付けてくれないので rc スクリプト内で完結するようにした。reload も stop 部分は自前にして start だけ rc.subr に任せた。ダサいなぁ・・。

#!/bin/sh
#
# kdm start
#
# PROVIDE: kdm
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: FreeBSD shutdown
# Define these smartd_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/kdm # # DO NOT CHANGE THESE DEFAULT VALUES HERE # kdm_enable="${kdm_enable-NO}" kdm_pidfile="/var/run/kdm.pid"
. /etc/rc.subr
name="kdm" rcvar=`set_rcvar`
load_rc_config $name
command="/usr/local/kde4/bin/kdm" pidfile=${kdm_pidfile}
case $1 in 'stop' ) if [ -f ${pidfile} ] ; then kill -TERM `cat ${pidfile}` /bin/rm ${pidfile} fi echo 'Stopping kdm.' exit; ;; 'restart' ) if [ -f ${pidfile} ] ; then kill -TERM `cat ${pidfile}` /bin/rm ${pidfile} fi echo 'Stopping kdm.' ;; esac
run_rc_command "$1"

 
httpd を 8080 で起動するスクリプトはもう、書くのもイヤになっちゃった・・。どこかに rc スクリプトのサンプル置き場とか無いかなぁ?

本当に書き方、よく分からないや・・。きっと rc.subr 眺めて書くんでしょうなぁ・・。トホホ・・。

Linux の rc スクリプトも汚いと思っていたけど、最近の FreeBSD の rc スクリプト書くのも、簡単なのは良いのだけど、ちょっと何かやろうとしたら全然書けない・・。トホホ・・。

ufs_dirbad で mangled entry なメッセージ。

自宅のサーバが安定しない。とずっとここに書いてきたのだけど、ふぅ。23 日の 22:00 頃にようやっと原因と思われるメッセージを出力してカーネルがパニックしてくれた。それまでは突然凍りつく現象がずっと続いていたのだけど。

サーバの突然の停止によって、メモリを交換・電源交換・あげくの果てにマザーボードの交換までしたのにそれでもサーバの突然の停止。まいった。

しかし、今回はようやっとメッセージが出力された。タイトルの通りで ufs_dirbad で mangled entry だとメッセージが出力されて、その後 panic: だと。トホホだけど、原因が特定できてよかった。ちなみに僕の場合は /var でこのメッセージが出力された。

PC のハードウェアは交換したけど、HDD はずっと使い回していたので再インストールは特にして居なかったのだけど・・。

FreeBSD のソースコード的には /usr/src/sys/ufs/ufs/ufs_lookup.c の 297 行目辺りなんだけど、何をしているのか皆目見当がつかないので google で検索してみるとそれなりに結構ヒサンな状態みたいですねぇ・・。このメッセージが出ると言うのは。

と、言うことでバックアップを開始し、スパッとパーティションを削除して FreeBSD の再インストールを実施。インストール前は FreeBSD/amd64 7.1-PRERELEASE だったのだけど、インストール用メディアは FreeBSD/amd64 7.1-RC2 でおこなった。その後、cvsup で再度 7.1-PRERELEASE にしたけど、今のところは無事に動作している。と言う感じかな。

けど、cron で動くものやウェブ経由で動作するプログラムが結構 core している模様。dmesg に出力されているのよねぇ・・。

一体何がいけないのか・・。サーバ自体が安定してもその上で動作しているものがボコボコ落ちても余り意味がないのだけど・・。

後、ufs_dirbad なメッセージが FreeBSD/amd64 のみで発生している事象なのかも知りたい所。FreeBSD/i386 使って ufs_dirbad なメッセージが出た。と言うのは google で探しても見当たらないのでもしかしたら FreeBSD/amd64 のみの事象なのかなぁ?

FreeBSD/i386 を利用していても ufs_dirbad なメッセージが出るぜぃ。って人いましたらどうかお願いします。コメント頂けませんでしょうか。宜しくお願いします。

それにしても再インストールでサーバが安定することを切に願うのであります。

H223HQbmid 購入。

最近の液晶ディスプレーの価格の下落にはちょっと驚いているのですが、驚きつつ、ついつい買ってしまいました。 Acer の H223HQbmid を。インターネットで買ったら 25,000yen 程度。まぁ、冬のボーナスで買うにはこれ位で良いかぁ。みたいな感じでした。

届いたのをしばらく使ってみたのですが、その感想を少々書いてみたいと思います。

・ディスプレーが広大だねぇ。Full HD で 1920X1080 のサイズの画面が出るのだけど、右から左に首を動かす量が増えた。まるで車のフェンダーミラーがドアミラーに変わったように・・。

・コントラスト比が 20000:1 だと言うので default ではなんかむちゃくちゃ明るくて、僕の場合頭の後ろが痛くなるので随分と暗くしました。

・ディスプレーを設定するボタンが、ボタンでは無くタッチするだけなのですごいかっちょ良いし、D-SUB・DVI-D・HDMI を切り替えるのは信号が来ているものを勝手にチョイスしてくれるのですんごい楽。

・やたらでかい・・(^^;;。

って感じでしょうか。僕的にはこれが 25,000yen で買えるのが驚きで、良い買い物だったと思っています。

さて、続いて各種 OS の接続状況を見ていくことにしましょう。

・MacOSX Leopard ですが、僕は 2006/11 発売の Dore2Duo な MacBook を持っているのですが、これは Intel GMA 950 なグラフィックチップです。が、 mini-DVI-D のコネクタでディスプレーに接続したらいとも簡単にフル HD で表示してくれました。何も悩まずに広大なデスクトップ環境を手に入れました。

・続いて WindowsXP ですが、これは D-Sub15 ピンで接続しています。こちらも全く問題はありませんでした。

・最後は FreeBSD の X11 ですが、ディスプレー側でアスペクト比固定にすると、左右に黒く入って正しい比率で表示してくれます。一回 Xorg -config を実行し新しい xorg.conf を作成し、それを利用するとフル HD で表示してくれます。おーー。パチパチパチ。僕は KDE4 をデスクトップに使っているのだけど、いやはや。すんばらしい。

・X11 での問題点もあります。フル HD のサイズにしたら日本語の TrueType フォントが表示できなくなってしまいました。1280×1024 の場合は日本語を表示しくれるのですが、1920X1080 にすると日本語フォントが□で表示されてしまいます・・。アタタタ。

ちなみに現在 X11 上で TrueType フォント を利用しているのは emacs のみです。それ以外は KDE や GNOME のアプリなので pango+cairo のアンチエイリアスが有効になったフォントなので X11 は知らないんですね。

さてと・・。X11 で 1920X1080 の時に TrueType フォントを表示できるように格闘すべきか、emacs 自体を pango+cairo のアンチエイリアスが有効になったものに移行すべきか悩むところです。

ちなみに僕は両方とも試しました。xorg.conf を色々いじっただけではだめでした。後、emacs-23.60 は pango+cairo のアンチエイリアス対応ができるのですが、scim からの入力ができず、日本語がまるで打ち込めない状態だったので利用を諦めたのでありました・・。トホホ。

と、言うことで emacs は -nw オプションを付けて konsole から起動することにしました・・。よ、弱い・・。

とまぁ、こんな感じでフル HD を体験しているわけですが、画面が広いのは良いけど首が疲れる。と言うのが良く分かりました。 DVD も見たけどそれは画面が大きくて良いですねぇ。ただ、5.1 チャンネルの音が無いしぃ・・。みたいな。

結局、どっちやねん?(^^;;。

FreeBSD で flash9。

FreeBSD、僕は7.1-STABLE を利用しているのだけど、ちょっと前に Users-ML で話題になった。

FreeBSD-users-jp 91899 からのスレッド ですねぇ。

このスレッドの中で ume さん が、その対処法を書かれているのです。

作業内容は以下みたいな感じですかねぇ。

元々 linux_base-fc4 が入っていたので /etc/make.conf に

OVERRIDE_LINUX_BASE_PORT=f8

 
と設定します。続いて、

# sysctl compat.linux.osrelease=2.6.16

 
してからいよいよバージョンアップです。

# portupgrade -o emulators/linux_base-f8 linux_base-fc4
# cd /usr/ports/emulators/linux_base-f8
# make install
# portupgrade -f linux-\*
# cd /usr/ports/www/linux-flashplugin9
# make install

 
最後にプラグインのコマンドを実行します。

$ nspluginwrapper -v -a -i

 
これで良いはずなんですけど、これで確かに flash9 が動作するのですが、遅い・・。yahoo.co.jp とか watch.impress.co.jp は最近、flash の CM があるのだけど、これを表示する時にむちゃくちゃ遅いっ!! 記事を真ん中クリックして別のタブに表示させるんだけどそこに flash があると平気で 10 秒以上凍りつき、応答がなくなる firefox3。

もうウンザリ・・。flash7 に戻すべや。とか思っていたら、回避策を教えていただきました。ありがとうございます。 ume さん;-)。

原因は linux-glib2 です。linux_base-fc4 で利用していたこれを削除して、再度インストールしなおせば劇的に速く動作するようになります。

その手順は以下のような感じ。

# pkg_deinstall -f linux-glib2
# portupgrede -f linux_base-f8
# pkgdb -F

 
これをやることにより劇的に速く表示してくれるようになります。いやぁ。良かった。flash7 と同じ位の動作で、ストレスも感じません。

ちにみに /usr/ports/devel/linux-glib2 はインストールする必要は無いみたいです。linux-glib2 は fc4 用で、fc5 以降は自前で glib2 を持っているので必要無いみたいです。
#だけど、インストールできちゃうんだよなぁ・・。

良かったです。ありがとうございました。

BUFFALO WLR-UC-G を FreeBSD で使う。

渋谷に新しくヤマダ電気が出来たのだけど、そこの特売で今はディスコンのバッファロー(FreeBSD 的には MELCO)の WLR-UC-G が 1,480yen で売っていた。

USB 接続の無線 LAN アダプタで、WindowsXP 上では AOSS と言うソフトウェアルータを利用して無線アクセスポイントになれる。と言うヤツ。

Windows 専用のアプリケーションをインストールすると無線アクセスポイントになれるんだけど、これを FreeBSD に接続してフツーに無線 LAN アダプタに利用できないかなぁ。と思い、購入。まぁ、FreeBSD で動かなければ WindowsXP で iPod Touch 用に利用すれば良いかな。とも思ったんだけど。

で、FreeBSD に早速接続してみた。kldload if_* とかした後で。けど、かわいくないなぁ。ugen0 に落ちてしまった。しくしく。

さてと。格闘はここから。まず、WLR-UC-G はどんなチップが乗っているのか? google で探すのだけど、どうも解らない。Linux 方面での実績を調べてみたのだけど、それも無いみたい・・。あらら。結局どんなチップを使っているのか google では解らなかったので、しょーがない。Windows に付属の CD からドライバをインストールして調べてみた。すると、Ralink Technology Corp. と言う所のドライバを利用しているみたい。ふぅ。

ちなみに FreeBSD に接続した時の usbdevs -v はこんな感じ。

port 5 addr 2: high speed, power 300 mA, config 1, WLR-UC-G(0x0119), Buffalo(0x0411), rev 0.01

 
ただ、こいつ、しゃらくさいことにプロダクト ID を二つ持っている。AP モードにした場合は 0x0119、クライアントモードにした場合は 0x0116 となる。これを覚えておいてと。

これ位の情報が手に入ると後は簡単。FreeBSD で Ralink Technology Corp. 用のカーネモジュールが無いか調べてみたら if_rum と言うのがあるじゃーん。と、言うことで最新の 7.1-STABLE のソースコードを持ってきてエントリを追加します。

でもって出来たパッチはこの辺りにおいておきます。

http://www.icmpv6.org/Prog/FreeBSD_patches/MELCO_WLR-UC-G.patch

プロダクト ID を二つ登録したので AP モードでもクライアントモードでもどっちでも 無線 LAN アダプタとして利用可能です。けど、クライアントモードで利用したほうが安心かも;-)。

実際に利用するするためには色々なカーネルモジュールをロードする必要がありまずが、ここでは割愛させていただきます;-)。 僕が試した感じでは ifconfig rum0 up して、ssid 付けて dhcp でアドレスが付きました。後 ifconfig rum0 scan も利用できました。

FreeBSD において AP モードは利用できないけど、ハードウェア自体は利用できるようになりました。めでたしめでたし。と言うことにしましょう;-)。

IPv6 ソースアドレスの選択。

新しい BB ルータを買ったら、IPv6 閉域網のアドレスが降ってきて、FreeBSD の rtsol で付くようになってしまった。と言うのは前回書いた

この時は「ip6addrctl より先ににまずはルーティングだよねぇ。」って書いたんだけど、いよいよ ip6addrctl が必要になってきた。と、言うのも、僕の場合、/etc/hosts には以下のように書いている。

# google
2001:4860:0:2001::68       www.google.com

 
そー。ipv6.google.com と、言うのがあるんだけど、これを default で見に行くように設定しているのでした。

この設定をした場合、ipv6.google.com に対してアクセスするとき、僕が持っている IPv6 グローバルアドレスである、2001:200:: より、 NTT の Flet’s v6 (以降「IPv6 閉域網」と記述)の 2001:c90:: のほうが「デスティネーションと同じかより大きなスコープのアドレスが優先」されると言う法則により、ソースアドレスの IPv6 アドレス、つまり、自分のマシンのソースアドレスが IPv6 閉域網のアドレスになるので ipv6.google.com にはアクセスできない。と言う事態が発生してしまうのでした。

こらーもう /etc/ip6addrctl.conf 書くしかねぇべや。と言うことで当初書いていたのがこんな感じ。

:ffff:0:0/96 50     0
::1/128       40    1
::/0          30    2
2002::/16     20    3
::/96         10    4
2001:200::/35 10  100
2001:c90::/32  1  101

 
これでもーたいじょーぶだべ。とか思って、しばらく利用していたんだけど、どうもおかしい。やはり、ipv6.google.com にアクセスできない場合がある。で、どういう時にアクセスできないのか?と、言うと ifconfig でインターフェースについている IPv6 アドレスのうち、一番上についているアドレスがソースアドレスとして動作している。と言うことが解りました。

つまり、IPv6 閉域網のルータ通知デーモンと、自宅の rtadvd が動作しているルータから rtsol で IPv6 アドレスを取得した場合、NTT 側のルータが先に反応すると IPv6 閉域網の IPv6 アドレスが一番先に付いてしまうので ifconfig した時に一番上に来てしまう。その状態で ipv6.google に ping6 してもソースアドレスが IPv6 閉域網のものであるために到達性が無い。と言うことですね。

それにしても ip6addrctl の設定ファイルを書いてもなんでじゃー!?どうしてじゃー!?状態に陥るのでこざいました・・。

で、とある有識者、FreeBSD と IPv6 に詳しい人にお尋ねしたところ、自分が利用したい IPv6 は /etc/ip6addrctl.conf に書く必要はないので消せば良いでしょう。ちゃんと RFC3484 読もうねぇ。と言われつつ教えていただきました。

なので、正しい /etc/ip6addrctl.conf の書き方は以下のようになりますねー。

::ffff:0:0/96 50    0
::1/128       40    1
::/0          30    2
2002::/16     20    3
::/96         10    4
2001:c90::/32  1  101 

 
自分が利用したいアドレスである 2001:200::/35 を削除するのが正解なのでした。この設定を有効にした状態でなおかつ IPv6 閉域網のアドレスが ifconfig で見たときに一番上に来ていても、2001:200:: のアドレスをソースアドレスとして ipv6.google に到達できるようになりました。

良かった良かった。そして、ありがとうございました。

なお、その他の設定の意味については以下の URL を参照すれば大丈夫だと思われます。

http://www.imasy.or.jp/~ume/presentation/CBUG-20031129/text0.html

それにしてもこのドキュメントが書かれたのは 2003 年 11 月ですか・・。

ありがとうございました。 ume さん。

ちなみに MacOSX Leopard には ip6addrctl コマンドがありません。そして、やはり ifconfig で一番上に付いた IPv6 アドレスがソースアドレスになってしまうようです。

ただ、もしかしたら rtsol の時に何かしているのかもしれません。FreeBSD とは違って、IPv6 閉域網の IPv6 が、グローバル IPv6 アドレスより先に付くことは無いですね。ネットワークの設定の所でどっちをメインの IPv6 に使うか設定があったかなぁ?今手元に MacOSX が無いので良くわからないのですけど・・。

Thunderbird と mew でメールを読む。

僕は FreeBSD をデスクトップ環境にしているのでメールの読み書きは emacs+mew と言う環境です。でもって、メールサーバには imap4 も持っているのだけど POP3 もあるので、メールは一台のマシン上に保存するために POP して mew で保存している。

mew で POP してクライアント側で保存することのどこが良いか?と言われれば、一つのメールが一つのファイルになる点かな。まぁ、imap4 に courier-imap を利用すれば 一つのメールが一つのファイルとして imap4 上に保存できるのだけどね。

今日はクライアントのお話。imap4 及び POP3 サーバのことは出てきません。

さて、mew を使い初めてもう 10 年以上経つのだけど、最近は spam が多すぎて困っていた。 今までは自分でシコシコ mew-refile-guess-alist を書いて M-o で振り分けていたのだけど、もう限界に来た。メールサーバ上で spam フィルタを入れるのは大変だし、自分の管理していないメールサーバだともっと無理だし。

と、言うことでクライアント側でなんとかしなければならないのだけど・・。

で、考えたのが Thunderbird の「迷惑メールフィルタ」。サーバに対して imap4 を利用し Thunderbird で接続し、「迷惑メールフィルタ」を実行します。迷惑メールは Spam フォルダに振り分けられるので、その後 mew で POP すれば必要なメールだけが POP できると考えたのだけど・・。

Thunderbird って imap4 を利用すると、自分で管理している場合は順調なのだけど、その状態をサーバには送らないので、Thunderbird 上では綺麗にフォルダを振り分けられているのだけど、他の MUA から imap4 で覗くともうぼろぼろなのね。でもって mew で POP しても、せっかく迷惑メールフォルダに振り分けたメールもぜーーーんぶっ!! POP してきてしまう。というとんでもない仕様なのでうんざり・・。

僕は MocOSX ユーザでもあるので AppleMail も使うのだけど、こいつには「同期」と言うメニューがあるのでそれを選択すると、そのタイミングでサーバとクライアントソフトが同期してくれるのでまだましかな。

Thunderbird の動作、こんなんじゃ全然ダメじゃん。とか思うのだけど、修了時にはサーバ同期してくれるみたい。つまり、「迷惑メールフィルタ」を実行した後、一旦 Thunderbird を終了させるわけですね。うがーーっ!! やっぱりタメダメじゃん。about:config できっと設定できるのだろうな。とは思うのだけど、あんな、説明がなぁんも無い MIB をいちいち見ることなんて絶対やんないし・・。

と、言うことで早速調査開始。そしたら、有りましたよ。mail.imap.expunge_after_delete と言う MIB の値を true に変更すると良いみたいです。[設定]から「詳細」メニューの[一般]タブにある[設定エディタ]を押してから上記 MIB を検索し値を true に返るとぐーです。

早速変更して試してみましたがっ!!

おぉーっ!! 僕が思ったとおりに動くっ!!感動っ!! と、言うことで動作的には、届いたメールに対して Thunderbird でアクセスします。 imap4 を使って。でもって「迷惑メールフィルタ」が実行され、迷惑メールは「迷惑メール」フォルダにどんどん溜まっていきます。「受信トレイ」が随分とすっきりします。

その後、mew から POP3 でメールサーバにアクセスします。でもってメールを取り込んでみると、おーー。「受信トレイ」の中のメールしか POP してこないじゃないですかー。これがやりたかったのよ。

迷惑メールの振り分けは Thunderbird で。必要なメールの管理と送信は mew で。って感じで利用することにしましょー。

ただ、Thunderbird は本来の使い方がされないのでちと悲しいのだろうなぁ;-)。

2008/09/26 追記
やはり、Thunderbird は mozilla 系のアプリケーションだけあって、KDE3 上ではメニューフォントとか、フォルダのフレーム、メールの一覧はどでかいフォントで表示されてしまいますなぁ。

でもって[設定]からフォントのサイズが指定できるのはメールの本文に対してだけだしぃ・・。これじゃダサダサだぁ・・。about:config でもフォントの設定が沢山あるみたいだけど、どれがどれやら解らない・・。

と、言うことで Firefox と同じフォントの設定を書いてみた。と、言うかもっとラクチンに symlink 張ってみたら、あぁら。無事に小さくなったわ;-)。

以前、firefox でフォントの設定をした のだけど、その設定がそのまま Thunderbird でも使えます。

$ cd ~/.thunderbird/乱数ディレクトリ/
$ ln -s ~/.mozilla/firefox/乱数ディレクトリ/chrome

 
これで OK です。後は Thunderbird を再起動すればフォントが小さくなることでしょう。めでたしめでたし。

それにしても、未読メールがボールドフォントってのが気にくわないなぁ。Apple Mail みたいに色で指定できないのかしら・・。

EeePC を FreeBSD サーバにする。最終形。

秋葉を俳諧していたら、16GB の SDHC が 3,980yen で売っていた。「あぁ。ここまで値段が下がったんだな。」と言うことで、今まで EeePC には USB 接続で 2.5 インチの HDD を着けていたのだけど、16GB の SDHC にインストールすることを決意。今回は FreeBSD/i386 7.1-STABLE をインストールしたサーバの最終形をまとめてみたいと思います。

まずはインストールですが、USB 接続で CD-ROM ドライブを接続しますが、パーティションは、オンボードの 4GB の SSD が ad0 です。でもって USB 接続の SDHC ドライブに刺した今回の 16GB SDHC は da1 として認識されます。da0 は 500MB ほどあるのですが、これが何を指しているのか見当が付きません。

パーティションを切った後インストールが始まりますが、CD-ROM からはインストールできないので FTP インストールします。とは言いつつ、 7.1-BETA では ae0 も ath0 も認識してくれないので USB NIC である aue0 経由でインストールします。

インストール完了後、いよいよ SDHC からブートしますが、インストール時、da1 にインストールしたのですが、起動は da0 がどっかに行ってしまい /dev/da0s1a になるので ufs:da0s1a と指定した後、/etc/fstab を直します。これでブート完了。

インストール後のパーティションは大体こんな感じ。あ。僕の EeePC はメモリ 2GB 積んでいるので、今回は swap 領域は無し;-)。

Filesystem  1024-blocks    Used   Avail Capacity  Mounted on
/dev/da0s1a      988398   48664  860664     5%    /
devfs                 1       1       0   100%    /dev
/dev/da0s1f     7752798  675874 6456702     9%    /home
/dev/da0s1e     4954158 1131084 3426742    25%    /usr
/dev/da0s1d     1482638    2770 1361258     0%    /var
/dev/md3         126702   17856   98710    15%    /data 

 
/dev/md3 については後ほど詳細を記述します。

SDHC をパーティションとして使ってみた感想ですが「むちゃくちゃ遅い」って感じです。マルチタスク、マルチプロセスでアクセスした時にそれが現れます。けど、USB HDD を付けていないので見た目は美しいです。後、オンボードの SSD はそのままなので WindowsXP は残ったまま。と言うのもちょっと安心でしょうか(ハードウェアの動作確認的に)。

これで 7.1-BETA が動作し始めましたが、一応 /usr/src を最新の STABLE にします。そして、ae0 のパッチを適用し、カーネルを最新にしてリブートすると ae0 は利用可能状態になります。

後、ath0 についてですが、8-CURRENT では /usr/src/sys/contrib/dev/ath が更新され、hal が最新のものになりました。これで PCI-e の ath0 も動作するようになりました。早速試してみましたが、おぉ。何とか動きますね。ath0 を利用するためには以下のカーネルモジュールが必要です。僕は最近はほとんどをカーネルモジュールにしているのですけど。

wlan_load="YES"
wlan_wep_load="YES"
wlan_scan_ap_load="YES"
wlan_scan_sta_load="YES"
if_ath_load="YES"
ath_hal_load="YES"
ath_rate_load="YES"

 
で、利用してみた感想ですが、IPv4/IPv6 共に利用できます。ただ、しばらく使っていると通信断が頻繁に発生します。ifconfig で確認しても status: active なんだけど、通信できない。でもってメッセージも出力されないのでこれが頭痛い・・。瞬断なら良いのだけど、五分位平気で止まってしまう。けど、あるタイミングでは利用できる。と言う状態だったので結局 ath0 は使うの止めて、aue0 を利用している状態です・・。トホホ。

さてと。ここまでが主にハードウェアと FreeBSD の相性みたいな問題ですが、ここからはインストール先を SDHC にした場合のチューニングについてです。なんせ、遅いし、書き込み回数の上限があるドライブなので、極力アクセスを抑えたいのですね。

と、言うことでまずは syslog を他のサーバに転送しましょう。EeePC 側の /etc/syslog.conf は以下の感じです。

*.*     @192.168.1.21

 
全てを他のサーバへ。って感じ。後、/etc/newsyslog.conf ではログローテートを停止します。ログローテートされるファイルの部分をコメントアウトします。例えば sendmail.st、maillog などかなぁ。まぁ、そもそも、/etc/rc.conf に newsyslog_enable=”NO” と書いてしまいましたが;-)。

これでログの出力は止まりましたが、lastlog と wtmp は localhost に出力するようにしました。

後、syslog サーバですが、FreeBSD で構築すると随分難儀なのねぇ・・。syslog サーバ側の /etc/rc.conf は以下のように設定してログを受信するようにしました。IPv4 にか対応できていない設定がダサいんですけど、書き方解らない・・。なんややこしいんだっ!! -a だけにして残りは libwrap で制限させれば良いじゃねーかよっ!!とか思うんですけど・・。と、言うことでコミッタの方、修正していただけると嬉しいです;-P。

syslogd_enable="YES"
syslogd_flags="-a 192.168.1.0/24:*"

 
syslog サーバ側では -s オプションを消して、-a でアドレスを羅列する設定を記述するみたいです。IPv6 アドレスも書けるみたいですが、実際に書いてもダメだったので、設定方法の調査を諦めて、IPv4 で転送することにしました・・。

さて、これでサーバとしてもだいぶ完成してきました。しかし、更に SDHC へのアクセスを抑えたいのでメモリをファイルシステムと利用したくなってきました。調べてみると、FreeBSD では mdmfs(8) と言うのがあって簡単にメモリをファイルシステムとして利用できるみたいです。man mdmfs すると書いて有りますが、以下のコマンド一発でメモリをファイルシステムとして利用できます。

# mdmfs -s 128m md /data

 
実メモリの内、128MB を /data として利用します。ってコマンドですね。でもって、上の df -k コマンドの結果の一番下の /dev/md3 がその部分になります。/etc/fstab に書いておくと、起動時に勝手にファイルシステムを作ってくれて mount までしてくれるみたいです。すばらしいですねぇ;-)。/etc/fstab への記述方法は man mdmfs に書いて有ります。

と、言うことで、/data には madoka4 のログと、squid のキャッシュ・ログを置くことにしました。当然、起動時には /data/ の下は空っぽなので環境生成するスクリプトを書く必要がありますが。

さて、このサーバで起動しているものですが大体以下ですかねぇ。グローバル IPv4 付加されているので貴重な存在です。

・esecanna+vjed2.5 FreeBSD/amd64からのかな漢字変換サーバ
・dtcpc+dtcpc+rtadvd    IPv6 トンネルルータ
・named    自宅網内のネームサーバ
・squid     Proxy サーバ
・DarwinStreamingServer ブロードキャスター用 DSS

さてと。これでいよいよ 初代 EeePC をしまともな構成で投入できるようになりました。良かった良かった。後の問題は ath0 で、これが通信断が発生しないようになると aue0 が取れるのでもっと美しくなるのだけど・・。

それにしても、今となっては NetBook がシャバ中にあふれているので本当にこの NotePC を買って失敗した。と言うのが感想です。

けどもまぁ、無事にサーバとして動作してくれと本当に良かった。画面サイズがちっこいのもサーバとして利用するのであれば気にはならないですしねぇ。

FreeBSD と hald。

その昔、「KDE3 と hald。 」と言うタイトルで一回書いていますが、この時から環境が大きく変わったのでもう一回書いてみましょう。

今回の環境は KDE4 です。新しいファイルマネージャである dolphin が USB のストレージ、例えば携帯電話とかを接続するとエラーを吐き出すので「これは設定すればまともにユーザランドでオートマウントしてくれるに違いない。」と思ったからです。

でもってまずは調査開始。すると、以下の URL がヒットしました。おぉ。

http://www.freebsd.org/gnome/docs/halfaq.html

これに従って早速設定して行くことにしましょう。

まずは /etc/rc.conf に書く設定です。

dbus_enable="YES"
hald_enable="YES"
#gnome_enable="YES"

 
GNOME を使っている人は gnome_enable=”YES” と書くみたいです。KDE4 を使っている人はこの設定を入れても意味がありませんでした。

続いて /etc/sysctl.conf です。

vfs.usermount=1

 
これでシステムの設定が完了しました。続いて hald と言うか、dbus のポリシーの設定になりますが、この設定については /usr/local/etc/PolicyKit/PolicyKit.conf になります。このファイルに以下の自分のアカウントを設定します。つまり、オートマウントしたいユーザの設定を記述する。と、言うことですね。100 名使っていたら 100 名分書くんかい?とか思ってしまうんですけどねぇX-|。

<match action="org.freedesktop.hal.storage.mount-removable">
    <match user="takachan">
        <return result="yes"/>
    </match>
</match>
<match action="org.freedesktop.hal.storage.mount-fixed"> <match user="takachan"> <return result="yes"/> </match> </match>

 
この設定を記述する必要があります。org.freedesktop.hal.storage.mount-removable と org.freedesktop.hal.storage.mount-fixed については dolphin でも「この設定が無いぜぃ。」って怒られたのでした。なので、この設定を追加すると大丈夫;-)。

後、細かい設定としては、/etc/fstab に /proc を書くとか、operator グループに入っておく必要がある。とかがあるけど、FreeBSD を使っている人はそんなのはインストール直後に書くでしょ。と言うことでここでは省きます;-)。

と、言うことで準備ができたので、マシンをリブート、もしくは hald と dbus を再起動して準備は完了です。

そして実際に使ってみた結果ですが、 FAT32 の USB メモリや携帯電話をストレージモードで接続してもオートマウントしてくれませんでした・・。とほほ。dolphin は例のメッセージが出力されなくなったので設定自体は間違っていないと思うんだけどねぇ・・。

でもって、NotePC で FreeBSD の外着け HDD として利用して、ブートしていた 2.5 インチの HDD があるのだけど、これは UFS でパーティションが四つに切ってあるやつを、バックアップしたいのでたまたま KDE4 のデスクトップ機に接続したら、あぁら不思議。ちゃんと hald が認識して自動的にマウントしてくれたじゃないのさ。嬉しいねぇ。

と、言うことで上記の設定は間違ってはいないみたい。FAT32 はオートマウントがダメみたいです。FreeBSD のインストール CD はオートマウントは OK。UFS のオートマウントも OK。

以下は dolphin のキャプチャなんだけど、FreeBSD がインストールされた 2.5 インチの HDD と FreeBSD のインストール用 CD-ROM をマウントした所です。

2.5 インチの HDD は / パーティションがぶっ壊れていたので fsck しないと自動的にマウントしてくれませんでした(^^;;。

 
dolphon.jpg

と、言う結果になりましたが、それにしても一番利用したい FAT32 が mount できないのが悲しい所・・。

もしかしたらこの項、つづく。かな?

DSS のカン違い。

僕はストリーミング用に自分で DSS を立ち上げているのだけど、なんか、今まで思いっきりカン違いしていることを発見した・・。

録画した動画を QuickTimePro でストリーミング用に書き出した mov ファイルは DSS 上で必ず「プレーリスト」を作成してからストリーミングしていたのだけど、その必要って全くなかったのね。素直に URL に mov ファイルを指定するだけで再生できたんだ・・。

どおりで .sdp ファイルが各種ブラウザで対応していないわけだ・・。ちなみにプレーリストを作成すると、rtsp://qtss.icmpv6.org/test.sdp とかなってプロトコルも拡張子も対応されていなかったのでした。

で、これらは HTML で吸収できるのか?とか思ったけど goolge で探し回ってもその例がほぼ存在しない・・。これは mov ファイルを http:// でアクセスするんだな。と言うことになるわけです。「プレーリスト」は必要なし。

と、言うことで過去のストリーミングはこれでは全然ダメと言うのが良くわかった。新しいのはこんな感じ。今度はちゃんとブラウザも認識してくれる書き方だよー。

電車からの風景
http://motsuyaki.org/Movies/20080616.qtl

http:// でアクセスして .qtl と言う拡張子のファイルを作成するわけです。ブラウザからのアクセスでプロトコルは問題なし、拡張子は QuickTime がインストールされていれば問題無く起動できることを確認しました。ふぅ。これにて一件落着。

さて、qtl ファイルの書き方ですが、大体以下のような感じ。XML なファイルとなります。再生時のオプションも指定できます。

<?xml version="1.0″?>
<?quicktime type="application/x-quicktime-media-link"?>
<embed src="rtsp://qtss.icmpv6.org/train.mov" autoplay="true" type="video/quicktime" controller="true" quitwhendone="false" loop="true" name="MOSS (Motsuyaki ORG Streaming Service)" > </embed>

 
さて、このファイルをウェブサーバ上に置くのだけど、今度は httpd の mime.types で認識してくれないので、このファイルが直接ブラウザに展開されてしまいます。なので AddType してあげる必要があります。conf/mime.types や httpd.conf に書いても良いのだけど、僕は .qtl ファイルを置いたディレクトリに .htaccess を置いてその中に記述してみました。以下のような感じ。

AddType application/x-sdp       .sdp
AddType application/sdp         .sdp
AddType application/x-quicktimeplayer   .sdp
AddType application/x-quicktimeplayer   .qtl

 
まぁ、ダメもとで .sdp の設定も書いたのだけど、やっぱりダメで(^^;;。.qtl のほうは正しく機能するようです。

と、言うことで、これでほぼ正しい設定が完了したと言う感じでしょう。ちなみに .qtl ファイルは QuickTimePlayer からでも出力できます。メニューの [ファイル] → [書き出す] → [ムービーから QuickTime Media Link] を選択すると一発です。色々なオプションも指定してくれるので簡単にできます。是非お試しあれ。

ふぅ。良かった。これでちゃんと DSS が機能しそうだぁ。