如何在CentOS上设置SVN服务器

本教程介绍如何在CentOS上设置和使用SVN存储库服务器。 在我开始之前,让我解释一下SVN是什么代表什么,它用什么来做。 SVN实际上是由Apache软件开发人员创建的SubVersion的缩写。 它使您能够创建和维护自己的存储库,并为专用用户提供细粒度的访问权限。

控制文件,文档或文件夹的版本控制非常有效。 对于任何想要开始自己的软件项目的团队或团队来说,这是非常有用的。

初步说明

对于本教程,我使用的是32位版本的CentOS 6.4。 最终结果将告诉您专用客户端如何通过任何类型的操作系统平台来管理SVN存储库。


2. SVN安装

要开始一个新鲜的SVN服务器,我们需要安装某些包。 相关的包是apache httpd,mod_dav_svn和subversion。 需要HTTPD包作为此过程的Web服务器服务。

本教程使用CentOS操作系统,我们将从yum存储库中获取软件包。 您可以使用其他软件包,如nginx,lighttpd或任何熟悉的Web服务器服务来替换httpd。 以下步骤如下:

ifconfig
[root@SVNSVR641 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:61:E4:88
inet addr:192.168.43.101 Bcast:192.168.43.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe61:e488/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4640 errors:0 dropped:0 overruns:0 frame:0
TX packets:6845 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:444461 (434.0 KiB) TX bytes:549473 (536.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2125 errors:0 dropped:0 overruns:0 frame:0
TX packets:2125 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:186888 (182.5 KiB) TX bytes:186888 (182.5 KiB)
yum install -y httpd
[root@SVNSVR641 ~]# yum install -y httpd
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-26.0.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
httpd i686 2.2.15-26.0.1.el6 OEL64 825 k
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 825 k
Installed size: 2.8 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : httpd-2.2.15-26.0.1.el6.i686 1/1
Verifying : httpd-2.2.15-26.0.1.el6.i686 1/1
Installed:
httpd.i686 0:2.2.15-26.0.1.el6
Complete!
yum install -y subversion
[root@SVNSVR641 ~]# yum install -y subversion
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package subversion.i686 0:1.6.11-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
subversion i686 1.6.11-7.el6 OEL64 2.2 M
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 2.2 M
Installed size: 11 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : subversion-1.6.11-7.el6.i686 1/1
Verifying : subversion-1.6.11-7.el6.i686 1/1
Installed:
subversion.i686 0:1.6.11-7.el6
Complete!
yum install -y mod_dav_svn
[root@SVNSVR641 ~]# yum install -y mod_dav_svn
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mod_dav_svn.i686 0:1.6.11-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
mod_dav_svn i686 1.6.11-7.el6 OEL64 79 k
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 79 k
Installed size: 161 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : mod_dav_svn-1.6.11-7.el6.i686 1/1
Verifying : mod_dav_svn-1.6.11-7.el6.i686 1/1
Installed:
mod_dav_svn.i686 0:1.6.11-7.el6
Complete!


3. SVN配置

好,现在安装部分完成了。 接下来,我们将在配置部分继续前进。 首先,我们创建一个SVN存储库使用的专用目录。 这是一个可选的过程,但是对于更大规模的组实施时,这是一个很好的做法。 以下步骤如下:

mkdir /data/svn

现在我们将创建我们的第一个存储库目录,我将其命名为repo1 由于客户端以后可以通过浏览器或SVN客户端工具访问存储库,因此我们将把该目录的所有权授予apache,因为它是Web服务器服务的所有者。 以下步骤如下:

svnadmin create /data/svn/repo1
chown -R apache:apache /data/svn/repo1

一旦完成,您会注意到,默认情况下,我们的新存储库目录下将创建几个相关的文件夹和文件。

cd /data/svn/repo1
ls
[root@SVNSVR641 repo1]# ls
conf db format hooks locks README.txt


现在我们编辑配置文件以满足我们的要求。 首先,我们将编辑配置文件svnserver.conf以接受我们将在授权用户上分配的相关权限。 以下步骤如下:

cd conf/
ls
[root@SVNSVR641 conf]# ls
authz passwd svnserve.conf
vi svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

然后创建一个名为passwd的新文件,该文件将包含SVN存储库的用户列表。 以下步骤如下:

htpasswd -c /data/svn/repo1/conf/passwd jay
[root@SVNSVR641 conf]# htpasswd -c /data/svn/repo1/conf/passwd jay
New password:
Re-type new password:
Adding password for user jay
[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA

完成后,我们已经成功创建了SVN存储库使用的用户。 我们再创建2个用户来访问SVN信息库。 以下步骤如下:

htpasswd /data/svn/repo1/conf/passwd fikri
[root@SVNSVR641 conf]# htpasswd /data/svn/repo1/conf/passwd fikri
New password:
Re-type new password:
Adding password for user fikri
htpasswd /data/svn/repo1/conf/passwd farid
[root@SVNSVR641 conf]# htpasswd /data/svn/repo1/conf/passwd farid
New password:
Re-type new password:
Adding password for user farid
[root@SVNSVR641 conf]# cat passwd
jay:14hCNCmBZY/qA
fikri:/hlooqJMfYLkw
farid:P7Zvu6B3HyFGo


完成,现在有3个用户列出SVN存储库使用。 对于这种做法,我想展示如何限制用户的权限。 让我们分配访问repo1存储库的权限。 为此,我们需要编辑authz配置文件。 以下步骤如下:

vi authz
[repo1:/]
farid = r
fikri = rw
* =

基于上述配置,我们为之前创建的3个用户设置了不同的权限。 我们分配了用户FARID具有READ ONLY权限,FIKRI具有READ WRITE权限,JAY或其他人没有任何权限。 意味着以后的测试我会告诉你,用户JAY将无法查看repo1存储库中的任何文件。

现在我们来编辑HTTPD服务配置文件。

vi /etc/httpd/conf/httpd.conf

检查是否存在以下行将外部配置文件包含到httpd.conf文件中。 如果不存在,请将其添加到文件的末尾。

[.....]
Include conf.d/*.conf
[.....]

接下来我们去conf.d目录来对相关的配置文件进行一些修改。 你会注意到有一个文件subversion.conf已经。 编辑文件以使存储库可以在浏览器中查看以下步骤:

cd /etc/httpd/conf.d/
ls
[root@SVNSVR641 conf.d]# ls
mod_dnssd.conf README subversion.conf welcome.conf
vi subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

<Location /repo1>
DAV svn
SVNPath /data/svn/repo1
Authtype Basic
AuthName "My Repository"
AuthzSVNAccessFile /data/svn/repo1/conf/authz
AuthUserFile /data/svn/repo1/conf/passwd
Require valid-user
</Location>

前两行加载apache SVN模块,下一行定义URL / repo1指向我们创建的存储库。

我们还设置特定用户对存储库中特定项目的读/写权限使用AuthzSVNAccessFile。 用户列表将从/ data / svn / repo1 / conf / passwd文件中获取。

现在重新启动HTTPD服务器,以便加载所做的配置更改。

service httpd restart
[root@SVNSVR641 conf.d]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]


SVN测试阶段

让我们检查我们所做的配置是否符合要求。 在测试阶段,我将使用2台不同的客户端机器。 我将使用Microsoft Windows和Linux CentOS 6.4桌面。

首先我将去Linux CentOS 6.4机器并将存储库检入本地系统。 作为Linux客户端,我们需要安装subversion包以连接到SVN信息库。

yum install -y subversion
[root@TEST01 ~]# yum install -y subversion 
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package subversion.i686 0:1.6.11-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================
Package Arch Version Repository Size
==============================================================================================================
Installing:
subversion i686 1.6.11-7.el6 OEL64 2.2 M
Transaction Summary
==============================================================================================================
Install 1 Package(s)
Total download size: 2.2 M
Installed size: 11 M
Downloading Packages:
--------------------------------------------------------------------------------------------------------------
Total 70 MB/s | 2.2 MB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : subversion-1.6.11-7.el6.i686 1/2
Verifying : subversion-1.6.11-7.el6.i686 2/2
Installed:
subversion.i686 0:1.6.11-7.el6
Complete!

mkdir repo_client
svn co http://192.168.43.101/repo1 repo_client
[root@TEST01 ~]# mkdir repo_client
[root@TEST01 ~]# svn co http://192.168.43.101/repo1 repo_client
Authentication realm: <http://192.168.43.101:80> My Repository
Password for 'fikri':
-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:
<http://192.168.43.101:80> My Repository
can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
Checked out revision 0.
[root@TEST01 ~]# cd repo_client/
[root@TEST01 repo_client]# ls -a
. .. .svn

优秀! 我们设法使用用户fikri从SVN服务器检出存储库。 现在,要检查该用户是否具有READ和WRITE权限,我们将在repository目录中创建一个文件夹。

cd repo_client/
svn mkdir first_dir

然后将更改提交到存储库:

svn commit -m "My first folder"

你会看到:

Committed revision 1.

这意味着我们的承诺是成功的。


做得好! 我们已经设法在存储库目录中创建一个文件夹并提交它。

现在让我们在Microsoft Windows机器上测试。 通过Firefox浏览器浏览存储库URL。 您可以使用任何您喜欢的浏览器来测试它。 一旦在浏览器字段中输入了URL http://192.168.43.101/repo1,它将弹出如下所示的授权窗口:

用户JAY登录。 我会假设这个用户不能访问页面,因为他不是特权组的成员。

好的,现在让我们对本教程进行最后的测试。 让我们使用Microsoft Windows机器作为SVN客户端。 为此,我们必须安装SVN客户端软件,在这种情况下,我将使用TortoiseSVN。 您可以在这里下载或使用任何熟悉的SVN客户端。

安装完成后,在Windows机器中创建一个新文件夹,并将其命名为testSVN。


然后右键单击该文件夹,您会注意到现在有SVN CheckOut的链接(如果您没有看到链接,重新启动Windows)。 点击“SVN结帐”继续。

一旦点击,弹出框将显示如下。 在URL字段下输入SVN服务器存储库,然后单击确定。

将显示一个弹出框,要求您输入用户名和密码进行身份验证。 对于这种情况,我们将使用用户FARID继续。

完成后,弹出框将显示SVN存储库检出已完成。 从这里,我们可以得出结论,用户FARID有权从存储库读取。

您会注意到以前从用户FIKRI创建的文件夹存在于您的testSVN目录中。

完成测试 让我们测试一下用户FARID应该具有只读权限。 要做到这一点,我们进入FIRST_DIR文件夹并创建另一个文件夹,我称之为SECOND_DIR

创建完成后,右键单击该文件夹并将鼠标悬停到TortoiseSVN,您将看到列出了几个选项。 要继续,请点击添加按钮。 此按钮将将我们创建的文件夹添加到本地svn存储库。

将显示如下所示的弹出框,单击“确定”继续。

完成后,将显示如下所示的弹出消息。 现在,您已经在客户端存储库中成功创建了一个文件夹。

即使该文件夹已成功创建并在本地添加,但尚未同步到SVN服务器,因此其他来自其他计算机的用户将无法看到我们刚刚创建的文件夹。 保存并提交文件夹。 要做到这一点,右键单击文件夹,然后单击SVN Commit按照下面的截图。


将显示如下所示的弹出框,要求您确认几个详细信息。 键入任何可选注释,然后单击确定继续。

出现一个授权框请求登录用户名。 键入用户FARID并继续。

一旦完成,您将被显示一个错误,表示您被禁止进行更改。 我们期望的用户farid只有只读权限。

恭喜! 现在我们设置了第一个SVN服务器,并在某些用户限制下成功配置了适当的权限。

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

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

支付宝扫一扫打赏

微信扫一扫打赏