基於svnserve的SVN伺服器(windows下安裝與配置)
關鍵字: svn
安裝SVNserve
從http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91得到最新版本的Subversion。
如果你已經安裝了Subversion,svnserve已經運行,你需要在繼續之前把它停下來。
運行Subversion安裝程式,如果你在你的伺服器上運行,可以跳過第4步。
開啟資源管理員,進入Subversion的安裝目錄(通常是C:Program FilesSubversion)的bin目錄,找到檔案svnserve.exe,intl3_svn.dll,libapr.dll,libapriconv.dll,libapriutil.dll,libdb*.dll,libeay32.dll和ssleay32.dll,複製這些檔案,或所有bin目錄內的檔案到你的伺服器目錄,例如c:svnserve。
運行SVNSERVE
現在svnserve已經安裝了,你需要在你的server運行它,最簡單的方法是在DOS視窗或者windows捷徑輸入:
svnserve.exe --daemon
svnserve將會在連接埠3690等待請求,--daemon選項告訴svnserve以守護進程方式運行,這樣在手動終止之前不會退出。
如果你沒有建立一個版本庫,根據下面的Apache伺服器設定指令“配置”一節。
為了驗證svnserve正常工作,使用TortoiseSVN → 版本庫瀏覽器來查看版本庫。
假定你的版本庫位於c:reposTestRepo,你的伺服器叫做localhost,輸入:
svn://localhost/repos/TestRepo
當被版本庫瀏覽器提示輸入。
你也可以使用 --root 選項設定根位置來限制訪問伺服器的目錄,從而增加安全性和節約輸入 svnserve URL 的時間:
svnserve.exe --daemon --root drive:pathtorepositoryroot
以前面的測試為例,svnserve 現在的運行命令為:
svnserve.exe --daemon --root c:repos
然後在 TortoiseSVN 中我們的版本庫瀏覽器 URL 縮短為:
svn://localhost/TestRepo
注意,當 svnserve 和版本庫位於不同分區或盤符時也需要使用 --root 選項。
Svnserve 可以提供任意數量的版本庫服務。只要將這些版本庫放到你剛才定義的根目錄下即可,然後使用相對於根的URL訪問它們。
警告
不要建立和訪問網際網路共用上的 Berkeley DB 版本庫,它不能存在於一個遠端檔案系統,即使是映射到盤符的共用。如果你希望在網際網路共用使用 Berkeley DB,結果難以預料-你可能會立刻看到奇怪的錯誤,也有可能幾個月之後才探索資料庫已經損壞了。
以服務形式運行SVNSERVE
使用普通使用者直接運行 svnserve 通常不是最好的方法。它意味著你的伺服器必須有一個使用者登入,還要記著重新啟動伺服器後重新啟動 svnserve。最好的方法是將 svnserve 作為 windows 服務運行。從 Subversion 1.4 開始,svnserve 可以安裝為 windows 服務。
為了將 svnserve 安裝為 Windows 服務,在一行內執行下面的命令,建立一個當 Windows 啟動後,自動啟動的服務。
sc create svnserve binpath= "c:svnservesvnserve.exe --service --root c:repos" displayname= "Subversion" depend= tcpip start= auto
如果任一個路徑包含空格,你必須使用雙引號(逃逸字元)包含路徑,例如:
sc create svnserve binpath= ""C:Program FilesSubversionbinsvnserve.exe" --service --root c:repos" displayname= "Subversion" depend= tcpip start= auto
在建立服務以後,你還可以增加描述。它在 Windows 服務管理員中顯示。
sc description svnserve "Subversion server (svnserve)"
注意 sc 的命令列很特殊。在 key= value 對中,key 與 = 之間不能有空格,但是在 value 之前,必須有空格。
提示
Microsoft 現在建議服務程式使用本地服務或網路服務帳戶運行,參考 The Services and Service Accounts Security Planning Guide。以本地服務帳戶建立服務,需要在上面的例子裡追加下面幾行。
obj= "NT AUTHORITYLocalService"
請注意需要給本地服務帳戶一些目錄的適當許可權,包括的 Subversion 和你的版本庫,還有所有鉤子指令碼使用的應用。此帳號的內建群組名是"LOCAL SERVICE"。
服務安裝完畢後,你需要在服務管理員中啟動它(僅此一次;當伺服器重啟後它會自動啟動)。
為了得到更詳細的資訊,可參考 Windows Service Support for Svnserve。
如果你已經使用 SvnService 封裝安裝了早期的 svnserve,現在想使用內建服務,那麼你需要將其從服務中刪除(切記先停止服務!)。使用簡單的命令
svnservice -remove
即可刪除服務。
SVNSERVE的認證
預設的 svnserve 配置提供了匿名的唯讀訪問。這意味著你可以使用 svn:// 的 URL 進行檢出和更新,或者使用 TortoiseSVN 的版本庫瀏覽器查看版本庫,但是不能提交任何修改。
為了開啟對版本庫的寫訪問,你可以編輯版本庫目錄的conf/svnserve.conf檔案,這個檔案控制了svnserve守護進程的配置,也提供了有用的文檔。
為了開啟匿名的寫訪問,只需要簡單得設定:
[general]anon-access = write
然而,你不會知道誰修改了版本庫,因為svn:author屬性是空的,你也不能控制誰來修改版本庫,這是一個很危險的設定。
解決這個問題的一個方法是建立密碼資料庫:
[general]anon-access = noneauth-access = writepassword-db = userfile
這裡的 userfile 與 svnserve.conf 檔案在同一個目錄,這個檔案也可以存在於檔案系統的其他地方(當多個版本庫使用相同的存取權限時尤其有用),可以使用絕對路徑,或者是 conf 的相對目錄,使用 或盤符不能工作。userfile 的結構如下:
[general]anon-access = noneauth-access = writepassword-db = userfile
這個例子拒絕所有的未認證使用者(匿名)訪問,給 userfile 中的使用者讀寫權限。
提示
如果使用相同的密碼資料庫維護多個版本庫,使用一個認證域將讓使用者的工作更加簡單,因為 TortoiseSVN 可以緩衝你的憑證,所以你只需要輸入一次,更多的資訊可以參考 Subversion 手冊的 建立使用者檔案和域 和 用戶端憑證緩衝。
使用SVN+SSH認證
另一種svnserve認證的方法是使用SSH來建立請求通道。
通過此方法,svnserve不會作為守護進程啟動,而是SSH為你啟動svnserve,以SSH授權使用者運行,為此,你需要在你的伺服器上有SSH守護進程。
It is beyond the scope of this documentation to detail the installation and setup of a secure shell, however you can find further information in the TortoiseSVN FAQ, SSH How-To. You can find other SSH topics within the FAQ by searching for “SSH”.
更多的關於svnserve的資訊可以看《使用 Subversion 進行版本管理》。
SVNSERVE基於路徑的授權
從Subversion1.3開始,svnserve支援與mod_authz_svn相同的路徑為基礎的授權模式,你需要編輯版本庫路徑下的conf/svnserve.conf引用的授權檔案。
[general]authz-db = authz
在這裡,authz是你建立用來定義存取權限的檔案,你可以為每一個版本庫使用單獨的檔案,或者為所有的版本庫使用相同的檔案,關於此檔案的格式可以查看“路徑為基礎的授權”一節。
支援SASL
從 Subversion 1.5.0 開始,svnserve 和 TortoiseSVN 支援 svn:// 協議的 Cyrus SASL(簡單認證和安全層)。你可以在 Subversion 程式筆記中找到更多資訊:在 Subversion 中使用 Cyrus SASL 認證。