本文解决了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
---------------------------------------------------------------------------------------------
是 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
---------------------------------------------------------------------------------------------