linux centos svn 安装配置自动同步更新web服务

这是第二版了,修复了第一版中出现的几个问题
1、启动 svn服务的时候,用sudo 切换到 www用户执行,并且把svn 版本库放到www用户下面,这样可以保证导出版本库文件权限正常
2、为了解决带空格文件名无法提交的问题,增加了一个pre-commit 钩子,禁止提交带空格的文件
3、下面红色的标注的地方是新增的以便和第一版区别开来

本文解决了centos 6.2 svn 安装 验证失败 authorization failed  等问题

是 linux 下 配置 syn 自动同步更新 web 服务,超详细的文章。

但是目前有一个问题未解决,由于shell解析变量额问题 导致 带空格的文件名 无法 同步更新


大家如果觉得文章好的话,可以转载。但是要保留原文地址,谢谢!

--------------------------------------------------------------------

yum 安装 subversion
                                                                                                             
#yum install subversion

                                                                                                             
查看版本信息 如果出现  svnserve,版本 1.6.11  则表示安装成功

                                                                                                             
#svnserve --version


-------------------------------------------------------------------------------------------


1、创建版本库

# 创建版本库之前需要把 /etc/init.d/svn 、/etc/svn/svnserve.conf、/etc/svn/passwd、/etc/svn/authz 文件放置到相应目录
# 具体配置内容在下面


# 修改 web 服务的 权限,使其可以运行/bin/bash ,home目录 设置为 /home/www
vi /etc/passwd
www:x:503:502::/home/www:/bin/bash

# 创建 svn 钩子 post=commit  日志文件,保证 web 服务帐号 有写入权限
touch /var/log/svn-post-commit.log && chown www:root /var/log/svn-post-commit.log

# 切换到 web 服务的帐号
su www

# 创建版本库,这里的 www 是 web 服务的帐号
svnadmin create /home/www/svn --config-dir /etc/svn

exit

---------------------------------------------------------------


2、启动服务

# 一定要切换到 web服务的执行用户 启动服务, 不然 自动同步更新的文件所属主,会自动变为运行服务的用户
su www

# 启动服务
service svn start

# 查看进程状态,确认运行 svnserve 进程的是 web 服务的帐号
ps -aux | grep svnserve

exit

----------------------------------------------------------------

3、修改 sudo 配置文件

chmod 777 && vi /etc/sudoers

# 添加 www 用户的 所有 sudo 请求
www     ALL=(ALL)       NOPASSWD: ALL

# 保存好之后
chmod 440 /etc/sudoers

----------------------------------------------------------------------------

4、检出版本库

# 切换用户
su www

# 检出 名称为 xiangmu1 的版本库 ,保存到 /home/wwwroot/web/xiangmu1

svn checkout svn://127.0.0.1/xiangmu1 /home/wwwroot/web/xiangmu1

 

-------------------------------------------------------------------------

5、设置 post-commit 钩子

# 将该脚本文件拷贝到 /home/svn/【项目目录】/hooks 下面

exit


--------------------------------------------------------------------------


6、如何添加更多的 svn 项目?

第一步: 创建项目版本库(参考上面)
第二步: 更改版本库项目授权(参考下面)
第三步: 检出版本库

--------------------------------------------------------------------------

7、如何添加更多的帐号

# 直接修改 /etc/svn/passwd

---------------------------------------------------------------------------

8、如何更改版本库项目 授权

# 直接修改 /etc/svn/authz


---------------------------------------------------------------------------

9、如何链接 svn

可以下载 svn 客户端
建议采用TortoiseSVN,

                                                                                     
连接地址为: svn://your server address/项目 (如果指定端口需要添加端口  :端口号)


-------------------------------------------------------------------------------

 

【以下是相关的文件】

--------------------

【/etc/init.d/svn  --  svn 启动服务脚本】
-----------------------------------------------------------------------------------------
#!/bin/bash
# 这里我把 nginx 使用的 www 用户下 svn 目录 做为,svn 的主目录
# 启动svn服务的时候,用www用户,这样可以保证版本库导出权限正常
# 配置文件使用 /etc/svn 下面的那几个,做为通用配置

START="sudo -u www svnserve -d -r /home/www/svn --config-file /etc/svn/svnserve.conf"
STOP="sudo killall svnserve"
case "$1" in
restart)
        $STOP
        echo "svn stop success."
        $START
        echo "snv start success."
        ;;
start)
        $START
        echo "svn start success."
        ;;
stop)
        $STOP
        echo "svn stop success."
        ;;
*)
      echo "Usage: $0 {restart | start | stop}"
      exit 1
esac
exit 1
-----------------------------------------------------------------------------------------

 

【/etc/svn/svnserve.conf  --  svn 配置文件】
属主 root:root
权限 744
------------------------------------------------------------------------------------------
[general]

# 使非授权用户无法访问
anon-access = none

# 使授权用户有写权限
auth-access = write

# 帐号及密码配置文件
password-db = /etc/svn/passwd

# 目录及版本库项目授权文件
authz-db = /etc/svn/authz

# 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm = xinshang.working

[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256

------------------------------------------------------------------------------------------


【/etc/svn/passwd  -- svn帐号文件】 
属主 www:root 
权限 744
------------------------------------------------------------------------------------------
[users]
svn = svn123456
user1 = xqw578
user2 = ah1345
user3 = bh8371
-----------------------------------------------------------------------------------------

 


【/etc/svn/authz  -- svn授权文件】 
属主 www:root 
权限 744
----------------------------------------------------------------------------------------
[groups]
group1 = user1,user2,user3 #group 组包含 3个用户 
group2 = user1,user2
group3 = user3

# r 只读, w 只写 , rw 可读写

[/] #表示全局权限,包含svn主目录下所有项目的
svn = rw # svn 是 svn root 可以读写整个 svn 目录,主要用于自动同步。


[xiangmu1:/] # svn 项目名称为 xiangmu1 的目录,允许组 group1 读写
@group1 = rw


[xiangmu2:/] # svn 项目名称为 xiangmu2 的目录,允许组 group2 读写
@group2 = rw

[xiangmu3:/] # svn 项目名称为 xiangmu3 的目录,允许组 group2、group3 读写
@group2 = rw
@group3 = rw
----------------------------------------------------------------------------------------

 


【post-commit  --  钩子文件】 自动导出版本库文件到web应用目录
----------------------------------------------------------------------------------------
#!/bin/bash

REPOS="$1"
REV="$2"
LOG=/var/log/svn-post-commit.log
APP_ROOT=/home/wwwroot/web/【项目目录】

export LANG=en_US.UTF-8

AUTHOR=`svnlook author -r $REV $REPOS`
if [ "$AUTHOR" == "edward" ] ; then
  exit;
fi


FULL_FILES=""
for DST in `svnlook changed -r $REV $REPOS | awk '{print $2}'`
do
        DST_PATH="$APP_ROOT/$DST"
        FULL_FILES="$FULL_FILES $DST_PATH"
done

TIME=`date '+%F %T'`

echo "[$TIME]--[$AUTHOR] svn commit file:" >> $LOG
echo $FULL_FILES >> $LOG

svn update --username 【svn root 帐号】 --password 【svn root 密码】 $FULL_FILES >> $LOG
----------------------------------------------------------------------------------------

【pre-commit  --  钩子文件】文件提交之前的检查,禁止提交带空格的文件名
----------------------------------------------------------------------------------------
#!/bin/bash

REPOS="$1"
REV="$2"

export LANG=en_US.UTF-8

# count commited file num

check=$(svnlook changed -t $REV $REPOS | awk 'NF!=2{for(i=2;i<=NF;i++)if(i!=NF)printf $i" ";if(i=NF)printf $i","}')


# compare files
if [ "$check" != "" ]
then
         check_del=$(svnlook changed -t $REV $REPOS  | awk '{for(i=1;i<NF;i++)if($i=="D")print $1}')
         if [ "$check_del" == "" ]
         then
                 echo "★★★★★★★★★★★★" 1>&2
                 echo "发现带空格的文件名:【${check}】" 1>&2
                 echo "请单独对其执行svn删除后," 1>&2
                 echo "重新尝试提交本次内容." 1>&2
                 echo "★★★★★★★★★★★★" 1>&2
                 exit 1
         fi
fi
exit 0

原文地址:http://yuetao.org/post/179/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值