Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3013683
  • 博文数量: 454
  • 博客积分: 4860
  • 博客等级: 上校
  • 技术积分: 6375
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 10:08
个人简介

10年工作经验,专研网站运维。

文章分类

全部博文(454)

文章存档

2017年(11)

2016年(13)

2015年(47)

2014年(36)

2013年(147)

2012年(64)

2011年(136)

分类:

2011-04-22 22:37:47

原文地址:red hat安装svn 作者:matchless

-1、安装openssl

./config  --prefix=/usr/local/openssl
make
make install

0、安装apache2
#重新编译apache时,加上特别的参数 --with-apr,如果是第一次安装,可以不需要这个参数
#如果不加上dav等参数,无法load mod_dav_svn.so等
#如果不加上ssl,也不可启用ssl验证

./configure --enable-dav --enable-dav-fs --enable-so --enable-ssl --with-apr-util=/usr/local/apr-util --enable-dav-lock --with-ssl=/usr/local/openssl

make
make install

(1)
/usr/local/apache2/bin/apachectl -k start // 启动 apahce
/usr/local/apache2/bin/apachectl -k stop // 停止 apache

(2)

/usr/local/apache2/bin/apachectl -k restart

(3)

/usr/local/apache2/bin/apachectl graceful       (推荐)

# 配置Subversion需要 --with-apxs=/usr/local/apache2/bin/apxs


1、Berkeley DB(非必须,安装OpenLDAP时,需要这个数据库
地址:

Subversion的库有两个模式,一个BDB,一个事Fs,即文件模式,通常我们建库都会使用fs模式,这也是默认的模式。 

../dist/configure --prefix=/usr/local/berkeley-db

make
make install

  
2、安装apr和apr-util
下载地址

./configure
make
make install

# configure的时候不指定路径的话默认是安装到/usr/local/下

# 下面这步要把berkeley数据库一起编译进去,否则berkeley就白装了,如果没有 安装BDB,就不需要--with-berkeley

./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-berkeley-db=/usr/local/berkeley-db

make
make install

3、安装sqlite3.6.14

#Subversion-1.6.0版本需要Sqlite,版本要3.4以上,我用的是3.6,Redhat E5默认安装3.3,很容易引起错误,可用以下命令查看:

rpm -qa | grep sqlite

亦可以用rpm 强制删除已安装的sqlite,卸载后,可能引起其它工具无法使用,比如rpm,它也是依赖sqlite才能运行,可能会很麻烦。我第一次安装时,就出了这麻烦,不记得怎么解决的了。

. SQLite 3.x or newer (REQUIRED for client and server)

SQLite is a lightweight, embeddable SQL library necessary to
build any repository-related code.

You can get sqlite 3.5.4 from:



SQLite must be built in thread-safe mode (with 'configure
--enable-threadsafe'). If building SQLite yourself, you
have the option of unpacking the archive into the top of the
Subversion source tree and renaming the resulting directory
within the Subversion source code from ./sqlite-3.5.4/ to
./sqlite/. Subversion will then build and install it for
you.

./configure --enable-threadsafe --disable-tcl --prefix=/usr/local/sqlite3.6

make
make install


4、neon-0.25这个版本可以用,高版本有错误,

如果不安装neon,访问http和https时出现下面错误:
svn: Unrecognized URL scheme


ra_dav:模块,才能访问https和http
ra_local:file:///
ra_svn:svn://

需要--with-ssl参数,否则使用SVN时,会出现下面错误:
svn: SSL is not supported


./configure --prefix=/usr/local/neon --with-ssl
make
make install


5、安装subversion
./configure --with-apxs=/opt/oss/sbin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --with-sqlite=/usr/local/sqlite3.6 --with-neon=/usr/local/neon

----另一种 配置apxs的

./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util  --with-berkeley-db=/usr/local/berkeley-db --with-sqlite=/usr/local/sqlite3.6

如果berkeley报错的不要了

./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util   --with-sqlite=/usr/local/sqlite3.6

make
make install

#装完后用svnadmin –version查看下是否有信息,有的话说明安装成功



6、配置            
首先创建一个repository            
svnadmin create /home/svn/projectname            

把/home/svn/projectname/conf/passwd, /home/svn/projectname/conf/svnserve.conf, /home/svn/projectname/hooks/control-file里的参数配置一下
passwd里放的是每个用户名和密码              
svnserve.conf里放的是关于匿名和非匿名用户的权限              
control-file里放的是具体到每个文件夹,每个用户的读写权限

再来要打开subversion的端口,subversion默认端口是3690            
su - root -c "svnserve -d -r /home/svn/projectname"

命令执行后可以用            
ps -ed | grep svnserve            
查看svnserve服务是否已经启动

还可以用            
netstat -ant | grep 3690            
查看3690端口是否已经被监听

7、导入资源

首先把当前路径设置到放代码的路径,比如说

/home/htdocs/projectname

然后执行

svn import svn://localhost/projectname -m "projectname"

等命令行重新出现后就完成了。


8、Check out

从客户端把代码check out。

三、在apache中配置SVN

      vi /usr/local/apache2.2.9/conf/httpd.conf

     ① 如果你看到如下两句,说明安装是成功的

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

      如果有下面一句就用#注释掉

      #LoadModule foo_module modules/mod_foo.so

     
② 定义apache访问svn配置:

DAV svn
#      SVNPath /opt/svndata
SVNParentPath /opt/svndata
AuthzSVNAccessFile /opt/svn/conf/authz.conf
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /opt/svn/conf/passwd.conf
Require valid-user

我使用的httpd.conf配置

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

DAV svn
# SVNPath /opt/app/svn/repos/
SVNParentPath  /opt/app/svndata/
SVNListParentPath on
AuthzSVNAccessFile /opt/app/svndata/conf/authz
#       AuthzSVNAccessFile /opt/app/svndata/conf/svn-auto-file
#        Satisfy Any
#       
Require valid-user
#       

AuthType Basic
AuthName "Subversion repository"
AuthUserFile  /opt/app/svndata/conf/svn-auto-file

CustomLog logs/svn_logfile "%t %u %{SVN-ACTION}e" env=SVN-ACTION

#############

/opt/app/svndata/conf/authz 文件的配置如下:

[groups]
admin=svnuser,dhj
[/]
*=r
@admin=rw
[dhj:/trunk]
svnuser = rw
* = r

四、配置svn

      ①建立svn版本库目录

      mkdir -p /opt/svndata/repos #可以多建版本库目录

      ②建立svn版本库

      svnadmin create /opt/svndata/repos

      mkdir -p /opt/svndata/repos #可以多建版本库

      ③建立本地访问控制文件

      /usr/local/apache2.2.9/bin/htpasswd -c /opt/svn/conf/passwd.conf username

      然后输入密码即可,默认是MD5加密的

      /usr/local/apache2.2.9/bin/htpasswd /opt/svn/conf/passwd.conf username1 #追加用户

      ④建立本地项目控制文件

      touch /opt/svn/conf/authz.conf

      本例authz.conf内容为:

     

      [groups]
#=,
admin=username

      #[:projectName/directory]
>
#=

      [/]
@admin = rw      #指定用户组成员可以读写根目录所有应用

      [repos:/abc/aaa]
username1= rw      #指定用户username1可以读写:/abc/aaa目录的文件

-----其他的配置

2)权限分配(可以根据自己的情况来处理,也可看网上的)
# vi /home/svnroot/repository/authz.conf
[groups] //这个表示群组设置
Tester = test,svnroot,nbj,user1,user2 //这个表示某群组里的成员
#anonymous = guest
[test:/] //这表示,仓库test的根目录下的访问权限
@Tester = rw //test仓库Tseter组中用户具有读和写权限
* = r //test仓库中所有用户具有读的权限
[document:/] //这表示,仓库document的根目录下的访问权限
@Tester = rw //test仓库Tseter组中用户具有读和写权限
#@anonymous = r
* = r //test仓库中所有用户具有读的权限
//注意:在编辑authz.conf文件时,所有行都必须要顶头写,不能有缩行出现,否则会报错:"Access denied: 'user1' "。

目前对apache下的svn权限管理做了优化配置,用户密码采用加密模式,安全性要比以前好了。apache下的svn用户信息保存在/data /svn/passwd_dav.conf中,如果需要添加修改用户和密码,请IT部管理人员使用apache的htpasswd工具(例如:/usr /local/apache2/bin/htpasswd /data/svn/passwd_dav.conf username这样的命令)。 用户访问控制文件保存在/data/svn/authz_dav.conf,我已经把以前沿用的策略应用到其中,以前的用户密码照常使用,并且现在以用户 组的方式来管理权限,配置起来更加方便。 关于svn的安全配置都保存在passwd_dav.conf,authz_dav.conf这两个文件中 建立新目录 917 svnadmin create newdm_backend 930 chown -R daemon:daemon newdm_backend/

至此,整个安装过程完成了!

五、测试连接

     ① 启动apache

      /usr/local/apache2.2.9/bin/apachectl start

     ② 打开浏览器,输入 #本例服务器ip是192.168.1.107

      使用刚才创建的权限用户名与密码登录即可访问

      注意:在你上传文件的时候可能会有如下权限不足的提示

      Permission denied
svn: Commit failed (details follow):
svn: Can't create directory '/opt/svndata/repos/db/transactions/0-1.txn': Permission denied

      这是因为apache在线程用户没有权限访问svn的仓库,两者分别属于不同的用户者

      本例apache属于daemon拥有者,而svn仓库属于svn拥有者

      解决方法:

      chown -R daemon /opt/svndata/repos

      chmod -R 755 /opt/svndata/repos

    

       重启下apache:

       /usr/local/apache2.2.9/bin/apachectl stop

       /usr/local/apache2.2.9/bin/apachectl start

    3. “Could not open the requested SVN filesystem” errorcode=2

        如果出现这个错误你就得看一下Apache的httpd.conf文件里面相关版本库路径是不是正确,请确保使用的是绝对路径.

其他的配置参考

4 Svn配置

4.1 建立版本库目录

[root@localhost root] #mkdir –p /svn

svn是我自己建立的目录,各人根据具体情况设计名字

4.2 建立一个用户,用与管理这个版本库目录

[root@localhost root] #useradd -m -s /bin/bash lyl

lyl是建立的用户名,可以根据习惯改

4.3 用建立的用户管理我们刚建的版本库目录

[root@localhost root] #chown –R lyl.lyl /svn

用lyl来管理我们的版本库目录/svn

4.4 启动服务器

用用户lyl来管理版本库目录/svn,则须转为lyl,命令如下:

[root@localhost root] #su lyl

启动svn服务

[root@localhost root] #svnserve -d -r /svn/;

-d表示以daemon方式(后台运行)运行

-r/svn/指定根目录是/svn/

检查服务器是否启动正常:

[svn_leader@localhost root]$ ps –ef|grep svnserve

如果显示如下,即为启动成功:

lyl  6941   1 0 15:07 ?  00:00:00 svnserve -d --listen-port 9999 -r /svn

5 建立版本库

[root@localhost home]# cd /svn

[root@localhost svnrepos]# svnadmin create p1;

P1可以改,在p1目录下会有下面目录:conf dav db format hooks locks README.txt

6 配置允许访问test的用户

进入到conf,命令为:

[root@localhost safety]# cd conf

出现三个文件:authz passwd svnserve.conf

6.1 修改svnserve.conf

[root@localhost conf]# vi svnserve.conf

出现:

[general]

………………………

# anon-Access = read

# auth-access = write

………………………

# passWord-db = passwd

………………………

# authz-db = authz

内容修改为:

[general]

………………………

anon-access = none

auth-access = write

………………………

password-db = passwd

………………………

authz-db = authz

6.2 修改passwd

[root@localhost conf]# vi passwd

文件格式如下:

[users]

<用户1> = <密码1>

<用户2> = <密码2>

 其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示 例:

[users]

alan = password

king = hello

这个里面的user表示当前test版本库的成员.

6.3 修改authz

[root@localhost conf]# vi authz

用户组格式:

[groups]

<用户组名> = <用户1>,<用户2>

其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。用户必须要在 passwd文件里能找到,它是给那个里面的user赋权限.

版本库目录格式:

[/目录]

@<用户组名> = <权限>

<用户名> = <权限>

示例:

[groups]

admin = alan

[/]

@admin = rw

[/svn/p1/WebProject]

king = rw(表示king能够读写/svn/p1/WebProject目录下的所有信息)

[/svn/p1/web]

zp=r(表示zp能够读/svn/p1/web目录下的所有信息)

到此svn服务器的的安装和配置就已经完成了
阅读(3568) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~