﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-CONAN ZONE-文章分类-SVN</title><link>http://www.blogjava.net/conans/category/32366.html</link><description>你越挣扎我就越兴奋</description><language>zh-cn</language><lastBuildDate>Sun, 21 Jun 2009 01:29:03 GMT</lastBuildDate><pubDate>Sun, 21 Jun 2009 01:29:03 GMT</pubDate><ttl>60</ttl><item><title>SVN服务器subversion-1.6.2完整安装步骤详解-CNS整理版</title><link>http://www.blogjava.net/conans/articles/283402.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sat, 20 Jun 2009 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/283402.html</guid><description><![CDATA[<strong>注; </strong>这里的<strong>/data</strong>要修改为你的<strong>httpd.conf</strong>中<strong>DocumentRoot </strong>目录或其子目录<br />
<br />
/data/svnroot/&nbsp; 目录结构如下<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |-- authfile<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |-- authz.conf<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; `-- cns_server_auto_install&nbsp; 我的svn库项目目录<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |-- README.txt<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; `-- conf<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp; `-- svnserve.conf<br />
<br />
<br />
<strong>1)下载并安装相关软件</strong><br />
wget <a href="http://apache.mirrors.pair.com/apr/apr-1.3.3.tar.gz" target="_blank" onclick="return checkUrl(this)" id="url_4">http://apache.mirrors.pair.com/apr/apr-1.3.3.tar.gz</a><br />
tar xvf apr-1.3.3.tar.gz <br />
cd apr-1.3.3<br />
./configure --prefix=/usr/local/apr &amp;&amp; make &amp;&amp; make install <br />
<br />
cd ..<br />
<br />
wget <a href="http://apache.mirrors.pair.com/apr/apr-util-1.3.4.tar.gz" target="_blank" onclick="return checkUrl(this)" id="url_5">http://apache.mirrors.pair.com/apr/apr-util-1.3.4.tar.gz</a> <br />
tar xvf apr-util-1.3.4.tar.gz<br />
cd apr-util-1.3.4<br />
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr &amp;&amp; make &amp;&amp; make install<br />
<br />
cd ..<br />
<br />
wget <a href="http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz" target="_blank" onclick="return checkUrl(this)" id="url_6">http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz</a><br />
tar xvf subversion-1.6.2.tar.gz<br />
<br />
wget&nbsp; <a href="http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz" target="_blank" onclick="return checkUrl(this)" id="url_7">http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz</a><br />
tar xvf sqlite-amalgamation-3.6.13.tar.gz <br />
mkdir subversion-1.6.2/sqlite-amalgamation<br />
cp sqlite-3.6.13/sqlite3.c subversion-1.6.2/sqlite-amalgamation/<br />
<br />
wget <a href="http://www.webdav.org/neon/neon-0.28.4.tar.gz" target="_blank" onclick="return checkUrl(this)" id="url_8">http://www.webdav.org/neon/neon-0.28.4.tar.gz</a><br />
tar xvf neon-0.28.4.tar.gz <br />
<strong>mv neon-</strong>0.28.4<strong> </strong>subversion-1.6.2/<strong>neon</strong><br />
<br />
cd subversion-1.6.2<br />
<br />
./configure --prefix=/usr/local/subversion \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --with-apxs=/usr/local/apache/bin/apxs \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; --with-apr=/usr/local/apr \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --with-apr-util=/usr/local/apr-util \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; --with-ssl --with-zlib=/usr/local/zlib \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --enable-maintainer-mode &amp;&amp; \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; make &amp;&amp; make install<br />
<br />
cd ..<br />
<br />
<strong>2) 进行相关配置</strong><br />
<strong>a)在/usr/local/apache/conf/httpd.conf中添加如下模块</strong><br />
&nbsp; &nbsp; LoadModule dav_svn_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_dav_svn.so<br />
&nbsp; &nbsp; LoadModule authz_svn_module&nbsp;&nbsp; modules/mod_authz_svn.so<br />
<br />
<strong>b)配置svn.cnscn.org虚拟主机 并加入svn选项</strong><br />
&nbsp;&nbsp; .在/usr/local/apache/conf/httpd.conf中去掉#Include conf/extra/httpd-vhosts.conf前面的#<br />
<br />
&nbsp;&nbsp; .创建目录/data/svnroot<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [root@<a href="http://www.cnscn.org/" target="_blank" onclick="return checkUrl(this)" id="url_1">www.cnscn.org</a> ~]# mkdir /data/svnroot<br />
<br />
&nbsp;&nbsp; .在conf/extra/httpd-vhosts.conf中添加虚拟主机svn.cnscn.org (一定要注意，在/etc/hosts中添加 127.0.0.1 svn.cnscn.org)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; #svn.cnscn.org<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot /data/svnroot<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerName svn.cnscn.org<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ErrorLog /var/log/apache/org_cnscn_svn-error_log<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CustomLog /var/log/apache/org_cnscn_svn-access_log common<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; #这里/svn是个不存在，也不用建立的目录,即实际上不需要/data/svnroot/svn目录存在<br />
&nbsp;&nbsp;&nbsp;&nbsp; #当访问<a href="http://svn.cnscn.org/svn/projectname" target="_blank" onclick="return checkUrl(this)" id="url_9">http://svn.cnscn.org/svn/projectname</a>时，会自动寻找/data/svnroot/projectname目录 &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;location /svn&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #告诉Apache是dav_svn_module模块来响应/svn/的请求<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DAV svn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #告诉Subersion版本库的根目录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SVNParentPath /data/svnroot<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #指定SVN服务器的访问控制文件的路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AuthzSVNAccessFile /data/svnroot/authz.conf<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #激活基本认证，就是用户名/密码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AuthType Basic<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #在认证输入框时显示的提示信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AuthName "welcome to cnscn svn"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #指定使用的认证密码文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AuthUserFile /data/svnroot/authfile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #指定只有输入了正确的用户/密码的用户可以访问URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Require valid-user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/location&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/VirtualHost&gt;<br />
<br />
<strong>3)创建验证文件</strong><br />
&nbsp;&nbsp;&nbsp; 1&gt; /usr/local/apache/bin/htpasswd -c -b /data/svnroot/authfile username password<br />
&nbsp;&nbsp; 2&gt; 编辑/data/svnroot/authz.conf 内容如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [groups]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; users = cnscn<br />
&nbsp;<br />
&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; [/]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; @users = rw<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [svn:/]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @users = rw<br />
<br />
<strong>4)创建svn项目库</strong>cns_server_auto_install<br />
&nbsp;&nbsp;&nbsp;&nbsp; a)创建<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/local/subversion/bin/svnadmin create cns_server_auto_install<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; b)修改/data/svnroot/cns_server_auto_install/conf/svnserve.conf的内容为如下<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [general]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anon-access = read<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth-access = write<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password-db = /data/svnroot/authfile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; authz-db = /data/svnroot/authz.conf<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; realm = cns_server_auto_install<br />
&nbsp; &nbsp;<br />
<strong>5)重启apache</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [root@<a href="http://www.cnscn.org/" target="_blank" onclick="return checkUrl(this)" id="url_2">www.cnscn.org</a> ~]#&nbsp; /usr/local/apache/bin/apachectl restart<br />
<br />
<strong>6)测试</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://svn.cnscn.org/svn/cns_server_auto_install/" target="_blank" onclick="return checkUrl(this)" id="url_10">http://svn.cnscn.org/svn/cns_server_auto_install/</a>　内容应会显示出Revision ...:/<br />
<br />
<strong>7)导入一个项目</strong><br />
&nbsp;&nbsp; [root@<a href="http://www.cnscn.org/" target="_blank" onclick="return checkUrl(this)" id="url_3">www.cnscn.org</a> ~]# svn import&nbsp;&nbsp;--username cnscn&nbsp;&nbsp;--password 123456 -m "cnscn server auto install"&nbsp; cns_server_auto_install_local <a href="http://svn.cnscn.org/svn/cns_server_auto_install/" target="_blank" onclick="return checkUrl(this)" id="url_11">http://svn.cnscn.org/svn/cns_server_auto_install/</a><br />
&nbsp; 新增&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cns_lanmp_install_090423/install.sh<br />
&nbsp; 新增&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cns_lanmp_install_090423/mods<br />
&nbsp; 新增&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cns_lanmp_install_090423/mods/mysql_proxy<br />
&nbsp; 新增&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cns_lanmp_install_090423/mods/mysql_proxy/install.sh<br />
&nbsp; 新增&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cns_lanmp_install_090423/mods/mysql_proxy/glib-2.16.4
<img src ="http://www.blogjava.net/conans/aggbug/283402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-06-20 21:13 <a href="http://www.blogjava.net/conans/articles/283402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转贴】Subversion权限详解 </title><link>http://www.blogjava.net/conans/articles/254058.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Tue, 10 Feb 2009 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/254058.html</guid><description><![CDATA[<div class="section">
<h2><a id="id5" name="id5">1&nbsp;&nbsp;&nbsp;背景假设</a> </h2>
<p>厦门央瞬公司是一家电子元器件设备供应商，其中有个ARM部门，专门负责ARM芯片的方案设计、销售，并在北京、上海各设立了一个办事处。对于工作日志，原先采用邮件方式发给经理，但是这种方式有个缺点，那就是不具备连续性，要看以前的日志必须一封一封邮件去查看，很麻烦。于是就想到利用 Subversion， 让员工在自己电脑上编辑日志，然后利用svn传送回来，既方便员工自己编写日志，又方便对日志的归档处理，而且提交日志的时候只需要执行一下 svn update 即可，比发送邮件还要简单的多。</p>
<ul>
    <li>
    <p class="first">svn服务器相关信息</p>
    <ul class="simple">
        <li>服务器地址： 192.168.0.1
        <li>服务器OS： MS Windows 2000 Server Edition 中文版
        <li>代码库本地目录： <tt class="docutils literal"><span class="pre">D:\svn\arm</span></tt> </li>
    </ul>
    <li>
    <p class="first">arm部门文档的目录结构如下:</p>
    <pre class="literal-block">arm                 部门名称
    ├─diary           工作日志目录
    │  ├─headquarters    总部工作日志目录
    │  ├─beijing         北京办日志目录
    │  └─shanghai        上海办日志目录
    ├─ref             公司公共文件参考目录
    └─temp            临时文件目录
    </pre>
    <li>
    <p class="first">人员情况</p>
    <ul class="simple">
        <li>morson，公司总经理，其实他不必亲自看任何东西，就连部门经理们的每周总结都不一定看。但是为了表示对他的尊敬，以及满足一下他的权力欲，还是给他开放了&#8220;阅读所有文档&#8221;的权限
        <li>michael，arm事业部的部门经理，没事的时候喜欢弄点儿新技术，用svn来管理日志，就是他相处来的主意
        <li>scofield，北京办人员，老员工，为人油滑难管
        <li>lincon，上海办人员，老员工，大老实人一个
        <li>linda，总部协调员、秘书，文笔不错，长得也不错
        <li>rory，单片机技术员，技术支持 </li>
    </ul>
    <li>
    <p class="first">访问权限需求分析</p>
    <ul class="simple">
        <li>允许总经理读取所有文件
        <li>除部门经理外，所有其他人员，均只能看到本办事处人员工作日志
        <li>不允许匿名访问
        <li>ref目录只允许经理和秘书写，对其他人只读
        <li>temp目录人人都可以写 </li>
    </ul>
    </li>
</ul>
</div>
<div class="section">
<h2><a id="id6" name="id6">2&nbsp;&nbsp;&nbsp;建立代码库</a> </h2>
<p>在服务器 <tt class="docutils literal"><span class="pre">D:\svn</span></tt> 目录下，建立 arm 代码库，命令如下:</p>
<pre class="literal-block">D:\svn&gt;svnadmin create arm
</pre>
<p>在客户机 <tt class="docutils literal"><span class="pre">F:\temp</span></tt> 目录下，建立好上述目录结构</p>
<p>用命令 <tt class="docutils literal"><span class="pre">F:\temp&gt;svn</span><span class="pre">import</span><span class="pre">arm</span><span class="pre">svn://192.168.0.1/arm</span></tt> 导入结构</p>
<p>【注意点：关于导入时候的细微差别】</p>
</div>
<div class="section">
<h2><a id="id7" name="id7">3&nbsp;&nbsp;&nbsp;编辑代码库基础配置文件</a> </h2>
<p>编辑代码库 <tt class="docutils literal"><span class="pre">arm\conf\svnserve.conf</span></tt> 文件，如下:</p>
<pre class="literal-block">[general]
password-db = passwd.conf
anon-access = none
auth-access = write
authz-db = authz.conf
</pre>
</div>
<div class="section">
<h2><a id="id8" name="id8">4&nbsp;&nbsp;&nbsp;管理用户帐号</a> </h2>
<p>新建代码库 <tt class="docutils literal"><span class="pre">arm\conf\passwd.conf</span></tt> 文件，如下:</p>
<pre class="literal-block">[users]
morson = ShowMeTheMoney
michael = mysecretpassword
scofield = hellolittilekiller
lincon = asyouknows111
rory = 8809117
linda = IlikeWorldCup2006
</pre>
</div>
<div class="section">
<h2><a id="id9" name="id9">5&nbsp;&nbsp;&nbsp;建立目录访问权限控制文件</a> </h2>
<p>新建代码库 <tt class="docutils literal"><span class="pre">arm\conf\authz.conf</span></tt> 文件，内容如下:</p>
<pre class="literal-block">[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
</pre>
</div>
<div class="section">
<h2><a id="id10" name="id10">6&nbsp;&nbsp;&nbsp;测试</a> </h2>
<p>在服务器上，打开一个 DOS Prompt 窗口，输入如下指令:</p>
<pre class="literal-block">svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117
</pre>
<p>我们应该得到如下目录结构:</p>
<pre class="literal-block">arm
├─diary
│  └─headquarters
├─ref
└─temp
</pre>
<p>然后修改ref目录下任意文件并提交，服务器将会报错&#8220;Access deni&#8221;</p>
</div>
<div class="section">
<h1><a id="id11" name="id11">深入</a> </h1>
<p>本章将详细介绍前一章所涉及的两个配置文件， svnserve.conf 和 authz.conf，通过对配置逐行的描述，来阐明其中的一些细节含义。</p>
<p>这里首先要注意一点，任何配置文件的有效配置行，都不允许存在前置空格，否则程序会无法识别。也就是说，如果你直接从本文的纯文本格式中拷贝了相关的配置行过去，需要手动将前置的4个空格全部删除。当然了，如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使，那么也许 UltraEdit 的&#8220;Column Mode&#8221;编辑模式，可以给你很大帮助呢。</p>
<div class="section">
<h2><a id="svnserve-conf" name="svnserve-conf">1&nbsp;&nbsp;&nbsp;svnserve.conf</a> </h2>
<p><tt class="docutils literal"><span class="pre">arm\conf\svnserve.conf</span> </tt>文件，是 svnserve.exe 这个服务器进程的配置文件，我们逐行解释如下。</p>
<p>首先，我们告诉 svnserve.exe，用户名与密码放在 passwd.conf 文件下。当然，你可以改成任意的有效文件名，比如默认的就是 passwd:</p>
<pre class="literal-block">password-db = passwd.conf
</pre>
<p>接下来这两行的意思，是说只允许经过验证的用户，方可访问代码库。 那么哪些是&#8220;经过验证的&#8221;用户呢？噢，当然，就是前面说那些在 passwd.conf 文件里面持有用户名密码的家伙。这两行的等号后面，目前只允许 read write none 三种值，你如果想实现一些特殊的值，比如说&#8220;read-once&#8221;之类的，建议你自己动手改源代码，反正它也是自由软件:</p>
<pre class="literal-block">anon-access = none
auth-access = write
</pre>
<p>接下来就是最关键的一句呢，它告诉 svnserve.exe，项目目录访问权限的相关配置是放在 authz.conf 文件里:</p>
<pre class="literal-block">authz-db = authz.conf
</pre>
<p>当然，svn 1.3.2 引入本功能的时候，系统默认使用 authz 而不是 authz.conf 作为配置文件。不过由于鄙人是处女座的，有着强烈的完美主义情结，看着 svnserve.conf 有后缀而 passwd 和 authz 没有就是不爽，硬是要改了。</p>
</div>
<div class="section">
<h2><a id="authz-conf" name="authz-conf">2&nbsp;&nbsp;&nbsp;authz.conf 之用户分组</a> </h2>
<p><tt class="docutils literal"><span class="pre">arm\conf\authz.conf</span> </tt>文件的配置段，可以分为两类，``[group]`` 是一类，里面放置着所有用户分组信息。其余以 <tt class="docutils literal"><span class="pre">[arm:/]</span></tt> 开头的是另外一类，每一段就是对应着项目的一个目录，其目录相关权限，就在此段内设置。</p>
<p>首先，我们将人员分组管理，以便以后由于人员变动而需要重新设置权限时候，尽量少改动东西。我们一共设置了5个用户分组，分组名称统一采用 <tt class="docutils literal"><span class="pre">g_</span></tt> 前缀，以方便识别。当然了，分组成员之间采用逗号隔开:</p>
<pre class="literal-block">[groups]
# 任何想要查看所有文档的非本部门人士
g_vip = morson
# 经理
g_manager = michael
# 北京办人员
g_beijing = scofield
# 上海办人员
g_shanghai = lincon
# 总部一般员工
g_headquarters = rory, linda
# 小秘，撰写文档
g_docs = linda
</pre>
<p>注意到没有， linda 这个帐号同时存在&#8220;总部&#8221;和&#8220;文档员&#8221;两个分组里面，这可不是我老眼昏花写错了，是因为 svnserve.exe 允许我这样设置。它意味着，这个家伙所拥有的权限，将会比他的同事 rory 要多一些，这样的确很方便。具体多了哪些呢？请往下看！</p>
</div>
<div class="section">
<h2><a id="id12" name="id12">3&nbsp;&nbsp;&nbsp;authz.conf 之项目根目录</a> </h2>
<p>接着，我们对项目根目录做了限制，该目录只允许arm事业部的经理才能修改，其他人都只能眼巴巴的看着:</p>
<pre class="literal-block">[arm:/]
@g_manager = rw
* = r
</pre>
<ul class="simple">
    <li><tt class="docutils literal"><span class="pre">[arm:/]</span> </tt>表示这个目录结构的相对根节点，或者说是 arm 项目的根目录
    <li>这里的 <tt class="docutils literal"><span class="pre">@</span></tt> 表示接下来的是一个组名，不是用户名。你当然也可以将 <tt class="docutils literal"><span class="pre">@g_manager</span><span class="pre">=</span><span class="pre">rw</span></tt> 这一行替换成 <tt class="docutils literal"><span class="pre">michael</span><span class="pre">=</span><span class="pre">rw</span></tt> ，而表达的意义完全一样。
    <li><tt class="docutils literal"><span class="pre">*</span> </tt>表示&#8220;除了上面提到的那些人之外的其余所有人&#8221;，也就是&#8220;除了部门经理外的其他所有人&#8221;，当然也包括总经理那个怪老头
    <li><tt class="docutils literal"><span class="pre">*</span> <span class="pre">=</span> <span class="pre">r</span> </tt>则表示&#8220;那些人只能读，不能写&#8221; </li>
</ul>
</div>
<div class="section">
<h2><a id="id13" name="id13">4&nbsp;&nbsp;&nbsp;authz.conf 之项目子目录</a> </h2>
<p>然后，我们要给总部人员开放日志目录的读写权限:</p>
<pre class="literal-block">[arm:/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =
</pre>
<ul class="simple">
    <li>我敢打赌，设计svn的家伙们，大部分都是在 unix/linux 平台下工作，所以他们总喜欢使用 <tt class="docutils literal"><span class="pre">/</span></tt> 来标识子目录，而完全忽视在 MS Windows 下是用 <tt class="docutils literal"><span class="pre">\</span></tt> 来做同样的事情。所以这儿，为了表示 <tt class="docutils literal"><span class="pre">arm\diary\headquarters</span></tt> 这个目录，我们必须使用 <tt class="docutils literal"><span class="pre">[arm:/diary/headquarters]</span></tt> 这样的格式。
    <li>这里最后一行的 <tt class="docutils literal"><span class="pre">*</span><span class="pre">=</span></tt> 表示，除了经理、总部人员、特别人士之外，任何人都被禁止访问本目录。这一行是否可以省略呢？
    <li>之所以这儿需要将 <tt class="docutils literal"><span class="pre">@g_vip</span><span class="pre">=</span><span class="pre">r</span></tt> 一句加上，就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力，则他会和其他人一样，被 <tt class="docutils literal"><span class="pre">*</span></tt> 给排除在外。
    <li>如果众位看官中间，有谁玩过防火墙配置的话，可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样，那就是各个配置行之间，没有 <strong>先后顺序</strong> 一说。也就是说，如果我将本段配置的 <tt class="docutils literal"><span class="pre">*</span><span class="pre">=</span></tt> 这一行挪到最前面，完全不影响整个配置的最终效果。
    <li>请注意这儿，我们并没有给 <tt class="docutils literal"><span class="pre">arm\diary</span></tt> 目录设置权限，就直接跳到其子目录下进行设置了。我当然是故意这样的，因为我想在这儿引入&#8220;继承&#8221;的概念。
    <li><strong>权限具备继承性</strong> 任何子目录，均可继承其父目录的所有权限，除非它自己被明确设置了其他的权限。也就是说，在 arm 目录设置权限后， <tt class="docutils literal"><span class="pre">arm\diary</span></tt> 目录没有进行设置，就意味着它的权限与 arm 目录一样，都是只有经理才有权读写，其他人只能干瞪眼。
    <li>【 * = 是否可以省略】【用例子引入覆盖】【单用户权限的继承问题】【父目录权限集成与全面覆盖问题】 </li>
</ul>
<p>现在来看看</p>
<p>好了，我们现在掌握了&#8220;继承&#8221;的威力，它让我们节省了不少敲键盘的时间。可是现在又有一个问题了，</p>
<p>属性具备覆盖性质子目录若设置了属性，则完全覆盖父目录。</p>
</div>
<div class="section">
<h2><a id="id14" name="id14">5&nbsp;&nbsp;&nbsp;authz.conf 的其他注意点</a> </h2>
<ol class="arabic simple">
    <li>父目录的 <tt class="docutils literal"><span class="pre">r</span></tt> 权限，对子目录 <tt class="docutils literal"><span class="pre">w</span></tt> 权限的影响 </li>
</ol>
<p>把这个问题专门提出来，是因为在1.3.1及其以前的版本里面，有个bug，即为了子目录的写权限，项目首目录必须具备读权限。因此现在使用了1.3.2版本，就方便了那些想在一个代码库存放多个相互独立的项目的管理员，来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志，叫做 diary，而arm事业部只是其中一个部门，则可以这样做:</p>
<pre class="literal-block">[diary:/]
@g_chief_manager = rw
[diary:/arm]
@g_arm_manager = rw
@g_arm = r
</pre>
<p>这样，对于所有arm事业部的人员来说，就可以将 svn://192.168.0.1/diary/arm 这个URL当作根目录来进行日常操作，而完全不管它其实只是一个子目录，并且当有少数好奇心比较强的人想试着 checkout 一下 svn://192.168.0.1/diary 的时候，马上就会得到一个警告&#8220;Access deni&#8221;，哇，太酷了。</p>
<ol class="arabic simple" start="2">
    <li>默认权限 </li>
</ol>
<p>如果说我对某个目录不设置任何权限，会怎样？马上动手做个试验，将:</p>
<pre class="literal-block">[diary:/]
@g_chief_manager = rw
</pre>
<p>改成:</p>
<pre class="literal-block">[diary:/]
# @g_chief_manager = rw
</pre>
<p>这样就相当于什么都没有设置。在我的 svn 1.3.2 版本上，此时是禁止任何访问。也就是说，如果你想要让某人访问某目录，你一定要显式指明这一点。这个策略，看起来与防火墙的策略是一致的。</p>
<ol class="arabic simple" start="3">
    <li>只读权限带来的一个小副作用 </li>
</ol>
<p>若设置了:</p>
<pre class="literal-block">[arm:/diary]
* = r
</pre>
<p>则svnserve认为，任何人，都不允许改动diary目录，包括删除和改名，和新增。</p>
<p>也就是说，如果你在项目初期创建目录时候，一不小心写错目录名称，比如因拼写错误写成 dairy，以后除非你改动 authz.conf 里面的这行设置，否则无法利用 svn mv 命令将错误的目录更正。</p>
</div>
</div>
<div class="section">
<h1><a id="id15" name="id15">改进</a> </h1>
<div class="section">
<h2><a id="id16" name="id16">1&nbsp;&nbsp;&nbsp;对中文目录的支持</a> </h2>
<p>上午上班的时候，Morson 来到 Michael 的桌子前面，说道：&#8220;你是否可以将我们的北京办、上海办目录，改成用中文的，看着那些拼音我觉得很难受？&#8221; Michael 心想，还好这两天刚了解了一些与 unicode 编码相关的知识，于是微笑地回答：&#8220;当然可以，你明天下午就可以看到中文目录名称了。&#8221;</p>
<ol class="arabic">
    <li>
    <p class="first">使用 svn mv 指令，将原来的一些目录改名并 commit 入代码库，改名后的目录结构如下:</p>
    <pre class="literal-block">arm
    ├─工作日志
    │  ├─总部人员
    │  ├─北京办
    │  └─上海办
    ├─公司公共文件参考目录
    └─临时文件存放处
    </pre>
    <li>
    <p class="first">修改代码库的 authz.conf 文件，将相应目录逐一改名</p>
    <li>
    <p class="first">使用 UltraEdit 将 authz.conf 文件转换成不带 BOM 的 UTF-8 格式</p>
    <p>将配置文件转换成 UTF-8 格式之后，Subversion 就能够正确识别中文字符了。但是这里需要注意一点，即必须保证 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的缩写，指 UNICODE 文件头部用于指明高低字节排列顺序的几个字符，通常是 <tt class="docutils literal"><span class="pre">FF</span><span class="pre">FE</span></tt> ，而将之用 UTF-8 编码之后，就是 <tt class="docutils literal"><span class="pre">EF</span><span class="pre">BB</span><span class="pre">BF</span></tt> 。由于 UTF-8 文件本身不存在字节序问题，所以对 UTF-16 等编码方式有重大意义的 BOM，对于 UTF-8 来说，只有一个作用——表明这个文件是 UTF-8 格式。由于 BOM 会给文本处理带来很多难题，所以现在很多软件都要求使用不带 BOM 的 UTF-8 文件，特别是一些处理文本的软件，如 PHP、 UNIX 脚本文件等，svn 也是如此。</p>
    </li>
</ol>
<blockquote>
<p>目前常用的一些文本编辑工具中，MS Windows 自带的&#8220;记事本&#8221;里面，&#8220;另存为&#8221;菜单保存出来的 UTF-8 格式文件，会自动带上 BOM 。新版本 UltraEdit 提供了选项，允许用户选择是否需要 BOM，而老版本的不会添加 BOM。请各位查看一下自己常用的编辑器的说明文件，看看它是否支持这个功能。</p>
<p>利用 UltraEdit ，我们可以将 BOM 去掉。方法是，首先利用&#8220;UTF-8 TO ASCII&#8221;菜单将文件转换成本地编码，通常是GB2312码，然后再使用&#8220;ASCII TO UTF-8(UNICODE Editing)&#8221;来转换到 UTF-8 即可。</p>
</blockquote></div>
</div>
<img src ="http://www.blogjava.net/conans/aggbug/254058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-02-10 13:12 <a href="http://www.blogjava.net/conans/articles/254058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Debian 4.0 rc3 上安装Subversion 1.5笔记</title><link>http://www.blogjava.net/conans/articles/219481.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 01 Aug 2008 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/219481.html</guid><description><![CDATA[在Debian 4.0 rc3 上安装Subversion 1.5笔记<br />
<br />
原创作者:八路 QQ:57623579 Mail: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#122;&#117;&#98;&#105;&#110;&#46;&#104;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">zubin.he@gmail.com</a><br />
<br />
系统环境 : Debian 4.0 rc3<br />
<br />
因环境需要,我只安装Debian 4.0 rc3 basic系统,因此在装完Debian后,为了安装mysql,subversion等就安装了以下所需要软件:<br />
<br />
apt-get install vim elinks gcc g++ make libncurses5-dev libpng12-dev libjpeg62-dev zlib1g-dev libxml2-dev<br />
<br />
1,安装apache<br />
<br />
到apache官方网站[<a href="http://www.apache.org/" target="_blank">http://www.apache.org</a>]上下载httpd- 2.2.9.tar.gz<br />
#tar -zxvf httpd-2.2.9.tar.gz<br />
#./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl --enable-rewrite --with-mpm=worker --enable-dav --enable-maintainer-mode --enable-cgi<br />
说明:<br />
--enable-dav --enable-maintainer-mode 这两个参数在安装Subversion时需要的,如不装subversion时,可不装<br />
#make &amp; make install<br />
<br />
2,安装subversion<br />
<br />
到subversion官网上下载:<a href="http://subversion.tigris.org/downloads/subversion-" target="_blank">http://subversion.tigris.org/downloads/subversion-</a> 1.5.0.tar.gz<br />
#tar -zxvf subversion-1.5.0.tar.gz<br />
到neon官网上下载:<a href="http://www.webdav.org/neon/neon-0.28.2.tar.gz" target="_blank">http://www.webdav.org/neon/neon-0.28.2.tar.gz</a><br />
#tar -zxvf neon-0.28.2.tar.gz<br />
将neon-0.28.2 copy到subversion-1.5.0目录,并重命名:neon<br />
#mv neon-0.28.2 ./subversion-1.5.0/neon<br />
<br />
然后就可以开始安装subversion了:<br />
#cd subversion-1.5.0<br />
#./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apache2/bin/apr-1-config --with-apr-util=/usr/local/apache2/bin/apu-1-config --with-ssl<br />
在configure过程中会有提示警告:大概的意思是说你没有安装Berkeley DB,我们可以不理它,因为我们用fs做为存取数据,而不是用Berkeley DB来存取数据.继续...<br />
#make<br />
在make过程中出错了:<br />
/usr/bin/ld: cannot find -lexpat<br />
collect2: ld returned 1 exit status<br />
make: *** [subversion/svn/svn] Error 1<br />
<br />
是找不到xpat库,于是:<br />
#apt-cache search xpat | grep xpat<br />
找到libexpat1-dev - XML parsing C library - development kit<br />
并安装之:<br />
#apt-get install libexpat1-dev<br />
继续编译...<br />
#make<br />
#make install<br />
一切顺利,你的subversion已经成功安装在/usr/local/subversion下了 <script src="http://www.iusesvn.com/batch.ad.php?id=35" type="text/javascript"></script><!--论坛、资讯查看内容下方--><br />
<img src ="http://www.blogjava.net/conans/aggbug/219481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-08-01 23:06 <a href="http://www.blogjava.net/conans/articles/219481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从SVN仓库中删除工程 </title><link>http://www.blogjava.net/conans/articles/209886.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sun, 22 Jun 2008 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209886.html</guid><description><![CDATA[最近在整理自己写的代码时，发现有些代码已经合并到其它的工程中或者已经过时了，需要删除。在网上搜了一下，似乎没有这方面的资料，还是自己动手。发现有svn delete命令，使用svn help delete之后得到如下的帮助信息。如何删除工程算是有谱了。 <br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/eli/svn_2008/svn_delete.JPG" border="0" /><br />
这里的-m参数是删除工程时的日志消息，我理解错了，以为是消息输出文件名。下次要注意一些。<br />
<br />
以下是svn help delete显示的帮助信息。<br />
<img height="534" alt="" src="http://www.blogjava.net/images/blogjava_net/eli/svn_2008/svn_help_delete.JPG" width="669" border="0" />&nbsp;
<img src ="http://www.blogjava.net/conans/aggbug/209886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-22 18:59 <a href="http://www.blogjava.net/conans/articles/209886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gentoo上对svn 1.4.3的尝试</title><link>http://www.blogjava.net/conans/articles/209622.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209622.html</guid><description><![CDATA[<p>Gentoo上对<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=svn">svn</span> 1.4.3的尝试。<br />
<br />
gentoo安装--略过。<br />
&nbsp;&nbsp;<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=apache">apache</span>安装--略过。<br />
&nbsp;&nbsp;php安装--略过。<br />
&nbsp;&nbsp;<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=subversion">subversion</span>安装--略过。<br />
<br />
&nbsp;&nbsp;note<br />
<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%8E%AF%E5%A2%83">环境</span>介绍：<br />
1、gentoo ~ # uname -na<br />
Linux gentoo 2.6.19.2 #2 SMP Tue Jan 30 12:24:29 CST 2007 x86_64 Intel(R) Core(TM)2 CPU&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;T5500&nbsp;&nbsp;@ 1.66GHz GNU/Linux<br />
<br />
2、gentoo ~ # free -m<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;total&nbsp; &nbsp;&nbsp; &nbsp; used&nbsp; &nbsp;&nbsp; &nbsp; free&nbsp; &nbsp;&nbsp;&nbsp;shared&nbsp; &nbsp; buffers&nbsp; &nbsp;&nbsp;&nbsp;cached<br />
Mem:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;985&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;366&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;618&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;25&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;240<br />
-/+ buffers/cache:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;99&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;885<br />
Swap:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;1913&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 0&nbsp; &nbsp;&nbsp; &nbsp; 1913<br />
<br />
3、gentoo ~ # gcc -v<br />
Using built-in specs.<br />
Target: x86_64-pc-<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=linux">linux</span>-gnu<br />
Configured with: /var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=conf">conf</span>igure --prefix=/<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=usr">usr</span> --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/4.1.1 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.1/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.1 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.1/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/4.1.1/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.1/include/g++-v4 --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=check">check</span>ing --disable-w<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=error">error</span> --disable-libunwind-exceptions --enable-multilib --disable-libmudflap --disable-libssp --disable-libgcj --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu<br />
Thread <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=mod">mod</span>el: posix<br />
gcc version 4.1.1 (Gentoo 4.1.1)<br />
<br />
<br />
<br />
&nbsp;&nbsp;apache的参数<br />
&nbsp;&nbsp;./configure --enable-<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=dav">dav</span> --prefix=/usr/local/httpd-2.0.59 --enable-so --with-<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=ssl">ssl</span> --enable-ssl MPM=worker --enable-mod_jk<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;subversion的参数<br />
&nbsp;&nbsp;./configure --prefix=/usr/local/subversion-1.4.3 --with-apxs=/usr/local/apache/bin/apxs<br />
<br />
有几个注意的地方：<br />
1、apache必须加 --enable-dav参数，安装的时候开始没有加--enable-dav参数 后来发现不能启动，只有重新./configure;make;make install<br />
2、svn ./configure时有个报错：<br />
/usr/lib/gcc/x86_64-pc-linux-gnu/4.1.1/../../../../x86_64-pc-linux-gnu/bin/ld: /app/software/subversion-1.4.3/neon/src/.libs/libneon.a(ne_request.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC<br />
/app/software/subversion-1.4.3/neon/src/.libs/libneon.a: could not read symbols: Bad value<br />
collect2: ld returned 1 exit status<br />
make: *** [subversion/libsvn_ra_dav/libsvn_ra_dav-1.la] Error 1<br />
<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%A7%A3%E5%86%B3">解决</span>方法 在neon/src/Makefie 的 CFLAGS中增加 -fPIC选项 一定要加到最前面，例如 CFLAGS = -fPIC -g -O2<br />
修改的地方在我这是21行 </p>
<div class="blockcode"><em onclick="copycode($('code0'));">复制内容到剪贴板</em>
<h5><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E4%BB%A3%E7%A0%81">代码</span>:</h5>
<code id="code0">subversion-1.4.3 # vi neon/src/Makefile<br />
<br />
# Flags<br />
CPPFLAGS = -DHAVE_CONFIG_H&nbsp; &nbsp; -I${top_builddir}<br />
CFLAGS = -g -O2<br />
LDFLAGS =<br />
NEON_LINK_FLAGS = -version-info 25:5:0 -export-symbols-regex '^ne_[^_]'</code></div>
<p>CFLAGS = -g -O2 改为CFLAGS = -fPIC -g -O2即可<br />
改后必须make distclean-&gt;./configure-&gt;make才行<br />
<br />
别的也没什么，感觉64位的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%9C%BA%E5%99%A8">机器</span>比32位的略显麻烦而已。<br />
个人感觉安装时大可不必看那些<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%97%A5%E5%BF%97">日志</span>，刷得太快也看不清楚，直接加上&gt;/dev/null只看报错信息即可。<br />
</p>
<img src ="http://www.blogjava.net/conans/aggbug/209622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:34 <a href="http://www.blogjava.net/conans/articles/209622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Step by Step Installation of the Subversion 1.x Server for Linux and Solaris 8/9/10 (English) </title><link>http://www.blogjava.net/conans/articles/209596.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209596.html</guid><description><![CDATA[<table>
    <tbody>
        <tr>
            <td>Author</td>
            <td>Johannes Fahrenkrug</td>
        </tr>
        <tr>
            <td>Reviewer</td>
            <td>Joerg Kaminski</td>
        </tr>
        <tr>
            <td>Contact</td>
            <td>jfahrenkrug&lt;N0 5PAM&gt;.dot.gmail.dot.com</td>
        </tr>
        <tr>
            <td>Version</td>
            <td>1.7</td>
        </tr>
        <tr>
            <td>Last Update</td>
            <td>10/27/2005</td>
        </tr>
    </tbody>
</table>
<br />
<p>&nbsp;</p>
<br />
<h2>Contents</h2>
<br />
<table>
    <tbody>
        <tr>
            <td>I </td>
            <td><a href="http://iedb.org/blog/?page_id=8#intro"><font color="#666666">Introduction/Notes</font></a></td>
        </tr>
        <tr>
            <td>II </td>
            <td><a href="http://iedb.org/blog/?page_id=8#installation"><font color="#666666">Step by Step Installation</font></a></td>
        </tr>
        <tr>
            <td>III</td>
            <td><a href="http://iedb.org/blog/?page_id=8#anhaenge"><font color="#666666">Appendices</font></a></td>
        </tr>
        <tr>
            <td>IV </td>
            <td><a href="http://iedb.org/blog/?page_id=8#danksagungen"><font color="#666666">Acknowledgments</font></a></td>
        </tr>
        <tr>
            <td><font color="#666666"></font></td>
            <td><font color="#666666"></font></td>
        </tr>
    </tbody>
</table>
<br />
<p><a name="intro"><font color="#666666"></font></a><br />
<br />
</p>
<h2>I Introduction/Notes</h2>
<br />
<p>So you decided (or you have been told) to install Subversion. Then all you have to do now is lean back and enjoy the ride, because we did all the work for you already. This document will save you a hack of a lot of time (and it might even make you the employee of the month).</p>
<br />
<p>We didn&#8217;t feel like typing two different download URLs for all the Solaris 8 and 9 packages. Hence we only used the Solaris 8 paths. In most cases you only have to replace the 8 with a 9 in the FTP paths and package names.</p>
<br />
<p>Please note that this guide is about compiling and installing Subversion and all the programs that it depends on from source. In case your hand moves in the direction of your head and makes a scratching motion when you hear the word &#8220;compile&#8221;, this guide might not be for you. You can get pre-compiled packages for just about any OS by now. That is definitely the easier way to go.</p>
<br />
<p>The section about configuring and setting up the Subversion server might be interesting for you even if you don&#8217;t compile everything from source, though.</p>
<br />
<p>In case this document actually helps you, we&#8217;d be very grateful if you would nag your employer about some t-shirts, mugs and other free stuff for us. (Whoever is reading this and actually is considering sending us something: You&#8217;re the first one, man! More power to you!)</p>
<br />
<p>Anyway, have fun (and success) installing Subversion!</p>
<br />
<p>PS: I guess I have to say this: I am not responsible for any damage that might be caused by following this guide!</p>
<br />
<p><br />
<a name="installation"></a><br />
<br />
</p>
<h2>II Step by Step Installation</h2>
<br />
<p>1. Create a directory for all the source files that you&#8217;ll have to download and compile in the next steps. I&#8217;ll call this directory /basedir</p>
<br />
<p>2. Go to <a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260"><font color="#334477">http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260</font></a> and download the newest Subversion source tarball (save it in /basedir).</p>
<br />
<p>3. Open a shell and become the superuser:<br />
<br />
<code>su -</code></p>
<br />
<p>4. Go to the basedir and unpack the Subversion source files:<br />
<br />
<code>gunzip subversion-1.2.3.tar.gz</code><br />
<br />
<code>tar -xvf subversion-1.2.3.tar</code></p>
<br />
<p>5. Change into the subversion-1.2.3 subdirectory and run the autogen.sh script:<br />
<br />
<code>cd subversion-1.2.3</code><br />
<br />
<code>./autogen.sh</code></p>
<br />
<p>6. The script checks if all of Subversion&#8217;s dependencies are installed. When the script coughs up this error message:<br />
<br />
<quote></quote>&#8220;Can&#8217;t locate object method &#8220;path&#8221; via package &#8220;Request&#8221; at<br />
<br />
<quote></quote>/usr/local/share/autoconf/Autom4te/C4che.pm line 69, &lt;GEN1&gt; chunk 111.&#8221;<br />
<br />
the directory &#8220;autom4te.cache&#8221; in the subdirectory &#8220;expat&#8221; of Subversion has to be deleted:<br />
<br />
<code>rm -r /basedir/subversion-1.1.1/apr-util/xml/expat/autom4te.cache</code></p>
<br />
<p>When the script says that one of the following things is not installed or not recent enough, then please follow the next steps and run autogen.sh again to check if everything&#8217;s OK now. Of course you can also download and install the newest versions of these tools and libraries, even if the installed versions are sufficient.</p>
<br />
<p>In case the script says that everything&#8217;s fine (autoheader warnings can be ignored) continue with step 7. If the script complains:<br />
<br />
a. autoconf/autoheader: Continue with <a href="http://iedb.org/blog/?page_id=8#anhangA"><font color="#666666">Appendix A</font></a>.<br />
<br />
b. libtool: Continue with <a href="http://iedb.org/blog/?page_id=8#anhangB"><font color="#666666">Appendix B</font></a>.<br />
<br />
c. m4: Continue with <a href="http://iedb.org/blog/?page_id=8#anhangC"><font color="#666666">Appendix C</font></a>.<br />
<br />
d. Python: For Linux continue with <a href="http://iedb.org/blog/?page_id=8#anhangD"><font color="#666666">Appendix D</font></a>. For Solaris continue with <a href="http://iedb.org/blog/?page_id=8#anhangE"><font color="#666666">Appendix E</font></a>.<br />
<br />
e. Libxml2: Continue with <a href="http://iedb.org/blog/?page_id=8#anhangF"><font color="#666666">Appendix F</font></a>.<br />
<br />
f. neon lib: Doesn&#8217;t have to be downloaded because it comes with the Subversion source files.<br />
</p>
<br />
<p>7. Go to <a href="http://www.sleepycat.com/download/index.shtml"><font color="#334477">http://www.sleepycat.com/download/index.shtml</font></a><br />
<br />
and download the newest source tarball of Berkeley DB (either with or without strong cryptography, it doesn&#8217;t matter). Save it in /basedir.</p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">Note:</th>
            <td style="border-left-color: lime; border-bottom-color: lime; border-top-style: solid; border-top-color: lime; border-right-style: solid; border-left-style: solid; border-right-color: lime; border-bottom-style: solid">Starting at version 1.1.0 Subversion doesn&#8217;t depend on Berkeley DB anymore because it comes with its own database backend called FSFS. I don&#8217;t have any experience with FSFS yet. Hence I describe the installation using Berkeley DB. As soon as I install Subversion again, I will use FSFS and add the description here.<br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<table>
    <tbody>
        <tr>
            <td><br />
            <p>8. Don&#8217;t forget to download available patches (I don&#8217;t think there are any for the current version).</p>
            <br />
            <p>9. Extract the Berkeley DB source files in the basedir:<br />
            <br />
            <code>gunzip db-4.3.29.tar.gz</code><br />
            <br />
            <code>tar -xvf db-4.3.29.tar</code></p>
            <br />
            <p>10. Copy patches - if there are any - that you have downloaded into the db-4.3.29 directory:<br />
            <br />
            (This is just an example, there are not patches for version 4.3.29 of BerkeleyDB, as far as I know):<br />
            <br />
            <code>cp patch.4.3.29.1 db-4.3.29</code><br />
            <br />
            <code>cp patch.4.3.29.2 db-4.3.29</code></p>
            <br />
            <p>11. Change into the db-4.3.29 directory.</p>
            <br />
            <p>12. Patch the source files (if patches are available):<br />
            <br />
            <code>patch -p0 &lt; patch.4.3.29.1</code><br />
            <br />
            <code>patch -p0 &lt; patch.4.3.29.2</code></p>
            <br />
            <p>13. Change into the build_unix directory</p>
            <br />
            <p>14. Run the configure script:<br />
            <br />
            <code>../dist/configure</code><br />
            <br />
            Under Solaris you may have to run the script like this:<br />
            <br />
            <code>env CC=gcc ../dist/configure</code></p>
            <br />
            <p>15. Run make:<br />
            <br />
            <code>make</code></p>
            <br />
            <p>16. Pass the time with an activity of your choice (flossing, maybe).</p>
            <br />
            <p>17. Run make install:<br />
            <br />
            <code>make install</code></p>
            <br />
            <p>18. Clean up&#8230;:<br />
            <br />
            <code>make clean</code></p>
            <br />
            <p>19. Make the Berkeley DB libraries known:</p>
            <br />
            <table>
                <tbody>
                    <tr>
                        <th valign="top">a. Under Linux:</th>
                        <td><br />
                        <p>1. Change into the /etc directory</p>
                        <br />
                        <p>2. Add the following line to your ld.co.conf file:<br />
                        <br />
                        <code>/usr/local/BerkeleyDB.4.3/lib</code></p>
                        <br />
                        <p>3. Run ldconfig:<br />
                        <br />
                        <code>ldconfig</code></p>
                        <br />
                        </td>
                    </tr>
                    <tr>
                        <th valign="top">b. Under Solaris:</th>
                        <td><br />
                        <p>1. Set the LD_RUN_PATH:<br />
                        <br />
                        <code>LD_RUN_PATH=/usr/local/BerkeleyDB.4.3/lib</code></p>
                        <br />
                        <p>2. Export the LD_RUN_PATH:<br />
                        <br />
                        <code>export LD_RUN_PATH</code></p>
                        <br />
                        <p>3. Set the LD_LIBRARY_PATH:<br />
                        <br />
                        <code>LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/BerkeleyDB.4.3/lib</code></p>
                        <br />
                        <p>4. Export the LD_LIBRARY_PATH:<br />
                        <br />
                        <code>export LD_LIBRARY_PATH</code></p>
                        <br />
                        </td>
                    </tr>
                </tbody>
            </table>
            <br />
            <p>As an alternative to point b you can also add a symbolic link to a directory that already is in the LD_LIBRARY_PATH, for example:<br />
            <br />
            <code>cd /usr/local/lib</code><br />
            <br />
            <code>ln -s /usr/local/BerkeleyDB.4.3/lib/libdb-4.3.so libdb-4.3.so</code></p>
            <br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>20. Go to <a href="http://httpd.apache.org/download.cgi"><font color="#666666">http://httpd.apache.org/download.cgi</font></a><br />
<br />
and download the newest source tarball of the Apache2 httpd server. Save it in /basedir. Sometimes<br />
<br />
the download fails if you use http. In that case, do this:<br />
<br />
<code>ftp ftp.uni-erlangen.de<br />
<br />
cd /pub/mirrors/apache/httpd/<br />
<br />
ls</code><br />
<br />
Then find the newest tarball and download it, i.e.:<br />
<br />
<code>binary<br />
<br />
mget httpd-2.0.55.tar.gz<br />
<br />
y<br />
<br />
bye</code></p>
<br />
<p>21. Extract the Apache source files in basedir:<br />
<br />
<code>gunzip httpd-2.0.55.tar.gz<br />
<br />
tar -xvf httpd-2.0.55.tar</code></p>
<br />
<p>22. Change into the httpd-2.0.55 directory</p>
<br />
<p>23. Run buildconf:<br />
<br />
<code>./buildconf</code><br />
<br />
autoheader warnings can be ignored.</p>
<br />
<p>24. Run configure:<br />
<br />
<code>./configure --enable-dav=shared --with-gdbm=no --enable-deflate=shared --enable-so --with-berkeley-db=/usr/local/BerkeleyDB.4.3 --with-dbm=db4</code></p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">Hint:</th>
            <td style="border-left-color: lime; border-bottom-color: lime; border-top-style: solid; border-top-color: lime; border-right-style: solid; border-left-style: solid; border-right-color: lime; border-bottom-style: solid">In certain cases it might be necessary to use <code>--enable-dav</code> and<br />
            <br />
            <code>--enable-deflate</code> without <code>"=shared"</code>. Or it can help to use <code>--enable-mod_deflate=shared</code> instead of <code>--enable-deflate=shared</code>.</td>
        </tr>
        <tr>
        </tr>
    </tbody>
</table>
<br />
<table>
    <tbody>
        <tr>
            <td><br />
            <p>25. When configure finished without errors, run make:<br />
            <br />
            <code>make</code></p>
            <br />
            <p>26. Make coffee&#8230;</p>
            <br />
            <p>27. Run make install:<br />
            <br />
            <code>make install</code></p>
            <br />
            <p>28. Clean up&#8230;:<br />
            <br />
            <code>make clean</code></p>
            <br />
            <p>29. Change into the /basedir/subversion-1.2.3 directory</p>
            <br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>30. Run configure:<br />
<br />
<code>./configure --with-berkeley-db=/usr/local/BerkeleyDB.4.3 --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2</code><br />
<br />
In case BerkeleyDB.4.3 has been installed in it&#8217;s default directory, the configure script of Subversion version 1.0.2 and higher finds the BerkeleyDB libraries automatically. In that case, you can run configure without <code>"--with-berkeley-db"</code>.<br />
<br />
Watch out for any messages that say that only a Subversion client can be built. In that case, something went wrong.</p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">Hint:</th>
            <td style="border-left-color: lime; border-bottom-color: lime; border-top-style: solid; border-top-color: lime; border-right-style: solid; border-left-style: solid; border-right-color: lime; border-bottom-style: solid">If you encounter any problems under Solaris 8/9/10 (which might only occur as late as at the &#8220;make install&#8221; step),<br />
            <br />
            it can be helpful to use config.nice instead of the configure script. Sometimes it also helps to reinstall Apache2.</td>
        </tr>
    </tbody>
</table>
<br />
<p>31. Run make:</p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">ATTENTION:</th>
            <td style="border-left-color: red; border-bottom-color: red; border-top-style: solid; border-top-color: red; border-right-style: solid; border-left-style: solid; border-right-color: red; border-bottom-style: solid">In case an earlier version of Subversion is already installed, you have to delete those Subversion and Neon libraries before you run make. This is what you have to do:<br />
            <br />
            <code>rm -f /usr/local/lib/libsvn*<br />
            <br />
            rm -f /usr/local/lib/libneon*</code></td>
        </tr>
    </tbody>
</table>
<br />
<p>Now you can run make:<br />
<br />
<code>make</code><br />
</p>
<br />
<p>32. Maybe the coffee you made in step 26 causes a certain pressure inside of you&#8230;.<br />
<br />
Now would be the perfect opportunity to get some relief!</p>
<br />
<p>33. Run make install:<br />
<br />
<code>make install</code></p>
<br />
<p>34. Clean up:<br />
<br />
<code>make clean</code></p>
<br />
<p>35. Change into the directory /basedir/subversion-1.2.3/tools/xslt</p>
<br />
<p>36. Copy the contents of the directory into the Apache2 htdocs directory:<br />
<br />
<code>cp * /usr/local/apache2/htdocs</code></p>
<br />
<p>37. Create the group &#8220;svn&#8221;:</p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">a. Under Linux:</th>
            <td><code>groupadd -r svn</code></td>
        </tr>
        <tr>
            <th valign="top">b. Under Solaris:</th>
            <td><code>groupadd svn</code></td>
        </tr>
    </tbody>
</table>
<br />
<p>38. Create the user &#8220;svn&#8221;:</p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">a. Under Linux:</th>
            <td><code>useradd -r -g svn svn</code></td>
        </tr>
        <tr>
            <th valign="top">b. Under Solaris:</th>
            <td><code>useradd -g svn svn</code></td>
        </tr>
    </tbody>
</table>
<br />
<p>39. Set the password for the user &#8220;svn&#8221;:<br />
<br />
<code>passwd svn</code></p>
<br />
<p>40. Create the repository (you can change the path below to anything you like, but I will keep using it as an example path in this document). Execute this as root:<br />
<br />
<code>cd /usr/local<br />
<br />
mkdir svnrepos<br />
<br />
chown svn:svn svnrepos</code><br />
<br />
<strong style="border-left-color: red; border-bottom-color: red; border-top-style: solid; border-top-color: red; border-right-style: solid; border-left-style: solid; border-right-color: red; border-bottom-style: solid">ATTENTION: THE REPOSITORY MAY NOT RESIDE ON AN NFS DRIVE!</strong><br />
</p>
<br />
<p>41. Create the repository as the user &#8220;svn&#8221;:<br />
<br />
<code>su svn<br />
<br />
svnadmin create /usr/local/svnrepos</code><br />
<br />
(If you get an error at this point saying thay some libs could not be found, set the LD_LIBRARY_PATH as described in section 19b and try again)<br />
<br />
<code>exit</code></p>
<br />
<p>42. Set up Apache. Change into the Apache2 conf directory:<br />
<br />
<code>cd /usr/local/apache2/conf</code></p>
<br />
<p>43. Fire up your favorite editor and open the httpd.conf file.</p>
<br />
<p>44. Make sure the file contains the following lines:<br />
<br />
<code>LoadModule dav_svn_module modules/mod_dav_svn.so<br />
<br />
LoadModule authz_svn_module modules/mod_authz_svn.so</code><br />
<br />
There lines have to appear before any other statements that have to do with Subversion!</p>
<br />
<p>45. Find the line that starts with &#8220;Listen&#8221; and set its value to the port that Apache should listen on, i.e.:<br />
<br />
<code>Listen 7770</code></p>
<br />
<p>46. Finde the line that starts with &#8220;#ServerName&#8221; an set it to the name of your server:<br />
<br />
<code>ServerName subversion.yourdomain.com</code></p>
<br />
<p>47. Find the area that contains the <code>&lt;Location&gt;</code> directives and add the following text to it (&#8221;/rep&#8221; being a virtual path of your choice under which the repository will be served and &#8220;/usr/local/svnrepos&#8221; being the absolute path of the repository):<br />
<br />
<code>&lt;Location /rep&gt;<br />
<br />
&nbsp;&nbsp;DAV svn<br />
<br />
&nbsp;&nbsp;SVNPath /usr/local/svnrepos<br />
<br />
&nbsp;&nbsp;SVNIndexXSLT &#8220;/svnindex.xsl&#8221; # (optional, to make it pretty)<br />
<br />
&nbsp;&nbsp;AuthType Basic<br />
<br />
&nbsp;&nbsp;AuthName &#8220;Subversion repository&#8221;<br />
<br />
&nbsp;&nbsp;AuthUserFile /etc/.svn-auth-file<br />
<br />
&nbsp;&nbsp;Require valid-user<br />
<br />
&lt;/Location&gt;</code><br />
<br />
Your repository can be found at http://subversion.yourdomain.com:7770/rep later.</p>
<br />
<table>
    <tbody>
        <tr>
            <td><br />
            <p>If you plan to host more than one repository under one directory, you can use <code>SVNParentPath</code> instead of <code>SVNPath</code>. SVNParentPath is a normal directory, <strong><em>under</em></strong> which you can create as many repositories as your heart desires. That means that you would have to create repositories as described in section 41 INSIDE the SVNParentPath directory. That has the advantage that you don&#8217;t have to add another &lt;Location&gt; directive to the httpd.conf file for each new repository. Hence, you also wouldn&#8217;t have to restart Apache to make the new repository accessible. You could - for example - reach different repositories at http://subversion.yourdomain.com:7770/rep/repos1 and at http://subversion.yourdomain.com:7770/rep/repos under the SVNParentPath directory. If you use SVNParentPath and try to open http://subversion.yourdomain.com:7770/rep you&#8217;ll get an error message. That means that you always have to specify a repository.</p>
            <br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">ATTENTION:</th>
            <td style="border-left-color: red; border-bottom-color: red; border-top-style: solid; border-top-color: red; border-right-style: solid; border-left-style: solid; border-right-color: red; border-bottom-style: solid">You have to make sure that the virtual path (in this case /rep) doesn&#8217;t interfere with other virtual paths of Apache. If - for example - your DocumentRoot is /www and you set /www/rep as the virtual Subversion path in the Location tag, you&#8217;ll have a problem: Apache wouldn&#8217;t be able to tell which directive to execute when /www/rep in requested: the directive of DocumentRoot or the one of Subversion?</td>
        </tr>
    </tbody>
</table>
<br />
<p>The Auth directives are important for access control. You can choose the path and filename for the AuthUserFile directive. You have to remember that path and the filename though because we have to create that file later, for the usernames and passwords.</p>
<br />
<p>48. Save and close the httpd.conf file.</p>
<br />
<p>49. Create the access control file for the users that should be allowed to use Subversion:<br />
<br />
<code>htpasswd -cm /etc/.svn-auth-file johannes</code><br />
<br />
Repeat this with the option <code>-m</code> instead of <code>-cm</code> until all the users are created (replace &#8220;johannes&#8221; with the appropriate usernames, of course)</p>
<br />
<table>
    <tbody>
        <tr>
            <th valign="top">ATTENTION:</th>
            <td style="border-left-color: red; border-bottom-color: red; border-top-style: solid; border-top-color: red; border-right-style: solid; border-left-style: solid; border-right-color: red; border-bottom-style: solid">It is important to use <code>-m</code> instead of <code>-cm</code> for all following users. Otherwise you&#8217;d overwrite the file each time.</td>
        </tr>
    </tbody>
</table>
<br />
<p>50. Change into the /usr/local/ directory</p>
<br />
<p>51. Make the user &#8220;svn&#8221; the owner of all Apache files and directories:<br />
<br />
<code>chown -R svn:svn apache2</code></p>
<br />
<p>52. Become the user svn:<br />
<br />
<code>su svn</code></p>
<br />
<p>53. Change into the /usr/local/apache2/bin directory</p>
<br />
<p>54. Fire up the Apache2 server:<br />
<br />
<code>./apachectl start</code></p>
<br />
<p>55. Open a web browser and go to<br />
<br />
<code>http://subversion.yourdomain.com:7770/rep</code><br />
<br />
The page should display something like this:<br />
<br />
<code>Revision 0<br />
<br />
/</code></p>
<br />
<p>Powered by Subversion 1.2.3</p>
<br />
<p>56. The Subversion server is now set up and ready to be used (congratulations)!</p>
<br />
<p>57. If you encountered any problems or if you know how to do it better, drop me a line at moremagic&lt;N0 5PAM&gt;.dot.gmail.dot.com Thanks.</p>
<br />
<br />
<p><a name="anhaenge"></a><br />
<br />
</p>
<h2>III Appendices</h2>
<br />
<p><a name="anhangA"></a><br />
<br />
</p>
<h3>APPENDIX A: autoconf Installation</h3>
<br />
<p>A1. Go to <a href="http://ftp.gnu.org/gnu/autoconf/"><font color="#334477">http://ftp.gnu.org/gnu/autoconf/</font></a> and download the newest source tarball of GNU autoconf (save it in /basedir).</p>
<br />
<p>A2. Extract the autoconf source files in the basedir:<br />
<br />
<code>gunzip autoconf-2.59.tar.gz<br />
<br />
tar -xvf autoconf-2.59.tar</code></p>
<br />
<p>A3. Change into the autoconf-2.59 directory</p>
<br />
<p>A4. Run the configure script:<br />
<br />
<code>./configure</code></p>
<br />
<p>A5. Run make:<br />
<br />
<code>make</code></p>
<br />
<p>A6. Run make install:<br />
<br />
<code>make install</code></p>
<br />
<p>A7. Clean up&#8230;:<br />
<br />
<code>make clean</code></p>
<br />
<p>A8. Done.</p>
<br />
<p><a name="anhangB"></a><br />
<br />
</p>
<h3>APPENDIX B libtool Installation</h3>
<br />
<p>B1. Go to <a href="http://ftp.gnu.org/gnu/libtool/"><font color="#334477">http://ftp.gnu.org/gnu/libtool/</font></a> and download the newest source tarball of GNU libtool (save it in /basedir).</p>
<br />
<p>B2. Extract the libtool source files in the basedir:<br />
<br />
<code>gunzip libtool-1.5.8.tar.gz<br />
<br />
tar -xvf libtool-1.5.8.tar</code></p>
<br />
<p>B3. Change into the libtool-1.5.8 directory</p>
<br />
<p>B4. Run the configure script:<br />
<br />
<code>./configure</code></p>
<br />
<p>B5. Run make:<br />
<br />
<code>make</code></p>
<br />
<p>B6. Run make install:<br />
<br />
<code>make install</code></p>
<br />
<p>B7. Clean up&#8230;:<br />
<br />
<code>make clean</code></p>
<br />
<p>B8. Done.</p>
<br />
<p><a name="anhangC"></a><br />
<br />
</p>
<h3>APPENDIX C m4 Installation</h3>
<br />
<p>C1. Go to <a href="http://ftp.gnu.org/gnu/m4/"><font color="#334477">http://ftp.gnu.org/gnu/m4/</font></a>and download the newest source tarball of GNU m4 (save it in /basedir)&#8230;</p>
<br />
<p>C2. Extract the m4 source files in the basedir:<br />
<br />
<code>gunzip m4-1.4.4.tar.gz<br />
<br />
tar -xvf m4-1.4.4.tar</code></p>
<br />
<p>C3. Change into the m4-1.4.4 directory</p>
<br />
<p>C4. Run the configure script:<br />
<br />
<code>./configure</code></p>
<br />
<p>C5. Run make:<br />
<br />
<code>make</code></p>
<br />
<p>C6. Run make install:<br />
<br />
<code>make install</code></p>
<br />
<p>C7. Clean up&#8230;:<br />
<br />
<code>make clean</code></p>
<br />
<p>C8. Done.</p>
<br />
<p><a name="anhangD"></a><br />
<br />
</p>
<h3>APPENDIX D Python Installation under Linux</h3>
<br />
<p>D1. Gehe zu <a href="http://python.org/ftp/python/2.4.2/"><font color="#334477">http://python.org/ftp/python/2.4.2/</font></a> and download the newest source tarball of Python (save it in /basedir)</p>
<br />
<p>D2. Extract the Python source files in the basedir:<br />
<br />
<code>bzip2 -d Python-2.4.2.tar.bz2<br />
<br />
tar -xvf Python-2.4.2.tar</code></p>
<br />
<p>D3. Change into the Python-2.4.2 directory</p>
<br />
<p>D4. Run the configure script:<br />
<br />
<code>./configure</code></p>
<br />
<p>D5. Run make:<br />
<br />
<code>make</code></p>
<br />
<p>D6. Run make install:<br />
<br />
<code>make install</code></p>
<br />
<p>D7. Clean up&#8230;:<br />
<br />
<code>make clean</code></p>
<br />
<p>D8. Done.</p>
<br />
<p><a name="anhangE"></a><br />
<br />
</p>
<h3>APPENDIX E Python Installation under Solaris</h3>
<br />
<p>E1. Download this file: <a href="ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/ftp.sunfreeware.com/sparc/8/python-2.4.2-sol8-sparc-local.gz"><font color="#334477">ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/ftp.sunfreeware.com/sparc/8/python-2.4.2-sol8-sparc-local.gz</font></a> (save it in /basedir)</p>
<br />
<p>E2. Extract the Python binaries for Solaris:<br />
<br />
<code>gunzip python-2.4.2-sol8-sparc-local.gz</code></p>
<br />
<p>E3. Install the package:<br />
<br />
<code>pkgadd -d python-2.4.2-sol8-sparc-local</code><br />
<br />
Confirm the question with &lt;ENTER&gt; (When an M appears, press &lt;CTRL&gt;+&lt;ENTER&gt;)</p>
<br />
<p>E4. Test Python:<br />
<br />
<code>python</code><br />
<br />
If you get an error message at this point that libstdc++.so.5 can&#8217;t be found, continue with <a href="http://iedb.org/blog/?page_id=8#anhangG"><font color="#666666">APPENDIX G</font></a></p>
<br />
<p>E5. Done.</p>
<br />
<p><a name="anhangF"></a><br />
<br />
</p>
<h3>APPENDIX F Libxml2 Installation</h3>
<br />
<p>F1. Go to <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/"><font color="#334477">ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/</font></a> and download the newest source tarball of libxml2 (save it in /basedir)</p>
<br />
<p>F2. Extract the libxml2 source files in the basedir:<br />
<br />
<code>gunzip libxml2-2.6.22.tar.gz<br />
<br />
tar -xvf libxml2-2.6.22.tar</code></p>
<br />
<p>F3. Change into the libxml2-2.6.22 directory</p>
<br />
<p>F4. Run the configure script:<br />
<br />
<code>./configure</code></p>
<br />
<p>F5. Run make:<br />
<br />
<code>make</code></p>
<br />
<p>F6. Run make install:<br />
<br />
<code>make install</code></p>
<br />
<p>F7. Clean up&#8230;:<br />
<br />
<code>make clean</code></p>
<br />
<p>F8. Done.</p>
<br />
<p><a name="anhaengG"></a><br />
<br />
</p>
<h3>APPENDIX G libgcc Installation (Solaris)</h3>
<br />
<p>G1. Download this file: <a href="ftp://sunfreeware.nl.uu.net/pub/freeware/sparc/8/libgcc-3.4.1-sol8-sparc-local.gz"><font color="#334477">ftp://sunfreeware.nl.uu.net/pub/freeware/sparc/8/libgcc-3.4.1-sol8-sparc-local.gz</font></a> (save it in /basedir)</p>
<br />
<p>G2. Extract the package in the basedir:<br />
<br />
<code>gunzip libgcc-3.4.1-sol8-sparc-local.gz</code></p>
<br />
<p>G3. Install the package:<br />
<br />
<code>pkgadd -d libgcc-3.4.1-sol8-sparc-local</code><br />
<br />
Confirm the question with &lt;ENTER&gt; (When an M appears, press &lt;CTRL&gt;+&lt;ENTER&gt;)</p>
<br />
<p>G4. Done.</p>
<br />
<p><a name="danksagungen"></a><br />
<br />
</p>
<h2>IV Acknowledgments</h2>
<br />
<p>Thanks to Vasudeva Martin for the helpful additions to step 47.</p>
<br />
<p>Thanks to Ingo Brenckmann for the BerkeleyDB note at step 7.</p>
<br />
<p>Thanks to Dominik Fijalkowski for the configure note at step 24.</p>
<br />
<p>Thanks to Sebastian for the mod_deflate note at step 24.</p>
<br />
<p>Thanks to Joschka Reuss for the correction of the tar command at step 9.</p>
<img src ="http://www.blogjava.net/conans/aggbug/209596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:08 <a href="http://www.blogjava.net/conans/articles/209596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 下安装subversion 详细指南</title><link>http://www.blogjava.net/conans/articles/209598.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209598.html</guid><description><![CDATA[<div>1 下载相关的软件</div>
<div>Apache-2.x<span>&nbsp;&nbsp; <a href="http://httpd.apache.org/">http://httpd.apache.org</a></span>&nbsp; 下载源代码包</div>
<div>Subersion<span>&nbsp;&nbsp;&nbsp; <a href="http://subversion.tigris.org/">http://subversion.tigris.org/</a></span>&nbsp; 下载源代码包</div>
<div>本文中apache的版本为 Apache/2.2.4 (Unix)</div>
<div>Subversion 版本：svnserve 1.4.3 (r23084)</div>
<div style="margin: 13pt 0cm"></div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">2 安装相关软件</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">2.1 安装apache&nbsp;</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">1）./configure &#8211;prefix=/usr/local/apache(安装目录）&#8211;enable-so &#8211;enable-proxy &#8211;enable-ssl &#8211;enable-vhost-alias &#8211;enable-mods-shared=most&nbsp;&#8211;enable-dav&nbsp;&#8211;enable-maintainer-mode</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">说明：其中—enable-dav 和—enable-maintainer-mode是为了能在apache下集成subversion才加进去的编译参数。</div>
<div><span style="color: red">&#8211;with-mpm=worker</span><span style="color: red">（这个参数，要详细阅读</span><span style="color: red">apache</span><span style="color: red">的</span><span style="color: red">相关文档来做决定用哪种</span><span style="color: red">mpm</span><span style="color: red">，待定）</span></div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">2）make （编译）</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">3）make install （安装）</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">4）make clean（清理源代码目录）</div>
<div>3 创建仓库</div>
<div style="margin: 13pt 0cm"></div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">2.2 安装subversion&nbsp;</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">1）配置</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">./configure &#8211;prefix=/home/svn &#8211;enable-maintainer-mode&nbsp;&#8211;with-apr=/usr/local/apache2/bin/apr-1-config &#8211;with-apxs=/usr/local/apache2/bin/apxs &#8211;with-apr-util=/usr/local/apache2/bin/apu-1-config </div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">其中：/usr/local/apache2为apache的安装目录，而不是源代码目录。</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">2）make</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">3）make install</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">4）make clean</div>
<div style="margin: 13pt 0cm"></div>
<div></div>
<div></div>
<div>仓库的规划一般是有一个仓库，其中存放一个或者多个项目根目录，在每个项目根目录下面有<tt>/trunk</tt>, <tt>/branches</tt>, and <tt>/tags</tt><tt>三个子目录，或者另外的规划。</tt></div>
<div><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt><span style="font-size: 11pt">/</span></div>
<div></div>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp; utils/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calc/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trunk/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tags/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; branches/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calendar/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trunk/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tags/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; branches/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp; office/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spreadsheet/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trunk/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tags/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; branches/</pre>
<pre style="margin: 0cm 36pt 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;</pre>
<pre style="margin: 0cm 36pt 0pt">无论哪种规划，但是都必须遵循的一个原则就是必须符合你的项目的设计。</pre>
<div></div>
<div style="margin: 13pt 0cm"></div>
<div>3.2 创建仓库&nbsp;</div>
<div>根据上面一节的规划来创建你的仓库。</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt">1）&nbsp;创建仓库</div>
<div style="margin: 0cm 0cm 0pt 18pt">$ svnadmin create /path/to/repos</div>
<div style="margin: 0cm 0cm 0pt 18pt">观察repos目录结构</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt">2）&nbsp;根据仓库规划，创建临时目录：</div>
<div style="margin: 0cm 0cm 0pt 17.95pt; text-indent: 5.25pt">$mkdir tmpdir</div>
<div style="margin: 0cm 0cm 0pt 17.95pt; text-indent: 5.25pt">$cd tmpdir</div>
<div style="margin: 0cm 0cm 0pt 21pt">$mkdir boss (boss在这里是project name)</div>
<div style="margin: 0cm 0cm 0pt 21pt">$mkdir boss/trunk</div>
<div style="margin: 0cm 0cm 0pt 21pt">$mkdir boss/tags</div>
<div style="margin: 0cm 0cm 0pt 21pt">$mkdir boss/branches</div>
<div>3) 添加上面创建的目录结构到1)中创建的仓库中去</div>
<pre style="text-indent: 12pt; margin-right: 36pt"><font size="3">&nbsp;<span>$</span></font><span style="font-size: 11pt">svn import . file:///path/to/repos &#8211;message &#8216;Initial repository layout&#8217;</span></pre>
<pre style="text-indent: 12pt; margin-right: 36pt"><span style="font-size: 11pt">.:代表当前目录</span></pre>
<pre style="text-indent: 12pt; margin-right: 36pt"><span style="font-size: 11pt">file段：代表1）中创建的仓库</span></pre>
<div></div>
<div>4 subversion服务器配置&nbsp;</div>
<div>Subversion 的服务器运行方式分为两种：http方式和tcp（以svnserve）方式。</div>
<div>4.1 http方式配置&nbsp;</div>
<div>结合apache的dav模块来是实现。</div>
<div>在apache的安装目录下面找到配置文件httpd.conf,修改配置文件。</div>
<div>&lt;Location /svn&gt;</div>
<div>DAV svn</div>
<div>SVNPath /home/svn/repos&nbsp;</div>
<div>&lt;/Location&gt;</div>
<div style="margin: 13pt 0cm"></div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">4.2 svn方式配置&nbsp;</div>
<div style="margin: 0cm 0cm 0pt 5.25pt; text-indent: -5.25pt">Subversion以svnserve方式运行</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt">1）&nbsp;standalone mode</div>
<div>直接运行：#svnserve &#8211;d运行 lsof -i :3690可以看到SVN服务器已经在运行</div>
<div>2) xinetd mode在/etc/xinetd.d/下生成svnserve文件，内容如下<br />
service svnserve<br />
{<br />
disable = no<br />
socket_type = stream<br />
protocol = tcp<br />
wait = no<br />
user = root<br />
server = /home/svn/bin/svnserve<br />
server_args = -i<br />
}<br />
编辑 /etc/services 檔,加入底下两行:<br />
svnserve 3690/tcp # Subversion svnserve<br />
svnserve 3690/udp # Subversion svnserve<br />
重启xinetd服务/usr/sbin/xinetd &#8211;restart&nbsp;<br />
运行 lsof -i :3690可以看到SVN服务器已经在运行</div>
<div style="margin: 13pt 0cm"></div>
<div>5 服务器配置</div>
<div>5.1 服务器配置&nbsp;</div>
<div>Subversion的配置文件存放在$SVN_HOME/your repository/conf目录下面，配置文件名：svnserve.conf。</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt">1）&nbsp;基本权限管理</div>
<div style="margin: 0cm 0cm 0pt 18pt">svnserve.conf的配置风格跟mysql的配置文件的风格相似。基于linux下的配置文件风格如下：</div>
<div style="margin: 0cm 0cm 0pt 18pt">[xxx] section：配置段</div>
<div style="margin: 0cm 0cm 0pt 18pt">配置段下面的配置区域，一般是：变量 = 值 </div>
<div style="margin: 0cm 0cm 0pt 18pt">在svnserve.conf中[general]段，访问权限分为三种：read，write,none</div>
<div style="text-indent: 15.75pt">anon-access = none&nbsp;（对匿名用户）</div>
<div style="text-indent: 15.75pt">auth-access = write<span>&nbsp;&nbsp; </span>（授权用户）</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt">2）&nbsp;基于svn自己权限管理</div>
<div style="margin: 0cm 0cm 0pt 18pt">Svn本身通过password-db = userfile和realm = my first实现了权限管理。</div>
<div style="margin: 0cm 0cm 0pt 18pt">Password-db是权限文件放置位置。</div>
<div style="margin: 0cm 0cm 0pt 18pt">Realm是加密的key</div>
<div style="margin: 0cm 0cm 0pt 18pt">权限文件的格式类似如下：</div>
<div style="margin: 0cm 0cm 0pt 18pt">[users]</div>
<div style="margin: 0cm 0cm 0pt 18pt">A=123456 (其中a为用户名，123456为密码)</div>
<div>3）基于svn+ssh权限管理（略）</div>
<div>附录：&nbsp;</div>
<div>命令列表<br />
具体用法可参考 Subversion 命令参考手册<br />
Subversion 命令列客户端: svn<br />
svn add<br />
svn cat<br />
svn checkout<br />
svn cleanup<br />
svn commit<br />
svn copy<br />
svn delete<br />
svn diff<br />
svn export<br />
svn help<br />
svn import<br />
svn info<br />
svn list<br />
svn log<br />
svn merge<br />
svn mkdir<br />
svn move<br />
svn propdel<br />
svn propedit<br />
svn propget<br />
svn proplist<br />
svn propset<br />
svn resolved<br />
svn revert<br />
svn status<br />
svn switch<br />
svn update<br />
Subversion 命令列服务端:<br />
svnadmin list-unused-dblogs<br />
svnadmin create<br />
svnadmin dump<br />
svnadmin help<br />
svnadmin load<br />
svnadmin lstxns<br />
svnadmin recover<br />
svnadmin rmtxns<br />
svnadmin setlog<br />
svnlook author<br />
svnlook cat<br />
svnlook changed<br />
svnlook date<br />
svnlook diff<br />
svnlook dirs-changed<br />
svnlook help<br />
svnlook history<br />
svnlook info<br />
svnlook log<br />
svnlook proplist<br />
svnlook tree<br />
svnlook youngest</div>
<div></div>
<div></div>
<div>bash-3.2# ls -al /usr/local/lib/libexpat.* /usr/local/include/expat.h <br />
-rw-r--r-- 1 root wheel 40339 Jan 14 02:43 /usr/local/include/expat.h <br />
-rw-r--r-- 1 root wheel 444628 Jan 14 02:43 /usr/local/lib/libexpat.a <br />
-rwxr-xr-x 1 root wheel 793 Jan 14 02:43 /usr/local/lib/libexpat.la <br />
lrwxr-xr-x 1 root wheel 13 Jan 14 02:43 <br />
/usr/local/lib/libexpat.so -&gt; libexpat.so.6 <br />
-rwxr-xr-x 1 root wheel 265921 Jan 14 02:43 /usr/local/lib/libexpat.so.6 <br />
bash-3.2# <br />
</div>
&nbsp;
<img src ="http://www.blogjava.net/conans/aggbug/209598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:08 <a href="http://www.blogjava.net/conans/articles/209598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>