2009年3月25日水曜日

chrome + rep2 -> bad request?

Digest認証をかけている自宅サーバのrep2に対して chrome からアクセスすると、
Digest認証は通るみたいなんですが、rep2の認証を終えたあとに、bad requestになってしまいます。
accessとerrorのログはこんな感じ。

[Wed Mar 18 06:14:20 2009] [error] [client 127.0.0.1] Digest: uri mismatch - </~pppppp/rep2/> does not match request-uri </~pppppp/rep2/?guid=ON>, referer: http://localhost:8931/~pppppp/rep2/

localhost - - [18/Mar/2009:06:14:20 +0900] "POST /~pppppp/rep2/?guid=ON HTTP/1.1" 401 401 "http://localhost:8931/~pppppp/rep2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19"
localhost - p2user [18/Mar/2009:06:14:20 +0900] "POST /~pppppp/rep2/?guid=ON HTTP/1.1" 400 226 "http://localhost:831/~pppppp/rep2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.48 Safari/525.19"

(ログに> < で括られてるのが入るとblogに転載し辛いなあ…)

digest bad request で検索すると……
ただし、IE6 では Digest 認証を使って foo.cgi?FOO=BAR のような URL にリクエストすると、 誤ったリクエストを送ってしまうバグがあります。 以下の URL は Mozilla や FireFox では正しく閲覧できますが、IE6 だと正しいユーザ名・パスワードを送信しても、 400 Bad Request になってしまいます (Windows XP SP2 + IE6 で確認)。

なお、IE7 ではこのバグは修正されています。

http://x68000.q-e-d.net/~68user/net/http-auth-2.html

これかな?確かにIE7なら問題なく表示できたので、同じような設定をchromeに対して設定してみると・・・?


#(.htaccess に以下の文を追加)
BrowserMatch "Chrome" AuthDigestEnableQueryStringHack=On


正しく表示されるようになりました。めでたしめでたし。

余談:そこで検索キーワードにchromeを入れなかったのが悪い。
http://blog.recyclebin.jp/archives/239
http://blog.makotokw.com/2008/09/08/google_chromedigest/
http://groups.google.com/group/google-chrome-help-jp-report-a-bug/browse_thread/thread/fe1280ecd27db0b0?pli=1


なぬ、--new-httpオプションとな?

2009年3月11日水曜日

unixbench 4.1.0 で Shell Scripts の結果がおかしくなる

Core i7搭載のPC ( パソコン工房 WS7000L ) が届いたので、計算用に Debian(lenny) の amd64 版をインストールしてみました。もともとUbuntuの動作確認がとれているものなのですが、流石最新版、あっけなくインストール終了、問題なく稼働中。

ところが、ちょっと計算速度でも見てみようかと思い unixbench をコンパイルして実行させたところ、Shell Scripts の結果がおかしい。infなどという値になります。(このへんちょっとうろ覚え。)

調べてみると、どうも pgms/tst.sh のシェルスクリプトで sort +1 という古いオプションを利用しているせいらしく。logを見ると +1 : No such file or directory ってそりゃそうですねえ。ここは sort -k 2 にしておくのがよさそう。

というわけで修正をしてみました。
ついでに、すぐ make & Run できるよう Makefile のデフォルトを調整して。
あと Run の環境変数は C にしておくと、もしかしたら想定の動きなのかなー?と思ったので足してみた次第。LANG=C ./Run が正しいのかもしれません。

あとはコンパイラが警告を出しているのがちょっと気になるんだけど、まあとりあえずってことで。


diff -urN unixbench-4.1.0.orig/Makefile unixbench-4.1.0/Makefile
--- unixbench-4.1.0.orig/Makefile 1999-07-29 07:05:02.000000000 +0900
+++ unixbench-4.1.0/Makefile 2009-03-11 23:36:15.000000000 +0900
@@ -44,10 +44,10 @@
# -m386 -malign-loops=1 -malign-jumps=1 -malign-functions=1

## For Solaris 2, or general-purpose GCC 2.7.x
-OPTON = -O2 -fomit-frame-pointer -fforce-addr -fforce-mem -ffast-math -Wall
+# OPTON = -O2 -fomit-frame-pointer -fforce-addr -fforce-mem -ffast-math -Wall

## Very generic
-#OPTON = -O
+OPTON = -O

## For Digital Unix v4.x, with DEC cc v5.x
#OPTON = -O4
diff -urN unixbench-4.1.0.orig/Run unixbench-4.1.0/Run
--- unixbench-4.1.0.orig/Run 1999-07-29 07:04:47.000000000 +0900
+++ unixbench-4.1.0/Run 2009-03-11 23:34:26.000000000 +0900
@@ -1,6 +1,7 @@
#! /bin/sh
#
#################### set your defaults here ##############
+LANG=C ; export LANG
#FLAVOR= # flavor of UNIX: if not determined by script: SysV or BSD
FULL_SUITE="dhry2reg whetstone-double syscall pipe context1 spawn execl \
fstime fsbuffer fsdisk shell short int long float double arithoh \
diff -urN unixbench-4.1.0.orig/pgms/tst.sh unixbench-4.1.0/pgms/tst.sh
--- unixbench-4.1.0.orig/pgms/tst.sh 1995-11-28 02:07:03.000000000 +0900
+++ unixbench-4.1.0/pgms/tst.sh 2009-03-11 23:35:22.000000000 +0900
@@ -15,6 +15,6 @@
###############################################################################
ID="@(#)tst.sh:3.4 -- 5/15/91 19:30:24";
sort >sort.$$ -od sort.$$ | sort -n +1 > od.$$
+od sort.$$ | sort -n -k 2 > od.$$
grep the sort.$$ | tee grep.$$ | wc > wc.$$
rm sort.$$ grep.$$ od.$$ wc.$$


お手元の sort コマンドが + オプションを受け付けないときにどうぞ。お急ぎのかたは pgms/tst.sh だけ直せばOK。
sort --version してみて 6.10 だとダメなようです。
FreeBSDの sort は 5.3.0-20040812-FreeBSD というわけでちょっと古く、+ オプションへの対応が残っていたみたいですね。

ベンチマーク結果は後ほど。

追記、_POSIX2_VERSION=199209 のようにPOSIX準拠のための変数を定めておくのもひとつの方法のようです。unixbenchは古いプログラムなので、こういうところに気を遣うものなんですね。

追記2 いま times のログを見たら warning だの Bad address だのが出ていて、もしかしたらもうちょっと修正しないといけないのかも……? そのうち大幅書き直しかもしれません。

2009年3月6日金曜日

FreeBSDをbittorrentでダウンロードする話(今更?)

FreeBSD bittorrent で検索しても最近の話があまり上位に出てこないので、ちょっとだけ。
FreeBSD 7.1-RELEASE と 6.4-RELEASE についてですが、現在のところ正式に bittorrent でダウンロード出来るような体制が出来ています。

BitTorrent

7.1-RELEASE ISOs are available via BitTorrent. A collection of torrent files to download the images is available at:

http://torrents.freebsd.org:8080

http://www.freebsd.org/releases/7.1R/announce.html

FreeBSDでの詳しいダウンロード方法などについては otsune さんが書かれた記事が参考になりますね。
http://www.otsune.com/bsd/ports/bittorrent.html

個人的にハマった経験から、 portsで新しいアプリケーションに追従させる予定があるのなら、OSインストール時にpackagesを使わないほうがよいだろう、と思います。特にX関連。OSがリリースされた時のpackagesは、最新のportsからはだいぶ離れてしまっているので、整合性を取りづらてあまりいい思い出がないのです……

というわけで、全ファイルダウンロードするよりは -bootonly を焼いて基本ファイルのみをネットワークインストール、か、disk1だけで充分なのかもしれません。