Personal tools
You are here: Home 日々のメモ書き archive 2009 April
OpenID Log in

OpenID Log in

 

April

Sub-archives

Apr 27, 2009

チャレンジリーグ 春の長良川クリテ

by TANIGUCHI Takaki — last modified Apr 27, 2009 09:44 PM
Filed Under:

今年最初のレース頑張ってきました。

突然寒くなったものだ。長島の駅から出て走っていたら半袖ジャージでは寒かった。風も強くて押し返される感じで。

スポーツIに出て5周目で死亡。ホームストレートに入ってついてけなかった。まだ厳しいです…。


OCFS2の実験

by TANIGUCHI Takaki — last modified Apr 27, 2009 10:49 PM
Filed Under:

OCFS2を実験してみた。

NFSの代わりに使ったりするということだったので、サーバとクライアントという図式でサーバが調整を行うのだと思っていたら違っていた。各サーバーが共有のブロックデバイスを持ち、各サーバーが互い協調して書き込みをする仕組みだった。つまりFCやiSCSIで共有ディスクを接続して運用するということになる。

今回の実験ではLinuxのiscsitargetを使った。iscsitargetでiSCSIディスクを提供するサーバーを1台用意して2台のクライアントからiSCSIでブロックデバイスを共有。そしてOCFS2でマウントする構成を取った。kernelは 2.6.26-2-{686,amd64}で実験。

iSCSIの設定

ざっと書く。iSCSIなりFCなりで共有ディスクがすでにあるなら飛ばす。

iscsitargetをインストールしてLVMのボリュームをiSCSIで公開する。LVMで/dev/vgmain/iscsi0というボリュームを作成して/etc/ietd.confに
Target iqn.2009-04.com.example:storage.iscsi0
Lun 0 Path=/dev/vgmain/iscsi0,Type=blockio

としてiSCSIのディスクを公開する。

クライアント側ではopen-iscsiをインストールする。iscsi_discoverを使ってiscsiのディスクをブロックデバイスとして登録できるところまでやる。例えば /dev/sdaなりに登録されたとする。

OCFS2の設定

次にOCFS2の設定を行なう。
クライアント側でocfs2-toolsをインストール。debconfでブート時に起動されるように設定する。
/etc/ocfs2/cluster.confを設定する。
node:
name = client0
cluster = ocfs2
number = 0
ip_address = 192.168.1.100
ip_port = 7777

node:
name = client1
cluster = ocfs2
number = 1
ip_address = 192.168.1.101
ip_port = 7777

cluster:
name = ocfs2
node_count = 4

このファイルは各クライアントで同じ内容を持つ必要がある。
mkfs.ocfs2を実行してiSCSIのデバイスにOCFS2のファイルシステムを作成する。

# mkfs.ocfs2 /dev/vgmain/ocfs 
mkfs.ocfs2 1.4.1
Cluster stack: classic o2cb
Filesystem label=
Block size=4096 (bits=12)
Cluster size=4096 (bits=12)
Volume size=1073741824 (262144 clusters) (262144 blocks)
9 cluster groups (tail covers 4096 clusters, rest cover 32256 clusters)
Journal size=67108864
Initial number of node slots: 4
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 0 block(s)
Formatting Journals: done
Formatting slot map: done
Writing lost+found: done
mkfs.ocfs2 successful
#
/etc/fstabに次のように設定。書かないと /etc/init.d/ocfs2 が起動しない。
/dev/sda /mnt/ocfs ocfs2 _netdev 0

そのあとに o2cbとocfs2を再起動する。

# /etc/init.d/o2cb restart
Stopping O2CB cluster ocfs2: OK
Unloading module "ocfs2": OK
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unloading module "ocfs2_stack_o2cb": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK
Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading stack plugin "o2cb": OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Setting cluster stack "o2cb": OK
Starting O2CB cluster ocfs2: OK
# /etc/init.d/ocfs2 restart
Stopping Oracle Cluster File System (OCFS2) OK
Starting Oracle Cluster File System (OCFS2) OK
#

というところで終了。かなり簡単。

NVIDIAのドライバー

by TANIGUCHI Takaki — last modified Apr 27, 2009 10:49 PM
Filed Under:

やっと173.14.18のドライバーが入った。

ということでxorg-7.4に家のPCが上がる。

Apr 21, 2009

な、なんだってー

by TANIGUCHI Takaki — last modified Apr 21, 2009 01:20 AM
Filed Under:

OracleがSunを買収!!!!!

えーと、MySQLってどうなるんだ?

業界的にはいろいろあるんだろうけど、あのSunがあのSunが、という感じ。自分がSunOS4でUNIXの世界に飛び込み…長い時間を過ごし。寂しい話だ。

Apr 16, 2009

tokyocabinet-haskellのdeb化

by TANIGUCHI Takaki — last modified Apr 16, 2009 12:15 AM
Filed Under:

tokyocabinet-haskellをdebにした。

ちょうどtokyocabinet-1.4.14が入ったのでtokyocabinet-haskellのdebianizeができるようになった。

cdbsを使うと非常に楽。rulesは2行だけ書けばよかった。controlにlibghc6-tokyocabinet-devなどをずらずら書いていくだけ。あとは適当。でdebuildとやったら途中で止まる。

dh_haskell_shlibdepsがまずい。ディレクトリ名からライブラリ名を調べているのだが、ライブラリ名にハイフンが含まれていると誤認識する(foo-bar-0.1 => fooとなってしまう)。#524143 というレポートになった。手元で修正してきちんと動くようになった。

DAMももうすぐ通過するだろうからそのときまでに今のやっつけからまともなパッケージに改善しておこう。

hskkservでTokyo Cabinetを使う

by TANIGUCHI Takaki — last modified Apr 16, 2009 12:15 AM
Filed Under:

辞書にTokyo Cabinetを使う。

やっつけ実装がplain辞書を毎度毎度HashTableにするすごい処理だった。ま、これは駄目なのはわかっていた。tokyocabinet-haskellを導入したのでplain辞書をTokyo CabinetのHash DBに変換するツールをまず書く。そのあとhskkserv本体でTokyo Cabinetを使うように変更。インターフェイスは似ているので辞書を引く部分を若干変更して終了。

pgpool-IIをPITRでリカバリ

by TANIGUCHI Takaki — last modified Apr 16, 2009 10:41 PM
Filed Under:

前回はrsyncでリカバリーをおこなったが今回はPITRを使う。

やってしまえば簡単な話なんだが、それまでにいろいろ試行錯誤。結果的にPITRのことがわかるようになった。流れは次のとおり。

  • WALのアーカイブログを取るように設定
  • pg_functionの設定(省略)
  • pgpool.confの設定とリカバリーのスクリプトの作成

まずそれぞれのクラスターがWALのアーカイブをするように設定する。cl0,cl1/postgresql.confの設定を行う。

archive_mode = on 
archive_command = 'cp -f %p archive_log/%f'

と設定する。archive_command を

test ! -f archive_log/%f && /bin/cp %p archive_log/%f'

という説明もあるのだが、これやるとエラーになってしまう。

次にpgpool関係の設定。recovery_1st_stage.shを以下のとおり。色々デバッグメッセージが出るので注意。

#!/bin/bash -vx
CLUSTER=$(basename $(cd $(dirname $0);pwd ))

if [ $CLUSTER = cl0 ]; then
PORT=5433
else
PORT=5434
fi

MASTER_BASEDIR=$1
RECOVERY_HOST=$2
RECOVERY_BASEDIR=$3

psql -h localhost -p $PORT -c "select pg_start_backup('pgpool-recovery')" postgr
es

echo "restore_command = 'cp -v $RECOVERY_BASEDIR/archive_log/%f %p'" > $MASTER_BASEDIR/recovery.conf

rsync -av $MASTER_BASEDIR/ $RECOVERY_BASEDIR/
rm -f $RECOVERY_BASEDIR/postmaster.pid

rm -f $MASTER_BASEDIR/recovery.conf

psql -h localhost -p $PORT -c 'select pg_stop_backup()' postgres

次にrecovery_2nd_stage.shを設定する。

#! /bin/bash -vx
CLUSTER=$(basename $(cd $(dirname $0);pwd ))

if [ $CLUSTER = cl0 ]; then
PORT=5433
else
PORT=5434
fi

MASTER_BASEDIR=$1
RECOVERY_HOST=$2
RECOVERY_BASEDIR=$3

psql -h localhost -p $PORT -U postgres -c 'select pg_switch_xlog()' postgres

rsync -av $MASTER_BASEDIR/archive_log/ $RECOVERY_BASEDIR/archive_lo

それぞれのファイルを$PGDATAの中に配置。

pgpool.confは次のように設定。

recovery_1st_stage_command = 'recovery_1st_stage.sh'
recovery_2nd_stage_command = 'recovery_2nd_stage.sh'

これで同じようにpcp_recovery_nodeを動かせばいい。いろいろと雑だが一応動く。

Apr 14, 2009

HaskellでTokyo Cabinet

by TANIGUCHI Takaki — last modified Apr 14, 2009 12:10 AM
Filed Under:

HaskellでTokyo Cabinetを使おうとした。

Tokyo CabinetのHaskell bindingはあった。だけど、DebianのTokyo Cabinetが古いのでコンパイルができない(最新は1.4.x・Debianは1.2.x)。これをなんとかしないと先に進まない。先が長いな。

paco

by TANIGUCHI Takaki — last modified Apr 14, 2009 12:10 AM
Filed Under:

Paco is a source code package organizer for Unix/Linux systems, originally written to aid package management when installing an LFS system.

メモ。stowよりいい。stowはsymlinkを使っていたがpacoはファイルを全部記憶してくれる。

pgpoolAdminをインストール

by TANIGUCHI Takaki — last modified Apr 14, 2009 12:10 AM
Filed Under:

pgpoolを使うのに便利なのかねと思って入れてみた。

まあ、単なるWeb UI提供だけだったので、びっくりする機能はなかった。結局recoveryの部分は自分でやるのかーという話。

それはそうとして、起動がwebからだとwww-dataで起動されるのでいろいろファイルの権限が問題に。/var/run/postgresqlが当然書き込めない。

setfacl -m u:www-data:rwx /var/run/postgresql

とやってACLで問題を解消しておいた。

pgpool-IIをテスト

by TANIGUCHI Takaki — last modified Apr 14, 2009 12:11 AM
Filed Under:

pgpool-IIでレプリケーション+オンラインリカバリーのテストをしてみた。

いまいちドキュメントがわかりにくい。書いてあることは書いてあるんだけど、なんとなくわかりにくい。

recoveryの方法はrsyncでやった。PITRはそれ自体がどうなのかよくわかってないのでパス。

構成として1台のPCにpgpoolとPostgresのクラスターを2つ用意した。

環境はpgpool-II 2.2 / PosrgreSQL 8.3

レプリケーションまでの手順

debianのpgpool-IIのバージョンが古いので自分でコンパイルしてインストールした。
# pg_createcluster 8.3 cl0
# pg_createcluster 8.e cl1
とやってクラスターを二つ作る。

/usr/local/etc/pgpool.confを設定。長いので関係あるとこだけ抜粋。pidの場所とかは自分でどうぞ。

replication_mode = true
replication_stop_on_mismatch = true
次がリカバリーに関係する部分

recovery_user = 'postgres'
recovery_password = ''
recovery_1st_stage_command = 'pgpool_recovery'
recovery_2nd_stage_command = 'pgpool_recovery'
バックエンドのクラスターの定義
replication_timeout = 5000
backend_hostname0 = 'localhost'
backend_port0 = 5433
backend_weight0 = 1
backend_data_directory0 = '/var/lib/postgresql/8.3/cl0'
backend_hostname1 = 'localhost'
backend_port1 = 5434
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/8.3/cl1'
pcp.confの設定は省力。
/etc/postgres/8.3/cl[01]/pg_hba.conf は
host    all         all         127.0.0.1/32          trust
とりあえずこうしておく。ここまでやってreplicationがはいるようになった。

次はオンラインリカバリー

pgpool-IIのソースのpgpool-II-2.2/sql/pgpool-recoveryに移動する。
Cの拡張をいれる必要があるので、ここでmake; make installを実行。このあと各クラスターを再起動。
psql -U postgres -p 15432 -f pgpool-recovery.sql template1
を実行。/var/lib/postgresql/8.3/pgpool_recoveryを作成。
#! /bin/sh

if [ $# -ne 3 ]
then
    echo "pgpool_recovery datadir remote_host remote_datadir"
    exit 1
fi

datadir=$1
DEST=$2
DESTDIR=$3

rsync -v -aurz --delete $datadir/global/                $DESTDIR/global/ &
rsync -v -aurz --delete $datadir/base/          $DESTDIR/base/ &
rsync -v -aurz --delete $datadir/pg_multixact/  $DESTDIR/pg_multixact/ &
rsync -v -aurz --delete $datadir/pg_subtrans/   $DESTDIR/pg_subtrans/ &
rsync -v -aurz --delete $datadir/pg_clog/               $DESTDIR/pg_clog/ &
rsync -v -aurz --delete $datadir/pg_xlog/               $DESTDIR/pg_xlog/ &
rsync -v -aurz --delete $datadir/pg_twophase/   $DESTDIR/pg_twophase/ &
wait
/var/lib/postgresql/8.3/pgpool_remote_start
#! /bin/bash
if [ $# -ne 2 ]
then
    echo "pgpool_remote_start remote_host remote_datadir"
    exit 1
fi
DEST=$1
DESTDIR=$2

pg_ctlcluster 8.3 $(basename $DESTDIR) start
このふたつのファイルは /var/lib/postgresql/8.3/cl[01]のそれぞれにコピーしておく。

想定手順

実際の運用はこんな手順かな。cl0を止めた、あるいは勝手に止まった想定。
# pg_ctlcluster 8.3 cl0 stop
# /usr/local/bin/pcp_detach_node 30 localhost 9898 postgres postgres 0
# /usr/local/bin/pcp_recovery_node 30 localhost 9898 postgres postgres 0
てな具合です。

NVIDIAのドライバーをアップグレード

by TANIGUCHI Takaki — last modified Apr 14, 2009 12:13 AM
Filed Under:

いろいろ苦労する。

びっくりしたのがnvidia-kernel-sourceのモジュールを入れようとしたらGeForce 5200はサポート外だったこと。legacyのほうのモジュールを入れろと。legacyは2.6.29でコンパイルできない。なのでいまだに2.6.26。えー。

Apr 08, 2009

今年もJVNの証明書をインストールしたよ

by TANIGUCHI Takaki — last modified Apr 08, 2009 09:49 PM
Filed Under:

もはや何がなんだか。

去年は間違った操作で削除しても困らなかった。今年も今日ログインして終わる気がする。

Apr 07, 2009

sourceforge.jpでDarcsを使う

by TANIGUCHI Takaki — last modified Apr 07, 2009 12:26 AM

sourfceforge.jpでDarcsのリポジトリの運用を試みた。

  • shellサーバーにはdarcsは入っている。(1.0.9)
  • しかし、webサーバーにはdarcsは入ってないのでdarcswebをインストールするのにちょっと工夫が必要
  • それより問題なのがhttpでリポジトリを公開できない。_darcsというファイル名が問題のようだ。_はダメなの?
  • という話のチケットを送ったら即座に対応してくれたので問題ない。

AsteriskNOW-1.5.0

by TANIGUCHI Takaki — last modified Apr 07, 2009 12:26 AM
Filed Under:

CentOS 5ベースになったAsteriskのディストリビューション。

CentOSと同様にインストールができる。Webで管理画面が立ち上がるのまで確認。管理ツールがFreePBXに変更されたということで、使い方ってどうなんだ?

Apr 05, 2009

JavaScriptにはブロックスコープがない

by TANIGUCHI Takaki — last modified Apr 05, 2009 12:42 AM
Filed Under:

そうですかそうですか。

本格的にAjaxの関係でJavaScriptを最近よく書くようになった。ごりごり書いていると変数の参照に関してトリッキーな、というか手抜きというか、やばい臭いがプンプンするコードが書けてしまうなあということに気付く。今までJavaScriptは入門書もロクに読まずに書いていたのでわかっていなかったが、それは単純な話だった。

JavaScriptにはブロックスコープがない。

おそろしい話だ。

Apr 04, 2009

metacity + firefox3 がひどい件(まだ続き)

by TANIGUCHI Takaki — last modified Apr 04, 2009 01:19 PM
Filed Under:

相変わらず駄目だね。2.24.0-2でも。

fireforx-remoteで呼ぶと今のworkspaceにウィンドウが飛んでくる件。

バグレポートは上がっていたはずなんだけど。うーん、なんで放置されているんだろう。

しゃーないのでUbuntuからパッチを持ってきて自分でbuildしたら直った。そのまま持ってくるにはHardyとsidでパッケージ名が変更されているので無理でした。どのパッチが正解なのかまだわからないけど。


tcpdumpが動かん

by TANIGUCHI Takaki — last modified Apr 04, 2009 01:20 PM
Filed Under:

tcpdumpが動かん。wiresharkも動かん。

パケットキャプチャしようとしたらtcpdumpもなにもかもが動かない。

# tcpdump 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:22:26.123874 7d:c0:00:00:00:00 (oui Unknown) > yy:zz:00:xx:xx:xx
(oui Unknown) Null Information, send seq 0, rcv seq 0, Flags [Command],
length 4294967282
01:22:26.123874 01:80:c2:00:00:00 (oui Unknown) Unknown SSAP 0x92 >
00:00:00:00:00:00 (oui Ethernet) STP Supervisory, Receiver Ready, rcv
seq 69, Flags [Final], length 4294967282
tcpdump: pcap_loop: corrupted frame on kernel ring mac offset 94 + caplen 168 > frame len 160
2 packets captured
3 packets received by filter
0 packets dropped by kernel
#
libpcap(Bug#517098)が原因らしい。linux-image-2.6.26-1-amd64だと駄目だとさ。686-bigmemでやったら動いた。む。

Haskell SKK ServerがEmacsで動かない

by TANIGUCHI Takaki — last modified Apr 04, 2009 01:21 PM
Filed Under:

自作のHaskell SKK ServerがEmacsで動かない。

uim-skkだと動いたのだが、Emacs-SKKだと駄目。変換されずにそのまま固まる。なんだろう…。他のskkservの挙動を見ても変なことしてないのになあと。パケットキャプチャをしてみたら…あれ?Emacs-SKKがLFを最後に送ってない。どーなってんだろう。これが原因か?

IO.getLineを使うと改行されるまで待つのがまずいらしい。IO.getCharで一文字ずつ読んでスペースが来たら一区切りで返すという処理を書いたら、Emacsでも動くようになった。dbskkd-cdbの附属の文書にはLFで終わるって書いてあったけど…。SKK serverの正しいプロトコルって何だろう…。

Apr 02, 2009

Haskell SKK Server

by TANIGUCHI Takaki — last modified Apr 02, 2009 12:13 AM
Filed Under:

Haskellでなんか実用的なものを作るぞ。

Haskellで実用的なものをつくりたい、ということでSKKサーバを作ってみた。プロトコルは簡単なのでちょこちょこっと応答部分を作って辞書はSKK-JISYO.LをHashTableで格納して。50行ぐらいで書けた。大体動くようになったので入れ替えてテストしてみるか。

ただ、起動するたびにHashTableを再生成では大変なのでそこはなんかDBを使うようにしなればならない。それは別のお話。

ISS観測

by TANIGUCHI Takaki — last modified Apr 02, 2009 12:20 AM
Filed Under:

ISS(国際宇宙ステーション)が名古屋から見えるとのことで待っていた。

この前つけた太陽電池パネルのおかげで金星よりも明るくなったISS。JAXAのサイトを参考にすると4/1の19:25頃に見えるということで待っていた。さてさて、どっちかなーと思って空を見回してみたら間違いなくあれだね、異様に明るい高速で移動する輝点が。ああ、これは間違いない。この明るさと移動の早さはおかしな感覚。あれが数百kmもの上を飛んでいるとは思えない。

しばらく見ていたら沈む前に見えなくなった。地球の陰に入ったということかな?4/3にも見えるということなので楽しみにしていよう。

takaki's twitter
以外に元気に週末を迎えたな Mar 12, 2010 10:04 PM
焼酎風味の水に500円も取ろうとはどういう店だ。 Mar 09, 2010 10:53 PM
ジョブカードなる糞エクセル方眼紙を埋め中。心が折れそうだ。 Mar 08, 2010 10:16 PM
Excel方眼紙がOOoで崩れるわけだが。 Mar 04, 2010 10:49 PM
嫌味言ってりゃ世の中良くなるわけでもなし Mar 04, 2010 10:06 PM
Affiliate