花了一天終于搞定了: 1 SVN和apache的安裝: 安裝的事情,網(wǎng)上有很多,由于用的是fedora直接yum下來(lái)了,注意apache在yum中名為httpd,為了使apache能夠配合SVN的訪問(wèn)控制必須安裝mod_authz_svn.so庫(kù),在yum中搜索svn,apache便可看見(jiàn)軟件包.最后應(yīng)當(dāng)確定在/usr/lib/httpd/modules下有一下四個(gè)文件:mod_dav.so,mod_dav_fs.so,mod_dav_svn.so,mod_authz_svn.so后兩個(gè)文件可在% SVN_HOME%/bin中找到(我安裝后moudules目錄下就存在了所以沒(méi)有用bin目錄下的文件. SVN安裝完后:用svnserve -d啟動(dòng)后臺(tái)服務(wù),并用netstat -ntlp 查看有沒(méi)有程序3690端口綁定來(lái)查看svnserve服務(wù)是否啟動(dòng),關(guān)閉服務(wù)用killall svnserve命令 httpd服務(wù)啟動(dòng)后可由瀏覽器直接訪問(wèn)服務(wù)器IP 2 Linux SVN管理賬戶的建立 新增加用來(lái)管理SVN賬戶的linux賬戶我新建的賬戶名為SVNAD,相對(duì)應(yīng)的組也是SVNAD,將apache賬戶添加入SVN組,確保apache對(duì)/home/SVNAD組有目錄下所有文件有所有權(quán)限.否則往后在使用web方式訪問(wèn)SVN時(shí)可能會(huì)有錯(cuò)誤,比如所在瀏覽器中顯示Could not open the requested SVN filesystem,然后在/etc/http/logs/error_log中有關(guān)于access deny的錯(cuò)誤.error_log是記錄apache錯(cuò)誤的地方,有錯(cuò)誤應(yīng)當(dāng)上這里看看,然后到網(wǎng)上搜索相關(guān)錯(cuò)誤. 3 建立SVN根目錄與相關(guān)repository(就是工程目錄) 在/home/SVNAD下建立SVN根目錄mkdir SVNRoot(當(dāng)然名字可自定),進(jìn)入SVNRoot,建立工程目錄,我先建立一個(gè)C,進(jìn)入C,執(zhí)行命令svnadmin create /home/SVNAD/C (也有文章說(shuō)用 svnadmin create --fs-type fsfs /home/svnroot/repository/test來(lái)建立,我都試過(guò),暫時(shí)沒(méi)發(fā)現(xiàn)區(qū)別)建立reposityory,建完之后C目錄下應(yīng)有一下內(nèi)容: conf dav db format hooks locks README.txt 可在conf中配置用戶權(quán)限以及用戶,用戶權(quán)限與下面要講到的多庫(kù)權(quán)限設(shè)置基本相同,用戶則是由username = password組成,都為明文未加密,由于我們使用apache來(lái)控制訪問(wèn)權(quán)限,在此不多將. 另外到了這一步后可用svnserve -d -r /home/svnroot/repository/test1 --listen-host 192.168.1.18之類(lèi)的命令來(lái)啟動(dòng)svn服務(wù),并通過(guò)svn://192.168.1.18來(lái)訪問(wèn)svn服務(wù)器,如果不想使用apache的話,到這一步就可以結(jié)束了. 4 apache與svn綁定 確定/etc/httpd/conf.d/下有subversion.conf文件,沒(méi)有的話要確定/etc/httpd/conf/httpd.conf中有下面四行,且沒(méi)有被#注釋掉: LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 接著在httpd.conf或subversion.conf中加入一下配置信息(注意去掉不必要可空格,確實(shí)需要空格的地方需要用""號(hào)包括): DAV "svn" # SVNPath "/home/SVNAD/SVNRoot/" SVNParentPath "/home/SVNAD/SVNRoot/" AuthType Basic AuthName "Subversion On AD" AuthUserFile "/home/SVNAD/SVNRoot/passwd" Require valid-user AuthzSVNAccessFile "/home/SVNAD/SVNRoot/authz" Satisfy Any 配置的意義如下: DAV "svn" # 聲明svn SVNPath "/home/SVNAD/SVNRoot" # "E:\svn"是服務(wù)器上svn的repository的目錄。 SVNParentPath "/home/SVNAD/SVNRoot" ` # 對(duì)于一個(gè)目錄下存在多個(gè)工程的情況,可以聲明這個(gè)變量。 # 在apache中配置svn有兩種,可以混合使用,一種是apache自身的認(rèn)證機(jī)制, # 對(duì)進(jìn)入/repos目錄的用戶進(jìn)行統(tǒng)一認(rèn)證, # 一種是應(yīng)用svn的認(rèn)證,可以深入到目錄級(jí)別進(jìn)行權(quán)限控制, # 和svn獨(dú)立啟動(dòng)時(shí)設(shè)置權(quán)限一樣。 ### apache auth begin AuthType Basic AuthName "Subversion" # 認(rèn)證的名字 AuthUserFile "/home/SVNAD/SVNRoot/passwd" # "/home/SVNAD/SVNRoot/passwd" 里面存放的是使用htpasswd -m # "/home/SVNAD/SVNRoot/passwd" user # 生成的用戶名與密碼的加密文件。注意,此處的路徑不能有空格。 Require valid-user # 聲明,必須是有效的用戶才可以訪問(wèn) ### apache auth end ### svn auth begin AuthzSVNAccessFile "/home/SVNAD/SVNRoot/conf/authz" # "/home/SVNAD/SVNRoot/conf/authz"文件是根據(jù)%respository% # /conf/authz的規(guī)則編寫(xiě),其實(shí)就 # 是svn對(duì)用戶權(quán)限讀取的文件格式,mod_authz_svn.so要求的格式。 #SVNIndexXSLT "d:\svnindex.xsl" # d:\svnindex.xsl是用戶可以自定義的顯示模版,設(shè)計(jì)好模板,html上的顯 # 會(huì)更漂亮。 # authentication if necessary. Satisfy Any # 字面翻譯是:都要滿足,是聲明用戶要滿足條件 Require valid-user # 聲明,必須是有效的用戶才可以訪問(wèn) ### svn auth end 5 用戶與權(quán)限 SVN用戶用apache用戶來(lái)代替: htpasswd /home/SVNAD/SVNRoot/passwd -cm username來(lái)建立用戶文件,c代表創(chuàng)建文件,m代表md5加密存儲(chǔ). 以后可用htpasswd /home/SVNAD/SVNRoot/passwd -m username來(lái)添加用戶 用htpasswd /home/SVNAD/SVNRoot/passwd -D username來(lái)刪除用戶 權(quán)限管理 在/home/SVNAD/SVNRoot下建立authz內(nèi)容如下: ### This file is an example authorization file for svnserve. ### Its format is identical to that of mod_authz_svn authorization ### files. ### As shown below each section defines authorizations for the path and ### (optional) repository specified by the section name. ### The authorizations follow. An authorization line can refer to a ### single user, to a group of users defined in a special [groups] ### section, or to anyone using the '*' wildcard. Each definition can ### grant read ('r') access, read-write ('rw') access, or no access ### (''). [groups] # harry_and_sally = harry,sally admin = AD HoAdmin = admin2 reader = test [/] @reader = r [C:/] @admin = rw [Holiday:/] @HoAdmin = rw #[/C] #@admin = rw #@reader = r [/COPYFILE] @reader = # [/foo/bar] # harry = rw # * = # [repository:/baz/fuz] # @harry_and_sally = rw # * = r 這里我們假設(shè)有兩個(gè)工程repository分別是C和Holiday在/home/AD/SVNRoot(SVN根目錄)下,有三個(gè)賬號(hào)test,admin2,AD分屬三個(gè)組reader,admin,admin,reader除C工程下的COPTFILE文件外擁有所有讀權(quán)限,而admin2組則只對(duì)Holiday工程有讀寫(xiě)權(quán)限,而admin則對(duì)只C工程有讀寫(xiě)權(quán)限. 至此所有配置文件我們可以用之類(lèi)的http來(lái)訪問(wèn)SVN或驗(yàn)證權(quán)限. 在rapidsvn之類(lèi)的SVN GUI客戶端也可直接將上述url填入即刻,考慮到web訪問(wèn),可能還需要設(shè)置防火墻,這里不多講.由于使用了apache內(nèi)嵌svn,因此平時(shí)也不用啟動(dòng)svn服務(wù)只需啟動(dòng)httpd服務(wù)就可以了. |