RSS

日々のメモ書き

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 = 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
てな具合です。

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というファイル名が問題のようだ。_はダメなの?
  • という話のチケットを送ったら即座に対応してくれたので問題ない。

< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 >