ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示
ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示

2007年8月17日金曜日

Subversionでコミット完了後に自動で処理を行う (post-commit) b

人に教えようとしたら自分がはまったのでメモ

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月15日水曜日

FreeBSDでSubversionのインストール b

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回実行されるんだけど... b

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 b

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をマウント b

メモメモ,

FreeBSD6.2

# mount_smbfs -E euc-jp:cp932 -I samba.mydomain.com //userid@samba/hoge /hoge

てな具合に.

-Eオプションは,
-E ローカルの文字コード:サーバの文字コード
今回敵はWindowsなのでcp932を指定

マウントしたら日本語が化けた.
$LANGja_JP.eucJPをセットすることをお忘れなく