zoukankan      html  css  js  c++  java
  • 从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))…..

      </div>
    


    花了一天时间,走了不少弯路,解决N多错误,终于全部完成了,记下安装过程中遇到的各种问题,希望对初步使用svn的TX们有所帮助。

    关于svn的介绍此处略过,直接进入正题。

    svn服务的开启有两种方式,


    • 自带的svnserve服务(访问地址类似于svn://192.168.80.18/repos/)
    • 与Apache配合使用  (访问地址类似于http://192.168.80.18:8077/repos/


    下面先进入第一种的配置:

    1 安装,解压缩下载的svn压缩包到对应文件夹(建议路径不要有空格与中文)

    2 建立版本库,首先建立 f:svn 空文件夹作为所有版本库的根目录。然后,进入命令行并切换到安装subversion的bin目录(建议将此目录设为path)。

    输入如下命令:

    svnadmin create f:svn epos

    3 运行服务进程

    在bin目录下输入:

    svnserve -d -r f:svn

    注:-d参数效果同于–daemon

        -r参数效果同于–root

    svnserve 将会在端口 3690 等待请求,

        –daemon(两个短横线)选项告诉 svnserve 以守护进程方式运行,这样在手动终止之前不会退出。不要关闭命令行窗口,关闭窗口会把 svnserve 停止。


        –root选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserve URL的时间

        如果不加root参数,服务url为:svn://localhost/svn/repos

        而如果加上root参数,服务url为:svn://localhost/repos


        此处的启动配置会影响服务url,如果输入url错误,会导致访问的时候出现异常


    4 为了验证svnserve正常工作,使用TortoiseSVN -> Repo-browser 来查看版本库。在弹出的 URL 对话框中输入:

      svn://localhost/repos

      点 OK 按钮后就可以看见 repo1 版本库的目录树结构了,只不过这时 repo1 是个空库。

    可能出现的问题:

        Error: Can’t connect to host ”: 由于目标机器积极拒绝,无法连接。

        解决:首先测试svn的3690端口是否打开:telnet localhost 3690

        如果不成功说明服务没有被正常启动,请参考前面步骤

        可以将svn服务添加到系统服务中去,步骤如下:这样可以避免每次重启后需要手动运行命令的烦恼

        1 在subversion的安装路径下,找到bin文件夹

        2 新建一个setupservice.bat文件,内容为:


    Java代码  收藏代码
    1.     sc create svnserve binpath= “Subversion安装路径insvnserve.exe –service -r f:svn” depend= Tcpip start= auto  
    2. sc start svnserve  
    3. pause  
        sc create svnserve binpath= "Subversion安装路径insvnserve.exe --service -r f:svn" depend= Tcpip start= auto 
    sc start svnserve
    pause


        这里有个需要注意的问题:“start= auto”等号后面要加上一空格


        3 运行,这时在服务里可找到一个名为svnserve的服务。

        在cmd命令行下查看打开的端口:netstat -ano就看到3690端口打开了


        Error: No repository found in ‘svn://localhost/svn/repos/jmxDemo’ 

        解决:

    Java代码  收藏代码
    1. A.测试1:  
    2.    ①运行svnserve -d -r f:svn eposjmxDemo //指定jmxDemo根目录为服务的根目录  
    3.    ②运行svn://localhost,可以正常访问修改jmxDemo  
    4.    ③运行svn://localhost/jmxDemo,出现:’svn://localhost/jmxDemo’ non-existent in  
    5.   
    6. B.测试2:  
    7.    ①运行svnserve -d -r f:svn epos //指定jmxDemo上层目录为服务的根目录  
    8.    ②运行svn://localhost/jmxDemo,可以正常访问修改Repository  
    9.    ③运行svn://localhost,出现:Error * No repository found in ‘svn://localhost’   
    10.    
    11. C.结论:  
    12.    ①SVN服务启动时指定的根目录不同,会影响相同URL的访问结果  
    13.    ②SVN在访问指定路径时会从服务的根目录下去寻找,即基于我们启动服务时指定的根目录  
    14.    ③svn://localhost指向默认的jmxDemo,svn://localhost/jmxDemo指向jmxDemo  
    15.    ④测试情况一的步骤③失败是因为我们已经把路径直接指向了jmxDemo的根目录  
    16.    ⑤测试情况二的步骤③失败是因为我们只是把路径指向了jmxDemo的上层目录  
     A.测试1: 
    ①运行svnserve -d -r f:svn eposjmxDemo //指定jmxDemo根目录为服务的根目录
    ②运行svn://localhost,可以正常访问修改jmxDemo
    ③运行svn://localhost/jmxDemo,出现:’svn://localhost/jmxDemo’ non-existent in

    B.测试2:
    ①运行svnserve -d -r f:svn epos //指定jmxDemo上层目录为服务的根目录
    ②运行svn://localhost/jmxDemo,可以正常访问修改Repository
    ③运行svn://localhost,出现:Error * No repository found in ‘svn://localhost’

    C.结论:
    ①SVN服务启动时指定的根目录不同,会影响相同URL的访问结果
    ②SVN在访问指定路径时会从服务的根目录下去寻找,即基于我们启动服务时指定的根目录
    ③svn://localhost指向默认的jmxDemo,svn://localhost/jmxDemo指向jmxDemo
    ④测试情况一的步骤③失败是因为我们已经把路径直接指向了jmxDemo的根目录
    ⑤测试情况二的步骤③失败是因为我们只是把路径指向了jmxDemo的上层目录


        解决如下:

        svn://localhost/repos/jmxDemo

        而不是 svn://localhost/svn/repos/jmxDemo


    5 配置权限

      打开建立的版本库文件夹/conf 编辑server.conf 添加如下几行:

    Java代码  收藏代码
    1. [general]  
    2. password-db = passwd.conf  
    3. anon-access = none  
    4. auth-access = write  
    5. authz-db = authz.conf  
      [general] 
    password-db = passwd.conf
    anon-access = none
    auth-access = write
    authz-db = authz.conf


      保证文件中只有这几行是不被注释的

      在当前文件夹新建authz.conf 与passwd.conf文件

      编辑passwd.conf文件,添加内容:

    Java代码  收藏代码
    1. [users]  
    2. cjy = cjy  
      [users] 
    cjy = cjy


      注意整个串前后都不要有空格

      编辑authz.conf文件,添加内容:

    Java代码  收藏代码
    1. [/]  
    2. cjy = rw  
      [/] 
    cjy = rw


     

    6 导入文件夹

      重启服务,在需要导入的文件夹上右键–TortoiseSVN -> Import 输入url:svn://localhost/repos/文件夹名

      此处文件夹名需要被加上,不然会把文件夹下的所有文件弄到repos文件夹下,数据乱了

      输入用户名密码:cjy


      导入的时候可能出现的问题:

        Error: Authorization failed

        解决:权限问题

    这个问题弄了蛮久,一直以为是拼写url的问题,找了半天没找到,然后确认问题是权限配置错误,查了半天也没看出来,后来弄清楚,是因为导入涉及到在根下写东西,所以必须要有根下的w权限,添加如下配置后问题解决:

    Java代码  收藏代码
    1. [/]  
    2. cjy = rw  
    [/] 
    cjy = rw


    注意:

    版本库与导入项目最好不要重名,如果重名:

    比如把arm下的东东导入到了这个版本库:svn://localhost/arm。

    而配置权限的时候,[arm:/]这才代表工程的根目录,即:svn://localhost/arm

    要想配到权限到目录下,就得这么写: [arm:/arm/],不然出错,且问题不容易排出



    7 check out之,svn://localhost/repos/文件夹名 注意大小写区分,不然可能也会出现Error: Authorization failed错误


    OK,至此svn自带服务配置完成,可以进行其他测试如update,commit等。都不会再出现问题。下面说明Apache配合svn提供http svn服务。

    下面进入第二种配置:1、安装Apache,Apache的安装文件时一个msi文件可以直接双击运行(建议路径不要有空格与汉字)

    2、从Subversion安装目录的 bin 子目录将 intl3_svn.dll、libdb44.dll 拷贝到Apache安装目录的bin 文件夹

    3、从Subversion安装目录的 bin 子目录将 mod_authz_svn.so、mod_dav_svn.so 拷贝到Apache的模块目录(Apache 安装目录的    modules 文件夹)此步可省,配置的时候通过绝对路径的方式指定也可以

    4、修改Apache的配置文件 httpd.conf ,使用LoadModule来加载mod_dav_svn模块。


    Java代码  收藏代码
    1. LoadModule dav_module modules/mod_dav.so  
    2. LoadModule dav_fs_module modules/mod_dav_fs.so  
    3.   
    4. LoadModule dav_svn_module ”svn安装目录/bin/mod_dav_svn.so”  
    5. LoadModule authz_svn_module ”svn安装目录/bin/mod_authz_svn.so”  
    LoadModule dav_module modules/mod_dav.so 
    LoadModule dav_fs_module modules/mod_dav_fs.so

    LoadModule dav_svn_module “svn安装目录/bin/mod_dav_svn.so”
    LoadModule authz_svn_module “svn安装目录/bin/mod_authz_svn.so”注:如果拷贝了so文件到模块目录了,可以将上面两个的路径改成modules/mod_dav_svn.so 的形式,否则请使用正确的绝对路径

    请确认文件中未注释的数据只有以上四句


       确定用来作为Subversion版本库的目录

       在配置文件最后添加如下几行:

    Java代码  收藏代码
    1. <Location /svn>  
    2. DAV svn  
    3. SVNPath f:/svn/repos  
    4. </Location>  
       <Location /svn> 
    DAV svn
    SVNPath f:/svn/repos
    </Location>


       这个配置告诉Apache首先需要启用 dav_module,然后加载 dav_svn_module 。版本库对外的URL是:

       http://localhost:8077/svn ,所有的Subversion版本库在物理上位于f:/svn/repos 。

       配置完毕后重新启动 Apache,打开浏览器,输入 http://localhost:8077/svn

        将会看到成功画面:

       svn - Revision 10: /arm

       ..

       diary/

       ref/

       temp/


       ——————————————————————————–

       Powered by Subversion version 1.6.0 (r36650).


       这表示 Apache 的 dav_svn 模块已经可以正常工作了(现在已经可以通过http的方式获取svn中的内容了)。

      

    5、测试通过之后,进行权限配置


    5.1、基本 HTTP 认证


    最简单的客户端认证方式是通过 HTTP 基本认证机制,简单的使用用户名和密码来验证一个用户的身份。Apache提供了一个 htpasswd 工具来管理一个用户文件,这个文件包含用户名和加密后的密码,这些就是你希望赋予 Subversion 特别权限的用户。htpasswd 可以在 Apache 的 bin 安装目录下找到。具体使用方法如下:

    创建用户文件:

    htpasswd -cm F:svn eposconfpasswordfile cjy

    添加新用户(-m 表示以 MD5 加密密码):

    htpasswd [-m] F:svn eposconfpasswordfile dmm

    这个地方如果加上c,会把以前的覆盖掉

    更改用户密码:

    htpasswd [-m] F:svn eposconfpasswordfile cjy

    删除用户(要用大写的 D ):

    htpasswd –D F:svn eposconfpasswordfile cjy

    接下来修改 httpd.conf,在 Location 标签中加入如下内容:

    Java代码  收藏代码
    1. AuthType Basic  
    2. AuthName ”svn repos”  
    3. AuthUserFile F:svn eposconfpasswordfile  
    4. Require valid-user  
    AuthType Basic 
    AuthName "svn repos"
    AuthUserFile F:svn eposconfpasswordfile
    Require valid-user
    说明:

    AuthType Basic:启用基本的验证,比如用户名/密码对。

    AuthName “svn repos”:当一个认证对话框弹出时,出现在认证对话框中的信息。(最好用英文,TortoiseSVN 不支持中文,安装语言包除外。)

    AuthUserFile F:svn eposconfpasswordfile:指定F:svn eposconfpasswordfile为用户文件,用来验证用户的用户名及密码。

    Require valid-user:限定用户只有输入正确的用户名及密码后才能访问这个路径

    重新启动 Apache ,打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了,现在只有 passwd 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 “Require valid-user” 为 “Require user cjy dmm” 将只有用户文件中的 cjy 和 dmm 可以访问该版本库。


    有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如:

    Java代码  收藏代码
    1. <LimitExcept GET PROPFIND OPTIONS REPORT>  
    2.   require valid-user  
    3. </LimitExcept>  
    <LimitExcept GET PROPFIND OPTIONS REPORT> 
    require valid-user
    </LimitExcept>
    以上配置将使匿名用户有读取权限,而限制只有 passwd 中配置的用户可以使用写操作。

    如果这还不能满足你的要求,你希望精确的控制版本库目录访问,可以使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。

    5.2、用 mod_authz_svn 进行目录访问控制

    首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改 httpd.conf 文件,添加:

    LoadModule authz_svn_module modules/mod_authz_svn.so

    现在可以在 Location 标签中使用 authz 的功能了。

    注:在咱们的配置文件中已经进行了此步骤。此处可以略过


    一个基本的 authz 配置如下:


    Java代码  收藏代码
    1. #下面的/svn 表示url为:http://localhost:8077/svn/  
    2. <Location /svn>  
    3. #先需要启用 dav_module,然后加载 dav_svn_module  
    4. DAV svn  
    5. #版本库的本地路径  
    6. SVNPath f:svn epos  
    7. #下面一行是使用版本库上一级文件夹的方式来控制所有版本库  
    8. #SVNParentPath e:/svn  
    9. #权限控制文件  
    10. AuthzSVNAccessFile D:Javaapacheconfauthz.conf  
    11. try anonymous access first, resort to real  
    12. # authentication if necessary.  
    13. Satisfy Any  
    14. Require valid-user  
    15. #启用基本的验证,比如用户名/密码对。  
    16. #在用户名/密码对文件中的用户名才可以再authz.conf文件中配置生效  
    17. AuthType Basic  
    18. AuthName ”cjy repos”  
    19. AuthUserFile D:Javaapacheconfpasswordfile  
    20. </Location>  
    #下面的/svn 表示url为:http://localhost:8077/svn/ 
    <Location /svn>

    先需要启用 dav_module,然后加载 dav_svn_module

    DAV svn

    版本库的本地路径

    SVNPath f:svn epos

    下面一行是使用版本库上一级文件夹的方式来控制所有版本库

    SVNParentPath e:/svn

    权限控制文件

    AuthzSVNAccessFile D:Javaapacheconfauthz.conf

    try anonymous access first, resort to real

    authentication if necessary.

    Satisfy Any
    Require valid-user

    启用基本的验证,比如用户名/密码对。

    在用户名/密码对文件中的用户名才可以再authz.conf文件中配置生效

    AuthType Basic
    AuthName “cjy repos”
    AuthUserFile D:Javaapacheconfpasswordfile
    </Location>

    AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定。

    AuthUserFile 指向加密用户文件的位置,只有在此文件中存在的用户才可以在authz策略文件中被正确配置


    以(#)开头的行会被忽略;在它的简单形式里,每一小节命名一个版本库和一个里面的路径;认证用户名是在每个小节中的选项名;每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到或者值留空,访问是不允许的; * 表示所有用户,用它控制匿名用户的访问权限;@符号区分组和用户。如:

    Java代码  收藏代码
    1. [groups]  
    2. # 定义组  
    3. vip = dmm  
    4. users = cjy,light  
    5. [/]  
    6.  = r  
    7. @vip = rw  
    8. [/branches/dev]  
    9. @users = rw  
    10. [/tags]  
    11. cjy = rw  
    12. [/private]  
    13.  =  
    14. @vip= r  
    [groups]

    定义组

    vip = dmm
    users = cjy,light
    [/]
    * = r
    @vip = rw
    [/branches/dev]
    @users = rw
    [/tags]
    cjy = rw
    [/private]
    * =
    @vip= r


    使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中  cjy将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:

    Java代码  收藏代码
    1. [groups]  
    2. project1_vip = cjy,dmm  
    3. project2_vip = cjy,light  
    4. [repos1:/]  
    5.  = r  
    6. @ project1_vip = rw  
    7. [repos2:/]  
    8.  = r  
    9. @ project2_vip = rw  
    [groups] 
    project1_vip = cjy,dmm
    project2_vip = cjy,light
    [repos1:/]
    * = r
    @ project1_vip = rw
    [repos2:/]
    * = r
    @ project2_vip = rw
    这样 repos1的 project1_vip 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样 repos2 的 project2_vip 组也不能修改 repos1 版本库的文件。



    可能出现的错误:

    1、路径或权限不足时将出现错误信息提示:

    http://localhost (路径不对)

    Error * PROPFIND request failed on ‘/’ PROPFIND of ‘/’: 200 OK (http://localhost)

    http://localhost/svn (权限不足)

    Error * PROPFIND request failed on ‘/svn’ PROPFIND of ‘/svn’: 403 Forbidden (http://localhost)

    http://localhost/svn/repos (正常显示)

    http://localhost/repos (权限不允许)

    Error * PROPFIND request failed on ‘/repos’ PROPFIND of ‘/repos’: 405 Method Not Allowed (http://localhost)


    2、不启动E:subversioninsvnserve.exe ,但启动了ApacheSVN ,访问(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下:

    现象:svn://localhost/svn/repos 不能访问或提交,提示:Error * Can’t connect to host ‘localhost’: 由于目标机器积极拒绝,无法连接。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以访问或提交。

    原因:svn:// 是独立服务器 svnserver 自己的协议。file:/// 是本地访问,即服务器端和客户端在一个机器上

    3、  具体到使用so的时候报错 Cannot load mod_dav_svn.so into server: xd5xd2xb2xbbxb5xbdxd6

       解决:可能是版本的冲突,请使用2.2.9配1.6

       解压缩下载的svn,里面会有一个readme文件,打开后会列出其支持的相关应用列表,请下载相对应的apache版本

       推荐2.2.9+1.6.0,版本较新,且已经测试通过(附件中有安装文件)


       httpd.exe: Syntax error on line 87 of D:/Java/apache/conf/httpd.conf: Invalid LoadModule path modules/mod_dav_svn.so”

       解决:几个DLL冲突, apache/bin/*.DLL 最终列表:

    Java代码  收藏代码
    1. [-,需要删除的]:  
    2. [+.从Subs复制过来的]  
    3. [?,未知,可以不要]  
    4.   
    5. [-]libapr-1.dll  
    6. [-]libapriconv-1.dll  
    7. [-]libaprutil-1.dll  
    8.   
    9. [+]libdb44.dll  
    10. [+]libsasl.dll  
    11. [+]ssleay32.dll  
    12. [?]intl3_svn.dll  
       [-,需要删除的]: 
    [+.从Subs复制过来的]
    [?,未知,可以不要]

    [-]libapr-1.dll
    [-]libapriconv-1.dll
    [-]libaprutil-1.dll

    [+]libdb44.dll
    [+]libsasl.dll
    [+]ssleay32.dll
    [?]intl3_svn.dll


       Installing the Apache2.2 service

    The Apache2.2 service is successfully installed.

    Testing httpd.conf….

    Errors reported here must be corrected before the service can be started.

    httpd.exe: Could not reliably determine the server’s fully qualified domain name

    , using 192.168.80.18 for ServerName

    (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : make_sock: c


       解决:修改端口(在Apache配置文件中查询Listen,改成其他端口,因为此端口已经被占用)


    Could not open the requested SVN filesystem  [500, #720123]

    解决:路径没配正确


    是路径的问题

    在httpd.conf里设的SVNParentPath 是f:svn

    实际的repository的路径是f:svn eposProject1

    SVNParentPath 应该设为f:svn epos

    问题解决


    Error * PROPFIND request failed on ‘/svn’ PROPFIND of ‘/svn’: could not connect to server (http://localhost:8077)解决:服务未正常启动


    注:附件内容:

    分别为Apache2.2.9与svn1.6.0的安装文件(此配合不会出现版本冲突)

    svnserver下权限配置(复制文件到svn版本库的config文件夹下,重启svnserver即可)

    Apache下全线配置(复制文件到Apache安装文件夹的config文件夹下,重启Apache即可)

    本文转载自:http://jychenok.iteye.com/blog/470199

  • 相关阅读:
    阻止所有普通账号登录服务器
    grep命令
    redis集群配置和节点管理
    redis的安装和配置
    shell特殊字符
    获取docker容器的ip地址
    mysql5.6.38误删除root用户后的一系列问题及解决办法
    CenrOS7.5安装msyql5.7.24
    使用163邮箱的smtp ssl端口发送邮件
    linux统计大文件行数的命令效率大对比
  • 原文地址:https://www.cnblogs.com/lameclimber/p/10841995.html
Copyright © 2011-2022 走看看