gbk

          源碼配置管理(subversion+apache)

          源碼配置管理(subversion+apache)
          其實這文章是兩三個月前寫的,一直沒有放上來,這段時間正好又換了配置服務器,所以才拿出來.
          這幾天一直在找一個能與vs.net2003相結合的源代碼管理工具,幾乎試用過所有的大部分工具,難者難,易則簡,今天準備安裝subversion試試
          1.  轉到http://httpd.apache.org/download.cgi
          2.  下載 apache_2.0.53-win32-x86-no_ssl.msi
          3.  轉到http://subversion.tigris.org  下載svn-1.1.3-setup.exe
          4.  轉到http://tortoisesvn.tigris.org/下載TortoiseSVN-1.1.3-UNICODE_svn-1.1.3.msi
          二 安裝
          1.先安裝Apache,如果你的IIS已經占用80端口,則在安裝的時間請使用8080口,不過這個版本好像是自動選擇,為安全起見,還是自己手動選擇一下,避免沖突。假如我們選擇8080端口,安裝完后請打開http://127.0.0.1:8080如果安裝成功的話,您將看到歡迎頁。否則請檢查安裝是否正確.
           
          2.接著安裝svn-1.1.3-setup.exe,這個版本可以選擇是否要在apache的模塊中自動配置,請選擇自動配置。這樣的話就不用手動修改配置文件了。
          不然的話要進行以下手動配置 
          1.      把 <Subversion_root>/httpd/目錄下的 mod_dav_svn.so 和 mod_authz_svn.so Copy到 <Apache_root>/modules/ 目錄下。
          2.      把 <Subversion_root>/bin/ 目錄下的 libdb42.dll、libeay32.dll、以及 ssleay32.dll Copy到 <Apache_root> 底下的 bin 或 modules文件夾。
          3.      接著用記事本打開Apache HTTP Server 的 httpd.conf(在 <Apache_root>/conf/ 目錄下),找到 LoadModule 指令,先找到以下兩行:
          #LoadModule dav_module modules/mod_dav.so
          #LoadModule dav_fs_module modules/mod_dav_fs.so
          把前面的 '#' 字元刪除,然后把下面幾行文字加到這群 LoadModule 指令的后面:LoadModule dav_svn_module modules/mod_dav_svn.so
          LoadModule authz_svn_module modules/mod_authz_svn.so
          4.      重新啟動 Apache HTTP Server。
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           

          注意:按理說,在配置apache的時候,如果80已經被IIS占了,我們選定8080口,但是這樣反而不行,怎么辦? 沒關系按apache選80口,它會自動避開的80而選擇8080的,這點很奇怪J
          3.設置subversion的倉庫路徑 
          l         設置URL路徑 SVNPath
          其語法是:
             <Location /svn/repos_name>
              DAV svn
              SVNPath /absolute/path/to/repository
          </Location>
          其中 "/svn/repos_name" 就是客戶端存取特定檔案庫的 URI(Uniform Resource Indentifier),SVNPath 后面指定的路徑則是檔案庫的絕對路徑,假設我們的檔案庫實際存放的路徑是 d:/svn/MyProject,并且希望客戶端使用 "http://myserver/svn/myprj" 的 URL 來存取檔案庫,那么要加入 httpd.conf 的內容就是:
          <Location /svn/myprj>
              DAV svn
              SVNPath d:/svn/MyProject
          </Location>
          注意 Location 標簽后面的 /svn/myprj 的第一個斜線不可少!
          現在要設定 URL 路徑與檔案庫實體路徑的對應關系。對應的方式有兩種,分別是與
           
          l         設置倉庫物理路徑 SVNParentPath。 
          如果你的檔案庫都集中放在某個目錄之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定檔案庫的根路徑,例如:
          <Location /svn>
              DAV svn
              SVNParentPath d:/svn
          </Location>
          這表示可以讓任何人都可以透過 http://myserver/svn/<檔案庫名稱> 的方式,存取位于 d:/svn 這個目錄以下的所有檔案庫。也就是說,這個設定動作只需要一次,如果使用 SVNPath,你必須為各個檔案庫分別指定對應的路徑。
          以上兩種設定方式都可以,方便起見,這里我用 SVNParentPath 來統一指定所有檔案庫的父層 URL 路徑。
          將 <Location> 的設定加到 Apache HTTP Server 的 httpd.conf 檔尾就行了。
          接著便可以開始建立檔案庫。
           
          三 建立檔案庫
          假設我們要把所有的檔案庫都放在 d:/svn 目錄下,現在要建立一個測試用的檔案庫,名稱叫做 在 repository,指令為:
          md d:/svn
          svnadmin create d:/svn/repository
          命令執行完后,檢查看看 d:/svn/repository 目錄底下產生了哪些目錄和檔案。
          一般有如下目錄
          這時候你已經建立了一個檔案庫,你可以先在本機用瀏覽器測試一下,網址輸入 http://localhost:8080/svn/repository/,看看能不能看到檔案庫的內容.
           
          四 存入倉庫
          我們先測試一下這倉庫是否成功,先建立以下目錄結構
          c:
          cd temp
          md ProjectA
          md ProjectA/trunk
          md ProjectA/branches
          md ProjectA/tags
          svn import . http://localhost/svn/repository -m "Initial repository layout"
           
          提示
          本文在執行 svn 命令時,都是使用 http 協議的方式,這樣我們可以確知 Subversion 與 Apache HTTP Server 的設定無誤,其它人就可以透過 Internet 存取檔案庫。當然你也可以用其它的協議,例如:file:///,如果使用 file 協議,最后一行指令就變成:
          svn import . file:///d:/svn/repository -m "Initial repository layout"
          項目的目錄結構
          這里補充說明一下 ProjectA 的目錄結構。在 ProjectA 項目的根目錄下建立的 trunk、branches、和 tags 這三個目錄是有特別意義的,它們的作用分別是:
          trunk 目錄用來存份目前項目正在進行開發的程序檔案和文件(又稱為主線,即 mainline);
          branches 用來存放主線的各個仍在發展中的分支;
          tags 則用來存放已經不再變動的分支,也就是其中的檔案不會再修改了。
          這是 Subverion 官方手冊建議的目錄結構安排方式,你可以自己決定要不要用這種配置方式,詳細說明請參考官方手冊的第五章,子標題為 "Choosing a Repository Layout"。
          補充
          Subversion具有兩種服務模式,一個是作為Apache的模塊,另一個是自定義協議的Subserve服務。
          作為Apache的模塊,客戶端可以通過WebDAV/DeltaV協議訪問Repository,而使用Subserve則使用
          Subversion的自定義協議。
          下表是兩種服務模式的比較:
          功能
          Apache + mod_dav_sub
          Svnserve
          驗證方式
          基于HTTPS的X.509、LDAP、NTLM或其他Apache支持的驗證
          CRAM-MD5或者SSH
          用戶帳戶管理
          私有的用戶文件
          私有的用戶文件或已有的系統帳戶
          授權管理
          blanket read/write access或單一目錄的訪問控制
          blanket read/write access
          加密
          可選的SSL
          可選的SSH隧道
          交互性
          可通過支持WebDAV的客戶端訪問
          無交互性
          Web訪問
          有限的內置支持,或通過第三方的工具,例如ViewCVS
          通過第三方的支持,如ViewCVS
          速度
          稍慢
          稍快
          初始安裝
          稍復雜
          相當簡單
           
          使用 Windows 網域賬戶驗證
          照著前面的步驟做,你會發現存取檔案庫時都不用輸入賬號密碼,這是因為我們之前的設定沒有啟用身分驗證的功能。但是我們通常不希望所有人都能任意存取你的檔案庫,免得重要資產外泄,或者數據被破壞,因此了解如何加入身分驗證也是必要的。
          Serversion 提供了多種驗證使用者身份的方式,這里只介紹 Windows 身分驗證的方式,這種方式很適合用在開發團隊成員都在局域網絡內的情況。請依下列步驟進行:
          取得 SSPI 模塊,下載網址為 http://tortoisesvn.tigris.org/mod_auth_sspi.zip。
          把 zip 里面的 mod_auth_sspi.so 解壓縮到 <Apache_root>"modules 目錄下。
          把下面這行加入到 Apache 的 httpd.conf 里面:
          LoadModule sspi_auth_module modules/mod_auth_sspi.so
          注意上面加入的這行一定要放在下面這行的前面:
          LoadModule auth_module modules/mod_auth.so
          修改 httpd.conf 的 <Location> 設定如下:
          <Location /svn>
              DAV svn
              SVNParentPath d:/svn
              AuthType SSPI
              AuthName "Subversion 檔案庫"
              Require valid-user
              SSPIAuth On
              SSPIAuthoritative On
              SSPIDomain <domaincontroller>
              SSPIOfferBasic On
          </Location>
          其中 <domaincontroller> 就是你的 Windows 域控制器的計算機名稱(例如:WIN2KDC),注意兩邊的括號 <> 不用保留。如果你的環境沒有域控制器,就維持原來的 <domaincontroller> 就行了。在我的環境下,我發現即使有域控制器,但是這里不去設定它,還是能夠正常的驗證使用者身分。
          重新啟動 Apache。
          七 采用文件方式進行身份驗證
           
          此處也可以用mysql,passwd文件,LDAP等其他任何Apache支持的驗證方式。
           
          此處我采用文件方式,首先建立一個保存密碼的文件,如果不需要對密碼加密,可增加-p參數生成plain text。
          %APACHE_HOME%"bin"htpasswd –c -p d:"passwd"passwords user1 12345執行后會提示您輸入密碼,這樣就在文件passwords里生成一個用戶名為user1的用戶,
          生成的文件內容如下:
             #格式username:password
          user1:123456
           例子:
          Repository存放在D:"repository下,有兩個repository: test and xtest
          每個repostory 的結構相同:
                 根:01.txt
                        02.txt
                  folder1-: 11.txt
                 12.txt
          folder 2-: 21.txt
             22.txt
          對目錄1和2作不同的讀寫權限控制
          Basic Authentication
          修改文件:
          Httpd.conf:
          #Basic authentication
          <Location /repository>
                        DAV svn
                        SVNParentPath d:/repository
                        AuthzSVNAccessFile d:/repository/accessfile                
                     Require valid-user
                        AuthType Basic
                        AuthName "身份驗證"
                        AuthUserFile d:/repository/passwd                  
          </Location>

          用Apache的htpasswd生成用戶名和密碼,
          Htpasswd –c passwd username
          第二次不用 –c。
          生成的用戶名和密碼在passwd中:
          0:$apr1$Vu5.....$XZ/csz/2YKoPNKpb88O5p0
          1:$apr1$vu5.....$I1VwMJ7JtRmpmJjVUlT4h1
          2:$apr1$Dv5.....$vf2MTg/p0mY.WcFhx7wET1
          3:$apr1$Tv5.....$gfk4AiP49h0JjKN8BuJdB.
           
          AuthzSVNAccessFile控制每個目錄的讀寫權限
          [test:/]
          1 = r
          2 = r
          3 = r
          [test:/1]
          1 = rw
          [test:/2]
          2 = rw
           
          在客戶端,用http://server/repository/test可以訪問。也可以直接進入子目錄訪問:http://server/repository/test/1,http://server/repository/test/2。系統會要求進行認證。例如用戶1對目錄1有讀寫權限,可以commit修改,但對目錄2所作的修改就不能commit。
          SSPI認證。
          按上一種方式,用戶更換一次密碼,就必須修改一次密碼文件。用SSPI認證則可以沒有這個問題。
          Httpd.conf文件:
          #SSPI authentication
          <Location /repository>
                        DAV svn
                        SVNParentPath d:/repository
                        AuthzSVNAccessFile d:/repository/accessfilesspi               
                        Require valid-user
                        AuthType SSPI
                     AuthName "Subversion repositories"
                               # SSPI settings
                         SSPIAuth On
                         SSPIAuthoritative On
                         # point to domaincontroller
                         SSPIDomain domain.com.cn
                        SSPIOfferBasic On
          </Location>
          控制文件AuthzSVNAccessFile要作相應的修改:
          [test:/]
          domain"user1 = r
          domain"administrator = r
          [test:/1]
          domain"user1 = rw
          [test:/2]
          domain"user1 =
          domain"administrator = rw
          在tortoiseSVN使用時,會提示認證,填寫用戶名和密碼即可。
           
          如果要按照Group的方式來控制權限,可同時建立一個groups文件,內容如下:
           
             #格式:GroupName: username1 username2
           
              svngroup: user1 user2  
          在httpd.conf中的/svn處增加權限控制部分: 
           
             <Location /svn>
           
              DAV svn
           
              # 指向SVN Repository的ROOT
           
              SVNPath d:/svnrepo
           
             
           
              AuthType Basic
           
              AuthName "Subversion Repository"
           
              AuthUserFile d:/passwd/passwords
           
              AuthGroupFile d:/passwd/groups
           
              Require group svngroup
           
              </Location>
           
           
          重起服務器,瀏覽http://localhost/svn,出現安全對話框,輸入用戶名密碼即可成功

          posted on 2008-01-02 11:06 百科 閱讀(267) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 资兴市| 西畴县| 顺昌县| 岳西县| 报价| 苏州市| 同仁县| 清徐县| 西华县| 晴隆县| 洛浦县| 利津县| 永城市| 阳江市| 双峰县| 莱州市| 巩义市| 建宁县| 和平区| 河间市| 台南县| 奎屯市| 西乌珠穆沁旗| 遵义县| 新蔡县| 新丰县| 上犹县| 呼和浩特市| 武山县| 类乌齐县| 武城县| 长葛市| 林芝县| 怀仁县| 舞阳县| 仙桃市| 临沧市| 尼木县| 新源县| 登封市| 喀什市|