svn搭建

在linux安裝配置svn並實現支持ssl認證https安全訪問方式

  

  • 安裝openssl-0.9.8工具
    • # tar zxvf openssl-0.9.8d.tar.gz
    • # cd openssl-0.9.8d
    • # ./config --prefix=/usr/local/openssl
    • # make
    • # make install
  • 安裝apache
    • # tar zxvf httpd-2.2.3.tar.gz
    • # cd httpd-2.2.3
    • # ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite=share --enable-proxy=share --enable-proxy-ajp=share --enable-dav=share --enable-dav-fs --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --enable-ssl=static --with-ssl=/usr/local/ssl --enable-mods-shared=all  //超長的一句,想粘進去還很差使 此語句意思是把全部模塊都添加上,在這裏能夠不寫
    • # make
    • # make install
  • 安裝SVN
    • # tar zxvf subversion-1.4.2.tar.gz
    • # cd subversion-1.4.2
    • # ./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl --with-zlib --enable-maintainer-mode
    • # make
    • # make install
  • 具體配置
    • 建立一個版本庫
      • # mkdir /home/svnroot/repository
      • # cd /usr/local/subversion/bin //進入subversion的bin目錄
      • # ./svnadmin create /home/svnroot/repository/test //建立倉庫"test"
      • # ls –l /home/svnroot/repository/test //看看是否是多了些文件,若是是則說明Subversion安裝成功了
      • # cd /usr/local/subverion/bin
      • # ./svn import /home/user/import file:///home/svnroot/repository/test–m "init" //這條語句將把路徑/home/user/import下找到的文件導入到你建立的Subversion倉庫中去,其中/user/import/下有本身的項目.提交後的修訂版爲1。
      • apache進程的權限:由於全部跟倉庫傳輸的操做都是經過apache進程進行的,因此即便你給svn用戶設置了很大的權限,可是apache進程沒有訪問倉庫或者相關文件的權限也沒有用,apache進程的權限設置在 /usr/local/apache2/conf/httpd.conf文件中配置,找到文件中的這兩行:
      • User daemon # 將daemon改成svnroot,
        Group daemon
  • 修改apache配置文件
    • # ./apachect1 start //啓動Apache
    • # vi /opt/apache2/conf/httpd.conf //在最下面添加

      LoadModule dav_svn_module modules/mod_dav_svn.sohtml

      LoadModule authz_svn_module modules/mod_authz_svn.solinux

      <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>web

      //其中authfile是經過"htpasswd [–c] /home/svnroot/repository/authfile username password"來建立的
         //"Require valid-user"告訴apache在authfile中全部的用戶均可以訪問。若是沒有它,
         //則只能第一個用戶能夠訪問新建庫apache

    • 重啓apache  # ./usr/local/apache2/bin/apachectl restart //打開瀏覽器訪問http://localhost/svn/test/,若是有東西顯示就說明成功
    • 會出現錯誤及修改

      httpd: Could not reliably determine the server’s fully qualified domain name, using 0.0.0.102 for ServerName瀏覽器

      解決辦法是:安全

      編輯apache的配置文件/apache/conf/httpd.conf。服務器

      將裏面的#ServerName www.example.com:80前面的#去掉便可。網絡

      再運行apache/bin/apachectl -k restart 重啓apachedom

  • 爲版本庫添加可訪問用戶
    • cd /usr/local/apache2/bin
    • htpasswd -c /home/svnroot/repository/authfile 用戶名 //第一次設置用戶時使用-c表示新建一個用戶文件。回車後輸入用戶密碼
    • # htpasswd authfile 用戶名(加入新的用戶)
  • 爲版本庫讀寫配置用戶權限
    • # vi /home/svnroot/repository/authz.conf

      [/]
      sunchangqing=rw
      [groups]
      admin_group=oujianjiao
      programmer_group=gaojunling,caowei
      [/]
      @admin=rw
      @programmer_group=r
      [fetionenterprise:/src]
      @programmer_group=rw
      [fetionenterprise:/resource/config]
      @programmer_group=rw
      [fetionenterprise:/resource/i18n]
      @programmer_group=rw
      [fetionenterprise:/web]
      @programmer_group=rw
      [fetionenterprise:/test]
      @programmer_group=rwsvn

    • * 權限配置文件中出現的用戶名必須已在用戶配置文件中定義。
    • * 對權限配置文件的修改當即生效,沒必要重啓svn。
    • 爲了簡化配置,3個版本庫共用1個權限配置文件/home/svnroot/repository/authz.conf。若有必要,也能夠分開。文件中定義用戶組和版本庫目錄權限。
  • 不讓其餘人有該目錄的權限
    • # chown -R svnroot:daemon /home/svnroot/repository //,這裏的用戶名能夠本身定
    • chmod 700 /home/svnroot/repository將倉庫權限設置爲700,不容許其餘用戶直接經過文件系統查看,只能由svnroot進行管理
  • 檢驗是否成功
    • 重啓apache cd /usr/local/apache2/bin/
    • ./apachectl restart
  • 在/etc/profile的結尾設置一些svn啓動時要作的工做 ,加上下面兩句:
    • # start apache server for svn
    • /usr/sbin/apachectl start
    • export SVN_EDITOR=vi
  • 若是linux的登陸用戶名密碼都和svn的其中一個用戶名密碼相同時,在checkout的時候不會要求輸入用戶名密碼直接就能夠checkout出
    來。好比:linux有個用戶wooin,svn也有一個用戶wooin,而且密碼都是同樣的,當用wooin登陸linux後,執行checkout,
    能夠直接提取出源碼文件,不用輸入認證信息。
  • 從新部署SVN倉庫
    • 須要將目前的某個倉庫導出,並導入到另外一個倉庫

      要用到如下的命令:
      # svnadmin dump /home/svnroot/sonatina/ > stn.dump // 導出全部版本到stn.dump文件中
      # svnadmin dump /home/svnroot/sonatina/ --revision 10 > stn.r10.dump // 或者也能夠只導出其中一個版本
      # svnadmin dump /home/svnroot/sonatina/ --revision 0:10 > stn.r0-10.dump // 或者也能夠導出多個版本,好比0-10版本
      # svnadmin load /home/svnroot/sonatinab/ --parent-dir trunk <
      stn.r0-10.dump //
      導入到sonatinab/trunk目錄下,若是不指定--parent-dir,則會導入到根目錄sonatinab/下

  • 配置經過ssl認證的apache訪問方式
    • 首先下載http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz ,使用普通的p2p下載鏈接會下載到壞包不能正常解壓,因此使用下面的命令:
    • 解壓:tar zxvf ssl.ca-0.1.tar.gz.1
    • # cd ssl.ca-0.1
    • # ./new-root-ca.sh (生成根證書)

      No Root CA key round. Generating one
      Generating RSA private key, 1024 bit long modulus
      ...........................++++++
      ....++++++
      e is 65537 (0x10001)
      Enter pass phrase for ca.key: (輸入一個密碼)
      Verifying - Enter pass phrase for ca.key: (再輸入一次密碼)
      ......
      Self-sign the root CA... (簽署根證書)
      Enter pass phrase for ca.key: (輸入剛剛設置的密碼)
      ........
      ........ (下面開始簽署)
      Country Name (2 letter code) [MY]: CN
      State or Province Name (full name) [Perak]: liaoning
      Locality Name (eg, city) [Sitiawan]: dalian
      Organization Name (eg, company) [My Directory Sdn Bhd]: jishikeyan
      Organizational Unit Name (eg, section) [Certification Services Division]: ACSTAR
      Common Name (eg, MD Root CA) []: yong
      Email Address []: yong@yong.com.cn
      這樣就生成了ca.key和ca.crt兩個文件,下面還要爲咱們的服務器生成一個證書:

    • # ./new-server-cert.sh server (這個證書的名字是server)

      ......
      ......
      Country Name (2 letter code) [MY]: CN
      State or Province Name (full name) [Perak]: liaoning
      Locality Name (eg, city) [Sitiawan]: dalian
      Organization Name (eg, company) [My Directory Sdn Bhd]: jishikeyan
      Organizational Unit Name (eg, section) [Secure Web Server]: ACSTAR
      Common Name (eg, www.domain.com) []: localhost
      Email Address []: yong@yong.com.cn
      這樣就生成了server.csr和server.key這兩個文件。
      還須要簽署一下才能使用的:

    • # ./sign-server-cert.sh server

      CA signing: server.csr -> server.crt:
      Using configuration from ca.config
      Enter pass phrase for ./ca.key: (輸入上面設置的根證書密碼)
      Check that the request matches the signature
      Signature ok
      The Subject's Distinguished Name is as follows
      countryName :PRINTABLE:'CN'
      stateOrProvinceName :PRINTABLE:'liaoning'
      localityName :PRINTABLE:'liaoning'
      organizationName :PRINTABLE:'jishikeyan'
      organizationalUnitName:PRINTABLE:'ACSTAR'
      commonName :PRINTABLE:'localhost'
      emailAddress :IA5STRING:'yongl@yong.com.cn'
      Certificate is to be certified until Jul 16 12:55:34 2005 GMT (365 days)
      Sign the certificate? [y/n]: y
      1 out of 1 certificate requests certified, commit? [y/n] y
      Write out database with 1 new entries
      Data Base Updated
      CA verifying: server.crt <-> CA cert
      server.crt: OK
      下面要按照ssl.conf裏面的設置,將證書放在適當的位置。

    • 使用以下命令移動認證文件到:
    • # mv server.key /usr/local/apache2/conf/
    • # mv server.crt /usr/local/apache2/conf/
    • 編輯apache的配置文件

      使用https方式驗證 :
      vi /usr/local/apache/conf/http.conf
      # Secure (SSL/TLS) connections
      Include conf/extra/httpd-ssl.conf //把此處的#去掉

    • 最後使用https://127.0.0.1/訪問就會先請求證書,而後訪問目錄就會須要權限(賬號口令)
  • subversion基本操做 (一下爲網絡摘抄,未實踐
    • 本地linux系統從服務器中拷貝庫文件
    • 發佈你的修改給別人,你可使用Subversion的提交(commit)命令

      ./svn commit test/index.html

    • 狀態查詢(status)

      #./svn status 路徑/項目名

      L some_dir # svn已經在.svn目錄鎖定了some_dir
      M bar.c # bar.c的內容已經在本地修改過了
      M baz.c # baz.c屬性有修改,但沒有內容修改
      X 3rd_party # 這個目錄是外部定義的一部分
      ? foo.o # svn並無管理foo.o
      ! some_dir # svn管理這個,但它可能丟失或者不完
      ~ qux # 做爲file/dir/link進行了版本控制,但類型已經改變
      I .screenrc # svn無論理這個,配置肯定要忽略它
      A + moved_dir # 包含歷史的添加,歷史記錄了它的來歷
      M + moved_dir/README # 包含歷史的添加,並有了本地修改
      D stuff/fish.c # 這個文件預約要刪除
      A stuff/loot/bloo.h # 這個文件預約要添加
      C stuff/loot/lump.c # 這個文件在更新時發生衝突
      C stuff/loot/glub.c # 文件在更新時發生屬性衝突
      R xyz.c # 這個文件預約要被替換
      S stuff/squawk # 這個文件已經跳轉到了分支
      K dog.jpg # 文件在本地鎖定;有鎖定令牌
      O cat.jpg # 文件在版本庫被其餘用戶鎖定
      B bird.jpg # 文件本地鎖定,但鎖定發生錯誤
      T fish.jpg # 文件本地鎖定,但鎖定丟失

    • 檢查修改的方式是svn diff命令,你能夠經過不帶參數的svn diff精確的找出你所作的修改

      #./svn diff 項目名

    • 添加文件或目錄(add) :

      #./svn add 項目名/新建文件或目錄

    • 刪除文件或目錄(delete

      #./svn delete項目名/新建文件或目錄

      svn delete http://ip地址/svn_dir/repository/project_dir這條命令恰好能夠用來刪除

    • 列出倉庫中的項目(list)
      • [root@localhost bin]# ./svn list --verbose file:///home/svnroot/repository/test/

 

相關文章
相關標籤/搜索