subversion svn

subversion

#

如何在Fedora 5 安装subversion Apache 2.2-----How to setup SVN using HTTPS on FC5

How to setup SVN using HTTPS on FC5

I got my latest SVN 1.3.2 working on FC5 with Apache 2.2.0 over SSL,
so decided to just share the same with all.
Here we go,

1) To install SVN do
yum install subversion.

2) To create a SSL certificate for Apache do -
Step one - create the key and request:
openssl req -new > new.cert.csr

Step two - remove the passphrase from the key (optional):
openssl rsa -in privkey.pem -out new.cert.key

Step three - convert request into signed cert:
openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 1024
place the keys to following locations & edit the /etc/httpd/conf.d/ssl.conf as follows -

SSLCertificateFile /etc/pki/tls/certs/new.cert.cert
SSLCertificateKeyFile /etc/pki/tls/private/new.cert.key

Test the certificate.

3) create /home/subversion/repository & /home/subversion/permissions

chown -R apache:apache /home/subversion/repository
svnadmin create /home/subversion/repository
svn import /tmp/project1 file:///home/subversion/repository/project1 -m "initial import"
svn checkout file:///home/subversion/repository/project1 project1

4) Edit httpd.conf as follows

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule dav_module modules/mod_dav.so
LoadModule authz_svn_module modules/mod_authz_svn.so

<Location /svn>
DAV svn
SVNPath /home/subversion/repository/
# our access control policy
AuthzSVNAccessFile /home/subversion/permissions/svnauthorz.conf
#how to authenticate the users
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /var/www/.htpasswd
# only authenticated users access the SVN
Require valid-user
SSLRequireSSL
</Location>

use following command to create users for authentication
htpasswd /var/www/.htpasswd john
& put following style entry in svnauthorz.conf
[/]
john = rw
liza = r


thats it, restart the httpd service & your SVN is ready to use for developers.

Regards

posted @ 2006-09-11 22:21 subversion 阅读(1009) | 评论 (0)编辑 收藏

Subversion之路--实现精细的目录访问权限控制(v0.4.1)

Subversion之路--实现精细的目录访问权限控制(v0.4.1)

(7月7日,发布0.4版本,顺便纪念一下卢沟桥事变)


================
Subversion之路
================
----------------------------
实现精细的目录访问权限控制
----------------------------


:作者: 郑新星
:联系: zhengxinxing <AT> gmail <DOT> com
:状态: 草稿,编写中
:版本: 0.4.1
:修订: $Id: The.Road.to.Subversion_authz.txt 149 2006-07-07 14:32:12Z michael $
:版权:  作者保留对本文的一切修改、发布等权力。任何人想要转载本文部分或全部内容时,必须保留包括作者、联系、状态、版本、修订、版权,共六项信息,并给出出处。对本文的参考引用,则不受限制。

:关键词: Subversion 目录访问 权限

:献辞:

    仅以本文,献给中国广大的自由软件爱好者们

:摘要:

    本文从一个实际的例子入手,介绍了如何利用 Subversion 自带的目录管理功能,来实现对项目目录的精细访问权限的控制。同时描述了在配置的过程中,需要注意的一些地方,如对中文的处理等。


.. section-numbering::
.. contents:: 目 录
   :backlinks: none


to-do list
==========
- 描述初始建立代码库时候,导入的细节区别
- 关于passwd.conf 文件明文密码的问题,及其处理办法
- 有关使用apache代替svnserve.exe做服务器,从而实现非明文密码,以及实现SSL的问题
- 有关使用apache之后,部门经理想要通过web查看日志的问题
- 调整文章结构,将“背景假设”改为“故事背景”或者“需求背景”,给“前言”添加 subversion 权限简介。


前言
====

在实际的使用中,由于项目的目录本身就是作为版本库的一个部分被svn所收管,所以我们无法利用服务器操作系统的访问权限,来实现项目目录的访问控制。因此,这个问题就只有让svn自己来解决了。

Subversion 1.3以前的版本,只能利用 mod_authz_svn.so 模块,结合Apache服务器来实现目录访问控制,这对Apache的配置与使用不是很熟悉的人来说(比如说鄙人)就不是很方便了。而Subversion终于在 1.3 版本上,在 svnserve.exe 服务器里面添加了这一功能。本文就是介绍如何配置代码库配置文件,以便让 svnserve.exe 实现精细的目录访问权限控制。

本文是基于 Subversion 1.3.2、MS Windows 2003 Server Edition 平台来编写的,且 Subversion 服务器是利用 svnserve.exe 来架设的。不过,本文讲述到的绝大多数内容,都是不仅与平台无关,而且与是采用 svnserve(.exe) 还是使用apache来作为 Subversion 服务器也基本无关。

本文是利用 reST 格式来编写的,如果你对它感兴趣,请访问 http://docutils.sourceforge.net/rst.html。如果想要看到更好的html格式,你可以通篇复制本文到一个文本文件里,然后利用 docutils 的 rst2html.py 脚本编译它,当然,首先你必须安装 python。或者直接访问 http://swjr.blog.com.cn/archives ... version1authz.shtml ,不过在最终版本发布之前,我不能保证它的内容一定会是最新的。

本文面向那些 Subversion 的管理员,或者任何对 Subversoin 有兴趣的人们。本文假定读者对Subversion有一定的了解,因此不打算对所有涉及到的安装、使用,做一个细节性的描述。若对于文章中描述的技术细节有疑问,请访问“参考”一节里面的参考资料。如果你对本文任何地方有什么意见,或者发现本文有着大大小小的错误,请联系 zhengxinxing <AT> gmail <DOT> com 。


致谢
====

非常感谢所有给本文提出宝贵意见的人,虽然文章是我主笔编写的,但是如果没有他们的帮助,文章肯定会失色不少。请允许我在这儿记录下他们的名字或代号:PCplayer (目前只有一个人 :-) )


实战
====

本章先直接给出需求及其最终的结果,如果你觉得对配置有什么疑问,或者看不懂,请不要着急,我会在后面的章节详细描述的。


背景假设
--------

厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计、销售,并在北京、上海各设立了一个办事处。对于工作日志,原先采用邮件方式发给经理,但是这种方式有个缺点,那就是不具备连续性,要看以前的日志必须一封一封邮件去查看,很麻烦。于是就想到利用 Subversion, 让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自己编写日志,又方便对日志的归档处理,而且提交日志的时候只需要执行一下 svn commit 即可,比发送邮件还要简单的多。

- svn服务器相关信息

  - 服务器地址: 192.168.0.1
  - 服务器OS: MS Windows 2000 Server Edition 中文版
  - 代码库本地目录: ``D:\svn\arm``

- arm部门文档的目录结构如下::

    arm                 部门名称
    ├─diary           工作日志目录
    │  ├─headquarters    总部工作日志目录
    │  ├─beijing         北京办日志目录
    │  └─shanghai        上海办日志目录
    ├─ref             公司公共文件参考目录
    └─temp            临时文件目录

- 人员情况

  - morson,公司总经理,其实他不必亲自看任何东西,就连部门经理们的每周总结都不一定看。但是为了表示对他的尊敬,以及满足一下他的权力欲,还是给他开放了“阅读所有文档”的权限
  - michael,arm事业部的部门经理,没事的时候喜欢弄点儿新技术,用svn来管理日志,就是他想出来的主意
  - scofield,北京办人员,老员工,为人油滑难管
  - lincon,上海办人员,老员工,大老实人一个
  - linda,总部协调员、秘书,文笔不错,长得也不错
  - rory,单片机技术员,技术支持

- 访问权限需求分析

  - 允许总经理、部门经理读取所有文件。顺便给他们开放写权限,以便体现对他们职位的尊重,虽然对于某些文件来说,他们若拥有“写”权限其实也没什么用处
  - 除部门经理外,所有其他人员,均只能看到本办事处人员工作日志
  - 不允许匿名访问
  - ref目录只允许经理和秘书读写,对其他人只读
  - temp目录人人都可以随意读写


建立代码库
----------
在服务器 ``D:\svn`` 目录下,建立 arm 代码库,命令如下::

    D:\svn>svnadmin create arm

在客户机 ``F:\temp`` 目录下,建立好上述目录结构

用命令 ``F:\temp>svn import arm svn://192.168.0.1/arm`` 导入结构

【注意点:关于导入时候的细微差别】


编辑代码库基础配置文件
----------------------
编辑代码库 ``arm\conf\svnserve.conf`` 文件,如下::

    [general]
    password-db = passwd.conf
    anon-access = none
    auth-access = write
    authz-db = authz.conf


管理用户帐号
------------
新建代码库 ``arm\conf\passwd.conf`` 文件,如下::

    [users]
    morson = ShowMeTheMoney
    michael = mysecretpassword
    scofield = hellolittilekiller
    lincon = asyouknows111
    rory = 8809117
    linda = IlikeWorldCup2006


建立目录访问权限控制文件
------------------------
新建代码库 ``arm\conf\authz.conf`` 文件,内容如下::

    [groups]
    g_vip = morson
    g_manager = michael
    g_beijing = scofield
    g_shanghai = lincon
    g_headquarters = rory, linda
    g_docs = linda

    [arm:/]
    @g_manager = rw
    * = r

    [arm:/diary/headquarters]
    @g_manager = rw
    @g_headquarters = rw
    @g_vip = r
    * =

    [arm:/diary/beijing]
    @g_manager = rw
    @g_beijing = rw
    @g_vip = r
    * =

    [arm:/diary/shanghai]
    @g_manager = rw
    @g_shanghai = rw
    @g_vip = r
    * =

    [arm:/ref]
    @g_manager = rw
    @g_docs = rw
    * = r

    [arm:/temp]
    * = rw

测试
----
在服务器上,打开一个 DOS Prompt 窗口,输入如下指令::

    svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117

我们应该得到如下目录结构::

    arm
    ├─diary
    │  └─headquarters
    ├─ref
    └─temp

然后修改ref目录下任意文件并提交,服务器将会报错“Access deni”


深入
====

本章将详细介绍前一章所涉及的两个配置文件, svnserve.conf 和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义。

这里首先要注意一点,任何配置文件的有效配置行,都不允许存在前置空格,否则程序会无法识别。也就是说,如果你直接从本文的纯文本格式中拷贝了相关的配置行过去,需要手动将前置的4个空格全部删除。当然了,如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使,那么也许 UltraEdit 的“Column Mode”编辑模式,可以给你很大帮助呢。


svnserve.conf
-------------

``arm\conf\svnserve.conf`` 文件,是 svnserve.exe 这个服务器进程的配置文件,我们逐行解释如下。

首先,我们告诉 svnserve.exe,用户名与密码放在 passwd.conf 文件下。当然,你可以改成任意的有效文件名,比如默认的就是 passwd::

    password-db = passwd.conf

接下来这两行的意思,是说只允许经过验证的用户,方可访问代码库。 那么哪些是“经过验证的”用户呢?噢,当然,就是前面说那些在 passwd.conf 文件里面持有用户名密码的家伙。这两行的等号后面,目前只允许 read write none 三种值,你如果想实现一些特殊的值,比如说“read-once”之类的,建议你自己动手改源代码,反正它也是自由软件::

    anon-access = none
    auth-access = write

接下来就是最关键的一句呢,它告诉 svnserve.exe,项目目录访问权限的相关配置是放在 authz.conf 文件里::

    authz-db = authz.conf

当然,svn 1.3.2 引入本功能的时候,系统默认使用 authz 而不是 authz.conf 作为配置文件。不过由于鄙人是处女座的,有着强烈的完美主义情结,看着 svnserve.conf 有后缀而 passwd 和 authz 没有就是不爽,硬是要改了。


authz.conf 之用户分组
---------------------

``arm\conf\authz.conf`` 文件的配置段,可以分为两类,``[group]`` 是一类,里面放置着所有用户分组信息。其余以 ``[arm:/]`` 开头的是另外一类,每一段就是对应着项目的一个目录,其目录相关权限,就在此段内设置。

首先,我们将人员分组管理,以便以后由于人员变动而需要重新设置权限时候,尽量少改动东西。我们一共设置了5个用户分组,分组名称统一采用 ``g_`` 前缀,以方便识别。当然了,分组成员之间采用逗号隔开::

    [groups]
    # 任何想要查看所有文档的非本部门人士
    g_vip = morson

    # 经理
    g_manager = michael

    # 北京办人员
    g_beijing = scofield

    # 上海办人员
    g_shanghai = lincon

    # 总部一般员工
    g_headquarters = rory, linda

    # 小秘,撰写文档
    g_docs = linda

注意到没有, linda 这个帐号同时存在“总部”和“文档员”两个分组里面,这可不是我老眼昏花写错了,是因为 svnserve.exe 允许我这样设置。它意味着,这个家伙所拥有的权限,将会比他的同事 rory 要多一些,这样的确很方便。具体多了哪些呢?请往下看!


authz.conf 之项目根目录
-----------------------

接着,我们对项目根目录做了限制,该目录只允许arm事业部的经理才能修改,其他人都只能眼巴巴的看着::

    [arm:/]
    @g_manager = rw
    * = r

- ``[arm:/]`` 表示这个目录结构的相对根节点,或者说是 arm 项目的根目录

- 这里的 ``@`` 表示接下来的是一个组名,不是用户名。你当然也可以将 ``@g_manager = rw`` 这一行替换成 ``michael = rw`` ,而表达的意义完全一样。

- ``*`` 表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部门经理外的其他所有人”,当然也包括总经理那个怪老头

- ``* = r`` 则表示“那些人只能读,不能写”


authz.conf 之项目子目录
-----------------------

然后,我们要给总部人员开放日志目录的读写权限::

    [arm:/diary/headquarters]
    @g_manager = rw
    @g_headquarters = rw
    @g_vip = r
    * =

- 我敢打赌,设计svn的家伙们,大部分都是在 unix/linux 平台下工作,所以他们总喜欢使用 ``/`` 来标识子目录,而完全忽视在 MS Windows 下是用 ``\`` 来做同样的事情。所以这儿,为了表示 ``arm\diary\headquarters`` 这个目录,我们必须使用 ``[arm:/diary/headquarters]`` 这样的格式。

- 这里最后一行的 ``* =`` 表示,除了经理、总部人员、特别人士之外,任何人都被禁止访问本目录。这一行是否可以省略呢?

- 之所以这儿需要将 ``@g_vip = r`` 一句加上,就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力,则他会和其他人一样,被 ``*`` 给排除在外。

- 如果众位看官中间,有谁玩过防火墙配置的话,可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样,那就是各个配置行之间,没有 **先后顺序** 一说。也就是说,如果我将本段配置的 ``* =`` 这一行挪到最前面,完全不影响整个配置的最终效果。

- 请注意这儿,我们并没有给 ``arm\diary`` 目录设置权限,就直接跳到其子目录下进行设置了。我当然是故意这样的,因为我想在这儿引入“继承”的概念。

- **权限具备继承性** 任何子目录,均可继承其父目录的所有权限,除非它自己被明确设置了其他的权限。也就是说,在 arm 目录设置权限后, ``arm\diary`` 目录没有进行设置,就意味着它的权限与 arm 目录一样,都是只有经理才有权读写,其他人只能干瞪眼。

- 【 * =  是否可以省略】【用例子引入覆盖】【单用户权限的继承问题】【父目录权限集成与全面覆盖问题】

现在来看看

好了,我们现在掌握了“继承”的威力,它让我们节省了不少敲键盘的时间。可是现在又有一个问题了,

属性具备覆盖性质
子目录若设置了属性,则完全覆盖父目录。



authz.conf 的其他注意点
-----------------------

1. 父目录的 ``r`` 权限,对子目录 ``w`` 权限的影响

把这个问题专门提出来,是因为在1.3.1及其以前的版本里面,有个bug,即为了子目录的写权限,项目首目录必须具备读权限。因此现在使用了1.3.2版本,就方便了那些想在一个代码库存放多个相互独立的项目的管理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做 diary,而arm事业部只是其中一个部门,则可以这样做::

    [diary:/]
    @g_chief_manager = rw

    [diary:/arm]
    @g_arm_manager = rw
    @g_arm = r

这样,对于所有arm事业部的人员来说,就可以将 svn://192.168.0.1/diary/arm 这个URL当作根目录来进行日常操作,而完全不管它其实只是一个子目录,并且当有少数好奇心比较强的人想试着 checkout 一下 svn://192.168.0.1/diary 的时候,马上就会得到一个警告“Access deni”,哇,太酷了。


2. 默认权限

如果说我对某个目录不设置任何权限,会怎样?马上动手做个试验,将::

    [diary:/]
    @g_chief_manager = rw

改成::

    [diary:/]
    # @g_chief_manager = rw

这样就相当于什么都没有设置。在我的 svn 1.3.2 版本上,此时是禁止任何访问。也就是说,如果你想要让某人访问某目录,你一定要显式指明这一点。这个策略,看起来与防火墙的策略是一致的。



3. 只读权限带来的一个小副作用

若设置了::

    [arm:/diary]
    * = r

则svnserve认为,任何人,都不允许改动diary目录,包括删除和改名,和新增。

也就是说,如果你在项目初期创建目录时候,一不小心写错目录名称,比如因拼写错误写成 dairy,以后除非你改动 authz.conf 里面的这行设置,否则无法利用 svn mv 命令将错误的目录更正。


改进
====

对中文目录的支持
----------------

上午上班的时候,Morson 来到 Michael 的桌子前面,说道:“你是否可以将我们的北京办、上海办目录,改成用中文的,看着那些拼音我觉得很难受?” Michael 心想,还好这两天刚了解了一些与 unicode 编码相关的知识,于是微笑地回答:“当然可以,你明天下午就可以看到中文目录名称了。”

1. 使用 svn mv 指令,将原来的一些目录改名并 commit 入代码库,改名后的目录结构如下::

    arm
    ├─工作日志
    │  ├─总部人员
    │  ├─北京办
    │  └─上海办
    ├─公司公共文件参考目录
    └─临时文件存放处

2. 修改代码库的 authz.conf 文件,将相应目录逐一改名

3. 使用 UltraEdit 将 authz.conf 文件转换成不带 BOM 的 UTF-8 格式

   将配置文件转换成 UTF-8 格式之后,Subversion 就能够正确识别中文字符了。但是这里需要注意一点,即必须保证 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的缩写,指 UNICODE 文件头部用于指明高低字节排列顺序的几个字符,通常是 ``FF FE`` ,而将之用 UTF-8 编码之后,就是 ``EF BB BF`` 。由于 UTF-8 文件本身不存在字节序问题,所以对 UTF-16 等编码方式有重大意义的 BOM,对于 UTF-8 来说,只有一个作用——表明这个文件是 UTF-8 格式。由于 BOM 会给文本处理带来很多难题,所以现在很多软件都要求使用不带 BOM 的 UTF-8 文件,特别是一些处理文本的软件,如 PHP、 UNIX 脚本文件等,svn 也是如此。

  目前常用的一些文本编辑工具中,MS Windows 自带的“记事本”里面,“另存为”菜单保存出来的 UTF-8 格式文件,会自动带上 BOM 。新版本 UltraEdit 提供了选项,允许用户选择是否需要 BOM,而老版本的不会添加 BOM。请各位查看一下自己常用的编辑器的说明文件,看看它是否支持这个功能。

  利用 UltraEdit ,我们可以将 BOM 去掉。方法是,首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可。


参考文献
========
- Subversion官方文档, http://svnbook.red-bean.com/en/1 ... svn-ch-6-sect-4.4.2
- Subversion 1.3变更记录, http://subversion.tigris.org/svn_1.3_releasenotes.html
- Subversion FAQ, http://subversion.tigris.org/faq.html
- UTF-8 常见问题, http://unicode.org/faq/utf_bom.html


posted @ 2006-09-10 21:51 subversion 阅读(687) | 评论 (0)编辑 收藏

Subversion安装手记

STEP 1:下载和安装

首先在Subversion的官方网站去下载windows安装包,最新版是1.3.1,可惜在项目树上只更新到了1.3.0的二进制包。
下载后安装在本地机器上,这里注意的是最好将安装目录指定为纯英文名目录,安装在中文目录下天知道哪天会冒出一个让你想破头也想不出的错误来。
下载TortoiseSVN进行本地安装,我安装的是最新的1.3.2 for svn 1.3.0,这是一个将SVN集成到windows shell中的GUI管理工具,推荐使用。
STEP 2:创建储存库

安装完TortoiseSVN后提示要重启机器,其实启不启都可以正常使用了,首先创建SVN储存库(repository),可以选择命令行方式或者通过TortoiseSVN插件进行GUI操作,命令行运行如下:
svnadmin create E:\svn\repository

e:\svn\repository就是我指定的储存库目录,如果用GUI方式,可以在这个目录下点击右键选择[TotoiseSVN]->[Create Repository href...]进行创建,版本库模式指定为默认的即可。
repository创建完毕后会在目录下生成若干个文件和文件夹,dav目录是提供给Apache与mod_dav_svn使用的目录,让它们存储内部数据;db目录就是所有版本控制的数据文件;hooks目录放置hook脚本文件的目录;locks用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端;format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号;
STEP 3:配置

打开/conf/目录,打开svnserve.conf找到一下两句:
# [general]
# password-db = passwd
去之每行开头的#,其中第二行是指定身份验证的文件名,即passwd文件
同样打开passwd文件,将
# [users]
# harry = harryssecret
# sally = sallyssecret
这几行的开头#字符去掉,这是设置用户,一行一个,存储格式为“用户名 = 密码”,如可插入一行:admin = admin888,即为系统添加一个用户名为admin,密码为admin888的用户
STEP 4:运行SVN服务

在命令行执行
svnserve --daemon --root E:\svn\repository
服务启动,--daemon可简写为-d,--root可简写为-r,可以建立一个批处理文件并放在windows启动组中便于开机就运行SVN服务,或者在这个地址http://clanlib.org/~mbn/svnservice/下载那个svnservice.exe文件,拷贝到E:\svn\bin目录下,再从命令行下执行:
svnservice -install --daemon --root "E:\svn\Repository"
sc config svnservice start= auto
net start svnservice
此文件会将SVN变成windows系统的一个服务,并默认为自启动,注意:执行第三句时确保前面以命令行方式运行的SVN服务已经停止,如果没停止可在其窗口中按Ctrl+C中止运行。
STEP 5:创建项目版本树

确定SVN服务(命令行或windows服务)运行后,在你需要导入储存库的目录下单击右键选择[TortoiseSVN]-> [Import...],在弹开的窗口的URL框中输入 "svn://localhost/myproject" 点击 "OK" 执行导入,如果没有报错,数据就全部加入SVN储存库目录树上了。用命令行也可以完成这些操作,这需要你在系统变量中新建一个“SVN_EDITOR”的系统变量,变量值为本地的一个文本编辑器执行文件路径,一般指到windows的记事本上就行了 "c:\windows\notepad.exe" ,然后新开一个CMD窗口,执行
svn mkdir svn://localhost/myproject
随即关闭记事本打开的log文件窗口后按"c"键继续后生成项目树。一般情况,我们在创建文件根路径后应该在创建三个目录:branches、tags、 trunk,这三个目录是Subversion需要的三个目录。对于check out、commit、update等操作可以通过svn命令行方式执行,也可以用TortoiseSVN的windows菜单完成,非常简单咯。

posted @ 2006-09-10 00:28 subversion 阅读(733) | 评论 (1)编辑 收藏

SubVersion定期完整备份脚本(Linux)

说明:请根据自己需要调整. 本人不对此文章造成的任何后果负责,请慎重使用.

脚本功能: 定期对一些项目进行完整备份.

project.lst 文件格式如下:

project1
project2

备份脚本如下:

#!/bin/sh

#
# subversion data backup script
# by scud http://www.jscud.com
# 2005-11-27
#
# subversion完整备份的脚本,调整好后使用crontab -e 放到自动执行里面即可.
#

#备份日志文件
LogFile=/backup/svn/svnbak.log

DATE=`date +%Y%m%d`

#备份目录
BakDir=/backup/svn/data

#日常备份目录,如果有
DailyDir=/backup/svn/daily

#要备份的项目列表文件,只有项目名
ProjectLst=/backup/svn/project.lst

#所有项目都保存在这个目录下
SvnDir=/var/svn

#svnadmin程序的路径
SVNADMIN=/app/subversion/bin/svnadmin

echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile

cd $BakDir

#读取项目列表
PROJECTLIST=`cat $ProjectLst`


for project in $PROJECTLIST
do
projectdata=$SvnDir/$project
destdir=$BakDir/$project
dumpfile=$DATE.$project.tgz


if [ -f $BakDir/$dumpfile ]
then
echo "backup file have exist!" >>$LogFile
else

$SVNADMIN hotcopy $projectdata $destdir --clean-logs

tar czvf $dumpfile $destdir >/dev/null

rm -fr $project

echo "backup $project done into $dumpfile ">>$LogFile

fi

## delete old tgz 此处根据crontab的时间调整,例如一周一次备份,此处保留了5份备份,以前的删除
oldfile="$BakDir/"$(date +%y%m%d --date=’28 days ago’).$project.tgz

if [ -f $oldfile ]
then
rm -f $oldfile >> $LogFile 2>&1
echo "[$oldfile]Delete Old File Success!" >> $LogFile
else
echo "[$oldfile]No Old Backup File!" >> $LogFile
fi

done


#delete previous daily backup files
cd $DailyDir
rm -f *




根据自己的设置配置好后,使用crontab 放到定时执行的任务里即可.



增量备份的脚本目前还没有...

posted @ 2006-09-10 00:27 subversion 阅读(1441) | 评论 (2)编辑 收藏

Linux 上安装 Subversion

Linux 上安装 Subversion
Subversion是一个自由/开源版本控制系统,具备强大而灵活的版本控制能力。她被设计成为CVS的替 者。

安装所需文件及下载地址:
1) Subversion 1.2.3 (http://subversion.tigris.org/downloads/subversion-1.2.3.tar.gz)
2) Berkeley DB 4.4.20 (http://downloads.sleepycat.com/db-4.4.20.tar.gz)
3) Apache 2.0.54 (http://apache.justdn.org/httpd/httpd-2.0.54.tar.gz)

以root用户登陆系统。

安装Apache
#tar -zxvf httpd-2.0.54.tar.gz
#cd httpd-2.0.54
#./configure --enable-dav --enable-so --enable-maintainer-mode
#make
#make install

安装 Berkeley DB
#tar -zxvf db-4.4.20.NC.tar.gz
#cd db-4.4.20.NC/build_unix/
#../dist/configure --prefix=/usr/local/bdb
#make
#make install

安装Subversion
#tar -zxvf subversion-1.2.3.tar.gz
#cd subversion-1.2.3
#./configure --with-berkeley-db=/usr/local/bdb --with-apxs=/usr/local/apache2/bin/apxs
#make
#make install

/* 你可以用以下命令检验subversion是否安装成功 */
#svnadmin --version

创建repository
#mkdir -p /home/svn/yourproject
#svnadmin create /home/svn/yourproject

/* 建议使用如下目录结构
*/
/home/yourprojectname/trunk
/home/
yourprojectname /tags
/home/
yourprojectname /branches


/* 如果你是从CVS转移过来的项目,可以用下面命令清理你的目录 */
#find projectname/ -name CVS -exec rm -rf {} \;

导入source
#svn import -m "initial import" /home/yourprojectname file:///home/svn/yourprojectname

启动svn服务
#svnserve -d

检查服务
#lsof -i :3690

创建用户
#groupadd yourproject
#useradd -G yourprojectname -m "it's project admin." yourprojectname
#useradd -G
yourprojectname -m "it's andy." alu
#useradd -G
yourprojectname -m "it's jon." jshen
#chown -R
yourprojectname . yourprojectname /home/svn/yourprojectname
#chmod 770 /home/svn/
yourprojectname
#chmod -R g+w /home/svn/ yourprojectname

修改svn配置
vi /home/svn/
yourprojectname /conf/svnserve.conf
anon-access = read
auth-access = write

参考文章:
http://linux.chinaunix.net/news/info/2005-01-10/726.shtml
http://sunfreeware.com/subversion.html
http://www.germane-software.com/~ser/R_n_R/subversion.html
http://sanwangx.brain-c.com/archives/2004_11/12_153/

Any comments are appreciated.

posted @ 2006-09-09 23:52 subversion 阅读(452) | 评论 (0)编辑 收藏

仅列出标题
共2页: 1 2