CentOS下编译安装Subversion 1.9.5

  • 内容
  • 评论
  • 相关

Subversion是一个自由开源的版本控制系统。相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。

一、系统软件版本

1、系统:CentOS Linux release 7.2.1511 (Core)

2、Apache:httpd-2.4.23  //下载地址:http://httpd.apache.org/download.cgi#apache24

3、OpenSSL:openssl-1.0.1e

4、Apr:apr-1.5.2  //下载地址:http://apr.apache.org/download.cgi

5、Apr-util:apr-util-1.5.4  //下载地址:http://apr.apache.org/download.cgi

6、Pcre:pcre-8.39  //下载地址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

7、Sqlite:sqlite-autoconf-3150200  //下载地址:https://www.sqlite.org/download.html

8、SCons:scons-2.5.1-1 //下载地址:https://sourceforge.net/projects/scons/files/scons/

9、Serf:serf-1.3.9  //下载地址:http://serf.apache.org/download

10、Subversion:subversion-1.9.5  //下载地址:http://subversion.apache.org/download.cgi#recommended-release

二、安装前组件准备

1、首先在系统中安装好Apache及OpenSSL,不会的可以查看这篇文章CentOS下apache 2.4.23 编译安装

2、rpm安装scons,用于编译serf组件。

rpm -ivh scons-2.5.1-1.noarch.rpm  //rpm包安装

3、编译安装Serf

tar -jxvf serf-1.3.9.tar.bz2  //解压
cd serf-1.3.9/
scons PREFIX=/usr/local/serf APR=/usr/local/apr APU=/usr/local/apr-util   //编译
scons install   //安装
scons -c
vim /etc/ld.so.conf.d/serf.conf  //配置so文件目录用户系统查找,否则运行SVN时会提示“svn: error while loading shared libraries: libserf-1.so.1: cannot open shared object file: No such file or directory”
/usr/local/serf/lib  //在serf.conf加入此行
ldconfig -v //生成成详细消息

4、拷贝安装Sqlite

tar -zxvf sqlite-autoconf-3150200.tar.gz  //解压
cd sqlite-autoconf-3150200/
./configure --prefix=/usr/local/sqlite --enable-libtool-lock  //编译
make
make install

5、新建svn运行账户

groupadd svns //创建svns组
useradd -M -N -s /sbin/nologin -G svns svn //创建svn用户并附加svns组,-M不建立用户目录,-N不创建同名组,-s执行shell禁止登录

至此,前期准备工作完成。

三、编译安装Subversion

tar -zxvf subversion-1.9.5.tar.gz  //解压
cd subversion-1.9.5/
./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-apxs=/usr/local/apache/bin/apxs  --with-apache-libexecdir=/usr/local/apache/modules --with-serf=/usr/local/serf --with-sqlite=/usr/local/sqlite --with-zlib --enable-maintainer-mode --enable-mod-activation  //编译
make
make install

四、配置Subversion

1、添加系统环境变量

vim /etc/profile.d/svn.sh  
export PATH=/usr/local/subversion/bin/:$PATH  //在svn.sh中加入此行
. /etc/profile.d/svn.sh  //执行文件

2、查询安装结果

 svn --version

3、创建存放仓库的目录并授权

mkdir /data/svn
chown -R apache:apaches /data/svn/
chmod -R 775 /data/svn/

4、启动SVN并设置开机自动启动

安装killall命令

yum install psmisc

编辑svn启动脚本

vim /etc/init.d/svn

脚本内容如下:

#!/bin/bash
# chkconfig: - 85 15
# description: svn server
SVN_HOME=/data/svn  //指定svn仓库根目录,多版本库方式
if [ ! -f "/usr/local/subversion/bin/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
start)
echo "Starting svnserve…"
su svn -c "/usr/local/subversion/bin/svnserve -d --listen-port 3690 -r $SVN_HOME"  //su svn -c以svn账户运行,-d后台运行,--listen-port指定端口,-r直指定svn版本库根目录
echo "Finished!"
;;
stop)
echo "Stoping svnserve…"
killall svnserve
echo "Finished!"
;;
restart)
$0 stop
$0 start
 
;;
*)
echo "Usage: svn { start | stop | restart } "
exit 1
esac

这里请注意,不要删除# chkconfig: - 85 15和# description: svn server,不然无法使用chkconfig加入服务,会提示service svn does not support chkconfig.

然后执行

chmod +x /etc/init.d/svn
chkconfig --add svn
chkconfig svn on

最后查看下chkconfig --list|grep svn

可以看到svn已经加入到服务中,并已经在2345中为on.

注意需安装好killall命令,否则无法重启或停止SVN

SVN启动脚本下载

下载 “SVN启动脚本.zip” SVN启动脚本.zip – 已下载89次 – 499 B

5、开放防火墙3690端口

svn协议默认使用的是TCP协议3690端口,所以需要在防火墙上开通此端口,用于外部访问

firewall-cmd --permanent --zone=public --add-port=3690/tcp  //开放TCP的3690端口
firewall-cmd --reloa  //重新加载配置

6、启动svn

service svn start

五、建立SVN版本库

1.创建一个名称为project1的版本库

svnadmin create /data/svn/project1

2.配置版本库配置文件svnserve.conf

vim /data/svn/project1/conf/svnserve.conf
anon-access = read  //控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。
auth-access = write  //控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。
password-db = passwd  //指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
authz-db = authz  //指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
groups-db = groups  //用户组定义,并允许维护组与授权规则。groups-db文件的格式与authz-db文件,并且应该包含单个[groups]节组定义。如果启用该选项,则authz-db文件不能包含一个[groups]部分。除非指定以开头的路径a /,文件的位置是相对于包含此目录的文件。
realm = My First Repository  //指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。
force-username-case = none  //使svnserve进行大小写标准化用户名,然后再根据中的授权规则进行比较 authz-db文件配置如上。有效值为“upper”(至upper-表示用户名),“lower”(小写用户名)和“none”(用于比较用户名,无需转换,其中是默认行为)。
hooks-env = hooks-env  //指定钩子脚本环境的路径配置文件。此选项覆盖每个存储库的默认值并且可以用于配置多个的钩子脚本环境存储库在单个文件中,如果指定了绝对路径。除非指定绝对路径,否则文件的位置是相对的到包含此文件的目录。
use-sasl = true  //此选项指定是否要使用CyrusSASL库进行身份验证。默认值为false。如果svnserve不是用Cyrus构建的,则此部分将被忽略SASL支持;要检查,运行“svnserve --version”并查找一行阅读“Cyrus SASL身份验证可用
min-encryption = 0  //这些选项指定安全层的所需强度你希望SASL提供。0表示无加密,1表示仅进行完整性检查,大于1的值是相关的加到用于加密的有效密钥长度(例如128表示128位加密)。
max-encryption = 256  //这些选项指定安全层的所需强度你希望SASL提供。0表示无加密,1表示仅进行完整性检查,大于1的值是相关的加到用于加密的有效密钥长度(例如128表示128位加密)。

如果有多个版本库,建议指定配置文件为同一个绝对路径,方便管理。

3、新增访问版本库project1的用户root并设置密码,默认svn可以使用不加密的密码,既直接编辑passwd文件,一行一个。这里使用htpasswd创建MD5加密的密码是为以后使用WEB访问版本库准备。

htpasswd -b /data/svn/project1/conf/passwd root password    //-d不创建文件,直接在文件最后一行新增

4、设置访问策略

vim /data/svn/project1/conf/authz
[groups]  //定义用户组
admins=root,user2  //多个用户请用英文的逗号隔开
dev=user3
[project1:/]  //多个版本库共用同一配置文件需要在/前加上版本库名称:,反则[/]即可
@admin=rw  //指定组r只读,w可读可写
@doc=r
user4=rw  //指定用户r只读,w可读可写

5、重启svn服务器

service svn restart

六、配置Apache实现WEB访问SVN版本库

在apache配置文件中配置虚拟目录访问前需配置下http.conf文件

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

1、使用passwd文件认证的配置

<VirtualHost *:80>
    ServerAdmin xxx@xxxxx.com
    DocumentRoot "/data/http/html"
    ServerName localhost
    ErrorLog "/data/http/logs/localhost-error_log"
    CustomLog "/data/http/logs/localhost-access_log" common

<Location /svn/>
    DAV svn
    SVNParentPath /data/svn
    SVNListParentPath on
    AuthType Basic
    AuthName "SVN Server"
    AuthUserFile /data/svn/password
    AuthzSVNAccessFile /data/svn/authz
    Require valid-user
</Location>

</VirtualHost>

2、使用LDAP认证的配置(需要Apache安装了LDAP模块)

<VirtualHost *:80>
    ServerAdmin xxx@xxxxx.com
    DocumentRoot "/data/http/html"
    ServerName localhost
    ErrorLog "/data/http/logs/localhost-error_log"
    CustomLog "/data/http/logs/localhost-access_log" common

<Location /svn>
    DAV svn
    SVNParentPath /data/svn
    SVNListParentPath on
    AuthType Basic
    AuthName "SVN Server"
    AuthBasicAuthoritative on
    AuthBasicProvider ldap
    AuthLDAPURL "ldap://dc.xxxxx.com:389/OU=xxx,DC=xxxxx,DC=com?sAMAccountName
?sub?(&(objectClass=person)(objectClass=user))"
    AuthLDAPBindDN "CN=SVN_LDAP验证,CN=Users,DC=xxxxx,DC=com"
    AuthLDAPBindPassword "password"
    AuthLDAPBindAuthoritative off
    AuthzSVNAccessFile /etc/svn/authz
    Require valid-user
</Location>

</VirtualHost>

3、附上启用SSL访问的配置

<VirtualHost _default_:443>
DocumentRoot "/data/http/html/"
ServerName localhost:443
ServerAdmin xxx@xxxxx.cn
ErrorLog "/data/http/logs/localhost-error_log"
TransferLog "/data/http/logs/localhost-access_log"
SSLEngine on
SSLCertificateFile "/etc/httpd/ssl.crt/jkhost.kemai.cn.crt"
SSLCertificateKeyFile "/etc/httpd/ssl.crt/jkhost.kemai.cn.key"
SSLCACertificateFile "/etc/httpd/ssl.crt/root_bundle.crt"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0


CustomLog "/data/http/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<Location /svn/>
   DAV svn
   SVNParentPath /data/svn/
   SVNListParentPath on
   AuthzSVNAccessFile /etc/svn/authz
#  RedirectMatch ^(/svn)$ $1/
      AuthType Basic
      AuthName "SVN server requires authentication"
      AuthUserFile /etc/svn/htpasswd
      Require valid-user
</Location>

</VirtualHost>

 

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注