這個方案只差一個 https 就可以變成我心中最麻煩的 svn 方式了。
不過麻煩的還不在這裡,最麻煩的地方,在這台機器架在 FC5 上面。
(O.S 如果是 FC 晚近的版本,至少軟體差異不會那麼大咩~)
在 auth mysql 裡面的 param 改了好幾次的樣子,每個版本都不大一樣,使用前後﹑更新的時候都要特別小心。
步驟:
1. a2enmode 把 auth_mysql ﹑ subversion 都 enable 起來。
2. mysql 跑起來。 # default db 我設到 http_auth
3. 加入 mysql auth table # 我把 UserTable 跟 GroupTable 都設在一起
drop database http_auth;
CREATE DATABASE http_auth;
USE http_auth;
CREATE TABLE `clients` (
`username` varchar(25) NOT NULL default '',
`passwd` varchar(25) NOT NULL default '',
`groups` varchar(25) NOT NULL default '',
PRIMARY KEY (`username`),
KEY `groups` (`groups`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
use http_auth;
INSERT INTO `clients` VALUES ('anton', encrypt('1234'), 'admin');
3. /etc/init.d/mysql start # 啟動 MySQL
4. vi /etc/httpd/conf.d/subversion.conf 加入:
<Location /svn>
DAV svn
SVNParentPath /home/svn
SVNListParentPath on
AuthzSVNAccessFile /home/svn/svn.authz
AuthName "SVN Repository"
AuthType Basic
AuthMySQLEnable On
AuthMySQLHost "localhost"
AuthMySQLPort 3306
AuthMySQLUser "id"
AuthMySQLPassword "password"
AuthMySQLDB "http_auth"
AuthMySQLUserTable "clients"
AuthMySQLGroupTable "clients"
AuthMySQLNameField "username"
AuthMySQLPasswordField "passwd"
AuthMySQLPwEncryption crypt
AuthMySQLAuthoritative On
require valid-user
</Location>
5. /etc/init.d/httpd restart # apache 再啟動
6. 寫個 chpasswd 的 php script。
這樣 svn 就可以順利使用 http 連線了。 (而且改密碼就直接在 mysql 裡面改了)
* 對了,要小心 mysql encrypt function 是 "encrypt" 不是 "crypt" 喔。
--
附上我的 Ubuntu 8.10/apache2.2.8-1ubuntu0 的 config:
# 這個版本的 mysql auth 是寫在 auth_mysql.conf 裡面,用 Auth_MySQL_info hostname mysql_id mysql_pass 來連的。
# 感覺比較簡潔有力。
# 至於 AuthUserFile 為什麼兩邊設不一樣... 這是我實際運作後的結果,還不知道為什麼上面不能設到 null 去。
<Location /svn>
DAV svn
SVNParentPath /home/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"
AuthBasicAuthoritative Off
AuthMySQL_DB "http_auth"
AuthMySQL_Password_Table "clients"
AuthMySQL_Group_Table "clients"
#setting authfile to /dev/null stop apache error log
AuthUserFile /dev/null
AuthzSVNAccessFile /home/svn/svn.authz
Require valid-user
</Location>
--
參考網頁:
*
mod_auth_mysql*
http 認證使用 mysql