`
yycc
  • 浏览: 36662 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

SVN服务器搭建完全手册

阅读更多
  1. 准备,下载所需要文件.
  2. 检查已安装的 Apache2 是否已经安装了 mod_dav .
  3. 编译SVN,遇到的问题和解决方法
    1. 使用 默认文件系统(fsfs) 保存数据
    2. 使用 Berkeley DB 保存数据
  4. 配置Apache和SVN,测试.
  5. 其它小结
    1. 从Windows平台上数据转移
    2. 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息.
    3. 基于路径的权限控制
    4. 常用SVN命令
  6. 相关资源

准备,下载所需要文件

本文测试环境


Linux MY_SERVER 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux

Apache 2.2.2

最新的版本 Subversion 可以在这里找到 :http://subversion.tigris.org/project_packages.html

检查已安装的 Apache2 是否已经安装了 mod_dav

如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也会启动不起来.

编译APACHE2.2

 

  1. 修改部分源代码
    # vi server/mpm/worker/worker.c
    找到下面几行,并改成如下的数值,其目的是在源码中修改apache可支持的 最大线程数和最大客户端数目。
    # define DEFAULT_SERVER_LIMIT 256
    # define MAX_SERVER_LIMIT 40000
    # define DEFAULT_THREAD_LIMIT 256
    # define MAX_THREAD_LIMIT 40000
  2. 编译配置
    优化编译选项及配置apache可加载的模块
    # CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" \
    > ./configure --prefix=/usr/local/apache2.2 --enable-mods-shared=all \
    > --enable-so --with-mpm=worker --enable-deflate \
    > --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
    > --enable-proxy --enable-suexec --with-apxs2 --with-mysql
    > --with-berkeley-db=/usr/local/BerkeleyDB.4.3

  1. 编译及安装
    # gmake && make install
  2. 优化apache配置选项
    修改MPM(多道处理器)参数
    # cd /usr/local/apache2.2
    # vi conf/extra/httpd-mpm.conf

    找到如下选项,并改成对应的数值
    ServerLimit 64
    ThreadLimit 128
    StartServers 8
    MaxClients 8192
    MinSpareThreads 50
    MaxSpareThreads 256
    ThreadsPerChild 128
    MaxRequestsPerChild 0

    修改apache2.2子进程所有者
    # vi /usr/local/apache2.2/conf/httpd.conf
    把daemon改为nobody
    User nobody
    Group nobody

编译SVN,遇到的问题和解决方法

使用默认的文件系统保存数据.

最终完整通过安装和测试的编译参数为:
./configure --with-apxs=/opt/httpd/bin/apxs \
--with-apr=/usr/local/src/server/httpd-2.2.4/srclib/apr \
--with-apr-util=/usr/local/src/server/httpd-2.2.4/srclib/apr-util \
--with-python --with-berkeley-db=/usr/local/BerkeleyDB.4.3 \
--with-ssl \

# make
# make install

其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹,根据实际情况调整一下.

遇到问题

  1. –with-apr 和 –with-apr-util 如果没有加上的话,即使编译成功了也会出现

    Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument

    这样的错误提示.

  2. 暂时不能使用 Berkeley DB [* 已解决]
    svn保存文件更新数据库的方法有两个,一种是直接使用 fs (filesystem)来保存,另一种是通过Oracle提供支持的开源数据库 Berkeley DB 进行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就会configure时就会报错.

     

    configure: error: APR-UTIL was installed independently, it won’t be
    possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4

    我想 apr-unit 暂时不支持吧,我们就用默认的fs好了.

  3. 在make 的时候可能会遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 两个文件,找不到而make error.

    解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的位置中.

UPDATE!!!

使用 BerkeleyDB 保存数据

  1. 安装 BerkeleyDB
    cd /usr/local/src
    $ wget http://downloads.sleepycat.com/db-4.3.29.tar.gz
    $ tar xzvf db-4.3.29.tar.gz
    $ cd /usr/local/src/db-4.3.29/build_unix
    $ ../dist/configure --enable-compat185
    $ make
    $ make install
  2. 更新apr和apr-util源代码
    # 清理编译后的.la文件
    $ cd /usr/local/src/httpd-2.2.3
    $ make clean
    $ cd /usr/local/src/subversion-1.3.2
    $ rm -rf apr
    $ rm -rf apr-util
    $ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./
    $ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./
  3. 编译安装
    # /configure --with-apxs=/usr/local/apache2/bin/apxs \
    > --with-berkeley-db=/usr/local/BerkeleyDB.4.3 \
    > --with-ssl
    # make
    # make install

     

遇到问题

  1. BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误.

    configure: error: APR-UTIL was installed independently, it won’t be
    possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4

    主要是apr-util 暂时不支持4.4的版本.

  2. 必须更新apr,apr-util 源代码.
    subversion-1.3.2 自带的 apr-util 的版本是0.9.6的,必须升级为 1.2.7 虽然能编译过去。但在 svn checkout 的时候会提示

     

    svn: REPORT request failed on ‘/!svn/vcc/default’
    svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server.

    这个问题困扰了我很长时间,Google和官方论坛都无结果。后来昨天竟然自己无意中解决了,感动的得哭了:)

配置Apache和SVN,测试

成功编译svn后会在 httpd.conf 中自动加上

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

两个模块,没有的话,自行加上或检测是否真的编译成功.

假设我们现在要将一个名为 Lair 的项目导入到 SVN中

  1. Apache的配置
    在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入

     

    <location svn="" lair=""></location>
    DAV svn
    SVNPath /home/svn/Lair

    可以参考以下apache的配置,实现数据加密传输,用户身份验证.

    Listen 443

    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl.

    SSLPassPhraseDialog exec:/etc/sendsslpwd
    SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)
    SSLSessionCacheTimeout 300
    SSLMutex file:/usr/local/apache2/logs/ssl_mutex

    <virtualhost></virtualhost>
    DocumentRoot /var/SVNRoot
    ServerName svn.yousite.com:443
    ServerAdmin webmaster@yousite.com
    <location></location>

    DAV svn
    SVNPath /var/SVNRoot
    AuthzSVNAccessFile /etc/svnserve.conf
    Satisfy Any
    AuthType Basic
    AuthName “yousite SVN Repository”
    AuthUserFile /etc/httpd-passwords.txt
    Require valid-user


    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/ssl/server.crt
    SSLCertificateKeyFile /etc/ssl/server.key

     

    更详细的配置说明文档 http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html

  2. 配置,并且测试SVN,

    创建一个新用户,用了保存仓库.
    useradd -m svn

    创建一个新模块
    # su daemon #(apache是以daemon用户运行的,所以要切换身份,否则可能会报目录访问权限错误)
    # svnadmin create --fs-type fsfs /home/svn/Lair

    导入原来的项目

    svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’

    重新建立工作目录

    # rm -rf /var/www/Lair ##(注意备份!!)
    # svn checkout http://localhost/svn/Lair

    测试打开 http://localhost/svn/Lair

    如能看到一个你项目录列表,说明您成功了。

其它小结

  1. 数据转移:

    从 Windows 平台 SVN 服务器转移
    如果windows svn储存的格式也是dbd的话,直接将SVN的文件夹copy过来即可.然后
    执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏.

    最后注意权限,确保 db 目录下的所有文件可写。

    chmod 755 db
    chmod 666 db/*

    否则checkout时出现以下错误,多数是因为 文件或者目录权限问题 引起的,可以尝试用 chown 或者 chmod 命令修改一下权限

    <m:human-readable errcode="”160029″"></m:human-readable>

    Could not open the requested SVN filesystem

    <m:human-readable errcode="”13″">
    Could not open the requested SVN filesystem
    </m:human-readable>

    另外一种方法没有测试过,原理大致和mysqldump一样,将svn导出为文本文件,然后重新导入,好处是可以避免因为存储格式不同而导致的数据转移困难。

    # dump data to file (assuming a repo @ c:\repo):

    svnadmin dump c:\repo > c:\repo.txt
    # Copy the file over to linux:
    mkdir /repo
    svnadmin create /repo
    svnadmin load /repo < /repo.txt

  2. 设置访问控制

    当 httpd.conf 中 设置 AuthzSVNAccessFile 时,可以设置不同用户对不同目录的访问控制.以下是一个例子.

    [groups]
    root = admin.root
    web = user1,user2
    soft = user3,user4

    [/]
    @root = rw

    [/www]

    @web = rw

    [/soft]
    @soft = rw

    详细的说明文档:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html

  3. 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息(自动属性).

    Windows : C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
    Linux : ~\.subversion\config
    [miscellany]

    enable-auto-props = yes
    [auto-props]
    *.php=svn:keywords=Id
    *.html=svn:keywords=Id

    关于自动属性的更高级讨论

  4. 几条常用svn 命令

    $ svn update
    $ svn add “filename”
    $ svn commit

参考

分享到:
评论

相关推荐

    linux下搭建SVN服务器完全手册

    Linux 下搭建 SVN 服务器完全手册 Linux 下搭建 SVN 服务器是指在 Linux 操作系统下安装和配置 SVN 服务器,以便于团队协作和版本控制。本手册将详细介绍如何在 Linux 下搭建 SVN 服务器,包括安装 SVN 软件、创建...

    svn学习资料手册及SVN服务搭建

    SVN,全称为Subversion,是一种广泛应用于软件开发...本手册中的"SVN服务器搭建完全手册"和"TortoiseSVN_zh_CN"文档,将为读者提供详细的操作指导。通过学习和实践,你将能够熟练掌握SVN的使用,为团队的工作带来便利。

    linux下搭建SVN服务器完全手册.docx

    linux下搭建SVN服务器完全手册.docx

    linux下搭建SVN服务器完全手册借鉴.pdf

    总之,Linux下的SVN服务器搭建涉及多个步骤,从安装依赖软件到精细的权限设置,都需要谨慎操作。遵循上述指南,你可以成功地创建一个安全且功能齐全的SVN服务器,为开发团队提供高效的工作流程。

    RedHatLinux下搭建SVN服务器完全手册终稿.pdf

    为了搭建SVN服务器,你需要通过yum命令安装以下软件包: 1. subversion:这是SVN服务器的核心组件。 2. mysql-server:虽然不是SVN的直接需求,但可能用于其他辅助应用,例如CodeStriker。 3. httpd与mod_dav_svn:...

    Redhat_Linux 搭建SVN服务器完全手册

    完全介绍Redhat_linux 环境下安装配置SVN服务器全过程

    SVN_服务器端安装操作手册

    至此,SVN服务器已在Windows环境下通过Apache成功搭建。后续的维护和管理包括监控日志、更新版本库、调整权限等,都依赖于有效的管理和良好的文档记录。务必保持Apache和Subversion的更新,以确保系统的稳定性和安全...

    SVN管理员使用手册[简明新手].doc

    《SVN管理员使用手册》是针对初学者的...这份手册通过详细的步骤指导,帮助新手快速上手SVN服务器的搭建和管理,确保团队可以高效、安全地进行代码版本控制。对于初次接触SVN的管理员来说,是一份非常实用的参考资料。

    项目级SVN简易安装手册

    本手册将详细介绍如何在项目环境中快速搭建SVN服务器,以及如何在同一个服务器上创建和管理多个版本库。 **一、SVN服务器安装** 1. **系统要求**:SVN可以在多种操作系统上运行,如Windows、Linux和Mac OS。本手册...

    SVN服务端subversion 客户端tortoiseSVN详细使用手册

    #### SVN服务器信息与配置 服务器信息应包括服务器类型(如虚拟服务器win2003系统)、服务器地址(如10.88.19.67)、账户名和密码等。服务基本信息则涉及安装目录(例如C:\Program Files\Subversion)和版本库根...

    svn使用教程及操作手册

    以上便是对SVN使用教程及操作手册的内容介绍,希望对想学习SVN的软件专业人士有所帮助。需要注意的是,在进行SVN操作前,需要对一些基础术语有所了解,如源码、文档等,此外有软件开发和测试流程的知识会更好。通过...

    开源版本控制pySvnManager(Svn管理后台)开发者手册(pysvnmanager dev-guide)

    ### 开源版本控制pySvnManager(Svn管理后台)开发者手册(pysvnmanager dev-guide) #### 1. 前言 ##### 1.1 SVN的授权管理问题 Subversion (SVN) 是一种广泛使用的版本控制系统,尤其适用于管理大型项目和团队。...

    SVN-Apache2.2.8安装配置说明

    3. SVN服务器安装配置 - 下载服务器软件:首先,你需要从官方网站获取适合操作系统的SVN和Apache服务器软件。 - 安装服务器:按照安装向导进行安装,确保选择合适的安装选项以满足需求。 - 创建版本库:通过...

Global site tag (gtag.js) - Google Analytics