当前位置: 主页 > 环境部署 > 其它服务 >

svn+http实现http svn实验文档

时间:2013-05-31 09:45来源:www.linuxyw.com 作者:admin 点击:
本文档为centos 5.5 64位下的实验文档 服务器系统总体规划: 1、Apache负责SVN具体事务,端口802,SVN相关业务由域名 svn.opensoce.com 承担,来自svn.opensoce.com 的请求全部转发至802端口交由802端
欢迎大家分享自己的文档,请点击查阅:分享方法,Linux系统运维
如果你喜欢这文章,可以点击文章结尾处百度分享,分享到你的各种社区收藏,或推荐给朋友……


本文由罗小波提供,转载请注明出处

本文档为centos 5.5 64位下的实验文档

服务器系统总体规划:
1、Apache负责SVN具体事务,端口802,SVN相关业务由域名 svn.opensoce.com 承担,来自svn.opensoce.com 的请求全部转发至802端口交由802端口给Apache处理
2、Nginx做主体Web服务,对外开放80端口,负责普通网站业务和svn业务转发
安装部署过程:
一、支持包安装及相关用户、用户组创建
tar zxf libiconv-1.13.tar.gz
cd libiconv-1.13
./configure --prefix=/usr/local/services/libiconv
make
make install
 
cd ../;tar zxf zlib-1.2.3.tar.gz
cd zlib-1.2.3
CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/services/zlib
make
make install
 
#最好不要让root用户参与到svn的权限管理和日常的运行和维护工作中来,所以我们建立一个用户(如svn)
同时为了处理好权限的问题,我们可以建立一个组(如www),其他希望使用svn的用户加入这个组
在root权限下用下面的命令创建用户和组:
groupadd www
useradd svn -g www
useradd www -g www
二、Apache安装
Apache官网: http://httpd.apache.org/
wget http://labs.renren.com/apache-mirror/httpd/httpd-2.2.22.tar.bz2
cd ../;tar xvf httpd-2.2.22.tar.bz2
cd httpd-2.2.22
./configure --enable-dav --enable-so --enable-ssl --prefix=/usr/local/services/apache2 --enable-mods-shared=all
make
make install
删除httpd的调试符号
cp httpd httpd.old
strip httpd
删除调试符号
strip --strip-debug /tools/lib/*
strip --strip-unneeded /tools/{,s}bin/* #这个参数千万不可应用于库文件
rm -rf /tools/{info,man}
添加为服务
cp /usr/local/services/apache2/bin/apachectl /etc/init.d/apache2
chkconfig --add apache2
chkconfig --list apache2 apache #服务默认在运行级3,5启动
三、Apache配置
vi /usr/local/services/apache2/conf/ httpd.conf
#修改用户组
User svn
Group www
#修改端口为
Listen 802
四、Subversion安装
先安装apr和apr-util
cd ../;tar xvf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=/usr/local/services/apr
make && make install
cd ../;tar xvf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure --prefix=/usr/local/services/apr-util --with-apr=/root/apr-1.4.6
make && make install
echo '/usr/local/services/apr-util/lib/' >> /etc/ld.so.conf
echo '/usr/local/services/apr/lib/' >> /etc/ld.so.conf
ldconfig
注意:/root/apr-1.4.6这个是apr的解压目录,不是安装目录
再安装swig和python(如果没有安装的话),centos下好像默认安装了,可以不用安装这两两个,下面为源码安装swig
 
BDB: http://www.oracle.com/technology/software/products/berkeley-db/index.html #如果需要创建版本库为BDB存储方式的话,才去安装
Subversion: http://subversion.apache.org/source-code.html 目前版本1.6.12
如果要安装源码swig,则安装命令如下:
rpm -e `rpm -q swig`;yum install -y pcre-devel
cd ../;tar xvf swig-2.0.1.tar.gz
cd swig-2.0.1/
./configure --prefix=/usr/local/services/swig
make && make install
wget http://subversion.tigris.org/downloads/subversion-1.6.12.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.bz2
cd ../;tar xvf subversion-1.6.12.tar.bz2
tar xvf subversion-deps-1.6.12.tar.bz2
cd subversion-1.6.12
./configure --with-apxs=/usr/local/services/apache2/bin/apxs --prefix=/usr/local/services/subversion --with-apr=/root/apr-1.4.6 --with-apr-util=/root/apr-util-1.4.1 --with-ssl --with-zlib=/usr/local/services/lib --without-berkeley-db PYTHON=/usr/bin/python --with-swig=/usr/bin/swig --enable-shared --enable-static --enable-swig-binding=python
make && make install
 
注意:/root/apr-1.4.6这个是apr的解压目录,/root/apr-util-1.4.1是apr-util的解压目录,不是安装目录
 
#python和swig可能需提前安装
在以上编译过程中可能会出现 configure: error: Subversion requires SQLite
解决方法:可以下载最新的Sqlite版本sqlite-amalgamation-3.7.0.tar.gz
wget http://www.sqlite.org/sqlite-amalgamation-3.7.0.tar.gz
tar zxvf sqlite-amalgamation-3.7.0.tar.gz
cd sqllit-3.7.0
cp sqlite3.c ../subversion-1.6.12/sqlite-amalgamation/sqlite3.c
经过上面的步骤mod_dav_svn.so and mod_authz_svn.so将会被copy到/usr/local/services/apache2/modules/下;
同时在 /usr/local/services/apache2/conf/ httpd.conf中会增加如下2行:
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
检查一下是否都正确,如果没有的话可能就要手动加进去。
注意一下运行. /configure时加的这几个参数PYTHON=/usr/bin/python -with-swig=/usr/bin/swig -enable-shared -enable-static -enable-swig-binding=python,开始的时候编译svn的时候没有加这几个参数,单独使用svn 都没问题,但是如果安装trac的话就会出错,一般出现类似下面的错误:
---------------------------------------------------------------------
Python Traceback
Traceback (most recent call last):
File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 387, in dispatch_request
    dispatcher.dispatch(req)
File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 191, in dispatch
    chosen_handler = self._pre_process_request(req, chosen_handler)
File "/usr/local/lib/python2.5/site-packages/trac/web/main.py", line 263, in _pre_process_request
    chosen_handler = f.pre_process_request(req, chosen_handler)
File "/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 73, in pre_process_request
    self.get_repository(req.authname) # triggers a sync if applicable
File "/usr/local/lib/python2.5/site-packages/trac/versioncontrol/api.py", line 92, in get_repository
    % self.repository_type)TracError: Unsupported version control system "svn"
---------------------------------------------------------------------
解决方法就是在make svn的时候要加上这几个参数”PYTHON=/usr/bin/python –with-swig=/usr/bin/swig –enable-shared –enable-static –enable-swig-binding=python”
同时执行了上面的make && make install后还要编译安装Subversion SWIG Python bindings
Swig-py的安装说明在subversion-1.6.12/subversion/bindings/swig/INSTALL文件里说的比较详细,安装过程如下:
cd subversion-1.6.12
make swig-py
make install-swig-py
那么你可以看到swig-py的install目录是/usr/local/services/subversion/lib/svn-python。用如下命令将这个扩展包扩展到python:
echo /usr/local/services/subversion/lib/svn-python >/usr/lib/python2.4/site-packages/subversion.pth
剩下的就是测试svn的swig-py包是不是能work了,很简单。
python
回车后键入下面一行命令
import svn.repos
如果不报错,就完事大吉了。(按ctrl+\退出)
如果报错,那么检查几件事情:
I. subversion的configure是不是enable了shared和static,是不是带–with-swig;
II. libsvn_swig_py-x.so是否存在于/usr/local/services/subversion/lib目录;
III. /usr/local/services/subversion/lib是否已经增加到ld.so.conf文件 (/etc/ld.so.conf)
IV. 请使用ldconfig -v |grep swig来检查是否有swig的下列动态库
libsvn_swig_py-1.so.0 -> libsvn_swig_py-1.so.0.0.0
如果一切正常,这个安装就完成了。
安装完成后,运行svnserver --version确认版本为1.6.12。
SVN服务器安装结束.
五、Subversion配置
切换到用户svn来创建svn仓库,对svn进行配置
首选选择一个目录位置作为svn仓库的存放位置,例如某项目以
mkdir -p /data/svndata/yt
创建项目版本库”yt”,默认指定仓库的文件格式为fsfs:
/usr/local/services/subversion/bin/svnadmin create /data/svndata/yt
修改目录权限
mkdir /data/htdocs/www/svn
chown -R svn:www /data/htdocs/www/svn
chmod -R g+w /data/svndata/yt
chmod g+s /data/svndata/yt/db
接下来修改Apache配置文件
vi /usr/local/services/apache2/conf/ httpd.conf # 在文件末尾添加如下内容
# Location中的/svn只是个虚目录,用于区别普通的网站访问,
# 例如url为 http://127.0.0.1/svn/yt,则/svn的部分就会由下述配置去解析。
# 如果你想在url中使用/svn11去解析,那么下面的Location配置就变为 <Location /svn11>
<Location /svn>
    Dav svn
    SVNListParentPath on
        #----允许在网页上显示svn父目录list --记住,注释不要和配置项写到同一行,否则会出错..
    SVNParentPath "/data/svndata"
        #----/data/svndata 是SVN的父目录
    AuthType Basic
        #----连接类型设置
    AuthName "Subversion Repository"
        #----连接框提示
    AuthUserFile /etc/svn/passwd
        #----用户配置文件
    AuthzSVNAccessFile /etc/svn/authz
        #----svn用户配置文件
    Require valid-user
</Location>
这里设置SVNParentPath而不是SVNPath的好处是可以几个repository同时访问
其中 /etc/svn/passwd 文件是通过htpasswd命令来创建的,第一次设置用户时使用-c表示新建一个用户文件
vim /etc/svn/authz文件内容如
[groups]
Admin = www
 #admin组成员,前面我们创建了www组,并在该组下创建了用户svn
[yt:/]
#版本库yt的权限,注意写的形式
@Admin = rw
#admin组有读写的权限
svn = rw
#svn有读写的权限
[svndata:/]
#版本库svndata的权限
@Admin = rw
svnman = rw
svn = rw
 
[/]
#如果允许任意用户浏览svnroot的内容,则设置下面这句
*=r
#svn父目录所有人都与读的权限
修改访问控制文件
/usr/local/services/apache2/bin/htpasswd -c /etc/svn/passwd svn
#这个文件名即为 httpd.conf中配置的文件名,最后的svn即为要添加的用户名
New password: 4testHIGH
Re-type new password: 4testHIGH
Adding password for user svn
#完成后执行 chmod a+r /etc/svn/passwd;chmod a+r /etc/svn/authz, 以保障apache能够读取这两个文件
#以后需添加用户时执行
/usr/local/services/apache2/bin/htpasswd -c /etc/svn/passwd newuser
#反复执行此程序,将自己需要添加的用户(替换命令最后的用户名)添加进去!
重启apache
/usr/local/services/apache2/bin/apachectl restart
打开浏览器访问 http://svn_server_address:802/svn/svndata ,
如果显示类似:“svndata - Revision 0: /就说明成功。
接下来可以import代码文件了,可以在其他机子上完成:
 
svn import -m "Hello, my project" 提交目录路径 http://svn_server_address/svn/svndata/yt
#说明:
#[path] 是导入的路径,不写就是当前路径
#path目录下,需要建立三个目录: trunk, tags, branches (类似CVS)这不是必须的,但是这对今后的项目管理很有好处
#把最初的代码放在trunk目录下!
#import之后用
svn co http://svn_server_address:802/svn/svndata/yt就该可以check out刚才import的代码了
注意了,上面的authz和passwd文件是给apache验证用的,下面配置一个自动触发更新的钩子脚本已经svn程序本身自己用于验证的authz和passwd文件
 
vim /data/svndata/yt/conf/authz
 
内容如下:
[groups]
Admin = www
 #admin组成员,前面我们创建了www组,并在该组下创建了用户svn
[data:/]
#版本库yt的权限,注意写的形式
@Admin = rw
#admin组有读写的权限
svn = rw
#svn有读写的权限
[yt:/]
#版本库svndata的权限
@Admin = rw
svnman = rw
svn = rw
 
[/]
#如果允许任意用户浏览svnroot的内容,则设置下面这句
*=r
 
vim /data/svndata/yt/conf/passwd
 
内容如下:
[users]
# harry = harryssecret
# sally = sallyssecret
svn = 4testHIGH
 
创建自动更新目录,配置钩子脚本
mkdir -p /data/yitian/yt/
mkdir -p /data/yitian/logs/updatelogs
chmod 777 -R /data/yitian/logs/updatelogs
chmod 777 -R /data/yitian/yt
vim /data/svndata/yt/hooks/post-commit
内容如下
#!/bin/bash
svnusername=svn
svnpassword=4testHIGH
datet=`date +%Y_%m_%d_%H`
datet1=`date +%Y_%m_%d_%H:%M:%S`
fileurl=/data/yitian/yt
export LANG=zh_CN.UTF-8
echo '=====================================================================================================================' >> /data/yitian/logs/updatelogs/${datet}.log 2>&1
echo "更新时间:${datet1}" >> /data/yitian/logs/updatelogs/${datet}.log 2>&1
echo "更新内容:" >> /data/yitian/logs/updatelogs/${datet}.log 2>&1
svn update $fileurl --username $svnusername --password $svnpassword --no-auth-cache >> /data/yitian/logs/updatelogs/${datet}.log 2>&1
cp -ar /data/yitian/logs/updatelogs/${datet}.log /usr/local/services/apache2/htdocs/update.html
给钩子脚本赋权:
chmod a+x /data/svndata/yt/hooks/post-commit
给钩子脚本中要用到的apache网页根目录授权
chown svn.www -R /usr/local/services/apache2/htdocs/
更改svn版本库权限,即给svn用户和www访问权限
chown svn.www -R /data/svndata/yt/
启动svn服务
svnserve -d -r /data/svndata
 
此时,到客户端上面提交内容的时候,会在/data/yitian/logs/updatelogs/目录下面每小时生成一个更新日志文件,并自动复制到apache网页根目录/usr/local/services/apache2/htdocs/下生成一个update.html文件,这个文件可以在浏览器中用地址:http://svn_server_address :802/update.html访问,要在浏览器上面选择utf-8编码,更新的内容被自动更新到/data/yitian/yt目录下
特别注意:apache的用的认证与密码文件和svn程序用的认证与密码文件不要混用,特别是密码文件passwd,apache的是加密的,而svn的是明文的,搞错了都不能成功访问。apache的认证和密码文件搞对了,就可以成功访问到svn,但是还不能自动更新,svn程序用的认证和密码文件搞对了才能自动更新,且apache用的认证用户与密码必须与svn程序用的用户名和密码一致,否则无法实现自动更新。
 

转载请注明linux系统运维
http://www.linuxyw.com/linux/qitafuwu/20130531/526.html

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容