Pushmi つかってます & 技術者募集中 at 福岡 3

Posted by Gosuke Miyashita Thu, 02 Aug 2007 16:52:00 GMT

弊社 は東京と福岡にオフィスがあり、それぞれの拠点に Subversion + Trac 環境を構築し、OpenVPN により VPN 接続してお互いの開発状況を公開しています。サービス絡みの開発は基本的に、東京は東京、福岡は福岡で完結しているので、この方式で問題はないのですが、サーバ管理関連のスクリプトなんかは、東京と福岡で共通するものが多いため、別々の SVN リポジトリで管理されてると不便なんですよね。かといって、どちらかの拠点だけしかリポジトリがないと、VPN の障害発生時に、リポジトリのない拠点からはまったくアクセスができない、という困ったことになってしまいます。

そこで、SVN リポジトリレプリケーションツール Pushmi を導入してみました。詳細は YAPC::Asia での 作者 Cl Kao によるスピーチ動画 を見て頂くとして、ここでは行った設定についてメモを残しておきます。ほとんど perldoc Pushmi の内容と同じですが。

まず当然 Pushmi のインストールが必要です。これの手順は省略。また、より良いアトミックロック実現のために memcached を利用している、ということなのでインストールしておきます。これも手順は省略。

memcached を起動します。

$ sudo /usr/bin/memcached -p 8123 -dP /var/run/memcached.pid -u nobody

/etc/pushmi.conf を設定します。弊社の環境では memcached のポートのみ指定してます。

authproxy_port: 8123

ミラーリポジトリを作成します。

$ pushmi mirror /var/db/my-local-mirror http://master.repository/svn
Mirror initialized.

ミラーリポジトリとマスターリポジトリを同期します。

$ pushmi sync /var/db/my-local-mirror
Retrieving log information from 1 to 62

ミラーリポジトリは、svnadmin create で作成するのと同様なディレクトリ、ファイル構造になってますが、Pushmi 用の pre-commit スクリプトと post-commit スクリプトが置かれている、というところが異なります。

pre-commit では以下の様なコマンドが実行され、ミラーリポジトリにコミットされた内容を、マスターリポジトリにコミットしに行きます。

/usr/bin/pushmi runhook $1 --txnname $2

post-commit では以下の様なコマンドが実行され、ミラーとマスターの整合性を確認しています。

/usr/bin/pushmi verify $1 --revision $2

Apache + WebDAV で SVN リポジトリにアクセスするために、以下の様な設定を Apache で行います。

<Location /svn/server>
  PerlSetVar SVNPath /var/db/my-local-mirror
  PerlSetVar Pushmi /usr/bin/pushmi
  PerlSetVar PushmiConfig /etc/pushmi.conf
  <LimitExcept GET PROPFIND OPTIONS REPORT>
    AuthName "mirrored private area" 
    AuthType Basic
    Require valid-user
    AuthLDAPURL ldap://localhost:389/ou=people,o=paperboy?uid?sub?(objectclass=*)
    PerlAuthenHandler Pushmi::Apache::AuthCommit
  </LimitExcept>
</Location>

設定見て分かると思いますが、mod_perl を利用していて、Apche2 + mod_perl の環境が必要です。Apache は 2.0 系でも 2.2 系でも大丈夫なようです。弊社では 2.0 系を利用しています。

特にポイントとなるのは、

PerlAuthenHandler Pushmi::Apache::AuthCommit

の部分で、認証で渡されたユーザ名、パスワードをこのモジュールで memcached にキャッシュしておき、マスタリポジトリへのコミット時の認証に利用します。Apache 2.2 系の場合には、以下の様に設定します。

AuthBasicProvider Pushmi::Apache::RelayProvider

この状態では、ミラーへのコミットは即マスターに反映されますが、マスターへのコミットはミラーに反映されませんので、以下の様な cron 設定を行い、5分おきにマスターとミラーを同期するようにします。

*/5 * * * * /usr/bin/pushmi sync --nowait /var/db/my-local-mirror

今のところこれで問題なく動いています。

話変わりまして、弊社福岡支社では、プログラマサーバエンジニア を募集しています。Pushmi を実戦で使ってみたい!という方はぜひ。メガネ女子プログラマもいますよ。(東京本社にもいます。人妻ですが。)

Comments

Leave a response

  1. Avatar
    rono about 19 hours later:

    技術力無い上にアフォな僕ですが、短期でいいのでアルバイトで雇って欲しいのですが。 あ、てもドクターペッパーは大好きです。 あと、メガネ女子も大好きです。

  2. Avatar
    rono about 19 hours later:

    すいません、Submit押しても何もおこらなかったので、なんかしてたらspamみたくなってしまいました。ごめんなさい。

  3. Avatar
    mizzy about 24 hours later:

    重複分は削除しておきました。気になさらないでくださいね。わかりにくいこのブログシステムが悪いんです。

    雇ってほしいとのことですが、具体的にお話伺ってみたいので、後ほどメールお送りしますね。よろしくお願いします。

Comments