2008年11月29日

ReadyNAS Duo を購入

ファイルサーバを普通のPCで組み、常時起動して運用すると、月々の電気代がちょっと気になる。

今使っている PC+HDDx4 台の電力消費をワットチェッカで計測すると、ほぼ130W前後になる。コイツが、24時間通電してると、一日 約3kW/h で、約60円程度になる。年間約2万円くらい使ってる計算になる。

RAID0+1の構成が取れるHDDx4台は魅力的だが、、、長期的に見ればHDDx2台(RAID1)のNASに移行するべきですかぁね。。。

HDDx2(RAID1)のNASは、各社多様に製品が展開されている主戦場ですなぁ〜〜

HDDが交換が簡単で扱い易そうなものが良いので、「ReadyNAS Duo」のべアボーンタイプを選択してみた。


"ReadyNAS Duo ホームメディア・サーバー ペアボーンタイプ" (ネットギア)

搭載されているX-RAIDを使えば、容量が同じでない場合でも冗長構成を取れる。余っているSATA HDDとかは容量はまちまちな場合が多いので結構便利だと思う。

最初の初期化は何やらHDD上にファームを展開してるためなのか結構時間がかかる。焦らずに Web管理画面(FrontView) にアクセスできるまで気長に待つ必要がある。

add-onで種々の拡張ができるのも売りで、SSHアクセスやDebian由来のAPTが可能である。 apt が参照してるパッケージ群はベンダーのNETGEAR提供のものに加え、Debian/sarge のものが使える。

ただ sarge 自体はサポート終了してるので、apt-line を debian-archive の近いサイトに変更する必要がある。

deb http://www.readynas.com/packages readynas/

deb http://ftp.riken.jp/Linux/debian/debian-archive sarge main contrib non-free
deb http://ftp.riken.jp/Linux/debian/debian-non-US sarge/non-US main contrib non-free

今更な sarge かぁ。。。

また、NASには珍しく主メモリS.O.DIMMで提供されてより大きなものに交換ができ、より複雑なアプリでもを動かした場合も、結構スラッシングを抑えられる。

でもsargeベースなんだよなぁ。。。

普通にベンダーのファームを使い切るのがベストなんだと思うなぁ。

コイツに使われてる IT3017 は、どうも LEON とか言う Sparc v8 互換のCPUらしい、、、つまり、初めて所有する Sparc になりましたっす。。。 というか Sparc+aptの2点で買いだったのだが、、、

SSH でアクセス出来るので、ローカルでベンチを取ったところシーケンスIn/Outともに、普通のPCの半分以下程度だったっす。ベンチの計測中は、どうもPCに比べてCPUが回りすぎる気がする。

コイツのSATAのバスマスタ転送の実装がヘボイのか、今のx86系のChipsetが優秀すぎるのか、どっちだろう?

今後出てくるだろうATOM系のNASの性能が答えを出してくれるんだろうなぁ。というか、早く優秀なChipset積んで出てこいやぁ!!

まぁ ReadyNAS Duo はNASとしては買っても損はないが、もう少し凝ったことをやりたければ、debian/lenny がインストールできるQNAP NASGLAN Tankとかがお勧めだなぁ。

sarge 止まりなんだよなぁ。。。惜しいなぁ

2008年10月23日

MacOSX 上の Acrobat の OCR の奇妙な文字化けに対処する

MacOSX の OCR の選択肢は狭く、ちょっと躊躇する分野である。そのため、Acrobat 搭載の OCR が重宝すると思う。

しかし!!

僕の持っている Acrobat 8.1.2 では OCR 処理後に埋め込まれる文字が奇妙な文字化けを起こして、全く使えなかった。

ググりまくっても対処法が見つからずに途方に暮れていた。

はて?なんすかね?

ふと文字化け文字列をコピペして UTF-8として再認識させると 80% 位が日本語として識別できるようになった。

詳しく調べてみると、OCR処理後に埋め込まれる文字列が「90ms-RKSJ-H」というエンコードで符号化される(要するにShift-JISの亜流)はずが、コイツの中身が勝手に「UTF-8」になってるっぽい?らしい。

小一日後、、、ふと思ったのが、環境変数LANGかなくらい。。。

LANG変数は、結構昔に ~/.MacOSX/environment.plistで ja_JP.UTF-8 と設定してある。

コイツを削除してみた。。。

あぁぁ、奇妙な文字化けがなくなったぁぁ。

どうやら、MacOSX 版の Acrobat Pro 8.1.2 に含まれる OCR 機能は、勝手に環境変数LANGを参照して、文字化けになってるっぽい。

なんだかなぁ、、、疲れる仕様だなぁ

2008年8月5日

NicoProxy2 と Squid を MacOSX 上で 組み合わせる

最近は元気が無いがニコニコ動画は面白い。Youtube や Veoh に上がってる動画も面白い。

しかし、動画のファイルサイズは HTML/CSS/JavaScript に比べて大きすぎるためか、 キャッシュプロクシとは本当に相性が悪すぎる。Squid でキャッシュ保存するサイズを大きめに取って対処していたのだが、、、どうも気持ちが悪い。

ニコニコ動画限定だが専用のキャッシュサーバ「NicoProxy2」が出てきている。そのうち、動画専用キャッシュサーバがぼこぼこ出て来るんかいなぁ。

なので、Squid と NicoProxy2 を組み合わせてみた。

ユーザは外部サイトを Squid を通してアクセスする状況で、Squid がニコニコ動画の動画リクエストのみNicoProxy2 に委託するのが目的。

NicoProxy2の立ち上げ

手軽に launchd 経由で立ち上げたいので daemondo が含まれる MacPorts を入れてく。

ソースを取ってきて、適当な場所に置く。

# ls -l /opt/local/etc/nicoproxy/
total 24
-rw-r--r--  1 root  admin   321 Aug  5 16:36 conf.yml
-rw-r--r--  1 root  admin  8062 Aug  5 18:58 nicoproxy.rb

もうこの状態で、conf.yml を弄れば、Proxy として機能すると思う。動作確認したら、launchd 用の定義ファイルとラッパースクリプトを書く。

/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/org.macports.nicoproxy.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Debug</key>
	<false/>
	<key>Label</key>
	<string>org.macports.nicoproxy</string>
	<key>OnDemand</key>
	<false/>
	<key>ProgramArguments</key>
	<array>
		<string>/opt/local/bin/daemondo</string>
		<string>--label=nicoproxy</string>
		<string>--start-cmd</string>
		<string>/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper</string>
		<string>start</string>
		<string>;</string>
		<string>--stop-cmd</string>
		<string>/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper</string>
		<string>stop</string>
		<string>;</string>
		<string>--restart-cmd</string>
		<string>/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper</string>
		<string>restart</string>
		<string>;</string>
		<string>--pid=none</string>
	</array>
	<key>RunAtLoad</key>
	<false/>
</dict>
</plist>

/opt/local/etc/LaunchDaemons/org.macports.nicoproxy/nicoproxy.wrapper

#!/bin/sh

prefix=/opt/local
pidfile=/opt/local/var/run/nicoproxy.pid

Start()
{
	cd /opt/local/etc/nicoproxy
	ruby ./nicoproxy.rb &
	echo $! > $pidfile
}

Stop()
{
	kill `cat $pidfile`
}

Restart()
{
	Stop
	Start
}

Run()
{
case $1 in
  start  ) Start   ;;
  stop   ) Stop    ;;
  restart) Restart ;;
  *      ) echo "$0: unknown argument: $1";;
esac
}

Run $1

launchd に登録すれば、再起動しても自動的に上がってくれる筈?

# launchctl load -w /opt/local/etc/LaunchDaemons/org.macports.nicoproxy/org.macports.nicoproxy.plist
...
# launchctl list | grep nicoproxy    
62595	-	org.macports.nicoproxy
...
# ln -s /opt/local/etc/LaunchDaemons/org.macports.nicoproxy/org.macports.nicoproxy.plist /Library/LaunchDaemons/

まぁ、MacPorts に含まれていないのに、org.macports.XXXX なのは愛嬌ってことで。

Squid と連携する

Squid は、MacPorts のものを入れ、取り敢えず動かせる所まではやっておく。NicoProxy2 連携用に、次の設定を加える。但し、例では NicoProxy2 のポートは 25255に変えてあり、自身のホストがCNAMEとか追加して nicoproxy.example.com で引けるようになっているので、各自の環境に合わせる必要がある。

squid.conf

...
# nico proxy
acl nico url_regex -i ^http://www\.nicovideo\.jp/api/getflv/?
acl nico url_regex -i ^http://.*\.nicovideo\.jp/smile\?
cache_peer nicoproxy.example.com. parent 25255 0 proxy-only no-query
cache_peer_access nicoproxy.example.com. allow nico
never_direct allow nico

まとめ

NicoProxy2はon-the-flyでは転送しないのかぁ。。。

2008年8月3日

CentOS 5.2 上で Ruby の環境を整える

CentOS 5.2 の標準では ruby 1.8.5 止まりである。

Ruby を最新バージョンに上げて、RubyGems入れて、Railsも入れるとか、結構、巷で行われている

まぁ、記念なので、次のサイトを参考にインストールしたら、すんなりできた

RPMforge の追加

公開鍵の取得し、レポジトリのパッケージの確認し、インストールし、デフォルトでは使わない設定をする。

# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# wget http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -K rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpmforge-release-0.3.6-1.el5.rf.i386.rpm: (sha1) dsa sha1 md5 gpg OK
# rpm -i rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# sed -ie 's/enabled = [01]/enabled = 0/' /etc/yum.repos.d/rpmforge.repo
# yum --enablerepo=rpmforge list

気持ち ffmpeg や mencoder をインストール出来るようになるってうれしい

# yum --enablerepo=rpmforge install fmpeg mencoder

checkinstall のインストール

tarball からRPMパッケージなどを簡単に作れるようにするものらしい。(1, 2)、、、ちょっとだけいい。

# yum --enablerepo=rpmforge install checkinstall

ruby 1.8.7 のインストール

公式サイトから取得して、つらつらとRPMパッケージに仕立てて、インストールする。バイナリパッケージなので、依存するライブラリを気をつければ、別の環境にもサクサク移せるとは、いい感じ。

# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p17.tar.bz2
# tar xfj ruby-1.8.7-p17.tar.bz2
# cd ruby-1.8.7-p17
# ./configure --prefix=/usr
...
# make
...
# checkinstall --fstrans=no
...
# rpm -ih /usr/src/redhat/RPMS/i386/ruby-1.8.7-p17-1.i386.rpm 
# ruby -v
ruby 1.8.7 (2008-06-09 patchlevel 17) [i686-linux]

RubyGemsのインストール

公式サイトから取得して、サクッとRPMパッケージに仕立てて、インストールする。

# wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
# tar xfz rubygems-1.2.0.tgz 
# cd rubygems-1.2.0
# checkinstall -R "ruby setup.rb"
...
# rpm -ih /usr/src/redhat/RPMS/i386/rubygems-1.2.0-1.i386.rpm 
# gem -v
1.2.0

ここまでくると、gem コマンドが使える状態になるので、あとはそいつに任せれば、環境が出来上がる。

# gem install rails

どっかに、CentOS 用の ruby 最新版のレポジトリとか無いのかなぁ。。。

追記(2010-05-18)

2年も経つとURLも変わるらしい。上手く行かない時は次の記事を参考にと。

1.8.7へアップデート死亡遊技 - Rubyの勉強を始めます。 - Rubyist

2008年8月1日

Xen on CentOS5 は安定してる

P4P800-VM に CentOS 5.2 をインストールしてみた。インストール時に、パッケージ選択に仮想化をチェックすれば、インストール直後から Xen+Dom0 の環境が素で出来ていた。RHEL から流用しているからか、変に固まること無く本当に安定してる。

但し、2点くらい留意する必要があるっぽい。

  1. CentOS 5.2 のインストールメディアを使う場合、インストール時とカーネルを最新バージョンにするまで irqpoll を付ける必要がある。逆に言えば、yum で最新バージョンにすれば必要ない。つまり、CentOS 5.3 くらいには、過去の事になるんだろうなぁ。
  2. 別途PCIカードに差し込んだ e1000 のアダプタで Wake On Lan が機能しない。これは Xen によるブリッジが放置される問題で、終了処理にブリッジを落とせば問題なく機能する。

Second p0st: Wake on LAN」には debian 向けに書かれているが、これを CentOS 用に変更し、/etc/init.d/xen-bridge-phil に書き落とす。その後、適当なコマンドで登録する。

#!/bin/sh
#
# xen-bridge-phil	Stopping Xen network bridge so WOL will work
#
# Author:       localadmin <localadmin@localhost>
#
# chkconfig: 2345 99 02
# description: Stopping Xen network bridge so WOL will work

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0
prog=xen-bridge-phil
ETH=eth0

stop()
{
        /etc/xen/scripts/network-bridge stop > /dev/null 2>&1
        test "x$ETH" != "x" && /sbin/ethtool -s ${ETH} wol g
}

case "$1" in
  start)
	touch /var/lock/subsys/$prog
	;;
  stop)
        echo -n "Stopping Xen network bridge so WOL will work"
        stop
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		rm -f /var/lock/subsys/$prog
		success $"$prog shutdown"
	else
		failure $"$prog shutdown"
	fi
	echo
        ;;
esac

exit 0

登録処理

# chkconfig --add xen-bridge-phil

ついでなのだが、終了時に xend が呼ばれていない気がするので、/etc/init.d/xend の中に適当な位置に

...
start)
...
  touch /var/lock/subsys/xend
...
stop)
...
  rm -f /var/lock/subsys/xend
...

を埋め込む必要があるかもしれん。

追記 (2008/12/10)

某OKWaveの質問サイトにリンクの記載がある。それは良いんだが、ホスト名が異なるだけのコピーが約30サイトもあるのには、ビックリした、、、OKWaveって。。。

大本の質問のやり取りは、「XenでWOLできない?」がそうらしい。

最近のNICのWOLの設定は、電源を完全に落とすと保存されないものが多くなったなぁ。それに、カーネルのバージョンがあがると思い出したようにWOLの不具合が発生するし、みんなIPMPに流れて使っていないのかんなぁ。。。普通のマザボでも載るならよいのに。。。グチグチ

まぁ、ethtool で設定を入れ込むとしたら、/etc/init.d/xen-bridge-phil ファイルのstop()関数の中で、上のようにすればよいかも。

WOL設定って、udev で何とかするのがモダンな解法なのかなぁ。。。良くわからんが。。。。

がんばれ>>RedHat/Fedoraチーム

Remote がiTunesから登録を解除される問題の対処法

iPhone/iPod touch アプリに Remote という、iTunes を制御できる優れものアプリがあるらしい。iPod touch のファームを 2.0 に上げて以来試しているが、なぜかiTunesから登録が解除される挙動に悩まされてきた。。。

今日なんと対処法が分かった。。。

どうも4桁のピンコードを入力した後に、折り返しに iTuens から iPod touch へ HTTP アクセスがあって登録が完了するらしい。このとき iTunes が動いてるマシンにプロクシ設定があるとき、折り返しアクセスが HTTPプロクシを通して返され、別のIPアドレスから登録完了の通知なので iPod touch に拒絶されるのが原因らしい。。。あばば

つまり、4桁のピンコード登録時にはiTunes が動いてるマシンのプロクシを一時的に切れば良い。

で登録できましたよ〜〜。。。Remote アプリいいすぅね。。。

2008年7月31日

Xen 3.2 on Ubuntu でNFSが固まる

捨てるには勿体ない ASUSTek P4P800-VM / Pentium 4 3GHz の構成を生かそうと思い Xen 3.2 on Ubuntu で準仮想化を試そうとした。

幾つかの地雷原を上手く避けたのだが、どうも Dom0 上の NFS サーバが動作時に下記メッセージを吐いて固まってしまう。

BUG: unable to handle kernel paging request at virtual address xxxxx

同様なメッセージは Xサーバでも出るがドライバを i810 から vesa に変更すれば回避が可能である。

イマイチ分からん挙動で Dom0 上で NFS サーバを使わなければ良いのだが、、、少なくともワシはやじゃ!

CentOS5.2 でも試そう

2008年7月28日

libvirt on MacOSX を試してみる

あまり意味は無いが、libvirt は Windows 上でも動いているので、UNIXを名乗ってる MacOSX でも動かないことは無いと思うので試してみた。

依存するライブラリやパッケージをインストールするために MacPorts を使う。。。取り敢えず適当に入れとく。

次に、gnutls/pkgconfigを入れる。

$ sudo port install gnutls
$ sudo port install pkgconfig

libvirtのサイトから、ソースを取ってくる。4カ所修正を行い、configure & make を行う。

$ tar xfz libvirt-0.4.4.tar.gz
$ cd libvirt-0.4.4
$ sed -i .bak 's/test -z "\$PKG_CONFIG/test -n \"$PKG_CONFIG/' configure
$ sed -i .bak 's#-Wl,--version-script=\$(srcdir)/libvirt_sym.version##' src/Makefile.in
$ sed -i .bak 's/xdr_quad_t/xdr_int64_t/;s/xdr_u_quad_t/xdr_u_int64_t/' qemud/remote_protocol.c
$ sed -i .bak 's/rl_completion_matches/completion_matches/' src/virsh.c
$ ./configure --without-xen --without-qemu --without-libvirtd --without-storage-fs
$ make
$ make install

実際使えるのは、virsh のみだが、リモート対向の libvirtd の設定に応じてURIを指定する必要がある。 ssh経由のトランスポートを指定する場合、socket オプションを明示する必要がある。 あと、お互いのシステムで nc コマンドが動く必要がある。

$ virsh -c qemu+ssh://remote-machine/system?socket=/var/run/libvirt/libvirt-sock


普通に動く。。。

ただ、virt-managerを入れようとしてるが macports の gtk2 が上手く入らんので、試せん。。。意味無いなぁ。 gtk2が入らないのは #15816が原因で、port sync で問題なくインストールで来た。でも、virt-managerが依存する virtinst とかは libxen ? が必要なのでイマイチ動かん。。。

2008年7月24日

Solaris on Linux KVM はまだまだ?

KVM+libvirt の組み合わせは最高!Redhat6.2からFedora9まで起動し安定している。

勢い余って、Solarisをインストールしたが、どうもだめだめの状態

  1. Solaris 8/9 に関しては、CDブートでのインストールは出来るが、 初回のHDDの起動時に、しょっぱなから「Can't read gemotery」と出力されて先に進まない。どうも、ブート処理のかなり初期の段階 mboot か pboot のどっちかが巧く動かないようで、KVMの16bit命令のエミュレートの問題か、BIOSの挙動の問題のどちらのような気がする。
  2. Solaris 10/OpenSolaris に関しては、インストールも起動も出来る。ただし、ゲストOSがアイドル時にホスト側のエミュレータが 100% CPU を食いつぶしている状態で、ちょっといただけない。KVM/QEMU側のMONITOR/MWAITのエミュレートが巧くいっていないので busy wait になってるとか、なってないとからしい。 (参考「OpenSolaris Forums: QEMU and MWAIT/HLT? cpu idle loop ...」等々) どうも思い過ごしだったらしく、起動して暫くするとアイドル状態になりほぼ 0% になる。ただし、Solaris10は最新パッチまで当てると起動しなくなる。
Virtual Box とかではきっと動くんだから、そのうち、安定するんでしょうね。

sata_nv で NCQ を有効にする方法

何となく、dmesgを見てたら

[   51.265072] ata3.00: 625142448 sectors, multi 1: LBA48 NCQ (depth 0/32)

と、NCQが有効になっていなかった。

どうやら sata_nv.swncq=1 をカーネルオプションを付ければ良いのだが、イマイチ有効にならないようだ。

はて、どうしたもんだか?

Debian/Ubnuntu のカーネルはディスク周りもモジュールになるような修正が入ってるためか、オプションを記述する部分は制限されるようで、initramfs-tools の設定で渡す必要があるらしい?

/etc/initramfs-tools/modules

sata_nv swncq=1

その後、initrd を再構築して、再起動。

# update-initramfs -k all -u
update-initramfs: Generating /boot/initrd.img-2.6.24-19-generic

dmesg で確認すると、NCQが有効になってるっぽい

[   44.429828] sata_nv 0000:00:0e.0: Using SWNCQ mode
...
[   44.953114] ata1.00: 625142448 sectors, multi 1: LBA48 NCQ (depth 31/32)

ただし、イマイチ速くなった気がしないが、いいのかなぁ

2008年7月23日

FreeBSD 7.0 と Linux KVM

KVM 上に FreeBSD 7.0 をインストールした。

その前に、FreeBSD は CD 数枚組で配布されており、DVD は無い。 Creating Your Own FreeBSD 7.0 DVDを参考に作成してみた。

FreeBSD 7.0 DVD イメージの用意

近場のミラーサイトから

  • 7.0-RELEASE-i386-disc1.iso
  • 7.0-RELEASE-i386-disc2.iso
  • 7.0-RELEASE-i386-disc3.iso
  • 7.0-RELEASE-i386-docs.iso
を入手する。

DVDイメージの作成

下記コマンドは、Linux上で作業。

# mkdir /path/to/dvd-freebsd7
#
# for suffix in "disc1 disc2 disc3 docs"; do
#   iso="7.0-RELEASE-i386-$suffix.iso"
#   mount -oloop /path/to/$iso /mnt
#   tar -C /mnt -c . | tar -C /path/to/dvd-freebsd7 x
#   umount /mnt
# done
#
# rm -Rf /path/to/dvd-freebsd7/rr_moved
#
# sed -ie 's/|[123]$//' /path/to/dvd-freebsd7/all/packages/INDEX
#
# cat >> /path/to/dvd-freebsd7/cdrom.inf <<EOF
CD_VOLUME = 0
CD_VOLUME = 1
CD_VOLUME = 2
CD_VOLUME = 3
EOF
#
# mkisofs -v -V FreeBSD -J -R -no-emul-boot -b boot/cdboot -o /path/to/7.0-RELEASE-i386-dvd.iso /path/to/dvd-freebsd7

インストール

KVM上では、2点問題がでたが、それを除けば難なくインストールできた。

ACPI/APICが機能しない

ACPI/APICが上手く機能しいので、それを除けてインストールし、最後にブートローダ側での設定を行った。

/boot/loader.conf
/boot/device.hints

hint.acpi.0.disabled=1
hint.apic.0.disabled=1

libvirtではshutdown制御がACPI経由で行われるようなので、いちいちログインして終了する必要があり、自動でVMが終了しない。ちょっと嫌ですな。。。そのうちFreeBSD on Linux KVM でACPI対応するんだろうなぁ

追記(2008/07/24)

ACPIを無効にして、APMを使うようにすれば、自動でVMを終了することができる。但し、libvirtではshutdown制御は効かない。。。

  • /boot/device.hintsに、hint.apm.0.disabled=0
  • /boot/loader.confに、apm_load="YES"
  • /etc/rc.confに apm_enable="YES"

参考「FreeBSDでACPIを無効にしAPMを有効にする方法

NICが安定しない

また、KVMのデフォルトで選択される rtl8139では、FreeBSD側のドライバが安定してない。何か timeout とかのメッセージが出る。

libvirt 0.4.2 から NIC のmodel指定ができるようになったので、手動で最新ソース libvirt_0.4.4-0ubuntu1 からパッケージを構築し、NICのモデルに e1000 を指定したら安定して動くようになった。

...
   <interface type='bridge'>
     <mac address='xxxxxx'/>
     <source bridge='br0'/>
     <model type='e1000'/>
   </interface>
...

NetBSD on Linux KVM も似た感じで、ACPI無効で適当なNICモデルを選択すれば良い。

完全仮想化のときディスクの CHS 値がちょっとだけおかしい?

KVM / QEMU 等で、ちょっと古めの OS を入れて遊んでいたら、次のようなメッセージが出るが、 何事もなく動く場合がある。

kernel: hda: C/H/S=780/0/63 from BIOS ignored

多分、CHS変換が上手くいっていないがLBAモードでアクセスするので問題が起きていないんだろうが、 正直言うと気持ちが悪い。

Googleの検索だと6件くらい引っかかる

くよくよ調べてみた。

  1. 起動時にホスト側のエミュレータでディスクのCHS値から変換方法は自動的に最適な変換アルゴリズムが選択される。(「bochs: The Open Source IA-32 Emulation Project (New Bochs Documentation)」にあるnone, large, rechs, lbaの4種類)
  2. 仮想マシン上で実行されるBIOSの初期化処理で、論理CHSの最大値が計算される。
  3. エミュレータで指定された変換アルゴリズムで計算した値が EBDA(Extended BIOS Data Area)に保存されている。
  4. 上とは無関係な方法で計算した値がFDPT (Fixed Disk Parameter Table)に保存される。
    (「Enhanced Disk Drive Specification Ver 1.1」に基づいた方法。。。1995年に作成って)
  5. EBDAとFDPT上の論理CHSの最大値が一致しない場合がある。
  6. FDPTの計算に使われる方法は、Head値が256の可能性があり、古いシステムでは誤認識する場合もある。(おおよそディスクサイズが 4Gの以上の時かなぁ?)

変なメッセージが出るのが嫌なのでパッチを作ってみた。ただし、FDPTはどう扱うべきかイマイチ分からないので、正しい対処法かどうかは分からない。

--- kvm-62+dfsg/bios/rombios.c	2008-02-25 18:30:14.000000000 +0900
+++ ../rombios.c	2008-07-23 15:39:17.000000000 +0900
@@ -2450,6 +2450,15 @@
       write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.cylinders, cylinders);
       write_word(ebda_seg,&EbdaData->ata.devices[device].lchs.spt, spt);
 
+      if (device == 0 || device == 1) {
+       Bit8u *fdpt = (device==0) ? EbdaData->fdpt0 : EbdaData->fdpt1;
+
+       write_word(ebda_seg, fdpt, cylinders);
+       write_byte(ebda_seg, fdpt+0x02, heads);
+      }
+
       // fill hdidmap
       write_byte(ebda_seg,&EbdaData->ata.hdidmap[hdcount], device);
       hdcount++;

パッチ書いた後、Googleって見たら、Virtual Box では同様のパッチ Changeset 6294 - VirtualBox が当たってるようである。(Sunの古いシステムで不具合とかあったのかなぁ。。。)

まとめ

FDPTの値に不整合があるが、相当古いシステムしか影響を受けないので、気にする必要は無いらしい。 そのうちKVM/QEMU等のrombios.cにも変更が下りて来るのかもしれない。。。

2008年7月22日

Ubuntuだと Bridge設定すると WakeOnLan 出来ないの何故?

仮想化のため bridge の設定を行ったあと、WOL (Wake-On-Lan) の機能が動かなくなってしまった。

はて、どうしたもんだか?

現状

  1. M2NPV-VM の nForce 430 組込みのGigabit のNIC
  2. BIOSでWOLの設定(Power Up On By PCI/PCIE Devices)済み
  3. forcedeth (ver 0.61)
  4. 起動毎に、WOLの設定を有効化するために、/etc/rc.localの中に記述する。
    ...
    /usr/sbin/ethtool -s eth0 wol g
    ...

これで、Bridgeの設定を行わなければ、癖があるがWakeOnLanが有効に機能する。

不具合の現象に関しては類似の報告があり、シャットダウン時にブリッジの設定を無効にすれば良いらしい。。。

よくよく調べると、Ubuntu 特有の問題で、「netbase 4.25ubuntu2 (source) in ubuntu edgy」の変更で、 シャットダウン時にネットワークを落とす処理を削除したためのようである。つまり、Debian etch/lennyには影響しない。。。

何を思って変更したのだろ?dhcdbd/NetManager側で対処してるので、冗長として切ったのだろうか。。。

対応

単に、削除した処理を手動で実行すれば良い。

# update-rc.d -f networking remove
# update-rc.d -f networking start 40 S . start 35 0 6 .

まとめ

がんばれ Ubuntu!

libvirt 経由で日本語キーボードを扱う

libvirt の管理下の仮想化ドメインから、virt-manager を使って、仮想グラフィック画面をVNC経由でアクセスすると、正しくキー入力ができない場合がある。

kvm/qemu のエミュレータに対してキーボードのレイアウトを指定するオプションを付ければ、対応が可能であるが、、、libvirt のドメイン設定ファイル 「libvirt: Domain XML format」にはどうも関連する設定項目が無いようである。(追記2009/04/14 記事の最後の方を参照)

まぁ、日本語キーボードの keycodes の問題なんで、英字キーボードを用意すれば済むのだが、 日本にいる以上、日本語配列には慣れていかないといけないわけで、、、

はて、どうしたもんだか?

まぁ、スクリプトを挿めばいい

実行バイナリを別名に変更し

# mv /usr/bin/kvm /usr/bin/kvm.bin
# mv /usr/bin/qemu-system-x86_64 /usr/bin/qemu-system-x86_64.bin

/usr/bin/kvm/usr/bin/qemu-system-x86_64の中身を次のラッパースクリプトに変更する。

#!/bin/sh

exec $0.bin -k ja $*

これにより、日本語キーボードでも正しく文字が入力できるようになる。

なんだろ?

VNCでkeycodes配列をネゴしないのが問題なのかなぁ、、、イマイチ分からん

追記 (2009/04/14)

ふと、気づいてみると XMLフォーマットの中で、VNCのキーマップの指定が出来るようになっている!

    <graphics type='vnc' port='-1' autoport='yes' listen='' keymap='ja'/>

開発サイトのデータを検索する 「libvirt.git/search: keymap」と、 どうもドキュメントに記載が無いだけで libvirt 0.4.1 位から使えてたようでした。 なので、このバッドノウハウは要らなくなりました。

2008年7月21日

Ubuntu + KVM + libvirt で仮想化

以前、Xenで完全仮想化ができるのでAthlon64x2 を購入したのだが、 ちょっとしか試していなかった。 変な結構制約があったりで比較的安定している VMware Server を使っていた。

時は経って、Linux KVM というのが活発に開発が行われており、前途有望である。 同時に、色々な仮想化技術を統一したAPIで扱えるlibvirtも整備されてきている。 特に、virt-managerは、 VMware Server Console を彷彿し、ローカルからリモートまで管理が可能になりつつある。

なので、Ubuntu+KVM+libvirt に移行してみようと思う。

インストール

KVM と virt-manager のパッケージをインストール。

# apt-get install kvm libvirt-bin virt-manager
# addgroup <自分> libvirtd

ついでに、QEMU/KQEMU も入れとくと何かと便利かも、、、仮想化命令をサポートしないCPUを使っている場合はこっちがメインになると思う。

# apt-get install qemu kqemu-source
# module-assistant prepare
# module-assistant build kqemu
# module-assistant install kqemu
# modprobe kqemu
# echo "kqemu" >> /etc/modules

あとは、virt-managerを使うと仮想化ドメインがGUIで簡単に作れるようになる。

20080721virt-manager

ブリッジの設定

何もしなければ、仮想化ドメインのネットワークは、専用のサブネットが割り当てられる。なので、NATで外に出るか、ルーティングをせっせと張ることになる。

外からサーバ用途としてアクセスしたければ、bridge が簡単でいい。 Ubuntu libvirt guide を参考にして。 そいつの設定をする

まず、現在のNetworkManager/dhcdbd等の自動ネットワーク設定機能切る。

# /etc/dbus-1/event.d/26NetworkManagerDispatcher stop
# /etc/dbus-1/event.d/25NetworkManager stop
# echo "exit" > /etc/default/NetworkManager
# echo "exit" > /etc/default/NetworkManagerDispatcher
# /etc/init.d/dhcdbd stop
# update-rc.d -f dhcdbd remove
# /etc/init.d/networking stop

固定IPアドレスと bridge の設定を行う。

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
	address 192.168.1.123
	netmask 255.255.255.0
	network	192.168.1.0
	broadcast 192.168.1.255
	gateway 192.168.1.254
	bridge_ports eth0
	bridge_fd 9
	bridge_hello 2
	bridge_maxage 12
	bridge_stp off

ネットワークを有効化する。

# cat >> /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
EOF
# sysctl -p /etc/sysctl.conf
# /etc/init.d/networking start

virt-manager を使って新規の仮想化ドメインを作成時に、ブリッジが選択できるようになる。

20080720virt-manager.png

まとめ

Linux KVM よ〜、賢くな〜れ

2008年7月16日

Ubuntu 8.04 LTS に乗り換える。

Debian 安定版の進捗はあまりにも遅く、testing や sid ではあまりにもパッケージの更新が頻繁すぎる。インストールするパッケージを選別すれば良いのだが、それも結構骨の折れる作業である。

世の中を見渡してみると、Ubuntu LTS のリリース方針が自分の要望に怖いほど合致している。

  1. 初期インストールで、日常作業に必要かつ最小限度のパッケージが使える状態になる。
  2. X の設定とかも、Debian だと鬼門だったのだが、Ubuntu では手厚いサポートがある。
  3. 近年 freedesktop.org で整理された部分が、普通に使えるようになってる。
  4. その他、沢山。

兎に角、最初に悩まなくて良いのが一番良い。上手くいかなくても、Debian 使いのバッドノウハウを使えば良いだけのことだし。

なので、Debian/etch から Ubuntu 8.04 LTS に乗り換えてみた。

あと認証系とかの赤帽の authconfig を移植すれば完璧な気がする。。。。

やべ本当だ。。。頼んだ > Ubuntu

iPod touch で App Store から沢山落としてみた。

P1010221.jpg

巷では iPhone 3G の話題が沸騰してるが、 2年でトータル20万以上も出費とは、、、 私は当分買わない。

iPod Touch でもカメラとBluetoothとGPSが付けば、電話機能なんて要らんし。。。

「iPhone 2.0 Software Update 」を適用さえすれば、Wi-Fiが届く場所にいる限り、殆ど同じ触りごごちが味わえる。

幾つか漫画のアプリがあるが、結構サクサクして読み易い。コミックの配信プラットフォームとしてもありかと思う。

ただし、アプリ単体のみの課金パターンしか用意されていないようなので、ホーム画面に漫画の数だけ無数のアイコンが並ぶのはやだなぁ。

「無料のビューア」+「専用の有料コンテンツ」のパターンとかそのうち出てくるのかなぁ。。。課金はそれぞれ用意するとかなのかぁ。。。

ふぅーむ。。。アップルに期待すっかぁ

Blogger で title を変更してみる

どうも長々としたブログ名のためかタイトルがどうもクドいくらい長い。

Blogger の標準的なテンプレートだと個々の投稿のタイトルが「ブログ名:投稿タイトル」なので、これを「投稿タイトル」変更したい。

Google にお伺いを立てたらタイトルは結構いじくりたい人が多いらしく、トリッキーな方法が沢山出てきたが、、、今やってもテンプレートが不正だとかで修正できなくなってる。

どうしたもんだろうかと、思っていたら、 本家で2008/05に修正が入っていて結構簡単にできることが分かった。

そのまま「Change Title for Blogger Post Pages」に書かれた通りにすればできる。

具体的に書けば、Blogger の管理画面で「レイアウト」> 「HTMLの編集」に遷移して、

<title><data:blog.pagetitle/></title>
の部分を
<!-- Start of Changing the Blogger Title Tag -->
<b:if cond='data:blog.pageType == "item"'>
<title><data:blog.pageName/></title>
<b:else/>
<title><data:blog.pageTitle/></title>
</b:if>
<!-- End of Changing the Blogger Title Tag -->
に変更すれば良い。

2008年7月10日

ブログ移転と検索インデックスの移行

ブログを移転したが、検索サイトの結果も移転したい気がする。殆どアクセスが無いサイトだけど、結構 Google の検索順位は高かったので、勿体ない。いろいろ調べると 301リダイレクトを行えば良いらしい。

詳細は Google のヘルプ「サイトの移転に関するヒント」に記述があり、他の検索エンジンとかの対処法も同様らしい。

自前で運用してた typo は、Apache 2.0.x + mod_proxy -> mongrel -> Rails 1.2.x なので、色んな所に実装できそうだが、一番簡単な apache の方で対応してみた

対応

Blogger が生成する permalink は記事タイトルの適当に変換したもので、特定の文字列に変更することはどうも出来ないらしい。記事毎に旧ブログと新ブログのURLの対応づけを指定する必要がある。

対応付け毎に 301リダイレクトする設定に加えて、 移行済みの記事は railsのアプリサーバに渡さないようにすると、次のようになる。

ProxyPass <旧ブログのURLパス> !
redirect 301 <旧ブログのURLパス> <Bloggerでの対応するURL>

これを、記事毎に用意すれば良い。。。後は力技だわ。

力技

記事を移行しつつ、対応付けを下記の書式で一行毎に記録する。

redirect.conf.in

<旧ブログのURLパス片> <Bloggerでの対応するURLパス>

このファイルを上の設定に変換する perl スクリプトに通して、

cvt.pl

#!/bin/env perl

$dsite = "http://XXXXX.blogspot.com";

while (<>) {
 ($s, $d) = split(/\s+/);
 $surlpath = "/articles$s";
 $durl = "$dsite$d";
 print <<EOM
ProxyPass $surlpath !
redirect 301 $surlpath $durl
EOM
}

出てきた設定を include 命令で読み込むようにすれば良い。

# cvt.pl redirect.conf.in > redirect.conf
# /etc/init.d/httpd configtest
Syntax OK
# /etc/init.d/httpd graceful

この時点で、旧ブログで移行済みの記事を参照すると、Bloggerへ誘導されるようになる。

あとはクローラが認識するまで180日くらいは必要らしい。。。本当に移行できるんかいなぁ。

追記(2008/08/05)

RSS/Atom の移転に関しても、301のレスポンスを返すと参照先を変更してくれるらしい。なので、RSS/Atomに関しても301リダイレクトを返すようにした。。。

2008年7月9日

typo の markdown を ecto3 で扱う方法

typo と ecto を組み合わせるとき、 ecto 内の markdown パーサが性能が悪いので、プリビューが上手く表示できないことがある。

Markdown Extra for ecto」を使えば、対処が可能らしいが、ecto 3.0b49 では上手くいかなかった。 パッチの内容は、Perlスクリプトの markdown -> html コンバータを、PHP ベースの変えるものらしい。

ふーむ。

typo は Ruby の RedCloth モジュールの markdown パーサを利用してるので、こっちを使う物を変えれば、上手くいきそうである。

RedCloth インストール

MacOSX 10.5 では、rubygems が使えるので、

# sudo gem install RedCloth

で完了

ecto の markdown フォーマッタの変更

ファイル ecto.app/Contents/PlugIns/Markdown.formatter/Contents/Resources/markdown.perl を名前を変えてバックアップを取り、 次のように変える。

#!/usr/bin/ruby

require 'rubygems'
require 'RedCloth'

text = ""
readlines.each { |line|
  line.gsub!(%r{<typo:code>},"<pre><code>")
  line.gsub!(%r{</typo:code>},"</code></pre>")
  text += line
}

doc = RedCloth.new(text)
puts doc.to_html(:markdown)

めでたく、プリビューが上手く表示されるようになりましたっす。

Writing your own formatter」 に従えば、独自のフォーマッタが結構簡単に作れるらしいので、、、余力があれば遊んでみるのも良いかも。

ブログの移転してきたお知らせ

インターネットは Google 優勢なので Blogger に 移行することに決めました。

更新が滞ることが多いので、Web上ではなくブログ投稿アプリを使おうと思ったら、 そういうツールとかは、markdownとか「はてな記法」とかは結構サポート度合いが低い。 ごちゃごちゃするより、HTMLベースの記法の方が不具合が少ない気がする。

MacOSX でのブログ投稿アプリは有名どころで ectoMarsEdit か悩んだが、ecto に決めた。

まあ安かったからだが。。。

新しいURLは http://moimoitei.blogspot.com/ になります。 順次古い投稿も移していこうかと思います。古いURLは http://blog.moimoitei.jp/ でした。

2008年7月3日

XFSのファイルシステムがまた壊れた。。。

何でも無いが、LVM+XFS で運用したファイルシステムが壊れた。。。

強制電源断をしたからだけど、ほとんど書き込みが無いボリュームで修復も出来ないほど壊れるのは何故だ!!

いっそう XFS が嫌いになったっす。

dm とかは write barrier 機能が有効でないのが問題らしいが、、、はぁ。

2008年6月24日

P4P800-VM でPATA/SATA混合時のLinux 2.6.x 挙動がいい感じ

二年前に、P4P800-VM でPATA/SATA混合時のLinux 2.6.x 挙動?という記事を書いた。

現状の対応度合いが気になったので、試しに Ubuntu8.04 をインストールしてみた。

。。。

あっさり入ってしまった。。。余分なカーネルオプション(irqpollとか)を付けずにも、起動できるようである。挙動不審な問題(スループットとか)とかも起きないようである。

どうも、2.6.16から2.6.24のどこかで対応が進んだらしい。確認するのに骨が折れるので気にしないことが一番である。

Debian/etch の標準カーネルでは irqpoll が必要であるが、Etch&Halfに含まれるlinux-2.6.24 を使うようにすれば不要である。

要は、ディストリビューションの最新安定版(Debianは除く)を使えば良いのかなぁ?

さて、P4P800-VMは一年以上使っていないし、捨てますか。。。

追記(2008/06/25)

CentOS 5.2 がリリースした記念にインストールしてみたが、見事の途中で「Disabling IRQ #XX」と出力されて、殆ど止まってしまった。。。2.6.18 では直ってないっぽい。

次いでに Fedora 9 とか入れてると変に引っかかること無くインストールできたので、CentOS 6.x くらいまで待たないと完全対応とはいかないのかぁ。

でも、やっぱり P4P800-VM は捨てますか。。。

2008年6月3日

ブログの移転の予定の予定?

取り敢えず、そのうちブログを移転します。ただ、半年前から思ってるので半年後になるかもしれん。

どこかは決めていませんが、Bloggerはてな のどっちかにしようかと思案中です。

取り敢えず、無料で、長期期間放置しても(死後も)削除されないようなとこが良い。。。

べつな良さげなところがあれば、そっちにするかも。

Blogger に書いてみるが、、、いいのかなぁ?

2008年5月10日

ちょっとだけ cpufreqd を使って Dothan の発熱を抑える

i915GMm-HFS にインストールしてある Debian を etch から lenny にしたところ、勝手にシャットダウンするようになってしまった。

前後のログをみると、

May  8 19:23:22 myhost kernel: ACPI: Critical trip point
May  8 19:23:22 myhost kernel: Critical temperature reached (109 C), shutting down.
温度が異常に高いため保護のためにシャットダウンしてるようである。

どうしたもんだろう?

現状

  1. i915GMm-HFS
  2. Pentium M 770 / Dothan / 2.13G Hz
  3. cpufrequtils を使って周波数制御の設定を行っている。
  4. ondemand governor で負荷に応じて 800M Hz〜2.13G Hz の変動させる。

/etc/default/cpufrequtils

ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED=2133000
MIN_SPEED=800000
この状況で負荷が高いときにシャットダウンするようになった。

例えば「openssl speed」で長時間の高負荷状態にすると確実に1〜2分以内でシャットダウンする。 どうも、シャットダウンの処理主体はLinuxカーネルの drivers/acpi/thermal.c 内の acpi_thermal_critical 関数らしく、正規の動作らしい。

Gentoo 電力管理ガイドを参照すると、ondemand/conservative を使う限り、 温度に依存した抑制動作がないので、ちょっとした負荷で頻繁に周波数が上がったり下がったりで発熱して、致命的な温度になるらしい。

筐体の廃熱がうまくいってないのかもしれん。

対応

温度状況もいれて周波数管理するためには cpufreqd を使うのが良さげである。 試行錯誤の結果「openssl speed」の実行完了してもシャットダウンしない設定を見つけた。

  1. conversative governor で負荷に応じて 800M Hz〜1.60G Hz の変動させる。
  2. CPUが 65℃以上になったら、800M Hz に制限する。

/etc/cpufreqd.conf

[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
verbosity=4
#enable_remote=1
#remote_group=root
[/General]
 
[acpi]
acpid_socket=/var/run/acpid.socket
[/acpi]
 
[sensors_plugin]
sensors_conf=/etc/sensors.conf
[/sensors_plugin]
 
[Profile]
name=Performance High
minfreq=0%
maxfreq=100%
policy=conservative
[/Profile]
 
[Profile]
name=Performance Low
minfreq=0%
maxfreq=75%
policy=conservative
[/Profile]
 
[Profile]
name=Powersave
minfreq=40%
maxfreq=40%
policy=powersave
[/Profile]
 
##
# Basic states
##
[Rule]
name=Normal
cpu_interval=0-100
#profile=Performance High
profile=Performance Low
[/Rule]
 
# CPU Too hot!
[Rule]
name=CPU too Hot
acpi_temperature=65-150
cpu_interval=0-100
profile=Powersave
[/Rule]

cpufreqd に一言

何で、acpi でバッテリとACアダプタの状態が取得できない場合、ACアダプタが刺さって無く、バッテリ容量が0%として認識するんだい!? 

ソースを見る限り変数が適当な値で初期化していないので、偶然0になり、そういう状態になるらしいが。。。

そのうち Ubuntu とかがまた整理してくれるのかなぁ。

2008年5月6日

Linux でビープ音を消す

Linux を使ってると大きなビープ音がしてとても恐縮する。最近は対応方法があるらしく pcskpr モジュールを読み込まないようにすれば良いらしい。

/etc/modprobe.d/blacklist

blacklist pcspkr

ビープ音を適当なメロディにするとかはできないらしい。。。でも?

追記(2009/08/02)

最近のカーネルでは、PC-Speaker の制御が pcspkr/snd_pcsp のどちらかで出来るようになっている。なので、両方をブラックリストに追加する必要がある。

blacklist pcspkr
blacklist snd_pcsp

2008年4月30日

CF-R3 の HDD 交換

3年半使っていた CF-R3 のHDD から異音が発生して、とうとうOSも起動しなくなってしまった。

Let’snote テンプレ Wiki に従って、交換してみた。

持っているCF-R3は、マイレッツ倶楽部モデルで型番 CF-R3DW4AXP で HDD は特殊仕様でなく5Vで駆動する。何にも考えず 2.5HDD ATA100 を適当に選んで交換できる。120G 容量 HTS541612J9AT00 を選んでみた。

D2D のリカバリなのでHDD が逝かれると、工場出荷状態にリカバリできなくなってしまう。

リカバリ領域を移行するには、壊れる前に作業しなければいけない。

もう起動しない。

男は黙って dd かぁ?

リカバリ領域のバックアップ

取り敢えず適当な Linux の Live CD を確保して、USB-CD/DVD 経由で作業用のLinux システムを確保する。

今回は、KNOPPIXを使った。

で、HDD の最後から 392 シリンダー分がリカバリ領域である。 運が良く破損しておらずアクセスできた。

# total=`blockdev --getsz /dev/hda`
# count=`expr 392 \* 16065`
# skip=`expr $total - $count`
# dd if=/dev/hda of=recovery-fat32.img bs=512 skip=$skip count=$count

できたイメージ recover-fat32.img が fat32 としてマウントできれば成功。サイズが3Gもあるので、netcat を使って転送して、別のマシンに保存した。

HDD 交換

交換方法は、動画もあがってるので、そんなに難しいことではない。

リカバリ領域の復活とリカバリ

  1. MS-DOSの起動ディスクにmakebeer.exe/recvmode.exeを仕込んだものを用意する。
  2. 用意した起動ディスクを起動。
  3. makebeer.exe 3
  4. makebeer.exe /fat32
  5. 再度、Linux の Live CD を起動。
  6. /dev/hda4 が作成されているので、「dd if=recovery-fat32.img of=/dev/hda4 」で書き戻し。
  7. GRUB 起動ディスクを用意し、/dev/hda4 のパーティションブートする。
  8. リカバリメニューに従ってWindowsXPをリカバリ。

本当は 「makebeer /copy 」=>「makebeer /remove」=>「recvmode /normal」で、BIOSのリカバリメニューからリカバリできるらしいが、、、うまくいかなかった。

HDD が 4200 ppm -> 5400 ppm に変更されたためか、体感速度が早く感じられる。

また、3年半くらい使えるかなぁ。

2008年4月25日

Debian で VIA の PadLock を使ってみる

以前持っていた EPIA-ME6000 が不幸なことに再起不能になってしまった。直ぐにEPIA-EN12000EGを入手してたのだが、当時のLinuxのSATA_VIAドライバは不安定だったので、放ったらかしにしていた。

症状として、立ち上げ直後は問題ないが、それからしばらくするとディスク関連でエラーを吐いてフリーズしてしまい、長時間運用ができない、、、何じゃこれって感じ。

最近(etch/lenny ともに最新版)試したところ sata_via は非常に安定している気がする。

VIA C7 Esther には、ハードウェア処理のAES暗号化、SHA関数、乱数生成といった目玉な機能が実装されている。

なんで、Linux で使いましょう。。。。

参考 VIA PadLock support for Linux

ハードウェア乱数生成

Debian etch/lenny の Linux 2.6.18/2.6.24? ともに十分なサポートがあり、rng-tools を使うと、/dev/random からの乱数生成の帯域が太くなるらしい。

apt でインストール

# apt-get install rng-tools

設定を行い

/etc/default/rng-tools

...
RNGDOPTIONS="--hrng=via"
...

/etc/modules

via_rng

rngd を立ち上げ、動作確認をする。

# /etc/init.d/rng-tools stop
# dd if=/dev/random of=/dev/null bs=512 count=1000 & pid=$!
# sleep 10 ; kill -USR1 $pid ; sleep 1 ; kill $pid
0+0 records in
0+0 records out
0 bytes (0 B) copied, 10.0067 seconds, 0.0 kB/s
# /etc/init.d/rng-tools start
# dd  if=/dev/random of=/dev/null bs=512 count=1000       
0+1000 records in
0+1000 records out
96169 bytes (96 kB) copied, 1.04326 seconds, 92.2 kB/s

/dev/random に十分なエントロピーが供給されているので、ブロックされることは殆ど無くなる。

VIA Padlock for Linux Crypto API

VIA Padlock は Linux 2.6.19 からフルサポートされる。素のDebian etch のままだと 2.4.18 止まりなのだが、最近 etch-proposed-updates にバージョンに etchnhalf が含まれる linux-image が提供され、こいつが最新カーネルバージョンに追随してるっぽい。なので、etch でも 2.6.24 が使えるのでこいつを使う。

# apt-get install linux-image-2.6-686-etchnhalf
# reboot
...
# uname -r
2.6.24-etchnhalf.1-686

VIA Padlock のモジュールを読み込むように設定

/etc/modules

padlock_aes
padlock_sha

リブートして

# grep driver.*padlock /proc/crypto
driver       : sha256-padlock
driver       : sha1-padlock
driver       : cbc-aes-padlock
driver       : ecb-aes-padlock
driver       : aes-padlock

カーネルで使える暗号化処理 AES/SHA が高速化するらしい。IPSec 、dm-crypt、とかが、、、

# dd if=/dev/zero of=/dev/ram1 bs=1024 count=5x1024
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.0236812 seconds, 221 MB/s
...
# modprobe padlock_aes
# cryptsetup create -c aes-cbc-essiv:sha256 -d /dev/random ram1 /dev/ram1
# dd if=/dev/zero of=/dev/mapper/ram1 bs=1024 count=5x1024
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.142272 seconds, 36.9 MB/s
# cryptsetup remove ram1
# rmmod padlock_aes
...
# modprobe aes_i586
# cryptsetup create -c aes-cbc-essiv:sha256 -d /dev/random ram1 /dev/ram1
# dd if=/dev/zero of=/dev/mapper/ram1 bs=1024 count=5x1024
5120+0 records in
5120+0 records out
5242880 bytes (5.2 MB) copied, 0.902938 seconds, 5.8 MB/s
# cryptsetup remove ram1
# rmmod aes_i586

VIA Padlock を使った方が 6倍くらい速くなるらしい。。。

これでユーザランドで高速化されるかと言うと、Linux Crypto API は、userland にはインタフェースを持っていない。。。パッチは2種類(CryptoDev for Linux,OCF-Linux)あるらしいが、いまだに議論があるらしく、マージされてない。

OpenBSD/FreeBSD だと OpenSSLが CryptoDev を使うようになってるので、何もせずに高速化されるらしい。。。いいなぁ。

VIA Padlock for OpenSSL

Debian etch/lenny ともに、VIA Padlock の engine が有効にして構築されていなので、自前で用意する必要がある。どうも共有ライブラリの形でプラグイン化できないのが駄目らしい。

VIA PadLock support for Linux 内の以下のパッチを当て、パッケージを再構築。

  • openssl098-padlock-shared-move.diff
  • openssl098-padlock-shared-makefiles.diff

インストール後、/usr/lib/ssl/engines/libpadlock.so がインストールされる。

# openssl speed -evp aes256            
Doing aes-256-cbc for 3s on 16 size blocks: 1847840 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 575493 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 154125 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 39230 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 4929 aes-256-cbc's in 3.00s
...
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc       9855.15k    12277.18k    13152.00k    13390.51k    13459.46k
# openssl speed -evp aes256 -engine padlock
engine "padlock" set.
Doing aes-256-cbc for 3s on 16 size blocks: 10478263 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 8095021 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 256 size blocks: 4480017 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 1600314 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 228568 aes-256-cbc's in 3.00s
...
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      55884.07k   173271.35k   382294.78k   546240.51k   624143.02k

via_rng/padlock_aes の効果で、実に約46倍速くなるらしい。。。はや。

OpenSSL を使う奴のほとんどが簡単なパッチを当てる必要があるらしい。そのうち改善されていくのかなぁ。

OpenSSH にパッチを当てて VIA Padlock を有効にした場合、

 ...  ssh/sshd ともにソフトウェアバージョンを利用 ...
# dd if=/dev/zero count=50 bs=1M | ssh -c aes256-cbc localhost "cat >/dev/null"
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 11.8916 seconds, 4.4 MB/s
 ...  ssh/sshd ともに padlock engine を利用 ...
# dd if=/dev/zero count=50 bs=1M | ssh -c aes256-cbc localhost "cat >/dev/null"
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 7.88281 seconds, 6.7 MB/s

約 50 % の高速化かぁ。。。

さて EPIA-EN12000EG をどう活用しようかなぁ。

2008年4月14日

Power Mac G5 Quad の内蔵GPUを交換してみて。。。

手持ちのPowerMac G5 Quad には、三昔前くらいのGPUであるGeForce 6600 が内蔵されている。より新しめのカードに交換すれば、もしかしたらとても快適になるかと思って物色してみた。

PowerMac G5 には普通のPC用やMacPro用のGPUカードはBIOSが異なるためか使えないようである。その上、GPUに対応するカーネル拡張が、無かったり、intel 用のみ、とか選択肢が全くない。(GeForce 8xxxx 用のはIntelバイナリのみってのは、、、)

旧世代のマシン向けの拡張カードがあまりでないのは、Apple の方針なのかなぁ。。。さびしい。

結局、PowerMac G5 の BTO の一つである GeForce 7800 GT を Vintage Computer から購入した。

早くなったのか?

XBench でベンチマークをとってみた。

PowerMac G5 w GeForce 6600

Quartz Graphics Test 180.91 
    Line    142.19  9.47 Klines/sec [50% alpha]
    Rectangle   173.37  51.76 Krects/sec [50% alpha]
    Circle  159.51  13.00 Kcircles/sec [50% alpha]
    Bezier  157.00  3.96 Kbeziers/sec [50% alpha]
    Text    454.80  28.45 Kchars/sec
OpenGL Graphics Test    111.88 
    Spinning Squares    111.88  141.92 frames/sec

PowerMac G5 w GeForce 7800

Quartz Graphics Test 184.46 
    Line    143.23  9.54 Klines/sec [50% alpha]
    Rectangle   179.68  53.64 Krects/sec [50% alpha]
    Circle  163.49  13.33 Kcircles/sec [50% alpha]
    Bezier  160.60  4.05 Kbeziers/sec [50% alpha]
    Text    451.39  28.24 Kchars/sec
OpenGL Graphics Test    111.99 
    Spinning Squares    111.99  142.07 frames/sec

全く変わらない。。。

CINEBENCH R10 でも、OpenGL のベンチマークもとってみた。

PowerMac G5 w GeForce 6600

Shading (OpenGL Standard)          : 1861 CB-GFX 

PowerMac G5 w GeForce 7800

Shading (OpenGL Standard)          : 2414 CB-GFX 

約30%くらい速い?のか。。。

どうも、OpenGL のハード処理が早くなるらしい。。。イマイチ効果が分からない。

最後のだめ押し、glclock の OpenGL のベンチマークを取ってみた。

blog20080413

時計の回転が早すぎてチカチカして、結果が正しいかよくわからないが、どうやら GeForce 7800 GT の方が早いらしいのは分かった。でも、イマイチ。

UIの早さも体感の早さは変わらないので、ちょっと損した気がする。ファンレスだったGeForce 6600を使ってたので GeForce 7800 GT のファンの音がちょっとだけ気になる。

静かな方が良いので、GeForce 6600 のほうに軍配が上がる。

で、もとに戻してしまった。

2008年3月16日

MediaWiki から MoinMoin への移行ツール

技術のメモ書き用に、自宅内にMediaWiki を立てているのだが、 イマイチ使い勝手がよく無さげなので、別の Wiki システムを探ってみた。 内部的にUTF-8を使ってて、編集の履歴が見れて、そんなやつが良い。

MoinMoin が結構良さげなので移行してみた。

問題は MediaWiki に書き貯めた文書片を MoinMoin の形式に変換するのは手動では面倒である。

なので、ヘボイ変換ツールでも書いてみた。

ソースコード WikiConverter20080316.zip

blog20080316

MediaWiki の書式で変換できるのは一部のみ(リスト、整形済みテキスト、テーブル)である。うまく行かない場合は、ソースコード内の convert.rb を変更する必要がある。というか、自前で変更しないと使い物にはならないかも。

CUIでは一行スクリプトや書捨てスクリプトがよく作られる。そいつのGUI版と考えれば、書捨てGUIもあっても良いと思う。β版でもα版でもなく、こいつはそんなもんだ。

まぁ、Cocoa / CoreData / WebKit 万歳と言う話かなぁ。

Wiki 書式の変換ライブラリってのはないのかぇ。。。。

2008年3月15日

Safari で REFERER を削除する Javascript

普通のブラウザでリンクを辿ると、前のページのURIが次のページのリクエストにHTTP_REFERER として通知される。 Firefox / IE / Opera などのブラウザは拡張なりを入れれば、設定としてreferer を送らないことが出来る。 また referer を削除するプロクシ経由でアクセスする方法もある。ただ、プロクシとは大げさな気がする。

私が常用している Safari では、ブラウザの設定として、referer を削除する機能はついてない気がする。

だらグル(だらだらGoogleで検索)してたら、良い情報があったので、ちょっと組み立ててみた。

全部のリンクのリファーラを抑制するのでなく、class属性が external になっているリンクのみに限定にしてみた。 ソースをちょっとだけ書き換えればリファーラ抑制の条件は変えられる。

cutreferer.js

...
<script type="text/javascript" src="cutreferer.js"></script>
...
<a href="http://external.link" class="external">外部リンク</a>
...

Safari 2/Firefox 2/ IE6 で動作する。ただし Safari 2 のみブラウザ履歴のリストにゴミが残ってしまう。

Lightbox JS の効果を見て、HTMLソースにものすごい埋め込みとかが必要かと思ったが、属性一つだけなのをみて、ちょっと衝撃的だった、、、ので思いついてみた、、、。

参考

  1. リファラ実験
  2. referrerを空にするリンクの作成方法
  3. REFERRERを消して外部ページに移動する
  4. isMSIE
  5. Lightbox JS

Greasemonkey とか GreaseKit 使えるともっと面白いかも

2008年3月7日

iPhone SDK on PowerMac G5 って動くのかぁ

当ブログは全く今時の話題を書かない「端っこブログ」なのだが、iPhone SDK ベータを取り上げたい。

iPhone SDK は、Mac OSX 10.5.2 以降の Intel-Mac 上で動く。

はて、PowerPC 上では動か無いのかぁ。

Apple めぇ。

普通にインストールすると、iPhone 関連のパッケージはインストールされない。 なので、以下のパケージを手動で追加する。 Xcode3.1があるディレクトリを指定する必要がある。

  1. AspenDocumentation.pkg
  2. AspenHostSideTools.pkg
  3. AspenSDKHeadersAndLibs.pkg
  4. AspenSimulatorPlatform.pkg
  5. AspenSystemComponents.pkg
  6. DeveloperDiskImage.pkg

と、適当にプロジェクトを作ってビルドするとPPCベースのバイナリが普通にできるようである。

blog20080307-iphone-sdk

シミュレーション用の互換ライブラリ群にはちゃんと PPC 用のコードも含まれている。

$ cd /Developer/Platforms/AspenSimulator.platform
$ cd ./Developer/SDKs/AspenSimulator1.2.sdk
$ cd ./System/Library/Frameworks/UIKit.framework
$ file UIKit
UIKit: Mach-O universal binary with 2 architectures
UIKit (for architecture ppc7400):   Mach-O dynamically linked shared library ppc
UIKit (for architecture i386):  Mach-O dynamically linked shared library i386

なんだろう?正式版では PowerPC でもサポートされるのだろうか?それとも削除されるのだろうか?

なんかまた端っこの話題でしたね。

追記(2008/07/22)

iPhone SDK の最終版が公開されていので、同様に試した。含まれているパッケージ名は Aspen ⇒ iPhone に変更になっているだけで、シミュレーション用の互換ライブラリも ppc 用も含まれている。

大きな違いは!!

Xcode のGUIから下記エラーが出て構築できなかった。。。

No architectures to compile for (ARCHS=ppc, VALID_ARCHS=i386).

どうも、GUIからは VALID_ARCHSが固定値になってるようである。実際、適当な設定をして xcodebuild コマンドをターミナルから直打ちすれば構築はでき、シミュレータでの動作確認ぐらいはできるようである。

Appleは、本格的に PowerPC 上での開発を縮小する意思表示なんだろうなぁ。。。

本当に残念だ。。。。Mac Pro への買い替え時なのかぁ!?

2008年3月5日

NFS サーバ側でUTF8 NFD ⇔ UTF8 NFC の変換はできるのか?

MacOSX で Unicode が全面的にサポートされている。その中で一番分からないのは、ファイル名が UTF8 NFD (Normalization Form Decomposition) で正規化されていることである。詳しく言えば NFD をベースにした微妙に異なるルールらしい(1, 2)。その結果なのか知れないが UTF-8-MAC と呼ばれることが多い。

Linux 界隈でサポートされる UTF8 は NFC で正規化されると言われている。ただし、正規化処理が為された結果ではなく、専ら合成済みの文字のみを扱っている結果として、UTF-8 NFC なんだと思う。 Windows とおんなじ理由と思う。

根拠は全くない。

Linux というより上位のフレームワーク/アプリケーション(Gnome,KDE 等)の扱いの問題なんだと思う。

UTF8 の正規化の問題は、Samba や netatalk では対応が進んでおり、運用上問題が出ないレベルまで押さえ込むことができるそうなぁ。

NFS に関しては、どっかで議論されている?だろうが、一般的な運用まで下りてきていない。

現状は、

  1. MacOSX はファイル名を UTF-8-MAC にして、NFSサーバに送っている。
  2. 一般的な NFS サーバは、ファイル名の変換を行わずに、ローカルなファイルシステムに送る。
  3. ローカルなファイルシステムも、ファイル名の変換を行わず、ディスクに記録される。
  4. MacOSX が作成したファイル名は UTF-8-MAC (NFD) で正規化されており、UTF8 NFC と異なるバイト列だった場合、Linux のNFSクライアントで不整合が発生する。
nfs-fig01

ローカルな記録をUTF-8-MAC に変えたり、NFS は諦めたり、MacOSX の対応が進まないか祈ってみたり、四苦八苦である。

NFSの実験

どうしたもんかなぁと思いつつ、ちょっとだけ実験することにした。

NFSサーバに以下の機能があればいいのかなぁ

  1. クライアントからのファイル名をUTF8 NFC に正規化する。
  2. クライアントに応じて、正規化方法を選択して、ファイル名をその正規化をして返す。

NFS のファイル名は変換しても大丈夫なんだろうか?とか疑問だが、一番最低限の実装を作ってみた。

  1. 検証するNFSサーバの実装は unfs3 を使う。従って、NFSv3 が対象。
  2. NFS プロトコールのみで、NFS の MOUNT プロトコールは手をつけない。
  3. NFD <=> NFC の変換は、かなの濁音・半濁音に限定する。
  4. クライアントの区別をせずに常に変換する。
  5. NFD => NFC の変換が行われるのは、LOOKUP / CREATE / MKDIR / SYMLINK / MKNOD / REMOVE / RMDIR / RENAME / LINKの引数内のファイル名とSYMLINKの引数内のシンボリックデータ。
  6. NFC => NFD の変換が行われるのは、READDIRの返答内のファイル名。

unfs3-0.9.20.utf8mac-20080305.patch.txt

検証方法

Linuxでは カーネルベースのNFSを使いつつ検証が出来するのが通なんだろうなぁ。

サーバ側(fserver)でパッチを当てた unfs3 のバイナリを作っておく。

# UNFSD=/usr/src/unfs3-0.9.20.utf8mac/unfsd   <-- パッチ済みバイナリ
# EXPORTS=/etc/exports_test                   <-- テスト用の exportsファイル
# ${UNFSD} -d -u -p -n 44000 -m 44100 -e ${EXPORTS}

/etc/exports_test

/export/share 192.168.0.23(rw,no_root_squash)

MacOSX 側(192.168.0.23)でマウント

# mkdir /Volumes/unfs
# sudo mount -omountport=44100,port=44000 fserver:/export/share /Volumes/unfs

結び

濁点・半濁音だけだが変換が行われて、MacOSX から普通に扱える。。。

まぁ、いろいろ試したいことが思い浮かぶので、ちまちま実験していくかなぁ。

2008年3月2日

ブログのテーマを変更してみた

typo のテーマファイルをちょっと弄くって、可変幅で表示できるようにしてみた。

Safari/Firefox/IE6 で同じ表示にしたつもりだが、所々おかしいかもしれない。

CSS のUA依存の動作が結構多いのはゲンナリする。細かいノウハウを蓄積しないと対応できないが、、、なんだかなぁ。

2008年2月27日

Typo を 5系列にする

気がついてみたら、typo 5.0.2 が出ていたので更新してみた。

ほんとに呆気なく出来てしまった。。。

まず rails 1.2.x から rails 2.x への更新

# gem update -y

rails と typo の最新版がgemパッケージがインストールされる。 gem が複数のバージョンを同時に使えるので、ほとんど typo 4 運用中でも実行できる。。。本当かぁ!すげ。

で、typo 4 から typo 5 への更新

$ typo_dir=~/typo                  # 運用中のディレクトリ
$ typo stop ${typo_dir}
$ typo install ${typo_dir}
...
暫く、ファイルのコピーやら削除やら、データベースの更新やらのメッセージ
...
Starting Typo on port XXXX
...

で最後に、管理画面にログインすると、再度データベースを更新する趣旨のボタンがでる。なので、こいつを押して、完了。

操作性は殆ど変わらない。ただ、typo 4 では sitealizer というアクセス解析ツールが含まれていたが、それが無くなってしまった。。。

ついでなので画像ファイルを Flickr へ移行してみたら、Lightbox JS と絡めて簡単使える拡張タグがあり結構 typo のサポートが良い。

他のブログシステムか、他の企業が提供してるブログに乗り換えようかと思ったが、もうちょっと typo を使い続けてみようかなぁ。

2008年2月23日

Leopard 上の NSTreeController は挙動不審?

Leopard において NSTreeController の挙動が素直でない現象に出くわした。 Tiger で同じバイナリは素直な動作をするので、バグなのか、仕様の変更なのか。。。さっぱいり分からない。

途中まで Tiger 上で開発して放り投げておいたものを、Leopard 上で再開した途端、地雷原に突っ込みまくっている。。。

でだ、問題は NSTreeController は、childrenKeyPath の先のモデルを、Array として扱うのか、Set として扱うのか?

簡単なサンプルを作ってみた。

MoiView.zip

  1. モデルに Core Data を使わずにNSMutableDictionary を使い、newObject/newChildObject で単純な初期を行う。このとき children には NSMutableArray のインスタンスを割り当てている。
  2. NSTreeController と NSOutlineView を一般的な binding をしてある。
  3. 五つのボタンのそれぞれのアクションに、NSTreeController のadd:/addChild:/addInsert:/addInsertChild:/remove: を接続して、同時に、それぞれのボタンの enabled に canXXX をbindingする。
  4. 別のボタンに、NSTreeController に rearrangedObjects を実行するアクションを接続する。
  5. こちの挙動の対処の有無のチェックボックスをつける。

トップレベルに追加(add:)や挿入(insert:)を沢山した後、rearrangedObjects を呼び出しても、項目の順序は変化しない。これは、Tiger でも Leopard でも同じ。

トップレベルよりしたの階層で、追加(add:/addChild:)や、挿入(insert:/insertChild:)を沢山した後、rearrangedObjects を呼び出すと、項目の順序は変化しないはずなのだが、僕のLeopard の環境では変化する。

再現性もある。モデル上では insert:はadd:として、insertChild:はaddChild:として振る舞う。。。

でだ、問題は insertObject:atArrangedObjectIndexPath:でも同じように、モデル上では indexpathで指定された階層の最後尾に追加される。。。

ビューとモデルでは違うのは分かるが、Core Data を使わずに適当なクラスを使っているのだから、childrenKeyPath の先を Array として扱って、挿入位置もモデルに反映してほしいのだが、、、。

困った。 仕様なのか、バグなのか、環境なのか、分からん。 最初の話だが、childrenKeyPath の先は、Core Data のエンティティを使う場合は Set であり、クラスを使う場合は出来る限りArray であると思うのだが、違ったのか? まぁ、抜け道はあるから良いのだけども。 そのうち、なんか出てくるかぁ。

追記 (2008/06/21)

MacOSX 10.5.3 になって直ぐには確認していないので、どの時点で改良されたか分からないが、近々の最新状態で確認したところ、insert系のビューとモデルの操作の奇妙な差異が改善された。

どうもバグだったらしい。

要求条件が 「MacOSX 10.5.3 以上」とか見るが、どうもこれらの原因なのかなぁ。。。

よきことかなぁ。

2008年2月22日

PowerPC 上の Leopard で Virtual PC 7 を動かす

公式に Virtual PC は Leopard 上では動作保証外になっている。

まぁ、使えないのかと思っていたが、インストールとか起動とかできるようである。Leopard で使うならば、自己責任で、文句言うなということらしい。

動作時に気になるは、VirtualPCNetworing1040.kext というアイコンがVPCの起動に伴ってぽこっと出てきてしまう。

この動作を押さえるためには、/Library/Extensions/VirtualPCNetworking1040.kext/Contents/Info.plist に次のエントリを加えれば良いらしい。

<key>LSUIElement</key>
    <string>1</string>

当分、動くのかなぁ。

2008年2月20日

Cocoa Binding の canAdd はいつ呼ばれるのか?

NSArrayController/NSTreeController の canAdd/canInsert が呼ばれるタイミングが、素直ではないような気がする。

仕様なのだろうか?

canRemove や canAddChild/canInsertChild などは、それぞれのコントローラの選択(selection)が変化した毎に呼ばれる。

canAdd/canInsertも同じようなタイミングで呼ばれると思うのだが、呼ばれない、、、何故!

素直な期待を満たす動作にするためには、それぞれの派生コントローラを作って、KVOを使って下記のようにしてみた。

@interface CustomController : NSArrayController {  
}
@end

@implementation CustomController

- (void)awakeFromNib
{
    [self addObserver:self
           forKeyPath:@"selection"
              options:0 context:nil];
}

- (void) observeValueForKeyPath:(NSString *)keyPath
                   ofObject:(id)object
                     change:(NSDictionary *)change
                    context:(void *)context
{
    if ([keyPath isEqualToString:@"selection"]) {
        [self willChangeValueForKey:@"canAdd"];
        [self didChangeValueForKey:@"canAdd"];
        [self willChangeValueForKey:@"canInsert"];
        [self didChangeValueForKey:@"canInsert"];
    }
    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
@end

setKeys:triggerChangeNotificationsForDependentKey:を使っても同じことが出来ると思うが、同じ動作は実現できなかった、、、canAdd/canInsert は Controller Key だからなのかぁ。そもそも canRemove はどうしてるのだろうかぁ、、、

全く分からん。

2008年2月19日

気付いてみると 5インチFDD は終焉してたのかぁ

2年くらい前 TEAC の自販サイトで FD-55GFR の新品で入手可能だったが、今は自販サイト自体無くなっており、完全に入手不能になっていた。

サポート終了日は 2007.6.30 なので、そのちょっと前に在庫が尽きたのだろう。

かなり遅れたが、ご苦労さん、5inch FD。

3.5インチFDDは無くなるのは何時だろう。

2008年2月18日

MacOSX 10.5.2 で AFP の Kerberos 認証がおかしい?

更新して 10.5.2 にして以来か分からないが、AFPの共有の認証がうまく機能しなくなってしまった。

パケットをみる限り、AFPクライアントからKerberos認証が行われた形跡がない、、、どうもその前後で NetAuthAgent が落ちているのも気になる。

分からん。
そのうち直るんかいなぁ。

追記 (2008/03/19)

昨日公開された Security Update 2008-002 当ててみたところ、NetAuthAgent が落ちる現象は無くなって、Finderがフリーズ気味の症状は無くなった。

しかし、完全に AFP+Kerberos認証は無効になってしまった。

10.5.1
AFP-Client+Kerberos認証 が問題なく機能
10.5.2
AFP-Client+Kerberos認証 が機能しない、かつNetAuthAgent が落ちる。Finder がフリーズ気味
10.5.2 + Security Update 2008-002
AFP-Client+Kerberos認証 が機能しない。NetAuthAgent は安定。Finder もフリーズもしない

次の更新を乞うご期待!?かぁ、、、。

追記 (2008/05/29)

10.5.3 が出たので、更新したところ、状況は変わらない。。。

もう少し調べたところ

  1. Finderの「サイドバー」の「共有」のエントリからアクセスした場合、Kerberos 認証は行われない。
  2. Finder のメニュー「サーバへ接続」でサーバアドレス「afp://servername」を指定した場合、可能ならば Kerberos認証が行われる。
  3. ゲスト認証ができないサーバに対して、2. の方法でマウントした場合、「サイドバー」からのアクセスとアンマウントの時に、頻繁にFinder がフリーズする。。。
  4. 上記の 2. の方法でマウント済みのボリュームがあるサーバの別のボリュームは、1./2. の両方で Kerberos 認証が使われる。

要するに、Finder がAFP共有の一般的なKerberos認証(LKDCでない奴)での接続を想定していない?扱えてない?のが原因らしい。

えっと、Finder のバグ?かなぁ

対処療法としては、ファイルサーバはゲスト認証+Kerberos認証を有効にして、未マウントのサーバに対しては Finderのメニュー「サーバへ接続」を使えば良いらしい。

また次の更新を。。。

Open Directory の設定のまとめ 2008Q1

Leopard Server をサーバに利用しようと思えば、なんとか出来る。 去年だけど、いっぱい書いたのでちょっと纏めてみた。

Nullクライアントでメールを集める - exim4編

Debian 標準のMTAは exim4 なので、コイツにも Null クライアントの設定をしてみましょう。あの exim4 の設定ファイルはなんと言うか、マクロ言語をまじめに実装せんでもいいのに、、、

インストール直後は「ローカル配信のみ」になっている。

  1. 「スマートホストでメール送信; ローカルメールなし」に変更
  2. mail name/visible domain name に example.com
  3. smarthost にMail Hub のホスト名 にleopard.example.com

に変更する。

# debconf-show exim4-config | grep ^*
* exim4/dc_smarthost: leopard.example.com
* exim4/mailname: example.com
* exim4/dc_local_interfaces: 127.0.0.1
* exim4/dc_minimaldns: false
* exim4/dc_other_hostnames:
* exim4/dc_eximconfig_configtype: mail sent by smarthost; no local mail
* exim4/dc_readhost: example.com
* exim4/use_split_config: true

これで、ローカルもリモートも Mail Hub に送られることになる。

EXPOSED_USER を実現?

root ユーザのヘッダ送信者/ヘッダ受信者のみにホスト名を残すには、ちょっとした細工が必要である。

  1. 独自 rewrite ルールを付け加える。
  2. 「 設定ファイルを小さなファイルに分割」に設定
  3. mail name/visible domain name に host.example.com

その独自 rewrite ルールファイルは次の通り

/etc/exim4/conf.d/rewrite/50_exim4-config_nullclient_rewriting

root@+local_domains *           frt
*@+local_domains    $1@example.com  Efrst

、、、ただ、あまりお勧めしない。

詳細は eximの配布元 のドキュメントを参照かなぁ。

追記

Open Directory の設定のまとめ 2008Q1

Cocoa Emacs 24.3 構築 (2013/03版)

暫く使っている Cocoa Emacs を更新していなかったので、24.3 に上げてみた。 当てるパッチは inline patch と ポップアップフリーズ対応パッチ くらい。 24.3 には既にフルスクリーン実装が入っているので、よく使われているフルスクリーンパッチは外し...