SVN(独立安装)-1.9.7 centos 6.5(64位)
说明:
运行方式:
- 基于Apache的http、https网页访问形式;
- 基于svnserve的独立服务器模式。
数据存储方式:
- 在Berkeley DB数据库中存储数据;
- 使用普通的文件FSFS存储数据。
由于Berkeley DB方式在使用中有可能锁住数据,一般建议使用FSFS方式更安全.
以svnserve的独立服务器模式
,使用FSFS数据存储方式
源码编译安装配置SVN服务器。
一、开启防火墙端口
#基于svnserve的独立服务器模式,默认端口为3690
#编辑防火墙配置文件
vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
#保存退出
:wq!
#最后重启防火墙使配置生效
service iptables restart
二、关闭SELINUX
vi /etc/selinux/config
#注释掉
#SELINUX=enforcing
#注释掉
#SELINUXTYPE=targeted
#增加
SELINUX=disabled
#保存退出
:wq!
#使配置立即生效
setenforce 0
系统约定
- 软件源代码包存放位置:/usr/local/src
- 源码包编译安装位置: /usr/local/软件名字
四、下载软件包
- apr源码包 网站:http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
- apr-util源码包 网站:http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
- sqlite-amalgamation源码包 网站:http://www.sqlite.org/2017/sqlite-amalgamation-3160200.zip
- scons源码包 网站:https://sourceforge.net/projects/scons/files/scons/2.5.1/scons-2.5.1.tar.gz/download
- serf源码包 网站:https://www.apache.org/dist/serf/serf-1.3.9.tar.bz2
- 下载svn 网站:http://www.apache.org/dist/subversion/subversion-1.9.7.tar.gz
五、安装编译工具及库文件(使用yum命令安装)
#!/bin/bash
yum install -y apr* autoconf automake bison bzip2 bzip2* cloog-ppl compat* cpp \
curl curl-devel fontconfig fontconfig-devel freetype freetype* \
freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel \
glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel \
libcom_err-devel libpng libpng* libpng-devel libjpeg* libsepol-devel \
libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libX* \
libtiff libtiff* make mpfr ncurses* ncurses-devel ntp openssl openssl-devel nasm nasm* \
openssl-devel patch pcre-devel perl php-common php-gd \
policycoreutils ppl telnet t1lib t1lib* wget zlib-devel gmp-devel \
unzip perl-ExtUtils-Embed
#删除系统中原有的svn及依赖包
yum -y remove apr apr-util subversion subversion-libs
#安装apr
cd /usr/local/src/install_file
mkdir /usr/local/apr
tar zxvf apr-1.5.2.tar.gz -C /usr/local/src
cd /usr/local/src/apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
#安装apr-util
cd /usr/local/src/install_file
mkdir /usr/local/apr-util
tar zxvf apr-util-1.5.4.tar.gz -C /usr/local/src
cd /usr/local/src/apr-util-1.5.4
./configure --prefix=/usr/local/apr-util \
--with-apr=/usr/local/apr
make && make install
#安装scons
cd /usr/local/src/install_file
mkdir /usr/local/scons
tar zxvf scons-2.5.1.tar.gz -C /usr/local/src
cd /usr/local/src/scons-2.5.1
python setup.py install --prefix=/usr/local/scons
yum -y install openssl-devel
#安装serf
cd /usr/local/src/install_file
mkdir /usr/local/serf
tar xvf serf-1.3.9.tar.bz2 -C /usr/local/src
cd /usr/local/src/serf-1.3.9
/usr/local/scons/bin/scons PREFIX=/usr/local/serf APR=/usr/local/apr APU=/usr/local/apr-util
/usr/local/scons/bin/scons install
#拷贝文件到系统目录
cp /usr/local/serf/lib/libserf-1.so* /usr/local/lib/
#安装svn
cd /usr/local/src/install_file
tar zxvf subversion-1.9.7.tar.gz -C /usr/local/src
unzip sqlite-amalgamation-3160200.zip -d /usr/local/src/subversion-1.9.7/
cd /usr/local/src/subversion-1.9.7
mv sqlite-amalgamation-3160200 sqlite-amalgamation
./configure --prefix=/usr/local/svn \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-serf=/usr/local/serf \
--enable-mod-activation
make && make install
cp /usr/local/lib/libserf-1.so.1.3.0 /usr/local/svn/lib/libserf-1.so.1
#添加系统环境变量,添加到最后一行
echo "export PATH=$PATH:/usr/local/svn/bin">>/etc/profile
#使配置立刻生效
source /etc/profile
测试安装是否成功:
#查看svn帮助信息
svn help
#查看svn版本信息
svnserve --version
#查看svn
svn --version
配置svn
#创建svn代码库
mkdir -p /data/repos #创建目录
#下面的命令执行完成之后,会自动建立svn库,在/home/svn文件夹含了conf,db,format,hooks,locks,README.txt等文件。
#创建svn代码库
svnadmin create /data/repos
#配置svn代码库
#进入配置文件存放目录
cd /data/repos/conf
#配置全局文件,在最后添加以下代码
vi /data/repos/conf/svnserve.conf
[general]
#禁止匿名访问,设置为none。默认为read,参数:read,write,none
anon-access=none
#授权用户写权限
auth-access=write
#用户账号密码文件路径,可以写绝对路径
password-db=passwd
#访问控制权限文件路径,可以写绝对路径
authz-db=authz
#每个SVN项目的认证命,会在认证提示里显示,建议写项目名称。
realm=repos
#保存退出
:wq!
#配置用户密码
vi /data/repos/conf/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
test=123456
#保存退出
:wq!
#配置权限控制文件,设置用户可以访问的目录
vi /data/repos/conf/authz
[groups]
admin = osyunwei
users = test,test2
#[/]代表根目录下所有的资源
[/]
@admin = rw
* = r
#保存退出
:wq!
#启动svn
svnserve -d -r /home/svn --listen-port 3690
#查看svn进程
ps -ef|grep svn|grep -v grep
#检查svn端口
netstat -ln |grep 3690
#关闭svn服务
killall svnserve
#设置svn服务开机启动
vi /etc/init.d/svn #编辑,添加以下代码
svn文件内容如下
#!/bin/sh
# chkconfig: 2345 85 85
# processname: svn
svn_port=3690
svn_home=/data/repos
if [ ! -f "/usr/local/svn/bin/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
start)
echo "Starting svnserve..."
/usr/local/svn/bin/svnserve -d -r $svn_home --listen-port $svn_port
echo "Successfully!"
;;
stop)
echo "Stoping svnserve..."
killall svnserve
echo "Successfully!"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: svn { start | stop | restart } "
exit 1
esac
开启自启动
#添加执行权限
chmod +x /etc/init.d/svn
#开启自启动
chkconfig svn on
service svn start
测试svn
#测试svn
#将文件下载到本地目录
svn://192.168.21.134/
username osyunwei
password 123456
实现svn代码仓库与web线上同步
svn代码仓库目录/data/repos/
web线上目录/data/www
#服务器操作系统:CentOS
#服务器IP:192.168.21.134
#SVN安装路径:/usr/local/svn
#SVN项目路径:/data/repos
#SVN登录账号:test
#SVN登录密码:123456
#Web站点根目录:/data/www
#首先checkout一份
svn co svn://192.168.1.149/ /data/www
#当svn项目中有任何修改更新时,系统会自动实时从svn中检出文件并同步到Web站点根目录
#使用SVN中post-commit实现自动实时从svn中检出文件并同步到Web站点根目录
cd /data/repos/hooks
#编辑,添加以下代码
vi /data/repos/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
SVN_PATH=/usr/local/svn/bin
WEB_PATH=/data/www
SVN_USER=test
SVN_PASS=123456
WEB_USER=www
LOG_PATH=/tmp/svn.log
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH/svn update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH
chown $WEB_USER.$WEB_USER -R $WEB_PATH
#保存退出
:wq!
--------------------------------
#以下在nginx配置时有添加
groupadd www
useradd -g www www -s /bin/false
--------------------------------
#设置脚本所属用户组,www为web服务运行账户和组
chown www:www /data/repos/hooks/post-commit
#添加脚本执行权限
chmod +x /data/repos/hooks/post-commit
#说明:
#执行此程序的用户
whoami
#svn项目绝对路径值
REPOS="$1"
#最新版本号
REV="$2"
#不保存账户认证信息
--no-auth-cache