Linux下SVN服务器安装及配置记录
Linux下SVN服务器安装配置
第一章 安装
1. 采用源文件编译安装。源文件共两个,为:
subversion-1.6.1.tar.gz (subversion 源文件)
subversion-deps-1.6.1.tar.gz (subversion依赖文件)
注意文件版本必须一致,否则很容易产生各种奇怪的问题.
2. 上传以上两个文件到服务器上,解压。解压命令为:
tar xfvz subversion-1.6.1.tar.gz
tar xfvz subversion-deps-1.6.1.tar.gz
指令简介:tar 为解压命令,xfvz为tar命令的参数,用于解压tar.gz格式压缩的文件。
3. 解压后生成 subversion-1.6.1 子目录,两个压缩包解压后都会自动放到此目录下,不用手动更改。
4. 进入解压子目录:
cd subversion-1.6.1
5. 执行 ./configure --prefix=/usr/local/svn
./configure时会出现以下错误:configure: error: We require OpenSSL; try –with-openssl configure failed for serf。 这是因为没有安装openssl相关包 openssl官方网址:/
linux下openssl的安装:
wget /source/openssl-1.0.0g.tar.gz
tar xvzf openssl-1.0.0g.tar.gz
cd openssl-1.0.0g
然后:
./config --prefix=/usr/local/ssl shared zlib-dynamic enable-camellia 更多详细帮助请运行
./config --help
然后执行: make depend Make
Make test
make install 编辑/etc/ld.so.conf, add to paths /usr/local/ssl/lib(可以直接在
/etc/ld.so.conf.d文件夹下再创建一个.conf文件,把/usr/local/ssl/lib拷贝到里面,另外也可以在现有的.conf文件中添加/usr/local/ssl/lib这个路径,反正ld.so.conf中包含了这个文件夹下的所有.conf文件) 安装之后会在/usr/local下生成一个ssl目录,设置环境变量,在/etc/profile的PATH中增加如下内容:
PATH=/usr/local/ssl/bin:/sbin/:$PATH:/usr/sbin
export PATH
6.再进到subversion-1.6.1 再执行 ./configure --prefix=/opt/subversion 进行配置设定并指明安装目录. 注意prefix前是两个减号. 默认不带BDB包, 所以默认使用的是FSFS模式. 若想使用BDB模式需另外下载BDB包.建议使用FSFS模式.
指令简介:configure命令用于检查安装平台和目标特征,prefix用于指定路径。
configure完成可能会出现:
You don’t seem to have Berkeley DB version 4.0.14 or newer installed and linked to APR-UTIL. We have created Makefiles which will build without the Berkeley DB back-end; your repositories will use FSFS as the default back-end. You can find the latest version of Berkeley DB here:
/technology/software/products/berkeley-db/index.html
你似乎没有Berkeley DB版本4.0.14或更新版本安装并链接至四月- util的。我们已创建Makefile文件的将建立一个没有了Berkeley DB后端,你的版本库作为默认后端使用FSFS格式。你可以找到最新版本Berkeley DB的位置。
这个提示可以跳过, 因为不使用BDB存储。
7. 执行 make 编译.
8. 执行 make install 安装.
9. 添加环境变量:
vi /etc/profile
在文件最后加入:
SVNPATH=$PATH:/usr/local/svn/bin
export SVNPATH
10. 测试SVN是否安装成功,执行:
svnserve --version
如果显示版本信息, 则安装成功. (如果没有安装svnserve,请先安装apt-get install subversion)
第二章 配置
本系统采用为每个项目单独建一版本库的策略。配置文件,密码文件,访问控制文件等都放在版本库的conf目录下。所以每次开始一个新项目都必须新建一个版本库,并重新配置各配置文件。还有很重要的一条,要求各组员重新配置客户端,包括服务器版本库路径,本地路径等信息。
1. 建立版本库目录,建立好的版本库目录与安装目录不在同级目录下(可建立多个,新建库后以下各项都需重新配置。注意区别安装目录与版本库目录,以下讲的都是版本库目录)
mkdir –p /opt/svndata/repos
2. 建立svn版本库(与上面目录对应)
svnadmin create /opt/svndata/repos
执行此命令后svn自动在repos目录下添加必须的配置文件.
注意:版本库不同于一般的文件夹, 直接在操作系统上新建文件无法被SVN识别, 必须使用import等命令将文件导入版本库.
此为svn内部指令,create用于新建版本库。请使用svn help查看详细说明。
3. 修改版本库配置文件
vi /opt/svndata/repos/conf/svnserve.conf
各参数功能在配置文件的注释中有说明, 此处配置如下:
[general]
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
password-db = /opt/svndata/repos/conf/passwd # 指明密码文件路径
authz-db = /opt/svndata/repos/conf/authz # 访问控制文件
realm = /opt/svndata/repos # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
其它采用默认配置. 各语句都必须顶格写, 左侧不能留空格, 否则会出错.
指令简介:这是svn配置文件的格式,请按照以上格式书写。
4. 配置用户
passwd文件
输入以下内容:
[users]
<用户1> = <密码1> admin = admin
<用户2> = <密码2> username2 = password2
可以添加多个,此为用户名密码对。
5. 配置权限
authz文件
指令简介:此配置文件采用“基于路径的授权”策略,中括号里指定路径,以下列出对各用户的授权。包括只读r,读写rw。没有列出的用户,则不允许访问。还可以对用户分组,具体请参考svn手册,以下是简单例子:
用户组格式:
[groups]
<用户组名> = <用户1>,<用户2>
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方框号内部分可以有多种写法:
/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定
/opt/svndata。这样,/就是表示对全部版本库设置权限。
repos1:/,表示对版本库1设置权限
repos2:/abc, ,表示对版本库2中的abc项目设置权限
repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。
示例:
[groups]
MDS4000II_group = admin,zhangl
[/]
admin = rw
viewer = r
[/dev]
admin = rw
viewer = r
* =
[/baseline]
admin = rw
* =
[/prj]
admin = rw
* =
[/dev/01 MDS4000II]
@MDS4000II_group = rw
* =
注意:配置auth 、passwd和svnserve.conf一定要心细,否则客户端访问时会认证失败,如不能访问,百度和谷歌上有很多资料可供参考。
三、启动svn
1.建立启动svn 的用户
useradd svn
passwd svn
根据提示为用户svn 设置密码
允许用户svn 访问版本库
chown -R svn:svn /opt/svndata
2.启动svn
(1)用设定帐户启动
su - svn -c "svnserve -d --listen-port 3690 -r /opt/svndata" 其中:
su – svn 表示以用户svn 的身份启动svn
-d 表示以daemon 方式(后台运行)运行
--listen-port 3690 表示使用3690端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root 权限
-r /opt/svndata 指定根目录是/opt/svndata
启动时遇到的问题:
启动svnserve时出现cannot bind server socket:address already in use
解决方法:
方法一:找出svnserve id 杀死掉进程
netstat -ntlp
kill -9 id
方法二:重新指定一个端口号(默认端口3690)
svnserve -d --listen-port 3691 -r /opt/svndata/repos
(2)对于单个代码仓库:
启动命令: svnserve -d -r 版本库路径 --listen-host 192.168.1.178 示例:
其中-d 表示在后台运行, -r 指定服务器的根目录,
如果服务器有多ip 的话--listen-host 来指定监听的ip 地址.
(3)对于多个代码仓库:
我们在启动时也可以用-r 选项来指定服务器根目录, 但访问时需要写上每个仓库相对于svn 根目录的相对路径.
比如, 我们有两个代码仓库/opt/svndata/repos1 和/opt/svndata/repos2, 我们用:svnserve -d -r /opt/svndata --listen-host 192.168.1.178 来启动, 那么在客户端访问时可以用svn://192.168.1.178/repos1 和
svn://192.168.1.178/repos2 来分别访问两个项目启动完成以后
3.检查是否启动成功:(查看是否存在svnserve 进程)
ps -ef|grep svnserve
如果显示如下,即为启动成功:
root 1170 1 0 22:02 ? 00:00:00 svnserve -d --listen-port 3691 -r /opt/svndata/repos
我是用root 帐户启动的:
四、SVN客户端安装
1.
安装好后,这样访问服务器时就可以直接用svn:// 服务器ip 来访问了。
在桌面上右击TortoiseSVN ----Repo-brower, svn 客户端中通过svn://192.168.1.178 来访问svn 服务器
注意:如出现:Error: Can't connect to host '': 由于目标机器积极拒绝,无法连接的问题,请检查服务器svnserve是否启用,监听是否打开。
第二篇:Linux下SVN服务器的搭建与配置
Linux下SVN服务器的搭建与配置
下载最新的svn压缩包/downloads/subversion-1.4.5.tar.gz //解压SubVersion安装包 (root用户进行下面的操作) # tar xvzf subversion-1.4.5.tar.gz
//进入解压后的目录
# cd Subversion-1.4.5
//配置subversion安装
#./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2 --with-ssl --with-zlib --enable-maintainer-mode
# make
//安装
# make install
//创建库文件所在的目录 (svnroot用户进行下面的操作)
# mkdir /home/svnroot/repository
//进入subversion的bin目录
# cd /usr/local/subversion/bin
//创建仓库"test"
# ./svnadmin create /home/svnroot/repository/test
# cd /home/svnroot/repository/test
//看看是不是多了些文件,如果是则说明Subversion安装成功了
# ls –l
# cd /usr/local/subversion/bin
//这条语句将把路径/home/user/import下找到的文件导入到你创建的Subversion 仓库中去, //提交后的修订版为1。
# ./svn import /home/user/import file:///home/svnroot/repository/test –m "注释"
//不让其他人有该目录的权限
# chmod 700 /home/svnroot/repository
修改Apache配置文件
# cd /usr/local/apadche2/bin
//启动Apache
# ./apachect1 start
# vi /usr/local/apache2/conf/httpd.conf
//在最下面添加
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /home/svnroot/repository/ //svn父目录
AuthzSVNAccessFile /home/svnroot/repository/authz.conf //权限配置文件
AuthType Basic //连接类型设置
AuthName "Subversion.zoneyump" //连接框提示
AuthUserFile /home/svnroot/repository/authfile //用户配置文件
Require valid-user //采用何种认证
</Location>
//其中authfile是通过"htpasswd [–c] /home/svnroot/repository/authfile username password"来创建的
//"Require valid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它, //则只能第一个用户可以访问新建库
6. 权限管理
1)增加用户
# htpasswd [-c] /home/svnroot/repository/authfile wooin
//第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码,完成对用户的增加
# htpasswd authfile 用户名(加入新的用户)
2)权限分配
# vi /home/svnroot/repository/authz.conf
[test:/] //这表示,仓库test的根目录下的访问权限
wooin = rw //test仓库wooin用户具有读和写权限
bao = r //test仓库bao用户具有读权限
[test2:/] //test2仓库根目录下的访问权限
wooin = r //wooin用户在test2仓库根目录下只有读权限
bao = //bao用户在 test2仓库根目录下无任何权限
[/] //这个表示在所有仓库的根目录下
* = r //这个表示对所有的用户都具有读权限
#[groups] //这个表示群组设置
#svn1-developers = wooin, bao //这个表示某群组里的成员
#svn2-developers = wooin
#[svn1:/]
#@svn1-developers = rw //如果在前面加上@符号,则表示这是个群组权限设置
将这个设置完成后。重启Apache,就可以通过
http://localhost/svn/test
这个URL来访问仓库了,当然,受权限的限制,必须是合法用户才能访问且具有相应的权
限
7. 一些备忘:
1. svn checkout http://localhost/svn/hello.world
2. svn commit 时的默认编辑器的环境变量$SVN_EDITOR=vi需要手动设定,用kate好像有问题
3. 如果linux的登录用户名密码都和svn的其中一个用户名密码相同时,在checkout的时候不会要求输 入用户名密码直接就可以checkout出来。比如:linux有个用户wooin,svn也有一个用户wooin,并且密码 都是一样的,当用wooin登录linux后,执行checkout,可以直接提取出源码文件,不用输入认证信息。
4. 在svn使用过程中牵扯到几种权限:文件系统的权限,linux系统权限,svn用户的权限,apache进程的权限。
文件系统的权限,linux系统权限:这里相同的意思,就是平时大家使用linux时文件夹和文件的访问权限。在 svn建立仓库,文件夹,配置文件的时候用svnroot用户,并将仓库权限设置为700,不允许其他用户直接通过 文件系统查看,只能由svnroot进行管理。
apache进程的权限:因为所有跟仓库传输的操作都是通过apache进程进行的,所以即使你给svn用户设置了 很大的权限,但是apache进程没有访问仓库或者相关文件的权限也没有用,apache进程的权限设置在 /usr/local/apache2/conf/httpd.conf 文件中配置,找到文件中的这两行:
User daemon # 将daemon改为svnroot,让apache进程以svnroot的身份运行 Group daemon
svn用户的权限:就是在repository/authz.conf文件中设置的权限信息,是svn用来管理仓库访问权限的。
5. svn服务器设置有两种方式:http 和 svnserve。这里介绍的是http方法
6. 在/etc/profile的结尾设置一些svn启动时要做的工作 # start apache server for svn /usr/sbin/apachectl start
export SVN_EDITOR=vi
7. APR libraries 安装 SVN 的时候最好指定 --with-apr= 和 --with-apr-util= 参数到 Apache 安装的根目录
(ServerRoot)下,而不是使用缺省的 SVN 安装包中自带的 apr 。否则如果你安装的 Apache
版本不同有可能导致 APR 库不匹配,出现类似:
Can't set position pointer in file '/svn/test/db/revs/1': Invalid argument 的错误。
Updated 2006-04-20 16:30 -- 比如说如果你安装的是apache 2.2.0版本,就需要在编译安装svn的时候指定
--with-apxs和--with-apr参数到你的apache2.2.0安装目录下:
./configure --divfix=${subversionInstallFolder} /
--with-apxs=${apacheInstallFolder}/bin/apxs /
--with-apr=${apacheInstallFolder} /
--with-apr-util=${apacheInstallFolder} /
--with-ssl /
--with-zlib /
--enable-maintainer-mode