在Debian上设置Subversion和websvn

在Debian上设置Subversion和websvn

这个howto的目的

本文将说明一种在Debian服务器上安装和配置Subversion和websvn的方法,具有以下功能:

  • 多个存储库Subversion
  • 通过WebDAV(http,https)和ssh访问存储库
  • Linux系统帐户访问控制和/或Apache级访问控制
  • 一个安全的webvn (php web应用程序,便于代码浏览)
  • 在webvn中使用gnu enscript配置语法着色
在这个howto中我不会专门配置 inetdsvnserve 。请放心,如果没有它,Subversion将完全运行。你可以复制/粘贴大部分的howto来使其工作。

假定已安装的软件包

这个方法假设安装和配置了PHP和apache2。 使用SSL配置apache2是可选的。

设置Subversion

Subversion包

作为root用户,您可以输入以下命令来安装Subversion安装所需的软件包:

# apt-get update
# apt-get install subversion
# apt-get install libapache2-svn

软件包libapache2-svn将安装subversion WebDAV apache模块。

创建和填充存储库

要使用这个方法,我们将创建两个回录:

# mkdir /var/svn-repos/
# svnadmin create --fs-type fsfs /var/svn-repos/project_zen
# svnadmin create --fs-type fsfs /var/svn-repos/project_wombat 

存储库目录需要适当的apache和其他用户的权限。 我会组成一个组,并添加用户(不要只是在这里复制/粘贴) 。 apache用户不会被放在组中,因为我发现它不太安全。

# groupadd subversion
# addgroup john subversion
# addgroup bert subversion
# addgroup you subversion
...
# chown -R www-data:subversion /var/svn-repos/*
# chmod -R 770 /var/svn-repos/*

让我们设置简单的ssh连接,在用户机上输入以下命令:

$ mkdir ~/.ssh/
$ cd ~/.ssh/
$ ssh-keygen -t dsa
$ cat ~/.ssh/id_dsa.pub | ssh you@example.com "cat - >> ~/.ssh/authorized_keys"

服务器example.com是我们安装Subversion的服务器。 为了方便ssh使用,您可以选择不使用密钥或使用代理进行身份验证。 否则用户机器和Subversion之间的每个事务都将要求用户输入密码(非常不方便)。 使用代理可以这样做:

$ ssh-agent
$ ssh-add
$ ssh you@example.com

现在应该设置全部使用存储库。 您可以像这样测试,它显示导入和结帐:

$ mkdir ~/TEMP/
$ echo "testing svn" > ~/TEMP/testing.txt
$ svn import -m "importing test over ssh+svn" ~/TEMP/ svn+ssh://example.com/var/svn-repos/project_zen/trunk
$ svn co svn+ssh://example.com/var/svn-repos/project_zen/trunk testcheckout

因此,test.txt文件应该在一个名为testcheckout的目录中 。 在服务器端,您可以使用svnlook检查存储库。

# svnlook tree /var/svn-repos/project_zen/

配置Subversion WebDAV

通常apache mod将默认启用,以确保这是真的输入以下命令:

# a2enmod dav
# a2enmod dav_svn

配置在文件/etc/apache2/mods-available/dav_svn.conf中完成,但首先我们将创建一个访问文件。

# htpasswd2 -c /etc/apache2/dav_svn.passwd you
# htpasswd2 /etc/apache2/dav_svn.passwd john
# htpasswd2 /etc/apache2/dav_svn.passwd sten
...

这是我的/etc/apache2/mods-available/dav_svn.conf文件的内容:

		<Location /svn_zen>
DAV svn
SVNPath /var/svn-repos/project_zen
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
SSLRequireSSL
</Location>

<Location /svn_wombat>
DAV svn
SVNPath /var/svn-repos/project_wombat
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
SSLRequireSSL
</Location>

如果您不想使用SSL,则可以取消对SSLRequireSSL文件的注释 ,但是后续命令中需要使用http而不是https 。 Apache应该重新启动,我们可以从用户机器进行测试。 我们将在wombat项目中导入相同的测试文件。

# /etc/init.s/apache2 restart
$ svn import -m "testing over https" https://example.com/svn_wombat ~/TEMP/

使用Web浏览器,您可以访问您的URL https://example.com/svn_wombat ,并查看刚刚提交的内容。 这是存储库中的基本在线视图,但是使用像webvn这样的Web字体末端将提供更好的存储库浏览体验。

设置websvn

所需包

要使用websvn滚动,我们需要安装以下软件包,它们都将显示配置屏幕(在下一段中说明):

# apt-get install enscript
# apt-get install websvn

Enscript不是强制性的,但是我们需要它在websvn中进行语法着色。

组态

Enscript将要求纸张大小,这可能看起来很尴尬,但这是因为enscript也用于将ASCII文件转换为PostScript。 我们需要它的语法着色功能。

Websvn将首先询问要配置哪种服务器,然后按Enter键。

下一个屏幕要求父存储库文件夹( / var / svn-repos /在这种情况下)和特定的存储库文件夹,这将确定哪些存储库将显示在websvn中。我们只会输入父资料库,这个文件夹中创建的所有资料库都会显示在websvn中,供用户浏览。如果要仅显示特定存储库,请在第二个屏幕中输入其完整路径,并将父路径留空。
因此,文件 /etc/websvn/svn_deb_conf.inc将被写入。您可以使用 dpkg-reconfigure重新运行debian软件包配置屏幕。进一步的webvn配置在文件 /etc/websvn/config.inc中完成。这是我的文件的内容与语法着色的一些扩展映射。

		<?php
// --- LOOK AND FEEL ---
//
// Uncomment ONLY the display file that you want.
$config->setTemplatePath("$locwebsvnreal/templates/Standard/");
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/");
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/");
// $contentType[".c"] = "plain/text"; // Create a new association
// $contentType[".doc"] = "plain/text"; // Modify an existing one
unset($contentType[".sh"]); // Remove a default association -> .sh is regarded as a binary file by default, needs to be unset
// --- COLOURISATION ---
// Uncomment this line if you want to use Enscript to colourise your file listings
//
// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature.
// Set the path above.
//
$config->useEnscript();
// Enscript need to be told what the contents of a file are so that it can be colourised
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript
// file type (viewable in setup.inc).
//
// Here you should add and other extensions not already listed or redefine the default ones. eg:
//
// php is default correctly colourized
$extEnscript[".java"] = "java";
$extEnscript[".pl"] = "perl";
$extEnscript[".py"] = "python";
$extEnscript[".sql"] = "sql";
$extEnscript[".java"] = "java";
$extEnscript[".html"] = "html";
$extEnscript[".xml"] = "html";
$extEnscript[".thtml"] = "html";
$extEnscript[".tpl"] = "html";
$extEnscript[".sh"] = "bash";
// --- MISCELLANOUS ---
// Uncomment this if you don't have the right to use it. Be warned that you may need it however!
set_time_limit(0);
// Comment this line to turn off caching of repo information. This will slow down your browsing.
$config->setCachingOn();
// Number of spaces to expand tabs to in diff/listing view across all repositories
$config->expandTabsBy(8);
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// $config->findRepository("myrep")->expandTabsBy(3); // Expand Tabs by 3 for repository 'myrep'
?>
<?php
if ( file_exists("/etc/websvn/svn_deb_conf.inc") ) {
include("/etc/websvn/svn_deb_conf.inc");
}
?>

接下来是为websvn配置apache virtualhost。
使用SSL的示例:

		<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName svn.example.com
DocumentRoot /var/www/websvn/
<Location />
Options FollowSymLinks
order allow,deny
allow from all
AuthType Basic
AuthName "Subversion Repository"
Require valid-user
AuthUserFile /etc/apache2/dav_svn.passwd
<IfModule mod_php4.c>
php_flag magic_quotes_gpc Off
php_flag track_vars On
</IfModule>
</Location>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

没有SSL的示例:

		<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName svn.example.com
DocumentRoot /var/www/websvn/

<Location />
Options FollowSymLinks
AllowOverride None
order allow,deny
allow from all
AuthType Basic
AuthName "Subversion Repository"
Require valid-user
AuthUserFile /etc/apache2/dav_svn.passwd
<IfModule mod_php4.c>
php_flag magic_quotes_gpc Off
php_flag track_vars On
</IfModule>
</Location>
</VirtualHost>

重新启动apache,并在https://svn.example.com/上查看结果。

有用的Subversion引用

获取更多信息

Subversion客户端

我希望你找到这个有用的东西。 这不是一个完美的设置,但希望它可以帮助您使用Subversion。 请随意添加评论或更正。

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

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

支付宝扫一扫打赏

微信扫一扫打赏