在Ubuntu 11.10上安装Subversion并通过不同协议配置访问
Subversion (svn)是一个开源版本控制系统(VCS),用于开发许多软件项目。 本教程将介绍如何在Ubuntu 11.10上安装Subversion,以及如何配置它以允许通过不同协议访问存储库: file://
, http://
, https://
, svn://
和svn + ssh: //
。
我不会保证这将为您工作!
1初步说明
本教程专注于Subversion安装和配置,而不是其使用。 您可以在这里找到usefull svn命令列表: http : //wiki.greenstone.org/wiki/index.php/Useful_SVN_Commands 。 完整的svn文档在这里: http : //svnbook.red-bean.com/en/1.5/index.html
我在这里使用的Ubuntu 11.10系统具有IP地址192.168.0.100
,我将在本教程中的各种svn
命令中使用。 确保将其替换为您自己的服务器的IP /主机名。
2安装Subversion
Subversion可以安装如下:
apt-get install subversion
接下来我们创建一个保存我们的存储库/存储库的目录
- 我使用/ var / lib / svn
,但是如果你喜欢,可以使用另一个目录。
mkdir -p /var/lib/svn
我想在/ var / lib / svn目录中
为我的名为myproject的
软件项目创建一个存储库
,这可以如下完成:
svnadmin create /var/lib/svn/myproject
当然,仓库是空的,直到我们将项目导入它。
有几种可以用来访问svn的方法或协议:
-
file://
- 通过这个协议可以直接访问存储库。 仅在同一系统(本地磁盘)上运行,而不是通过网络运行。 开箱即用 -
http://
- 可以在Subversion感知的Apache2服务器上使用WebDAV来访问存储库。 通过网络(端口80)工作。 -
https://
- 与http://
相同,但通过安全的SSL连接(端口443)。 -
svn://
- 通过svnserve服务器访问存储库。 通过网络工作(端口3690)。 -
svn + ssh://
- 与svn://
相同,但通过SSH隧道(端口22)。
3使用文件://协议
文件://
协议工作开箱即用(不需要任何服务器进程),但仅在本地,不通过网络。
我们可以使用它将我们的软件项目(我已经存储在/ home / falko / myproject中
)导入到/ var / lib / svn / myproject
存储库中:
svn import /home/falko/myproject file://localhost/var/lib/svn/myproject
结帐可以如下进行:
svn co file://localhost/var/lib/svn/myproject /home/falko/somedir
4使用http://协议
对于http://
协议,我们需要在Apache2服务器上配置WebDAV。 因此,我们现在安装Apache2和Apache2 SVN模块:
apt-get install apache2 libapache2-svn
现在我们通过编辑/etc/apache2/mods-available/dav_svn.conf来配置Apache2 SVN模块:
vi /etc/apache2/mods-available/dav_svn.conf
该文件中已有一个配置,但已被注释掉。 您可以将其注释掉,但在文件末尾,请添加以下行:
[...] <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> |
重新启动Apache:
/etc/init.d/apache2 restart
因为我们将从现在开始就像Apache用户( www-data
)和组( www-data
)一样读写我们的存储库,所以我们必须将/ var / lib / svn
及其子目录的所有者和组更改为Apache用户现在组:
chown -R www-data:www-data /var/lib/svn
请注意:如果您决定使用http://
或https://
访问SVN, 请不要再使用任何其他协议写入SVN ,因为更改后的文件的所有权将与Apache用户/组不匹配,如果你不要使用http://
或https://
!
现在我们必须创建包含所有可以访问SVN的用户的密码文件/etc/apache2/dav_svn.passwd
(我将使用用户falko
直到
这里)。
htpasswd -c /etc/apache2/dav_svn.passwd falko
请注意:仅当您首次创建/etc/apache2/dav_svn.passwd
文件时,才使用-c
开关。 如果要添加其他用户,请将其退出(否则文件将从头开始创建,这意味着您丢失了已经在文件中的所有用户):
htpasswd /etc/apache2/dav_svn.passwd till
您现在可以使用http://
协议进行如下检查:
请确保使用正确的用户名:
svn co --username falko http://192.168.0.100/svn/myproject /home/falko/somedir
5使用https://协议
如果要使用https://
,请按照第4章,然后执行此操作以启用SSL Apache模块和默认SSL网站:
a2enmod ssl
a2ensite default-ssl
/etc/init.d/apache2 restart
(请注意,默认的Apache SSL网站使用自签名证书,您可能希望将其替换为受信任CA的证书。您可能需要查看本教程了解更多详细信息: 如何设置SSL Vhost在Apache2下Ubuntu 9.10 / Debian Lenny 。)
现在您可以通过https://
访问SVN,也可以访问http://
。 如果您只希望https://
,可以按如下所示禁用http://
打开/etc/apache2/mods-available/dav_svn.conf
并注释掉/删除您在第4章中添加的部分:
vi /etc/apache2/mods-available/dav_svn.conf
[...] # <Location /svn> # DAV svn # SVNParentPath /var/lib/svn # AuthType Basic # AuthName "Subversion Repository" # AuthUserFile /etc/apache2/dav_svn.passwd # <LimitExcept GET PROPFIND OPTIONS REPORT> # Require valid-user # </LimitExcept> # </Location> |
然后打开默认SSL vhost的vhost配置文件/ etc / apache2 / sites-available / default-ssl
,并在<VirtualHost>
和</ VirtualHost>
之间添加相同的部分:
vi /etc/apache2/sites-available/default-ssl
[...] <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> [...] |
然后重新启动Apache:
/etc/init.d/apache2 restart
您可以使用https://
协议进行如下检查:
svn co --username falko https://192.168.0.100/svn/myproject /home/falko/somedir
请注意:如果您决定使用http://
或https://
访问SVN, 请不要再使用任何其他协议写入SVN ,因为更改后的文件的所有权将与Apache用户/组不匹配,如果你不要使用http://
或https://
!
6使用svn://协议
我们可以通过启动svnserve
守护进程来使用svn://
协议。
在我们这样做之前,我们为我们的存储库配置密码保护。 每个存储库
中都有一个conf / svnserve.conf
文件,因此对于/ var / lib / svn / myproject,
它是/var/lib/svn/myproject/conf/svnserve.conf
。 打开该文件...
vi /var/lib/svn/myproject/conf/svnserve.conf
...并取消注释password-db = passwd
行:
[...] [general] ### These options control access to the repository for unauthenticated ### and authenticated users. Valid values are "write", "read", ### and "none". The sample settings below are the defaults. # anon-access = read # auth-access = write ### The password-db option controls the location of the password ### database file. Unless you specify a path starting with a /, ### the file's location is relative to the directory containing ### this configuration file. ### If SASL is enabled (see below), this file will NOT be used. ### Uncomment the line below to use the default password file. password-db = passwd ### The authz-db option controls the location of the authorization ### rules for path-based access control. Unless you specify a path ### starting with a /, the file's location is relative to the the ### directory containing this file. If you don't specify an ### authz-db, no path-based access control is done. ### Uncomment the line below to use the default authorization file. # authz-db = authz ### This option specifies the authentication realm of the repository. ### If two repositories have the same authentication realm, they should ### have the same password database, and vice versa. The default realm ### is repository's uuid. # realm = My First Repository [...] |
passwd
是指同一目录中的passwd
文件,即/ var / lib / svn / myproject / conf / passwd
。 打开该文件并添加SVN用户和密码(密码为明文):
vi /var/lib/svn/myproject/conf/passwd
### This file is an example password file for svnserve. ### Its format is similar to that of svnserve.conf. As shown in the ### example below it contains one section labelled [users]. ### The name and password for each user follow, one account per line. [users] falko = falkospassword till = tillspassword |
我们现在可以启动svnserve
守护进程:
svnserve -d -r /var/lib/svn/
( -d
开关使其在后台运行为守护程序。)
跑
netstat -tap | grep svn
你应该看到snvserve
正在监听端口3690( :svn
):
root@server1:~# netstat -tap | grep svn
tcp 0 0 *:svn *:* LISTEN 2950/svnserve
root@server1:~#
现在我们可以使用svn://
协议。 例如,可以如下进行结帐:
svn co --username falko svn://192.168.0.100/myproject /home/falko/somedir
7使用svn + ssh://协议
要通过SSH隧道传递svn://
协议,只需按照第6章的步骤,确保您的Ubuntu系统上运行SSH damon(如果没有,则可以通过运行
apt-get install openssh-server ssh
)
而已! 你现在要做的就是使用svn + ssh://
而不是svn://
,例如,可以按如下方式完成一个结帐:
svn co --username falko svn+ssh://192.168.0.100/var/lib/svn/myproject /home/falko/somedir
8链接
- Subversion: http : //subversion.apache.org/
- Ubuntu: http : //www.ubuntu.com/