<?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[Ubuntu - 葵中剑]]></title><description><![CDATA[Just Sword Wang's Blog]]></description><link>https://swordair.com/</link><image><url>https://swordair.com/favicon.png</url><title>Ubuntu - 葵中剑</title><link>https://swordair.com/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Tue, 10 Sep 2024 13:15:36 GMT</lastBuildDate><atom:link href="https://swordair.com/tag/ubuntu/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[redmine-0.9.x配置过程]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>项目管理系统redmine对我来说，有一种特别的感情。它使我去接触了ROR，使我重新认识了ubuntu，并且也是它，让我得到了第一份工作。值此3月，距redmine-0.8.4发布已经过去了10个月，现在的最新稳定版已经更新到了0.9.3，并且rails的版本也已升至2.3.5，而且发布了3.0 beta。虽然ruby的黄金时期已经过去了几个年头，但是它的发展势头还是不减。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/redmine_header_en.gif" alt></p>
<p>于是当初我写的关于<a href="http://swordair.com/redmine-basic-configuration-on-ubuntu/">redmine-0.8.x配置文档</a>已经略显过时了。</p>
<p>今天看到了redmine-0.9.3，于是就像当年一样看着官方wiki里的指导走了一遍过程。中间遇到了不少问题，所以本文不是一个标准的配置文档，而是我自己的整个配置过程——包含着遇到的各种问题，以及解决方案。</p>
<p>官方网站：<a href="http://www.redmine.org/">http://www.redmine.org/</a> 有很多好的资料，下载wiki：<a href="http://www.redmine.org/wiki/redmine/Download">http://www.redmine.org/wiki/redmine/Download</a> 也能带来很多帮助，</p>]]></description><link>https://swordair.com/redmine-0-9-x-configuration-on-ubuntu/</link><guid isPermaLink="false">59fe0cf19855590d8c9146bc</guid><category><![CDATA[Redmine]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 10 Mar 2010 19:09:31 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>项目管理系统redmine对我来说，有一种特别的感情。它使我去接触了ROR，使我重新认识了ubuntu，并且也是它，让我得到了第一份工作。值此3月，距redmine-0.8.4发布已经过去了10个月，现在的最新稳定版已经更新到了0.9.3，并且rails的版本也已升至2.3.5，而且发布了3.0 beta。虽然ruby的黄金时期已经过去了几个年头，但是它的发展势头还是不减。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/redmine_header_en.gif" alt></p>
<p>于是当初我写的关于<a href="http://swordair.com/redmine-basic-configuration-on-ubuntu/">redmine-0.8.x配置文档</a>已经略显过时了。</p>
<p>今天看到了redmine-0.9.3，于是就像当年一样看着官方wiki里的指导走了一遍过程。中间遇到了不少问题，所以本文不是一个标准的配置文档，而是我自己的整个配置过程——包含着遇到的各种问题，以及解决方案。</p>
<p>官方网站：<a href="http://www.redmine.org/">http://www.redmine.org/</a> 有很多好的资料，下载wiki：<a href="http://www.redmine.org/wiki/redmine/Download">http://www.redmine.org/wiki/redmine/Download</a> 也能带来很多帮助，最后，redmine在rubyforge上的下载地址：<a href="http://rubyforge.org/frs/?group_id=1850">http://rubyforge.org/frs/?group_id=1850</a></p>
<p>从0.9.x开始，redmine的需求变成了ruby-1.8.6,1.8.7  Rails-2.3.5  Rack-1.0.1，而Rails-2.3.5已经包含在了vender目录里了。这次的配置平台式ubuntu-9.10-server-i386，并预装了LAMPserver。</p>
<p>进入工作目录，这里选择主目录。</p>
<pre><code>cd -
</code></pre>
<p>下载redmine-0.9.3</p>
<pre><code>wget http://rubyforge.org/frs/download.php/69449/redmine-0.9.3.tar.gz
</code></pre>
<p>解压</p>
<pre><code>tar zxvf redmine-0.9.3.tar.gz
</code></pre>
<p>进入解压后的redmine根目录</p>
<pre><code>cd redmine-0.9.3
</code></pre>
<p>MySQL数据库设置</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>
<p>配置redmine数据库配置文件</p>
<pre><code>cp config/database.yml.example config/database.yml
vim config/database.yml
</code></pre>
<pre><code>production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: redminePASSWORD
</code></pre>
<p>如果数据库不是使用标准的端口(3306)，使用port指定端口号：</p>
<pre><code>production:
  adapter: mysql
  database: redmine
  host: localhost
  port: 3307
  username: redmine
  password: redminePASSWORD
</code></pre>
<p>生成会话存储密码</p>
<pre><code>RAILS_ENV=production rake config/initializers/session_store.rb
</code></pre>
<p>这会报出一个rake尚未安装的错误，使用下面的命令安装rake。</p>
<pre><code>apt-get install rake
</code></pre>
<p>同时附带安装了</p>
<pre><code>libruby1.8 ruby ruby1.8 unzip zip
</code></pre>
<p>再次运行rake，仍然报错</p>
<pre><code>rake aborted!
no such file to load -- rubygems
</code></pre>
<p>跟着报错信息继续安装缺失的包</p>
<pre><code>apt-get install rubygems
</code></pre>
<p>同时附带安装了</p>
<pre><code>irb1.8 libreadline-ruby1.8 rdoc1.8 rubygems1.8
</code></pre>
<p>再次运行rake，成功执行。<br>
注：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>然而又报错了</p>
<pre><code>rake aborted!
Could not find RubyGem rack (~&gt; 1.0.1)
</code></pre>
<p>如果这个时候安装rack，必须指定版本，因为redmine-0.9.3需求的事rack-1.0.1，如果直接</p>
<pre><code>gem install rack
</code></pre>
<p>这将会安装rack-1.1.0，这种情况下运行rake的报错信息会说明这点</p>
<pre><code>rake aborted!
RubyGem version error: rack(1.1.0 not ~&gt; 1.0.1)
</code></pre>
<p>所以必须指定版本安装rack，用--version参数</p>
<pre><code>gem install rack --version=1.0.1
</code></pre>
<p>再次运行rake，发觉报错信息变成了</p>
<pre><code>rake aborted!
no such file to load -- net/https
</code></pre>
<p>这时联想到https，可能是缺少了SSL的某些文件，对于ruby，执行</p>
<pre><code>apt-get install libopenssl-ruby
</code></pre>
<p>再次运行rake，报错信息再次变化</p>
<pre><code>rake aborted!
no such file to load -- mysql
</code></pre>
<p>对此，执行</p>
<pre><code>apt-get install libmysql-ruby
</code></pre>
<p>运行rake后执行成功，数据库表被创建。<br>
然后插入默认配置数据到数据库里</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的用户必须可以读写files, log, tmp这三个目录，假设由redmine这个用户运行，就需要执行下面的命令</p>
<pre><code>mkdir tmp public/plugin_assets
sudo chown -R redmine:redmine files log tmp public/plugin_assets
sudo chmod -R 755 files log tmp public/plugin_assets
</code></pre>
<p>最后在redmine的根目录运行下面的命令，启动redmine。</p>
<pre><code>ruby script/server webrick -e production
</code></pre>
<p>这个WEBrick是一个轻量的web服务器，一般总是用作开发和调试。再验证了redmine安装后，就可以考虑把它迁移到apache上去了。<br>
验证<code>http://localhost:3000/</code>来验证redmine的配置。用户名admin，密码admin。</p>
<p>关于SMTP邮件服务器的配置，官方也有说明。因为0.9.x和0.8.x相比这部分没有变化，所以可以参看我以前写的关于0.8.x文章。</p>
<p>数据备份方面，文档真的很贴心。之前0.8.x版本还不曾有的备份步骤，现在也提供的比较完善了。甚至直接提供了命令：</p>
<pre><code># Database
/usr/bin/mysqldump -u &lt;username&gt; -p&lt;password&gt; &lt;redmine_database&gt; | gzip &gt; /path/to/backup/db/redmine_`date +%y_%m_%d`.gz

# Attachments
rsync -a /path/to/redmine/files /path/to/backup/files
</code></pre>
<p>将命令里的/path/to/redmine和/path/to/backup换成实际情况里的目录。这两条命令很明确的指出了redmine的备份，只需要备份数据库以及file文件夹。</p>
<p>至此，redmine已经能很好地工作了。如果打算把它部署到apache上，可以参看我之后写的文章。</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[在ubuntu上简单配置redmine]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>这是一份完整详细的配置文档(<em>08/03/2009 created by iifksp</em>)，关于如何在ubuntu上配置运行项目管理工具redmine。</p>
<p>发布本文时redmine最新稳定版本已升至0.9.2，rails的版本也已升至2.3.5，并发布了3.0 beta，配置过程可能不同。</p>
<p>redmine官方网站：<a href="http://www.redmine.org">http://www.redmine.org</a><br>
redmine下载：<a href="http://rubyforge.org/frs/?group_id=1850">http://rubyforge.org/frs/?group_id=1850</a><br>
ubuntu官方网站：<a href="http://www.ubuntu.com">http://www.ubuntu.com</a></p>
<p>此次配置使用 ubuntu-9.04-server-i386 / redmine-0.8.4</p>
<h2 id="1">1. 配置运行环境</h2>
<p>安装ruby解释器：</p>
<pre><code>apt-get install ruby rubygems
</code></pre>
<p>安装sqlite3数据库：</p>]]></description><link>https://swordair.com/redmine-basic-configuration-on-ubuntu/</link><guid isPermaLink="false">59fe0cf19855590d8c9146b7</guid><category><![CDATA[Redmine]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Thu, 11 Feb 2010 11:15:52 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>这是一份完整详细的配置文档(<em>08/03/2009 created by iifksp</em>)，关于如何在ubuntu上配置运行项目管理工具redmine。</p>
<p>发布本文时redmine最新稳定版本已升至0.9.2，rails的版本也已升至2.3.5，并发布了3.0 beta，配置过程可能不同。</p>
<p>redmine官方网站：<a href="http://www.redmine.org">http://www.redmine.org</a><br>
redmine下载：<a href="http://rubyforge.org/frs/?group_id=1850">http://rubyforge.org/frs/?group_id=1850</a><br>
ubuntu官方网站：<a href="http://www.ubuntu.com">http://www.ubuntu.com</a></p>
<p>此次配置使用 ubuntu-9.04-server-i386 / redmine-0.8.4</p>
<h2 id="1">1. 配置运行环境</h2>
<p>安装ruby解释器：</p>
<pre><code>apt-get install ruby rubygems
</code></pre>
<p>安装sqlite3数据库：(或者安装mysql数据库，可参看在ubuntu上配置LAMP)</p>
<pre><code>apt-get install sqlite sqlite3 libsqlite3-ruby
</code></pre>
<h2 id="2redmine">2. 配置redmine</h2>
<p>获取redmine：</p>
<pre><code>wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz
</code></pre>
<p>移动到工作目录：</p>
<pre><code>mv redmine-0.8.4.tar.gz /usr/local/
</code></pre>
<p>解压文件：</p>
<pre><code>tar zxvf redmine-0.8.4.tar.gz
</code></pre>
<p>进入目录，复制数据库配置范例：</p>
<pre><code>cp config/database.yml.example config/database.yml
</code></pre>
<p>修改数据库配置文件：</p>
<pre><code>vim config/database.yml
</code></pre>
<p>将production部分配置成如下所示：</p>
<pre><code>production:
adapter: sqlite3
dbfile: /usr/local/redmine-0.8.4/db/redmine.db
</code></pre>
<p>到db目录下建立数据库文件：</p>
<pre><code>sqlite3 redmine.db
chmod a+x redmine.db
</code></pre>
<p>如果是mysql数据库的配置则类似于如下：</p>
<pre><code>production:
  adapter: mysql
  database: redmine
  host: localhost
  username: root
  password: root
  encoding: utf8
</code></pre>
<p>安装rake和libopenssl-ruby</p>
<pre><code>apt-get install rake libopenssl-ruby
</code></pre>
<p>rake迁移数据库：</p>
<pre><code>rake db:migrate RAILS_ENV=&quot;production&quot;
</code></pre>
<p>读取默认值：</p>
<pre><code>rake redmine:load_default_data RAILS_ENV=`production`
</code></pre>
<p>选择中文zh。完成后，数据库和相关表被自动创建，redmine被设置为默认状态。</p>
<p>邮件的配置：</p>
<pre><code>cd /usr/local/redmine-0.8.4/config
cp email.yml.example email.yml
vim email.yml
</code></pre>
<p>按需修改，例如下：</p>
<pre><code>production:
  delivery_method: :smtp
  smtp_settings:
    address: mail.swordair.com
    port: 25
    domain: swordair.com
    authentication: :login
    user_name: redmine
    password: redmine
</code></pre>
<p>更多有关redmine邮件的配置参看：<a href="http://www.redmine.org/wiki/redmine/Email_Configuration">http://www.redmine.org/wiki/redmine/Email_Configuration</a></p>
<h2 id="3redmine">3. 启动redmine</h2>
<p>在redmine主目录运行：</p>
<pre><code>ruby script/server -e production
</code></pre>
<p>如果使用的是mysql数据库，可能会报错：/tmp/mysql.sock找不到。因为在/tmp确实没有mysql.sock文件，此文件位于 /var/run/mysqld/mysqld.sock，所以做一个软链接即可：</p>
<pre><code>ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
</code></pre>
<p>redmine默认使用3000端口，浏览器访问<code>http://localhost:3000</code><br>
用户名admin，密码admin。</p>
<h2 id="4redmine">4. 备份redmine</h2>
<p>只需备份redmine的主目录即可。如果数据库是MySQL，还需备份库。</p>
<h2 id="5">5. 补丁和其他</h2>
<h3 id="504">邮件发送的504错误</h3>
<p>Redmine Email测试时出现504 5.7.4 Unrecognized authentication type，也是由于使用redmine发送邮件时目标服务器不需要任何的验证。为使redmine邮件工作正常，需要删除有关验证的配置信息。找到config/email.yml文件将其内容由</p>
<pre><code>production:
  delivery_method: :smtp
  smtp_settings:
    address: mail.swordair.com
    port: 25
    domain: swordair.com
    authentication: :login      #delete this line
    user_name: redmine       #delete this line
    password: redmine        #delete this line
</code></pre>
<p>改为</p>
<pre><code>production:
  delivery_method: :smtp
  smtp_settings:
    address: mail.swordair.com
    port: 25
    domain: swordair.com
</code></pre>
<h3 id>发送邮件标题乱码问题</h3>
<p>问题表现为主题&lt;32字符时显示正确，超过显示乱码。<br>
需要为redmine打补丁，补丁位置：<a href="http://www.redmine.org/attachments/2290/mailer-subject-base64.patch">http://www.redmine.org/attachments/2290/mailer-subject-base64.patch</a></p>
<p>实测打完补丁后，主题字符数上限大大提高，基本解决乱码问题。<br>
更多情况参看：<a href="http://www.redmine.org/issues/3592">http://www.redmine.org/issues/3592</a> 以及 <a href="http://www.redmine.org/issues/3601">http://www.redmine.org/issues/3601</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[在ubuntu上配置LMS ilias-3.9.x]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>这是一份完整详细的配置文档，关于如何在ubuntu上的ilias-3.9.x以及ilias-3.10.x的配置。</p>
<p>发布本文时ilias最新稳定版本已升至4.0.3，已自带大部分依赖工具，安装已经不再如文中所述这么繁复。<em>created by iifksp 2009/08/03</em></p>
<p>环境：ubuntu-9.04-server-i386</p>
<h2 id="1">1. 系统准备</h2>
<p>安装如下软件包：apache2,php5,php5-gd,php5-mysql,php5-xsl,php-pear,htmldoc,imagemagick,mysql-client-5.0,mysql-server-5.0,sendmail,sun-java5-jre 运行命令：</p>
<pre><code>apt-get install apache2 php5 php5-gd php5-mysql php5-xsl php-pear htmldoc
apt-get install imagemagick</code></pre>]]></description><link>https://swordair.com/ilias-configuration-on-ubuntu/</link><guid isPermaLink="false">59fe0cf19855590d8c9146b5</guid><category><![CDATA[LMS]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Thu, 11 Feb 2010 10:04:07 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>这是一份完整详细的配置文档，关于如何在ubuntu上的ilias-3.9.x以及ilias-3.10.x的配置。</p>
<p>发布本文时ilias最新稳定版本已升至4.0.3，已自带大部分依赖工具，安装已经不再如文中所述这么繁复。<em>created by iifksp 2009/08/03</em></p>
<p>环境：ubuntu-9.04-server-i386</p>
<h2 id="1">1. 系统准备</h2>
<p>安装如下软件包：apache2,php5,php5-gd,php5-mysql,php5-xsl,php-pear,htmldoc,imagemagick,mysql-client-5.0,mysql-server-5.0,sendmail,sun-java5-jre 运行命令：</p>
<pre><code>apt-get install apache2 php5 php5-gd php5-mysql php5-xsl php-pear htmldoc
apt-get install imagemagick mysql-client-5.0 mysql-server-5.0 sendmail sun-java5-jre
</code></pre>
<p>安装所有的建议的相关的软件包。</p>
<h2 id="2php">2. 配置PHP</h2>
<p>配置php.ini文件：</p>
<pre><code>vim /etc/php5/apache2/php.ini
</code></pre>
<p>根据官方推荐配置参数设置如下：</p>
<pre><code>max_execution_time = 600
memory_limit = 128M

error_reporting = E_ALL &amp; ~E_NOTICE
display_errors = On

post_max_size = 60M
upload_max_filesize = 40M

session.gc_probability = 1
session.gc_divisor = 100

session.gc_maxlifetime = 3600
session.hash_function = 0
</code></pre>
<p>根据需要修改配置文件。如果一切工作良好，可以考虑将display_errors设置为Off，并且将PHP的错误写入一个日志文件。</p>
<h2 id="3pear">3. PEAR组件</h2>
<p>ilias需求PEAR包Auth，DB以及HTML_Template_IT。ILIAS 3.10.0和更高版本需要PEAR包MDB2而不是包DB。</p>
<pre><code>pear install Auth
pear install HTML_Template_IT
</code></pre>
<p>对于ILIAS 3.9.x版本：</p>
<pre><code>pear install DB
</code></pre>
<p>对于ILIAS 3.10.x 和更高版本：</p>
<pre><code>pear install MDB2
pear install MDB2#mysql
</code></pre>
<p>需要Spreadsheet_Excel_Writer模块，用来导出Microsoft Excel文件格式。但由于Spreadsheet_Excel_Writer还是beta测试阶段，所以需要安装的话要先将stable状态切换到beta：</p>
<pre><code>pear config-set preferred_state beta
</code></pre>
<p>然后就可以安装Spreadsheet_Excel_Writer模块：</p>
<pre><code>pear install --alldeps Spreadsheet_Excel_Writer
</code></pre>
<p>通过使用--alldeps参数，这同时安装了依赖的OLE模块。将状态设回到stable输入：</p>
<pre><code>pear config-set preferred_state stable
</code></pre>
<h2 id="4ilias">4. 安装ilias</h2>
<p>在 <a href="http://www.ilias.de/docu/">http://www.ilias.de/docu/</a>&quot;&gt;<a href="http://www.ilias.de/docu/">http://www.ilias.de/docu/</a> 上下载最新的ilias版本，或直接使用命令下载其当前稳定版3.10.8：</p>
<pre><code>wget http://downloads.sourceforge.net/ilias/ilias-3.10.8.tar.gz
</code></pre>
<p>运行如下命令：</p>
<pre><code>cp ilias-3.x.x.tar.gz /var/www
tar xzvf /var/www/ilias-3.x.x.tar.gz
chown -R www-data:www-data /var/www/ilias3
</code></pre>
<p>创建ILIAS工作的数据目录：(官方值)</p>
<pre><code>mkdir /opt/iliasdata
chown www-data:www-data /opt/iliasdata
</code></pre>
<p>打开浏览器，输入<code>http://localhost/ilias3/setup/setup.php</code>后，跟着向导，输入下面的路径和禁用convert、htmldoc以及LaTeX检测：(官方值)</p>
<pre><code>- Path to data directory: /opt/iliasdata
- Path to log file: /opt/iliasdata/ilias3.log
- Path convert: /usr/bin/convert
- Path zip: /usr/bin/zip
- Path unzip: /usr/bin/unzip
- Path java: /usr/bin/java
- Path htmldoc: /usr/bin/htmldoc
</code></pre>
<p>完成安装后，即可登陆ILIAS，使用管理员账号root，密码homer，登录ilias使用和验证ilias的安装。</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><item><title><![CDATA[Moose File System(MFS)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>FMS是一个网络分布式文件系统。它将物理的本地化（Server）数据以单个的资源呈现给用户。对于标准文件操作来说，MFS表现的和其他类Unix文件系统一样。它有层状的结构 （目录树）， 存储了文件的属性（权限，最后访问和修改时间），并且能够创建特别的文件（块以及字符设备，管道和套接字）， 符号链接（文件名指向其他本地的可访问的文件，不是MFS必须的）和硬链接（一个文件的不同名称指向MFS上的同一数据）。</p>
<p>上面的一段是我原封不动翻译自MFS官网的简介。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/mfs_architecture.png" alt="mfs architecture"></p>
<p>在这整个架构里，MFS由这3种机器组成：</p>
<p><strong>MFS MASTER</strong>：一个单一的管理服务器，管理整个文件系统。它存储了每个文件的元数据，这些信息包括了文件的大小、属性、位置等，其还包括那些非常规的文件信息，比如目录结构、套接字、管道和设备。作为整个系统的关键，这台主机被建议配备冗余的电力供应、ECC校验内存、RAID1/RAID5/RAID10磁盘阵列、UPS等。</p>
<p><strong>CHUNKSERVERS</strong>：提供数据服务的任意数量的服务器，用来存储文件数据并自我拷贝（如果一个文件应该存在不止一个副本）。数据服务器可以通过配置、启动其chunkserver进程，动态的连接到MFS上以满足需求。MFS所报告的空闲空间是所有的连接多MFS的磁盘空闲空间的总和。</p>
<p><strong>CLIENT</strong></p>]]></description><link>https://swordair.com/moose-file-system-mfs/</link><guid isPermaLink="false">59fe0cf19855590d8c9146ac</guid><category><![CDATA[MFS]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Wed, 20 Jan 2010 15:26:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>FMS是一个网络分布式文件系统。它将物理的本地化（Server）数据以单个的资源呈现给用户。对于标准文件操作来说，MFS表现的和其他类Unix文件系统一样。它有层状的结构 （目录树）， 存储了文件的属性（权限，最后访问和修改时间），并且能够创建特别的文件（块以及字符设备，管道和套接字）， 符号链接（文件名指向其他本地的可访问的文件，不是MFS必须的）和硬链接（一个文件的不同名称指向MFS上的同一数据）。</p>
<p>上面的一段是我原封不动翻译自MFS官网的简介。</p>
<p><img src="https://swordair.com/content/images/2013/Dec/mfs_architecture.png" alt="mfs architecture"></p>
<p>在这整个架构里，MFS由这3种机器组成：</p>
<p><strong>MFS MASTER</strong>：一个单一的管理服务器，管理整个文件系统。它存储了每个文件的元数据，这些信息包括了文件的大小、属性、位置等，其还包括那些非常规的文件信息，比如目录结构、套接字、管道和设备。作为整个系统的关键，这台主机被建议配备冗余的电力供应、ECC校验内存、RAID1/RAID5/RAID10磁盘阵列、UPS等。</p>
<p><strong>CHUNKSERVERS</strong>：提供数据服务的任意数量的服务器，用来存储文件数据并自我拷贝（如果一个文件应该存在不止一个副本）。数据服务器可以通过配置、启动其chunkserver进程，动态的连接到MFS上以满足需求。MFS所报告的空闲空间是所有的连接多MFS的磁盘空闲空间的总和。</p>
<p><strong>CLIENT</strong>：任意数量的启动有mfsmount进程的客户端，其通过与MASTER的通信，来接受和修改文件信息，并通过与CHUNKSERVERS的通信来改名实际的文件数据。</p>
<p>最后的挂载通过mfsmount命令，它基于FUSE(Filesystem in USErspace)机制，所以MFS在任何的实现了FUSE的操作系统上可用（Linux, FreeBSD, MacOS X...）</p>
<p>在仔细观察了它的架构图之后，我开始搭建这个分布式的文件系统。<br>
当前发行的稳定版是<a href="http://www.moosefs.com/files/mfs-1.6.11.tar.gz">mfs-1.6.11.tar.gz</a>，但是1.6相对于1.5做了很多改变，而官方的关于1.6的文档又十分匮乏，所以很多都只好先行摸索。这次使用的是1.6.11。</p>
<p>官方1.5参考：<a href="http://www.moosefs.com/pages/userguides.html">http://www.moosefs.com/pages/userguides.html</a></p>
<p>这次的配置环境：</p>
<pre><code>MASTER: Ubuntu_9.10_server_i386 node IP:192.168.195.133
CHUNKSERVERS: Ubuntu_9.10_server_i386 CLC IP:192.168.195.132
CLIENT1: Ubuntu_9.04_desktop_i386 IP:192.168.195.137
CLIENT2: Ubuntu_9.10_desktop_i386 IP:192.168.195.130
</code></pre>
<h2 id>一. 统一配置</h2>
<p>安装必要的编译环境，安装MFS依赖的库，添加MFS运行时用户和组：</p>
<pre><code>apt-get install build-essential
apt-get install libfuse-dev
useradd mfs
</code></pre>
<h2 id="master">二. 配置Master</h2>
<pre><code>tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure --prefix=/usr/local/mfs --disable-mfsmount  --disable-mfschunkserver --enable-mfsmaster --with-default-user=mfs --with-default-group=mfs
make
make install
cd /usr/local/mfs/etc
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
vim mfsmaster.cfg
</code></pre>
<p>对于配置文件mfsmaster.cfg，移除所有的注释并配置相应值：</p>
<pre><code>WORKING_USER = mfs
WORKING_GROUP = mfs
SYSLOG_IDENT = mfsmaster
LOCK_MEMORY = 0
NICE_LEVEL = -19

EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg

DATA_PATH = /usr/local/mfs/var/mfs

BACK_LOGS = 50

REPLICATIONS_DELAY_INIT = 300
REPLICATIONS_DELAY_DISCONNECT = 3600

MATOML_LISTEN_HOST = *
MATOML_LISTEN_PORT = 9419

MATOCS_LISTEN_HOST = *
MATOCS_LISTEN_PORT = 9420

MATOCU_LISTEN_HOST = *
MATOCU_LISTEN_PORT = 9421

CHUNKS_LOOP_TIME = 300
CHUNKS_DEL_LIMIT = 100
CHUNKS_WRITE_REP_LIMIT = 1
CHUNKS_READ_REP_LIMIT = 5

REJECT_OLD_CLIENTS = 0

# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmaster.lock
</code></pre>
<p>创建运行目录，修改所有权：</p>
<pre><code>mkdir -p /var/run/mfs
sudo chown mfs.mfs /var/run/mfs
cd /usr/local/mfs/var/mfs
cp metadata.mfs.empty metadata.mfs
</code></pre>
<p>最后启动MFS Master：</p>
<pre><code>sudo /usr/local/mfs/sbin/mfsmaster start
</code></pre>
<p>启动成功，如下：</p>
<pre><code>working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
checking filesystem consistency ... ok
loading chunks data ... ok
connecting files and chunks ... ok
all inodes: 12
directory inodes: 1
file inodes: 11
chunks: 4
metadata file has been loaded
stats file has been loaded
master &lt;-&gt; metaloggers module: listen on *:9419
master &lt;-&gt; chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
</code></pre>
<p>主机Master配置完成。</p>
<p>**安装总结：**相对1.5多出了mfsexports.cfg的配置，用于权限的控制。如果这个文件不存在，将导致后续的客户机挂载MFS的请求被拒绝。即发生mfsmaster register error: Permission denied的错误。但是如果在客户机上安装1.5的client工具，则会直接绕过这个文件。</p>
<h2 id="chunkservers">三. 配置CHUNKSERVERS</h2>
<p>与master的配置类似，在配置参数上略有不同。</p>
<pre><code>tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure --prefix=/usr/local/mfs --disable-mfsmount  --enable-mfschunkserver --disable-mfsmaster --with-default-user=mfs --with-default-group=mfs
make
make install
cd /usr/local/mfs/etc
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
</code></pre>
<p>修改如下</p>
<pre><code>WORKING_USER = mfs
WORKING_GROUP = mfs
SYSLOG_IDENT = mfschunkserver
LOCK_MEMORY = 0
NICE_LEVEL = -19

DATA_PATH = /usr/local/mfs/var/mfs

MASTER_RECONNECTION_DELAY = 5

# modify to master host ip
MASTER_HOST = 192.168.195.133
MASTER_PORT = 9420

MASTER_TIMEOUT = 60

CSSERV_LISTEN_HOST = *
CSSERV_LISTEN_PORT = 9422
CSSERV_TIMEOUT = 5

HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
HDD_TEST_FREQ = 10

# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
</code></pre>
<p>然后修改mfshdd.cfg，这个文件制定作为存储的路径：</p>
<pre><code>vim mfshdd.cfg
</code></pre>
<p>根据需要修改，这里改为</p>
<pre><code>/mnt/data
</code></pre>
<p>建立存储目录、工作目录，分配所有权：</p>
<pre><code>mkdir -p /mnt/data
sudo chown mfs.mfs /mnt/data
mkdir -p /var/run/mfs
sudo chown mfs.mfs /var/run/mfs
</code></pre>
<p>最后启动CHUNKSERVER：</p>
<pre><code>sudo /usr/local/mfs/sbin/mfschunkserver start
</code></pre>
<p>成功启动并初始化：</p>
<pre><code>working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
scanning folder /mnt/data/ ...
/mnt/data/: 4 chunks found
scanning complete
main server module: listen on *:9422
stats file has been loaded
mfschunkserver daemon initialized properly
</code></pre>
<p>主机CHUNKSERVER配置完成，增加CHUNKSERVER方法相同。</p>
<h2 id="client">四. 配置CLIENT</h2>
<pre><code>tar zxvf mfs-1.6.11.tar.gz
cd mfs-1.6.11
./configure --prefix=/usr/local/mfs --enable-mfsmount  --disable-mfschunkserver --disable-mfsmaster --with-default-user=mfs --with-default-group=mfs
make
make install
</code></pre>
<p>安装完成后就可以挂载MFS了。使用mfsmount命令挂载刚才配置的文件系统：</p>
<pre><code>mkdir -p /mnt/mfs
/usr/local/mfs/bin/mfsmount -H 192.168.195.133 /mnt/mfs
</code></pre>
<p>Client也配置完成。</p>
<p>其他的客户机的配置类似，挂载后的文件系统对客户机来说是单独的数据源。任何客户机的对于文件的操作都会影响到其他系统。至此，整个配置完成。关于MFS的维护和管理，以及备份和恢复，我会另起一文。</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[LVS:Ubuntu基于IPVS LVS-DR模式的简单配置]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Linux Virtual Server (LVS)，此文是我学习LVS之后一个初步的简单配置的过程。</p>
<p>这真是一个相当复杂的集群系统，至少在我看来是这样，初次接触的话还要补充繁多的网络术语和以前一直一知半解的名词。其长达数百页的全英文的HOWTO，比起qmail更加让人头疼。qmail况且有中文的《life with qmail》可以用来入门，至少解决了许多的特殊的名词。</p>
<p>这次的配置使用环境如下：</p>
<pre><code>Director：ubuntu-9.10-desktop-i386
IP：192.168.195.130
VIP：192.168.195.200

realserver1：Hercules
IP：192.168.195.134
VIP：192.168.195.200

realserver2：Hercules
IP：192.168.195.135
VIP：</code></pre>]]></description><link>https://swordair.com/lvs-ubuntu-basic-configuration-based-on-ipvs-lvs-dr-mode/</link><guid isPermaLink="false">59fe0cf19855590d8c9146ab</guid><category><![CDATA[LVS]]></category><category><![CDATA[Ubuntu]]></category><dc:creator><![CDATA[Sword Wang]]></dc:creator><pubDate>Tue, 19 Jan 2010 16:53:34 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Linux Virtual Server (LVS)，此文是我学习LVS之后一个初步的简单配置的过程。</p>
<p>这真是一个相当复杂的集群系统，至少在我看来是这样，初次接触的话还要补充繁多的网络术语和以前一直一知半解的名词。其长达数百页的全英文的HOWTO，比起qmail更加让人头疼。qmail况且有中文的《life with qmail》可以用来入门，至少解决了许多的特殊的名词。</p>
<p>这次的配置使用环境如下：</p>
<pre><code>Director：ubuntu-9.10-desktop-i386
IP：192.168.195.130
VIP：192.168.195.200

realserver1：Hercules
IP：192.168.195.134
VIP：192.168.195.200

realserver2：Hercules
IP：192.168.195.135
VIP：192.168.195.200
</code></pre>
<p>Hercules是一个小巧的附带thttpd的OS(kernel 2.6.17-7)的一个虚拟应用，这里仅仅只是用来测试负载均衡。</p>
<h2 id="realserver">配置Realserver</h2>
<p>1.<a href="http://prdownloads.sourceforge.net/istanbul/Hercules-1.3-esx3.zip?download">下载Hercul</a></p>
<p>2.解压Hercules并用VMware打开。</p>
<p>3.启动Hercules，默认情况下它的IP是由DHCP分配的。</p>
<p>4.远程登录Hercules，默认用户名和密码都是admin。</p>
<p>5.在其web根目录/chroot/htdocs/创建测试用的test.html，内容如下：</p>
<pre><code>&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;This is fake WWW server 1&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		This is fake WWW server 1
	&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>6.查看是否能够访问到http://[IP]/test.html。</p>
<p>7.新建/etc/init.d/S91lvs，chmod +x，内容如下：</p>
<pre><code>#!/bin/sh

# VIP installation for LVS-DR
# Ian Gibbs flash666 at yahoo dot com
# reproduced and modified by iifksp 2010/1/19

IPEND=200
VIP=192.168.195.$IPEND
NETWORK_INIT_SCRIPT=&quot;/etc/init.d/S40network&quot;

service=LVS

case &quot;$1&quot; in

	start)
		echo -n &quot;Starting $service: &quot;
# Down the network
$NETWORK_INIT_SCRIPT stop
echo &quot;&quot;

# Alter ARP behaviour
echo &quot;Modifying kernel ARP params...&quot;
echo 1 &gt; /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 &gt; /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 1 &gt; /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 &gt; /proc/sys/net/ipv4/conf/all/arp_announce

# Bring the interface back up
# (doing it this way prevents ARP broadcasts you don't want)
$NETWORK_INIT_SCRIPT start

#install_realserver_vip
/sbin/ifconfig lo:$IPEND $VIP broadcast $VIP netmask 255.255.255.255 up
echo &quot;Added VIP locally:&quot;
/sbin/ifconfig lo:$IPEND

# installing route for VIP $VIP on device lo:$IPEND
/sbin/route add -host $VIP dev lo:$IPEND
echo &quot;Modified routing table:&quot;
/bin/netstat -rn
		;;

	stop)
		echo -n &quot;Stopping $service: &quot;
		/sbin/ifconfig lo$IPEND down
		;;
esac
</code></pre>
<p>8.关闭Hercules的虚拟机并复制一份作为realserver2。</p>
<p>9.相应修改realserver2的test.html，将其中 server1 改为 server2 。</p>
<p>10.同时启动这两个Hercules虚拟机。</p>
<h2 id="director">配置Director</h2>
<ol>
<li>
<p>安装Ubuntu，附带安装OpenSSH server。</p>
</li>
<li>
<p>更新核心并重启。</p>
<pre><code> apt-get update
 apt-get upgrade
</code></pre>
</li>
<li>
<p>安装ipvsadm。</p>
<pre><code> apt-get install ipvsadm
</code></pre>
</li>
<li>
<p>保存下面的脚本安装配置LVS，并以root身份运行。/root/lvs-setup.sh:</p>
</li>
</ol>
<pre><code>#!/bin/sh
IPEND=200
VIP=192.168.195.$IPEND
RIP1=192.168.195.134
RIP2=192.168.195.135

#director is not gw for realservers: leave icmp redirects on
echo 'setting icmp redirects (1 on, 0 off) '
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/all/send_redirects
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/default/send_redirects
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/eth0/send_redirects

#add ethernet device and routing for VIP $VIP
/sbin/ifconfig eth0:$IPEND $VIP broadcast $VIP netmask 255.255.255.255
/sbin/route add -host $VIP dev eth0:$IPEND
#listing ifconfig info for VIP $VIP
/sbin/ifconfig eth0:$IPEND

#check VIP $VIP is reachable from self (director)
/bin/ping -c 1 $VIP
#listing routing info for VIP $VIP
/bin/netstat -rn

#setup_ipvsadm_table
#clear ipvsadm table
/sbin/ipvsadm -C
#installing LVS services with ipvsadm
#add http to VIP with round robin scheduling
/sbin/ipvsadm -A -t $VIP:http -s rr

#forward http to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t $VIP:http -r $RIP1 -g -w 1
#check realserver reachable from director
ping -c 1 $RIP1

#forward http to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t $VIP:http -r $RIP2 -g -w 1
#check realserver reachable from director
ping -c 1 $RIP2

#displaying ipvsadm settings
/sbin/ipvsadm
</code></pre>
<p>完成后，一个基本的轮询的负载均衡就配置好了。</p>
<pre><code>IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  ubuntu.local:www rr
  -&gt; 192.168.195.135:www          Route   1      0          0
  -&gt; 192.168.195.134:www          Route   1      0          0
</code></pre>
<h2 id>添加故障转移</h2>
<p>IPVS无法自己做到检测realserver的状态，无法避免将请求报文发送到已经挂掉的服务器。这需要另一个程序，那就是ldirectord。</p>
<h3 id="1ldirectord">1. 安装ldirectord。</h3>
<pre><code>apt-get install ldirectord
</code></pre>
<p>ldirectord 将会接管ipvs的配置，所以在ldirectord的配置会覆盖原来的ipvs配置信息。</p>
<h3 id="2">2. 创建配置文件</h3>
<p>创建ldirectord的配置文件/etc/ha.d/ldirectord.cf</p>
<pre><code>checktimeout=3
checkinterval=5
autoreload=yes
logfile=&quot;/var/log/ldirectord.log&quot;
quiescent=yes
virtual=192.168.195.200:80
#	fallback=127.0.0.1:80
	real=192.168.195.134:80 gate
	real=192.168.195.135:80 gate
	service=http
	request=&quot;test.html&quot;
	receive=&quot;fake&quot;
	scheduler=wlc
	protocol=tcp
	checktype=negotiate
</code></pre>
<p>必须特别小心的是virtual后的每行必须以一个tab开始。</p>
<h3 id="3ldirectord">3. 重启或者启动ldirectord的脚本</h3>
<pre><code>/etc/init.d/ldirectord start
</code></pre>
<p>这样就完成了简单故障转移(failover)。</p>
<p>运行ipvsadm，可以得到如下的信息：</p>
<pre><code>iifksp@ubuntu:~$ sudo ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  ubuntu.local:www wlc
  -&gt; 192.168.195.134:www          Route   1      0          0
  -&gt; 192.168.195.135:www          Route   1      0          0
</code></pre>
<p>这表示，当前的调度算法是wlc (加权最少链接Weighted Least Connections)，“具有较高权值的服务器将承受较大比例的活动连接负载，调度器可以自动问询真实服务器的负载情况，并动态地调整其权值”。</p>
<p>当一台realserver挂掉后，ldirectord将会检测到，并将其Weight值设置为0：</p>
<pre><code>iifksp@ubuntu:~$ sudo ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  ubuntu.local:www wlc
  -&gt; 192.168.195.134:www          Route   1      0          0
  -&gt; 192.168.195.135:www          Route   0      0          0
</code></pre>
<p>从而避免了将报文发送给已经故障的服务器。</p>
<p>另外的配置请参考：<a href="http://www.yaozhifeng.net/internet/ubuntu_lvs_keepalived/">基于Linux的可扩展服务器架构方案</a></p>
<h3 id>参考链接：</h3>
<ul>
<li><a href="http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/">LVS HOWTO</a></li>
<li><a href="http://surrey.lug.org.uk/node/303">LVS Ubuntu</a></li>
<li><a href="http://www.howtoforge.com/the-perfect-load-balanced-and-high-availability-web-cluster-with-2-servers-running-xen-on-ubuntu-8.04-hardy-heron">The Perfect Load-Balanced &amp; High-Availability Web Cluster With 2 Servers Running Xen On Ubuntu 8.04 Hardy Heron</a></li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>