<?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"
	>

<channel>
	<title>Sparkle's Workshop</title>
	<atom:link href="http://weavesky.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://weavesky.com</link>
	<description></description>
	<pubDate>Wed, 07 May 2008 13:22:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<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[Uncategorized]]></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>
		</item>
		<item>
		<title>并发相关</title>
		<link>http://weavesky.com/2008/03/26/about-concurrent/</link>
		<comments>http://weavesky.com/2008/03/26/about-concurrent/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 13:40:59 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://weavesky.com/?p=540</guid>
		<description><![CDATA[http://www.javaeye.com/post/498557

copy on write array list
ConcurrentHashMap
ReentrantLock
ReentrantReadWriteLock
CAS
我都有在用，JDK内置
一直都想写一些关于它们的文章，不过始终太松散，而且我是知道原理然后直接用API而已
我随便说一些
楼主的copy on write模式是可取的，JDK很早就引入copy on write array list来处理Listener部分，在写入非常非常少的情况下，copy on write其实是很好的。至于楼主的实现好不好就不知道了
ConcurrentHashMap用了多个锁来处理，里面有一个一个的bucket来隔离锁，默认就是16个bucket&#038;锁。但是它也有缺点，就是不能保证数据绝对准确，例如他的size就是不准确的。但是它肯定是线程安全的
ReentrantLock是可以代替synchronized的东西，除了写起来比synchronized难稍稍。默认是non-fair模式，比synchronized快很多，如果改成fair就会下降到跟synchronized差不多
ReadWriteLock很简单，read不互斥，write互斥
CAS就是AtomicInteger之类的了，使用了CPU的交换指令，理论上比锁快，但是在高并发的环境一样会下降
你们还是看一下JDK源代码和JavaDoc好过了，你们的讨论本来就有答案的

]]></description>
			<content:encoded><![CDATA[<p>http://www.javaeye.com/post/498557</p>
<blockquote><p>
copy on write array list<br />
ConcurrentHashMap<br />
ReentrantLock<br />
ReentrantReadWriteLock<br />
CAS<br />
我都有在用，JDK内置<br />
一直都想写一些关于它们的文章，不过始终太松散，而且我是知道原理然后直接用API而已</p>
<p>我随便说一些<br />
楼主的copy on write模式是可取的，JDK很早就引入copy on write array list来处理Listener部分，在写入非常非常少的情况下，copy on write其实是很好的。至于楼主的实现好不好就不知道了</p>
<p>ConcurrentHashMap用了多个锁来处理，里面有一个一个的bucket来隔离锁，默认就是16个bucket&#038;锁。但是它也有缺点，就是不能保证数据绝对准确，例如他的size就是不准确的。但是它肯定是线程安全的</p>
<p>ReentrantLock是可以代替synchronized的东西，除了写起来比synchronized难稍稍。默认是non-fair模式，比synchronized快很多，如果改成fair就会下降到跟synchronized差不多</p>
<p>ReadWriteLock很简单，read不互斥，write互斥</p>
<p>CAS就是AtomicInteger之类的了，使用了CPU的交换指令，理论上比锁快，但是在高并发的环境一样会下降</p>
<p>你们还是看一下JDK源代码和JavaDoc好过了，你们的讨论本来就有答案的
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/03/26/about-concurrent/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mercurial续</title>
		<link>http://weavesky.com/2008/03/19/mercurial-more/</link>
		<comments>http://weavesky.com/2008/03/19/mercurial-more/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 15:38:50 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/03/19/mercurial%e7%bb%ad/</guid>
		<description><![CDATA[上次谈到一些Mercurial的事情，后来因为忙别的事情没有继续写下去。中途跟cyfdecyf通过几次email讨论Mercurial。总体来说，我对Mercurial和分布式版本管理的理解还是比较松散的，比较难形成文章，但还是很希望把我所知道的写出来。
我对分布式版本管理的理解很简单。首先这里假设你有一般版本管理软件的概念（CVS或者SVN）。假设你在家里装了一个SVN服务器，你在家里编写的代码都提交上去。在公司也装了一个SVN，你在公司编写的代码也都提交上去。这里就有两个完全独立的SVN服务器了。分布式版本管理，就是这两个SVN服务器之间可以互相提交，其操作就像你提交上其中一台SVN那样，SVN之间互相提交就会将多个changeset同时提交。而且这两个SVN服务器没有主次之分，这样处理是很容易混乱的，实际上，我们会架设另一个SVN服务器，作为两个SVN的父，两个SVN向父提交changeset。这个行为仅仅是方便我们管理的一个比较好的参考做法，并没有强制。另外，当然SVN服务器是不支持互相提交的，于是我们需要一个分布式版本管理软件。
个人觉得，一台SVN就好像一台MySQL，我们只有一个数据库。而分布式版本管理就好像Master-Master MySQL集群。有经验的朋友就会知道，在集群中使用自增字段是不可取的，就像SVN的changeset id是自增的不能适应分布一样。做MySQL集群很经常会用UUID作为主键，分布式版本管理也使用了类似的机制来保证多个库之间的changeset有唯一的ID不会冲突。这个已经是比较细节的处理问题。这里暂时不打算细节研究具体的机制或者使用方法，先有一个大概的概念，看软件的refrence很快会上手的。
再待续
预告：
权限问题
Mercurial目前的情况
远程模式
在Dreamhost上使用Mercurial
Mercurial基本使用
]]></description>
			<content:encoded><![CDATA[<p><a href="http://weavesky.com/2008/01/25/mercurial-and-me/">上次谈到一些Mercurial的事情</a>，后来因为忙别的事情没有继续写下去。中途跟<a href="http://chenyufei.name/blog/">cyfdecyf</a>通过几次email讨论Mercurial。总体来说，我对Mercurial和分布式版本管理的理解还是比较松散的，比较难形成文章，但还是很希望把我所知道的写出来。</p>
<p>我对分布式版本管理的理解很简单。首先这里假设你有一般版本管理软件的概念（CVS或者SVN）。假设你在家里装了一个SVN服务器，你在家里编写的代码都提交上去。在公司也装了一个SVN，你在公司编写的代码也都提交上去。这里就有两个完全独立的SVN服务器了。分布式版本管理，就是这两个SVN服务器之间可以互相提交，其操作就像你提交上其中一台SVN那样，SVN之间互相提交就会将多个changeset同时提交。而且这两个SVN服务器没有主次之分，这样处理是很容易混乱的，实际上，我们会架设另一个SVN服务器，作为两个SVN的父，两个SVN向父提交changeset。这个行为仅仅是方便我们管理的一个比较好的参考做法，并没有强制。另外，当然SVN服务器是不支持互相提交的，于是我们需要一个分布式版本管理软件。</p>
<p>个人觉得，一台SVN就好像一台MySQL，我们只有一个数据库。而分布式版本管理就好像Master-Master MySQL集群。有经验的朋友就会知道，在集群中使用自增字段是不可取的，就像SVN的changeset id是自增的不能适应分布一样。做MySQL集群很经常会用UUID作为主键，分布式版本管理也使用了类似的机制来保证多个库之间的changeset有唯一的ID不会冲突。这个已经是比较细节的处理问题。这里暂时不打算细节研究具体的机制或者使用方法，先有一个大概的概念，看软件的refrence很快会上手的。</p>
<p>再待续</p>
<p>预告：<br />
权限问题<br />
Mercurial目前的情况<br />
远程模式<br />
在Dreamhost上使用Mercurial<br />
Mercurial基本使用</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/03/19/mercurial-more/feed/</wfw:commentRss>
		</item>
		<item>
		<title>在Linux命令行下发送带附件的邮件</title>
		<link>http://weavesky.com/2008/03/10/mail-an-attachment-at-linux/</link>
		<comments>http://weavesky.com/2008/03/10/mail-an-attachment-at-linux/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 12:36:16 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/03/10/%e5%9c%a8linux%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%8b%e5%8f%91%e9%80%81%e5%b8%a6%e9%99%84%e4%bb%b6%e7%9a%84%e9%82%ae%e4%bb%b6/</guid>
		<description><![CDATA[购买的虚拟主机没有备份服务（另外收费），但是很好地有SSH权限和Cron权限，于是写了一个简单的shell脚本备份打包mysql的数据，然后email到我的邮箱。但是Linux的mail命令并不能发送附件，于是自己写了一个小程序来发送附件。由于我比较熟悉Ruby，于是就用Ruby来实现，当然你也可以用Python或者Perl来实现

to_mail = ARGV&#91;0&#93;
backup_name = ARGV&#91;1&#93;
backup_attach = ARGV&#91;2&#93;
&#160;
require 'net/smtp'
require 'rubygems'
require 'mailfactory'
&#160;
mail = MailFactory.new
mail.to = to_mail
mail.from = &#34;backup@weavesky.com&#34;
mail.subject = &#34;#{backup_name} backup&#34;
mail.text = &#34;no content&#34;
mail.attach backup_attach
&#160;
Net::SMTP.start&#40;&#34;localhost&#34;&#41; do &#124;smtp&#124;
  smtp.send_message mail.to_s, mail.from, mail.to
end

后来我找到一些更简单的做法

uuencode file.txt file.txt &#124; mail email@address.com

不过这种做法是不会产生附件的，仅仅将文件内容编码之后当content发送
如果你的机器上有装mutt的话，就更简单了

echo &#34;no content&#34; &#124; mutt -s &#34;subject&#34; -a file.txt email@address.com

我现在就是用这种做法
]]></description>
			<content:encoded><![CDATA[<p>购买的虚拟主机没有备份服务（另外收费），但是很好地有SSH权限和Cron权限，于是写了一个简单的shell脚本备份打包mysql的数据，然后email到我的邮箱。但是Linux的mail命令并不能发送附件，于是自己写了一个小程序来发送附件。由于我比较熟悉Ruby，于是就用Ruby来实现，当然你也可以用Python或者Perl来实现</p>

<div class="wp_syntax"><div class="code"><pre class="ruby">to_mail = ARGV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>
backup_name = ARGV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>
backup_attach = ARGV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">2</span><span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'net/smtp'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mailfactory'</span>
&nbsp;
mail = MailFactory.<span style="color:#9900CC;">new</span>
mail.<span style="color:#9900CC;">to</span> = to_mail
mail.<span style="color:#9900CC;">from</span> = <span style="color:#996600;">&quot;backup@weavesky.com&quot;</span>
mail.<span style="color:#9900CC;">subject</span> = <span style="color:#996600;">&quot;#{backup_name} backup&quot;</span>
mail.<span style="color:#9900CC;">text</span> = <span style="color:#996600;">&quot;no content&quot;</span>
mail.<span style="color:#9900CC;">attach</span> backup_attach
&nbsp;
<span style="color:#6666ff; font-weight:bold;">Net::SMTP</span>.<span style="color:#9900CC;">start</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;localhost&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> |smtp|
  smtp.<span style="color:#9900CC;">send_message</span> mail.<span style="color:#9900CC;">to_s</span>, mail.<span style="color:#9900CC;">from</span>, mail.<span style="color:#9900CC;">to</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>后来我找到一些更简单的做法</p>

<div class="wp_syntax"><div class="code"><pre class="bash">uuencode <span style="color: #c20cb9; font-weight: bold;">file</span>.txt <span style="color: #c20cb9; font-weight: bold;">file</span>.txt | mail email@address.com</pre></div></div>

<p>不过这种做法是不会产生附件的，仅仅将文件内容编码之后当content发送</p>
<p>如果你的机器上有装mutt的话，就更简单了</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;no content&quot;</span> | mutt -s <span style="color: #ff0000;">&quot;subject&quot;</span> -a <span style="color: #c20cb9; font-weight: bold;">file</span>.txt email@address.com</pre></div></div>

<p>我现在就是用这种做法</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/03/10/mail-an-attachment-at-linux/feed/</wfw:commentRss>
		</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[Uncategorized]]></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=$&#123;HOME&#125;/python/lib:$&#123;LD_LIBRARY_PATH&#125;
export LD_RUN_PATH=$&#123;HOME&#125;/python/lib:$&#123;LD_RUN_PATH&#125;
export PATH=$&#123;HOME&#125;/python/bin:$PATH
&#160;
exec $&#123;HOME&#125;/python/bin/python $&#123;HOME&#125;/python/share/trac/cgi-bin/trac.fcgi

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

RewriteEngine On
RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule ^&#40;.*&#41;$ index.fcgi/$1 &#91;L&#93;
RewriteRule ^$ index.fcgi
&#160;
AuthType Basic
AuthName &#34;Trac&#34;
AuthUserFile $&#123;HOME&#125;/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"><span style="color: #808080; 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;${HOME}/mytrac&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_LIBRARY_PATH=</span><span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/lib:<span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>LD_LIBRARY_PATH<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_RUN_PATH=</span><span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/lib:<span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>LD_RUN_PATH<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH=</span><span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/bin:<span style="color: #007800;">$PATH</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/bin/python <span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/share/trac/cgi-bin/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"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteCond</span> %<span style="color: #66cc66;">&#123;</span>REQUEST_FILENAME<span style="color: #66cc66;">&#125;</span> !-f
<span style="color: #00007f;">RewriteCond</span> %<span style="color: #66cc66;">&#123;</span>REQUEST_FILENAME<span style="color: #66cc66;">&#125;</span> !-d
<span style="color: #00007f;">RewriteRule</span> ^<span style="color: #66cc66;">&#40;</span>.*<span style="color: #66cc66;">&#41;</span>$ index.fcgi/$<span style="color: #ff0000;">1</span> <span style="color: #66cc66;">&#91;</span>L<span style="color: #66cc66;">&#93;</span>
<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> $<span style="color: #66cc66;">&#123;</span>HOME<span style="color: #66cc66;">&#125;</span>/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>
		</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[Uncategorized]]></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=$&#123;HOME&#125;/python/lib:$&#123;LD_LIBRARY_PATH&#125;
export LD_RUN_PATH=$&#123;HOME&#125;/python/lib:$&#123;LD_RUN_PATH&#125;
export PATH=$&#123;HOME&#125;/python/bin:$PATH

再测试一次正常工作

. ~/.bashrc
python

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

wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py

接着用easy install安装Trac和依赖的包

easy_install Pygments
easy_install Genshi
easy_install Trac

运行

tracadmin

成功，现在Trac已经可以开始使用了
待续
]]></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"><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> -zxvf Python<span style="color: #000000;">-2.5</span><span style="color: #000000;">.1</span>.tgz
<span style="color: #7a0874; font-weight: bold;">cd</span> Python<span style="color: #000000;">-2.5</span><span style="color: #000000;">.1</span>
./configure --prefix ~/python/ --enable-shared
<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> -c -m <span style="color: #000000;">644</span> ./libpython2<span style="color: #000000;">.5</span>.a ~/python/lib/
<span style="color: #c20cb9; font-weight: bold;">install</span> -c -m <span style="color: #000000;">755</span> ./libpython2<span style="color: #000000;">.5</span>.so ~/python/lib/
<span style="color: #c20cb9; font-weight: bold;">install</span> -c -m <span style="color: #000000;">755</span> ./libpython2<span style="color: #000000;">.5</span>.so<span style="color: #000000;">.1</span><span style="color: #000000;">.0</span> ~/python/lib/</pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="bash">~/python/bin/python</pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_LIBRARY_PATH=</span><span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/lib:<span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>LD_LIBRARY_PATH<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">LD_RUN_PATH=</span><span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/lib:<span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>LD_RUN_PATH<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH=</span><span style="color: #007800;">$<span style="color: #7a0874; font-weight: bold;">&#123;</span>HOME<span style="color: #7a0874; font-weight: bold;">&#125;</span></span>/python/bin:<span style="color: #007800;">$PATH</span></pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="bash">. ~/.bashrc
python</pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #c20cb9; font-weight: bold;">wget</span> http://peak.telecommunity.com/dist/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">easy_install Pygments
easy_install Genshi
easy_install Trac</pre></div></div>

<p>运行</p>

<div class="wp_syntax"><div class="code"><pre class="bash">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>
		</item>
		<item>
		<title>令你的Mac Term更好用</title>
		<link>http://weavesky.com/2008/02/29/make-your-mac-term-better/</link>
		<comments>http://weavesky.com/2008/02/29/make-your-mac-term-better/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 13:47:50 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
		
		<category><![CDATA[苹果]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/02/29/%e4%bb%a4%e4%bd%a0%e7%9a%84mac-term%e6%9b%b4%e5%a5%bd%e7%94%a8/</guid>
		<description><![CDATA[一直都认为Mac的Term很难用,包括内置的,还有很多人推荐的iTerm
我一直都在用iTerm,但是有很多问题,显示不了中文,输入不了中文,在VI或者一些软件下面不能用方向键(甚至我ssh到一台linux主机都不能用)
在windows平台的时候,使用putty或者securecrt等term软件,都有一大堆设置可以使用.而iTerm不停出新版本,也不见有多少个设置.就算用Linux,也没有那么多问题.还真的有狠心把MacBook装成Linux算了的想法
网上没有任何这方面的资料,还到一些blog里面留言询问别人的心得,也没有结果
研究了很久,终于知道怎么处理了
首先是方向键问题,我突然想想有可能emacs的键位可以使用,结果真的可以.^N ^P ^B ^F分别代表上下左右,这样用了一段时间
后来突然想起我在securecrt在设置把TERM改成Linux,改不会是有影响
于是在~/.profile加入

export TERM=linux

果然,方向键都有效了,整个操作变得跟Linux一样.原来securecrt的设置只是主动传给shell,而并不是它自己的设置.而且ssh到linux主机也正常了.后来研究发现,TERM会跟随ssh传递到远端shell,当然你可以自己再修改一次.
然后就是中文问题了,经过研究发现,我的Linux系统里面有一个文件/etc/inputrc
里面有一些关于meta的设置,而MacOS下面并没有这个文件
于是我在~/.inputrc加入一样的meta设置
]]></description>
			<content:encoded><![CDATA[<p>一直都认为Mac的Term很难用,包括内置的,还有很多人推荐的iTerm<br />
我一直都在用iTerm,但是有很多问题,显示不了中文,输入不了中文,在VI或者一些软件下面不能用方向键(甚至我ssh到一台linux主机都不能用)</p>
<p>在windows平台的时候,使用putty或者securecrt等term软件,都有一大堆设置可以使用.而iTerm不停出新版本,也不见有多少个设置.就算用Linux,也没有那么多问题.还真的有狠心把MacBook装成Linux算了的想法</p>
<p>网上没有任何这方面的资料,还到一些blog里面留言询问别人的心得,也没有结果</p>
<p>研究了很久,终于知道怎么处理了</p>
<p>首先是方向键问题,我突然想想有可能emacs的键位可以使用,结果真的可以.^N ^P ^B ^F分别代表上下左右,这样用了一段时间<br />
后来突然想起我在securecrt在设置把TERM改成Linux,改不会是有影响<br />
于是在~/.profile加入</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">TERM=</span>linux</pre></div></div>

<p>果然,方向键都有效了,整个操作变得跟Linux一样.原来securecrt的设置只是主动传给shell,而并不是它自己的设置.而且ssh到linux主机也正常了.后来研究发现,TERM会跟随ssh传递到远端shell,当然你可以自己再修改一次.</p>
<p>然后就是中文问题了,经过研究发现,我的Linux系统里面有一个文件/etc/inputrc<br />
里面有一些关于meta的设置,而MacOS下面并没有这个文件<br />
于是我在~/.inputrc加入一样的meta设置</p>
<pre lang=“bash">
set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
</pre>
<p>然后把iTerm的Encoding改成UTF-8</p>
<p>另外还在~/.profile加入</p>
<pre>
alias ls="ls -wG"
</pre>
<p>现在ls终于能看见中文,而且输入中文也正常.不过delete文字不太正常,还没找到解决方法.</p>
<p>Mac默认就是按照UTF-8存储中文的,如果连上Linux并不是用UTF-8而是用GBK的话,可以临时修改iTerm的Encoding来查看</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/02/29/make-your-mac-term-better/feed/</wfw:commentRss>
		</item>
		<item>
		<title>给《程序员》写的MINA文章已经出刊了</title>
		<link>http://weavesky.com/2008/02/26/mina-article-for-magazine/</link>
		<comments>http://weavesky.com/2008/02/26/mina-article-for-magazine/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 14:45:48 +0000</pubDate>
		<dc:creator>Sparkle</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://weavesky.com/2008/02/26/%e7%bb%99%e3%80%8a%e7%a8%8b%e5%ba%8f%e5%91%98%e3%80%8b%e5%86%99%e7%9a%84mina%e6%96%87%e7%ab%a0%e5%b7%b2%e7%bb%8f%e5%87%ba%e5%88%8a%e4%ba%86/</guid>
		<description><![CDATA[第一次给杂志写文章，没什么经验，行文一般般,呵呵。不过也是能顺利出刊。
对文章有任何意见和建议,或者讨论MINA,可以在这里留言
迟点我再写一些MINA的心得
]]></description>
			<content:encoded><![CDATA[<p>第一次给杂志写文章，没什么经验，行文一般般,呵呵。不过也是能顺利出刊。</p>
<p>对文章有任何意见和建议,或者讨论MINA,可以在这里留言</p>
<p>迟点我再写一些MINA的心得</p>
]]></content:encoded>
			<wfw:commentRss>http://weavesky.com/2008/02/26/mina-article-for-magazine/feed/</wfw:commentRss>
		</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>
		</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.
   [...]]]></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>
		</item>
	</channel>
</rss>
