今天繼續與 svn 奮鬥.
由於架上 mod_dav_svn 後, repos 就不只自己的 svn 會存取, 所以要處理一下 repos 的檔案權限. 我的作法, 是先建立 svn 用戶與群組, 並且把 svn 用戶設為不可登入. 把 www 與我自己加入 svn 群組, SVN_ROOT 目錄裡的檔案目錄群組設為 svn, 並將檔案權限設為664, 目錄權限設為 775.
接下來要防止不當的 umask 重設 repos 的檔案. 首先先改 /usr/local/etc/rc.d/apache2.sh, 在執行其它程式前, 先設定 umask:
umask 002
接下來在 /etc/csh.cshrc 裡加上兩個 alias:
alias svn "umask 002; /usr/local/bin/svn" alias svnadmin "umask 002; /usr/local/bin/svnadmin"
大功告成.
下午都在把 apache1 換成 apache2, 花了不少時間, 其實最主要就是要裝上 svn 的網路伺服器, 這樣我可以從公司別台機器連回自己的 nb, 省去作成 tarball 再 co 過去的麻煩.
不過 apache2 裝起來, 再裝上 Subversion 遇到了一個問題:
/usr/libexec/ld-elf.so.1: /usr/local/lib/libaprutil-0.so.9: Undefined symbol "libiconv_open"
很明顯地, 與 Subversion 的中文紀錄送交訊息 是一樣的問題. 在 /usr/ports/www/apache2/Makefile 裡的 CONFIGURE_ARGS 裡再加上一行:
--with-iconv=${LOCALBASE}
然後重編 apache2 與 Subversion 就好了.
前幾天 Subversion 0.24.0 放出來, 結果我無法執行 export 命令. 在 irc 與 sussman 交談, 他完全沒有這種問題. 由於不太想把 repo 拿給別人測試, 所以就自己試著 debug. 學到了幾個指令, 趁著還記得時, 趕快寫下來, 以免下次還會用到.
1. gdb svn 2. break main 3. run export file://$SVN_ROOT/svn/trunk svn 4. break export.c:close_file 5. c 6. s 7. n 8. p *((struct file_baton*) file_baton) 9. p *((struct file_baton*) file_baton)->keywords_val
解說:
export file://$SVN_ROOT/svn/trunk svn為引數, 執行 svn.