全部博文(2065)
分类: LINUX
2010-03-13 18:09:50
linux中配置SVN专题
[整理人:
遥方 整理时间:
环境:64位的centos
安装篇
一、安装Apache
安装脚本如下:
mkdir /usr/svn/
&& cd /usr/svn/
wget
/apache/httpd-
tar -jxvf httpd-
./configure
--enable-dav --enable-so --enable-nonportable-atomics
说明:
其中--enable-dav允许Apache提供DAV协议支持,--enable-so允许运行时加载DSO模块,--enable-nonportable-atomics可以在486以上的CPU上启用更加高效的基于互斥执行的原子操作。前两个参数是必须要加的,你还可以根据您的需要添加其他的参数。这里我们使用最简的安装模式。
Make && make
install
启动:/usr/local/apache2/bin/apachectl
start
二、安装SVN
下载包的地址:
deps-
解压至同一目录下,这样subversion会自动地编译、安装依赖库;
tar -jxvf subversion-
tar -jxvf
subversion-deps-
然后进入到解压缩的目录里面
./configure
--with-apxs=/usr/local/apache2/bin/apxs --enable-shared
说明:
其中,--with-apxs 用于生成apache httpd的mod_dav_svn和mod_authz_svn模块
Make && make
install
三、创建 repository
假设我们把版本库建立在/home目录下,那么执行mkdir repository新建版本库文件夹,通过svnadmin create repository/test命令可创建名为test的版本库。若创建成功,则subversion的安装便已成功完成。
具体操作步骤:
# cd /home &&
mkdir svnroot && cd svnroot
# mkdir repository
# svnadmin create
repository/test
发现就会自动生成如下的几个文件:
conf dav
db format hooks
locks README.txt
四、导入源代码
现在我们有了自已的一个版本库了。现在就可以导入源代码进来
目前我的目录是:/home/svnroot/repository
# ls
Test
在这里面我们再运行:mkdir -p
import/{trunk,branches,tags} 此命令
就可以创建新的文件目录层次出来 即import目录下面再包含三个子目录出来!
下面的语句:
svn import
/home/svnroot/repository/import file:///home/svnroot/repository/test/ -m
"Init repository"
这条语句将把路径/home/svnroot/repository/import下的目录和文件导入到你创建的Subversion 仓库中去,
运行此语句之后的输出:
新增
/home/svnroot/repository/import/trunk
新增
/home/svnroot/repository/import/branches
新增 /home/svnroot/repository/import/tags
提交后的版本为 1。
五、版本库所有者与权限修改
目前,repository目录依然为root用户所有,默认权限为755,为了让用户能够通过apache正常读写该目录,我们需要先将该目录以及该目录的上层目录svnroot的所有权交给apache 用户,然后为了安全起见,将repository和svnroot目录的权限都改为700。
操作步骤:
第一步:打开apache配置文件/usr/local/apache2/conf/httpd.conf,确保将User和Group 设置为
User www
Group www
第二步:进入/home目录,修改svn仓库的所有者
chown -R www:www
svnroot
chmod 700 svnroot
chmod 700
svnroot/repository
六、生成身份认证文件
身份认证文件保存用户的用户名和密码,用于确定用户身份。
命令: /usr/local/apache2/bin/htpasswd
-cm /home/svnroot/repository/pwdfile test
说明: 其中-c表示创建身份认证文件,-m则表示密码使用md5加密。
这样就可以创建了一个用户test
最后将pwdfile文件的所有者改为www并将其权限设置为700
chown -R www:www
pwdfile
chmod 700 pwdfile
七、创建授权文件
其中,trunk表示主干,branches则为项目的分支,tags存放某个版本的快照。习惯上来说,大多数开发人的本地拷贝都来自truck目录,所以每个开发人员都应有trunk目录的读写权限,这样他们才能正常的进行日常的开发;而分支目录一般在,如某些开发人员需要大幅修改代码以增加新功能,或者代码进入较为稳定的阶段,开始bug去处工作等情况下使用,尽管这意味着这些代码总是有固定的一个或几个开发人员维护,但是基于“源代码共同拥有”的原则,我们还是可以将其设置为所有用户具有读写权限;tags目录则一般用于某个版本的发布,比如当项目到达版本1834时,release1已经完成,那么就可以将它复制到tags目录,作为一个快照存放,取一个好记得多的名字,比如release1(似乎应该只让某些人有写入权限,这样可以防止快照被破坏,可是即使被破坏了又怎么样呢,不要忘了我们在使用一个版本管理软件)。
根据authz文件的语法,我么可以把上述的设置表达成这样:(注意每个有效配置行的前面都不能有空格)
[groups] //群组设置
g_pm =
micheal
//某群组里的成员
g_dev =
harry,sally
[test:/] //仓库test的根目录的访问权限
@g_pm =
r //g_pm组用户具有读和写权限,’@’开头的表示群组设置
@g_dev =
r
//g_dev用户具有读写权限
[test:/trunk]
//仓库test的trunk目录的访问权限
@g_pm =
rw
//g_pm组用户具有读和写权限,’@’开头的表示群组设置
@g_dev =
rw //g_dev用户具有读写权限
[test:/branches]
//仓库test的branches目录下的访问权限
@g_pm =
rw
//g_pm组用户具有读和写权限,’@’开头的表示群组设置
@g_dev =
rw //g_dev用户具有读写权限
[test:/tags]
//仓库test的tags目录下的访问权限
@g_pm =
rw //g_pm组用户具有读和写权限,’@’开头的表示群组设置
@g_dev =
rw
//g_dev用户具有读写权限
如果需要对某个用户授权,可以这么写:
[test:/branches]
//仓库test的branches目录下的访问权限
sally =
r //sally用户具有读权限
编辑完成之后将此文件的权限变更过来
不要忘记将authz文件的所有者改为apache,并且将其权限设为700。
八、修改Apache配置文件
vi
/usr/local/apache2/conf/httpd.conf
确保以下两行已被subversion正确添加
LoadModule
dav_svn_module modules/mod_dav_svn.so
LoadModule
authz_svn_module modules/mod_authz_svn.so
接着,在httpd.conf的最后添加以下内容
DAV svn
SVNParentPath
/home/svnroot/repository/
AuthType
Basic
AuthName
"Subversion
Repository"
AuthUserFile /home/svnroot/repository/pwdfile
AuthzSVNAccessFile
/home/svnroot/repository/authz
Satisfy
Any
Require
valid-user
其中/svn表示一个url的模式,匹配形如的url;SVNParentPath 指定的目录下的所有项目都被subversion 认为是合法的版本库;AuthzSVNAccessFile为授权文件
;AuthType 则制定了客户端身份认证机制,Basic表示http基本认证机制;AuthUserFile就是先前创建的密码文件;Satisfy Any 和Require valid-user告诉apache所有用户先使用匿名方式访问版本库,只有当访问控制策略要求一个真实的用户名时,apache才会对客户端进行身份验证,这是使用得最多的一种授权方式。
最后,使用如下命令重启apache httpd,打开浏览器访问这个URL便可访问版本库了,当然,受权限的限制,必须是合法用户才能访问且具有相应的权限的目录。
安装配置过程中 常见的BUG:
BUG:403 不让访问
解决:
[root@master
repository]# more authz
[groups]
g_pm = test
[test:/]
@g_pm=r
[test:/trunk]
@g_pm=rw
[test:/branches]
@g_pm=rw
[test:/tags]
@g_pm=rw
添加一个我们的权限控制配置文件进来。这样的话就可以限制哪个账号对哪些目录具备了什么样的操作权限了。非常方便哦!到时我们可以给一个开发的账号与一个其上管理员的账号信息出来!
BUG二:Server sent unexpected return value
(403 Forbidden) in response to CHECKOUT
在客户端想要checkout 的时候报403错误!
还是一样的权限错误。要注意好是否有写的权限
BUG3: 在安装SVN的时候可能会报
如果在执行make的时候报错:
could not read
symbols: Bad value SVN
我上网找了一下发现好像是说要修改MakeFile文件
解决方法:修改MakeFile文件里面的
CFLAGS = -fPIC -g
-O2 -g -O2 -pthread $(EXTRA_CFLAGS) 添加-fPIC
保存:必须make
distclean->./configure->make