人に教えようとしたら自分がはまったのでメモ
Subversion(cvsもそうだったが)では、処理の各所で自動で割り込み処理を行わせることができる。
各リポジトリの下にhooksというディレクトリがあり、その中に以下のスクリプトが置かれている。
post-commit
post-lock
post-revprop-change
post-unlock
pre-commit
pre-lock
pre-revprop-change
pre-unlock
これらはその名前のとおりの場所でフックを行い、中に書かれたスクリプトが実行される。
コミット直後ならばpost-commit内に処理したい内容を記述すればよい。
なおこれらのスクリプトは最初post-commit.tmplとかなっているので、post-commitのようにリネームする。
スクリプトなので実行権限(svnの)を与えることを忘れずに。
中に書くスクリプトの注意点
・これはsvnユーザで実行される
・コマンド実行するときは実行権限,書き込み権限などを考えること
・ついでにパスも注意(パス通ってなくエラーとか)
例:Webページなどの編集でコミット後に/var/www/htmlにアップロード
/usr/local/bin/svn update /var/www/html >> /tmp/hoge.log 2>&1
・svn update先には最初にcheckout忘れずに
・リポジトリに日本語名はいってると、svn updateでファイル名が変換できませんとエラーになったり
・一応ログにはかせよう
2007年8月17日金曜日
Subversionでコミット完了後に自動で処理を行う (post-commit)
2007年8月15日水曜日
FreeBSDでSubversionのインストール
make.confのオプションをしょっちゅう忘れるのでメモ.
WebDAV使うときのお話.
make.confに以下のオプションを追加
WITH_MOD_DAV_SVN=yes
WITH_APACHE2_APR=yes
WITHOUT_BDB=yes
そんでもってportsからインストール
# cd /usr/ports/devel/subversion/
# make && make install
インストール終わったらrc.confに以下を追加
svnserve_enable=yes
最後にsvn用ユーザとグループの作成.
uid, gidはてきとうにかぶらないやつを.
# pw groupadd -n svn -g 100
# pw useradd -n svn -u 100 -g svn -d /nonexistent -s /nonexistent
そして起動
# /usr/local/etc/rc.d/svnserv
リポジトリの作成
/svnというディレクトリに,hogeというリポジトリを作ってみる.
$ svnadmin create /svn/hoge
Apache2とdavで連携させるには,httpd.confに以下の感じで追加
<Location /svn>
Dav svn
SVNParentPath /svn/hoge
</location>
2007年6月22日金曜日
FreeBSDの起動時に/usr/local/etc/rc.d/以下が2回実行されるんだけど...
FreeBSDで/usr/local/etc/rc.d/以下にはportsなどから入れたツールの起動スクリプトが格納され,/etc/rc.confに条件で,OSの起動プロセスの最後で実行される.
ある日サーバのApache2.2の調子が悪くなったのでいろいろ調べたら,プロセスが2重に起動していた,
$ ps -aux grep httpdroot 749 0.0 0.4 143292 16468 ?? Ss 8:56PM 0:00.20 /usr/local/sbin/httpdroot 756 0.0 0.5 143292 18656 ?? Ss 8:56PM 0:00.17 /usr/local/sbin/httpdwww 836 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 837 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 838 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 839 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 840 0.0 0.4 144108 17952 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 841 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 842 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 843 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 844 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpdwww 845 0.0 0.5 144108 20140 ?? I 8:56PM 0:00.01 /usr/local/sbin/httpd
ログを見てみると,どうやらOSブート時に/usr/local/etc/rc.d/apache22 startが2回行われているっぽい.さて実際rc.dって誰が呼び出してるんだっけ?起動周りは全部/etc/rc から派生していろいろ実行される.それで/usr/local/etc/rc.d/以下のスクリプトは最終的に/etc/rc.d/localpkgというスクリプトが実行を行う.その中ではlocalとして指定されているディレクトリを取得するが,これはlocal_startup変数に格納されており,/usr/default/rc.conf内で,
local_startup="/usr/local/etc/rc.d /usr/X11R6/etc/rc.d" # startup script dirs.
と記述されている.要は,
/usr/local/etc/rc.d/usr/X11R6/etc/rc.d
の2つのディレクトりの中のスクリプトが実行されるわけだが,X11R6のほうをのぞいたら,/usr/localとまったく同じ構成になっていて,おかしいなと思ったら,/usr/X11R6が/usr/localのシンボリックリンクになっていた・・・・だから/usr/local/etc/rc.dも2倍~OSブート時の実行回数も2倍~
rubyのCGIで500 Internal Server Error
FreeBSDでのお話.
原因はrubyの実行パスが通ってなかった.
よくrubyのCGI(tDiaryとかHikiwikiとか)だと,パスとして
#!/usr/bin/env ruby
で通してある.
でFreeBSDだと実態は/usr/local/bin/rubyになるわけで,envから/usr/local/binのパスが取得できるから実行できるが・・・でもこれだと実行時の環境変数しだいで,動くか否かが変わるよね.
そんな現象に出くわしまして,ApacheをOS起動時のままCGI実行するとエラー.Apacheをユーザー側で再起動かけると,ちゃんとCGI実行できるということがあった.原因としては起動プロセス中に立ち上がったApacehは環境変数がからっぽ(?)らしくて,/usr/local/binのパスが通ってなかったから,env rubyって言われても実行できませんという話.
この辺の仕組みってあまり詳しくないから知らないけど,このやり方って微妙なんじゃないのかなぁと思ったり.結局
#!/usr/local/bin/ruby
と書けば動いた.
2007年6月10日日曜日
FreeBSDでSambaをマウント
メモメモ,
FreeBSD6.2
# mount_smbfs -E euc-jp:cp932 -I samba.mydomain.com //userid@samba/hoge /hoge
てな具合に.
-Eオプションは,
-E ローカルの文字コード:サーバの文字コード
今回敵はWindowsなのでcp932を指定
マウントしたら日本語が化けた.
$LANGにja_JP.eucJPをセットすることをお忘れなく
登録:
投稿 (Atom)