首页 > 服务器 > Apache > Subversion Edge版本控制软件在CentOS 6.4 64bit上的安装
2014
05-22

Subversion Edge版本控制软件在CentOS 6.4 64bit上的安装

0. 概述

Collabnet Subversion Edge(下称Subversion Edge)集成了Apache, Subversion, ViewVC和一个Web管理界面。使得SVN的配置、使用、管理变得容易了许多。然而安装Subversion Edge也不容易。

软件版本

CentOS 6.4 x86_64 update to 20130729

CollabNet Subversion Edge 4.0.0

JDK jdk1.7.0_25 JRE jdk1.7.0_25/

Python 2.6.6

1. 准备工作

1.1 下载Subversion Edge和Java

Subversion Edge下载页面http://www.collab.net/downloads/subversion. 请根据你的操作系统来选取合适的版本。笔者使用的是CentOS 6.4 64bit版本,所以下载了Subversion Edge 4.0 (Linux 64-bit)。下载需要注册CollabNet账户。

1.2 准备Python、Java、系统环境

1.2.1 安装Python

Python的安装请使用CentOS自带的软件源来安装,以root权限执行

#yum install python python-libs

1.2.2 安装配置Java

去Oracle官网下载最新的Java SE JDK http://www.oracle.com/us/technologies/java/standard-edition/overview/index.html

目前(2013年7月)可以使用下面的链接
JDK 7 1.7.0_25下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

JRE 7 1.7.0_25下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html

下载不许要注册,但需要点击Accept License Agreement. 下载有多种版本可选。笔者这里选择了Linux64 rpm包

安装JDK和JRE

以root权限分别执行

#rpm -ivh jdk-7u25-linux-x64.rpm

#rpm -ivh jre-7u25-linux-x64.rpm

配置JAVA环境变量

以root权限向/etc/profile中添加如下内容

#set Java environment
export JAVA_HOME=/usr/java/default
export JRE_HOME=/usr/java/jre1.7.0_25
export CLASSPATH=./:$JAVA_HOME/lib:$JRE_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

保存退出以root执行 #source /etc/profile 以使刚刚设置的环境变量生效。

检查Java环境变量,执行 $JAVA_HOME/bin/java -version

[root@svn ~]# $JAVA_HOME/bin/java -version
java version “1.7.0_25″
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

其中/usr/java/default 是指向默认的JDK的链接。该链接由JDK安装时生成。当你配置的时候请根据实际情况来调整相关路径。需要提醒的是请把JRE_HOME指向单独安装的JRE,不要指向JDK中的JRE($JAVA_HOME/jre). 前者是开发版的JRE性能比单独的JRE低。虽然配错了不影响功能使用,Subversion Edge 的 Web Sonsole用的也不多不会因为配错了浪费很多系统资源,但是还是应该配成正确的。养成好习惯,不然部署Tomcat等中间件的时候犯了这种错误就损失大了。

1.2.3 建立svn用户

Subversion Edge需要以普通用户sudo -E 来执行安装,也许要以普通用户权限执行。网上的很多关于1.x 2.x版本作为root来执行安装会导致失败。本人经过尝试4.0.0版本root安装在执行的时候出现了问题,安装成功后可以进入Web Console但是无法启动Subversion服务,虽不能完全证明不可以使用root来执行安装,但本着多一事不如少一事的原则,还是乖乖改成了用新建里的用户svnuser来执行安装。

以root权限执行建立svn用户组和成员svnuser,并为svnsuer设置密码

#groupadd svn

#useradd -g svn svnuser

#passwd svnuser

赋予svnuser用户sudo权限

以root权限执行

#vi /etc/sudoers

## Allow root to run any commands anywhere
root ALL=(ALL) ALL

之后添加
## Allow svnuser to run any commands anywhere
svnuser ALL=(ALL) ALL

赋予用户svnuser sudo的权限。

1.2.4 SVN库、存储和文件权限

本机使用单独的一块硬盘作为SVN的库,使用fdisk分区,建立一个住分区。格式化成ext3格式。由于ext4格式在不停地开发中,很多细节会发生变化,在硬盘崩溃恢复数据时将造成很大困难。最直观的影响是没有现成的恢复工具可用。

修改/etcfstab 将Subversion的数据仓库挂在到/srv.

以root权限执行#mount -a 使新的fstab生效。

解压缩安装文件并设置权限

进入SVN库所在分区,解压缩得到安装文件,安装文件在csvn文件中

#cd /srv
#tar zxf CollabNetSubversionEdge-4.0.0_linux-x86_64.tar.gz

更改文件夹和文件权限

#chown -R svnuser:svn csvn

2. 安装Subversion Edge

Subversion Edge中的SVN服务采用apache作为服务器。Subversion Edge的安装Application的过程将会完成三个部分:

Console: 一个基于Java的Web管理界面,用于执行Subversion设置、启停,SVN用户权限的建立与分撇,库的建立与维护等。

Subversion: 基于Apache运行。

ViewVC: Web界面的代码查看工具。

2.1 更改为刚才创建的用户svnuser并进入安装目录

# su svnuser
$ cd /srv/csvn

2.2 执行安装

$ sudo -E bin/csvn install

安装过程将会让Subversion Edge Application的Server随系统启动。同时将JAVA_HOME和当前执行sudo命令的用户写入data/conf/csvn.conf. 必要时也可以通过手动更改这个配置文件中的JAVA_HOME和RUN_AS_USER来保证Application的正确运行。

2.3 启动Server

启动Server的时候要确保使用的是svnuser这个用户,而不是root.

$ bin/csvn start

[svnuser@svn csvn]$ bin/csvn start
Starting CSVN Console……
CSVN Console started
Waiting for application to initialize (this may take a minute)………………
CSVN Console is ready at http://localhost:3343/csvn

这个过程可能会很慢,登上一两分钟很正常。需要说明这里仅仅是启动Subversion Edge的Web 管理工具,并没有启动绑定了Subversion的Apache, 这一步成功之后SVN服务也不可用。

如果无法启动可以尝试

$ bin/csvn stop 之后再执行
$ bin/csvn start, 或者执行
$ bin/csvn restart

如果还是不行启动那么只好尝试用

$ bin/csvn console

来启动。这个命令将启动信息和错误提示输出到命令行,方便排查错误。例如:

[svnuser@svn csvn]$ bin/csvn console
Running CSVN Console…
wrapper | –> Wrapper Started as Console
wrapper | Java Service Wrapper Community Edition 64-bit 3.4.1
wrapper | Copyright (C) 1999-2010 Tanuki Software, Ltd. All Rights Reserved.
wrapper | http://wrapper.tanukisoftware.org
wrapper |
wrapper | Command[0] : /usr/java/jdk1.7.0_25/bin/java
wrapper | Command[1] : -XX:MaxPermSize=128m
wrapper | Command[2] : -Djetty.home=../appserver
wrapper | Command[3] : -Djetty.port=3343
wrapper | Command[4] : -Djetty.ssl.port=4434
wrapper | Command[5] : -Xms64m
wrapper | Command[6] : -Xmx512m
wrapper | Command[7] : -Djava.library.path=../lib
wrapper | Command[8] : -classpath
wrapper | Command[9] : ../lib/wrapper.jar
wrapper | Command[10] : -Dwrapper.key=WhAVe95-geKtpI83
wrapper | Command[11] : -Dwrapper.port=32000
wrapper | Command[12] : -Dwrapper.jvm.port.min=31000
wrapper | Command[13] : -Dwrapper.jvm.port.max=31999
wrapper | Command[14] : -Dwrapper.pid=3913
wrapper | Command[15] : -Dwrapper.version=3.4.1
wrapper | Command[16] : -Dwrapper.native_library=wrapper
wrapper | Command[17] : -Dwrapper.cpu.timeout=10
wrapper | Command[18] : -Dwrapper.jvmid=1
wrapper | Command[19] : org.tanukisoftware.wrapper.WrapperJarApp
wrapper | Command[20] : ../appserver/start.jar
wrapper | Launching a JVM…
jvm 1 | WrapperManager: Initializing…
jvm 1 | 2013-07-30 16:16:23.578:INFO::Redirecting stderr/stdout to /srv/csvn/data/logs/console_2013_07_30.log

[svnuser@svn csvn]$ bin/csvn stop
Stopping CSVN Console…
Waiting for CSVN Console to exit…
Waiting for CSVN Console to exit…
Stopped CSVN Console.

3 Subversion Edge首次登录和设置

你必需登录CollabNet Subversion Edge基于Web的Console来做些设置,之后才能启动Edge中负责SVN的Apache. Web Console的登录信息:

Address: http://localhost:3343/csvn
或者 https://localhost:4434/csvn (使用自签名SSL证书)
Username: admin
Password: admin

你也可以在Web Console中设置强制使用SSL方式访问Console,这时候对3343端口的访问将会被重定向到安全端口4434. 如果本机没有X桌面,就需要通过网络访问。需要将localhost更改为Subversion Edge服务器的IP地址,同时设置防火墙来保证能够访问到。

3.1 首次设置

首次访问会显示Getting Started向导,提醒你更改admin密码、更改Server Setting、链接Coldorge. 服务器设置中主机名和端口两项比较重要,如设置不当可能导致Subversion无法启动。

假设主机名设置成了svn.example.com, 那么本机在启动Subversion的时候会解析svn.example.com, 如果解析不正确服务就无法启动。保险的做法是在/etc/hosts中加入127.0.0.1 svn.example.com, 同时更改/etc/sysconfig/network中HOSTNAME=svn.example.com. 如果是公网服务请设置域名的解析记录,内网的话可设可不设。

端口号默认是80, 但是设置成80会导致Subversion服务不能启动。原因是Linux要求只有root才能使用端口号小于1024的端口,而Subversion Edge必需要以非root权限运行。当你把端口号设置80的时候,Subversion Edge也会提醒你需要做额外的设置。你现在面临两个选择,要么指定一个大于等于1024的端口,要么进行额外的设置。具体如下:

chown root:svn /srv/csvn/lib/httpd_bind/httpd_bind
chmod u+s /srv/csvn/lib/httpd_bind/httpd_bind

svn是Subversion Edge执行用户svnuser所在的组。

3.2 验证并设置Subversion服务随系统启动

推荐在Web Console中成功启动Subversion后再设置Subversion服务随系统启动。在Web Console的主界面中点击Start/启动按钮。

可以尝试创建用户和版本库,从客户端Check代码,编写提交代码,验证整个系统安装的正确定。

在操作系统的shell中执行

$ cd csvn
$ sudo bin/csvn-httpd install

配置好了重新启动一下整个操作系统,看看一切是否正常。

4. 问题和解决

可以通过Shell终端和Web Console来查看log来帮助解决问题。Shell中访问log的位置csvn/data/logs, Web Console中可以通过左侧的MAINTENANCE菜单中Server Logs中查看。

4.1 命令行无法启动Applicaion

console log
2013-07-30 11:34:14,154 [WrapperJarAppMain] ERROR ehcache.Cache – Unable to set localhost. This prevents creation of a GUID. Cause was: vweb-01.example.com: vweb-01.example.com: 没有与主机名关联的地址
java.net.UnknownHostException: vweb-01.spiralsgame.com: vweb-01.spiralsgame.com: 没有与主机名关联的地址
at java.net.InetAddress.getLocalHost(InetAddress.java:1466)
at net.sf.ehcache.Cache.(Cache.java:143)
at net.sf.ehcache.config.ConfigurationHelper.createCache(ConfigurationHelper.java:463)
at net.sf.ehcache.config.ConfigurationHelper.createDefaultCache(ConfigurationHelper.java:369)
at net.sf.ehcache.CacheManager.configure(CacheManager.java:445)
at net.sf.ehcache.CacheManager.init(CacheManager.java:302)
at net.sf.ehcache.CacheManager.(CacheManager.java:260)


解决办法参考:2.4 Subversion Edge首次登录和设置

4.2 Web Console中无法启动Subversion服务 域名问题 和 <1024端口问题
2013-07-30 11:50:32,695 [qtp484971778-86] ERROR console.CommandLineService - Exit status=1 Process err output: sudo:抱歉,您必须拥有一个终端来执行 sudo(sorry, you must have a tty to run sudo)
解决办法参考:2.4 Subversion Edge首次登录和设置

4.3 防火墙Appand新规则出现问题

CentOS默认防火墙INPUT Chain规则是默认允许然后是允许必要的协议和端口通过。如icmp协议和ssh的tcp 22端口。在这些规则的最后一条加上一条

REJECT all – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

如果使用 iptables -A INPUT添加了允许Web Console所使用的3343, 4434和Subversion所使用的80和443, 新添加的规则会在上边的REJECT规则之后。iptables在匹配防火墙规则的时候有优先顺序。匹配到那一条REJECT的时候就会让tcp 3343 4434 80 443无法通讯。

解决办法是使用# iptables -I INPUT 来添加规则。例:

# iptables -I INPUT 5 -m state –state NEW -m tcp -p tcp –dport 3343 -j ACCEPT
# iptables -I INPUT 5 -m state –state NEW -m tcp -p tcp –dport 4434 -j ACCEPT
# iptables -I INPUT 5 -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT
# iptables -I INPUT 5 -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT

得到

[root@svn logs]# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all – 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all – 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
7 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:4434
8 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3343 9 REJECT all – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

4.4 保存防火墙规则失败——iptables save与/etc/rc.d/init.d/iptalbes save

直接执行iptables save新修改(包括添加、删除,下同)的规则生效,但是重启iptables之后规则失效。如果向保存应该执行/etc/rc.d/init.d/iptalbes save.

直接执行iptables save时,执行的是/sbin/iptables链接指向的iptables程序/sbin/iptables-1.4.7(在我的机器上)。/etc/rc.d/init.d/iptalbes save是一个Shell脚本可以将新修改的规则保存到iptables配置文件。

/etc/init.d/iptables与/etc/rc.d/init.d/iptalbes等价,因为在这个系统上/etc/init.d 是指向/etc/rc.d/init.d的链接

4.5 Web Console启动时找不到Java

JAVA_HOME设置有误。很多网上查到的资料显示GNU/Linux下java的位置是/usr/local/java, 这个不是一成不变的。你可以使用whereis javac, 或 find / -name javac的方式间接找到正确的JAVA_HOME

5. 参考资料

CentOS搭建SVN(CollabNet Subversion Edge)服务器

http://www.linuxidc.com/Linux/2012-06/62291.htm

非常简洁,但是解释的内容偏少。CentOS 5.7 x64 + Subversion Edge 2.3

CentOS 6 安装JDK及系统配置

http://os.51cto.com/art/201208/351895.htm

Subversion Edge 使用经验之谈 — 服务器配置篇

http://tsleoou.diandian.com/post/2011-07-21/3079158

最后编辑:
作者:郑 国华
这个作者貌似有点懒,什么都没有留下。

留下一个回复