【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2400|回复: 0

[网络技术] ubuntu中SVN的安装方法

[复制链接]
发表于 2014-11-18 16:57:43 | 显示全部楼层 |阅读模式
本文介绍中Ubuntu9.10中如何使用subversion架设svn server。
1、安装subversion
使用命令:sudo apt-get install subversion
回车后看到确认安装信息,输入y,回车开始下载并安装。
2、创建repository项目存储仓库
a) 创建项目目录:sudo mkdir /usr/svn/project1
b) 在此目录上创建svn仓库:sudo svnadmin create /usr/svn/project1
3、配置项目访问权限
a) 进入目录:/usr/svn/project1/conf/
编辑文件svnserve.conf:sudo vi svnserve.conf
修改anon-access = read为:anon-access = none
把如下几句的注释去掉:
#auth-access = write
#password-db = passwod
#authz-db = authz
#realm = xxx
并把最后一句改为:realm = project1
保存此配置文件;
b) 编辑passwd文件,添加客户端访问帐号:
sudo vi passwd
添加如:test = 123456
帐号test,密码123456的帐号;
保存此配置文件。
c) 修改权限配置文件:sudo vi authz
[groups]
project1 = test
test = rw
[/]
@project1 = rw
保存配置文件。
4、启动svnserve
sudo svnserve -d -r /usr/svn/ --listen-host 0.0.0.0 --listen-port 3690
启动之后,查看进程:
ps -ef|grep svnserve
能看到如下结果,则表示svn server已经正常运行了。
test      1957     1 0 12:28 ?        00:00:00 svnserve -d -r /home/svn/ --listen-host 0.0.0.0 --listen-port 3690
5、使用TortoiseSVN客户端checkout项目测试
安装之后重启电脑,
然后在某个目录下选择右键中的checkout,
填入ubuntu中svn服务的地址,如:
svn://192.168.1.10/project1/
会提示输入帐号和密码:test/123456
将会把project1目录更新下来。

到此为止,Ubuntu 9.10下搭建svn server顺利完成。



1. 安装SVN

apt-get install subversion

2. 建立svn仓库

1). 建立svn目录:mkdir /home/.svn(使用隐藏目录)

2). cd /home/.svn

3). mkdir astar

4). 创建仓库astar:svnadmin create /home/.svn/astar,执行完毕后astar目录有svnadmin创建的目录和文件

5). mkdir test

6). 创建仓库test:svnadmin create /home/.svn/test,执行完毕后test目录有svnadmin创建的目录和文件

3. 配置和管理svn

1). 每个仓库的配置文件在$repos/conf/下,vi svnserve.conf,配置项在[general]下:

anon-access:匿名用户的权限,可以为read,write和none,默认值read。不允许匿名用户访问:anon-access = none

auth-access:认证用户的权限,可以为read,write和none,默认值write。

password-db:密码数据库的路径,去掉前边的#

authz-db:认证规则库的路径,去掉前边的#。

注意:这些配置项的行都要顶格,否则会报错。修改配置后需要重启svn才能生效。

2). 配置passwd文件

这是每个用户的密码文件,比较简单,就是“用户名=密码”,采用的是明码。如allen=111111

3). 配置authz文件

1. [groups] section:为了便于管理,可以将一些用户放到一个组里边,比如:owner=allen,ellen

2. groups下边的sections表示对一个目录的认证规则,比如对根目录的认证规则的section为[/]。设置单用户的认证规则时一个用户一行,如:

[/]

allen=rw  #allen对根目录的权限为rw

ellen=r   #ellen对根目录的权限为r

如果使用group,需要在group名字前加@,如

@owner=rw  #group owner中的用户均为rw,等价于上边的两句话

启动时如果从/home/.svn/astar启动,/就是astar目录,用如上方式以astar目录为根设置权限。

如果从/home/.svn/启动,每个仓库根还是自己的起始目录。可以采用如上方式设置astar的权限,也可以采用如下方式:

[astar:/]

@owner=rw

设置test的权限如下:

[test:/]

@harry_and_sally = rw

简言之,每个仓库的根目录(/)就是自己的起始目录;[repos:/]这种方式只适用于多仓库的情况;[/]适合于单仓库和单仓库的方式。

3. 不能跨越仓库设置权限。

4. 启动和停止svn

1). 启动:

1. 从astar目录启动,svnserve -d -r /home/.svn/astar,根目录(/)是astar,authz中规则的配置使用section[/]。访问方式为:

svn://192.168.0.87/

2. 从.svn目录启动,svnserve -d -r /home/.svn,根目录(/)是.svn,authz中对astar的配置使用section[astar:/] ,对test的配置使用section[test:/]。访问方式为:

svn://192.18.0.87/astar

svn://192.18.0.87/test

如果需要svn自启动,把命令加入/etc/rc.local中

2). 检查svn服务器是否已经启动(svn默认使用3690端口):netstat -an | grep 3690

3). 停止:killall svnserve

5. svn client




一、SVN安装
1.安装包
$ sudo apt-get install subversion

2.添加svn管理用户及subversion组
$ sudo adduser svnuser
$ sudo addgroup subversion
$ sudo addgroup svnuser subversion

3.创建项目目录
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir fitness
$ sudo chown -R root:subversion fitness
$ sudo chmod -R g+rws fitness

4.创建SVN文件仓库
$ sudo svnadmin create /home/svn/fitness

5.访问方式及项目导入:
$ svn co file:///home/svn/fitness
或者
$ svn co file://localhost/home/svn/fitness
* 注意:
如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).
//--
下面的命令用于将项目导入到SVN 文件仓库:
$ svn import -m "New import" /home/svn/fitness file:///home/svnuser/src/fitness
一定要注明导入信息

//--------------------------//
6.访问权限设置
修改 /home/svn/fitness目录下:
svnserve.conf 、passwd 、authz三个文件,行最前端不允许有空格
//--
编辑svnserve.conf文件,把如下两行取消注释
password-db = password
authz-db = authz

//补充说明
# [general]
anon-access = read
auth-access = write
password-db = passwd
其中 anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,但如果想拒绝匿

名用户的访问,只需把 read 改成 none 就能达到目的。

//--
编辑/home/svnuser/etc/passwd 如下:
[users]
mirze = 123456
test1 = 123456
test2 = 123456
//--
编辑/home/svnuser/etc/authz如下
[groups]
admin = mirze,test1
test = test2
[/]
@admin=rw
*=r
这里设置了三个用户mirze,test1,test2密码都是123456
其中mirze和test1属于admin组,有读和写的权限,test2属于test组只有读的权限

7.启动SVN服务
svnserve -d -r /home/svn
描述说明:
-d 表示svnserver以“守护”进程模式运行
-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库
如: svn://192.168.12.118/fitness

这时SVN安装就完成了.
局域网访问方式:
例如:svn checkout svn://192.168.12.118/fitness --username mirze --password 123456 /var/www/fitness


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

二、HTTP:// [apache]
1.安装包 [已安装subversion]
$ sudo apt-get install libapache2-svn

创建版本仓库:
sudo svnadmin create /目录地址
目录地址必须存在,这个就是保存版本仓库的地方,不同的版本仓库创建不同的文件夹即可,比如:
sudo svnadmin create /home/svn/project
本来/home/svn/project这个目录下什么都没有,执行下面的命令之后再去看一下,多出一些文件和文件夹,我们需要操作的是conf这个文件夹,这个文件夹下有一个文件,叫做passwd,用来存放用户名和密码。
然后把这个版本仓库目录授权给apache读写:
sudo chown -R www-data:www-data /目录地址
然后来到打开apache配置文件:
sudo gedit /etc/apache2/mods-available/dav_svn.conf

加入如下内容:
<Location /project>
DAV svn
SVNPath /home/svn/project
AuthType Basic
AuthName “myproject subversion repository”
AuthUserFile /home/svn/project/conf/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>

location说的是访问地址,比如上述地址,访问的时候就是
http://127.0.0.1/project
其中有两行被注释掉了,以保证每次都需要用户名密码。
最后一步就是创建访问用户了,建议将用户名密码文件存放在当前版本仓库下conf文件夹下,这样版本仓库多的时候无至于太乱。
因为conf文件夹下已经存在passwd文件了,所以直接添加用户:
sudo htpasswd -c /home/svn/project/conf/passwd test
然后输入两遍密码,laoyang这个用户就创建好了。
打开/home/svn/project/conf/passwd这个文件,会开到形如如下形式的文本:
test:WEd.83H.gealA //后面是加密后的密码。
创建以后,再次需要往别的版本仓库添加这个用户,直接把这一行复制过去就可以了。
重启apache就可以了。
sudo /etc/init.d/apache2 restart


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

三、同步更新 [勾子]

同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。
知识点:
1、SVN的hooks
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现
post-commit具体实现细节
post-commit脚本
编辑文件:sudo vim /home/svn/fitness/hooks/post-commit
注意:编辑完成post-commit后,执行:sudo chmod 755 post-commit
内容:
#!/bin/sh
export LANG=zh_CN.UTF-8
sudo /usr/bin/svn update /var/www/www --username mirze --password 123456
#Set variable
SVN=/usr/bin/svn
WEB=/home/test_nokia/
RSYNC=/usr/bin/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP="192.168.0.23"
export LANG=en_US.UTF-8

#update the code from the SVN
$SVN update $WEB --username user --password password
#If the previous command completed successfully, to continue the following
if [ $? == 0 ]
then
echo "" >> $LOG
echo `date` >> $LOG
echo "##############################" >> $LOG
chown -R nobody:nobody /home/test_nokia/
#Synchronization code from the SVN server to the WEB server, notes:by the key
$RSYNC -vaztpH --timeout=90 --exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG
fi

以上是具体的post-commit程序
注意事项:
1、一定要定义变量,主要是用过的命令的路径。因为SVN的考虑的安全问题,没有调用系统变量,如果手动执行是没有问题,但SVN自动执行就会无法执行了。
2、SVN update 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码如果只是手动一样会更新,但自动一样的不行。
3、加上了对前一个命令的判断,如果update的时候出了问题,程序没有退出的话还会继续同步代码到WEB服务器上,这样会造成代码有问题
4、记得要设置所属用户,因为rsync可以同步文件属性,而且我们的WEB服务器一般都不是root用户,用户不正确会造成WEB程序无法正常工作。
5、建议最好记录日志,出错的时候可以很快的排错
6、最后最关键的数据同步,rsync的相关参数一定要清楚,这个就不说了。注意几个场景:
这里的环境是SVN服务器与WEB服务器是开的
把SVN服务器定义为源服务器 WEB服务器为目的服务器
场景一、如果目的WEB服务器为综合的混杂的,像只有一个WEB静态资源,用户提交的,自动生成的都在WEB的一个目录下,建议不要用–delete这个参数
上面这个程序就是这样,实现的是源服务器到目的服务器的更新和添加,而没有删除操作,WEB服务器的内容会多于源SVN的服务器的
场景二、实现镜像,即目的WEB服务器与源SVN服务器一样的数据,SVN上任何变化WEB上一样的变化,就需要–delete参数
场景三、不需要同步某些子目录,可能有些目录是缓存的临时垃圾目录,或者是专用的图片目录(而不是样式或者排版的)要用exclude这个参数
注意:这个参数的使用不用写绝对路径,只要目录名称就行 aa代表文件 aa/ 代表目录 ,缺点就是如果有多个子目录都是一样的名称那么这些名称就都不会被同步
建议用–exclude-from=/home/svn/exclude.list 用文件的形式可以方便的添加和删除
exclude.list

.svn/
.DS_Store
images/

利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。

5. 添加用户并设置权限
这里是架设服务器最复杂的地方,笔者试图把这里搞清楚,可惜,还是有些疑问!??好在服务器还能运转!
首先说,通过http协议传输数据时,用户是通过apache来操做svn版本库的,subversion是通过一些模块和apache进行通讯的。具体原理,有兴趣的朋友可以google相关资料。设置用户访问权限,有这么几个工作要做:

(1)版本库的密码文件,一般命名为PasswdFile,由用户通过命令创建,里面保存授权用户的用户名和MD5加密后的密码
(2)apache的httpd.conf文件,我理解这个文件是连接用户、apache、subversion的桥梁
这里只总结一下具体操作方法:
5.1 创建密码文件,密码文件保存在你的版本库文件目录下,在终端通过下面的命令创建密码文件
htpasswd -c /etc/svn/passwordfile username

//建立新文件及使用者
htpasswd -c -b filename userName passWord

//新增使用者或更新原使用者密碼
htpasswd -b filename userName passWord
解释:/etc/svn/ 版本库的目录,建议采用完整路径,也就是你从filesystem一路找到你的版本库的所有文件夹
passwordfile 密码文件名称,可以由用户自行命名
username 你希望添加的用户名,比如zhangsan,lisi,wangwu
-c 用来创建密码文件,这个命令在密码文件不存在的情况下可以创建一个文件,可以看到的哦!然后再添加其他
用户时可以去掉这个命令字。
回车执行本命令,会要求你输入密码,一共需要输入两便,添加成功后会提示add user username,然后可以再继续添加
第二个用户。
htpasswd /etc/svn/passwordfile seconduser
反复执行此程序,将自己需要添加的用户添加进去!如果以后有需要还要添加别的用户,也可以单独执行上边的这条命令来
添加。
文件创建完成后,你可以去目录下看一看是否有这么一个文件存在!实际上,应该是存在的,不存在的话就是操作没有成功啊!
5.2 配置httpd.conf文件
文件位置,正常安装的话在etc/apache2/ 目录下,双击打开进行编辑,添加如下内容
#LoadModule dav_module modules/mod_dav.so 加载mod_dav模块
#LoadModule dav_svn_module modules/mod_dav_svn.so 加载mod_dav_svn模块
LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so 加载mod_anthz.svn模块
<Location /vcard> location标签头
DAV svn
SVNPath /home/bb/svn/vcard/ 指明版本库的路径
AuthType Basic 认证类型为基本认证
AuthName "SVN repos" 认证名称,将在IE界面弹出一个对话框,其标题就是SVN repos
AuthUserFile /home/bb/svn/vcard/VcardPasswdFile 加载密码文件
# AuthzSVNAcessFile //home/bb/svn//vcard/accesspolicy
# satisfy Any
Require valid-user 要求验证用户,即不能匿名访问
</Location> location标签尾
加#号的语句被注释掉了!如果有两个以上的版本库,可以针对每个版本库添加不同的location标签,两个互不影响。
配置完成后,重启apache,在IE里输入:http://localhost/vcard(即版本库名称),可以看到如下对话框





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-13 22:25

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表