安装Subversion和配置通过不同的协议访问在Ubuntu 11.10

在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链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏