Redhat E5上安装Subversion 1.6详解

-1、安装opensslITPUB个人空间 b w-R(k,a M }

8|:| t&J1t%R Z T0./config  --prefix=/usr/local/openssl
%d l D:U f I U0make
e ?-p N o)_,` P x0make install
q j U B h�t v0ITPUB个人空间7e o0@ o3u i6k
0、安装apache2ITPUB个人空间"I q X-A m
#重新编译时,加上特别的参数 --with-apr,如果是第一次,可以不需要这个参数
0E5h k8?7U4y9Q.e�q0#如果不加上dav等参数,无法load mod_dav_svn.so等
X w J$i | k�o q0#如果不加上ssl,也不可启用ssl验证ITPUB个人空间 S [$c y!V z s

0y K&r ?8h9T/W i$}0./configure --enable-dav --enable-dav-fs --enable-so --enable-ssl --with-apr-util=/usr/local/apr-util --enable-dav-lock --with-ssl=/usr/local/opensslITPUB个人空间"V ? w v Z(x Z-{%k
ITPUB个人空间.S L7o%W {
makeITPUB个人空间 P N z V R'S l.I
make install

(1)ITPUB个人空间 I&F S b,s l ])p ~'|
/usr/local/apache2/bin/apachectl -k start // 启动 apahceITPUB个人空间 W X L-~%z*H)M o
/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

ITPUB个人空间4Z D:e L a U'c$_
1、Berkeley DB(非必须,安装OpenLDAP时,需要这个)ITPUB个人空间 g"b8j7l"^/X x R
地址:http://download.oracle.com/berkeley-db/db-4.6.18.tar.gzITPUB个人空间 B r5k2X x7P)U l%S,{)p

u r#L ?3c7@0Subversion的库有两个模式,一个BDB,一个事Fs,即文件模式,通常我们建库都会使用fs模式,这也是默认的模式。 ITPUB个人空间 W i7[ x7F:B/H B ]

&C&I7V P I e b |4N%D f0ITPUB个人空间 q-c3J R:B../dist/configure --prefix=/usr/local/berkeley-db

make
e'w P u P&z w4a5m ^#z0make install
z P C M9d h0
0B V&}+k;w M0  
%B2X h D w [0S1L02、安装apr和apr-util
8y�S i+s } c0下载地址http://apr.apache.org/ITPUB个人空间 ] Z%u ^&}
ITPUB个人空间 U A$\ @ d {
./configureITPUB个人空间 d u$r!i;x;| I(V
makeITPUB个人空间 ] x b)Y ] d
make install

# configure的时候不指定路径的话默认是安装到/usr/local/下ITPUB个人空间0B H x5k9G,u m

# 下面这步要把berkeley数据库一起编译进去,否则berkeley就白装了,如果没有 安装BDB,就不需要--with-berkeleyITPUB个人空间!\&~ j H0z
ITPUB个人空间:e Y5} M Y"_5i D
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ --with-berkeley-db=/usr/local/berkeley-db

makeITPUB个人空间 j$Q j ^�{+h6o'@ I
make installITPUB个人空间%p,R P C T g
ITPUB个人空间0f:E | C Q u X p |$z
3、安装sqlite3.6.14ITPUB个人空间5f'N0h8` C9r8J Y _

#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:

http://www.sqlite.org/sqlite-3.5.4.tar.gz

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.

ITPUB个人空间 Z�L F-] F @9o }8m*_5^ I0H./configure --enable-threadsafe --disable-tcl --prefix=/usr/local/sqlite3.6

make
D7S ]4U w K:j)?0make install
*? r c f C { R0


T%@)~ v(?04、neon-0.25这个版本可以用,高版本有错误,

如果不安装neon,访问http和https时出现下面错误:
(v f1~ e7^#[!r0svn: Unrecognized URL scheme


X Q { ^ Y ? q {0ra_dav:模块,才能访问https和http
i;v d1d K0ra_local:file:///
{;r�s�Q6o p*R E c c0ra_svn:svn://
7z V&e W;y w'B0

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

o5h V;R V |.Z9L b"Q0
%G)K f W!| T M%]#k,k0./configure --prefix=/usr/local/neon --with-ssl
!U%j O5j ` B.q0makeITPUB个人空间4M _ K H-_ w
make install
`8^0a e T2j'?0ITPUB个人空间+I j:q h8r d'e-^!v D#A4U
ITPUB个人空间 b B @1E k3F9S2L z
5、安装subversionITPUB个人空间*? Y(u&?1Y+H b
./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/neonITPUB个人空间 | K6p d h C3I v

----另一种 配置apxs的
ITPUB个人空间 \'z0J K#V4A W

./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
Z Y E S s2L8{'?0make installITPUB个人空间 { \1z F L
ITPUB个人空间 |/D ] z \0K'a/p
#装完后用svnadmin –version查看下是否有信息,有的话说明安装成功ITPUB个人空间 a t9E!G m
ITPUB个人空间*n e J N U

h�w(B k K1r r2o ~0ITPUB个人空间 V;I D e'|-P ^9i-S
6、配置            
:I L0Z-| b f P*\4d S0首先创建一个repository            
&}*L B8\7{ ?0svnadmin create /home/svn/projectname            ITPUB个人空间 x2F f u.i+Z ? e U
ITPUB个人空间,g I u S%S.b1Y8{ k h
把/home/svn/projectname/conf/passwd, /home/svn/projectname/conf/svnserve.conf, /home/svn/projectname/hooks/control-file里的参数配置一下ITPUB个人空间 x ? H(u�V E
passwd里放的是每个用户名和密码              
D%X M e f0svnserve.conf里放的是关于匿名和非匿名用户的权限              
!F"d a x7o ^0control-file里放的是具体到每个文件夹,每个用户的读写权限
P#];Y ~ [0ITPUB个人空间 s C q E Z/B H'H r
再来要打开subversion的端口,subversion默认端口是3690            
c ` g k7D*j#D)@*m G0su - root -c "svnserve -d -r /home/svn/projectname"ITPUB个人空间2C n4_ R H ~(]
ITPUB个人空间'H M o*L h t ? L l:u0q
命令执行后可以用            ITPUB个人空间3A y'm(S-A/`3Z y+l
ps -ed | grep svnserve            ITPUB个人空间/E&u _ u E J%Z ^
查看svnserve服务是否已经启动ITPUB个人空间4V7B:X8k(t�j'e

Y v1m,V [%a \0还可以用            
A W6h;k.W E!_ _ z0netstat -ant | grep 3690            ITPUB个人空间 r H S,b�u!k!E
查看3690端口是否已经被监听
~;I ~;x {0ITPUB个人空间 q h W T4a ` I
7、导入资源
5N$c P s/N t0p0
I#l$O4f n/G O D7\ B4l d V0首先把当前路径设置到放的路径,比如说
*G y ?*I1j0ITPUB个人空间 h%C q8~/t H k V i t8c u
/home/htdocs/projectname
9A T#}6c O,L)i F0ITPUB个人空间 \ _4Y6@ B&J3?&}
然后执行ITPUB个人空间&X } e+u J @4V!V,X S

#k h i(j _ k0svn import svn://localhost/projectname -m "projectname"ITPUB个人空间 ?'H3Z:q u�c"} }6|
ITPUB个人空间3s b"L \3z5n R
等命令行重新出现后就完成了。
,S L n:o k l0
U C(o X u2n#R X E0ITPUB个人空间 A�y8}2c2t9E e }"` d9R d
8、Check out
2} g�y B F `)k u0
P&n x0} N0从客户端把代码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配置:
<Location /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
</Location>

我使用的httpd.conf配置

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
<Location /svn>
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
#        <LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#        </LimitExcept>
AuthType Basic
AuthName "Subversion repository"
AuthUserFile  /opt/app/svndata/conf/svn-auto-file
</Location>
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]
#<groupname1>=<username1>,<username2>
admin=username

      #[<versionLib>:projectName/directory]
>
#<username>=<authorities>

      [/]
@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

     ② 打开浏览器,输入http://192.168.1.107/svn/repos #本例服务器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]是必须的。下面列出要访问svn的用户,每个用户一行。示 例:

[users]

alan = password

king = hello

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

6.3 修改authz

[root@localhost conf]# vi authz

用户组格式:

其中,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服务器的的安装和配置就已经完成了
原文地址:https://www.cnblogs.com/danghuijian/p/4400374.html