<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sparkle&#039;s Workshop &#187; 互联网</title>
	<atom:link href="http://weavesky.com/category/%e4%ba%92%e8%81%94%e7%bd%91/feed/" rel="self" type="application/rss+xml" />
	<link>http://weavesky.com</link>
	<description></description>
	<lastBuildDate>Tue, 24 Apr 2012 03:32:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>在Squid后面的Nginx如何记录客户端IP</title>
		<link>http://weavesky.com/2008/07/17/nginx-log-remote-ip-behind-squid/</link>
		<comments>http://weavesky.com/2008/07/17/nginx-log-remote-ip-behind-squid/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 08:30:24 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://weavesky.com/?p=549</guid>
		<description><![CDATA[（这是我在去年12月的时候查到的资料，不知道现在nginx的文档有没有更完善） 通常我们会在web server前面部署squid，这个时候web server的所有请求都是来自squid，那我们的web server的日志记录到的所有请求都是squid服务器的IP。这个时候，我们会让squid发出一个X-Forwarded-For的header包含真正客户端的IP，我们需要修改web server的日志记录字段用header X-Forwarded-For代替remote_ip，apache的修改方法很简单，这里就不说了。 这里要说的是nginx的修改方法，其实原理很简单，但是nginx的文档里面完全没有提及怎么拿某个header，ft。最后还是在maillist找到答案的 http://thread.gmane.org/gmane.comp.web.nginx.english/944/focus=946 All client headers are available as $http_&#8230; variables. For example, &#8220;X-Strange-Header&#8221; as $http_x_strange_header. 剩下的就很简单了]]></description>
			<content:encoded><![CDATA[<p>（这是我在去年12月的时候查到的资料，不知道现在nginx的文档有没有更完善）<br />
通常我们会在web server前面部署squid，这个时候web server的所有请求都是来自squid，那我们的web server的日志记录到的所有请求都是squid服务器的IP。这个时候，我们会让squid发出一个X-Forwarded-For的header包含真正客户端的IP，我们需要修改web server的日志记录字段用header X-Forwarded-For代替remote_ip，apache的修改方法很简单，这里就不说了。<br />
这里要说的是nginx的修改方法，其实原理很简单，但是nginx的文档里面完全没有提及怎么拿某个header，ft。最后还是在maillist找到答案的</p>
<p>http://thread.gmane.org/gmane.comp.web.nginx.english/944/focus=946</p>
<blockquote><p>
All client headers are available as $http_&#8230; variables.<br />
For example, &#8220;X-Strange-Header&#8221; as $http_x_strange_header.
</p></blockquote>
<p>剩下的就很简单了</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/07/17/nginx-log-remote-ip-behind-squid/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>我为什么放弃使用cacti</title>
		<link>http://weavesky.com/2008/05/07/no-more-cacti/</link>
		<comments>http://weavesky.com/2008/05/07/no-more-cacti/#comments</comments>
		<pubDate>Wed, 07 May 2008 07:29:36 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[cacti]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://weavesky.com/?p=541</guid>
		<description><![CDATA[本来想趁着把cacti从我的生产服务器中移除之前，把我之前的安装配置写成一篇文章，结果发现我已经无法理解cacti是怎么配置的，这也是我放弃使用它的其中一个原因。 在这里，我先说说cacti和mrtg、rrdtool之间的关系，或许还有一些朋友不是很了解。mrtg和rrdtool都是Tobi Oetiker的作品，rrdtool是一个循环式数据库工具，它只负责存储数据，而mrtg是一个采集和画图工具。经常我们能看到cacti和mrtg的对比，那是因为他们两者的功能是一致的，都是采集画图，其实cacti也是是用rrdtool来存储数据，甚至更多其他的网管软件，都是使用rrdtool来存储，我只想说，rrdtool是一个神物。绝大部分人都认为cacti比mrtg好，的确，mrtg比较久远了，功能也比较欠缺，cacti通过php和mysql的辅助提供更多的功能，也提供更直观的界面 但是，cacti太复杂了。需要php（还好），需要mysql（我真的没有的话怎的），还有那个烂鬼snmp协议（当然，mrtg也是通过snmp采集协议的）。我真的不明白，snmp是一个怎样的简单网络管理协议，我觉得一点也不简单，也不直观。或许可能是因为我没有受过正统的网管培训的缘故？说实在话，我真的不知道当初我是怎么把linux下面的snmpd的配置调出来的，基本上完全不明白每一个参数是什么意思，参数又是怎么跟网络流量，硬盘空间挂上关系。当然，如果你的对象是一些cisco设备就不一样，一般情况下他们都是预配置好暴露什么数据。但是如果你的设备是一台linux服务器，那使用snmp协议就变得很麻烦。 我需要一种agent模式的网管软件，而不是一个什么简单通用的网络协议，agent跟它的采集器之间跑什么协议我不关心，当然如果可以简单地做二次开发就更好了。其实，在linux下使用snmp来采集数据，某种程度都可以说是一种agent模式，因为我需要在linux机器上安装snmpd这个agent，只是这个agent很难配置。反正我都要在linux上面安装软件的，何不选择一个很直观的agent模式的软件呢，而且是可以直接调用shell之类的实现监控script的功能，说实在话，怎么通过snmpd然后调用script或许我需要的数据，我真的不知道。 于是，我选择了nagios，很简单明了的使用方法，和plugins编写方法，我甚至还用ruby写了一个script来监视某个进程是否还在运行的plugin。可惜nagios并不支持数据采集，它仅仅是一个监控，监视某些状态值是否正确，而没有把数据值的历史记录下来，nagios并不使用rrdtool。其实，nagios并不是跟cacti/mrtg等同的工具，我还需要一个采集画图的工具。再搜索nagios资料的时候，我发现twitter也是是用nagios的，另外他们还是用了munin。munin正是我也需要的东西，agent模式，不需要mysql，方便的插件编写。我只花了半天时间就把它使用起来了，迟点还打算写一些munin的插件。 我是没有打算把cacti的安装配置使用写下来了，迟点我把nagios和munin的一些心得写下来吧。]]></description>
			<content:encoded><![CDATA[<p>本来想趁着把cacti从我的生产服务器中移除之前，把我之前的安装配置写成一篇文章，结果发现我已经无法理解cacti是怎么配置的，这也是我放弃使用它的其中一个原因。</p>
<p>在这里，我先说说cacti和mrtg、rrdtool之间的关系，或许还有一些朋友不是很了解。mrtg和rrdtool都是Tobi Oetiker的作品，rrdtool是一个循环式数据库工具，它只负责存储数据，而mrtg是一个采集和画图工具。经常我们能看到cacti和mrtg的对比，那是因为他们两者的功能是一致的，都是采集画图，其实cacti也是是用rrdtool来存储数据，甚至更多其他的网管软件，都是使用rrdtool来存储，我只想说，rrdtool是一个神物。绝大部分人都认为cacti比mrtg好，的确，mrtg比较久远了，功能也比较欠缺，cacti通过php和mysql的辅助提供更多的功能，也提供更直观的界面</p>
<p>但是，cacti太复杂了。需要php（还好），需要mysql（我真的没有的话怎的），还有那个烂鬼snmp协议（当然，mrtg也是通过snmp采集协议的）。我真的不明白，snmp是一个怎样的简单网络管理协议，我觉得一点也不简单，也不直观。或许可能是因为我没有受过正统的网管培训的缘故？说实在话，我真的不知道当初我是怎么把linux下面的snmpd的配置调出来的，基本上完全不明白每一个参数是什么意思，参数又是怎么跟网络流量，硬盘空间挂上关系。当然，如果你的对象是一些cisco设备就不一样，一般情况下他们都是预配置好暴露什么数据。但是如果你的设备是一台linux服务器，那使用snmp协议就变得很麻烦。</p>
<p>我需要一种agent模式的网管软件，而不是一个什么简单通用的网络协议，agent跟它的采集器之间跑什么协议我不关心，当然如果可以简单地做二次开发就更好了。其实，在linux下使用snmp来采集数据，某种程度都可以说是一种agent模式，因为我需要在linux机器上安装snmpd这个agent，只是这个agent很难配置。反正我都要在linux上面安装软件的，何不选择一个很直观的agent模式的软件呢，而且是可以直接调用shell之类的实现监控script的功能，说实在话，怎么通过snmpd然后调用script或许我需要的数据，我真的不知道。</p>
<p>于是，我选择了nagios，很简单明了的使用方法，和plugins编写方法，我甚至还用ruby写了一个script来监视某个进程是否还在运行的plugin。可惜nagios并不支持数据采集，它仅仅是一个监控，监视某些状态值是否正确，而没有把数据值的历史记录下来，nagios并不使用rrdtool。其实，nagios并不是跟cacti/mrtg等同的工具，我还需要一个采集画图的工具。再搜索nagios资料的时候，我发现twitter也是是用nagios的，另外他们还是用了munin。munin正是我也需要的东西，agent模式，不需要mysql，方便的插件编写。我只花了半天时间就把它使用起来了，迟点还打算写一些munin的插件。</p>
<p>我是没有打算把cacti的安装配置使用写下来了，迟点我把nagios和munin的一些心得写下来吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/05/07/no-more-cacti/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>在Dreamhost上安装Trac(2)</title>
		<link>http://weavesky.com/2008/03/06/install-trac-on-dreamhost-2/</link>
		<comments>http://weavesky.com/2008/03/06/install-trac-on-dreamhost-2/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 13:10:27 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/03/06/install-trac-on-dreamhost-2/</guid>
		<description><![CDATA[前文说明了如何在Dreamhost安装Trac。安装完了怎么开始使用呢 因为Dreamhost是一个虚拟主机，因此我们不能使用tracd来启动，我们对外的唯一途径就是80端口的web server，也就是apache。而且我们不能自行安装apache的mod，于是也不能使用mod_python或者mod_wsgi的模式，也就是说只能用cgi或者fastcgi的模式，而本文只介绍fastcgi的做法 首先假设我们的站点的目录是~/mysite，而trac的目录在~/mytrac，而且我们已经初始化了一份trac 这里我把站点的目录和trac的目录分开，这样方便管理，而且站点其实需要很少文件的。我们只需要一个index.fcgi和一个.htaccess 这里是index.fcgi的内容 #!/bin/bash &#160; export TRAC_ENV=&#34;${HOME}/mytrac&#34; &#160; export LD_LIBRARY_PATH=${HOME}/python/lib:${LD_LIBRARY_PATH} export LD_RUN_PATH=${HOME}/python/lib:${LD_RUN_PATH} export PATH=${HOME}/python/bin:$PATH &#160; exec ${HOME}/python/bin/python ${HOME}/python/share/trac/cgi-bin/trac.fcgi 由于我们的python是安装在用户目录的，因此需要更多的预设环境变量 其实你也可以直接copy trac.fcgi过来在头部加上配置，但是我更喜欢自己些一个文件然后exec默认的fcgi文件 而且我exec的时候，可以直接指定使用的python的路径，而在trac.fcgi头部标注路径的做法似乎不太生效 接下来就是.htaccess文件 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.fcgi/$1 [L] RewriteRule ^$ index.fcgi &#160; AuthType Basic AuthName &#34;Trac&#34; AuthUserFile ${HOME}/mytrac/trac.htpasswd Require valid-user 首先就是rewrite了，把所有的请求都rewrite给index.fcgi 然后就是认证。非常可惜，Dreamhost并不支持在.htaccess里面使用Location指令，因此我不得不把整个site都加入验证了，因此我的site变得完全private了，本来应该只是针对/login做验证。我尝试了很久都没有解决方案 so it&#8217;s done]]></description>
			<content:encoded><![CDATA[<p><a href="http://weavesky.com/2008/03/06/install-trac-on-dreamhost/">前文</a>说明了如何在Dreamhost安装Trac。安装完了怎么开始使用呢</p>
<p>因为Dreamhost是一个虚拟主机，因此我们不能使用tracd来启动，我们对外的唯一途径就是80端口的web server，也就是apache。而且我们不能自行安装apache的mod，于是也不能使用mod_python或者mod_wsgi的模式，也就是说只能用cgi或者fastcgi的模式，而本文只介绍fastcgi的做法</p>
<p>首先假设我们的站点的目录是~/mysite，而trac的目录在~/mytrac，而且我们已经初始化了一份trac</p>
<p>这里我把站点的目录和trac的目录分开，这样方便管理，而且站点其实需要很少文件的。我们只需要一个index.fcgi和一个.htaccess</p>
<p>这里是index.fcgi的内容</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">TRAC_ENV</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">${HOME}</span>/mytrac&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_LIBRARY_PATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #800000;">${LD_LIBRARY_PATH}</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_RUN_PATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #800000;">${LD_RUN_PATH}</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #007800;">$PATH</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python <span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>trac<span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span>trac.fcgi</pre></div></div>

<p>由于我们的python是安装在用户目录的，因此需要更多的预设环境变量<br />
其实你也可以直接copy trac.fcgi过来在头部加上配置，但是我更喜欢自己些一个文件然后exec默认的fcgi文件<br />
而且我exec的时候，可以直接指定使用的python的路径，而在trac.fcgi头部标注路径的做法似乎不太生效</p>
<p>接下来就是.htaccess文件</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-f
<span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-d
<span style="color: #00007f;">RewriteRule</span> ^(.*)$ index.fcgi/$1 [L]
<span style="color: #00007f;">RewriteRule</span> ^$ index.fcgi
&nbsp;
<span style="color: #00007f;">AuthType</span> Basic
<span style="color: #00007f;">AuthName</span> <span style="color: #7f007f;">&quot;Trac&quot;</span>
<span style="color: #00007f;">AuthUserFile</span> ${HOME}/mytrac/trac.htpasswd
<span style="color: #00007f;">Require</span> valid-<span style="color: #00007f;">user</span></pre></div></div>

<p>首先就是rewrite了，把所有的请求都rewrite给index.fcgi<br />
然后就是认证。非常可惜，Dreamhost并不支持在.htaccess里面使用Location指令，因此我不得不把整个site都加入验证了，因此我的site变得完全private了，本来应该只是针对/login做验证。我尝试了很久都没有解决方案</p>
<p>so it&#8217;s done</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/03/06/install-trac-on-dreamhost-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Dreamhost上安装Trac</title>
		<link>http://weavesky.com/2008/03/06/install-trac-on-dreamhost/</link>
		<comments>http://weavesky.com/2008/03/06/install-trac-on-dreamhost/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 12:50:43 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/03/06/%e5%9c%a8dreamhost%e4%b8%8a%e5%ae%89%e8%a3%85trac/</guid>
		<description><![CDATA[在公司使用了一段时间的Trac，觉得很不错，于是想在Dreamhost上安装一个Trac，方便记录自己的一些想法，也可以用作跟朋友一起做一些小项目。本文就是介绍如何在Dreamhost上安装Trac Dreamhost的wiki里面也有提及如何安装Trac，但是相应的版本比较旧了，而且感觉也不是很完整，在参考wiki来安装的时候也碰到不少问题。最后还是决定安装目前最新版的Trac 0.11。之前介绍的在公司安装的是0.10，一来在windows下0.10一来的包都有二进制版本，二来那个时候0.11还没有很成熟。现在Trac官方网站已经把0.11的安装说明作为默认的了，看来0.11很快就要发布了。另外也因为在linux下安装本身就没有现成的二进制包，而0.11依赖的包更少，更容易安装。 Dreamhost上的python版本是2.3.5，另外因为没有办法使用根用户，所以索性在自己的用户底下安装最新的python2.5.1，更加容易处理。 从python网站下载Python-2.5.1.tgz，然后参看Dreamhost的wiki安装 cd mkdir python tar -zxvf Python-2.5.1.tgz cd Python-2.5.1 ./configure --prefix ~/python/ --enable-shared make make install install -c -m 644 ./libpython2.5.a ~/python/lib/ install -c -m 755 ./libpython2.5.so ~/python/lib/ install -c -m 755 ./libpython2.5.so.1.0 ~/python/lib/ 我把它安装在我的用户目录的python/下，有几个lib在用户模式下安装并不会copy到正确的位置，因此需要自己处理一下 然后就可以通过 ~/python/bin/python 来测试是否正常工作 接着修改我们的.bashrc export LD_LIBRARY_PATH=${HOME}/python/lib:${LD_LIBRARY_PATH} export LD_RUN_PATH=${HOME}/python/lib:${LD_RUN_PATH} export PATH=${HOME}/python/bin:$PATH 再测试一次正常工作 . ~/.bashrc python 剩下来的工作，主要就是参看Trac官方提供的Install手册 先安装easy <a href='http://weavesky.com/2008/03/06/install-trac-on-dreamhost/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>在公司使用了一段时间的Trac，觉得很不错，于是想在Dreamhost上安装一个Trac，方便记录自己的一些想法，也可以用作跟朋友一起做一些小项目。本文就是介绍如何在Dreamhost上安装Trac</p>
<p>Dreamhost的wiki里面也有提及如何安装Trac，但是相应的版本比较旧了，而且感觉也不是很完整，在参考wiki来安装的时候也碰到不少问题。最后还是决定安装目前最新版的Trac 0.11。<a href="http://weavesky.com/2007/09/10/trac-on-windows/">之前介绍的在公司安装的是0.10</a>，一来在windows下0.10一来的包都有二进制版本，二来那个时候0.11还没有很成熟。现在Trac官方网站已经把0.11的安装说明作为默认的了，看来0.11很快就要发布了。另外也因为在linux下安装本身就没有现成的二进制包，而0.11依赖的包更少，更容易安装。</p>
<p>Dreamhost上的python版本是2.3.5，另外因为没有办法使用根用户，所以索性在自己的用户底下安装最新的python2.5.1，更加容易处理。</p>
<p>从python网站下载Python-2.5.1.tgz，然后参看Dreamhost的wiki安装</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> python
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-zxvf</span> Python-2.5.1.tgz
<span style="color: #7a0874; font-weight: bold;">cd</span> Python-2.5.1
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--prefix</span> ~<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">--enable-shared</span>
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span>
<span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">-c</span> <span style="color: #660033;">-m</span> <span style="color: #000000;">644</span> .<span style="color: #000000; font-weight: bold;">/</span>libpython2.5.a ~<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">-c</span> <span style="color: #660033;">-m</span> <span style="color: #000000;">755</span> .<span style="color: #000000; font-weight: bold;">/</span>libpython2.5.so ~<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">-c</span> <span style="color: #660033;">-m</span> <span style="color: #000000;">755</span> .<span style="color: #000000; font-weight: bold;">/</span>libpython2.5.so.1.0 ~<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>我把它安装在我的用户目录的python/下，有几个lib在用户模式下安装并不会copy到正确的位置，因此需要自己处理一下</p>
<p>然后就可以通过</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">~<span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>python</pre></div></div>

<p>来测试是否正常工作</p>
<p>接着修改我们的.bashrc</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_LIBRARY_PATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #800000;">${LD_LIBRARY_PATH}</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_RUN_PATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>lib:<span style="color: #800000;">${LD_RUN_PATH}</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #800000;">${HOME}</span><span style="color: #000000; font-weight: bold;">/</span>python<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #007800;">$PATH</span></pre></div></div>

<p>再测试一次正常工作</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">. ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc
python</pre></div></div>

<p>剩下来的工作，主要就是参看Trac官方提供的Install手册</p>
<p>先安装easy install</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>peak.telecommunity.com<span style="color: #000000; font-weight: bold;">/</span>dist<span style="color: #000000; font-weight: bold;">/</span>ez_setup.py
python ez_setup.py</pre></div></div>

<p>接着用easy install安装Trac和依赖的包</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">easy_install Pygments
easy_install Genshi
easy_install Trac</pre></div></div>

<p>运行</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">tracadmin</pre></div></div>

<p>成功，现在Trac已经可以开始使用了</p>
<p>待续</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/03/06/install-trac-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在CentOS4上安装JMagick</title>
		<link>http://weavesky.com/2008/02/21/jmagick-on-centos4/</link>
		<comments>http://weavesky.com/2008/02/21/jmagick-on-centos4/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 03:40:43 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/02/21/%e5%9c%a8centos4%e4%b8%8a%e5%ae%89%e8%a3%85jmagick/</guid>
		<description><![CDATA[用Java做网站经常要处理用户上传的图片，例如生成缩略图等等。虽然Java可以使用Java2D进行一些图片操作，但是功能和效率实在太差了。目前比较好的是用JMagick来进行图像处理，不过JMagick是通过JNI调用ImageMagick的，对平台有一定依赖。本篇文章就是在CentOS4上安装JMagick。 版本问题 CentOS4内置的软件版本一直都比较低，ImageMagick就只有6.0.7。另外JMagick也很久没有更新了，最新版是6.2.6-0，对应使用ImageMagick 6.2.6。而ImageMagick官方网站上只有6.3.8。情况有点混乱，最后决定使用最新版的ImageMagick和最新版的JMagick，似乎工作正常。 从ImageMagick官方ftp上下载最新版的ImageMagick和JMagick（是的，这里也有下载），分别解开。进入ImageMagick目录，运行 ./configure &#8211;prefix=/usr/local/ImageMagick make make install 因为我不想跟系统的ImageMagick相冲，于是安装到独立的目录里面了 然后进入JMagick的目录，运行 ./configure &#8211;prefix=/usr/local/jmagick \ &#8211;with-magick-home=/usr/local/ImageMagick \ &#8211;with-java-home=/opt/jdk make all make install 因为我的jdk是自己安装的，所以直接指定了。如果你遇到找不到java的错误，检查一下你是否配置了JAVA_HOME环境变量等，实在不行，就加上这个 export PATH=/opt/jdk/bin:$PATH 如果提示找不到ImageMagick相关资源，就加上这个 export PATH=/usr/local/ImageMagick/bin:$PATH export LD_LIBRARY_PATH=/usr/local/ImageMagick/lib 安装成功之后，就是在tomcat里面使用的问题了，我不习惯在整个系统里面增加环境变量的做法，一般来说，我会在具体的引用启动脚本里面加上环境变量的配置 打开tomcat/bin/catalina.sh，在顶部加入 LD_LIBRARY_PATH=/usr/local/ImageMagick/lib CATALINA_OPTS=&#8221;-Djava.library.path=/usr/local/jmagick/lib&#8221; 测试成功]]></description>
			<content:encoded><![CDATA[<p>用Java做网站经常要处理用户上传的图片，例如生成缩略图等等。虽然Java可以使用Java2D进行一些图片操作，但是功能和效率实在太差了。目前比较好的是用JMagick来进行图像处理，不过JMagick是通过JNI调用ImageMagick的，对平台有一定依赖。本篇文章就是在CentOS4上安装JMagick。</p>
<p>版本问题<br />
CentOS4内置的软件版本一直都比较低，ImageMagick就只有6.0.7。另外JMagick也很久没有更新了，最新版是6.2.6-0，对应使用ImageMagick 6.2.6。而ImageMagick官方网站上只有6.3.8。情况有点混乱，最后决定使用最新版的ImageMagick和最新版的JMagick，似乎工作正常。</p>
<p>从ImageMagick官方ftp上下载最新版的ImageMagick和JMagick（是的，这里也有下载），分别解开。进入ImageMagick目录，运行</p>
<blockquote><p>
./configure &#8211;prefix=/usr/local/ImageMagick<br />
make<br />
make install
</p></blockquote>
<p>因为我不想跟系统的ImageMagick相冲，于是安装到独立的目录里面了</p>
<p>然后进入JMagick的目录，运行</p>
<blockquote><p>
./configure &#8211;prefix=/usr/local/jmagick \<br />
&#8211;with-magick-home=/usr/local/ImageMagick \<br />
&#8211;with-java-home=/opt/jdk<br />
make all<br />
make install
</p></blockquote>
<p>因为我的jdk是自己安装的，所以直接指定了。如果你遇到找不到java的错误，检查一下你是否配置了JAVA_HOME环境变量等，实在不行，就加上这个</p>
<blockquote><p>
export PATH=/opt/jdk/bin:$PATH
</p></blockquote>
<p>如果提示找不到ImageMagick相关资源，就加上这个</p>
<blockquote><p>
export PATH=/usr/local/ImageMagick/bin:$PATH<br />
export LD_LIBRARY_PATH=/usr/local/ImageMagick/lib
</p></blockquote>
<p>安装成功之后，就是在tomcat里面使用的问题了，我不习惯在整个系统里面增加环境变量的做法，一般来说，我会在具体的引用启动脚本里面加上环境变量的配置</p>
<p>打开tomcat/bin/catalina.sh，在顶部加入</p>
<blockquote><p>
LD_LIBRARY_PATH=/usr/local/ImageMagick/lib<br />
CATALINA_OPTS=&#8221;-Djava.library.path=/usr/local/jmagick/lib&#8221;
</p></blockquote>
<p>测试成功</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/02/21/jmagick-on-centos4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH over proxy</title>
		<link>http://weavesky.com/2008/02/18/ssh-over-proxy/</link>
		<comments>http://weavesky.com/2008/02/18/ssh-over-proxy/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 05:13:20 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/02/18/ssh-over-proxy/</guid>
		<description><![CDATA[一直都是用SecureCRT连接ssh服务器 由于我们的网络环境比较特殊，服务器在电信，但是我们办公的出口是网通 于是我用了一个在双通机房的sock服务器来proxy SecureCRT很简单就可以设置使用代理了 今天在研究rsync，打算over ssh来使用 用cygwin装了rsync和openssh 但是直接用ssh连接实在太慢了 研究了半天，终于搞定ssh的proxy配置 从这里得知，通过在~/.ssh/config加入ProxyCommand来实现 但是我试过几个版本的netcat，都没有-X -x的参数 而connect-proxy根本不知道在哪里能找到 有一个朋友说可以用Corkscrew，但是它只支持http proxy 还有一个connect.c，不过网站挂了 最后终于被我找到这个，似乎就是connect.c的新网站，使用方法都一模一样 Features of connect.c are: * Supports SOCKS (version 4/4a/5) and https CONNECT method. * Supports NO-AUTH and USERPASS authentication of SOCKS * Partially supports telnet proxy (experimental). * You can input password from tty, ssh-askpass or environment variable. <a href='http://weavesky.com/2008/02/18/ssh-over-proxy/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>一直都是用SecureCRT连接ssh服务器<br />
由于我们的网络环境比较特殊，服务器在电信，但是我们办公的出口是网通<br />
于是我用了一个在双通机房的sock服务器来proxy<br />
SecureCRT很简单就可以设置使用代理了</p>
<p>今天在研究rsync，打算over ssh来使用<br />
用cygwin装了rsync和openssh<br />
但是直接用ssh连接实在太慢了<br />
研究了半天，终于搞定ssh的proxy配置</p>
<p>从<a href="http://math.yo2.cn/449280.htm">这里</a>得知，通过在~/.ssh/config加入ProxyCommand来实现<br />
但是我试过几个版本的netcat，都没有-X -x的参数<br />
而connect-proxy根本不知道在哪里能找到</p>
<p>有一个朋友说可以用<a href="http://www.agroman.net/corkscrew/">Corkscrew</a>，但是它只支持http proxy</p>
<p>还有一个<a href="http://zippo.taiyo.co.jp/~gotoh/ssh/connect.html">connect.c</a>，不过网站挂了</p>
<p>最后终于被我找到<a href="http://www.meadowy.org/~gotoh/projects/connect">这个</a>，似乎就是connect.c的新网站，使用方法都一模一样</p>
<blockquote><p>
Features of connect.c are:<br />
    * Supports SOCKS (version 4/4a/5) and https CONNECT method.<br />
    * Supports NO-AUTH and USERPASS authentication of SOCKS<br />
    * Partially supports telnet proxy (experimental).<br />
    * You can input password from tty, ssh-askpass or environment variable.<br />
    * Run on UNIX or Windows platform.<br />
    * You can compile with various C compiler (cc, gcc, Visual C, Borland C. etc.)<br />
    * Simple and general program independent from OpenSSH.<br />
    * You can also relay local socket stream instead of standard I/O.
</p></blockquote>
<p>因为我是在windows下使用cygwin，懒得用gcc编译了<br />
下载了connect.exe，放在c:\windows<br />
然后在~/.ssh/config加入</p>
<blockquote><p>
ProxyCommand connect -S x.x.x.x:x %h %p
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/02/18/ssh-over-proxy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache、Nginx、Lighttpd对比</title>
		<link>http://weavesky.com/2007/12/18/apache-nginx-lighttpd/</link>
		<comments>http://weavesky.com/2007/12/18/apache-nginx-lighttpd/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 15:00:23 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://69.197.153.196/?p=522</guid>
		<description><![CDATA[Apache * 经典的Web服务器 * 除了慢没有别的缺点了 * 对了，Apache2对fcgi支持并不好 * 非常好用的proxy和proxy_ajp（很多人用它作为tomcat的前端） * 不支持epoll（这年头，epoll几乎是性能的必备） Nginx * 速度快，占用资源少 * 杀手级的proxy和rewrite * 非常不错的静态文件能力 * 最适合作为整个网站的前端服务（将php、svn等不同请求发送往后端apache） * 其他功能马马虎虎 Lighttpd * 杀手级的静态文件能力 * 杀手级的fcgi能力 * 不稳定的proxy模块 总体来说，如果你不确定应该用什么服务器，那就应该用Apache 但是稍微可以配置多个服务的情况下，做一个Nginx在最前端，然后把需要的功能转发给Apache是最好的选择 如果你打算跑fcgi，Lighttpd是不二的选择 如果你打算做图片服务器，独立的Lighttpd也是很好的选择]]></description>
			<content:encoded><![CDATA[<p>Apache</p>
<p>* 经典的Web服务器<br />
* 除了慢没有别的缺点了<br />
* 对了，Apache2对fcgi支持并不好<br />
* 非常好用的proxy和proxy_ajp（很多人用它作为tomcat的前端）<br />
* 不支持epoll（这年头，epoll几乎是性能的必备）</p>
<p>Nginx</p>
<p>* 速度快，占用资源少<br />
* 杀手级的proxy和rewrite<br />
* 非常不错的静态文件能力<br />
* 最适合作为整个网站的前端服务（将php、svn等不同请求发送往后端apache）<br />
* 其他功能马马虎虎</p>
<p>Lighttpd</p>
<p>* 杀手级的静态文件能力<br />
* 杀手级的fcgi能力<br />
* 不稳定的proxy模块</p>
<p>总体来说，如果你不确定应该用什么服务器，那就应该用Apache<br />
但是稍微可以配置多个服务的情况下，做一个Nginx在最前端，然后把需要的功能转发给Apache是最好的选择<br />
如果你打算跑fcgi，Lighttpd是不二的选择<br />
如果你打算做图片服务器，独立的Lighttpd也是很好的选择</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2007/12/18/apache-nginx-lighttpd/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>为什么选择trac</title>
		<link>http://weavesky.com/2007/12/10/why-trac/</link>
		<comments>http://weavesky.com/2007/12/10/why-trac/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 06:55:27 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[bugzilla]]></category>
		<category><![CDATA[jira]]></category>
		<category><![CDATA[mantis]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://69.197.153.196/?p=519</guid>
		<description><![CDATA[在一个开发团队里面，bug tracker工具是很重要的。软件一定有bug，我们需要一个跟踪bug的工具，谁报告的bug？详细情况怎么样？别人能不能还原？ 需要修正吗？优先度？已经修正了吗？等等。虽然我说了那么多需求，但实际上太全面的功能也会导致复杂性，呵呵。 最近需要在公司部署一个bug tracker，目前可以选择的工具也有不少 1、Bugzilla 功能非常强大，定制性也很强，Mylyn支持最好 可惜，安装困难，板式不直观 ===== 正好提到Mylyn，其实我的选择，很大程度受到Mylyn的支持情况影响 2、JIRA 功能强大，定制性也非常强 可惜太复杂了 3、Mantis 我一直对这个软件印象非常好 清晰的版面，用上去就非常舒服 可惜新版本迟迟未release 另一个重要的原因是Mylyn对他支持非常差 4、Trac Mylyn官方支持三个软件，Bugzilla，JIRA，Trac 因此我也在这三个软件中挑选了很久 Trac的安装比较麻烦（当然后来知道并不麻烦） 功能也中规中矩，有最基本的功能（其实我也不想让软件做太多功能，始终团队的能力为主） 定制能力很差（其实我不需要定制） 同时还包含一个wiki（正好还在讨论公司内部要不要弄一个wiki） 对mysql支持不太好（其实sqlite的效果也很不错，备份也方便） 认证模式刚好可以跟svn一样（太棒了） 真是越用越喜欢，呵呵]]></description>
			<content:encoded><![CDATA[<p>在一个开发团队里面，bug tracker工具是很重要的。软件一定有bug，我们需要一个跟踪bug的工具，谁报告的bug？详细情况怎么样？别人能不能还原？</p>
<p>需要修正吗？优先度？已经修正了吗？等等。虽然我说了那么多需求，但实际上太全面的功能也会导致复杂性，呵呵。</p>
<p>最近需要在公司部署一个bug tracker，目前可以选择的工具也有不少</p>
<p>1、Bugzilla<br />
功能非常强大，定制性也很强，Mylyn支持最好<br />
可惜，安装困难，板式不直观<br />
 =====<br />
正好提到Mylyn，其实我的选择，很大程度受到Mylyn的支持情况影响</p>
<p>2、JIRA<br />
功能强大，定制性也非常强<br />
可惜太复杂了</p>
<p>3、Mantis<br />
我一直对这个软件印象非常好<br />
清晰的版面，用上去就非常舒服<br />
可惜新版本迟迟未release<br />
另一个重要的原因是Mylyn对他支持非常差</p>
<p>4、Trac<br />
Mylyn官方支持三个软件，Bugzilla，JIRA，Trac<br />
因此我也在这三个软件中挑选了很久<br />
Trac的安装比较麻烦（当然后来知道并不麻烦）<br />
功能也中规中矩，有最基本的功能（其实我也不想让软件做太多功能，始终团队的能力为主）<br />
定制能力很差（其实我不需要定制）<br />
同时还包含一个wiki（正好还在讨论公司内部要不要弄一个wiki）<br />
对mysql支持不太好（其实sqlite的效果也很不错，备份也方便）<br />
认证模式刚好可以跟svn一样（太棒了）<br />
真是越用越喜欢，呵呵</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2007/12/10/why-trac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用bind9架设自己的智能DNS</title>
		<link>http://weavesky.com/2007/10/25/bind9-smart-dns/</link>
		<comments>http://weavesky.com/2007/10/25/bind9-smart-dns/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 06:20:18 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[dns]]></category>

		<guid isPermaLink="false">http://69.197.153.196/?p=517</guid>
		<description><![CDATA[中国的南北网络问题，是许多做网站的人的心病 除了使用双通或者多通机房以外，还可以通过多台镜像服务器的方法来提高用户的访问速度 但是，如果使用的双通机房并不是单IP的，或者使用多台镜像的做法，就会面临多个不同的服务器IP的问题 最早的时候，很多镜像服务器都是使用不同的域名的，比如说www1和www2，或者www和cnc 这样的做法，对用户相当不友好，而且不方便推广，比如说，你要告诉朋友一个网站，还要问他是什么线路才能给网址吗，或者可能你还不知道这个网站有一个专为网通的线路所设置的镜像 用统一的域名，然后根据用户的线路自动判断引导到不同的镜像服务器，正是智能DNS的功用（智能DNS其实是CDN的其中一部分，是最前端的部分） 现在还是有一些地方使用多域名，比如说下载网站的下载镜像服务器，因为智能DNS有一定的缺陷（并不一定选择到正确的线路，下面说），也提供给用户自由选择线路的权利 目前也有一些公司提供智能DNS解释服务，把你的域名NS指到他们服务器，然后输入网通和电信服务器的IP就ok了 也有一些公司提供比较完整的CDN服务，比如比较出名的就是chinacache，不少中型网站是使用他们的服务 最初的bind是不支持通过来源选择不同的ip的，因此只能通过iptables的辅助来实现智能DNS，方法也很简单，在DNS服务器上面启动两份bind，都不要用默认的端口，两份分别解析不同的线路，然后再用iptables将默认端口的DNS请求根据来源IP发送到不同的bind实例 这种方法缺点很明显，需要多个bind实例，如果需要更多的线路解释那就还要再开bind实例，另外iptables对来源的解释也会导致iptables太多规则 现在的bind支持了根据来源选择的功能，我不确定是不是bind9的新特性，不过bind9是重写过的，相比漏洞百出的bind8来说，稳定和安全很多，以下的配置以bind9为基础 我使用的是CentOS，由于bind服务没有其他服务（比如apache，squid）要求那么高，所以也没有必要自己编译一份，我是用过yum安装的，版本不是最新的稳定版 装好之后，可以用过/etc/init.d/named start成功启动服务 有一个文件named.conf出现在/etc下，就是bind的主config文件，我们只要改动他 （我只说明智能DNS实现部分，其他的bind设置自行修改，呵呵） 另外一个小技巧，可以通过/usr/sbin/named -g -u named来启动bind，可以立刻看到输出信息，方便调试 我们是通过bind9的view功能来分离判断的 首先，我们需要一份网通的IP列表，这是一份在网上流传的列表，呵呵 acl &#8220;CNC&#8221; { 58.16.0.0/16; 58.17.0.0/17; 58.17.128.0/17; 58.18.0.0/16; 58.19.0.0/16; 58.20.0.0/16; 58.21.0.0/16; 58.22.0.0/15; 58.240.0.0/15; 58.242.0.0/15; 58.244.0.0/15; 58.246.0.0/15; 58.248.0.0/13; 60.0.0.0/13; 60.8.0.0/15; 60.10.0.0/16; 60.11.0.0/16; 60.12.0.0/16; 60.13.0.0/18; 60.13.128.0/17; 60.14.0.0/15; 60.16.0.0/13; 60.24.0.0/14; 60.30.0.0/16; 60.31.0.0/16; 60.208.0.0/13; 60.216.0.0/15; 60.218.0.0/15; 60.220.0.0/14; <a href='http://weavesky.com/2007/10/25/bind9-smart-dns/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>中国的南北网络问题，是许多做网站的人的心病<br />
除了使用双通或者多通机房以外，还可以通过多台镜像服务器的方法来提高用户的访问速度<br />
但是，如果使用的双通机房并不是单IP的，或者使用多台镜像的做法，就会面临多个不同的服务器IP的问题<br />
最早的时候，很多镜像服务器都是使用不同的域名的，比如说www1和www2，或者www和cnc<br />
这样的做法，对用户相当不友好，而且不方便推广，比如说，你要告诉朋友一个网站，还要问他是什么线路才能给网址吗，或者可能你还不知道这个网站有一个专为网通的线路所设置的镜像<br />
用统一的域名，然后根据用户的线路自动判断引导到不同的镜像服务器，正是智能DNS的功用（智能DNS其实是CDN的其中一部分，是最前端的部分）</p>
<p>现在还是有一些地方使用多域名，比如说下载网站的下载镜像服务器，因为智能DNS有一定的缺陷（并不一定选择到正确的线路，下面说），也提供给用户自由选择线路的权利</p>
<p>目前也有一些公司提供智能DNS解释服务，把你的域名NS指到他们服务器，然后输入网通和电信服务器的IP就ok了<br />
也有一些公司提供比较完整的CDN服务，比如比较出名的就是chinacache，不少中型网站是使用他们的服务</p>
<p>最初的bind是不支持通过来源选择不同的ip的，因此只能通过iptables的辅助来实现智能DNS，方法也很简单，在DNS服务器上面启动两份bind，都不要用默认的端口，两份分别解析不同的线路，然后再用iptables将默认端口的DNS请求根据来源IP发送到不同的bind实例<br />
这种方法缺点很明显，需要多个bind实例，如果需要更多的线路解释那就还要再开bind实例，另外iptables对来源的解释也会导致iptables太多规则</p>
<p>现在的bind支持了根据来源选择的功能，我不确定是不是bind9的新特性，不过bind9是重写过的，相比漏洞百出的bind8来说，稳定和安全很多，以下的配置以bind9为基础</p>
<p>我使用的是CentOS，由于bind服务没有其他服务（比如apache，squid）要求那么高，所以也没有必要自己编译一份，我是用过yum安装的，版本不是最新的稳定版</p>
<p>装好之后，可以用过/etc/init.d/named start成功启动服务<br />
有一个文件named.conf出现在/etc下，就是bind的主config文件，我们只要改动他<br />
（我只说明智能DNS实现部分，其他的bind设置自行修改，呵呵）<br />
另外一个小技巧，可以通过/usr/sbin/named -g -u named来启动bind，可以立刻看到输出信息，方便调试</p>
<p>我们是通过bind9的view功能来分离判断的<br />
首先，我们需要一份网通的IP列表，这是一份在网上流传的列表，呵呵</p>
<p>    acl &#8220;CNC&#8221; {<br />
    58.16.0.0/16;<br />
    58.17.0.0/17;<br />
    58.17.128.0/17;<br />
    58.18.0.0/16;<br />
    58.19.0.0/16;<br />
    58.20.0.0/16;<br />
    58.21.0.0/16;<br />
    58.22.0.0/15;<br />
    58.240.0.0/15;<br />
    58.242.0.0/15;<br />
    58.244.0.0/15;<br />
    58.246.0.0/15;<br />
    58.248.0.0/13;<br />
    60.0.0.0/13;<br />
    60.8.0.0/15;<br />
    60.10.0.0/16;<br />
    60.11.0.0/16;<br />
    60.12.0.0/16;<br />
    60.13.0.0/18;<br />
    60.13.128.0/17;<br />
    60.14.0.0/15;<br />
    60.16.0.0/13;<br />
    60.24.0.0/14;<br />
    60.30.0.0/16;<br />
    60.31.0.0/16;<br />
    60.208.0.0/13;<br />
    60.216.0.0/15;<br />
    60.218.0.0/15;<br />
    60.220.0.0/14;<br />
    61.48.0.0/13;<br />
    61.133.0.0/17;<br />
    61.134.96.0/19;<br />
    61.134.128.0/17;<br />
    61.135.0.0/16;<br />
    61.137.128.0/17;<br />
    61.138.0.0/17;<br />
    61.138.128.0/18;<br />
    61.139.128.0/18;<br />
    61.148.0.0/15;<br />
    61.156.0.0/16;<br />
    61.159.0.0/18;<br />
    61.161.0.0/18;<br />
    61.161.128.0/17;<br />
    61.162.0.0/16;<br />
    61.163.0.0/16;<br />
    61.167.0.0/16;<br />
    61.168.0.0/16;<br />
    61.176.0.0/16;<br />
    61.179.0.0/16;<br />
    61.181.0.0/16;<br />
    61.182.0.0/16;<br />
    61.189.0.0/17;<br />
    125.32.0.0/16;<br />
    125.40.0.0/13;<br />
    202.96.0.0/18;<br />
    202.96.64.0/21;<br />
    202.96.72.0/21;<br />
    202.97.128.0/18;<br />
    202.97.224.0/21;<br />
    202.97.240.0/20;<br />
    202.98.0.0/21;<br />
    202.98.8.0/21;<br />
    202.99.64.0/19;<br />
    202.99.96.0/21;<br />
    202.99.128.0/19;<br />
    202.99.160.0/21;<br />
    202.99.168.0/21;<br />
    202.99.176.0/20;<br />
    202.99.208.0/20;<br />
    202.99.224.0/21;<br />
    202.99.232.0/21;<br />
    202.99.240.0/20;<br />
    202.102.128.0/21;<br />
    202.102.224.0/21;<br />
    202.102.232.0/21;<br />
    202.106.0.0/16;<br />
    202.107.0.0/17;<br />
    202.108.0.0/16;<br />
    202.110.0.0/17;<br />
    202.111.128.0/18;<br />
    203.93.8.0/24;<br />
    203.93.192.0/18;<br />
    210.13.128.0/17;<br />
    210.14.160.0/19;<br />
    210.14.192.0/19;<br />
    210.15.32.0/19;<br />
    210.15.96.0/19;<br />
    210.15.128.0/18;<br />
    210.21.0.0/16;<br />
    210.52.128.0/17;<br />
    210.53.0.0/17;<br />
    210.53.128.0/17;<br />
    210.74.96.0/19;<br />
    210.74.128.0/19;<br />
    210.82.0.0/15;<br />
    218.8.0.0/14;<br />
    218.12.0.0/16;<br />
    218.21.128.0/17;<br />
    218.24.0.0/14;<br />
    218.56.0.0/14;<br />
    218.60.0.0/15;<br />
    218.67.128.0/17;<br />
    218.68.0.0/15;<br />
    218.104.0.0/14;<br />
    219.154.0.0/15;<br />
    219.156.0.0/15;<br />
    219.158.0.0/17;<br />
    219.158.128.0/17;<br />
    219.159.0.0/18;<br />
    220.252.0.0/16;<br />
    221.0.0.0/15;<br />
    221.2.0.0/16;<br />
    221.3.0.0/17;<br />
    221.3.128.0/17;<br />
    221.4.0.0/16;<br />
    221.5.0.0/17;<br />
    221.5.128.0/17;<br />
    221.6.0.0/16;<br />
    221.7.0.0/19;<br />
    221.7.32.0/19;<br />
    221.7.64.0/19;<br />
    221.7.96.0/19;<br />
    221.8.0.0/15;<br />
    221.10.0.0/16;<br />
    221.11.0.0/17;<br />
    221.11.128.0/18;<br />
    221.11.192.0/19;<br />
    221.12.0.0/17;<br />
    221.12.128.0/18;<br />
    221.13.0.0/18;<br />
    221.13.64.0/19;<br />
    221.13.96.0/19;<br />
    221.13.128.0/17;<br />
    221.14.0.0/15;<br />
    221.192.0.0/15;<br />
    221.194.0.0/16;<br />
    221.195.0.0/16;<br />
    221.196.0.0/15;<br />
    221.198.0.0/16;<br />
    221.199.0.0/19;<br />
    221.199.32.0/20;<br />
    221.199.128.0/18;<br />
    221.199.192.0/20;<br />
    221.200.0.0/14;<br />
    221.204.0.0/15;<br />
    221.206.0.0/16;<br />
    221.207.0.0/18;<br />
    221.207.64.0/18;<br />
    221.207.128.0/17;<br />
    221.208.0.0/14;<br />
    221.212.0.0/16;<br />
    221.213.0.0/16;<br />
    221.216.0.0/13;<br />
    222.128.0.0/14;<br />
    222.132.0.0/14;<br />
    222.136.0.0/13;<br />
    222.160.0.0/15;<br />
    222.162.0.0/16;<br />
    222.163.0.0/19;<br />
    222.163.32.0/19;<br />
    222.163.64.0/18;<br />
    222.163.128.0/17;<br />
    };</p>
<p>如果觉得有哪些部分不是很准确的话，可以自行修改</p>
<p>由于这个部分太长了，所以写在一个专门的文件然后include进named.conf比较容易维护<br />
例如，我们把上面这段配置保存为cnc_acl.conf<br />
然后在named.conf写入</p>
<p>    include &#8220;/data/named/cnc_acl.conf&#8221;;</p>
<p>即可</p>
<p>接下来就是view的配置，假设域名是xyz.com，呵呵</p>
<p>    view &#8220;view_cnc&#8221; {<br />
    match-clients { CNC; };<br />
    zone &#8220;xyz.com&#8221; {<br />
    type master;<br />
    file &#8220;/data/named/cnc_xyz&#8221;;<br />
    };<br />
    };</p>
<p>    view &#8220;view_any&#8221; {<br />
    match-clients { any; };<br />
    zone &#8220;xyz.com&#8221; {<br />
    type master;<br />
    file &#8220;/data/named/any_xyz&#8221;;<br />
    };<br />
    };</p>
<p>就这样就足够了</p>
<p>然后我们需要cnc\_xyz和any_xyz两个具体的zone file<br />
两个文件基本是一模一样的，就是指向不同的ip</p>
<p>    $TTL 2h<br />
    xyz.com. IN SOA ns.xyz.com. root.xyz.com. (<br />
    20071022<br />
    2h<br />
    40m<br />
    1w<br />
    2h<br />
    )</p>
<p>    this6.com. IN NS ns.xyz.com.<br />
    this6.com. IN MX 1 mail.xyz.com.<br />
    ns IN A 1.1.1.1<br />
    mail IN A 1.1.1.1</p>
<p>    www IN A 1.1.1.1</p>
<p>根据不同的线路把www指向不同的IP即可<br />
这样，我们就实现了自己的智能DNS</p>
<p>后话，目前许多大型网站都是用这个来实现不同的线路来源访问不同的镜像，甚至还做到地区级别，例如，在佛山机房部署了一台镜像服务器，就将广东省的访问都指向这台服务器<br />
另外，刚刚提到智能DNS也有缺陷，这里详细描述一下，bind9通过用户的来源IP来返回不同的解释IP，而实际上，并不是实际用户直接访问我们的DNS，而是用户所使用的DNS（比如说广州ADSL用户的默认DNS）负责访问我们的DNS，网通的DNS就保存有我们网通的IP，如果用户自行修改了DNS，比如说电信的用户硬要用网通的DNS，或者网通的用户使用国外的DNS（比如opendns之类的），就会导致判断失误</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2007/10/25/bind9-smart-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在windows下安装trac</title>
		<link>http://weavesky.com/2007/09/10/trac-on-windows/</link>
		<comments>http://weavesky.com/2007/09/10/trac-on-windows/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 08:19:19 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://69.197.153.196/?p=515</guid>
		<description><![CDATA[trac是一个很不错的wiki+bug tracker软件 公司急需一个bug tracker软件来管理bug和一些小任务 经过评估之后，终于决定使用trac（有空我再写一篇比较和评估的依据） trac的安装有点麻烦，因为他用了不少外部库，有些还是c写的。这个也是影响我评估的其中一个因素，差点就不打算使用它了 经过几天的研究，发现trac在windows下的安装异常简单，但是有好多需要注意的细节，于是变有了这篇文章 说实在话，现在我甚至觉得windows下的安装比linux还要简单，呵呵 Trac Guide里面的[Trac Installation Guide](http://trac.edgewall.org/wiki/TracInstall)仅仅是一个通用的描述，并不是具体的步骤，所以这个页面只能当成是参考的部分。不过，页面里面也穿插了很多细节，什么可以用什么不能用，所以最后还是得详细看一遍才清楚 真正正确和详细的步骤其实有一份[Trac on Windows](http://trac.edgewall.org/wiki/TracOnWindows)的文档，但是藏的比较隐蔽，具体的入口在Trac FAQ中 让我们来看看这份文档吧，基本上，跟随这份文档你就能在windows安装一个trac 首先是python的版本选择问题，虽然python2.5已经出了很久，但是，因为trac依赖了一个c写的模板引擎ClearSilver，并没有for python2.5 windows的编译好的包，因此，你必须自己编译ClearSilver，那是相当的麻烦。linux呢？linux反正是要编译的，所以就算用python2.4情况也是一样（所以linux的安装还是比较麻烦的） 除了ClearSilver以外，其他包也可能遇到类似的问题，因此，使用python2.4是最佳的选择 题外话，其实还有另外一个选择，就是使用trac 0.11dev。不知道具体的原因，trac已经决定使用Genshi来代替ClearSilver作为模板引擎，具体的文档是[Trac with Python 2.5](http://trac.edgewall.org/wiki/TracOnWindows/Python2.5)，不过我觉得还是不要使用测试版比较好。另外说一下，Genshi也是trac出品的 接下来，文档提供了4种安装方法。我最后选择了第二种，也比较推荐这种，使用单独的Installer，Setuptools 的确是一个好工具，但是感觉不太好控制 下载并运行trac-0.10.4.win32.exe、clearsilver-0.9.14.win32-py2.4.exe，Installer会自动找到python的位置。trac使用sqlite来做后端存储，所以你还需要pysqlite-2.3.4.win32-py2.4.exe，如果你还想用trac的svn browser功能，你还需要svn-python-1.4.4.win32-py2.4.exe 关于数据库的选择，trac最初只支持sqlite，现在支持postgresql和mysql，但是官方不推荐使用mysql，说是因为字符集问题？（这个理由有点烂），但是官方不推荐是比较麻烦的，专门装个postgresql也不太现实。其实，sqlite的表现相当好，而且，备份起来相当方便，所以最后还是决定用sqlite 然后。。。没有了，呵，其实trac已经安装完成了 运行 \Python24\Scripts\trac-admin.py my-project initenv \Python24\Scripts\tracd.py -p 8000 my-project 开始试用你的trac吧 总结一下： 1. 使用python2.4 2. 安装trac-0.10.4.win32.exe、clearsilver-0.9.14.win32-py2.4.exe、pysqlite-2.3.4.win32-py2.4.exe 3. 开始使用！]]></description>
			<content:encoded><![CDATA[<p>trac是一个很不错的wiki+bug tracker软件<br />
公司急需一个bug tracker软件来管理bug和一些小任务<br />
经过评估之后，终于决定使用trac（有空我再写一篇比较和评估的依据）</p>
<p>trac的安装有点麻烦，因为他用了不少外部库，有些还是c写的。这个也是影响我评估的其中一个因素，差点就不打算使用它了<br />
经过几天的研究，发现trac在windows下的安装异常简单，但是有好多需要注意的细节，于是变有了这篇文章<br />
说实在话，现在我甚至觉得windows下的安装比linux还要简单，呵呵</p>
<p>Trac Guide里面的[Trac Installation Guide](http://trac.edgewall.org/wiki/TracInstall)仅仅是一个通用的描述，并不是具体的步骤，所以这个页面只能当成是参考的部分。不过，页面里面也穿插了很多细节，什么可以用什么不能用，所以最后还是得详细看一遍才清楚</p>
<p>真正正确和详细的步骤其实有一份[Trac on Windows](http://trac.edgewall.org/wiki/TracOnWindows)的文档，但是藏的比较隐蔽，具体的入口在Trac FAQ中</p>
<p>让我们来看看这份文档吧，基本上，跟随这份文档你就能在windows安装一个trac</p>
<p>首先是python的版本选择问题，虽然python2.5已经出了很久，但是，因为trac依赖了一个c写的模板引擎ClearSilver，并没有for python2.5 windows的编译好的包，因此，你必须自己编译ClearSilver，那是相当的麻烦。linux呢？linux反正是要编译的，所以就算用python2.4情况也是一样（所以linux的安装还是比较麻烦的）<br />
除了ClearSilver以外，其他包也可能遇到类似的问题，因此，使用python2.4是最佳的选择</p>
<p>题外话，其实还有另外一个选择，就是使用trac 0.11dev。不知道具体的原因，trac已经决定使用Genshi来代替ClearSilver作为模板引擎，具体的文档是[Trac with Python 2.5](http://trac.edgewall.org/wiki/TracOnWindows/Python2.5)，不过我觉得还是不要使用测试版比较好。另外说一下，Genshi也是trac出品的</p>
<p>接下来，文档提供了4种安装方法。我最后选择了第二种，也比较推荐这种，使用单独的Installer，Setuptools 的确是一个好工具，但是感觉不太好控制</p>
<p>下载并运行trac-0.10.4.win32.exe、clearsilver-0.9.14.win32-py2.4.exe，Installer会自动找到python的位置。trac使用sqlite来做后端存储，所以你还需要pysqlite-2.3.4.win32-py2.4.exe，如果你还想用trac的svn browser功能，你还需要svn-python-1.4.4.win32-py2.4.exe</p>
<p>关于数据库的选择，trac最初只支持sqlite，现在支持postgresql和mysql，但是官方不推荐使用mysql，说是因为字符集问题？（这个理由有点烂），但是官方不推荐是比较麻烦的，专门装个postgresql也不太现实。其实，sqlite的表现相当好，而且，备份起来相当方便，所以最后还是决定用sqlite</p>
<p>然后。。。没有了，呵，其实trac已经安装完成了<br />
运行</p>
<p>    \Python24\Scripts\trac-admin.py my-project initenv<br />
    \Python24\Scripts\tracd.py -p 8000 my-project</p>
<p>开始试用你的trac吧</p>
<p>总结一下：<br />
1. 使用python2.4<br />
2. 安装trac-0.10.4.win32.exe、clearsilver-0.9.14.win32-py2.4.exe、pysqlite-2.3.4.win32-py2.4.exe<br />
3. 开始使用！</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2007/09/10/trac-on-windows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

