在VirtualBox虚拟机搭建SVNManager环境 之一 基础设置
在VirtualBox虚拟机搭建SVNManager环境 之一 基础设置
胖老狼 发表于5年前
在VirtualBox虚拟机搭建SVNManager环境 之一 基础设置
  • 发表于 5年前
  • 阅读 1031
  • 收藏 3
  • 点赞 0
  • 评论 0

零 概述

     本文记述在LINUX下搭建SVNManager的运行环境的方法。SVNManager是一个用PHP开发的开源工程。其官网是:http://svnmanager.sourceforge.net/ 。该官网上也给出了一个看似很详细的安装说明。我在研究初期也是按照该官网上的说明进行安装的,但遇到了很多问题。因此写下本文,以便说明这一路上所现问题的解决方法。
     搭建环境有两种策略:策略一,是用安装包安装,该法最大的好处是方便,不足的地方法是需要用到root权限;策略二,是用源码安装,这种方法很自由,并不依赖root权限,但是复杂度很大,比较考验人的耐心与抗挫力,成就感也最大。本文先从简单入手,介绍用安装包安装的方法。后面有时间再说说用源码安装的方法。
     我的宿主机是WIN7,虚拟机为ubuntu-12.04.2-server-i386,SVNManager为1.09版本。

一 安装ubuntu server与配套工具

  其实现在安装大多数的LINUX都是很方便的了。即便不去找资料,按提示输入一般都能把系统安装好。当然有资料参照会更安心一些,这里有一名为《安装 Ubuntu Server 11.04 以及 LAMP 全过程截图》的文章,很不错:http://www.oschina.net/question/12_19477

安装过程中,在选择安装包时注意把LAMP项及SSH项选上,如图1.0-0:

 

                        图1.0-0

安装上光盘自带的LAMP,可省去很多手动安装的麻烦;安装SSH,主要是为了方便宿主机与虚拟机之间的文件传输。
  安装虚拟机后,就可以在WIN7上安装putty及SSHSecureShellClient。其实这两个都是SSH的客户端 。装putty是因为我刚开始用SSH时就是用她了,她的“右键粘贴”功能有点像VirtualBox的共享粘贴板的功能。SSHSecureShellClient有一个名为“SSH Secure File Transfer Client” 的组件.实质上是调用scp等命令完成文件传输的工作,但她有图形化界面,与VirtualBox的“共享文件夹”有几分相似。当然最后你要设置一下VirtualBox的端口转发了,如图1.0-1:


 

                                                         图1.0-1

一切安装好并重启虚拟机后,可以打开浏览器,输入“localhost:[端口]”。这样应该可以看到“IT WORKS”页面了:


 

图 1.0-2


二 设置WebDAV服务,让Apache直接浏览SVN数据库

2.0 安装SVN

  sudo apt-get install subversion libapache2-svn

subversion是SVN的主程序。libapache2-svn则用来实现Apache与svn的互操作。安装完成后我们需要确认下面的信息:

* 自动程序是否已经安装了mod_dav_svn.so及mod_authz_svn.so

  可以用下面的命令进行确认:
sudo find / -name "mod_dav_svn.so"
sudo find / -name "mod_authz_svn.so"
这需要耐心等待一段时间。若结果是找不到,证明安装有问题,需重装。若找到了,请把路径记下来。

* 查检文件dav_svn.load及authz_svn.load

  这两个文件,一般可以在/etc/apache2/mods-available目录下找到。打开dav_svn.load会看到类似这样的语句:
 

LoadModule dav_svn_module modules/mod_dav_svn.so

请确认 mod_dav_svn.so 的路径没有写错。
同样打开 authz_svn.load ,会看下面一类的语句,这也需要确认路径
 

LoadModule authz_svn_module modules/mod_authz_svn.so


* 运行 a2enmod命令把SVN模块增加到启动载入列表

  a2enmod这个命令的的实质作用是向/etc/apache2/mods-enabled加入配置文件的符号链接。如果你看apache2.conf这个配置文件的话就会知道,其中存在着如下两句:
 

Include mods-enabled/*.load
Include mods-enabled/*.conf

而 apache2.conf 是 Apache 在启动时载入的配置脚本。所以向  mods-enabled 添加配置文件的称号链接等于是启动 Apache 时执行该脚本。所以执行下面两个命令:
sudo a2enmod dav_svn
sudo a2enmod authz_svn
这就等于把 dav_svn.load 及 authz_svn.load 这两件文件的符号链接放入了 mods-enabled 目录中。

注:SVNMamager官网上只提示了执行sudo a2enmod dav_svn。实质上执行sudo a2enmod authz_svn也是必要的。没有设置authz_svn的自动载入的话在启动Apache时会有下面这样的问题:

root@lamp-server:/home/svn_db# sudo service apache2 restart
Syntax error on line 75 of /etc/apache2/mods-enabled/dav_svn.conf:
Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
...fail!

2.1 WebDAV服务设置

  dav_svn.conf文件,libapache2-svn用该设置文件来告诉Apache,一些SVN设置信息。最起码,要告诉Apache,到底SVN数据库在那里。通常在如下路径中:/etc/apache2/mods-available/
该设置文件中,加入如下脚本:
 

<location /svn>
DAV svn

#Repository Folders Location (make sure this folder exists
#and keep location in mind)
SVNParentPath /home/svn_db

AuthType Basic
AuthName "Restricted Access"

#File will be created by SVNManager, keep location in mind!
AuthUserFile /home/svn_db/htpasswd

Require valid-user
#SSLRequireSSL

#File will be created by SVNManager, keep location in mind
AuthzSVNAccessFile /home/svn_db/accessfile

</location>

看脚本的注释,基本上可以知道,各个设置项有什么用,我下面还会作说明,不过大家最好是找到SVN的官方文档,当中包含《httpd,Apache的HTTP服务器》这样的一小节,里面的说明会更加详细。下面有一个链接,但不担保长期有效^0^(还是把文档DOWN下来保值一点):
http://www.subversion.org.cn/svnbook/1.4/svnbook.html#svn.serverconfig.httpd
Apache的设置说明则可以如下URL中找到:

http://httpd.apache.org/docs/2.2/
下面逐句说明脚本的作用:

<location /svn>

上面这句脚本中的“ /svn” 是一个虚路径,你喜欢的话,把这个虚路径设置成如下这样都可以
 

<location /good/good/study/day/day/up>

只不过用户在使用时就要把URL写成如下这样子:
my.service.org/good/good/study/day/day/up/[ 具体数据库路径 ]

怎一个烦字了得!看来尽量让URL简明握要好一点,我们还是用“/svn”吧。
 

DAV svn

DAV  指令主用来开关 WebDAV 服务,其参数可以是 “ on” “off”  或 “ [ 服务提供者的名字 ]” ,默认值为 off 意为关闭,上面这句脚本使用服务提供者的名字作为参数。意为启动 svn 提供的 WebDAV 服务。

SVNParentPath /home/svn_db

这个用于告诉 Apache , SVN 数据库的父目录在那里(父目录下可以有多个 SVN 数库)。请确保这个目录已经存在

AuthType Basic

AuthType指令用来设置目录的身份验证方式。其参数可以是 “Basic”或“Digest”,即分别“基本验证”方式(Basic Authentication)与“摘要验证”方式(Digest Authentication).这里选择了“基本验证”

AuthName "Restricted Access"

AuthName 是你提供给认证域一个任意名称,大多数浏览器会在向用户询问名称和密码的弹出窗口里显示这个名称,如下图:


 

                   图2.1-1

注意这个AuthName起的是提示作用,与有对应于密码的用户名是两码事。

AuthUserFile /home/svn_db/htpasswd

AuthUserFile  指定一个文件,用来记录用户名与密码对应列表。

Require valid-user

Require 用来设置那些通过了身份验证的用户中的那一些,可以使用本服务的资源。有三用设置方法:
Require valid-user 所有通用份验证的用户都可以
Require group [分组名] 只有指定分组的用户可以
Require user [用户名1] [用户名2] ... [用户名n] 只有指定的用户可以

AuthzSVNAccessFile /home/svn_db/accessfile

AuthzSVNAccessFile 指定保存路径中的版本库访问政策的文件,在某一路径下某一用户的读写权限的配置文件。

2.2 准备好用于测试的SVN库

     这一步是可选的,不做也可以,不做的效果,最多是没有那么好看罢了。具体的创建方法可以参看《virtualboxubuntu虚拟机中搭建SVN服务器》。这里只强调一点,把SVN数据库放到“SVNParentPath”指到的父目录下,我测试用的SVN数据库的名字为“svn_manager”,所以创建后在SVNParentPath指定的/home/svn_db目录下,多了一个名为“svn_manager”的子目录。

2.3 设置访问SVN的用户名及密码,并修改目录及文件权限

  注意,这里设置的用户名及密码,是用于Apache访问SVN数据库的,而非登录SVNManager的密码。我们首先,按“AuthUserFile”及“AuthzSVNAccessFile”中指定的那样创建用户密码信息文件及用户权限设置文件:
touch /home/svn_db/htpasswd
touch /home/svn_db/accessfile
然后我们用“htpasswd”工具向用户密码信息文件加入密码信息。(是的htpasswd也是一个工具的名字,可以"which htpasswd"找一下)
htpasswd -c [用户密码信息文件路径] [用户名]
例如:
htpasswd -c /home/svn_db/htpasswd goodgoodstudy
回车后输入密码即可。
接下来是在用户权限设置文件中文件用户权限。我们打开/home/svn_db/accessfile 加入如下内容:
 

[svn_manager:/]
goodgoodstudy = rw

具体的格式为:
[数据库名:可访问的路径]
用启名 = 权限

最后我们需要修改一下文件及目录的拥有者:
sudo chown -R www-data.www-data /home/svn_db/svn_manager /home/svn_db
sudo chown -R www-data.www-data /home/svn_db/passwdfile /home/svn_db/accessfile
注www-data是apache的默认用户。好了现在用
sudo service apache2 restart
重启服务。然后在宿主机的浏览器中输入:
http://localhost[:端口]/svn/svn_manager/
浏览器就会弹出图2.1-1的登录窗口。输入你刚设置的用户名及密码,就可以看到下面的内容(假设你已经生成了测试用的SVN)


 

             图2.3-1

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
看了这么多内容,你都应该累了吧。这里先休息一下,说一些花边的内容:
1 SVNManager官网上的安装方法是挺详细的了,但不知道为什么,其说明中漏了或写错了一些关键内容。
2 不是每个人都有root权限的。特别是公司的服务器,很可能早已经安装好在跑其它服务了。为了原服务的稳定,管理员那会这么容易让你随便修改!所以本文主诣在于让大家知道怎么设置。遇到无root权限的情况,那就需要你用源码安装。那将会是短兵白刃的“血战”。后面我会写章说明一下,与这种情况“狭道相逢”时如何才能”多流汗,少流血”。
3 在LINUX上有LAMP,而在WINDOWS上有WAMP。你想入门方便一点的话,那就试一下WAMP吧。

准备好吗,要不要喝口水?^0^
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

三 在MySQL中生成数据库,并升级PHP

3.0 MySQL中生成SVNManager数据库

用“sudo mysql -u root -p”登录后执行如下语句
 

CREATE DATABASE svnmanager; (回车)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER on svnmanager.* to svnmanager@localhost identified by '[密码]'; (回车)
FLUSH PRIVILEGES; (回车)


@localhost这部分官网中的脚本没有给出,请注意,要不然,在连接时会出现如下问题:
[2] mysqli_real_connect(): (28000/1045): Access denied for user 'svnmanager'@'localhost' (using password: YES) (@line 86 in file /home/ddu/www/svnmanager-1.09/prado-2.0.3/framework/Data/adodb/drivers/adodb-mysqli.inc.php)

[密码 ]这是新数据库的用户密码而非MySQL根用户密码。所以这里你可以重新设置一个密码。

3.1 升级PHP

运行如下命令:
sudo apt-get install php5 php5-mysql php5-sqlite php-pear
sudo pear install -f -o VersionControl_SVN

3.2 修改WWW目录路径

  我的修改方法较为暴力:在/etc/apache2目录下,找到包含/var/www的文件,我把出现“/var/www”的地方都换成了我的目标路径:“/home/ddu/www”然后用下面命令修改权限及拥有者:
sudo chown www-data.www-data /home/ddu/www -R
chmod -R 755 /home/ddu/www
其它资料显示可以设置多个“虚目录”的,这里就不深究了。我们把snmanager-1.09解压到这个新的WWW目录下。

四 修改config.php

      这是基础设置中的最后一步了。我们进入snmanager-1.09目录,复制config.php.linux并改名为config.php。然后打开config.php,作如下修改:
 

* SVN的路径设置

//这里是SVN全局设置信息文件所在的目录,默认是在“~/.subversion”下的。
$svn_config_dir = "/home/svn_db/svnconfig"; 
//与 dav_svn.conf文件中的“SVNParentPath”含义相同
$svn_repos_loc = "/home/svn_db";
//dav_svn.conf文件中的“AuthUserFile含义相同
$svn_passwd_file = "/home/svn_db/passwdfile";
//dav_svn.conf文件中的“AuthzSVNAccessFile含义相同
$svn_access_file = "/home/svn_db/accessfile";

* 设置回收站目录,以防误删

$svn_trash_loc = "/home/svn_db/trash";

* DNS信息

$dsn = "mysqli://svnmanager:[密码]@localhost/svnmanager";

[密码 ]并非指MySQL根用户的密码O ^0^

基本的设置终于完成了。重启服务:
sudo service apache2 restart
然后在宿主机的浏览器上输入
http://localhost[:端口]/svnmanager-1.09/

这样就可以看下面这个界面了:


                                            图4.0-1

在重启apache时你可能会遇到这样的警告:

root@lamp-server:/home/svn_db# sudo service apache2 restart
* Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
...done

这虽然,不会让重启失败,但很烦人,可以在/etc/apache2/httpd.conf中加入

ServerName localhost
来解决这问题。

五 后话

  关于配置的话题,其实还没有结束。例如这里就没有说如何让SVNManager支持https.另外限于本人水平有限,难免有不当之处,恳请指正^0^


 

标签: SVNManager svn LAMP
共有 人打赏支持
粉丝 4
博文 14
码字总数 39666
×
胖老狼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: