CentOS下编译安装Subversion1.6.12 独立SVN服务器!

PS:这篇大约是11年写的,一直放到文档中心,没有更新到博客上来,今天把它更新上来了!

  1. 源代码安装

    1. 官网下载源码包

                      #SVN依赖文件:
                      wget http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz;
                      #SVN主文件:
                      wget http://subversion.tigris.org/downloads/subversion-1.6.12.tar.gz;
                      
    2. 依赖文件和主文件两个压缩包解压后都会自动放到此subversion-1.6.12目录下

                      tar -zxv -f subversion-deps-1.6.12.tar.gz;
                      tar -zxv -f  subversion-1.6.12.tar.gz;
                      cd subversion-1.6.12;
                      ./configure --prefix=/usr/local/subversion;
                      make && make install;
                      
    3. svn svnadmin加入到系统命令,直接使用

      添加环境变量

                      #vi /etc/profile
                      在文件最后加入:
                      PATH=$PATH:/usr/local/subversion/bin
                      export PATH
                      #source /etc/profile
                      
    4. 判断是否安装成功

                      svnserve  --version
                      svnserve, version 1.6.12 (r955767)
                      
    5. 检查svn服务

                      netstat -tunl | grep ':3690'
                      
  2. 建立SVN版本库

    1. 创建多库方式,SVN 管理多个项目

      在多项目开发中会经常用到,不同的项目通过独自的svn仓库来实现开发者访问代码和日志的彻底隔离,举例有(blog和video)两个不同的大型项目,有两队开发团队,有时开发人员也会在两个项目中被调派开发项目。这种情况非常适合“在一台服务器上”创建多个版本库来管理各自项目。

                      #svn仓库总路径/home/repos/下面用来存放各个独立仓库
                      #例如:blog库和video库
                      mkdir -p /home/repos/
                      svnadmin create /home/repos/blog
                      svnadmin create /home/repos/video
                      #执行上面的命令后,自动在blog和video下建立多个文件,分别是conf,db,format,hooks,locks,README.txt
                      

      多库方式下svnserve.conf共用一个authz和passwd的配置来管理所有人员,非常方便开发人员的项目变动

                      #移动公用authz和passwd配置到/home/repos/
                      mv /home/repos/blog/conf/authz /home/repos/authz;
                      mv /home/repos/blog/conf/passwd /home/repos/passwd;
                      rm -fr /home/repos/video/conf/authz /home/repos/video/conf/passwd;
      
                      #修改blog仓库下svnserve.conf配置公用authz和passwd文件目录
                      vim /home/repos/blog/conf/svnserve.conf
                      [general]
                      #匿名用户只读(read或none)
                      anon-access = none
                      #认证用户可写
                      auth-access = write
                      #公用password文件的位置
                      password-db = ../../passwd
                      #公用authz文件的位置
                      authz-db = ../../authz
                      #仓库的文件名(具体在客户端更新下载的时候能看到仓库名字)
                      realm = blog
      
                      #修改video下svnserve.conf配置公用authz和passwd文件目录
                      vim /home/repos/video/conf/svnserve.conf
                      [general]
                      #匿名用户只读(read或none)
                      anon-access = none
                      #认证用户可写
                      auth-access = write
                      #公用password文件的位置
                      password-db = ../../passwd
                      #公用authz文件的位置
                      authz-db = ../../authz
                      #仓库的文件名(具体在客户端更新下载的时候能看到仓库名字)
                      realm = video
                      

      多库下的passwd用户名和密码配置

                      # vim /home/repos/passwd
                      [users]
                      #"="两边都必须空格和去掉行首尾两头的空格
                      admin = admin
                      dever1 = dever1
                      dever2 = dever2
                      

      多库下的authz用户访问权限配置

                      # vim /home/repos/authz
                      [groups]
                      admin = admin
                      blog_rw = dever1
                      video_rw = dever2
      
                      [/]
                      @admin = rw
      
                      [blog:/]
                      @blog_rw = rw
      
                      [video:/]
                      @video_rw = rw
                      #根据权限设置:admin用户能同时获取和修改blog和video库,而dever1只能读写repos1库,dever2只能读写video库,
                      
    2. 创建单库方式

      单库方式比较简单,只是对于单一项目的开发管理,并且单库方式一台服务器只能创建一个样本库,无法创建多个样本库,限制较大!

                      #例如:CMS版本库
                      mkdir -p /home/repos1/;
                      svnadmin create /home/repos1/cms;
                      

      单库模式和多库模式在 svnserve.conf和passwd配置上相似,但是authz配置上差距较大,需要注意!

                      #单库下的authz权限控制
                      vi /home/repos1/cms/conf/authz
                      [groups]
                      admin = user1
                      dev = user2
                      [/] #正确的方式
                      @admin = rw
                      @dev = r
                      [cms:/] #错误的方式
                      @admin = rw
                      @dev = r
                      #因为[repos3:/]表示库repos3的根目录,而按上面的启动参数,是没有库的概念的
                      
  3. 启动与访问

    1. 启动和停止服务

                      多库启动命令:
                      svnserve -d -r /home/repos
                      单库启动命令:
                      svnserve -d -r /home/repos/repos3
                      

      指令简介:此指令用于启动svn服务,-d指明以守护模式运行,svn自动在3690端口监听
      3690是默认端口,可以使用“–listen-port=”或者“–listen-host=”来指定其它端口
      -r选项用来指定svn服务的根目录,这样用户就可以使用相对路径访问,而不用提供完整路径

                      #停止svn服务命令:
                      killall svnserve
                      
    2. 访问方式:

      单库访问只需要访问地址或者域名,这个需要和多库区别对待,莫混淆!

                      #多库访问:
                      URL:svn://192.168.0.1/repos1访问repos1
                      URL:svn://192.168.0.1/repos2访问repos2
      
                      #单库访问:
                      URL:svn://192.168.0.1
                      
  4. 三、配置用户和权限—认证和授权策略

    1. 版本库结构

                      ├─conf
                      │  ├─svnserve.conf
                      │  ├─passwd
                      │  └─authz
                      ├─dav
                      ├─db
                      │  ├─revprops
                      │  ├─revs
                      │  └─transactions
                      ├─hooks
                      └─locks
                      

      其中authz 是权限控制,可以设置哪些用户可以访问哪些目录,passwd是设置用户和密码的,svnserve是设置svn相关的操作

    2. 对每个库的conf文件夹下的authz, passwd, svnserve.conf进行配置

                      例子:多库中的其中一个库blog配置
                      cd /home/repos/blog/conf
      
                      vim snvserv.conf
                      [general]
                      #匿名用户只读(read或none)
                      anon-access = read
                      #认证用户可写
                      auth-access = write
                      #保存用户名密码的password文件的位置
                      password-db = passwd
                      #确定用户对某一路径具有操作权限的authz文件的位置
                      authz-db = authz
                      #仓库的文件名(具体在客户端更新下载的时候能看到仓库名字)
                      # realm = haha first
      
                     vim passwd (“=”两边都必须空格 和 去掉两头的空格)
                      [users]
                      # harry = harryssecret
                      # sally = sallyssecret
                      wangying = wangying
      
                      vim authz
                      [groups]
                      blog_rw = wangying
                      [/]
                      * = r
                      [blog:/]
                      * =
                      @repos1_rw = rw
                      
  5. Subversion的使用经验

    大标题描述

    1. 多库方式下svnserve.conf共用一个authz 和 passwd的配置

      例子:多库中的其中一个库repos1配置
      cd /home/repos/repos1/conf
      mv authz ../../authz
      mv passwd ../../passwd

                      vim svnserve.conf 配置文件
                      [general]
                      ### These options control access to the repository for unauthenticated
                      ### and authenticated users.  Valid values are "write", "read",
                      ### and "none".  The sample settings below are the defaults.
                      anon-access = none
                      auth-access = write
                      ### The password-db option controls the location of the password
                      ### database file.  Unless you specify a path starting with a /,
                      ### the file's location is relative to the directory containing
                      ### this configuration file.
                      ### If SASL is enabled (see below), this file will NOT be used.
                      ### Uncomment the line below to use the default password file.
                      password-db = ../../passwd
                      ### The authz-db option controls the location of the authorization
                      ### rules for path-based access control.  Unless you specify a path
                      ### starting with a /, the file's location is relative to the the
                      ### directory containing this file.  If you don't specify an
                      ### authz-db, no path-based access control is done.
                      ### Uncomment the line below to use the default authorization file.
                      authz-db = ../../authz
                      ### This option specifies the authentication realm of the repository.
                      ### If two repositories have the same authentication realm, they should
                      ### have the same password database, and vice versa.  The default realm
                      ### is repository's uuid.
                      realm = repos
                      

      对提交到库中的文件做精确权限控制

                      举例:提交中库中的文件目录结构
                      ├─aa
                      │  ├─bb
                      │  ├   ├-cc
      
                      vim authz
                      [groups]
                      repos1_rw = wangying
                      repos1_rw2 = wangying2
      
                      [repos1:/]
                      * =
                      @repos1_rw = rw
      
                      [repos1:/aa/bb]
                      * =
                      @repos1_rw2 = rw
                      

      通过这个可以看出
      同一个库,wangying是不能更新得到bb目录的 wangying2 可以得到
      结论:对库中的某一目录限定权限,则这一目录下的所有目录的权限将是继承上一目录的权限

    2. SVN 显示日志 “no date”bug的解决方法

      你想将你的代码库开放给所有人访问,于是你就开放了匿名访问权限,在 svnserve.conf 文件中添加一行: ‘anon-access=read’ 。
      可是对于部分目录,你又不希望别人看到,于是针对那些特别目录,你在 authz.conf 里面进行配置,添加了授权访问的人,并添加了 ‘* =’ 标记
      你认为一切OK了,可是你缺发现,那个特别目录却无法访问了,总是提示 ‘Not authorized to open root of edit operation’
      或者 ‘未授权打开根进行编辑操作’ 。你再三检查你配置的用户名与密码,确认一切正确,还是无法解决问题。
      原来,Subversion 有个小 bug ,当 ‘anon-access=read’ 并且某个目录有被设置上 ‘* =’ 标记,则会出现上述问题。
      解决的办法:在 svnserve.conf 中,将 anon-access 设置成 none 。

    3. crontab实现以秒执行检出svn服务器上的源代码放在/opt/svnhtdocs/aa/并覆盖/home/www/htdocs/aa下的源代码

      1.                         #检出svn服务器上的源代码放在/opt/svnhtdocs/aa/
                                mkdir /opt/svnhtdocs;
                                cd /opt/svnhtdocs;
                                svn checkout --username ** --password ** svn://**/aa /opt/svnhtdocs/aa
                                #同步rsync命令
                                yum install rsync
                                
      2. 脚本文件编辑

                                源代码:
                                vim /root/runscript/svn.sh
                                svn.sh源代码:
                                #!/bin/bash
                                #
                                PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
                                export PATH
                                export LANG=zh_CN.UTF-8 #设定环境变量,如果没有设定可能会出现update报错
        
                                cd /opt/svnhtdocs/aa
                                svn up
                                #.* 代表.svn文件不同步
                                rsync -vauP --exclude=".*" /opt/svnhtdocs/aa /home/www/htdocs/aa
                                chown -R www:www /home/www/htdocs/aa
        
                                #修改权限700
                                chmod 700 /root/runscript/svn.sh
                                
      3. 以下方法将每10秒执行一次

                                crontab -e
                                # 或vim /var/spool/cron/root
                                * * * * * /root/runscript/svn.sh
                                * * * * * sleep 10;/root/runscript/svn.sh
                                * * * * * sleep 20; /root/runscript/svn.sh
                                * * * * * sleep 30; /root/runscript/svn.sh
                                * * * * * sleep 40; /root/runscript/svn.sh
                                * * * * * sleep 50; /root/runscript/svn.sh
        
                                #重启cron
                                service crond restart
                                
      4. rsync例分析
                                rsync -vauP --exclude=".*" --exclude="common/config" projectA/ projectAA
                                #第一个exclude表示跳过所有.开头的隐藏文件
                                #第二个表示调过projectA/common/config目录,因为config目录下的文件,轻易不需改变,如果需要手动调整即可,注意这个参数是后面SRC参数的相对路径
                                rsync -vzrtopg --exclude-from="/data/web/ignore.list" --progress projectA/* /data/web/projectAA
                                #这里的ignore.list是忽略的文件列表:
                                .svn
                                Runtime
                                

总结:
1:总结内容
2:总结内容
3:总结内容


参考:
1.参考内容
2.参考内容

相关文章
  1. 对Web静态资源缓存自动更新的思考与实践的总结
  2. 单机多git帐号的访问详解案例
  3. CentOS 6.5安装部署SVN 1.8.13
  4. php-redis扩展
  5. Redis安装部署
  6. gearman应用-分布式图库系统设计
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in Cache/File存储, Subversion

发表评论