【ACCESS精品源码栏目提醒】:以下是网学会员为您推荐的ACCESS精品源码-在linux下安装配置svn独立服务器 - 软件工程,希望本篇文章对您学习有所帮助。
subversion以下简称 svn是近年来崛起的版本管理工具,是 cvs 的接班人。
svn 服务器有 2 种运行方式:独立服务器和借助 apache。
2 种方式各有利弊。
svn 存储版本数据也有 2 种方式:BDB 和 FSFS。
因为 BDB 方式在服务器中断时,有可能锁住数据,所以还是 FSFS方式更安全一点。
1. svn 服务器安装操作系统: Redhat LinuxAS4 安装包获取:下载 http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz 和http://subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。
编译:以 root 用户登录。
将 subversion-1.4.0.tar.gz 和 subversion-deps-1.4.0.tar.gz 传到服务器。
tar xfvz subversion-1.4.0.tar.gztar xfvz subversion-deps-1.4.0.tar.gzcd subversion-1.4.0./configure --prefix/opt/svn --without-berkeley-db --with-zlib注:以 svnserve 方式运行,不加 apache 编译参数。
以 fsfs 格式存储版本库,不编译 berkeley-dbmake cleanmakemake installvi /etc/profile在/etc/profile 最后加入:PATHPATH:/opt/svn/binexport PATH测试:svnserve --version如果显示如下,安装成功:svnserve version 1.4.0 r21228compiled Oct 12 2006 10:18:56Copyright C 2000-2006 CollabNet.Subversion is open source software see http://subversion.tigris.org/This product includes software developed by CollabNet http://www.Collab.Net/.The followingrepository back-end FS modules are available: fs_fs : Module for working with a plain file FSFSrepository.2. svn 配置建立版本库目录,可建多个:mkdir -p /opt/svndata/repos1mkdir -p /opt/svndata/repos2建立版本库:svnadmin create /opt/svndata/repos1svnadmin create /opt/svndata/repos2修改版本库配置文件:版本库 1:vi /opt/svndata/repos1/conf/svnserve.conf内容修改为:generalanon-
access noneauth-
access writepassword-db /opt/svn/conf/pwd.confauthz-db /opt/svn/conf/authz.confrealm repos1版本库 2:vi /opt/svndata/repos2/conf/svnserve.conf 内容修改为:generalanon-
access noneauth-
access writepassword-db /opt/svn/conf/pwd.confauthz-db /opt/svn/conf/authz.confrealm repos2即除 realm repos2 外,其他与版本库 1 配置文件完全相同。
如果有更多的版本库,依此类推。
配置允许访问的用户:vi /opt/svn/conf/pwd.conf为了简化配置,2 个版本库共用 1 个用户配置文件。
如有必要,也可以分开。
注意:对用户配置文件的修改立即生效,不必重启 svn。
文件格式如下:users 其中,users是必须的。
下面列出要访问 svn 的用户,每个用户一行。
示例:usersalan passwordking hello配置用户访问权限:vi /opt/svn/conf/authz.conf为了简化配置,3 个版本库共用 1 个权限配置文件/opt/svn/conf/pwd.conf。
如有必要,也可以分开。
文件中定义用户组和版本库目录权限。
注意: 权限配置文件中出现的用户名必须已在用户配置文件中定义。
对权限配置文件的修改立即生效,不必重启 svn。
用户组格式:groups 其中,1 个用户组可以包含 1 个或多个用户,用户间以逗号分隔。
版本库目录格式::/项目/目录 其中,方框号内部分可以有多种写法:/表示根目录及以下。
根目录是 svnserve 启动时指定的,我们指定为/opt/svndata。
这样,/就是表示对全部版本库设置权限。
repos1:/表示对版本库 1 设置权限repos2:/occi 表示对版本库 2 中的 occi 项目设置权限repos2:/occi/aaa 表示对版本库 2 中的 occi 项目的 aaa 目录设置权限 权限主体可以是用户组、用户或,用户组在前面加,表示全部用户。
权限可以是 w、r、wr 和空,空表示没有任何权限。
示例:groupsadmin alan/admin rwrepos1:/occi/aaaking rwrepos2:/passking 删除无用文件:rm /opt/svndata/repos1/conf/authzrm /opt/svndata/repos1/conf/passwdrm /opt/svndata/repos2/conf/authzrm /opt/svndata/repos2/conf/passwd3. 启动 svn建立启动 svn 的用户:useradd svnpasswd svn根据提示为用户 svn 设置密码允许用户 svn 访问版本库:chown –R svn:svn /opt/svndatachown –R svn:svn /opt/data 启动 svn:su - svn -c svnserve -d --listen-port 9999 -r /opt/svndata其中:su – svn 表示以用户 svn 的身份启动 svn-d 表示以 daemon 方式(后台运行)运行--listen-port 9999 表示使用 9999 端口,可以换成你需要的端口。
但注意,使用 1024 以下的端口需要 root权限-r /opt/svndata 指定根目录是/opt/svndata 检查:ps –efgrep svnserve 如果显示如下,即为启动成功:svn 6941 1 0 15:07 00:00:00 svnserve -d --listen-port 9999 -r/opt/svndata 参考资料:http://www.gbunix.com/htmldata/2006_07/15/27/article_1337_1.htmlhttp://www.iusesvn.com/bbs/thread-157-1-1.htmlhttp://16hot.blog.isyi.com/post/1/552检测服务是否开启:netstat -ntlp 如果看到 3690 的端口正常开放了,证明 SVN 启动了。
下面是机器上的端口显示:Active Internet connections only serversProto Recv-Q Send-Q Local Address Foreign Address StatePID/Program nametcp 0 0 0.0.0.0:32769 0.0.0.0: LISTEN2611/rpc.statdtcp 0 0 0.0.0.0:111 0.0.0.0: LISTEN2591/portmaptcp 0 0 0.0.0.0:113 0.0.0.0: LISTEN2827/xinetdtcp 0 0 127.0.0.1:631 0.0.0.0: LISTEN4860/cupsdtcp 0 0 127.0.0.1:25 0.0.0.0: LISTEN2846/sendmail: accetcp 0 0 :::3690 ::: LISTEN5513/svnservetcp 0 0 :::22 ::: LISTEN2812/sshd下面这个就是了:tcp 0 0 :::3690 ::: LISTEN5513/svnserve好了svn 已经架起来了在 Linux/Apache 2.2 上配置 SVN 服务器准备,下载所需要文件.检查已安装的 Apache2 是否已经安装了 mod_dav .编译 SVN,遇到的问题和解决方法使用 默认文件系统fsfs 保存数据使用 Berkeley DB 保存数据配置 Apache 和 SVN,测试.其它小结从 Windows 平台上数据转移配置文件使用其支持对文件中的 Id 标签每次提交的时候自动更新版本信息.基于路径的权限控制常用 SVN 命令相关资源 准备,下载所需要文件.本文测试环境:ubuntu 6.06 LTS kernel 2.6.15-25-k7,gcc-4.0.3 /ubuntu server 2.6.15-26-servergcc-4.0.4Subversion 1.3.2Apache 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,否则即使编译通过了 svnapache 也会启动不起来.如何编译 Apache 请参考我另外一篇文章. 编译 SVN,遇到的问题和解决方法.使用默认的文件系统保存数据.最终完整通过安装和测试的编译参数为:./configure --with-apxs/usr/local/apache2/bin/apxs --with-apr/home/src/server/httpd-2.2.2/srclib/apr --with-apr-util/home/src/server/httpd-2.2.2/srclib/apr-utilmakemake install 其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹,根据实际情况调整一下.◆遇到问题:1 --with-apr 和 --with-apr-util 如果没有加上的话,即使编译成功了也会出现 Cant set positionpointer 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 wasinstalled 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 安装 BerkeleyDBcd /usr/local/srcwget http://downloads.sleepycat.com/db-4.3.29.tar.gztar xzvf db-4.3.29.tar.gzcd /usr/local/src/db-4.3.29/build_unix../dist/configure --enable-compat185makemake install2 更新 apr 和 apr-util 源代码 清理编译后的.la 文件cd /usr/local/src/httpd-2.2.3make cleancd /usr/local/src/subversion-1.3.2rm -rf aprrm -rf apr-utilcp -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-sslmakemake install◆ 遇到问题:1 BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误.configure: error: APR-UTIL wasinstalled independently it won’t bepossible 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 虽然能编译过去。
但在 svncheckout 的时候会提示 svn: REPORT request failed on ‘/svn/vcc/default’svn: REPORT of ‘/svn/vcc/default’: Could not read status line: connection was closed byserver.这个问题困扰了我很长时间,Google 和官方论坛都无结果。
后来昨天竟然自己无意中解决了,感动的得哭了: 配置Apache 和 SVN,测试成功编译 svn 后会在 httpd.conf 中自动加上 LoadModule dav_svn_module modules/mod_dav_svn.soLoadModule authz_svn_module modules/mod_authz_svn.so两个模块,没有的话,自行加上或检测是否真的编译成功.假设我们现在要将一个名为 Lair 的项目导入到 SVN 中 1. Apache 的配置在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入DAV svnSVNPath /home/svn/Lair可以参考以下 apache 的配置,实现数据加密传输,用户身份验证.Listen 443AddTypeapplication/x-x509-ca-cert .crtAddType application/x-pkcs7-crl .crl.SSLPassPhraseDialog exec:/etc/sendsslpwdSSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache512000SSLSessionCacheTimeout 300SSLMutex file:/usr/local/apache2/logs/ssl_mutexDocumentRoot /var/SVNRootServerName svn.yousite.com:443ServerAdmin webmasteryousite.comDAV svnSVNPath /var/SVNRootAuthzSVNAccessFile /etc/svnserve.confSatisfy AnyAuthType BasicAuthName “yousite SVN Repository”AuthUserFile /etc/httpd-passwords.txtRequire valid-userSSLEngine onSSLCipherSuite ALL:ADH:EXPORT56:RC4RSA:HIGH:MEDIUM:LOW:SSLv2:EXP:eNULLSSLCertificateFile /etc/ssl/server.crtSSLCertificateKeyFile /etc/ssl/server.key更详细的配置说明文档http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html2. 配置,并且测试 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 如能看到一个你项目录列表,说明您成功了。
其它小结数据转移:从 Windows 平台 SVN 服务器转移如果 windows svn 储存的格式也是 dbd 的话,直接将 SVN 的文件夹 copy 过来即可.然后执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏.最后注意权限确保 db 目录下的所有文件可写。
chmod 755 dbchmod 666 db/否则 checkout 时出现以下错误,多数是因为文件或者目录权限问题引起的,可以尝试用 chown 或者chmod 命令修改一下权限Could not open the requested SVNfilesystemCould not open the requested SVN filesystem另外一种方法没有测试过,原理大致和 mysqldump 一样,将 svn 导出为文本文件,然后重新导入,好处是可以避免因为存储格式不同而导致的数据转移困难。
dump data to fileassuming a repo c:repo:svnadmin dump c:repo c:repo.txt Copy the file over to linux:mkdir /reposvnadmin create /reposvnadmin load /repo /repo.txt设置访问控制当 httpd.conf 中 设置 AuthzSVNAccessFile 时,可以设置不同用户对不同目录的访问控制.以下是一个例子.groupsroot admin.rootweb user1user2soft user3user4/root rw/wwwweb rw/softsoft rw 详细的说明文档:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html配置文件,使用其支持对文件中的 Id 标签每次提交的时候自动更新版本信息自动属性.Windows: C:Documents and SettingsUSERNAMEApplication DataSubversionconfigLinux : .subversionconfigmiscellanyenable-auto-props yesauto-props.phpsvn:keywordsId.htmlsvn:keywordsId 关于自动属性的更高级讨论■ 几条常用 svn 命令svn updatesvn add “filename”svn commit———————–Change Log:2006-08-14 neon 库 subversion 已经自带不需要在单独安装添加-with-ssl 即可使用 svn 对 ssl 支持.2006-08-10 补充自动属性的说明.2006-08-08 加入关于目录访问验证的说明.2006-08-07 httpd2.2.3 测试依然有效,解决 bdb 数据库的支持问题,添加从 Windows 到 Linux 下的数据转移方案。
2006-07-25 看到到.声仔对 Can’t set position pointer in file 另一种解决方案我当时也测试了,好像没有成功。
不想用 apache 源代码编译的朋友可以也测试一下 Linux 下 svn 搭建配置流程一、 源文件编译安装。
源文件共两个,为:1. 下载 subversion 源文件 subversion-1.6.1.tar.gzhttp://d136.d.iask.com/fs/800/1/187a3087a49b71b42ba4d4a300b6278746011506/gz/subversion-1.6.1.tar.gz2. 下载 subversion 依赖文件 subversion-deps-1.6.1.tar.gzhttp://d136.d.iask.com/fs/800/1/48f59892a78763e7215ae94628c7e97f46011512/gz/subversion-deps-1.6.1.tar.gz注意:两个文件版本必须一致否则很容易产生问题.二、 解压文件,并编译配置 subversion1.解压文件rootDB2 tfhudong tar zxf subversion-1.6.1.tar.gz rootDB2 tfhudong tar zxfsubversion-deps-1.6.1.tar.gz注意:务必将两个文件解压到相同的目录下,否则会产生下面提到过的问题。
2.进入解压后的 subversion 目录rootDB2 cd /usr/local/subversion-1.6.1/3.创建安装目录rootDB2 subversion-1.6.1 mkdir /usr/local/svn4.编译安装 subversion(1)./configure --prifix/usr/local/svnsvn 有两种模式,一种 FSFS 为默认模式,另一种为 BDB 模式,建议使用 FSFS。
如果出现错误:configure: error: no suitable apr found则是因为上面的依赖文件没有减压到相同目录下导致。
。
。
(2)编译 安装 rootDB2 subversion-1.6.1 makerootDB2 subversion-1.6.1 make install(3)测试安装是否成功rootDB2 subversion-1.6.1 /usr/local/subversion/bin/svnserve --versionsvnserve,版本 1.6.1 r37116 编译于 Mar 4 2011,10:07:53(4)可以将命令添加到环境变量vi /etc/profile写入如下两句PATHPATH:/usr/local/subversion/binexport PATHsource /etc/profile5.做到这里基本 svn 的安装就 ok 了,下面我们来配置 svn 吧三、 配置 svn1.建立版本库目录(这个和安装目录请区分开,以下讲的是版本库)rootDB2 subversion-1.6.1 mkdir -p /opt/svndata/game2 建立 svn 版本库rootDB2 subversion-1.6.1 svnadmin create /opt/svndata/game/执行此命令后 svn 自动在 repos 目录下添加必须的配置文件.rootDB2 subversion-1.6.1 ls /opt/svndata/game/conf db format hooks locks README.txt注意:版本库不同于一般的文件夹 直接在操作系统上新建文件无法被 SVN 识别 必须使用import 等命令将文件导入版本库.此为 svn 内部指令,create 用于新建版本库。
请使用 svnhelp 查看详细说明。
3 修改版本库配置文件rootDB2 conf vi /opt/svndata/game/conf/svnserve.conf各参数功能在配置文件的注释中有说明 此处配置如下:generalanon-
access none 使非授权用户无法访问auth-
access write 使授权用户有写权限password-db passwd 指明密码文件路径authz-db authz 访问控制文件realm /opt/svndata/game 认证命名空间,subversion 会在认证提示里显示,并且作为凭证缓存的关键字。
其它采用默认配置. 各语句都必须顶格写 左侧不能留空格 否则会出错.指令简介:这是 svn 配置文件的格式,请按照以上格式书写。
4 配置用户rootDB2 conf vi /opt/svndata/game/conf/passwd插入如下内容usershaifeng 123456game 123456可以添加多个,此为用户名密码对。
5 配置权限rootDB2 conf vi /opt/svndata/game/conf/authz插入以下内容/haifeng rwgame r列出对各用户的授权。
包括只读 r,读写 rw。
没有列出的用户,则不允许访问。
还可以对用户分组,具体请参考 svn 手册6 启动 svn 服务rootDB2 conf svnserve -d -r /opt/svndata/game/指令简介:此指令用于启动 svn 服务,-d 指明以守护模式运行,svn 自动在 3690 端口监听。
3690 是默认端口,可以使用“--listen-port”或者“--listen-host”来指定其它端口。
-r 选项用来指定 svn 服务的根目录,这样用户就可以使用相对路径访问,而不用提供完整路径。
7. 检查端口rootDB2 conf netstat -ntlpgrep 3690tcp 0 00.0.0.0:3690 0.0.0.0: LISTEN 15087/svnserve到此 svn 搭建配置完毕,可以在客户端进行连接使用。
8.验证1) 先导入文件夹 import2) 输入账户名密码3) Svn 检出目录4)svn 添加成功