Linux下搭建高效的SVN

来源:互联网 发布:对舒国滢的评价 知乎 编辑:程序博客网 时间:2024/06/15 04:27

第一种安装方式:

svn下载:http://archive.apache.org/dist/subversion/



需要的包

yum install gcc gcc-c++

yum install expat-devel

yum install openssl-devel


http://labs.renren.com/apache-mirror//httpd/httpd-2.2.22.tar.gz//最好用2.2版本

http://subversion.tigris.org/downloads/subversion-1.6.18.tar.gz

http://subversion.tigris.org/downloads/subversion-deps-1.6.18.tar.gz


subversion-1.6.18.tar.gz  、subversion-deps-1.6.18.tar.gz   这两个文件版本要是一样的,也要放在一个目录下,分别解压这两个文件。

解压这三个文件

tar zxvf httpd-2.2.22.tar.gz

tar zxvf subversion-1.6.18.tar.gz

tar zxvf subversion-deps-1.6.18.tar.gz

注:解压 subversion-deps-1.6.18.tar.gz 时, 会把这个文件解压到subversion-1.6.18文件夹下

下载地址:

httpd-2.2.22.tar.gz  下载地址:http://download.csdn.net/detail/yelang_110/8529403

subversion-1.6.18.tar.gz  下载地址:http://download.csdn.net/detail/yelang_110/8534379

subversion-deps-1.6.18.tar.gz  下载地址:http://download.csdn.net/detail/yelang_110/8534393

安装httpd

[root@localhost ~]# cd httpd-2.2.22

[root@localhost ~]# ./configure --enable-dav --enable-so --prefix=/usr/local/httpd

[root@localhost ~]# make && make install

[root@localhost ~]# /usr/local/httpd/bin/httpd -l//查看下是不是有 mod_dav.c 、mod_so.c 两个模块


安装subversion 并关联httpd

[root@localhost ~]# ./configure --with-apxs2=/usr/local/httpd/bin/apxs --prefix=/usr/local/svn

[root@localhost ~]# make && make install


注:这里出错:

 checking for xml2-config… no

 configure: error: no XML parser was found: expat or libxml 2.x required

[root@localhost ~]#yum install expat-devel


checking for openssl/opensslv.h... no

configure: error: We require OpenSSL; try --with-openssl

[root@localhost ~]#yum install openssl-devel


[root@localhost ~]# ls /usr/local/httpd/modules/

mod_authz_svn.so  mod_dav_svn.so//这里会多这两个文件


[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so//httpd配置文件里也会多这两行配置


[root@localhost ~]# /usr/local/svn/bin/svnadmin create /usr/local/repos//

[root@localhost ~]# chown -R daemon:daemon /usr/local/repos/

[root@localhost ~]# chmod -R 700 /usr/local/repos/


//修改配置文件 最后一行添加

[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf

<Location /repos>

  DAV svn

  SVNPath /usr/local/repos

</Location>


启动httpd

[root@bogon bin]# ./apachectl start

httpd: apr_sockaddr_info_get() failed for bogon

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

如果报这个错就修改hosts

vim /etc/hosts

把bogon主机名(hostname查询主机名)添加到 127.0.0.1 后面就不报错了

测试


svn认证文章:

http://topinking.iteye.com/blog/342831


认证选项

1、基本 HTTP 认证

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

创建用户文件:

htpasswd -c -m /usr/local/httpd/conf/passwordfile username


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

htpasswd [-m] /usr/local/httpd/conf/passwordfile Newusername


更改用户密码:

htpasswd [-m] /usr/local/httpd/conf/passwordfile username


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

htpasswd –D /usr/local/httpd/conf/passwordfile username


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

<Location /repos>

  DAV svn

  SVNPath /usr/local/repos


  AuthType Basic

  AuthName "svn repos"

  AuthUserFile /usr/local/httpd/conf/passwordfile

  Require valid-user

</Location>

说明:

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

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

AuthUserFile E:/usr/Apache2.2/bin/passwd:指定E:\usr\Apache2.2\bin\passwd为用户文件,用来验证用户的用户名及密码。

Require valid-user:限定用户只有输入正确的用户名及密码后才能访问这个路径,Require user abc sli" 将只有用户文件中的 abc 和 sli 两个文件夹可以访问该版本库。


如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替 SVNPath,例如在 e:\svn 下有多个版本库 repos1,repos2 等等,用如下方式指定:

<Location /repository>

        DAV svn

        SVNParentPath e:/svn

</Location>

“SVNParentPath e:/svn ” 表示 e:\svn 下的每个子目录都是一个版本库。可以通过 http://服务器IP/repository/repos1,http://服务器IP/repository/repos2 来访问。


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

<LimitExcept GET PROPFIND OPTIONS REPORT>

  require valid-user

</LimitExcept>

以上配置将使匿名用户有读取权限,而限制只有 passwd 中配置的用户可以使用写操作。



2、严格的权限控制(本人整理)

1.新建版本库

[root@localhost ~]# /usr/local/svn/bin/svnadmin create /usr/local/repos//

[root@localhost ~]# chown -R daemon:daemon /usr/local/repos/

[root@localhost ~]# chmod -R 700 /usr/local/repos/

删除版本库自带的密码文件,权限控制文件

[root@localhost ~]# rm -fr /alidata1/repos/conf   


2.httpd.conf,在 Location 标签中加入如下内容:

<Location /repos>

  DAV svn

  SVNPath /alidata1/repos


  AuthType Basic

  AuthName "svn repos"

  AuthUserFile /alidata1/httpd/conf/passwordfile

  AuthzSVNAccessFile /alidata1/httpd/conf/authz

  Require valid-user

</Location>

AuthzSVNAccessFile 就是 /alidata1/repos 库的权限控制文件,AuthUserFile 是密码控制文件。


3.创建用户名跟密码

创建用户文件:

htpasswd -c -m /usr/local/httpd/conf/passwordfile username


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

htpasswd [-m] /usr/local/httpd/conf/passwordfile Newusername


4.修改权限控制文件

[groups]

@t1=a,b,c

@t2=e,d

[/]//必须添加一条根目录,并且所有用户都能读取,不然用户登录不了

*=r

[/aa]

@t1=rw//对根目录下面的aa文件夹,a,b,c 这三个用户可以读写

@t2=//注意后面是空(不写任何数据),表示e,d 这两个用户对aa文件夹没有任何权限,也不能看见aa文件夹






3、用 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 配置如下:


<Location /repository>

  DAV svn

  SVNParentPath e:/svn

            

  # our access control policy

  AuthzSVNAccessFile E:/usr/Apache2.2/bin/accesspolicy.conf

            

  # try anonymous access first, resort to real 

  # authentication if necessary.

  Satisfy Any

  Require valid-user

            

  # how to authenticate a user

  AuthType Basic

  AuthName "Subversion repository"

  AuthUserFile E:/usr/Apache2.2/bin/passwd                  

</Location>


AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定。访问文件 accesspolicy.conf 的语法与svnserve.conf和 Apache 的配置文件非常相似,以(#)开头的行会被忽略;在它的简单形式里,每一小节命名一个版本库和一个里面的路径;认证用户名是在每个小节中的选项名;每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到或者值留空,访问是不允许的; * 表示所有用户,用它控制匿名用户的访问权限;@符号区分组和用户。如:

[groups] 

committers = paulex, richard

developers = jimmy, michel, spark, sean


[/] 

* = r 

@committers = rw 


[/branches/dev] 

@developers = rw 


[/tags] 

tony = rw 

[/private] 

* = 

@committers= r


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

[groups] 

project1_committers = paulex, richard

project2_committers = jimmy, michel, spark, tony, Robert


[repos1:/] 

* = r 

@ project1_committer = rw 


[repos2:/] 

* = r 

@ project2_committer = rw


这样 repos1的 project1_committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样 repos2 的 project2_commiter 组也不能修改 repos1 版本库的文件。


====================================================================================================================


4、svn迁移

1. 将原来的Repository导出为一个文件dumpfile 

> svnadmin dump F:\repository\test > test


2. 创建新的Repository, 可以用工具创建 也可以用命令创建


3. 将dumpfile导入到新的Repository

> svnadmin load  D:\repository\test  < test


本机SVN的快速迁移方法:

svnadmin hotcopy old_rep_path new_rep_path


====================================================================================================================



第二种安装方式:


安装subversion-1.7.6.tar.gz版本

下载apache运行环境依赖的包

1.apr包,下载地址:http://apr.apache.org/download.cgi 

这边我下载的是 apr-1.4.6.tar.gz,放置在路径/root/dir_install/apr-1.4.6.tar.gz

tar zxvf apr-1.4.6.tar.gz 进行解压,生成apr-1.4.6

cd apr-1.4.6

./configure --prefix=/usr/local/apr

make && make install 

安装完毕后,可以验证/usr/local/apr是否存在


问题:

安装apr报错rm: cannot remove `libtoolT': No such file or directory 解决方案

直接打开/usr/local/src/apr-1.4.6/configure  把 $RM "$cfgfile" 那行删除掉  (30048)

$RM "$cfgfile"  大约在 42302 行

然后再重新运行  ./configure  --prefix=/usr/local/apr  就可以了


2.apr-uitil包,下载地址:http://apr.apache.org/download.cgi 

这边我下载的是apr-util-1.4.1.tar.gz,放置路径/root/dir_install/apr-util-1.4.1.tar.gz 

tar zxvf apr-util-1.4.1.tar.gz进行解压,生成apr-util-1.4.1 

cd apr-util-1.4.1 

./configure --prefix=/usr/local/apu --with-apr=/usr/local/apr/bin/apr-1-config

make && make install 

安装完毕后,可以验证/usr/local/apu是否存在


3.neon包,下载地址:http://www.webdav.org/neon/ 

这边我下载的是neon-0.29.6.tar.gz,放置路径/root/dir_install/neon-0.29.6.tar.gz 

tar zxvf neon-0.29.6.tar.gz进行解压,生成neon-0.29.6 

cd neon-0.29.6 

./configure --prefix=/usr/local/neon

make && make install 

安装完毕后,可以验证/usr/local/neon是否存在


4.pcre包,http://pcre.org/

tar zxvf pcre-8.12.tar.gz

cd  pcre-8.12

./configure --prefix=/usr/local/pcre

make && make install 

安装完毕后,可以验证/usr/local/pcre是否存在



1.安装apache,下载地址http://httpd.apache.org/

这边我下载的是httpd-2.4.1.tar.gz,放置路径/root/dir_install/httpd-2.4.1.tar.gz 

tar zxvf httpd-2.4.1.tar.gz进行解压,生成httpd-2.4.1 

cd httpd-2.4.1 

./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apu/bin/apu-1-config  --with-neon=/usr/local/neon/bin/neon-config --with-pcre=/usr/local/pcre/bin/pcre-config --enable-dav --enable-so -enable-maintainer-mode -enable-rewrite

make && make install


2.安装subversion-1.7.6.tar.gz

tar zxvf subversion-1.7.6.tar.gz

解压sqlite-amalgamation-3071602.zip文件把 sqlite3.c 拷贝到subversion-1.7.6下sqlite-amalgamation文件夹下,如果sqlite-amalgamation文件夹不存在手动创建个

./configure --with-apxs=/usr/local/httpd/bin/apxs --prefix=/usr/local/svn --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apu/bin/apu-1-config  --with-neon=/usr/local/neon/bin/neon-config --with-ssl

make && make install


安装完成后验证

[root@localhost ~]# ls /usr/local/httpd/modules/

mod_authz_svn.so  mod_dav_svn.so//这里会多这两个文件


[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf    //如果这里没有就手动加上

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so


报错:

# svnserve --version

svnserve: symbol lookup error: /usr/local/svn/lib/libsvn_subr-1.so.0: undefined symbol: apr_atomic_xchgptr


而subversion要求较高的版本,为此,我们需要删除系统自带的apr,apr-util这两个包!强行删掉! 

# rpm -e --allmatches apr-util

error: Failed dependencies:

libaprutil-1.so.0()(64bit) is needed by (installed) subversion-1.4.2-4.el5_3.1.x86_64

libaprutil-1.so.0()(64bit) is needed by (installed) httpd-2.2.3-31.el5.centos.x86_64

libaprutil-1.so.0 is needed by (installed) subversion-1.4.2-4.el5_3.1.i386

# rpm -e --allmatches apr-util --nodeps

# rpm -e --allmatches apr --nodeps

不然svn的命令报错


启动apache的时候报错

/usr/local/http/bin/apachectl start

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.171.251.9. Set the 'ServerName' directive globally to suppress this message

修改http.conf 文件

搜索"#ServerName" 修改为 ServerName localhost:80


至此安装完成。


====================================================================================================================

















本文出自 “ghost” 博客,请务必保留此出处http://fangwei009.blog.51cto.com/5234706/1624496

0 0
原创粉丝点击