日々のメモ書き
Debian Developerが綴るメモ
hskkservでTokyo Cabinetを使う
辞書にTokyo Cabinetを使う。
やっつけ実装がplain辞書を毎度毎度HashTableにするすごい処理だった。ま、これは駄目なのはわかっていた。tokyocabinet-haskellを導入したのでplain辞書をTokyo CabinetのHash DBに変換するツールをまず書く。そのあとhskkserv本体でTokyo Cabinetを使うように変更。インターフェイスは似ているので辞書を引く部分を若干変更して終了。
tokyocabinet-haskellのdeb化
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ももうすぐ通過するだろうからそのときまでに今のやっつけからまともなパッケージに改善しておこう。
NVIDIAのドライバーをアップグレード
いろいろ苦労する。
びっくりしたのがnvidia-kernel-sourceのモジュールを入れようとしたらGeForce 5200はサポート外だったこと。legacyのほうのモジュールを入れろと。legacyは2.6.29でコンパイルできない。なのでいまだに2.6.26。えー。
pgpool-IIをテスト
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 = 5000pcp.confの設定は省力。
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'
/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/var/lib/postgresql/8.3/pgpool_remote_start
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
#! /bin/bashこのふたつのファイルは /var/lib/postgresql/8.3/cl[01]のそれぞれにコピーしておく。
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
想定手順
実際の運用はこんな手順かな。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
今年もJVNの証明書をインストールしたよ
もはや何がなんだか。
去年は間違った操作で削除しても困らなかった。今年も今日ログインして終わる気がする。
pgpoolAdminをインストール
pgpoolを使うのに便利なのかねと思って入れてみた。
まあ、単なるWeb UI提供だけだったので、びっくりする機能はなかった。結局recoveryの部分は自分でやるのかーという話。
それはそうとして、起動がwebからだとwww-dataで起動されるのでいろいろファイルの権限が問題に。/var/run/postgresqlが当然書き込めない。
setfacl -m u:www-data:rwx /var/run/postgresql
とやってACLで問題を解消しておいた。
HaskellでTokyo Cabinet
HaskellでTokyo Cabinetを使おうとした。
Tokyo CabinetのHaskell bindingはあった。だけど、DebianのTokyo Cabinetが古いのでコンパイルができない(最新は1.4.x・Debianは1.2.x)。これをなんとかしないと先に進まない。先が長いな。
paco
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はファイルを全部記憶してくれる。AsteriskNOW-1.5.0
CentOS 5ベースになったAsteriskのディストリビューション。
CentOSと同様にインストールができる。Webで管理画面が立ち上がるのまで確認。管理ツールがFreePBXに変更されたということで、使い方ってどうなんだ?
sourceforge.jpでDarcsを使う
sourfceforge.jpでDarcsのリポジトリの運用を試みた。
- shellサーバーにはdarcsは入っている。(1.0.9)
- しかし、webサーバーにはdarcsは入ってないのでdarcswebをインストールするのにちょっと工夫が必要
- それより問題なのがhttpでリポジトリを公開できない。_darcsというファイル名が問題のようだ。_はダメなの?
- という話のチケットを送ったら即座に対応してくれたので問題ない。