1. 本文需要兩個文件,httpd和subversion。
•httpd是web服務器,用來通過web訪問subversion, 官方網站: http://httpd.apache.org/,
下載網頁:http://archive.apache.org/dist/httpd/,在這里可以下載到httpd-2.2.2.tar.gz。
•subversion就是本文的主角,官方網 站: http://subversion.tigris.org/,
subversion-1.4.3.tar.gz的 下載頁為:
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74
2. 新建一個用戶:svnroot
# useradd svnroot
最好不要讓root用戶參與到svn的權限管理和日常的運行和維護工作中來,但是下面的一些安裝和配置操作還是 需要root用戶來完成的,因為有些操作只有root才能做。
3. 編譯安裝httpd (root用戶操作):
//解壓apache安裝包
# tar xvzf httpd-2.2.2.tar.gz
//進入解壓后的目錄
# cd httpd-2.2.2
//配置apache安裝,前兩個參數是必須要加的,你還可以根據您的需要添加其他的 參數。
//后面的參數制定你要把apache安裝哪里
# ./configure --enable-dav --enable-so --prefix=/usr/local/apache/
# make
//安裝
# make install
# cd /usr/local/apache/bin
//啟動apache服務
# ./apachectl start
//打開瀏覽器http://localhost/如果有測試頁"It works!"出現則證明已經安裝成功。
4. 安裝Subversion
//解壓SubVersion安裝包 (root用戶進行下面的操作)
# tar xvzf Subversion-1.4.3.tar.gz
//進入解壓后的目錄
# cd Subversion-1.4.3
//配置subversion安裝
#./configure --with-apxs=/usr/local/apache/bin/apxs --prefix=/usr/local/subversion
--with-apr=/usr/local/apache --with-apr-util=/usr/local/apache --with-ssl --with-zlib
--enable-maintainer-mode
# make
//安裝
# make install
//創建庫文件所在的目錄 (svnroot用戶進行下面的操作)
# mkdir /home/svnroot/repository
//進入subversion的bin目錄
# cd /usr/local/subversion/bin
//創建倉庫"test"
# ./svnadmin create /home/svnroot/repository/test
# cd /home/svnroot/repository/test
//看看是不是多了些文件,如果是則說明Subversion安裝成功了
# ls –l
# cd /usr/local/subversion/bin
//這條語句將把路徑/home/user/import下找到的文件導入到你創建的 Subversion 倉庫中去,
//提交后的修訂版為1。
# ./svn import /home/user/import file:///home/svnroot/repository/test –m "注釋"
//不讓其他人有修改目錄的權限
# chmod 700 /home/svnroot/repository
5. 修改Apache配置文件
# vi /usr/local/apache/conf/httpd.conf
//找到以下行
User daemon # 將daemon改為svnroot,讓apache進程以svnroot的身份運行
Group daemon
//如果先安裝apache,以下兩行將自動添加,如未找到請手動添加
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
//添加以下內容到httpd.conf
<Location /svn>
DAV svn
SVNParentPath /home/svnroot/repository/ //svn父目錄
AuthzSVNAccessFile /home/svnroot/repository/authz.conf //權限配置文件
AuthType Basic //連接類型設置
AuthName "Subversion.zoneyump" //連接框提示
AuthUserFile /home/svnroot/repository/authfile // 用戶配置文件
Require valid-user //采用何種認證
</Location>
//其中authfile是通過
//htpasswd –b[c] /home/svnroot/repository/authfile username password來創建的
//"Require valid-user"告訴apache在authfile中所有的用戶都可以訪問。如果沒有它,
//則只能第一個用戶可以訪問新建庫
6. 重啟apache
# ./usr/local/apache/bin/apachectl restart
//打開瀏覽器訪問http://localhost/svn/test/,如果有東 西顯示就說明成功。
7. 權限管理
1)增加用戶
# htpasswd -[c] /home/svnroot/repository/authfile wooin
//第一次設置用戶時使用-c表示新建一個用戶文件。回車后輸入用戶密碼,
//要特別注意/home/svnroot/repository/authfile文件的所有者為svnroot而非root用戶
//如果為root請修改所有者
# chown svnroot:svnroot /home/svnroot/repository/authfile
//完成對用戶 的增加
# htpasswd authfile 用戶名(加入新的用戶)
2)權限分配
//要特別注意/home/svnroot/repository/authz.conf文件的所有者為svnroot而非root用戶
//如果為root請修改所有者為svnroot
# chown svnroot:svnroot /home/svnroot/repository/authz.conf
# vi /home/svnroot/repository/authz.conf
[test:/] //這表示,倉庫test的根目錄下的訪問權限
wooin = rw //test倉庫wooin用戶具有讀和寫權限
bao = r //test倉庫bao用戶具有讀權限
[test2:/] //test2倉庫根目錄下的訪問權限
wooin = r //wooin用戶在test2倉庫根目錄下只有讀權限
bao = //bao用戶在 test2倉庫根目錄下無任何權限
[/] //這個表示在所有倉庫的根目錄下
* = r //這個表示對所有的用戶都具有讀權限
#[groups] //這個表示群組設置
#svn1-developers = wooin, bao //這個表示某群 組里的成員
#svn2-developers = wooin
#[svn1:/]
#@svn1-developers = rw //如果在前面加上@符號,則表 示這是個群組權限設置
將這個設置完成后。重啟Apache,就可以通過
http://localhost/svn/test
這個URL來訪問倉庫了,當然,受權限的限制,必須是合法用戶才能訪問且具有相應的權限
8. 一些備忘:
1. svn checkout http://localhost/svn/hello.world
2. svn commit 時的默認編輯器的環境變量$SVN_EDITOR=vi需要手動設定,用kate好像有問題
3.
如果linux的登錄用戶名密碼都和svn的其中一個用戶名密碼相同時,在checkout的時候不會要求輸
入用戶名密碼直接就可以checkout出來。比如:linux有個用戶wooin,svn也有一個用戶wooin,并且密碼
都是一樣的,當用wooin登錄linux后,執行checkout,可以直接提取出源碼文件,不用輸入認證信息。
4. 在svn使用過程中牽扯到幾種權限:文件系統的權限,linux系統權限,svn用戶的權限,apache進程的權限。
文件系統的權限,linux系統權限:這里相同的意思,就是平時大家使
用linux時文件夾和文件的訪問權限。在
svn建立倉庫,文件夾,配置文件的時候用svnroot用戶,并將倉庫權限設置為700,不允許其他用戶直接通過
文件系統查看,只能由svnroot進行管理。
apache進程的權限:因為所有跟倉庫傳輸的操作都是通過
apache進程進行的,所以即使你給svn用戶設置了
很大的權限,但是apache進程沒有訪問倉庫或者相關文件的權限也沒有用,apache進程的權限設置在
/usr/local/apache/conf/httpd.conf 文件中配置,找到文件中的這兩行:
User daemon # 將daemon改為svnroot,讓apache進程以svnroot的身份運行
Group daemon
svn用戶的權限:就是在authz.conf文件中設置的權限信息,是svn用來管理倉庫訪問權限的。
5. svn服務器設置有兩種方式:http 和 svnserve。這里介紹的是http方法
6. 在/etc/profile的結尾設置一些svn啟動時要做的工作
# start apache server for svn
/usr/sbin/apachectl start
export SVN_EDITOR=vi
7. APR libraries 安裝 SVN 的時候最好指定
--with-apr= 和 --with-apr-util= 參數到 Apache 安裝的根目錄(ServerRoot)下,而不是使用缺省的
SVN 安裝包中自帶的 apr 。否則如果你安裝的 Apache版本不同有可能導致 APR 庫不匹配,出現類似:
Can't set position pointer in file '/svn/test/db/revs/1': Invalid argument 的錯誤。
Updated 2006-04-20 16:30 -- 比如說如果你安裝的是apache 2.2.0版本,就需要在編譯安裝svn的時候指定
--with-apxs和--with-apr參數到你的apache.2.0安裝目錄下:
./configure --prefix=${subversionInstallFolder} /
--with-apxs=${apacheInstallFolder}/bin/apxs /
--with-apr=${apacheInstallFolder} /
--with-apr-util=${apacheInstallFolder} /
--with-ssl /
--with-zlib /
--enable-maintainer-mode
9. 重新部署SVN倉庫
需要將目前的某個倉庫導出,并導入到另一個倉庫(可以導入到該倉庫的指定目錄下),
要用到以下的命令:
// 導出所有版本到stn.dump文件中
# svnadmin dump /home/svnroot/sonatina/ > stn.dump
// 或者也可以只導出其中一個版本
# svnadmin dump /home/svnroot/sonatina/ --revision 10 > stn.r10.dump
// 或者也可以導出多個版本,比如0-10版本
# svnadmin dump /home/svnroot/sonatina/ --revision 0:10 > stn.r0-10.dump
// 導入到sonatinab/trunk目錄下,如果不指定--parent-dir,則會導入到根目錄sonatinab/下
# svnadmin load /home/svnroot/sonatinab/ --parent-dir trunk < stn.r0-10.dump