|
用户名:youwater 笔名:youwater 地区: 福建-厦门 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
阿水,一名GNU/Linux的拥护者,有5年的Linux使用经验。《活在GNU/Linux的日子》是我自2004.12.12开通第一个Blog起,对自己GNU/Linux的生活日记。欢迎大家观看指正。
转移
SVN+Apache域用户认证配置方法
一、
引起
作为一个团队开发,公司长期以来的实践证明,手工操作版本管理是非常不明智的,一来浪费人力,二来效率低下,三来容易犯错。那么版本管理用什么工具好呢?
在开源世界中,CVS(Concurrent Versions System)一直都是版本控制的首选。但是现在用户有了另一个选择,就是Subversion(SVN)。SVN是下一代版本控制系统,能替代 CVS,项目主页是http://subversion.tigris.org。
SVN是一个自由、开放源码、跨平台的版本控制系统。它是一个通用系统,可用来管理任何类型的文件, 其中包括程序源码。
它的初始目标很明确,实现绝大部分CVS的已有功能;充分考虑现有的CVS用户,在使用方式上模仿CVS,同时开发了一系列工具,使得基于CVS的项目能 够顺利迁移到SVN上。和CVS相比,它有很多优点,例如目录版本控制、不可分割的提交、一致的数据处理方式和更有效率的分支与标记
等。。。
SVN有两种运行方式,一种是基于Apache Http Server,另外一种是SVN Standalone Server。一般推荐使用基于Apache Http
Server的SVN,这样做几个好处:
A.能使用WebDAV协议。
B.能使用浏览器作为客户端工具浏览源码仓库。
C.可以很容易的支持 到SSPI(Windows域认证)和LDAP,这些都是Apache本身就支持的。
D.能得到比较完善的Apache安全认证系统,比如 SSL加密连接。
考虑到公司同事基本上一直都是在Windows下过日子,所以考虑在Windows平台下搭建SVN,并且使用Windows域用户认证的方式管理SVN的权限配置,使用浏览器和TortioseSVN作为SVN的客户端,以进一步降低使用、管理门槛。
二、
配置流程
a)
安装配置域控制器
我用的是Windows2003企业版,配置域控制器比较简单,就不多说了。
b)
安装Apache
到http://httpd.apache.com/下载最新版的Apache For Windows,我使用的版本是apache_
c)
安装SubVersion
到http://subversion.tigris.org/下载最新版的SVN,我使用的版本是svn-
d)
配置域用户认证
i.
检查<Apache Install Root>\modules下是不是已经有了mod_dav_svn.so、mod_authz_svn.so和libdb42.dll三个文件,如果没有表示SVN没有安装正常,需要重新安装
ii.
打开<Apache Install Root>\conf\httpd.conf文件
iii.
在httpd.conf中找到这三行:
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
把它们前面的注释号#删除
iv.
到http://tortoisesvn.tigris.org/mod_auth_sspi.zip下载最新版的SSPI模块,我使用的版本是mod_auth_sspi/
v.
在httpd.conf中找到行“LoadModule
auth_module modules/mod_auth.so”,在其前一行加入“LoadModule sspi_auth_module
modules/mod_auth_sspi.so”
vi.
现在我们假定要在c:\svn目录中存放各种SVN文件库,分别为repos1、repos2…
vii.
在httpd.conf文件的末尾加上
<Location /svn>
DAV svn
SVNParentPath c:/svn
AuthzSVNAccessFile
c:/svn/accessfilesspi
Require valid-user
AuthType SSPI
AuthName "Subversion 文件库"
SSPIAuth On
SSPIAuthoritative On
SSPIDomain owl-2003.owl.local
SSPIOfferBasic On
</Location>
1.
其中“<Location /svn>”表示通过Apache Web Server根目录下的svn子目录可以访问“SVNParentPath c:/svn”中定义的目录下的SVN文件库的内容;
2.
“AuthzSVNAccessFile c:/svn/accessfilesspi”表示c:/svn/accessfilesspi文件中定义了域用户与文件库资源权限控制的详细信息
3.
“SSPIDomain owl-2003.owl.local”表示在我的机器上域控制器名称为:owl-2003.owl.local
viii.
AuthzSVNAccessFile定义的权限控制文件举例
#用户分组,以逗号分隔;用户名区分大小写;域用户用全称,即DOMAIN\UserName
[groups]
admins = OWL\Administrator
developers = OWL\water
docs = OWL\youwater
#管理员组拥有所有权限
[/]
@admins = rw
#开发人员可以完全控制源程序
[/myrepos]
@developers = rw
#文档人员可以完全控制文档
[/docs]
@docs = rw
ix.
保存httpd.conf,并重启Apache,随便用一个浏览器打开http://127.0.0.1/svn/docs测试一下吧。注意用户名输入是大小写敏感的,域用户需要输入全称。
e)
安装TortioseSVN
到http://tortoisesvn.tigris.org/下载最新的TortioseSVN和中文包,我用的版本是TortoiseSVN-
LanguagePack_1.1.5_zh_CN.exe,TortioseSVN与Windows资源管理器集成在一起,重启系统后就可以使用了,首先打开资源管理器,在随意位置点击右键,选择TortioseSVN=>Setting,把语言改为简体中文,确定后生效。
三、
附件
四、
还有什么问题吗?这仔细参看这些资源:
a)
Apache管理手册
b)
Subversion用户手册
c)
TortioseSVN用户手册
d)
有什么问题也可以联系本文作者共同学习(游水,youwater(at)gmail.com)
写了个自己实用的小程序IPIt
我为什么要用Linux
算起来,我从开始学习使用Linux到现在也有5年多的时间了。今天一个朋友到我这Blog看了一下,问我:"这Linux不怎么样嘛?"。我突然呆住了,Linux不怎么样?我为什么要学Linux?为什么要用Linux?慢慢地,我开始清理我的思路。
a) Linux的可用性,丰富的软件包,Windows下软件所拥有的功能在Linux下一样可以完成;
b) Linux的易用性,有着跟Windows几近一致的操作界面、操作方法;
c) Linux的可定制性,整个操作系统完全模块化设计,用户可以根据自己的功能需求,自由搭建操作系统,也可以根据最终用户的实际使用习惯,搭配成与Windows一样的操作环境;
d) Linux的开放性,在一些特定的环境里,开放性带来了系统极大的可伸缩性,给一些大型软件系统的整合带来便利,也有利于一些错误的排除;
e) Linux的安全性,一般用户在Linux下是很难碰到病毒的。近年来非常多的实际证明,当同时影响Windows和Linux的漏洞或病毒出现的时候,Linux解决问题的速度总是比Windows要快;
f) Linux对旧硬件的友好适应性,现在是2004年末了,给你一台586的电脑你能做什么?如果装上个Linux,它可以变成一个功能强大,效率极高的Internet上网共享服务器;
g) Linux是免费的,对于家庭用户来说,盗版是家长便饭了,可能全世界都是这样。但是对于企业用户来说呢?你有勇气随便盗版吗?微软公司随时可以联合公安部门把你给查了,到了这个时候一些小公司估计就只能关门了,对于一些大中型企业也是得不偿失;
h) 使用Linux的最终成本比Windows低得多,研究显示安装使用Linux成本依低于Windows;
i) Linux是有趣的,对于个人用户来说,使用电脑无非就是上上网、看看影片、偶尔写几个文档、打打游戏,这些应用对Linux来说都已经做得很好。除了这些,Linux还可以给你带来更多学习的乐趣、个性化系统的乐趣。
2、 我现在用Linux做什么?
a) 上网,网页浏览就用FireFox,功能相当棒,现在工作在Windows下时我也是用FireFox。网络沟通就用Gaim+Openq、Xchat,感觉还是挺方便的
b) 看电影听歌,我用Mplayer、RealPlayer、Xmms
c) 写文档,我还不会用Tex,我用的是OpenOffice的变种:共创Office2005,这是我用过的感觉跟Windows下Ms Office兼容最好的Office系统
d) 还有就是搭建起Lamp做b/s系统,我用gvim、apache、mysql、php
e) 有时还用python写点小程序
3、 我为什么要用Linux?
a) 兴趣,觉得Linux给了我在Windows下没有的自由度,感觉很好玩。Windows的操作与管理我自认已经比较精通,感觉Windows的可控制点太少,处处受到限制,有时遇上个Bug一点招都没有。Linux给我了最大的自由控制,我只会觉得自己能力的不足,而不会感觉说Linux是不可控的。
b) 为学Linux而用Linux,估计这也是很多同好者不得不承认的事实。
c) 对Linux的前途很有信心,希望自己以后能为自由软件工作。
d) 我是搞erp的,我想Linux有了上面说到的种种优点,如果我帮用户搭建起一套基于Linux的erp解决方案,我相信迟早会有市场的。
.NET程序编译时的版本号自动更改
Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As _
EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
AutoBuildVersion()
End
Sub
Imports EnvDTE
Imports System.Diagnostics
Public Module AutoVersion
'得到项目所在目录
Function GetProjectDir(ByVal FullName)
Dim proj_path
proj_path = Split(StrReverse(FullName), "\", -1, 1)
Dim count
count = UBound(proj_path)
Dim full_path
full_path = ""
Dim i
For i = 1 To count
full_path = full_path & "\" & proj_path(i)
Next
GetProjectDir = StrReverse(full_path)
End Function
' This event will be triggered after every build of a project
' You can modify the code below to only update projects that are active
' It currently will scan all projects in the solution for AssemblyInfo.vb files
' to update.
Sub AutoBuildVersion()
'Comment the follow 3 lines, if you want the build number to increment even if the build fails
If DTE.Solution.SolutionBuild.LastBuildInfo() <> 0 Then
Exit Sub
End If
' Change this, if you would only like to modify the AssemblyInfo file in active project files
' For Each proj As Project In DTE.ActiveSolutionProjects
For Each proj As Project In DTE.Solution.Projects
Dim full_path
full_path = GetProjectDir(proj.FullName)
' Attempt to open the AssemblyInfo.vb file
full_path = full_path & "AssemblyInfo.vb"
Try
DTE.ItemOperations.OpenFile(full_path).Activate()
Dim activeDoc As Document = DTE.ActiveDocument
Dim objSelection As TextSelection
objSelection = DTE.ActiveDocument.Selection
Dim objStartPosition As Integer
' Get the text between AssemblyVersion(" and ")
objSelection.FindText("AssemblyVersion(""")
objStartPosition = objSelection.BottomPoint.DisplayColumn
Dim objEndPosition As Integer
objSelection.FindText(""")")
objEndPosition = objSelection.AnchorPoint.DisplayColumn
' Get back to after the AssemblyVersion" part
objSelection.StartOfLine()
objSelection.FindText("AssemblyVersion(""")
objSelection.Collapse()
objSelection.MoveToDisplayColumn(0, objEndPosition, True)
objSelection.Text = Now.ToString("yyyy.MM.dd.HHmm")
activeDoc.Close(vsSaveChanges.vsSaveChangesYes)
Catch
End Try
Next
End Sub
End Module
关于程序测试
我的Debian系统安装过程
我现在用的Linux配置
常见的Linux发行版