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だけで充分なのかもしれません。

2009年2月28日土曜日

設定ファイルをrcsで管理するための細かい話

個人で使っているFreeBSD機において、/etcや/usr/local/etc などにある設定ファイルの変更履歴をrcsで記録するための、ざっくりとしたメモです。setenv RCSINIT -zLTは忘れないようにしたい。あとemacs。お好みでvim+rcs-menu.vimなど。

新しい設定を書き起こすとき

設定ファイルのパーミッションに厳しいプログラムを使うことがあったのですが、rcsやcvsなどではファイルのパーミッションを保存しておくのが難しいのです。しかもどんな設定にすればいいのか忘れやすい。そこで、rcsでファイルを初めてチェックインするときに、log ではなく、description という、ファイルの説明メッセージを書く部分にメモします。意図が違うとかはまあおいといて、どうすればいいかというと……( /usr/local/etc/target.conf を例にする。)

# cd /usr/local/etc/
# mkdir RCS (ない場合は作るべき。後述。)
# ls -l target.conf | ci -i -l target.conf (これでパーミッション情報をメモする。)
# rcs -U target.conf

わざわざRCSディレクトリを作るのは、 find / -not -path '/usr/home/*' -name RCS -type d で探しやすくするため。

ファイルを変更した際には ci -l でチェックインします。-lを忘れるとチェックインしたときにファイルが消えてしまうので注意。

ls の引数と ci の引数に同じファイル名を二度打ちしないといけないところがいまいちかも。
パイプなど使わなくても、ci -i 時のインタラクティブ入力で、ls -lの結果をターミナル窓でコピペしてもOK。情報を残しておくということが重要なのだろうと思います。

何故cvs, subversion, gitではなく rcs なのか?

  • FreeBSDに標準で入っているから
  • 単に使い慣れているから
  • パスワード系のファイルも取り扱う /etc の下を丸ごとリポジトリにコピーしてしまうのはあまりよくないかなと思ったから(多分対処法はある……んじゃないかな?)

rootのままチェックインだのなんだのすることに対する抵抗感はsudoなどで払拭できるか?(未確認)

バックアップは?

設定ファイルが散逸してしまうことは間違いないので、RCSディレクトリをこまめに探しておいて保存するしかないかも?

複数台の設定を管理するノウハウはまた別にあると思いますが、それはまた別の機会に。



追記:linuxでお使いの場合は rcs を導入すれば同じような対応でOKのはず。例えば debian 系 ( ubuntu など ) であれば apt-get install rcs すればよいです。