ピックはどこだ。
- Deus in machina
- High risk, no return
- 愚か者は人の話を聞かない
2003-11-19 [長年日記]
_ [univ]増産
どうして帰る帰るといって帰れないのかなぁと思っていたのだが、 研究室にいればいるほど仕事が増えていくことに気がついた。
そしていろいろやってる間に趣味でやりたかったこととか思い出して、 やってると、相乗効果でどんどん泥沼に。
警戒しやう。
_ [linux]リポジトリ全壊
今日の夕方くらいに PIV プログラム用に設定した subversion で構築されたリポジトリが全壊していることが発覚した。 いちおうフルバックアップをとっていたのだが、 元に戻してもアクセスできない。
そこで本格的にバックアップとその他の設定をみなおすことにした。
まず複数ユーザで使うために
# /usr/sbin/vigr
して
svnuser:x:1111:user1,user2,user3
svnadmin でリポジトリを作ったユーザに使用ユーザを追加する。
そして、
# cp /usr/bin/svnserve /usr/bin/svnserve-umask
とかしたうえで、/usr/bin/svnserve を
#!/bin/sh umask 002 /usr/bin/svnserve-umask $*
みたいな感じにして書き込み時に umask 002 とかしてやる。
ここまでで複数人でリポジトリにアクセスと変更ができるようになった。
で、次はバックアップだが、hot-backup.py.in が tools/backup/ 以下に あってフルバックアップがとれるはずなのだが、これが
Beginning hot backup of '#repo_dir#'.
Traceback (innermost last):
File "/tmp/subversion/tools/backup/hot-backup.py.in", line 93, in ?
infile, outfile, errfile = os.popen3(svnlook + " youngest " + repo_dir)
AttributeError: popen3
とか言われてうまく動いてくれない。 どうやら #repo_dir#/hooks/ 以下に置いて使うように設計されているようだ。 こちらとしては単発でバックアップを取りたいので、 とりあえず差分バックアップを取る方向で
# /usr/bin/svnadmin dump #repo_dir# > /var/backup/dumpfile.dump
とかしてリポジトリのリビジョンを力の限り差分としてとってやる。 なんだか不自然かつ無意味、応用性なしだがとりあえずよしとする。 差分バックアップの利点は db をバックアップしないので db を更新して動かなくなった場合でも復元が可能だとか どこかに書いてあった気がするし。 ちなみに
#/usr/bin/svnadmin load #repo_dir# < /var/backup/dumpfile.dump
とすることで書き出したリポジトリの内容を復旧することができる。 もうちょい容量が増えたり問題が出るまでこのままで。
これで少しは安心して subversion が使えるようになった。
_ [linux]post-commit
いろいろ設定したので、次はコミットがあったら mail とか来るように したくなった。
これも tools/hook-scripts に commit-email.pl.in というスクリプトが ついているのだが、sendmail の設定をしないといけないっぽいし、 qmail で代用するためには頭を使わないといけないようなので、パス。
で、#repo_dir#/hooks/ 以下に post-commit という名前のスクリプトを 作って、 subversion不徹底入門 を参考に ruby のスクリプトを不本意ながら使うことにした。 中身は
#!/usr/bin/ruby
REPOS=ARGV[0]
REV=ARGV[1].to_i
fromaddr='svn@example.com'
toaddr='svn-committers@example.com'
svnauthor=%x{svnlook author #{REPOS} rev #{REV}}.chomp!
svndate=%x{svnlook date #{REPOS} rev #{REV}}.chomp!
svnchanged=%x{svnlook changed #{REPOS} rev #{REV}}.chomp!
svnlog=%x{svnlook log #{REPOS} rev #{REV}}.chomp!
svndiff=%x{svnlook diff #{REPOS} rev #{REV}}.chomp!
#commit-email.pl "$REPOS" "$REV" toaddr
require 'net/smtp'
Net::SMTP.start( 'localhost', 25 ) {|smtp|
smtp.send_mail <<EndOfMail, fromaddr, toaddr
From: #{fromaddr}
To: Subversion committers:;
Subject: FSIJ Subversion commit #{REPOS} #{REV}
Subversion committed to #{REPOS} #{REV}
#{svnauthor}
#{svndate}
changed:
#{svnchanged}
log:
#{svnlog}
#{svndiff}
EndOfMail
}
open("/svn/log/#{REV}", "w") do |fp|
fp.puts svnauthor
fp.puts svndate
fp.puts svnchanged
fp.puts svnlog
end
なのだが、
svnauthor=%x{svnlook author #{REPOS} rev #{REV}}.chomp!
svndate=%x{svnlook date #{REPOS} rev #{REV}}.chomp!
svnchanged=%x{svnlook changed #{REPOS} rev #{REV}}.chomp!
svnlog=%x{svnlook log #{REPOS} rev #{REV}}.chomp!
svndiff=%x{svnlook diff #{REPOS} rev #{REV}}.chomp!
の部分だけは修正してある。 元々は author とか date とかが後に書いてあったのだが、 仕様の変更のためか、0.32.1 ではこれを先に書くように変わっている。
そして実際にコミットして mail を受け取ってみたのだが、 windows で使うことが前提だったためコミット時のコメントの日本語部分が化ける。
どうやら sjis をそのまま吐いているようなのだが、
# echo -e 'hogehoge'
とかしてやってもうまく見えない。
しばらくがんばってみたがどうにもうまくいかないのであきらめた。 subversion ってマルチバイトの取り扱いとか多言語化とかどうなってるんだろう…。
body | book | boot | bsd | cml | darts | debian | diary | food | game | hns | home | hpcmips | js | life | linux | mac | maid | mds | misc | music | mutt | netbsd | palm | pda | perl | piv | program | qmail | room | satori | stationery | tdiary | tv | univ | unix | vi | vim | willcom | win | windows | work
最近のつっこみ :
- YAA (04-23)
- gerywerry (04-17)
- うみそだち (04-04)
- поиск удаленной работы предложение удаленной работы биржа удаленная работа для дизайнеров программистов менеджеров оптимизаторов рекламщиков сео-специалистов копирайтеров (03-18)
- продвижение сайтов реклама в Москве реклама сайтов (03-15)
アンテナ情報の取得は antenna.lirs または Pick Antenna(アンテナ)から、お願いします。
written by 無月 霞


