<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[SVN - 葵中剑]]></title><description><![CDATA[Just Sword Wang's Blog]]></description><link>https://swordair.com/</link><image><url>https://swordair.com/favicon.png</url><title>SVN - 葵中剑</title><link>https://swordair.com/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Tue, 20 Dec 2022 03:37:51 GMT</lastBuildDate><atom:link href="https://swordair.com/tag/svn/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Redmine+Apache+SVN+Postfix完整配置指南]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>对于这篇配置，我维护了一个<a href="http://www.swordair.com/docs/redmine-complete-configuration-on-ubuntu/">文档版本</a>并会尽力保持更新。(<strong>22 December 2013 update:</strong> 实际上，现在作为一个设计师，已经很久没有维护文档了...)</p>
<p>如果你是一个项目管理者，可能听说过redmine。它是一个项目管理系统的后起之秀，具备了广泛的项目管理平台特点同时，还提供了诸多的独有的特性。包括了内建的wiki、BUG问题跟踪、SVN集成等。本文将从头开始，详细地构建起整个项目管理的系统。如果你的团队正需要一个这样的平台，希望此文可以作为你的参考:)</p>
<p>你可以从本文中了解到如何配置好一个redmine系统，可能这中间会遇到些问题，但它们会被解决，然后让redmine跑在apache上。如何配置一个svn库，然后集成到redmine中去。以及如何配置redmine的邮件通知。<br>
如果你不打算亲历亲为体验这种繁复的安装过程，你也完全可以使用BitNami的<a href="http://bitnami.org/stack/redmine">一体化安装包</a>，这会使得安装部署redmine像安装xampp一样简单。</p>
<p>自ubuntu-10.04-LTS推出也已经有一个月的时间，所以这次的系统就用它了~对Ubuntu我是很有偏爱啊~虽说是一个完整的配置，但是涉及到的SVN以及Postfix只是略微讲述，仅仅满足于这个配置，目的是不让此文变成长篇大论，这两者的讨论远远超出了本文的范围。不过，我会给出足够多的扩展阅读，在那些扩展里可以找到你需要的内容。</p>
<p>然后让我们开始吧~</p>
<h2 id="ubuntu1004server">安装ubuntu-10.04-server</h2>
<p>这里配置的是Ubuntu</p>]]></description><link>https://swordair.com/redmine-complete-configuration-on-ubuntu/</link><guid isPermaLink="false">59fe0cf19855590d8c9146d0</guid><category><![CDATA[Mail]]></category><category><![CDATA[Postfix]]></category><category><![CDATA[Redmine]]></category><category><![CDATA[ROR]]></category><category><![CDATA[SVN]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Tue, 08 Jun 2010 13:03:35 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>对于这篇配置，我维护了一个<a href="http://www.swordair.com/docs/redmine-complete-configuration-on-ubuntu/">文档版本</a>并会尽力保持更新。(<strong>22 December 2013 update:</strong> 实际上，现在作为一个设计师，已经很久没有维护文档了...)</p>
<p>如果你是一个项目管理者，可能听说过redmine。它是一个项目管理系统的后起之秀，具备了广泛的项目管理平台特点同时，还提供了诸多的独有的特性。包括了内建的wiki、BUG问题跟踪、SVN集成等。本文将从头开始，详细地构建起整个项目管理的系统。如果你的团队正需要一个这样的平台，希望此文可以作为你的参考:)</p>
<p>你可以从本文中了解到如何配置好一个redmine系统，可能这中间会遇到些问题，但它们会被解决，然后让redmine跑在apache上。如何配置一个svn库，然后集成到redmine中去。以及如何配置redmine的邮件通知。<br>
如果你不打算亲历亲为体验这种繁复的安装过程，你也完全可以使用BitNami的<a href="http://bitnami.org/stack/redmine">一体化安装包</a>，这会使得安装部署redmine像安装xampp一样简单。</p>
<p>自ubuntu-10.04-LTS推出也已经有一个月的时间，所以这次的系统就用它了~对Ubuntu我是很有偏爱啊~虽说是一个完整的配置，但是涉及到的SVN以及Postfix只是略微讲述，仅仅满足于这个配置，目的是不让此文变成长篇大论，这两者的讨论远远超出了本文的范围。不过，我会给出足够多的扩展阅读，在那些扩展里可以找到你需要的内容。</p>
<p>然后让我们开始吧~</p>
<h2 id="ubuntu1004server">安装ubuntu-10.04-server</h2>
<p>这里配置的是Ubuntu server最新的10.04。关于系统安装就不多说什么了，塞进光盘然后一路next~</p>
<p><img src="https://swordair.com/content/images/2013/Dec/001_install_ubuntu1004_menu.png" alt="Ubuntu server 10.04"></p>
<p>系统初始配置信息:</p>
<ul>
<li>IP：192.168.242.130</li>
<li>主机名：redmine</li>
<li>预装选择：LAMP server，Mail server，OpenSSH server</li>
</ul>
<p>如果不需要redmine的邮件通知，或者不想自己搭建邮件服务器而使用已存在或者其他SMTP邮件服务来发送邮件的话，可以不用安装Mail server，即postfix。如果是这样，那么下面的这步也可以省去。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/005_install_postfix.png" alt="install postfix"></p>
<p>完成安装后，既然是新系统，就先更新到最新吧:)</p>
<pre><code>apt-get update
apt-get upgrade
</code></pre>
<p>然后我们来开始配置redmine。</p>
<h2 id="redmine">获取redmine及相关信息</h2>
<p>redmine基于ROR，所以对于ROR的开发人员来说部署这个系统要比不了解ROR的人容易的多。这里假设你对ROR是有一定的了解的。如果不了解，照着步骤做即可。</p>
<p>先找到redmine的下载，<a href="http://www.redmine.org/">redmine的官方网站</a>上有很多参考信息，<a href="http://rubyforge.org/frs/?group_id=1850">下载列表</a>则是在rubyforge.org上。</p>
<p>当前最新版本是0.9.4。redmine官方的<a href="http://www.redmine.org/wiki/redmine/RedmineInstall">安装和配置文档</a>包含了linux和windows的配置，包括对系统需求。但可能文档不尽详尽，安装中会遇到很多问题。如果仅仅只是想体验下安装过程，并想知道怎么解决具体遇到的问题，可以参看我之前写的<a href="https://swordair.com/redmine-0-9-x-configuration-on-ubuntu">redmine-0.9.x配置过程</a>。</p>
<p>我将redmine放在/usr/local/里：</p>
<pre><code>cd /usr/local/
</code></pre>
<p>获取当前版本并解压：</p>
<pre><code>wget http://rubyforge.org/frs/download.php/70486/redmine-0.9.4.tar.gz
tar zxvf redmine-0.9.4.tar.gz
mv redmine-0.9.4 redmine
</code></pre>
<h2 id="mysql">配置mysql数据库</h2>
<p>数据库是mysql，为redmine建立库，库名redmine。同时创建redmine用户，把库的权限分配给这个用户。最后设置用户的密码为'redminePASSWORD'。当然这里的库名、用户名和密码，可以按实际情况替换。</p>
<pre><code>mysql -u root -p
mysql&gt; create database redmine character set utf8;
mysql&gt; grant select,insert,delete,update,create,drop,alter,index on redmine.* to redmine;
mysql&gt; SET PASSWORD FOR 'redmine' = PASSWORD('redminePASSWORD');
mysql&gt; flush privileges;
mysql&gt; exit;
</code></pre>
<h2 id>安装与配置</h2>
<p>进入redmine的主目录，开始配置数据文件，把配置指向刚才建立的库。</p>
<pre><code>cd /usr/local/redmine
cp config/database.yml.example config/database.yml
vim config/database.yml
</code></pre>
<p>配置production部分成如下所示。其中的database，username，password按实际情况替换。</p>
<pre><code>production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: redminePASSWORD
  encoding: utf8
</code></pre>
<p>当前版本的需求是ruby 1.8.6, 1.8.7  Rails 2.3.5  Rack 1.0.1。为此首先安装需要的包。</p>
<pre><code>apt-get install rake rubygems libopenssl-ruby libmysql-ruby
</code></pre>
<p>可以看到这些包被安装：</p>
<pre><code>irb1.8 libmysql-ruby libmysql-ruby1.8 libopenssl-ruby
libopenssl-ruby1.8 libreadline-ruby1.8 libreadline5 libruby1.8 rake
rdoc1.8 ruby ruby1.8 rubygems rubygems1.8 unzip zip
</code></pre>
<p>rake的安装则必须指定版本：</p>
<pre><code>gem install rack --version=1.0.1
</code></pre>
<p>上面这条命令在我以前写配置的时候一直有效，但是在编写此文时，gem的在线安装有些问题。不知是出于网络的问题还是其他原因，我得到了下面的错误：</p>
<pre><code>WARNING:  RubyGems 1.2+ index not found for:
        http://gems.rubyforge.org/

RubyGems will revert to legacy indexes degrading performance.
Bulk updating Gem source index for: http://gems.rubyforge.org/
ERROR:  While executing gem ... (Gem::RemoteSourceException)
    Error fetching remote gem cache: SocketError: getaddrinfo: Temporary failure in name resolution (http://gems.rubyforge.org/yaml)
</code></pre>
<p>google之后也没能找到什么结果，所以只好本地安装rack了。<br>
下载对应的rack-1.0.1.gem到本地后安装：</p>
<pre><code>wget http://rubyforge.org/frs/download.php/65736/rack-1.0.1.gem
gem install --local rack-1.0.1.gem
&lt;/pre&gt;
继续下面的步骤，生成会话存储密钥：
&lt;pre lang=&quot;bash&quot;&gt;
RAILS_ENV=production rake config/initializers/session_store.rb
</code></pre>
<p>注：r3055之后的版本移除了config/initializers/session_store.rb，使用下面的命令替代。</p>
<pre><code>rake generate_session_store
</code></pre>
<p>然后开始创建数据库表结构，在redmine的根目录下运行：</p>
<pre><code>RAILS_ENV=production rake db:migrate
</code></pre>
<p>读取默认配置数据，当遇到选择语言(Select language)时，选择zh：</p>
<pre><code>RAILS_ENV=production rake redmine:load_default_data
</code></pre>
<pre><code>Select language: bg, bs, ca, cs, da, de, el, en, es, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh, zh-TW [en]zh
====================================
Default configuration data loaded.
</code></pre>
<p>至此，redmine简单的配置就完成了。使用其自带的webrick来运行redmine，来检查下redmine的配置吧:)</p>
<pre><code>ruby script/server webrick -e production
</code></pre>
<p>默认的管理员用户名和密码都是admin，进入系统后就可以开始熟悉下了。可以为每个人定义语言环境。下图是管理页面。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/002_redmine_management.png" alt="redmine management page"></p>
<h3 id="apache">在apache上部署</h3>
<p>其自带的webrick可能不能满足使用需求，那么就把它配置到apache上。<br>
apache运行ROR有多种方式，这里使用passenger。</p>
<pre><code>apt-get install build-essential
apt-get install apache2-prefork-dev libaprutil1-dev libapr1-dev ruby1.8-dev
</code></pre>
<p>然后安装 passenger</p>
<pre><code>gem install passenger
passenger-install-apache2-module
</code></pre>
<p>如果报passenger-install-apache2-module这条命令找不到的话，那么通过下面的命令查看执行路径：</p>
<pre><code>gem environment
</code></pre>
<pre><code>RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.5
  - RUBY VERSION: 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]
  - INSTALLATION DIRECTORY: /var/lib/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /var/lib/gems/1.8
     - /root/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources =&gt; true
     - :verbose =&gt; true
     - :benchmark =&gt; false
     - :backtrace =&gt; false
     - :bulk_threshold =&gt; 1000
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/
</code></pre>
<p>其中，EXECUTABLE DIRECTORY就是命令的全路径，所以对于我例子里的情况执行</p>
<pre><code>/var/lib/gems/1.8/bin/passenger-install-apache2-module
</code></pre>
<p>根据提示安装和部署。passenger会在本机编译并成为apache的一个模块。安装过程中会遇到下面的提示信息(根据版本的不同，信息也会稍有变化)：</p>
<pre><code>Welcome to the Phusion Passenger Apache 2 module installer, v2.2.13.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.
</code></pre>
<pre><code>
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.13/ext/apache2/mod_passenger.so
   PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.13
   PassengerRuby /usr/bin/ruby1.8

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
</code></pre>
<pre><code>Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:

   &lt;VirtualHost *:80&gt;
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public    # &lt;-- be sure to point to 'public'!
      &lt;Directory /somewhere/public&gt;
         AllowOverride all              # &lt;-- relax Apache security settings
         Options -MultiViews            # &lt;-- MultiViews must be turned off
      &lt;/Directory&gt;
   &lt;/VirtualHost&gt;

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

  /var/lib/gems/1.8/gems/passenger-2.2.13/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai &amp; Ninh Bui.
</code></pre>
<p>根据提示信息部署，我这里的步骤稍有不同。<br>
首先，编辑apache的配置文件并添加下面的信息：</p>
<pre><code>vim /etc/apache2/apache2.conf
</code></pre>
<pre><code>LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.13/ext/apache2/mod_passenger.so
   PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.13
   PassengerRuby /usr/bin/ruby1.8
</code></pre>
<p>然后在/etc/apache2/sites-available添加一个站点：</p>
<pre><code>vim redmine
</code></pre>
<p>并添加如下内容：</p>
<pre><code>RailsBaseURI /redmine
</code></pre>
<p>在web根目录建立redmine主目录的符号链接，并设置权限：</p>
<pre><code>ln -s /usr/local/redmine/public /var/www/redmine 
chown -R www-data:www-data /var/www
</code></pre>
<p>启用redmine站点：</p>
<pre><code>a2ensite redmine
</code></pre>
<p>最后重启apache：</p>
<pre><code>/etc/init.d/apache2 restart
</code></pre>
<p>或，重新加载配置：</p>
<pre><code>/etc/init.d/apache2 reload
</code></pre>
<p>打开浏览器，如果你能够访问到redmine，那么恭喜你，redmine已经在apache上运行良好！</p>
<p><img src="https://swordair.com/content/images/2013/Dec/003_redmine_apache.png" alt="redmine on apache"></p>
<h2 id="svn">建立SVN版本库</h2>
<p>版本控制svn可以参考《subversion 权威指南》，网上也有很多下载。不过我不太喜欢这本书，因为看起来会比较无聊:) 下面简单地安装svn并建立一个测试用库。</p>
<p>首先，安装subversion版本控制：</p>
<pre><code>apt-get install subversion
</code></pre>
<p>创建SVN的根目录，这里我建在/var。然后建立一个演示用的库。</p>
<pre><code>cd /var
mkdir svn
cd svn
svnadmin create demo
</code></pre>
<p>然后配置demo库：</p>
<pre><code>cd demo/conf
ls -l
</code></pre>
<p>conf目录里是authz，passwd和svnserve.conf这三个文件，分别用于配置用户权限、用户密码和配置此版本库(demo)。</p>
<pre><code>-rw-r--r-- 1 root root 1089 2010-06-04 14:45 authz
-rw-r--r-- 1 root root  335 2010-06-04 14:44 passwd
-rw-r--r-- 1 root root 2265 2010-06-04 14:44 svnserve.conf
</code></pre>
<p>首先配置svnserve.conf的内容：</p>
<ul>
<li>anon-access 匿名访问默认权限，默认为read。</li>
<li>auth-access 授权访问默认权限，默认为write。</li>
<li>password-db 用户密码文件，默认为与svnserve.conf同目录的passwd文件。</li>
<li>authz-db 用户授权文件，默认为与svnserve.conf同目录的authz文件。</li>
<li>realm 显示库名</li>
</ul>
<p>需要注意的是，每行开头不能留空格。</p>
<pre><code>[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = Demo Repository
</code></pre>
<p>passwd文件里存储的是用户名和密码，一行一条记录。</p>
<pre><code>[users]
redmine = redminePASSWORD
</code></pre>
<p>authz是授权文件，配置着每个用户和组的权利，下面是把redmine用户放到redmine_group组里并赋予redmine_group组demo库的读写权限。</p>
<pre><code>[groups]
dev = redmine
[demo:/]
@dev = rw
</code></pre>
<p>简单配置完后，启动svnserve：</p>
<pre><code>svnserve -d -r /var/svn
</code></pre>
<p>最后将SVN服务加入自启动：</p>
<pre><code>cd /etc/rc2.d
vim S88svnserve
</code></pre>
<p>并在文件S88svnserve中添加上面的启动命令</p>
<pre><code>svnserve -d -r /var/svn
</code></pre>
<p>最后还不能忘了加上执行权限：</p>
<pre><code>chmod +x S88svnserve
</code></pre>
<p>然后，在redmine中对应项目的配置里，指向对应的版本库。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/004_redmine_svn.png" alt="svn on redmine"></p>
<h2 id>邮件配置</h2>
<p>这里让redmine用默认配置的Postfix来发送邮件。如果在安装ubuntu的时候没有安装邮件服务器，这里也可以通过下面的命令来安装：</p>
<pre><code>apt-get install postfix
</code></pre>
<p>这里之所以要特意配置个邮件服务器，完全是为了使整个redmine系统完整。完全可以使用其他邮件服务。</p>
<p>默认配置的Postfix已经能够满足当前的发信情况。关于邮件系统和Postfix的讨论严重超出了本文范围，对于不熟悉Postfix的人，我推荐阅读<a href="https://help.ubuntu.com/community/PostfixBasicSetupHowto">Postfix基础配置</a>，如果想了解更多，可以阅读<a href="https://help.ubuntu.com/community/PostfixCompleteVirtualMailSystemHowto">Postfix虚拟邮件系统完全配置</a>(尽管此文还未完全完成)。</p>
<p>如果想要知道邮件系统的来龙去脉，邮件服务器如何处理邮件，那么我强烈建议阅读《Postfix权威指南》一书，这本书对于邮件系统的讲解深入浅出，是本好书。</p>
<p>redmine邮件的配置文件同样在主目录的config里：</p>
<pre><code>cp email.yml.example email.yml
vim email.yml
</code></pre>
<p>移动到末尾可以看到默认的配置，将production改为如下所示。其中的域名等信息按实际情况替换。</p>
<pre><code>production:
  delivery_method: :smtp
  smtp_settings:
    address: localhost
    port: 25
    domain: swordair.com
    authentication: :none
</code></pre>
<p>更多邮件信息参考：<a href="http://www.redmine.org/wiki/redmine/Email_Configuration">官方邮件配置参考</a>。里面包括了如何来写验证信息等内容。</p>
<p>至此，你就获得了一个敏捷运行的redmine项目管理系统。谢谢阅读，如有什么问题，请留言给我，我会尽力解决:)</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[为PHP增加SVN扩展]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>这次涉及到一个网上资料很少的问题，PHP的SVN扩展。</p>
<p>windows平台下，最简单的php服务器搭建无疑是xampp。但是当前版本的xampp(1.7.3)并不带有svn的扩展，即php_svn.dll。从版本更新中得知2009.1.23的xampp做了如下的变化：</p>
<pre><code>23. Jan 2009 1.7.0 pl1 beta3 
Delete php\ext\php_svn.dll 
Delete php\php5.ini 
Delete mysql-gui-tools-noinstall-5.0-r15 
New build xampp-control.exe 
Patching phpMyAdmin\main.php (305-318)
</code></pre>
<p>也是在这个版本开始，xampp移除了对svn扩展的支持。</p>
<p>在PECL的网站上仍然可以下载到最新的SVN扩展源码:</p>
<p><a href="http://pecl.php.net/package/svn">http://pecl.</a></p>]]></description><link>https://swordair.com/add-svn-extends-for-php/</link><guid isPermaLink="false">59fe0cf19855590d8c9146b0</guid><category><![CDATA[PHP]]></category><category><![CDATA[SVN]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[XAMPP]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Thu, 28 Jan 2010 10:47:12 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>这次涉及到一个网上资料很少的问题，PHP的SVN扩展。</p>
<p>windows平台下，最简单的php服务器搭建无疑是xampp。但是当前版本的xampp(1.7.3)并不带有svn的扩展，即php_svn.dll。从版本更新中得知2009.1.23的xampp做了如下的变化：</p>
<pre><code>23. Jan 2009 1.7.0 pl1 beta3 
Delete php\ext\php_svn.dll 
Delete php\php5.ini 
Delete mysql-gui-tools-noinstall-5.0-r15 
New build xampp-control.exe 
Patching phpMyAdmin\main.php (305-318)
</code></pre>
<p>也是在这个版本开始，xampp移除了对svn扩展的支持。</p>
<p>在PECL的网站上仍然可以下载到最新的SVN扩展源码:</p>
<p><a href="http://pecl.php.net/package/svn">http://pecl.php.net/package/svn</a></p>
<p>当前的版本是0.5.1，发布于2009.9.23，状态仍然是beta。查看其在php.net上的文档:</p>
<p><a href="http://www.php.net/manual/en/book.svn.php">http://www.php.net/manual/en/book.svn.php</a></p>
<p>但是由于文档不全仍然让人一头雾水。起初是想为我的windows下添加以下svn扩展的，但是却看到了这样一句 'A DLL for this PECL extension is currently unavailable' ，又是一盆冷水。跳转链接指向如何在windows下编译PHP。于是我装Visual C++ 2008 Express Edition，装了Windows Platform SDK，捣鼓了一阵，还是没能成功。</p>
<p>随后我又去网上直接下了php_svn.dll文件，把他丢进ext目录里，在php.ini里添加extension = php_svn.dll，重启，还是失败...最终我还是放弃了windows的扩展搭建，把目标转向了Linux。</p>
<p>我一直都很喜欢Ubuntu，这次用的照旧还是Ubuntu。习惯性的，在Ubuntu server-9.04上已经安装了LAMP，所以我先是安装了一个svn，快速建了一个库：</p>
<pre><code>apt-get install subversion
mkdir /var/svn
cd /var/svn
svnadmin create MyCategory
svnserve -d -r /var/svn
</code></pre>
<p>subversion的安装不是必须的。似乎现在还没有基于Debian的发布版有这个扩展的二进制包。所以要在ubuntu上使用这个扩展就必须手动安装</p>
<p>然后安装必要的组件：</p>
<pre><code>apt-get install build-essential
apt-get install php-pear php5-dev libsvn-dev
</code></pre>
<p>build-essential是必要的编译环境，通常这个都会预先安好。接下去就是三个依赖，php-pear php5-dev libsvn-dev 。如果用下面的命令搜索</p>
<pre><code>apt-cache search pecl
</code></pre>
<p>那么结果会是这样的</p>
<pre><code>dh-make-php - Creates Debian source packages for PHP PEAR and PECL extensions
php-auth - PHP PEAR modules for creating an authentication system
php5-radius - PECL radius module for PHP 5
php5-remctl - PECL module for Kerberos-authenticated command execution
php-pear - PEAR - PHP Extension and Application Repository
</code></pre>
<p>出现php-pear的原因，是PEAR和PECL共享了相同的包和分发机制。适当PHP开发包也是必要的,比如说php5-dev。</p>
<p>最后，就是Subversion的头文件，即libsvn-dev，被用来在没有安装Subversion的环境中编译svn扩展。</p>
<p>下一步，安装扩展：</p>
<pre><code>sudo pecl install svn
</code></pre>
<p>由于当前版本是0.5.1，所以命令变更如下：</p>
<pre><code>sudo pecl install svn-0.5.1
</code></pre>
<p>这一步会下载svn扩展的源代码，编译成svn.so文件然后再把它安装到PHP能找到它的地方。但是，编译到一半，问题就来了:</p>
<pre><code>/usr/bin/ld: cannot find -lsasl2
collect2: ld returned 1 exit status
make: *** [svn.la] Error 1
</code></pre>
<p>出现这个问题，我一时没能google到什么信息。直到我在google第6页找到了Ubuntu论坛里一位朋友的解决方法:</p>
<p><strong>搜索sasl2而不是lsasl2</strong>，然后安装。</p>
<pre><code>apt-cache search sasl2
sudo apt-get install libsasl2-dev libsasl2-modules-ldap
</code></pre>
<p>之后继续刚才安装svn-0.5.1的命令，报错的内容变化了：</p>
<pre><code>/usr/bin/ld: cannot find -lneon-gnutls
</code></pre>
<p>需要继续搜索和安装缺失的包</p>
<pre><code>apt-cache search neon gnutls
sudo apt-get install libneon27-gnutls-dev
</code></pre>
<p>至此，终于通过编译，并在完成的最后提示在php.ini中增加一行：</p>
<pre><code>extension=svn.so
</code></pre>
<p>重启Apache</p>
<pre><code>/etc/init.d/apache2 reload
</code></pre>
<p>通过查看phpinfo()，可以看到多出了svn一项。</p>
<table border="0" cellpadding="3" width="600">
<tr style="background-color:#9999cc; font-weight: bold; color: #000000;"><th style="border: 1px solid #000000;vertical-align: baseline;background-color:#9999cc;color:#000000">svn support</th><th style="border: 1px solid #000000;vertical-align: baseline;background-color:#9999cc;color:#000000">enabled</th></tr>
<tr><td style="background-color: #ccccff; font-weight: bold; color: #000000;border: 1px solid #000000; vertical-align: baseline;">svn client version </td><td style="background-color: #cccccc; border: 1px solid #000000; vertical-align: baseline;">1.5.4 </td></tr>
<tr><td style="background-color: #ccccff; font-weight: bold; color: #000000;border: 1px solid #000000; vertical-align: baseline;">svn extension version </td><td style="background-color: #cccccc; border: 1px solid #000000; vertical-align: baseline;">0.5.1 </td></tr>
</table>
<p>写一个脚本测试一下，成功。</p>
<pre><code>&lt;?php
svn_checkout('svn://localhost/MyCategory', dirname(__FILE__) . '/MyCategory');
?&gt; 
</code></pre>
<h4 id>参考资料：</h4>
<ul>
<li><a href="http://ubuntuforums.org/showthread.php?t=1158439">http://ubuntuforums.org/showthread.php?t=1158439</a></li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>