1月 302009
 

FreeBSD の ports の最新をおっかけていると xorg が 7.3 から 7.4 になり、X が起動しねー。とか、マウスが動かねー。キーボードが 101 だぁー。などとあちこちで大騒ぎのようです。まぁ、僕もそーだったのですけどね。

けど、、なんとか動くようにしたのでありました。僕は会社のもひっくるめて、デスクトップ二台、NotePC で二台の計四台の PC で X11 が動作しています。

デスクトップの場合、PS/2 のマウスとキーボードを利用しているぶんには非常にラクチンで、Section “Files” から RgbPath を取り去った後に以下の設定を記述すれば大丈夫です。まぁ、Xorg -configure した後にできた xorg.conf.new を利用したほうが楽ですけどね。

Section "ServerFlags"
    Option “AllowEmptyInput” “off”
    Option “AutoAddDevices”  “false”
EndSection

 
この設定を入れると xorg.conf に記述したキーボードとマウスの設定が有効になります。その時、 moused は起動してはダメになります。なので、マウスの設定の所は Device において /dev/sysmouse ではなく /dev/psm0 を指定することになります。これでマウスがちゃんと動くようになりました。めでたしめでたし。

後、キーボードのほうですが、ServerFlags の所で二つのオプションを追加しているので xorg.conf の内容をそのまま引きずってくれるので jp106 とか ctrl:swapcaps の設定は有効になったままとなるでしょう。

とまぁ、PS/2 のマウスとキーボードのみを利用した環境であれば特に問題はないのですが、NotePC のように普段はタッチパッド(こっちはたいていの場合 PS/2 として認識される)を利用するけど、時々は USB マウスを接続して利用したい。と言う場合もあるわけです。

その場合、Section “InputDevice” の mouse の設定をいちいち /dev/psm0 から /dev/ums0 に書き換えて、X を再起動してからでないと利用できません。後、タッチパッドと USB マウスの同時利用と言うのもできなくなります。あれまー。不便ですねぇ・・。困りましたねぇ。

このような場合はやはり、hald を起動して PS/2 と USB のマウスを認識させるしか手は無いのであります。同時に利用したい人はまずはともあれ hald を起動して、moused を停止しましょう。なお、/etc/rc.conf において moused_enable=”NO” と記述していても USB マウスを接続したとたんに moused が起動してしまう場合がありますが、とりあえずは無視して起動状態としておいても大丈夫でしょう。

続いて xorg.conf の設定ですが、マウスとキーボードの認識を hald で行うようにしたので上に書かれている ServerFlags セレクションの設定二行を削除します。

そして、/usr/local/etc/hal/fdi/policy/10-keyboard-jp106.fdi と言うファイルを用意し、以下の記述をします。

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
    <device>
        <match key="info.capabilities" contains="input.keyboard">
           <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
           <merge key="input.x11_options.XkbModel" type="string">jp106x</merge>
           <merge key="input.x11_options.XkbLayout" type="string">jp</merge>
           <merge key="input.x11_options.XkbOptions" type="string">ctrl:swapcaps</merge>
        </match>
    </device>
</deviceinfo>

 
まあ、書いている内容は xorg.conf に書いた内容を XML 形式にしただけ。と言う感じでしょぅか。

準備ができたら hald が動作していることを確認しつつ、しかし新規にファイルを設置したのでいったん停止して再起動しつつ、 X を再起動してみましょう。

これで無事に起動したでしょうか? そしたら、PS/2 マウスと USB マウスが、両方動くことを確認します。続いてログインし、キーボードが 106 になっていることを確認して、CAPS キーと Ctrl キーもちゃんと入れ替わっていることを確認します。

しかし、hald 経由でキーボードとマウスを認識させたら、問題点が二つあるみたいです。

一個は僕の NotePC 固有の問題かもしれませんが、タッチパッドに付いているマウスの左ボタンでトリプルクリックができなくなりました。一行まるまるコピーの場合にトリプルクリックを利用するのでけすけど、それができない。ついでにダブルクリックもできない・・。トホホ。ちなみに USB マウスでは正常に動作しています。

二個目の問題ですが、キーボード入力で “け” の右横のキーの入力が出来なくなりました。”かっことじ” と “mu” のキーが “へ” の右横の “\” のキーと一緒になってしまいました。これは xmodmap で直せるかなぁ・・。
ちなみにこの記事を書いているキーボードが、既に打てない状態となっていますf(^^;;。
もし、正常に動作しない場合は /var/log/Xorg.0.log を確認してみましょう。どう言う風に確認するのかと言えば・・。動かない。とコメントに書いてください(^^;;。

なお、今回の設定ではコンソールのとこは考慮していません。僕はコンソール画面においてはマウスを利用しない人なので、コンソールでのマウスの挙動は良く分からないのです。

けど、せっかくなので、PS/2 版の xorg.conf と hald 版の xorg.conf を以下に置いておきますね。

PS/2 マウス版 xorg.conf
hald 版 xorg.conf

なお、上のほうは moused が起動している必要があります。下のほうは moused は起動していなくとも良いが hald が起動している必要があります。hald が起動している場合はポリシーファイルが必要です。

つづく

1月 242009
 

Windows7 のベータ版がダウンロードできると言うので早速 x64 の DVD イメージをダウンロードしてきた。インストールする物理的 PC が無いので、バーチャル PC にインストールしたのだけど、せっかく MacOSX の VMware Fusion 2 のライセンスを買ったのだからそこにインストールしてみた。

VMware Fusion 2 ではインストール iso イメージを選択して、ユーザ名とプロダクト キーを一番最初に入れれば後は一時間くらいほっておくとインストールが完了してログインプロンプトが表示される。インストール時、Windows Vista x64 と認識されるところがまぁ、ミソかな;-)。

ちなみに、普段 FreeBSD が動作している PC では WindowsXP Professional x64 も起動するのだけど、そっちでは Virtual PC 2007 が動作しているのでインストールしたいところです。が・・。今は KDE3 の make をしているので当分は無理だぁ。と、言う感じ;-)。

さて、ログインして、実際に利用してみるのだけど、Windows Vista を引きずっているなぁ。と言うのがまず第一印象。上から光りが差し込むのは良いなぁ。と思ったのだけど、考えてみると MacOSX Leopard は真ん中から光りが立ちこめている。赤と青の違いだけじゃん。みたいな。ふむー。で、ログインすると金魚が泳いでいるので、あ、Aqua だ・・。みたいな・・。

利用してみた感じですが、バーチャル PC 上で体験したので速さは感じなかった。後、僕は Vista は Virtual PC 2007 上で動作させているのみなので、比較はやっぱり全然出来ないかなー。あ。けど、IE8 は速いような気はしましたf(^^;;。

日本語版のベータ版とは言っても、まだまだ翻訳が完璧では無く、所々で英語のメッセージが表示されます。後、VMware Fusion 2 との相性かもしれませんが、使用して 10 分たらずでフリーズ。Ctrl+ALT+DEL を受け付けず、VMware のシャットダウンを受け付けず、終了させるのにずいぶんと難儀しました。結局、VMware Fusion 2 を強制終了させて、併せて Windows7 も強制終了。と言う手に出たのでありました。

ネットワーク系を見てみると、僕の自宅では IPv6 が RA で広報されているのにトンネルインターフェースが生えていて、見たことも無い IPv6 アドレスが付加されているのには驚きました。

それにしてもタスクバーは GNOME みたいだなぁ・・。

まぁ、普段は Windows を使う機会が本当にないので、僕の書けるネタはこんなもんかなぁ・・。後は Virtual PC 2007 にインストールして、感動したことがあったらそのにみたいな感じで再度書いてみたいと思います。

1月 232009
 

さてと。話せば長いのであります。mew では IMAP4 や POP3 に対して SSL で接続できます。 ~/.mew の設定や ~/.certs/ に必要なファイルをほーりこむ設定については他のウェブページに譲りたいと思います;-)。

ここでは、他のウェブページを見て設定しても接続できない人がきっと参照してくれることでしょう。と、言う感じでまとめます。特に FreeBSD の ports から stunnel をインストールした人向けです。

最初に答えを言いましょうっ!!。 /etc/hosts.allow で localhost の stunnel のポートを許可しないと接続できませんっ!! /etc/hosts.allow に以下の設定をしている人は mew での SSL 接続がきっとできないことでしょうっ!!

#ALL : ALL : allow

 
さてと。それでは順番に見ていくことにしましょう。 FreeBSD を利用している人は大体 ports から必要なものをインストールするかと思います。emacs+mew で SSL な POP3 もしくは IMAP4 なサーバに接続しようとした時は /usr/ports/security/stunnel が必要なので、サクッと make install しておしまい。で、早速テスト。って感じかと思います。

mew が SSL するときは stunnel 用の設定ファイルを /tmp/takachan88831JOY/mew88831rod みたいな感じで作成します。このファイルが stunnel のオプションになるわけですが、中身は以下のようになっています。

client=yes
pid=
verify=0
foreground=yes
debug=debug
syslog=no
CApath=/home/takachan/.certs
[10841]
accept=127.0.0.1:10841
connect=mail.running-dog.net:993

 
mail.running-dog.net のポート 993 番に接続するための SSL トンネルは localhost の ポート 10841 に telnet して確認できます。まぁ、mew が IMAP4 を叩くポートが 10841 と言うことですね。これは解りやすい。

で、実際に telnet 127.0.0.1 10841 しても SSL トンネルをまるで抜けていきません。おかしいなぁ。と思って色々調べてみると、原因は stunnel が libwrap をリンクしていると言うことなんですね。これが解るまでに四時間位かかりました。orz。

mew 側の設定で localhost のポート番号を設定できるのか?もし設定できるのであれば、そのポートだけを /etc/hosts.allow で設定すれば良いと思いソースを見て調べてみましたが、どうやらできないみたいです。mew-6.2.50 の mew-ssl.el では 130 行目辺りで localport を mew-random を利用して生成しているみたいです。と、言うことで、mew 側ではどうやら設定不能みたいです。

続いて、/etc/hosts.allow に stunnel: ALL : allow とか stunnel4: ALL : allow など色々試しに設定してみたのですが、inetd 経由や デーモンモードで動作する stunnel では有効になるのですが、コマンドベースで利用した場合の /etc/hosts.allow の記述方法が解りませんでした・・。トホホ。

それならば、と言うことで stunnel の Changelog やらソースを眺めますが、おぉっっ!! configure オプションに –disable-libwrap と言うのがあるではないですかっ!! すんばらしい。とは言いつつ、FreeBSD の ports では –disable-libwrap を選択できるオプションが無いのでありました。無条件で libwrap はリンクされてしまう。トホホ。

と、言うことで –disable-libwrap を選択できる ports を作成しました。使いたい方は利用してください。

ports-stunnel-disable-libwrap-20090123.tgz

まぁ、Makefile をチロッと直しただけなんですけどね。

これで安心して mew で SSL が利用できることでしょう。まずは良かった。良かった。

けど、解決策はそんなんで良いのかなぁ? mew 側で吸収すべきか stunnel 側で吸収すべきか。どっちが良いのかなぁ・・。kazu さん 的にはきっと、libwrap を off にしましょう。って言うような気が、しないでもないこともないと、僕は思うのですけどねぇ・・。

1月 192009
 

僕はサーバに ATI IXP700(SB700)、デスクトップ機には ATI IXP600(SB600) なマザーボードを利用している。FreeSBD においては随分と早い段階、多分 7-STABLE 辺りで AHCI に対応していて、7.1-RELEASE ではほぼ利用できるようになっているみたいなので試してみた。

自分のマザーボードと言うか、ATA コントローラが AHCI に対応しているかは sys/dev/ata/a-chipset.c 辺りを確認してみると良いでしょう。僕のは以下のように 7.1-RELEASE では既に対応済みでした。

    { ATA_ATI_IXP600,    0x00, 0, ATIPATA, ATA_UDMA6, "IXP600" },
    { ATA_ATI_IXP600_S1, 0x00, 0, ATIAHCI, ATA_SA300, "IXP600" },
    { ATA_ATI_IXP700,    0x00, 0, ATIPATA, ATA_UDMA6, "IXP700" },
    { ATA_ATI_IXP700_S1, 0x00, 0, ATIAHCI, ATA_SA300, "IXP700" },

 
接続する HDD が SATA150 の場合は ATA_ATI_IXP600 が、 SATA300 の場合は ATA_ATI_IXP600_S1 のほうで認識されます。さてと。後は BIOS で今まで “IDE” と選択していたものを “AHCI” に変更してブートするだけです。

IXP600 なデスクトップ機ですが、 FreeBSD/amd64 7.1-RELEASE はサクッと起動しました。で、起動時、カーネルモジュールをロードする時など、気持ち的には速くなったような気がしました。

で、デスクトップ機なので WindowsXP x64 もインストールされているのですが、こっちのドライバは OS インストール時に SCSI デバイスをインストールする時みたいに、インストール時に AHCI のドライバを組み込まなければだめみたいだし、たとえ AHCI ドライバがインストールできたとしてもイマイチ不安定らしいので IXP600 なマザーボードでは AHCI を利用するのは断念しました。

さてと。ここからが本題。自宅サーバは、このブログでも書き続けていますが、メモリを変えても HDD を変えても電源を交換しても安定していません。で、実は HDD を交換した後、SATA のスピードが SATA150 でしか認識出来ていなかったんですね。

あれ?とか思い調べてみたら、新しく接続した HDD は Seagate の ST3500320AS SD15 と言う、500GB の HDD なのだけど、これは工場出荷時において、ジャンパピンが接続されていて、つまりショートしていて SATA150 が default みたいです。なので、SATA300 で利用するためにはジャンパーピンを取り去って上げる必要があったのでした。

これで、サーバに接続した HDD は SATA300 で認識されるようになり、体感的にも速くなったような気がします。

しかし、SATA300 で認識したのだけど、やはりサーバは突然の停止。と言うことになってしまったのでありました。それならばと思い、IXP700 も AHCI に対応しているのでいっちょやってみるか。と言うことで BIOS の設定を “IDE” から “AHCI” に変更してサーバを再起動。あ。サーバの OS も FreeBSD/amd64 7.1-RELEASE です。

無事に起動し、カーネルソースの make を開始し、しばらくしたら HDD へのアクセスエラーがドドドドドーーーっと出力され、そのままカーネルはフリーズ・・。その場でしゅーりょーーー・・・。状態となったのでありました。orz。

これにしても SATA150 の頃が一番安定しているんではないかい? とか思っています。SATA150 で利用した場合、三日と 12 時間経っても OS 自体が凍りつくことはなく、ミョーに安定している感があります。

このまま SATA150 で運用してみようかと思っています。一体何日くらい落ちずに持ってくれるか。

1月 072009
 

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

今年の一発目。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 スクリプト書くのも、簡単なのは良いのだけど、ちょっと何かやろうとしたら全然書けない・・。トホホ・・。