<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Chenjunlu's Blog</title>
	
	<link>http://www.chenjunlu.com</link>
	<description>记录生活的全部</description>
	<lastBuildDate>Mon, 14 May 2012 07:00:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/chenjunlu" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="chenjunlu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><item>
		<title>解决 WordPress 后台无法更新的问题</title>
		<link>http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-slove-the-issue-that-wordpress-backend-can-not-update</link>
		<comments>http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/#comments</comments>
		<pubDate>Mon, 14 May 2012 06:48:08 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[vsftpd]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wp-config.php]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2781</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2795" title="Wordpress-logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/Wordpress-logo.png" alt="Wordpress-logo" width="359" height="81" /></p>
<a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" target="_blank">自从把博客迁移到 Linode VPS 后</a>，我都是使用 WinSCP 给博客上传文件，但是在 WordPress 后台更新博客程序或者插件都会提示：“要执行请求的操作，WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录凭据以继续。”

这个界面只会出现在 PHP 进程不是以用户身份来运行的主机上，也就是你的服务器运行 PHP 的用户和 WP 文件夹的所有者是不一样的，这么做目的就是为了安全，WordPress 在升级时会创建一个临时文件看看所有者是不是和当前运行的 PHP 的所有者是否一样，如果不一样，就会出现这个界面。

遇到这种情况有两种解决办法，第一种就是填写 FTP 连接信息，这需要你事先在主机上配置好 FTP 服务，如果你想知道具体的配置方法，请参考我的<a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps" target="_blank">配置过程</a>。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2795" title="Wordpress-logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/Wordpress-logo.png" alt="Wordpress-logo" width="359" height="81" /></p>
<p><a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" target="_blank">自从把博客迁移到 Linode VPS 后</a>，我都是使用 WinSCP 给博客上传文件，但是在 WordPress 后台更新博客程序或者插件都会提示：“要执行请求的操作，WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录凭据以继续。”</p>
<p>这个界面只会出现在 PHP 进程不是以用户身份来运行的主机上，也就是你的服务器运行 PHP 的用户和 WP 文件夹的所有者是不一样的，这么做目的就是为了安全，WordPress 在升级时会创建一个临时文件看看所有者是不是和当前运行的 PHP 的所有者是否一样，如果不一样，就会出现这个界面。</p>
<p>遇到这种情况有两种解决办法，第一种就是填写 FTP 连接信息，这需要你事先在主机上配置好 FTP 服务，如果你想知道具体的配置方法，请参考我的<a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps" target="_blank">配置过程</a>。</p>
<p>如果你不想每次更新操作时都填写 FTP 连接信息，请在 wp-config.php 中加入以下代码：</p>
<blockquote><p>define(‘FTP_HOST’, ‘ftp.yoursite.com’);<br />
define(‘FTP_USER’, ‘Your_FTP_Username’);<br />
define(‘FTP_PASS’, ‘Your_FTP_password’);<br />
//*If you can use a SSL connection set this to true*<br />
define(‘FTP_SSL’, true);</p></blockquote>
<p>这样无论你升级 WordPress 或者插件的时候就都不会有那个提示了。</p>
<p>还有一个办法，那就是修改网站文件的权限和用户组，既然我们已经知道了出现这个提示的原因，当然我们就有了解决的办法，不过我不推荐这种方法。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年05月13日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/" title="Linode VPS 下的 FTP 服务的搭建">Linode VPS 下的 FTP 服务的搭建</a> (0)</li><li>2012年04月21日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/" title="Linode VPS 上实现 WordPress 邮件通知">Linode VPS 上实现 WordPress 邮件通知</a> (0)</li><li>2012年04月20日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" title="博客搬迁 Linode VPS 配置笔记">博客搬迁 Linode VPS 配置笔记</a> (3)</li><li>2012年04月18日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/" title="备份 GoDaddy 主机网站文件">备份 GoDaddy 主机网站文件</a> (0)</li><li>2010年09月27日 -- <a href="http://www.chenjunlu.com/2010/09/ftp-active-and-passive-mode/" title="FTP 的主动/被动模式">FTP 的主动/被动模式</a> (0)</li><li>2010年05月23日 -- <a href="http://www.chenjunlu.com/2010/05/google-living-stories-for-wordpress/" title="Google Living Stories for WordPress">Google Living Stories for WordPress</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linode VPS 下的 FTP 服务的搭建</title>
		<link>http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-setup-ftp-service-under-linode-vps</link>
		<comments>http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/#comments</comments>
		<pubDate>Sun, 13 May 2012 01:46:43 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[vsftpd]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2785</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2801" title="vsftpd_logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/vsftpd_logo.png" alt="vsftpd_logo" width="327" height="140" /></p>
想解决 WordPress 后台无法更新的问题，首先你需要在 Linode VPS 配置好你的 FTP 服务，具体我的配置过程如下：
<ol>
	<li>安装 vsftpd 服务
</li><li>
配置 FTP 用户
</li><li>
配置 /etc/vsftpd/vsftpd.conf 文件
</li><li>
启动 FTP 服务
</li><li>
配置开机自启动
</li></ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2801" title="vsftpd_logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/vsftpd_logo.png" alt="vsftpd_logo" width="327" height="140" /></p>
<p>想解决 WordPress 后台无法更新的问题，首先你需要在 Linode VPS 配置好你的 FTP 服务，具体我的配置过程如下：</p>
<p>1. 安装 vsftpd 服务</p>
<blockquote><p>[root@chenjunlu ~]# yum install vsftpd</p></blockquote>
<p>2. 配置 FTP 用户</p>
<blockquote><p>[root@chenjunlu ~]# usermod -d /srv/www/chenjunlu.com/htdocs/ -s /sbin/nologin</p></blockquote>
<p>3. 配置 /etc/vsftpd/vsftpd.conf 文件</p>
<blockquote><p># Allow anonymous FTP ?<br />
anonymous_enable=NO</p>
<p># Uncomment this to allow local users to log in.<br />
local_enable=YES</p>
<p># Uncomment this to enable any form of FTP write command.<br />
write_enable=YES</p>
<p># Default umask for local users is 077. You may wish to change this to 022,<br />
local_umask=022</p>
<p>chroot_local_user=YES<br />
chroot_list_enable=YES<br />
# If chroot_local_user is YES and chroot_list_enable is YES, then this list<br />
# becomes a list of users to chroot().<br />
chroot_list_file=/etc/vsftpd/chroot_list</p>
<p># If userlist_enable is YES and userlist_deny is YES, then this list<br />
# becomes a list of users who can login.<br />
userlist_enable=YES<br />
userlist_deny=NO<br />
userlist_file=/etc/vsftpd/user_list</p></blockquote>
<p>4. 启动 FTP 服务</p>
<blockquote><p>[root@chenjunlu ~]# service vsftpd restart</p></blockquote>
<p>5. 配置开机自启动</p>
<blockquote><p>[root@chenjunlu ~]# chkconfig vsftpd on</p></blockquote>
<p>如果你对安全性有很强的敏感性，我建议你配置 FTPs 服务，具体的配置方法请参考<a href="http://praveen.kumar.in/2009/05/31/setting-up-ftps-using-vsftpd-for-wordpress-plugins-auto-upgrade/" target="_blank">这里</a>。虽然说 vsftpd 的全名是”Very Secure FTP Daemon”的意思，也就是说是比较注重安全的 FTP 服务器，但是出于慎重的考虑，我建议还是配置一下防火墙，或者说不配置开机自启动，只在需要的时候再开启服务。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年04月29日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/" title="在 Linode VPS 下搭建 pptp 服务器">在 Linode VPS 下搭建 pptp 服务器</a> (0)</li><li>2012年04月21日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/" title="Linode VPS 上实现 WordPress 邮件通知">Linode VPS 上实现 WordPress 邮件通知</a> (0)</li><li>2012年04月20日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" title="博客搬迁 Linode VPS 配置笔记">博客搬迁 Linode VPS 配置笔记</a> (3)</li><li>2012年05月14日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/" title="解决 WordPress 后台无法更新的问题">解决 WordPress 后台无法更新的问题</a> (0)</li><li>2012年04月18日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/" title="备份 GoDaddy 主机网站文件">备份 GoDaddy 主机网站文件</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>了解 Oracle Ksplice</title>
		<link>http://www.chenjunlu.com/2012/05/oracle-ksplice/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=oracle-ksplice</link>
		<comments>http://www.chenjunlu.com/2012/05/oracle-ksplice/#comments</comments>
		<pubDate>Fri, 11 May 2012 08:26:04 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Ksplice]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Red Hat]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2764</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2771" title="Oracle-Ksplice" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/Oracle-Ksplice.png" alt="Oracle-Ksplice" width="292" height="158" /></p>

Oracle 在 2011 年 7 月份收购了 Ksplice。使用了 Ksplice 的 Linux 系统，为 Kernel 打补丁无需重启动，做系统维护的朋友应该明白这是一个杀手级特性。现在该产品已经合并到 Oracle Linux 中。

对于企业级 Linux，Oracle 只对 <a href="http://www.oracle.com/us/technologies/linux/OracleLinuxSupport/index.html" target="_blank">Oracle Linux Premier Support</a> 客户提供 Ksplice 服务。毫无疑问，这个产品从一定程度上大大提升生产环境（尤其是数据库服务器）的安全性、可靠性和可用性，对购买了 Oracle 相关服务的用户来说，无疑这是个好产品，但对于 Linux 生态来说可能是灾难，尤其是 Red Hat，市场或许将进一步被 Oracle 蚕食，短时间内不太可能找到替代性的产品。Oracle 已经成为 Linux 操作系统市场上举足轻重的玩家，但是不交钱，用户没办法和 Oracle 玩儿。因为我未来的工作的一部分是为做 Oracle Linux Support Sales 的同事提供技术支持，所以了解 Oracle Ksplice 的原理十分有必要。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2771" title="Oracle-Ksplice" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/Oracle-Ksplice.png" alt="Oracle-Ksplice" width="292" height="158" /></p>
<p>Oracle 在 2011 年 7 月份收购了 Ksplice。使用了 Ksplice 的 Linux 系统，为 Kernel 打补丁无需重启动，做系统维护的朋友应该明白这是一个杀手级特性。现在该产品已经合并到 Oracle Linux 中。</p>
<p>对于企业级 Linux，Oracle 只对 <a href="http://www.oracle.com/us/technologies/linux/OracleLinuxSupport/index.html" target="_blank">Oracle Linux Premier Support</a> 客户提供 Ksplice 服务。毫无疑问，这个产品从一定程度上大大提升生产环境（尤其是数据库服务器）的安全性、可靠性和可用性，对购买了 Oracle 相关服务的用户来说，无疑这是个好产品，但对于 Linux 生态来说可能是灾难，尤其是 Red Hat，市场或许将进一步被 Oracle 蚕食，短时间内不太可能找到替代性的产品。Oracle 已经成为 Linux 操作系统市场上举足轻重的玩家，但是不交钱，用户没办法和 Oracle 玩儿。因为我未来的工作的一部分是为做 Oracle Linux Support Sales 的同事提供技术支持，所以了解 Oracle Ksplice 的原理十分有必要。</p>
<p>曾经作为一名系统工程师的我知道：内核更新（为了解决核心系统软件中的漏洞和缺陷所做的更改）是十分必要的，但内核更新影响很大，需要安排停机时间，在停机期间会临时终止受影响的每个系统上的所有服务。尽管这些维护是必要的，而且很重要，但是内核更新会导致服务中断。下图中的时间线说明从 2009 年 1 月到 2010 年 2 月许多流行的操作系统的重要内核更新频率。每个圆圈图标表示必须重新启动。</p>
<p style="text-align: center;"><img class="aligncenter  wp-image-2765" title="reboots-required" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/reboots-required.gif" alt="reboots-required" width="447" height="294" /></p>
<p>但是现在，您可以在内核运行时应用补丁，这样就避免了重新启动导致的大规模服务中断。换句话说，不再需要专门安排更新时间。</p>
<p>Ksplice 是一套在原地 （即在运行时）对内核应用补丁的工具，它不需要重新引导。提供现有的内核、它的源代码和一个或多个统一差异文件（统一差异文件是内核补丁的规范形式），Ksplice 就会把内核中现有的错误对象代码替换为新的对象代码。Ksplice 可以替换程序代码和数据结构。更棒的是，内核拼接 只会中断正常系统操作不到一毫秒，守护进程、进程和连接都保持不变。如何使用 Oracle Ksplise 进行内核更新，请参考<a href="http://www.oracle.com/technetwork/articles/servers-storage-admin/ksplice-linux-518455.html?ssSourceSiteId=ocomen" target="_blank">这里</a>。</p>
<h4>1. 对正在运行的内核应用补丁</h4>
<p>简单地说，Ksplice 把一个或多个有漏洞或错误的函数替换为新的正确的实现，从而对正在运行的内核应用补丁。为了让替换生效，工具在正在运行的内核映像中添加新的函数对象代码，然后在每个现有函数的开头注入一个跳转，从而调用函数的新实现。实际上，整个内核没有变，只是增加了新的对象代码和几个函数调用重定向指令。</p>
<p>另外，Ksplice 可以影响数据结构，只是需要多做一点儿编程工作。Ksplice 可以在更新期间运行代码来帮助执行这种更改。Ksplice 还提供一对 hooks，可以在更新内核之前和之后运行设置和清理代码。还可以在内核中添加新函数；新函数在原来的内核中没有对等的实现。</p>
<p>实际上，可以对任何内核应用 Ksplice，甚至是那些在 Ksplice 开发出来之前就存在的内核。要想拼接内核，必须有内核的源代码、希望应用的补丁以及编译器，编译器必须能够在对象代码中把内核中的每个函数和数据结构隔离在它们各自的部分中。例如，GNU Compiler Collection (GCC) 提供的标志 -ffunction-sections 和 -fdata-sections 分别提供这些功能（Intel® C 编译器等其他编译器有相似的功能）。Ksplice 更容易处理这种 “模块化” 对象代码。要应用补丁的运行中的内核不需要用这些特殊选项编译。</p>
<p>Ksplice 把从原来的源代码编译生成的内核称为前 内核。从应用补丁后的源代码构建的新内核称为后 内核。正在运行的内核称为运行内核。如果前 内核与运行内核不同（即源代码与正在运行的内核不匹配），Ksplice 就会失败。除了检查这个特殊条件之外，Ksplice 还对比前 内核和后 内核，把每个差异变成一个拼接。所有拼接打包成一个对象文件，准备注入内核。</p>
<p>Ksplice 使用 stop_machine 特性（根据 UNIX 风格，也可能是等效的其他特性）准备拼接新代码。stop_machine 是一个通信信号；它让一个 CPU 继续运行，而让所有其他 CPU 空闲。执行 stop_machine 之后，Ksplice 分析每个有替换标志的函数，判断它是否是活跃的。如果线程的指令指针引用内存中的函数代码，或者线程的内核堆栈引用函数中的返回地址，就认为这个函数是活跃的，无法替换。否则，函数是不活跃的，可以替换。Ksplice 会反复尝试执行替换，但是最终可能放弃。如果是这种情况，它会报告错误并停止运行。</p>
<p>如果你对 Ksplice 的更深的原理感兴趣，请参考这篇<a href="http://www.ksplice.com/doc/ksplice.pdf" target="_blank">论文</a>。</p>
<h4>2. 更新定制的内核</h4>
<p>对于基于桌面和服务器计算机、由厂商或社区项目构建并发布的内核来说，Uptrack Manager 是非常方便的工具。但是，如果内核是经过定制、在本地构建的，它就无效了，因为 Uptrack Manager 无法针对公开发布的操作系统检查内核并生成拼接。但是，可以使用 Ksplice 的 “原始” 实用程序分析公共补丁并创建自己的拼接。</p>
<p>Ksplice 提供一个名为 ksplice-create 的实用程序，它用来创建内核拼接。这个命令需要两个输入：一个补丁文件和正在运行的内核的完整源代码树，其中包含已经应用的所有补丁。提供当前源代码和补丁，Ksplice 就会生成两个内核并对比修订版和原来的版本。ksplice-create 的输出是一个拼接，可以用 ksplice-apply 命令应用它。可以用 ksplice-remove 从内核中删除拼接。</p>
<p>Ksplice 是一项已经验证的技术。作者的文章和技术研究指出，Ksplice 能够动态地对 Linux® 内核应用从 2006 年到 2008 年发布的所有安全和功能性补丁。其中超过三分之二的补丁不需要为更新内核编写特殊代码。对于其他补丁，平均每个补丁只需编写 17 行代码。</p>
<p>在 Linux 源代码中经常会发现很多缺陷，常常迅速地发布补丁以解决缺陷。但是，对于有源代码可用的任何内核，都可以方便地使用 Ksplice，包括 BSD 和 Sun Solaris。Ksplice 也支持 x86、x86_64 和 ARM 处理器。</p>
<p>不过貌似 Oracle 收购 Ksplice 后，不再提供更新定制内核的功能了，毕竟 Oracle 在企业级 Linux 方面只支持自家的产品。如果你想了解更多关于 Oracle Ksplice 产品的信息，请参考<a href="http://www.oracle.com/us/corporate/acquisitions/ksplice/index.html" target="_blank">这里</a>。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2010年12月30日 -- <a href="http://www.chenjunlu.com/2010/12/how-to-install-oracle10g-on-rhel5/" title="在 Red Hat 5 下安装 Oracle 10g 实践">在 Red Hat 5 下安装 Oracle 10g 实践</a> (0)</li><li>2011年09月6日 -- <a href="http://www.chenjunlu.com/2011/09/how-to-uninstall-oracle-10g-under-linux/" title="如何在 Linux 下完全卸载 Oracle 10g ?">如何在 Linux 下完全卸载 Oracle 10g ?</a> (0)</li><li>2010年11月8日 -- <a href="http://www.chenjunlu.com/2010/11/understanding-of-vmlinuz-initrd-and-system-map/" title="理解 vmlinuz, initrd 和 System.map ">理解 vmlinuz, initrd 和 System.map </a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月11日 -- <a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" title="Oracle HA 脚本">Oracle HA 脚本</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/05/oracle-ksplice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何批量删除 Kindle 上的归档文档？</title>
		<link>http://www.chenjunlu.com/2012/05/how-to-remove-all-personal-archive-documents-of-kindle/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-remove-all-personal-archive-documents-of-kindle</link>
		<comments>http://www.chenjunlu.com/2012/05/how-to-remove-all-personal-archive-documents-of-kindle/#comments</comments>
		<pubDate>Mon, 07 May 2012 10:12:10 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[GreaseMonkey]]></category>
		<category><![CDATA[Kindle]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2745</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2746" title="greasemonkey" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/greasemonkey.jpg" alt="greasemonkey" width="320" height="216" /></p>
<a href="http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/" target="_blank">购置 Kindle 后</a>，一直在 ikindle 上订阅新闻，每天清晨 ikindle 都会自动把我定制的新闻推送到我的 Kindle 设备上，Amazon 默认的 Personal Document 配置是开启 Archiving 功能的，所以时间一长，我发现 Kindle 设备的个人归档文档数量猛增，这些归档文档中 99% 是 ikindle 推送过来的新闻，新闻如果失去了时效性当然就没有意义了，所以我决定删除这些文档。然而，在 Amazon 归档文档管理界面下，竟然没有提供一个全部删除的按钮。难道要我手动一个一个删除？呵呵，偷懒的我当然不会那么做。不过我的首先想到的解决方法竟然是按键精灵，惭愧惭愧！虽然这个方法估计可行，但是对于学计算机这么多年的我来说，用这种方法真的会让人笑掉大牙的。所以有了第二个想法：GreaseMonkey！因为我是重度 Google 控，所以我一直在使用 Chrome。所以，Firefox 我几乎没有使用过。最近，我入职 Oracle，发现公司电脑定制的 Windows 7 OBI 中配置了 Firefox 浏览器，这正好给我一个尝试油猴脚本扩展的机会。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2746" title="greasemonkey" src="http://www.chenjunlu.com/wp-content/uploads/2012/05/greasemonkey.jpg" alt="greasemonkey" width="320" height="216" /></p>
<p><a href="http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/" target="_blank">购置 Kindle 后</a>，一直在 ikindle 上订阅新闻，每天清晨 ikindle 都会自动把我定制的新闻推送到我的 Kindle 设备上，Amazon 默认的 Personal Document 配置是开启 Archiving 功能的，所以时间一长，我发现 Kindle 设备的个人归档文档数量猛增，这些归档文档中 99% 是 ikindle 推送过来的新闻，新闻如果失去了时效性当然就没有意义了，所以我决定删除这些文档。然而，在 Amazon 归档文档管理界面下，竟然没有提供一个全部删除的按钮。难道要我手动一个一个删除？呵呵，偷懒的我当然不会那么做。不过我的首先想到的解决方法竟然是按键精灵，惭愧惭愧！虽然这个方法估计可行，但是对于学计算机这么多年的我来说，用这种方法真的会让人笑掉大牙的。所以有了第二个想法：GreaseMonkey！因为我是重度 Google 控，所以我一直在使用 Chrome。所以，Firefox 我几乎没有使用过。最近，我入职 Oracle，发现公司电脑定制的 Windows 7 OBI 中配置了 Firefox 浏览器，这正好给我一个尝试油猴脚本扩展的机会。</p>
<p>先来简单介绍一下油猴脚本吧：</p>
<p>这个扩展在大部分火狐扩展控用户里面被称作——“伟大的油猴子”，是最能体现火狐可定制性的强大的扩展之一，网友起的这个名称已经说明了一切，甚至在火狐用户中有相当一部分人属于“油猴控”。<br />
油猴子究竟能做什么呢？他能够通过最简单的脚本来更改一个网站或者网页的布局、外观、操作。发现某个网站用起来费劲，没关系，找个油猴脚本；发现网站变形，没关系，说不定已经有油猴脚本帮你纠正了；网站隐藏图片链接或者找不到视频下载链接，没问题，油猴脚本同样可以帮助你；想让网站背景图换成自己女友的，没问题，写个油猴脚本轻松搞定。如果你对种类繁杂的油猴脚本感兴趣，请参考<a href="http://userscripts.org/" target="_blank">这里</a>。</p>
<p>再来说说如何利用油猴脚本批量删除 Kindle 上的归档文档，具体过程如下：</p>
<ol>
<li>安装 Firefox 浏览器；</li>
<li>在 Firefox 中安装 GreaseMonkey 扩展；</li>
<li>在 Firefox 中浏览此 <a href="http://userscripts.org/scripts/show/130289" target="_blank">链接</a> ；</li>
<li>安装 Remove all personal documents 脚本;</li>
<li>浏览 <a href="https://www.amazon.com/gp/digital/fiona/manage?ie=UTF8&amp;ref_=gno_yam_myk&amp;#PersonalDocuments" target="_blank">Amazon Personal Documents</a> 页面；</li>
<li>点击 <span style="text-decoration: underline;">remove all items from cloud&#8230;</span> 链接即可批量删除归档文档；</li>
</ol>
<p>因为该方法使用的是油猴脚本，所以该方法只能批量删除该页面内显示的归档文档。在你有很多归档文件的情况下，你还是会多点击几下油猴脚本显示出来的链接。因此，我建议你在使用这种方法批量删除归档文件后，在 <a href="https://www.amazon.com/gp/digital/fiona/manage?ie=UTF8&amp;ref_=gno_yam_myk&amp;#pdocSettings" target="_blank">Personal Document Settings</a> 页面下关闭 Archiving 功能。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年12月2日 -- <a href="http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/" title="Kindle Keyboard 上手玩">Kindle Keyboard 上手玩</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/05/how-to-remove-all-personal-archive-documents-of-kindle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Linode VPS 下搭建 pptp 服务器</title>
		<link>http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-setup-a-pptp-vpn-server-under-linode-vps</link>
		<comments>http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 03:44:04 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[pptp]]></category>
		<category><![CDATA[pptpd]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[VPS]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2714</guid>
		<description><![CDATA[<a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" target="_blank">购买了 Linode VPS</a>，不搭建一个 VPN 服务器实在有点可惜了，在网上搜索了一下具体搭建的方法，发现实现起来还是很容易的，网上有很多可操作的方法，比较流行的服务器类型有三种，pptp，L2TP/IPSec 和 OpenVPN，其中 pptp 的配置过程相对简单，所以我先尝试了配置 pptp，具体的配置过程如下：
<h3>1.准备工作</h3>

1. 因为 pptpd 需要 MPPE 的支持，所以首先检测系统是否符已经编译了 MPPE。如果没有，那请您别往下看了。
下面介绍两种检测方法，只要符合其中的一条就可以：
<blockquote>
<div>[root@chenjunlu ~]# zgrep MPPE /proc/config.gz
CONFIG_PPP_MPPE=y</div></blockquote>
或者
<blockquote>
<div>[root@chenjunlu ~]# cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state</div></blockquote>
恭喜您，可以安装了！]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" target="_blank">购买了 Linode VPS</a>，不搭建一个 VPN 服务器实在有点可惜了，在网上搜索了一下具体搭建的方法，发现实现起来还是很容易的，网上有很多可操作的方法，比较流行的服务器类型有三种，pptp，L2TP/IPSec 和 OpenVPN，其中 pptp 的配置过程相对简单，所以我先尝试了配置 pptp，具体的配置过程如下：</p>
<h3>1.准备工作</h3>
<div>
<p>1. 因为 pptpd 需要 MPPE 的支持，所以首先检测系统是否符已经编译了 MPPE。如果没有，那请您别往下看了。<br />
下面介绍两种检测方法，只要符合其中的一条就可以：</p>
<blockquote>
<div>[root@chenjunlu ~]# zgrep MPPE /proc/config.gz<br />
CONFIG_PPP_MPPE=y</div>
</blockquote>
<p>或者</p>
<blockquote>
<div>[root@chenjunlu ~]# cat /dev/net/tun<br />
cat: /dev/net/tun: File descriptor in bad state</div>
</blockquote>
<p>恭喜您，可以安装了！</p>
<p>2. 由于 pptpd 需要 iptables 支持，所以需要安装 iptables。如果您的服务器上已经安装了 iptables，那么可以只安装 pptp。</p>
<blockquote>
<div>yum install -y ppp iptables</div>
</blockquote>
<p>注意：这里先安装的是 ppp 而不是 pptpd，不要打错了。另：ppp 是一种数据链路层协议类似我们熟知的 pppoe。</p>
<h3>2. 安装和配置 pptpd</h3>
<p>1. 安装 pptpd</p>
<blockquote>
<div>[root@chenjunlu ~]# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.i686.rpm</div>
<div>[root@chenjunlu ~]# rpm -ivh pptpd-1.3.4-2.el6.i686.rpm</div>
</blockquote>
<p>2. 编辑/etc/pptpd.conf 文件</p>
<p>将</p>
<blockquote>
<div>#localip 192.168.0.1<br />
#remoteip 192.168.0.234-238,192.168.0.245</div>
</blockquote>
<p>修改成</p>
<blockquote>
<div>localip 192.168.0.1<br />
remoteip 192.168.0.234-238,192.168.0.245</div>
</blockquote>
<p>注意：此处的  remoteip 指定的 IP 范围是用来给远程连接使用的。如果您远程访问 pptp 服务器，pptp 服务器就会在 remoteip 范围内分配一个 IP 地址给你。localip 的值直接影响到后面要说的 iptables 转发规则的编写，所以建议不要随意改动。</p>
<p>3. 编辑 /etc/ppp/options.pptpd</p>
<p>将</p>
<blockquote>
<div>#ms-dns 10.0.0.1<br />
#ms-dns 10.0.0.2</div>
</blockquote>
<p>改成</p>
<blockquote>
<div>ms-dns 8.8.8.8<br />
ms-dns 8.8.4.4</div>
</blockquote>
<p>这里使用的是 Google 发布的 Public DNS，您也可以修改为 OpenDNS 的 IP，即</p>
<blockquote>
<div>ms-dns 208.67.222.222<br />
ms-dns 208.67.220.220</div>
</blockquote>
<p>4. 设置使用 pptpd 的用户名和密码</p>
<blockquote>
<div>vi /etc/ppp/chap-secrets</div>
</blockquote>
<p>打开后只有两行，而且一个账号都没有</p>
<blockquote>
<div># Secrets for authentication using CHAP<br />
# client        server  secret                  IP addresses</div>
</blockquote>
<p>根据您的需要添加账号，每行一个。<br />
按照：“用户名 pptpd 密码 ip地址”的格式输入，每一项之间用空格分开，例如：</p>
<blockquote><p>vpnuser pptpd 123456 *</p></blockquote>
<h3>3. 修改内核设置</h3>
<div></div>
<div>编辑 /etc/sysctl.conf 文件：</div>
<p>将</p>
<blockquote>
<div>net.ipv4.ip_forward=0</div>
</blockquote>
<p>改成</p>
<blockquote>
<div>net.ipv4.ip_forward=1</div>
</blockquote>
<p>将</p>
<blockquote>
<div>net.ipv4.tcp_syncookies = 1</div>
</blockquote>
<p>改成</p>
<blockquote>
<div>#net.ipv4.tcp_syncookies = 1</div>
</blockquote>
<p>执行以下命令使修改后的内核生效</p>
<blockquote>
<div>sysctl -p</div>
</blockquote>
<h3>4. 添加 iptables 转发规则</h3>
<p>VPS 的 hypervisor 的架构不同，iptables 的转发规则配置方法也不同。</p>
<p>适合于 OpenVZ 架构的配置方法如下：</p>
<blockquote><p>iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT &#8211;to-source VPS 的公网 IP</p></blockquote>
<p>适合于 Xen 架构的配置方法如下：</p>
<blockquote><p>iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE</p></blockquote>
<p>Linode 采用的是 Xen 架构，所以输入</p>
<blockquote>
<div>iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERAD</div>
</blockquote>
<p>添加好转发规则后保存一下并重启 iptables</p>
<blockquote>
<div>/etc/init.d/iptables save<br />
/etc/init.d/iptables restart</div>
</blockquote>
<p>注意：这里我遇到了一个错误，具体见附录</p>
<h3>5. 配置 pptpd 服务</h3>
<p>1. 重启 pptpd 服务</p>
<blockquote>
<div>/etc/init.d/pptpd restart</div>
</blockquote>
<div>2. 配置 pptpd 随系统启动</div>
<blockquote>
<div>chkconfig pptpd on</div>
</blockquote>
<p>至此 pptp 服务端安装全部结束</p>
<h3>6. 附录</h3>
<p>在重启 iptables 时，我遇到如下报错：</p>
<blockquote><p>/etc/init.d/iptables restart</p>
<div>Setting chains to policy ACCEPT: security raw nat mangle fi[FAILED]</div>
</blockquote>
<p>出现这个错误的原因是 Linode VPS 安装 CentOS 5.5 以后内核版本造成的，解决方法如下：</p>
<div>
<p>编辑 /etc/init.d/iptables 找到：</p>
<blockquote><p>echo -n $”${IPTABLES}: Setting chains to policy $policy: ”<br />
ret=0<br />
for i in $tables; do<br />
echo -n “$i ”<br />
case “$i” in<br />
+    security)<br />
+    $IPTABLES -t filter -P INPUT $policy \<br />
+        &amp;&amp; $IPTABLES -t filter -P OUTPUT $policy \<br />
+        &amp;&amp; $IPTABLES -t filter -P FORWARD $policy \<br />
+        || let ret+=1<br />
+    ;;<br />
raw)<br />
$IPTABLES -t raw -P PREROUTING $policy \<br />
&amp;&amp; $IPTABLES -t raw -P OUTPUT $policy \<br />
|| let ret+=1<br />
;;<br />
filter)<br />
$IPTABLES -t filter -P INPUT $policy \<br />
&amp;&amp; $IPTABLES -t filter -P OUTPUT $policy \<br />
&amp;&amp; $IPTABLES -t filter -P FORWARD $policy \<br />
|| let ret+=1<br />
;;</p></blockquote>
<p>前面有＋号的为添加的</p>
<p>然后保存退出</p>
<p>重启 iptables 服务：</p>
<blockquote>
<div>[root@chenjunlu ~]# service iptables restart<br />
iptables: Flushing firewall rules:                         [  OK  ]<br />
iptables: Setting chains to policy ACCEPT: security raw nat[  OK  ]filter<br />
iptables: Unloading modules:                               [  OK  ]<br />
iptables: Applying firewall rules:                         [  OK  ]</div>
</blockquote>
<h3> 7. 后记</h3>
<p>相对于 pptp 来说 OpenVPN 加密型更强，而且穿透性更强。OpenVPN 有很多优点，比如其可以开在任意端口上，并且和 PPTP / L2TP 等并不冲突，可以实现并存，所以我会以后尝试配置一个 OpenVPN Server，以备不时之需。如果您对配置 OpenVPN 服务感兴趣的话，请继续关注我的博客。(#^_^#)</p>
<blockquote><p>Update：<br />
配置 pptp 会遇到挺多问题的，像中国移动的 cmnet 就用不了 pptp，出现 619 错误。可以打开 /etc/ppp/pptpd-options 中的 debug 和 dump 选项，然后在 /var/log/debug 和 /var/log/messages 中查看出错信息。</p></blockquote>
</div>
</div>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年04月21日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/" title="Linode VPS 上实现 WordPress 邮件通知">Linode VPS 上实现 WordPress 邮件通知</a> (0)</li><li>2012年04月20日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" title="博客搬迁 Linode VPS 配置笔记">博客搬迁 Linode VPS 配置笔记</a> (3)</li><li>2012年05月13日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/" title="Linode VPS 下的 FTP 服务的搭建">Linode VPS 下的 FTP 服务的搭建</a> (0)</li><li>2012年04月18日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/" title="备份 GoDaddy 主机网站文件">备份 GoDaddy 主机网站文件</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开始鼓捣 DD-WRT 固件</title>
		<link>http://www.chenjunlu.com/2012/04/getting-started-with-dd-wrt-firmware/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=getting-started-with-dd-wrt-firmware</link>
		<comments>http://www.chenjunlu.com/2012/04/getting-started-with-dd-wrt-firmware/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 14:15:51 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[dd-wrt]]></category>
		<category><![CDATA[Linksys]]></category>
		<category><![CDATA[OpenWrt]]></category>
		<category><![CDATA[QoS]]></category>
		<category><![CDATA[Tomato]]></category>
		<category><![CDATA[WayOS]]></category>
		<category><![CDATA[WRH54G]]></category>
		<category><![CDATA[WRT54G]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2664</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2694" title="openwrt_logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/04/openwrt_logo.png" alt="openwrt_logo" width="305" height="162" /></p>
家里的 Linksys WRH54G 已经买了快3年了，最近一段时间发现，以前从不掉线得它，竟然出现了不稳定的情况，自己在网上找了找原因，发现随着电子产品的不断升级，路由器也该更新换代了，原来小小的路由器里面也有 CPU 和 Flash 内存，随着网络速度以及终端运算速度不断加快，路由器的配置也是跟着一块增长的。难道我要购买新的的路由器吗? 有没有其他解决方案？在网上随便逛了逛，发现路由器的固件不但可以升级，而且有些品牌的产品还是可以刷第三方固件。虽然我还是决定花1000元购买 Linksys E4200 来替换原来的 WRH54G，但是淘汰下来的 WRH54G 给了我尝试刷新第三方固件的机会。嘿嘿！

先来说说第三方固件的历史吧：]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2694" title="openwrt_logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/04/openwrt_logo.png" alt="openwrt_logo" width="305" height="162" /></p>
<p>家里的 Linksys WRH54G 已经买了快3年了，最近一段时间发现，以前从不掉线得它，竟然出现了不稳定的情况，自己在网上找了找原因，发现随着电子产品的不断升级，路由器也该更新换代了，原来小小的路由器里面也有 CPU 和 Flash 内存，随着网络速度以及终端运算速度不断加快，路由器的配置也是跟着一块增长的。难道我要购买新的的路由器吗? 有没有其他解决方案？在网上随便逛了逛，发现路由器的固件不但可以升级，而且有些品牌的产品还是可以刷第三方固件。虽然我还是决定花1000元购买 Linksys E4200 来替换原来的 WRH54G，但是淘汰下来的 WRH54G 给了我尝试刷新第三方固件的机会。嘿嘿！</p>
<p>先来说说第三方固件的历史吧：</p>
<p>对无线路由器进行固件刷新的操作并不是在路由器出现之时就有的。早期的无线路由器在功能方面的设计很简单，仅仅提供了简单的无线 AP 与宽带路由器结合的功能，而且厂商自身的固件都是加密且不公开的。因此，早期的无线路由器是不可能通过刷新固件来提升性能的，所有功能都是不能够改变的，功能只能随着产品的诞生而出现。针对无线路由器进行刷新固件驱动的操作是在 Linksys 产品中首次出现的。</p>
<p>众所周知，Linksys 是大名鼎鼎的 Cisco 的子公司，它一直致力于 SOHO、小型企业的网络设备研发。Linksys 公司在2003年发行的 WRT54G 无线路由器使用了 802.11g 标准，使得带宽在理论上能够达到 54M。有 Linux 爱好者发现它的固件是基于 Linux，然而 Linux 基于 GPL 发布许可证，该许可证规定 Cisco 应该把 WRT54G 的固件的源代码公开。</p>
<p>2003年3月，基于公众压力 Linksys 公开了 WRT54G 的源代码。此后就有了一些基于 Linksys 源代码的第三方固件。此后，网上出现了很多不同版本的固件去增强原有的功能。大多数的固件都是99%使用 Linksys 的源码，只有1%是加上去的，每一种固件都是针对特定的市场而设计，这样做有两个缺点，第一个是难以集合各版本固件的长处，第二个是这版本距离 Linux 正式发行版越来越远。OpenWrt 选择了另一条路，它从零开始，一点一点的把各个软件加入去，使其接近 Linksys 版固件的功能，而 OpenWrt 的成功之处是它的文件系统是可写的，开发者无需在每一次修改后重新编译，另外，它更像一个小型的 Linux 系统，也加快了开发速度。</p>
<p>后来就出现了 DD-WRT，Tomato，还有个用得少的 WayOS。其中 DD-WRT 和 Tomato 是目前最热门的固件，都是基于 OpenWrt 的。而 WayOS 则是国内的一款第3方固件，基于 Tomato，作者据说是思科的 QoS 前工程师，此款固件可支持4 WAN 口，QoS 也很不错，只可惜这是收费的，免费的支持双 WAN 但是接入点有限制（只支持4台电脑接入）。</p>
<ul>
<li>DD-WRT 代表功能：中继(repeater):扩展你的无线范围,在也不用担心信号问题.</li>
<li>Tomato 代表功能：
<ol>
<ol>1. 双 WAN：双宽带叠加，速度提升.</ol>
</ol>
<ol>2. QoS：智能 QoS，封杀 P2P 软件，独立 IP 流量设定，不在为网络堵塞头疼.</ol>
</li>
<li>WayOS 代表功能：多 WAN（2个以上的选择).</li>
</ul>
<p>我选择 DD-WRT 固件来给我的 WRH54G 进行升级，由于我的 WRH54G 的 Flash 内存只有 2MB，所以我只能刷 Micro 版的 DD-WRT 固件，刷机的过程还是很简单的，官方网站上就有教程，如果你对自己的英文不自信，请参考这篇傻瓜版中文图文<a href="http://blog.csdn.net/fm810/article/details/3969492" target="_blank">教程</a>。<br />
DD-WRT 固件的路由器和一般的路由器相比有什么有特点呢？基础的我就不说了，说说不同：</p>
<ol>
<li>ddns 支持动态域名</li>
<li>pptp VPN</li>
<li>OpenVPN</li>
<li>脱机下载</li>
<li>QoS</li>
<li>强大的无线中继的无线应用功能</li>
<li>3G (未完全稳定)</li>
<li>dual WAN 双线接入</li>
<li>自定义 VLAN</li>
<li>独立的嵌入式 Linux 系统</li>
<li>Wake-on-LAN 网络唤醒</li>
<li>网络管理</li>
<li>打印服务器</li>
</ol>
<p>我最喜欢的是 DD-WRT 的 VPN 功能和一个可操作的 Linux 这两点。</p>
<p>如果只要拨号共享上网，一般的无线宽带路由就可以了，如果要实现下面应用，可以考虑买个可以刷 DD-WRT 的路由器：</p>
<ol>
<li>几个人用共一个ADSL，你又怕他们影响你，限制他们，或者说你想下载又怕影响网速，想用 QoS</li>
<li>远程管理远端的内网电脑</li>
<li>玩玩脱机下载</li>
<li>有多条接入，不想浪费</li>
<li>内外网的穿透，比如想穿透一些网管弄的限制</li>
<li>远程组网</li>
<li>3G路由器</li>
<li>弄个打印服务器</li>
</ol>
<p>由于路由器硬件配置及满足用户的不同需求，DD-WRT 固件有很多 fork，各个版本的说明如下：</p>
<ul>
<li>Micro (最小版) 只能用于2MB FLASH</li>
<li>Mini (迷你版) 可用于4MB FLASH</li>
<li>Standard (STD标准版) 可用于4MB FLASH</li>
<li>VOIP (带VOIP功能版) 支持网络电话的版本</li>
<li>Mega (完整版) 全功能版本只能用在8MB FLASH</li>
<li>vpn_generic (VPN版)  支持虚拟专用网络的版本</li>
</ul>
<p>还有 newd 和 vint 驱动之分：</p>
<ul>
<li>newd 采用新版驱动，支持多SSID，CPU 为 Broadcom BCM535x</li>
<li>vint 采用旧版驱动，CPU 为 BROADCOM BCM47XX</li>
</ul>
<p>如何查看应刷哪版驱动？</p>
<p>telnet 登录 DD-WRT 路由，提示符后面输入以下命令：</p>
<blockquote><p>nvram show | grep corerev</p></blockquote>
<ol>
<li>wl0_corerev=4        则一定要使用 vint 版</li>
<li>wl0_corerev &gt;=5 &lt;=7  则 vint 版 和 newd 版都可用，建议使用 vint 版</li>
<li>wl0_corerev &gt;=8      则 vint 版 和 newd 版都可用</li>
<li>wl0_corerev &gt;9       则一定要使用 newd 版</li>
</ol>
<p>介绍了这么多概念的东西，想必大家一定觉得烦了，其实 DD-WRT 最吸引人的地方就是它的开放性，想想一个平时那么不起眼的无线路由器，被这么多 Geek 改造成一个小型的嵌入式系统，而且功能那么的丰富，让人爱不释手，这是一件多么神奇的事啊！你想实现在家里共享一个国外 IP 吗？你想全面准确的控制家里所有网络终端的的网络行为吗？你想突破公司网管的限制吗？请考虑 DD-WRT 固件。嘿嘿，也请关注我博客中未来的文章，我会汇总网上有价值的文章，详细的为大家讲解 DD-WRT 固件的本质和具体应用。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/04/getting-started-with-dd-wrt-firmware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>完美解决 Windows 7 DNS 服务器无响应问题</title>
		<link>http://www.chenjunlu.com/2012/04/how-to-slove-dns-issue-in-windows-7/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-slove-dns-issue-in-windows-7</link>
		<comments>http://www.chenjunlu.com/2012/04/how-to-slove-dns-issue-in-windows-7/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 10:43:14 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[netsh]]></category>
		<category><![CDATA[Windows7]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2668</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2674" title="microsoft-windows-7-logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/04/microsoft-windows-7-logo.png" alt="microsoft-windows-7-logo" width="304" height="229" /></p>
去年的10月份，为了玩最新版的实况足球游戏，我把家中的 iMac 用 Boot Camp 安装了 Windows 7 的旗舰版，然而该系统安装成功后一直存在网络问题，用系统自带的诊断工具发现是 DNS 服务器无响应的问题，上网找了找，发现有很多人有类似的问题，该问题的共性是：
<ol>
	<li>操作系统是 Windows 7；</li>
	<li>使用路由器进行 ADSL 拨号（无论有线连接还是无线连接）；</li>
	<li>无线网卡或网卡无法自动识别正确的 ISP 提供的 DNS 地址（往往识别出来的地址是 192.168.1.1）；</li>
	<li>在网卡的配置界面强制指定正确的 DNS 地址或 OpenDNS 地址，有一定效果但网络依然时断时续；</li>
	<li>同样的网络环境使用 Windows XP 没有任何网络问题；</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2674" title="microsoft-windows-7-logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/04/microsoft-windows-7-logo.png" alt="microsoft-windows-7-logo" width="304" height="229" /></p>
<p>去年的10月份，为了玩最新版的实况足球游戏，我把家中的 iMac 用 Boot Camp 安装了 Windows 7 的旗舰版，然而该系统安装成功后一直存在网络问题，用系统自带的诊断工具发现是 DNS 服务器无响应的问题，上网找了找，发现有很多人有类似的问题，该问题的共性是：</p>
<ol>
<li>操作系统是 Windows 7；</li>
<li>使用路由器进行 ADSL 拨号（无论有线连接还是无线连接）；</li>
<li>无线网卡或网卡无法自动识别正确的 ISP 提供的 DNS 地址（往往识别出来的地址是 192.168.1.1）；</li>
<li>在网卡的配置界面强制指定正确的 DNS 地址或 OpenDNS 地址，有一定效果但网络依然时断时续；</li>
<li>同样的网络环境使用 Windows XP 没有任何网络问题；</li>
</ol>
<p>网上除了给出强制指定 DNS 服务器地址的解决方法，还要求禁止 IPv6 功能，但经过我的验证该方法也不好用，当然目前我的电脑配置中是禁用 IPv6 功能的，但我认为它是关键操作，而是因为我比较懒，实在不愿意激活 IPv6 功能去试试系统的网络是否还是好用的，毕竟 IPv6 功能对我来说还比较遥远。好了，下面我来说说完美解决方案吧。</p>
<p>我的解决方案是基于两篇老外的文章的，其中一篇<a href="http://www.neowin.net/forum/topic/729566-dns-issues-in-windows-7-but-not-in-windows-xp/" target="_blank">文章</a>里面的老外推荐用 netsh 工具重启 tcp 和 ip 服务，该命令确实有效果，但是使用一段时间后问题依旧出现。</p>
<p>完美的解决方案是这篇<a href="http://support.microsoft.com/kb/929868/en-us" target="_blank">文章</a>指出的：</p>
<blockquote><p>To work around this issue, change the Windows Scaling factor to 2. To do this, follow these steps:<br />
1.Click Start, point to All Programs, and then click Accessories.<br />
2.Right-click Command Prompt, and then click Run as administrator.<br />
3.In the Administrator: Command Prompt window, type the following command, and then press ENTER:<br />
netsh interface tcp set global autotuninglevel=highlyrestricted</p></blockquote>
<p>有人说貌似 Windows 7 强化了网络发现功能，所以造成该问题，这个我也不敢肯定，不过在按上面的方法操作确实解决了 Windows 7 DNS 服务器无响应问题。如果您对该问题形成根源有独到的见解和合理的解释，欢迎留言讨论。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/04/how-to-slove-dns-issue-in-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linode VPS 上实现 WordPress 邮件通知</title>
		<link>http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-enable-workpress-mail-notifacation-on-linode-vps</link>
		<comments>http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 04:30:09 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2655</guid>
		<description><![CDATA[<a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" target="_blank">博客迁移 Linode VPS </a>后，一切系统服务都要自己动手配置。虽然很配置过程很辛苦，但是这个过程还是满有乐趣的，大大提高了我的动手能力，虽然未来的工作方向是做售前技术，但是如果很强动手能力强和实践经验相信给人的印象一定是加分的。跑题了，呵呵。言归正传，成功迁移博客后发现，原来博客中的数据库备份插件的定期备份功能以及 Tumblrize 同步插件邮件同步功能都不好用了，两者的共同点都是调用 Wordpress 内置 mail() 函数实现邮件发送。所以一定是 Linode VPS 上的 sendmail 模块没有配置好，具体配置过程如下：

1. 安装 sendmail 模块
2. 启动 sendmail服务
3. 设置 sendmail 开机自运行
4. 修改 php.ini 的配置，调用 sendmail 功能
5. 重新启动 VPS 主机]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" target="_blank">博客迁移 Linode VPS </a>后，一切系统服务都要自己动手配置。虽然很配置过程很辛苦，但是这个过程还是满有乐趣的，大大提高了我的动手能力，虽然未来的工作方向是做售前技术，但是如果很强动手能力强和实践经验相信给人的印象一定是加分的。跑题了，呵呵。言归正传，成功迁移博客后发现，原来博客中的数据库备份插件的定期备份功能以及 Tumblrize 同步插件邮件同步功能都不好用了，两者的共同点都是调用 WordPress 内置 mail() 函数实现邮件发送。所以一定是 Linode VPS 上的 sendmail 模块没有配置好，具体配置过程如下：</p>
<p>1. 安装 sendmail 模块</p>
<blockquote>
<pre> yum install sendmail</pre>
</blockquote>
<p>2. 启动 sendmail服务</p>
<blockquote>
<pre> service sendmail start</pre>
</blockquote>
<p>3. 设置 sendmail 开机自运行</p>
<blockquote>
<pre> chkconfig sendmail on</pre>
</blockquote>
<p>4. 修改下 php.ini 的配置，调用 sendmail 功能</p>
<blockquote>
<pre> vim /etc/php.ini
 ...
 sendmail_path = /usr/sbin/sendmail -t –i
 ...</pre>
</blockquote>
<p>5. 重新启动 VPS 主机</p>
<p>其实 sendmail 模块还是存在安全隐患的，如果你十分看重 VPS 的安全性，请不要配置 sendmail 模块，如果还你需要 WordPress 的邮件通知功能，那么请你选择 Postfix 或其他相对安全解决<a href="http://library.linode.com/email" target="_blank">方案</a>。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年04月20日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" title="博客搬迁 Linode VPS 配置笔记">博客搬迁 Linode VPS 配置笔记</a> (3)</li><li>2012年04月29日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/" title="在 Linode VPS 下搭建 pptp 服务器">在 Linode VPS 下搭建 pptp 服务器</a> (0)</li><li>2012年05月13日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/" title="Linode VPS 下的 FTP 服务的搭建">Linode VPS 下的 FTP 服务的搭建</a> (0)</li><li>2012年04月18日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/" title="备份 GoDaddy 主机网站文件">备份 GoDaddy 主机网站文件</a> (0)</li><li>2012年05月14日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/" title="解决 WordPress 后台无法更新的问题">解决 WordPress 后台无法更新的问题</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>博客搬迁 Linode VPS 配置笔记</title>
		<link>http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-migrate-wordpress-to-linode-vps</link>
		<comments>http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 06:56:05 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2620</guid>
		<description><![CDATA[由于众所周知的原因，使用了位于美国的 GoDaddy 主机的这个博客一直会间歇性地无法访问。正巧这几天听到外交部发言人姜瑜在中国互联网可访问性问题上以其一贯的逻辑重申“中国互联网发展迅速，网民已超过4亿”，那好吧，我换一个主机就是了。

国内的主机是不考虑的。位于美国的主机虽然可靠性较高，但是从中国大陆访问往往会有问题（这也是这次换主机的原因），于是 Linode 新开设的位于日本东京的 VPS 成了一个很好的选择。如果大家想更多了解 Linode，请参考 <a href="http://linode.ofeva.com/" target="_blank">这里</a>。

Linode 东京节点的 VPS 连接速度非常快，ping 值和国内网站相当，稳定性也非常好。通过信用卡付费之后，便开始了博客迁移的准备。在迁移过程中查找了大量的参考资料，毕竟第一次迁移，不明白的地方很多。Linode 的官方文档还是不错的，请参考这篇 <a href="http://library.linode.com/lamp-guides/centos-6">文章</a> 配置 LAMP 和 phpMyAdmin。

如下是我的配置过程：]]></description>
			<content:encoded><![CDATA[<p>由于众所周知的原因，使用了位于美国的 GoDaddy 主机的这个博客一直会间歇性地无法访问。正巧这几天听到外交部发言人姜瑜在中国互联网可访问性问题上以其一贯的逻辑重申“中国互联网发展迅速，网民已超过4亿”，那好吧，我换一个主机就是了。</p>
<p>国内的主机是不考虑的。位于美国的主机虽然可靠性较高，但是从中国大陆访问往往会有问题（这也是这次换主机的原因），于是 Linode 新开设的位于日本东京的 VPS 成了一个很好的选择。如果大家想更多了解 Linode，请参考 <a href="http://linode.ofeva.com/" target="_blank">这里</a>。</p>
<p>Linode 东京节点的 VPS 连接速度非常快，ping 值和国内网站相当，稳定性也非常好。通过信用卡付费之后，便开始了博客迁移的准备。在迁移过程中查找了大量的参考资料，毕竟第一次迁移，不明白的地方很多。Linode 的官方文档还是不错的，请参考这篇 <a href="http://library.linode.com/lamp-guides/centos-6">文章</a> 配置 LAMP 和 phpMyAdmin。</p>
<p>如下是我的配置过程：</p>
<div>
<h3>1.基本设置</h3>
<h4></h4>
<h4>1.1 设置 hostname</h4>
<blockquote>
<pre>echo "HOSTNAME=chenjunlu.com" &gt;&gt; /etc/sysconfig/network
hostname "chenjunlu.com"</pre>
</blockquote>
<h4>1.2 配置 vim</h4>
<p>使之彩色显示代码，同时还支持行号标记和鼠标定位。编辑 vim 配置文件，</p>
<blockquote>
<pre>vim /etc/vimrc</pre>
</blockquote>
<p>从键盘输入 <code>i</code> 进入编辑模式。按 PgDn 到文本最后，在末尾分三行输入：</p>
<blockquote>
<pre>syntax on
set nu
set mouse=a</pre>
</blockquote>
<p>从键盘输入 <code>Ctrl+c</code>，然后 <code>:wq</code> 保存、退出。</p>
<h4>1.3 更新 hosts 配置文件</h4>
<p>输入</p>
<blockquote>
<pre>vim /etc/hosts</pre>
</blockquote>
<p>打开编辑。</p>
<p>在最后添加</p>
<blockquote>
<pre>106.187.50.xxx chenjunlu.com</pre>
</blockquote>
<p>保存退出。</p>
<h4>1.4 配置网络</h4>
<p>默认情况下，Linode VPS 使用 DHCP 来配置网络，这样做需要 VPS 运行 dhcp 客户端进程来从主控制台获取本 VPS 的 IP。当然会浪费一些资源了（CPU和内存），而且还需要开放 63 端口。所以这里采取静态网络配置来避免这些问题。</p>
<p>从 Linode Manager 中的 <strong>Remote Access</strong> 标签页中可以获知自己 VPS 的网络配置信息。比如我的：</p>
<blockquote>
<pre>Public IP: 106.187.50.xxx
Default Gateways 106.187.50.1
DNS Resolvers 106.187.34.20
106.187.35.20
106.187.36.20</pre>
</blockquote>
<p>修改 DNS 解析设置：</p>
<blockquote>
<pre>vim /etc/resolv.conf</pre>
</blockquote>
<p>按照上面的 DNS Resolvers 对应录入</p>
<blockquote>
<pre>domain members.linode.com
search members.linode.com
nameserver 106.187.34.20
nameserver 106.187.35.20
nameserver 106.187.36.20
options rotate</pre>
</blockquote>
<p>保存并退出。</p>
<p>然后配置静态 IP：</p>
<blockquote>
<pre>vim /etc/sysconfig/network-scripts/ifcfg-eth0</pre>
</blockquote>
<p>对应录入</p>
<blockquote>
<pre># Configuration for eth0
DEVICE=eth0
BOOTPROTO=none
# 暂时不启用 IPv6
IPV6INIT=no</pre>
<pre># This line ensures that the interface will be brought up during boot.
ONBOOT=yes

# The address, netmask and gateway are all necessary.
IPADDR=106.187.59.xxx
NETMASK=255.255.255.0
GATEWAY=106.187.50.1</pre>
</blockquote>
<p>保存并退出。</p>
<p>因为 DHCP 已经不需要了，可以使用 chkconfig –list 命令查看 dhcp 相关服务的状态，然后停止它们。甚至可以删除相关软件包：</p>
<blockquote>
<pre>yum remove dhcp</pre>
</blockquote>
<p>重起 VPS 即可生效。</p>
<h4>1.5 设置时区为 Hongkong</h4>
<p>反正香港与上海是一个时区的。</p>
<p>如果要查找其他时区文件，则</p>
<blockquote>
<pre>ls /usr/share/zoneinfo</pre>
</blockquote>
<p>上海时区文件应该在 <code>Asia</code> 目录下。</p>
<p>将香港时区文件设置符号链接到 <code>localtime</code></p>
<blockquote>
<pre>ln –sf /usr/share/zoneinfo/Hongkong /etc/localtime</pre>
</blockquote>
<h3 id="lamp">2.安装 LAMP</h3>
<h4></h4>
<h4>2.1 先更新系统</h4>
<blockquote>
<pre>yum update</pre>
</blockquote>
<h4 id="apache">2.2 安装并配置 Apache</h4>
<p>安装：</p>
<blockquote>
<pre>yum install httpd</pre>
</blockquote>
<p>备份配置文件（建议对于所有的配置文件，做任何更改前都先备份一份，以便应对未知错误）</p>
<blockquote>
<pre>cp /etc/httpd/conf/httpd.conf httpd.conf.raw</pre>
</blockquote>
<p>因为默认情况下，位于 <code>/etc/httpd/conf.d/</code> 目录下的所有以 <code>.conf</code> 结尾的文件都会被读取，并按照字母顺序加载做为 <code>Apache</code> 的配置，所以增加虚拟主机的时候，实际上不需要修改 <code>/etc/httpd/conf/httpd.conf</code>，而是在 <code>/etc/httpd/conf.d/ </code> 下新建一个配置文件来配置虚拟主机。</p>
<p>配置虚拟主机：</p>
<blockquote>
<pre>vim /etc/httpd/conf.d/vhost.conf</pre>
</blockquote>
<p>输入下面的内容（# 号后面的改行内容是注释）：</p>
<blockquote>
<pre>Listen 2082
NameVirtualHost *:80
NameVirtualHost *:2082

&lt;VirtualHost *:80&gt;
ServerAdmin admin@chenjunlu.com
ServerName chenjunlu.com
ServerAlias www
DocumentRoot /srv/www/chenjunlu.com/htdocs/

&lt;Directory "/srv/www/chenjunlu.com/htdocs/"&gt;
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
&lt;/Directory&gt;

ErrorLog /srv/www/chenjunlu.com/logs/error.log
CustomLog /srv/www/chenjunlu.com/logs/access.log combined
#ServerSignature Off
&lt;/VirtualHost&gt;

&lt;VirtualHost *:2082&gt;
ServerAdmin admin@chenjunlu.com
DocumentRoot /srv/www/phpmyadmin/htdocs/

ErrorLog /srv/www/phpmyadmin/logs/error.log
CustomLog /srv/www/phpmyadmin/logs/access.log combined
#ServerSignature Off
&lt;/VirtualHost&gt;</pre>
</blockquote>
<p>虽然配置文件写好了，但是还不能启动 <code>httpd</code> 进程，因为上面设置的各个文件夹（网站目录）还没有创建。</p>
<p>创建各个虚拟主机的文件夹</p>
<blockquote>
<pre>mkdir –p /srv/www/chenjunlu.com/htdocs
mkdir /srv/www/chenjunlu.com/logs
mkdir –p /srv/www/phpmyadmin/htdocs
mkdir /srv/www/phpmyadmin/logs</pre>
</blockquote>
<p>现在可以启动 Apache 进程 <code>httpd</code> 了</p>
<blockquote>
<pre>/etc/init.d/httpd start</pre>
</blockquote>
<p>如果已经做好了 DNS 域名解析，现在用浏览器打开域名应该能够看到 Apache 的测试页面。我是通过 DNSPod 服务配置的域名解析。</p>
<p>为了能够在系统启动时自动运行 Apache 服务器，需要运行下面的指令：</p>
<blockquote>
<pre>/sbin/chkconfig --levels 235 httpd on</pre>
</blockquote>
<p>然后重新加载 <code>httpd</code></p>
<blockquote>
<pre>/etc/init.d/httpd reload</pre>
</blockquote>
<p>或者重新启动 <code>httpd</code></p>
<blockquote>
<pre>/etc/init.d/httpd restart</pre>
</blockquote>
<h4 id="mysql">2.3 安装和配置 MySQL</h4>
<p><strong>2.3.1 安装</strong></p>
<blockquote>
<pre>yum install mysql-server</pre>
</blockquote>
<p><strong>2.3.2 加入随系统启动</strong></p>
<blockquote>
<pre>/sbin/chkconfig --levels 235 mysqld on</pre>
</blockquote>
<p><strong>2.3.3 启动 mysql 守护进程（mysqld）</strong></p>
<blockquote>
<pre>/etc/init.d/mysqld start</pre>
</blockquote>
<p><strong>2.3.4 安全配置 MySQL</strong></p>
<p>使用 MySQL 内建的安全配置脚本进行配置</p>
<blockquote>
<pre>[root@chenjunlu ~]# mysql_secure_installation

 NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
       SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

 In order to log into MySQL to secure it, we'll need the current
 password for the root user.  If you've just installed MySQL, and
 you haven't set the root password yet, the password will be blank,
 so you should just press enter here.

 Enter current password for root (enter for none):
 OK, successfully used password, moving on...

 Setting the root password ensures that nobody can log into the MySQL
 root user without the proper authorisation.

 Set root password? [Y/n] y
 New password:
 Re-enter new password:
 Sorry, passwords do not match.

 New password:
 Re-enter new password:
 Password updated successfully!
 Reloading privilege tables..
 ... Success!

 By default, a MySQL installation has an anonymous user, allowing anyone
 to log into MySQL without having to have a user account created for
 them.  This is intended only for testing, and to make the installation
 go a bit smoother.  You should remove them before moving into a
 production environment.

 Remove anonymous users? [Y/n] y
 ... Success!

 Normally, root should only be allowed to connect from 'localhost'.  This
 ensures that someone cannot guess at the root password from the network.

 Disallow root login remotely? [Y/n] y
 ... Success!

 By default, MySQL comes with a database named 'test' that anyone can
 access.  This is also intended only for testing, and should be removed
 before moving into a production environment.

 Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

 Reloading the privilege tables will ensure that all changes made so far
 will take effect immediately.

 Reload privilege tables now? [Y/n] y
 ... Success!

 Cleaning up...

 All done!  If you've completed all of the above steps, your MySQL
 installation should now be secure.

 Thanks for using MySQL!</pre>
</blockquote>
<p>这里需要配置 mysql 根用户和密码、清除其他用户、清除不需要的数据库等。然后使用 MySQL 的 root 帐户（不同于 Linux 的 root 帐户）登录进去</p>
<blockquote>
<pre>mysql –u root –p</pre>
</blockquote>
<p>创建一个新数据库给 WordPress 用（这里取名完全可以参考 GoDaddy 空间上的配置，这样做节省了配置 wp-config.php 文件的时间）</p>
<blockquote>
<pre>create database wordpress;</pre>
</blockquote>
<p>创建一个新用户，并将该数据库的权限赋给他（这里只是举例，用户名为 newdbuser，密码为 dbuserpassword）</p>
<blockquote>
<pre>grant all on wordpress.* to ‘newdbuser’ identified by ‘dbuserpassword’;</pre>
</blockquote>
<p>更新权限</p>
<blockquote>
<pre>flush privileges;</pre>
</blockquote>
<p>退出数据库</p>
<blockquote>
<pre>quit</pre>
</blockquote>
<p>其它的先不做了，回头用图形界面的 phpMyAdmin 来做。</p>
<h3>3.安装 phpMyAdmin</h3>
<p>去 phpMyAdmin 官网下载压缩包，然后解压到之前配置虚拟主机的路径中即可。</p>
<p>修改 phpMyAdmin 的配置设置：</p>
<blockquote>
<pre>vi /etc/phpMyAdmin/config.inc.php</pre>
</blockquote>
<p>找到其中的如下代码段：</p>
<blockquote>
<pre>$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['blowfish_secret'] = '随便填上一串乱七八糟的字符即可';</pre>
</blockquote>
<pre>重启 Apache 使配置生效：</pre>
<blockquote>
<pre>service httpd restart</pre>
</blockquote>
<p>现在就可以通过 http://域名<code>:2082/phpmyadmin </code>访问 phpMyAdmin 服务了。</p>
<p>使用前面创建的用户名和密码登录 phpMyAdmin 即可导入原来 WordPress 博客的数据库备份。</p>
<p>然后还可以按照自己的使用习惯对 phpMyAdmin 的行为进行配置，请参考我写的另一篇文章：<a title="配置 phpMyAdmin" href="http://cnzhx.net/blog/config-phpmyadmin/">个性化配置 phpMyAdmin</a>。</p>
<h3 id="wwwuser">4.创建一个新帐户以访问网站文件</h3>
<p>访问服务器的时候虽然可以用 root，但是安全起见，最好禁止 root 用户远程登陆服务器。所以这里新建一个普通用户，并将网站文件夹的属主改为新用户。</p>
<h4>4.1 增加新用户</h4>
<blockquote>
<pre>useradd username</pre>
</blockquote>
<p>这里只是举例使用 username 做为用户名，下同。</p>
<h4>4.2 为新用户设置密码</h4>
<blockquote>
<pre>passwd password</pre>
</blockquote>
<h4>4.3 修改 <span style="font-family: monospace;">/srw/www</span> 及其子目录和文件的属主和组为新用户及其组</h4>
<blockquote>
<pre>cd /srv/www/</pre>
<pre>chown –R username:username *</pre>
</blockquote>
<h4>4.4 上传网站文件</h4>
<p>使用新创建的用户，通过 FileZilla（或其它 sftp 软件）登录服务器，将网站文件上传到前面设置虚拟服务器时设定的文件夹。</p>
<h4>4.5 文件及文件夹权限设置</h4>
<p>进入网站根目录，以本文为例：</p>
<blockquote>
<pre>cd /srv/www/chenjunlu.com/htdocs</pre>
</blockquote>
<p>所有文件夹属性修改为 775</p>
<blockquote>
<pre>find -type d -print0 |xargs -0 chmod 775</pre>
</blockquote>
<p>将所有文件的属性修改为 664</p>
<blockquote>
<pre>find -type f -print0 |xargs -0 chmod 644</pre>
</blockquote>
<p>进入 WordPress 安装目录的<code>wp-content </code>目录中：</p>
<blockquote>
<pre>cd /srv/www/chenjunlu.com/htdocs/wp-content/</pre>
</blockquote>
<p>首先为了保证上传附件功能，修改 <code>uploads</code> 文件夹以及其子文件夹和文件的属性(属主改为 apache，组不变：</p>
<blockquote>
<pre>chown –R apache:username uploads
chmod 755 uploads</pre>
</blockquote>
<p>如果 uploads 文件夹中已有原先建立的一些文件，还需要执行如下操作：</p>
<p>继续进入 uploads 目录</p>
<blockquote>
<pre>cd uploads</pre>
</blockquote>
<p>修改该文件夹中的其它文件属性</p>
<blockquote>
<pre>find -type d -print0 |xargs -0 chmod 755
find -type f -print0 |xargs -0 chmod 664</pre>
</blockquote>
<p>为了使 <a title="WordPress缓存插件性能对比" href="http://cnzhx.net/blog/wordpress-cache-plugins-contrast/">WPSC</a> 可创建缓存文件，在 <code>wp-content</code> 目录下新建文件夹 <code>cache</code>，并同样修改属性：</p>
<blockquote>
<pre>mkdir cache
chown –R apache:username cache
chmod 755 cache</pre>
</blockquote>
<p>不过，如果要安装 WPSC，还是需要按照其提示做一些操作的。</p>
<h3 id="wwwuser">5.配置 WordPress</h3>
<p>编辑 wp-config.php 文件以在新博客的安装文件中作相应更改。</p>
<p>需要说明的是：</p>
<ol>
<li>如果博客需要变更域名，那么请参考这篇<a href="http://www.wordpress.la/codex-%E6%9B%B4%E6%94%B9%E7%BD%91%E7%AB%99URL.html" target="_blank">文章</a>。</li>
<li>如果你使用了 WPSC 缓存插件，请务必停用该插件再备份数据库和博客文件（最好的方法是先删除该插件）。</li>
</ol>
<p>如果你对于 WordPress 的配置迁移还有什么不懂的地方，请参考这篇<a href="http://www.wordpress.la/codex-%E8%BF%81%E7%A7%BBWordPress.html" target="_blank">文章</a>。</p>
<h3 id="wwwuser">6.后续工作</h3>
<p>完成博客的迁移之后，下一步就该考虑安全问题了。进行基本的安全设置非常有必要，这样可以避免被人“无意”中入侵。请参考另一篇文章：<a title="Linux VPS 安全策略记录" href="http://cnzhx.net/blog/secure-my-vps/">安全配置记录</a>。</p>
<p>安全配置服务器后，就应该考虑优化的问题了，其实现在的配置好的服务器还是有很多可以优化的地方，有很多不必要的软件包，服务，用户，文件。请参考另一篇文章：<a href="http://www.vpsee.com/2009/06/128mb-vps-optimize-centos5/" target="_blank">Linode VPS 上优化 CentOS 5</a>。</p>
<p>这两篇文章有些地方大致相同，大家理解安全和优化的思想和做法就好了，关于 Bastille 的使用，我打算自己好好研究一下，然后写篇文章与大家分享。还有，建议大家先不要配置 iptables，因为这么贵的 VPS ，如果自己不配置个 PPTP VPN 或 OpenVPN 使用，实在是太浪费了，所以 iptables 的部分，建议大家在配置 VPN 服务器端的时候再配置。我最近会着手准备配置 VPN，如果成功的话，我会把相关经验分享给大家。</p>
</div>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年04月21日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/" title="Linode VPS 上实现 WordPress 邮件通知">Linode VPS 上实现 WordPress 邮件通知</a> (0)</li><li>2012年04月29日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/" title="在 Linode VPS 下搭建 pptp 服务器">在 Linode VPS 下搭建 pptp 服务器</a> (0)</li><li>2012年05月13日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/" title="Linode VPS 下的 FTP 服务的搭建">Linode VPS 下的 FTP 服务的搭建</a> (0)</li><li>2012年04月18日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/" title="备份 GoDaddy 主机网站文件">备份 GoDaddy 主机网站文件</a> (0)</li><li>2011年03月23日 -- <a href="http://www.chenjunlu.com/2011/03/configure-cacti-0-8-7g-under-rhel-5-5/" title="在 RHEL 5.5 下配置 Cacti 0.8.7g">在 RHEL 5.5 下配置 Cacti 0.8.7g</a> (3)</li><li>2012年05月14日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/" title="解决 WordPress 后台无法更新的问题">解决 WordPress 后台无法更新的问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>备份 GoDaddy 主机网站文件</title>
		<link>http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-backup-godaddy-website</link>
		<comments>http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 08:16:22 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Webmaster]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[GoDaddy]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[sitebackup.php]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2610</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-2612" title="Godaddy" src="http://www.chenjunlu.com/wp-content/uploads/2012/04/godaddy-300x152.jpg" alt="Godaddy" width="300" height="152" /></p>

最近琢磨着把自己的博客从 GoDaddy 的主机空间里迁移到 Linode VPS 上，所以就开始考虑到网站的备份和迁移问题，MySQL 数据库备份方面很简单，可以用 GoDaddy 控制中心的 phpMyAdmin 来备份，更傻瓜的方法是用 WordPress 的备份插件。但是备份网站文件时我则遇到了一下小困难，GoDaddy 控制中心提供的压缩功能不能够将文件夹打包压缩，而由于国内的 GFW 的限制，我无法通过稳定的 FTP 连接下载所有网站文件。难道要我番羽土啬？ 但是那样将近 100MB 的网站空间文件，也难保完整下载下来。无奈的我只能另辟蹊径，最后我找到了这篇<a href="http://www.thewebhostinghero.com/tutorials/how-to-backup-godaddy-website.html" target="_blank">文章</a>。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-2612" title="Godaddy" src="http://www.chenjunlu.com/wp-content/uploads/2012/04/godaddy-300x152.jpg" alt="Godaddy" width="300" height="152" /></p>
<p>最近琢磨着把自己的博客从 GoDaddy 的主机空间里迁移到 Linode VPS 上，所以就开始考虑到网站的备份和迁移问题，MySQL 数据库备份方面很简单，可以用 GoDaddy 控制中心的 phpMyAdmin 来备份，更傻瓜的方法是用 WordPress 的备份插件。但是备份网站文件时我则遇到了一下小困难，GoDaddy 控制中心提供的压缩功能不能够将文件夹打包压缩，而由于国内的 GFW 的限制，我无法通过稳定的 FTP 连接下载所有网站文件。难道要我番羽土啬？ 但是那样将近 100MB 的网站空间文件，也难保完整下载下来。无奈的我只能另辟蹊径，最后我找到了这篇<a href="http://www.thewebhostinghero.com/tutorials/how-to-backup-godaddy-website.html" target="_blank">文章</a>。</p>
<p>这是一个老外写的整站备份  GoDaddy 主机网站文件专用 PHP 脚本，该脚本利用了 shell_exec() 函数调用 tar 命令，但是，如果你网站数据体积过大的话，很可能由于 PHP 执行时间过长而不能使用（因为作者加了一个最大执行时间限制），当然，你可以执行修改执行时间的限制。</p>
<p>尽管作者写这个脚本的初衷是针对 GoDaddy 主机备份，不过我想也应该同样试用其它 Linux / Unix 服务器的网站备份。</p>
<p>该备份脚本运行使用的几点说明：</p>
<ol>
<li>下载后，编辑 sitebackup.php 文件里的 PASSWORD，修改为你设置的密码；</li>
<li>上传至网站根目录，如果你只想备份某个文件夹里的内容，或者你的博客安装在子目录里，则上传至相应路径；</li>
<li>在浏览器中输入 “域名/(路径)/sitebackup.php”  输入密码，执行该脚本。</li>
<li>激活脚本后就不要关闭浏览器，也不要尝试刷新，否则它会循环打包你已经打包过的备份文件。</li>
<li> 压缩好后，会提供给你一个压缩包下载链接。</li>
<li>下载完成后，删除备份压缩包；</li>
<li> 安全起见，删除  sitebackup.php 文件（或者上传的时候重命名为只有你知道的文件名）。</li>
</ol>
<p>赶快试试在你的主机上能不能使用吧。不管你主机 FTP 速度如何，好歹你可以先全站文件用这个压缩下，压缩过程本身很快的，然后 FTP 直接下载整个压缩包。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年04月21日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-enable-workpress-mail-notifacation-on-linode-vps/" title="Linode VPS 上实现 WordPress 邮件通知">Linode VPS 上实现 WordPress 邮件通知</a> (0)</li><li>2012年04月20日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-migrate-wordpress-to-linode-vps/" title="博客搬迁 Linode VPS 配置笔记">博客搬迁 Linode VPS 配置笔记</a> (3)</li><li>2012年05月14日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-slove-the-issue-that-wordpress-backend-can-not-update/" title="解决 WordPress 后台无法更新的问题">解决 WordPress 后台无法更新的问题</a> (0)</li><li>2012年05月13日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-setup-ftp-service-under-linode-vps/" title="Linode VPS 下的 FTP 服务的搭建">Linode VPS 下的 FTP 服务的搭建</a> (0)</li><li>2012年04月29日 -- <a href="http://www.chenjunlu.com/2012/04/how-to-setup-a-pptp-vpn-server-under-linode-vps/" title="在 Linode VPS 下搭建 pptp 服务器">在 Linode VPS 下搭建 pptp 服务器</a> (0)</li><li>2010年05月23日 -- <a href="http://www.chenjunlu.com/2010/05/google-living-stories-for-wordpress/" title="Google Living Stories for WordPress">Google Living Stories for WordPress</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/04/how-to-backup-godaddy-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么要用非关系数据库？</title>
		<link>http://www.chenjunlu.com/2012/03/why-nosql/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=why-nosql</link>
		<comments>http://www.chenjunlu.com/2012/03/why-nosql/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 04:44:57 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2565</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2596" title="No SQL" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/nosql.png" alt="No SQL" width="363" height="214" /></p>
随着互联网 Web2.0 网站的兴起，非关系型的数据库现在成了一个极其热门的新领域，非关系数据库产品的发展非常迅速。而传统的关系数据库在应付 Web2.0 网站，特别是超大规模和高并发的 SNS 类型的 Web2.0 纯动态网站已经显得力不从心，暴露了很多难以克服的问题，例如：
<ol>
	<li>High performance - 对数据库高并发读写的需求
</li>
	<li>Huge Storage - 对海量数据的高效率存储和访问的需求
</li>
	<li>High Scalability &#38;&#38; High Availability - 对数据库的高可扩展性和高可用性的需求
</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2596" title="No SQL" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/nosql.png" alt="No SQL" width="363" height="214" /></p>
<p>随着互联网 Web2.0 网站的兴起，非关系型的数据库现在成了一个极其热门的新领域，非关系数据库产品的发展非常迅速。而传统的关系数据库在应付 Web2.0 网站，特别是超大规模和高并发的 SNS 类型的 Web2.0 纯动态网站已经显得力不从心，暴露了很多难以克服的问题，例如：</p>
<ol>
<li>High performance &#8211; 对数据库高并发读写的需求<br />
Web2.0 网站要根据用户个性化信息来实时生成动态页面和提供动态信息，所以基本上无法使用动态页面静态化技术，因此数据库并发负载非常高，往往要达到每秒上万次读写请求。关系数据库应付上万次 SQL 查询还勉强顶得住，但是应付上万次 SQL 写数据请求，硬盘 I/O 就已经无法承受了。其实对于普通的 BBS 网站，往往也存在对高并发写请求的需求，例如像 JavaEye 网站的实时统计在线用户状态，记录热门帖子的点击次数，投票计数等，因此这是一个相当普遍的需求。</li>
<li>Huge Storage &#8211; 对海量数据的高效率存储和访问的需求<br />
类似 Facebook，twitter，Friendfeed 这样的 SNS 网站，每天用户产生海量的用户动态，以 Friendfeed 为例，一个月就达到了2.5亿条用户动态，对于关系数据库来说，在一张2.5亿条记录的表里面进行 SQL 查询，效率是极其低下乃至不可忍受的。再例如大型 Web 网站的用户登录系统，例如腾讯，盛大，动辄数以亿计的帐号，关系数据库也很难应付。</li>
<li>High Scalability &amp;&amp; High Availability &#8211; 对数据库的高可扩展性和高可用性的需求<br />
在基于 Web 的架构当中，数据库是最难进行横向扩展的，当一个应用系统的用户量和访问量与日俱增的时候，你的数据库却没有办法像 Web server 和 App server 那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说，对数据库系统进行升级和扩展是非常痛苦的事情，往往需要停机维护和数据迁移，为什么数据库不能通过不断的添加服务器节点来实现扩展呢？</li>
</ol>
<p>在上面提到的“三高”需求面前，关系数据库遇到了难以克服的障碍，而对于 Web2.0 网站来说，关系数据库的很多主要特性却往往无用武之地，例如：</p>
<ol>
<li>数据库事务一致性需求<br />
很多 Web 实时系统并不要求严格的数据库事务，对读一致性的要求很低，有些场合对写一致性要求也不高。因此数据库事务管理成了数据库高负载下一个沉重的负担。</li>
<li>数据库的写实时性和读实时性需求<br />
对关系数据库来说，插入一条数据之后立刻查询，是肯定可以读出来这条数据的，但是对于很多web应用来说，并不要求这么高的实时性，比方说我在 JavaEye 上发一条消息之后，过几秒乃至十几秒之后，我的订阅者才看到这条动态是完全可以接受的。</li>
<li>对复杂的SQL查询，特别是多表关联查询的需求<br />
任何大数据量的 Web 系统，都非常忌讳多个大表的关联查询，以及复杂的数据分析类型的复杂 SQL 报表查询，特别是 SNS 类型的网站，从需求以及产品设计角度，就避免了这种情况的产生。往往更多的只是单表的主键查询，以及单表的简单条件分页查询，SQL 的功能被极大的弱化了。</li>
</ol>
<p>因此，关系数据库在这些越来越多的应用场景下显得不那么合适了，为了解决这类问题的非关系数据库应运而生，现在这两年，各种各样非关系数据库，特别是键值数据库(Key-Value Store DB)风起云涌，多得让人眼花缭乱。前不久国外刚刚举办了 NoSQL Conference，各路 NoSQL 数据库纷纷亮相，加上未亮相但是名声在外的，起码有超过10个开源的 NoSQL?数据库，例如：</p>
<blockquote><p>Redis，Tokyo Cabinet，Cassandra，Voldemort，MongoDB，Dynomite，HBase，CouchDB，Hypertable， Riak，Tin， Flare， Lightcloud， KiokuDB，Scalaris， Kai， ThruDB， &#8230;&#8230;</p></blockquote>
<p>这些 NoSQL 数据库，有的是用 C/C++ 编写的，有的是用 Java 编写的，还有的是用 Erlang 编写的，每个都有自己的独到之处，看都看不过来了，我也只能从中挑选一些比较有特色，看起来更有前景的产品学习和了解一下。这些 NoSQL 数据库大致可以分为以下的三类：</p>
<h3>1. 满足极高读写性能需求的 Key-Value 数据库</h3>
<p>高性能 Key-Value 数据库的主要特点就是具有极高的并发读写性能，Redis，Tokyo Cabinet， Flare， 这3个 Key-Value 数据库都是用 C 编写的，它们的性能都相当出色，但出了出色的性能，它们还有自己独特的功能：</p>
<p><strong>Redis</strong></p>
<p>Redis 是一个很新的项目，刚刚发布了1.0版本。Redis 本质上是一个 Key-Value 类型的内存数据库，很像 memcached，整个数据库统统加载在内存当中进行操作，定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作，Redis 的性能非常出色，每秒可以处理超过10万次读写操作，是我知道的性能最快的 Key-Value 数据库。</p>
<p>Redis 的出色之处不仅仅是性能，Redis 最大的魅力是支持保存 List 链表和 Set 集合的数据结构，而且还支持对 List 进行各种操作，例如从 List 两端 push 和 pop 数据，取 List 区间，排序等等，对 Set 支持各种集合的并集交集操作，此外单个 value 的最大限制是1GB，不像 memcached 只能保存1MB的数据，因此 Redis 可以用来实现很多有用的功能，比方说用他的 List 来做 FIFO 双向链表，实现一个轻量级的高性能消息队列服务，用它的 Set 可以做高性能的 tag 系统等等。</p>
<p>另外， Redis 也可以对存入的 Key-Value 设置 expire 时间，因此也可以被当作一个功能加强版的 memcached 来用。Redis 的主要缺点是数据库容量受到物理内存的限制，不能用作海量数据的高性能读写，并且它没有原生的可扩展机制，不具有 scale（可扩展）能力，要依赖客户端来实现分布式读写，因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用 Redis 的网站有 github，Engine Yard。</p>
<p><strong>Tokyo Cabinet 和 Tokoy Tyrant</strong></p>
<p>TC 和 TT 的开发者是日本人 Mikio Hirabayashi，主要被用在日本最大的 SNS 网站 mixi.jp 上，TC 发展的时间最早，现在已经是一个非常成熟的项目，也是 Key-Value 数据库领域最大的热点，现在被广泛的应用在很多很多网站上。TC 是一个高性能的存储引擎，而TT提供了多线程高并发服务器，性能也非常出色，每秒可以处理4-5万次读写操作。TC 除了支持 Key-Value 存储之外，还支持保存 Hashtable 数据类型，因此很像一个简单的数据库表，并且还支持基于 column 的条件查询，分页查询和排序功能，基本上相当于支持单表的基础查询功能了，所以可以简单的替代关系数据库的很多操作，这也是 TC 受到大家欢迎的主要原因之一。</p>
<p>TC/TT 在 mixi 的实际应用当中，存储了2000万条以上的数据，同时支撑了上万个并发连接，是一个久经考验的项目。TC 在保证了极高的并发读写性能的同时，具有可靠的数据持久化机制，同时还支持类似关系数据库表结构的 hashtable 以及简单的条件，分页和排序操作，是一个很棒的 NoSQL 数据库。TC的主要缺点是在数据量达到上亿级别以后，并发写数据性能会大幅度下降，NoSQL: If Only It Was That Easy提到，他们发现在TC里面插入1.6亿条2-20KB数据的时候，写入性能开始急剧下降。看来是当数据量上亿条的时候，TC性能开始大幅度下降，从TC作者自己提供的mixi数据来看，至少上千万条数据量的时候还没有遇到这么明显的写入性能瓶颈。</p>
<p><strong>Flare</strong></p>
<p>TC是日本第一大 SNS 网站 mixi 开发的，而 Flare 是日本第二大 SNS 网站 green.jp 开发的，有意思吧。Flare 简单的说就是给 TC 添加了 scale 功能。他替换掉了 TT 部分，自己另外给 TC 写了网络服务器，Flare 的主要特点就是支持 scale 能力，他在网络服务端之前添加了一个 node server，来管理后端的多个服务器节点，因此可以动态添加数据库服务节点，删除服务器节点，也支持 failover。如果你的使用场景必须要让 TC 可以 scale，那么可以考虑 Flare。Flare 唯一的缺点就是他只支持 memcached 协议，因此当你使用 Flare 的时候，就不能使用 TC 的 table 数据结构了，只能使用 TC 的 key-value 数据结构存储。</p>
<h3>2. 满足海量存储需求和访问的面向文档的数据库</h3>
<p>面向文档的非关系数据库主要解决的问题不是高性能的并发读写，而是保证海量数据存储的同时，具有良好的查询性能。MongoDB 是用 C++ 开发的，而 CouchDB 则是 Erlang 开发的：</p>
<p><strong>MongoDB</strong></p>
<p>MongoDB 是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。他支持的数据结构非常松散，是类似 json 的 bjson 格式，因此可以存储比较复杂的数据类型。</p>
<p>Mongo 最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能，而且还支持对数据建立索引。Mongo 主要解决的是海量数据的访问效率问题，根据官方的文档，当数据量达到50GB以上的时候，Mongo 的数据库访问速度是 MySQL 的10倍以上。Mongo 的并发读写效率不是特别出色，根据官方提供的性能测试表明，大约每秒可以处理0.5万－1.5次读写请求。对于 Mongo 的并发读写性能，我也打算有空的时候好好测试一下。</p>
<p>因为 Mongo 主要是支持海量数据存储的，所以 Mongo 还自带了一个出色的分布式文件系统 GridFS，可以支持海量的数据存储，但我也看到有些评论认为 GridFS 性能不佳，这一点还是有待亲自做点测试来验证了。最后由于 Mongo 可以支持复杂的数据结构，而且带有强大的数据查询功能，因此非常受到欢迎，很多项目都考虑用 MongoDB 来替代 MySQL 来实现不是特别复杂的 Web 应用，比方说 <a href="http://blog.boxedice.com/2009/07/25/choosing-a-non-relational-database-why-we-migrated-from-mysql-to-mongodb/" target="_blank">Why we migrated from MySQL to MongoDB</a> 就是一个真实的从 MySQL 迁移到 MongoDB 的案例，由于数据量实在太大，所以迁移到了 Mongo 上面，数据查询的速度得到了非常显著的提升。MongoDB 也有一个 Ruby 的项目 MongoMapper，是模仿 Merb 的 DataMapper 编写的 MongoDB 的接口，使用起来非常简单，几乎和 DataMapper 一模一样，功能非常强大易用。</p>
<p><strong>CouchDB</strong></p>
<p>CouchDB 现在是一个非常有名气的项目，似乎不用多介绍了。但是我却对 CouchDB 没有什么兴趣，主要是因为 CouchDB 仅仅提供了基于 HTTP REST 的接口，因此 CouchDB 单纯从并发读写性能来说，是非常糟糕的，这让我立刻抛弃了对 CouchDB 的兴趣。</p>
<h3>3. 满足高可扩展性和可用性的面向分布式计算的数据库</h3>
<p>面向 scale 能力的数据库其实主要解决的问题领域和上述两类数据库还不太一样，它首先必须是一个分布式的数据库系统，由分布在不同节点上面的数据库共同构成一个数据库服务系统，并且根据这种分布式架构来提供 online 的，具有弹性的可扩展能力，例如可以不停机的添加更多数据节点，删除数据节点等等。因此像 Cassandra 常常被看成是一个开源版本的 Google BigTable 的替代品。Cassandra 和 Voldemort 都是用Java开发的：</p>
<p><strong>Cassandra</strong></p>
<p>Cassandra 项目是 Facebook 在2008年开源出来的，随后 Facebook 自己使用 Cassandra 的另外一个不开源的分支，而开源出来的 Cassandra 主要被 Amazon 的 Dynamo 团队来维护，并且 Cassandra 被认为是?Dynamo?2.0 版本。目前除了 Facebook 之外，twitter 和 digg.com 都在使用 Cassandra。Cassandra 的主要特点就是它不是一个数据库，而是由一堆数据库节点共同构成的一个分布式网络服务，对 Cassandra 的一个写操作，会被复制到其他节点上去，对 Cassandra 的读操作，也会被路由到某个节点上面去读取。</p>
<p>对于一个 Cassandra 群集来说，扩展性能是比较简单的事情，只管在群集里面添加节点就可以了。我看到有文章说Facebook 的 Cassandra 群集有超过100台服务器构成的数据库群集。Cassandra 也支持比较丰富的数据结构和功能强大的查询语言，和 MongoDB 比较类似，查询功能比 MongoDB 稍弱一些，twitter 的平台架构部门领导 Evan Weaver 写了一篇?<a href="http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/，" target="_blank">文章</a>?来介绍 Cassandra，讲的非常详细。</p>
<p>Cassandra 以单个节点来衡量，其节点的并发读写性能不是特别好，有文章说评测下来 Cassandra 每秒大约不到1万次读写请求，我也看到一些对这个问题进行质疑的评论，但是评价 Cassandra 单个节点的性能是没有意义的，真实的分布式数据库访问系统必然是多个节点构成的系统，其并发性能取决于整个系统的节点数量，路由效率，而不仅仅是单节点的并发负载能力。</p>
<p><strong>Voldemort</strong></p>
<p>Voldemort 是个和 Cassandra 类似的面向解决 scale 问题的分布式数据库系统，Cassandra 来自于 Facebook 这个 SNS 网站，而 Voldemort 则来自于 LinkedIn?这个 SNS 网站。说起来 SNS 网站为我们贡献了n多的 NoSQL 数据库，例如 Cassandra?，Voldemort，Tokyo Cabinet，Flare等等。Voldemort 的资料不是很多，因此我没有特别仔细去钻研，Voldemort 官方给出 Voldemort 的并发读写性能也很不错，每秒超过了1.5万次读写。</p>
<p>从 Facebook 开发 Cassandra，LinkedIn?开发 Voldemort，我们也可以大致看出国外大型 SNS 网站对于分布式数据库，特别是对数据库的 scale 能力方面的需求是多么殷切。前面我提到，Web 应用的架构当中，Web 层和 App 层相对来说都很容易横向扩展，唯有数据库是单点的，极难 scale，现在 Facebook 和LinkedIn 在非关系型数据库的分布式方面探索了一条很好的方向，这也是为什么现在 Cassandra 这么热门的主要原因。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2597" title="NoSQLs" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/different_nosql.png" alt="NoSQLs" width="400" height="308" /></p>
<p>如今，NoSQL 数据库是个令人很兴奋的领域，总是不断有新的技术新的产品冒出来，改变我们已经形成的固有的技术观念，我自己稍微了解了一些，就感觉自己深深的沉迷进去了，可以说 NoSQL 数据库领域也是博大精深的，已经有牛人写了一篇?<a href="http://sebug.net/paper/databases/nosql/Nosql.html" target="_blank">NoSQL 数据库笔谈</a>，从原理到应用详细介绍了 NoSQL 数据库的发展，感兴趣的朋友一定要好好拜读一下。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2010年06月22日 -- <a href="http://www.chenjunlu.com/2010/06/%e8%85%be%e8%ae%af%e2%80%9c%e5%9b%b4%e8%84%96%e2%80%9d/" title="腾讯“围脖”">腾讯“围脖”</a> (0)</li><li>2011年07月8日 -- <a href="http://www.chenjunlu.com/2011/07/the-most-important-question-peter-thiel-asks-any-startup-looking-for-money/" title="你的公司如何吸引第 20 位员工？">你的公司如何吸引第 20 位员工？</a> (1)</li><li>2011年07月5日 -- <a href="http://www.chenjunlu.com/2011/07/ad-free-google-plus-50/" title="试用 Google+ 的50条心得体会">试用 Google+ 的50条心得体会</a> (4)</li><li>2011年06月10日 -- <a href="http://www.chenjunlu.com/2011/06/risk/" title="我爱桌游: 大战役/RISK">我爱桌游: 大战役/RISK</a> (0)</li><li>2010年08月18日 -- <a href="http://www.chenjunlu.com/2010/08/getting-started-with-twitter/" title="Twitter 入门指南">Twitter 入门指南</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/03/why-nosql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>初识 Hadoop</title>
		<link>http://www.chenjunlu.com/2012/03/hadoop-overview/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hadoop-overview</link>
		<comments>http://www.chenjunlu.com/2012/03/hadoop-overview/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 03:20:07 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HDFS]]></category>
		<category><![CDATA[MapReduce]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2568</guid>
		<description><![CDATA[由于具备低成本和前所未有的高扩展性，Hadoop 已被公认为是新一代的大数据处理平台。就像30年前 SQL（Structured Query Language）出现一样，Hadoop 正带来了新一轮的数据革命。如今 Hadoop 已从初出茅庐的小象变成了行业的巨人，但 Hadoop 仍需继续完善。
<p style="text-align: center;"><img class="aligncenter  wp-image-2586" title="hadoop-logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/hadoop-logo1.jpg" alt="hadoop-logo" width="240" height="180" /></p>
Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架，借助于 Hadoop, 程序员可以轻松地编写分布式并行程序，将其运行于计算机集群上，完成海量数据的计算。 如果你对 Hadoop 不熟悉，下面这些名词你或许耳熟能详，Google File System、Google Map/Reduce模型、lucene 、Nutch、云计算等，他们都与 Hadoop 有着或深或浅的关系，原来 Hadoop 离我们如此之近，那么花些时间继续了解它吧。]]></description>
			<content:encoded><![CDATA[<p>由于具备低成本和前所未有的高扩展性，Hadoop 已被公认为是新一代的大数据处理平台。就像30年前 SQL（Structured Query Language）出现一样，Hadoop 正带来了新一轮的数据革命。如今 Hadoop 已从初出茅庐的小象变成了行业的巨人，但 Hadoop 仍需继续完善。</p>
<p style="text-align: center;"><img class="aligncenter  wp-image-2586" title="hadoop-logo" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/hadoop-logo1.jpg" alt="hadoop-logo" width="240" height="180" /></p>
<p>Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架，借助于 Hadoop, 程序员可以轻松地编写分布式并行程序，将其运行于计算机集群上，完成海量数据的计算。 如果你对 Hadoop 不熟悉，下面这些名词你或许耳熟能详，Google File System、Google Map/Reduce模型、lucene 、Nutch、云计算等，他们都与 Hadoop 有着或深或浅的关系，原来 Hadoop 离我们如此之近，那么花些时间继续了解它吧。</p>
<h3>Hadoop 的架构</h3>
<p>先抛开 Hadoop，简单地想想看，假设我们需要读一个 10TB 的数据集，怎么办？在传统的系统上，这需要很长时间，因为硬盘的传输速度是受限的。一个简单的办法是将数据存储在多个磁盘上，同时从多个磁盘并行读取数据，这将大大减少读取时间。</p>
<p>举个例子，假设磁盘的传输速度为100MB/s左右，那么读取1TB的数据需两个半小时以上，如果将数据分块放到100个磁盘上，那么并行读取1％TB的数据只需不到两分钟。</p>
<p>上面的解决方案需要解决两个主要问题，一个是硬件故障，要保证其中一个硬件坏了但数据仍然完整，Hadoop 的文件系统 HDFS（Hadoop Distributed Filesystem）提供了一种解决方式。另外一个问题是如何并行读取数据并合并保证正确性，通过 MapReduce 的编程模型可以简化这个问题。简而言之，Hadoop 提供了一个稳定的共享存储和分析系统，存储由 HDFS 实现，分析由 MapReduce 实现，这两者构成了 Hadoop 的核心功能。</p>
<h3>HDFS</h3>
<p>HDFS 集群有两种节点，以管理者-工作者模式运行，即1个名称节点（NameNode）和N个数据节点（DataNode）。其底层实现是将文件切割成块，然后将这些块存储在不同的DataNode上。为了容错容灾，每个块还被复制多份存储在不同的 DataNode 上。NameNode 管理文件系统的命名空间，记录每个文件被切割成了多少块，这些块可以从哪些 DataNode 上获得，以及各个 DataNode 的状态信息等。下图是 Hadoop 集群的简化视图：</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2574" title="hadoop_overview_hdfs" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/hadoop_overview_hdfs.jpg" alt="hadoop_overview_hdfs" width="381" height="215" /></p>
<p>HDFS 内部通信都是基于标准的TCP/IP协议，NameNode 依赖来自每个 DataNode 的定期心跳（heartbeat）消息。每条消息都包含一个块报告，NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息，NameNode 将采取修复措施，重新复制在该节点上丢失的块。更多 HDFS 的架构和设计请参考 <a href="http://hadoop.apache.org/common/docs/current/cn/hdfs_design.html" target="_blank">这里</a>。</p>
<h3>MapReduce</h3>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2575" title="hadoop_overview_mapreduce" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/hadoop_overview_mapreduce.jpg" alt="hadoop_overview_mapreduce" width="536" height="369" /></p>
<p>上图说明了用 MapReduce 来处理大数据集的过程, 这个 MapReduce 的计算过程简而言之，就是将大数据集分解为成若干个小数据集，每个(或若干个)数据集分别由集群中的一个结点(一般就是一台普通的计算机)进行处理并生成中间结果，然后这些中间结果又由大量的结点进行合并, 形成最终结果。对 MapReduce 概念还是不理解的朋友，请参考 <a href="http://zh.wikipedia.org/wiki/MapReduce" target="_blank">这里</a>。计算模型的核心是 Map 和 Reduce 两个函数，这两个函数由用户负责实现，功能是按一定的映射规则将输入的 对转换成另一个或一批对输出。下图是一个简单的 MapReduce 示例，实现字数统计功能。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2576" title="hadoop_overview_mapreduce" src="http://www.chenjunlu.com/wp-content/uploads/2012/03/hadoop_overview_mapreduce_2.jpg" alt="hadoop_overview_mapreduce" width="441" height="610" /></p>
<h3>分布式并行运算</h3>
<p>Hadoop 的分布式并行运算有一个作为主控的 JobTracker，用于调度和管理其它的 TaskTracker, JobTracker 可以运行于集群中任一台计算机上。TaskTracker 负责执行任务，必须运行于 DataNode 上，即 DataNode 既是数据存储结点，也是计算结点，这样可以减少数据在网络上的传输，降低对网络带宽的需求。 JobTracker 将 Map 任务和 Reduce 任务分发给空闲的 TaskTracker, 让这些任务并行运行，并负责监控任务的运行情况。如果某一个 TaskTracker 出故障了，JobTracker 会将其负责的任务转交给另一个空闲的 TaskTracker 重新运行。</p>
<h3>Hadoop 的其他子项目</h3>
<p>以上介绍的 MapReduce、HDFS、分布式并行运算是 Hadoop 最核心的功能。还有一些子项目提供补充性服务。如：</p>
<ul>
<li>Hive: 提供基于 SQL的查询语言查询存储在HDFS中的数据.</li>
<li>HBase: 一种分布式、列存储数据库，适用于需要实时读写、随机访问超大数据集的场景.</li>
<li>Zookeeper: 一个分布式、高可用性的协调服务，提供分布式锁之类的基本服务.</li>
<li>Pig: 一种数据流语言和运行环境，用以检索非常大的数据集，使程序员能专注于数据而不是执行本质.</li>
</ul>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/03/hadoop-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 MIUI 系统下开启 App2SD+ 功能</title>
		<link>http://www.chenjunlu.com/2012/02/how-to-turn-on-the-app2sd-under-miui/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-turn-on-the-app2sd-under-miui</link>
		<comments>http://www.chenjunlu.com/2012/02/how-to-turn-on-the-app2sd-under-miui/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 09:17:45 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App2SD]]></category>
		<category><![CDATA[HTC Desire]]></category>
		<category><![CDATA[MIUI]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2544</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2553" title="App2SD+" src="http://www.chenjunlu.com/wp-content/uploads/2012/02/App2SD+.jpg" alt="App2SD+" width="383" height="321" /></p>
最近发现自己手机上的内置 ROM 空间不够用了，虽然之前用 修改了系统的分区大小，但是毕竟手机快用2年了，软件使用的空间也越来越大，目前还没有换手机的打算，所以没办法，只有自己想想其他办法来解决，我的手机是 HTC Desire ，目前我自己刷的是最新的小米系统 MIUI， 虽然当前系统的版本有内置 App2SD 功能，但是像微信或 Google Maps 不支持 App2SD，所以我想到了 App2SD+ 功能。

在 Android 手机刚面世的时候，系统版本 1.5 和后来的 2.1 都不支持把程序装到 SD 卡上，由于系统内置的空间较小，装不了太多软件，于是有国外的牛人搞出了 App2SD 的概念，就是把软件装在 SD 卡上。在官方推出2.2版本系统的时候就把这个概念整合到系统，于是出现了2种 App2SD 功能。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-2553" title="App2SD+" src="http://www.chenjunlu.com/wp-content/uploads/2012/02/App2SD+.jpg" alt="App2SD+" width="383" height="321" /></p>
<p>最近发现自己手机上的内置 ROM 空间不够用了，虽然之前用 修改了系统的分区大小，但是毕竟手机快用2年了，软件使用的空间也越来越大，目前还没有换手机的打算，所以没办法，只有自己想想其他办法来解决，我的手机是 HTC Desire ，目前我自己刷的是最新的小米系统 MIUI， 虽然当前系统的版本有内置 App2SD 功能，但是像微信或 Google Maps 不支持 App2SD，所以我想到了 App2SD+ 功能。</p>
<p>在 Android 手机刚面世的时候，系统版本 1.5 和后来的 2.1 都不支持把程序装到 SD 卡上，由于系统内置的空间较小，装不了太多软件，于是有国外的牛人搞出了 App2SD 的概念，就是把软件装在 SD 卡上。在官方推出2.2版本系统的时候就把这个概念整合到系统，于是出现了2种 App2SD 功能。</p>
<p>为了区分2种 App2SD，这里重新命名一下:</p>
<ul>
<li>App2SD： Android 2.2 版本内置的 App2SD</li>
<li>App2SD+： 国外牛人从1.5系统开始搞的 App2SD</li>
</ul>
<p>这两种 App2SD 有着明显的区别，区别如下:</p>
<ul>
<li>App2SD：直接把软件装在 SD 卡的 Fat32 分区上，这个分区就是手机连接电脑使用磁盘驱动器的时候看到的那个硬盘分区，这样做有缺点，比如当使用磁盘驱动器模式的时候，SD 卡被电脑独占，装在 SD 卡上的程序无法运行，会导致很多插件和软件消失。另外，目前来说 Android 上面的软件很多还是不支持 App2SD 的，只有一部分可以装在 SD 卡上。</li>
<li>App2SD+： 通过给SD卡分区, 一个 Swap 分区(可选),一个 Ext 分区(安装软件的地方),一个 Fat32 分区。这种方式很好的解决了官方2.2系统自带 App2SD 的缺点,所有程序都可以装在 SD 卡上,在使用磁盘驱动器模式的时候也不会影响到 SD 卡上程序的运行。</li>
</ul>
<p>所以，我个人强烈推荐使用 App2SD+。</p>
<p>MIUI 的 App2SD+ 是完全使用 Darktremor App2SD 的，一点不一样的地方都没有。英文好感兴趣朋友请参考<a href="http://forum.xda-developers.com/showthread.php?p=7021328" target="_blank">这里</a>。</p>
<p>下面我来介绍一下在 MIUI 系统下开启 App2SD+ 功能的的具体方法：</p>
<ol>
<li>备份 SD 卡上的文件到电脑上（因为给SD卡分区后，你的 SD 卡上的资料就会全部删除）。</li>
<li>重启到 Recovery 模式。</li>
<li>使用菜单下的 Partition sdcard 功能对 SD 卡进行分区管理。</li>
<li>根据屏幕提示，选择 Swap-size 和 Ext3-size 选项，用滚轮上下调整空间大小，最后确定开始分区，没分配的空间就是 FAT32 存储空间。</li>
<li>开启 App2SD+ 功能，打开手机的超级终端，在命令行下输入如下内容：（这一步手机自动重启，这一步是重新加载 a2sd 功能，并且会把已经安装过的软件移到 sd-ext 分区里）<br />
<blockquote><p>$  su<br />
# a2sd reinstall</p></blockquote>
</li>
<li>如果想关闭 App2SD+ 功能，则需要输入如下内容：<br />
<blockquote><p>$  su<br />
# a2sd remove</p></blockquote>
</li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年02月17日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-reflash-alpharev-hboot-on-htc-desire/" title="刷 N1 Table 增加 HTC Desire 可用内存 ">刷 N1 Table 增加 HTC Desire 可用内存 </a> (0)</li><li>2011年02月14日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-root-your-htc-desire/" title="如何获取 HTC Desire 的 root 权限?">如何获取 HTC Desire 的 root 权限?</a> (1)</li><li>2011年03月16日 -- <a href="http://www.chenjunlu.com/2011/03/pes2011-for-android-and-ipad/" title="PES2011 for Android and iPad">PES2011 for Android and iPad</a> (0)</li><li>2011年02月18日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-s-off-your-htc-desire/" title="How to S-OFF your HTC Desire ?">How to S-OFF your HTC Desire ?</a> (0)</li><li>2011年02月15日 -- <a href="http://www.chenjunlu.com/2011/02/how-to-install-cyanogenmod6-on-htc-desire/" title="HTC Desire 刷 CyanogenMod6 ROM 详细说明">HTC Desire 刷 CyanogenMod6 ROM 详细说明</a> (0)</li><li>2010年07月28日 -- <a href="http://www.chenjunlu.com/2010/07/auto-mount-your-sd-card/" title="懒人必备小工具 &#8211; Auto mount your SD card">懒人必备小工具 &#8211; Auto mount your SD card</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/02/how-to-turn-on-the-app2sd-under-miui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>虚拟化 hypervisor 的类型对比</title>
		<link>http://www.chenjunlu.com/2012/01/hypervisor-types/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hypervisor-types</link>
		<comments>http://www.chenjunlu.com/2012/01/hypervisor-types/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 00:36:11 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[hypervisor]]></category>
		<category><![CDATA[Type 1]]></category>
		<category><![CDATA[Type 2]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2512</guid>
		<description><![CDATA[对虚拟化 hypervisor 类型的对比首先从理解市场上的两种不同方式开始，它们是：
<ul>
	<li>Type 1：直接运行于硬件系统之上的裸机管理程序，Type 1 也经常被称为硬件虚拟化引擎。</li>
	<li>Type 2：以现有操作系统之上的应用程序之一的方式运行。</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2529" title="Hypervisor Design" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Hypervisor_Design.jpg" alt="Hypervisor Design" width="461" height="346" /></p>]]></description>
			<content:encoded><![CDATA[<p>对虚拟化 hypervisor 类型的对比首先从理解市场上的两种不同方式开始，它们是：</p>
<ul>
<li>Type 1：直接运行于硬件系统之上的裸机管理程序，Type 1 也经常被称为硬件虚拟化引擎。</li>
<li>Type 2：以现有操作系统之上的应用程序之一的方式运行。</li>
</ul>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2529" title="Hypervisor Design" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Hypervisor_Design.jpg" alt="Hypervisor Design" width="461" height="346" /></p>
<p>由于 Type 1 管理程序以简化层的方式向虚拟机提交虚拟化后的硬件资源，因此它可以提供更好的性能和可扩展性。从而减少了运行管理程序本身所需的花销。</p>
<p>由于 Type 1 管理程序直接运行于硬件层上，它起的作用也在硬件范围内。运行了Type 1 虚拟化管理程序的主机通常只用于实现单一功能，它们作为资源池的一部分被设计，用于支持多个虚拟机内的各种应用程序运行。</p>
<p>尽管很多情况下 Type 1 与 Type 2 管理程序之上可以运行相同的虚拟机，从而提供完全同类型的功能，但是通常Type 1 管理程序要比 Type 2 更高效。事实上，我们可以把 Type 1 系统上运行的虚拟机迁移到 Type 2 系统上，反之也可以实现。可能需要一些转换机制，但是完全可以实现。</p>
<p>由于直接运行于硬件层之上，Type 1 管理程序支持硬件级的虚拟化。而 Type 2 管理程序由于是作为操作系统的应用运行的，它完成的是软件层的虚拟化。</p>
<p>理解虚拟化管理程序的使用率：</p>
<p>由于实现原理的影响，Type 1 管理程序通常用于支持生产环境或者是直接为用户提供服务的虚拟机。而Type 2管理程序虽然可以提供非常丰富的服务能力，但却很少用于生产环境。通常运行 Type 2 管理器的主机还会支持其它的一些额外服务，因此无法100%的用于支持虚拟机运行。所以，我们需要选择 Type 1 系统支持生产用虚拟机。</p>
<p>Type 1 管理程序可以监控虚拟机的运行状态，跟踪虚拟机内发生的所有动作，必要情况下还可以允许（或禁止）对某些资源的访问来满足虚拟机操作需求。理想情况下，虚拟机管理器可以配置某个虚拟机的各种设置策略来完成对它的管理。如果您需要完成如下的这些任务，请考虑选择基于硬件的虚拟化管理程序：</p>
<ol>
<li>系统整合：虚拟化管理程序可以支持在同一物理硬件上运行多种系统，这样可以在保证，甚至是提高服务水平的基础上减少所需物理服务器数量和降低成本。</li>
<li>系统测试：管理程序可以实现对系统的隔离，因此可以在不影响生产系统的情况下完成对新软件和应用的测试。相比物理平台，测试所需成本降低。</li>
<li>异构平台管理：管理程序可以支持在同一物理硬件上运行多种异构的操作系统平台，从而可以降低企业使用异构平台的硬件成本。</li>
<li>硬件优化：通过在同一个物理主机上运行多个工作负载，管理程序可以把服务器利用率从5%~10%提高到60%~70%。</li>
<li>应用程序高可用：通过在故障切换集群系统中运行工作负载，运行了管理程序的服务器可以支持应用程序的高可用，确保虚拟机内应用程序提供的服务始终可用。</li>
<li>资源优化：通过在独立的虚拟机内运行不同的应用，管理程序可以优化资源配置，因为每个不同的应用在不同时间段所需的硬件资源是变化的。</li>
<li>服务灵活性：由于管理程序支持跨虚拟机的操作，所以虚拟机的克隆和再生变得更加容易，相比物理机企业获得了更大的灵活性。</li>
<li>动态资源管理：虚拟化管理程序可以支持在虚拟机工作负载运行高峰期，手动或自动地进行资源再分配，因此虚拟化管理程序可以更好地支持数据中心范围内的动态资源分配。</li>
</ol>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/01/hypervisor-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>意犹未尽的《机械迷城》</title>
		<link>http://www.chenjunlu.com/2012/01/machinarium/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=machinarium</link>
		<comments>http://www.chenjunlu.com/2012/01/machinarium/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 05:37:05 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[游戏志 | Game]]></category>
		<category><![CDATA[AVG]]></category>
		<category><![CDATA[Machinarium]]></category>
		<category><![CDATA[机械迷城]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2514</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-large wp-image-2518" title="Machinarium" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Machinarium-1024x640.jpg" alt="Machinarium" width="417" height="260" /></p>

好久没写博客了，这篇好像是2012年的第一篇文章，这么重要的位置我竟用来写游戏心得，我真有点不好意思，呵呵。春节假期，我在 iPad2 的 App Store 上下载了一款叫《机械迷城》（Machinarium）的游戏，它真是一款让人爱不释手的游戏，大年初二到初四我一口气玩到通关，它里面的很多谜题都是一些智力小游戏，让玩家在体验游戏的欢乐的同时锻炼了大脑，真是让人着迷。《机械迷城》是由捷克独立开发小组 <a href="http://amanita-design.net/" target="_blank">Amanita Design</a> 设计制作的一款 AVG 冒险游戏。该游戏在2009年独立游戏节上获得了视觉艺术奖。游戏采用的是传统点击式界面，和 Samorost 游戏相似，2D 背景和人物，没有对白。Machinarium 游戏的时间更长更复杂，游戏画面则全部由手画完成。]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-large wp-image-2518" title="Machinarium" src="http://www.chenjunlu.com/wp-content/uploads/2012/01/Machinarium-1024x640.jpg" alt="Machinarium" width="417" height="260" /></p>
<p>好久没写博客了，这篇好像是2012年的第一篇文章，这么重要的位置我竟用来写游戏心得，我真有点不好意思，呵呵。春节假期，我在 iPad2 的 App Store 上下载了一款叫《机械迷城》（Machinarium）的游戏，它真是一款让人爱不释手的游戏，大年初二到初四我一口气玩到通关，它里面的很多谜题都是一些智力小游戏，让玩家在体验游戏的欢乐的同时锻炼了大脑，真是让人着迷。《机械迷城》是由捷克独立开发小组 <a href="http://amanita-design.net/" target="_blank">Amanita Design</a> 设计制作的一款 AVG 冒险游戏。该游戏在2009年独立游戏节上获得了视觉艺术奖。游戏采用的是传统点击式界面，和 Samorost 游戏相似，2D 背景和人物，没有对白。Machinarium 游戏的时间更长更复杂，游戏画面则全部由手画完成。</p>
<p>独立游戏，这个名字真的还是第一次听说（是我火星了。。），自然而然地联想起了时下很流行的小成本独立制作电影。“独立”总是意味着着四两搏千斤似的优雅，和满脸稚气的无拘无束，在这个势利的世界里，占据着以品质，内涵著称的一个角落，而且，这个角落越发得令人无法抑制地加以窥视（尽管多数人人依旧不屑一顾）。</p>
<p>我深深被精美的美工背景吸引，饥渴地下载下来，一口气通了关。过程中除了感叹于各种谜题的绝妙设计，以及 2D 动画细微处的一丝不苟之外（背景音乐都是那么惬意），浮现起了一个词：“后工业时代”。</p>
<p>被遗弃的，散落在垃圾堆的主角，灰黑色植物上的嫩芽（不知道你注意到没），肮脏的的污水池，锈迹斑斑的楼梯，碎掉的街灯。这些场景已经定下了一种整体抑郁的色调，在以一种严肃而无奈的方式暗示我们：“这是一个不值得停留的时代里的一个被遗忘的城市。”不由自主想起了机器人瓦里？嗯，当然会想起，太相似了。</p>
<p>监狱里想抽烟的废物，懦弱的罪犯（无辜的？），被抢走的乐器的三人组，不再工作的扳手，还有那个高塔之上几乎无能的老大。。。等等，好多好多。每时每刻，都有一种淡淡的悲伤和凄凉侵袭我们，主角默默地帮助那些可能一辈子也不了解自己存在价值的机器人，犹如瓦里一个人整理者全人类留下的垃圾。主角回忆着往日和心爱的另一半在油池里面嬉戏，恰似瓦里默默注视老电影里那双牵起与被牵起的手。</p>
<p>后工业时代的进行总是伴随着疑惑不解，彷徨失落，急躁反抗，当然还有前辈制造的各种遗留问题和隐隐发臭的垃圾。记得《搏击俱乐部》里的那句台词：“我们是被上帝抛弃的一代，没有大萧条，没有世界大战，我们的战斗是精神的斗争。”机器们重复着制造者设计的工作而不思考它的意义，人类每天做着自己既不喜欢也搞不懂的工作，而时间依旧不曾停留。于是有人疑惑，有人彷徨，有人反抗，但是这些终究不是良药秘方，这些终归于沉寂。</p>
<p>这样，就有了后现代主义的散漫，缺少了开天辟地的豪情，一切归于琐碎的问题，混合的意识，安逸的信步。或许瓦里或者是游戏里的主角拯救世界的壮举过于理想化，可我依旧被感动得落泪，拯救不值得拯救的世界，不因为过去或者现在，只因为一种趋势，一种回忆的力量，一个对未知未来的期望。似乎诠释着后工业时代延续性的重要，过去可以无比向往，现在可以无比作呕，未来可以毫无希望，但是，要有走下去的毅力，至少给予后代变革进步的机会，而我们，不惜为完成过渡倾其所有，毫不犹豫。</p>
<p>而游戏与电影总是浪漫的，即使灰暗抑郁，也有精神的美好寄托，微笑不知情地面对危险，总是观众乐于接受的，当我们从欢乐的外表提炼出严肃的暗喻时，自然有连篇出现的猜想。奔波在荒漠孤城里的机器人，最终拯救了城市，亦步亦趋，艰难，但是坚定。思想的孤寂痛楚总是当下人们最大的敌人，但就算没有灯塔，我们依旧要默默地走下去。</p>
<p>我应该说，这是一部让人休闲的游戏，还是一些让人思考的材料，更是一种让人伤感落泪的猜想。</p>
<blockquote><p>“这个世界如此美丽，值得我们为之奋斗，我只相信后半句。”</p>
<p style="text-align: right;">&#8212;米勒尔·海明威</p>
</blockquote>
<p>在经历了那些魔兽，飞车，使命，战神等游戏的汹涌震撼和冲击之外，电子游戏亦不可救药地进入了“后工业时代”，生猛海鲜似的大手笔（大作，神作），貌似越来越不能满足玩家的口味，相同的东西吃多了总会腻，无论这东西有多美味，画面和照片一样（至少我们肉眼无法辨别）的时候，我们又该有怎样的期待？这类独立制作的小游戏虽然不太可能是最终出路，但算作一种提示，一种指引，一剂良药呢？如果独立游戏能保持独立电影的严谨和卓越，哦。我越发地期待它的未来了！诞生一个独立游戏的韦恩斯坦？呃，仅仅是一个细菌般渺小的玩家，我依旧对它具有某种真诚的祝福和遐想。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>暂无相关日志</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2012/01/machinarium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Liferay Portal 集群配置指南</title>
		<link>http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=liferay-portal-ha-cluster-configuration-manual</link>
		<comments>http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 09:38:57 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[APJ]]></category>
		<category><![CDATA[HA]]></category>
		<category><![CDATA[Liferay]]></category>
		<category><![CDATA[mod_jk]]></category>
		<category><![CDATA[mod_proxy]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2494</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-2505" title="liferay_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/liferay_logo-300x79.jpg" alt="liferay_logo" width="300" height="79" /></p>

最近公司的 OA 系统出现性能问题，虽然问题的根源是应用中的签报系统采用的是 JBPM 框架，该框架在数据库设计方面的低效的惊人，但是在新的签报系统开发出来之前，作为系统运维人员的我们只能先采取其他曲线救国的方式来减少性能问题发生的可能性，所以就有了 OA 系统集群测试环境的搭建这个项目，这篇博文的诞生也拜该项目所赐。配置过程中费了老大的劲，尝试了很多种配置方式，其中的艰辛我就不说了，至少结果是好的。由于公司的 OA 系统是在 Liferay Portal 定制开发的，所以该集群测试环境的搭建也主要是围绕着 Liferay Portal 以及 Apache，Tomcat 来进行。我就不废话了，下面详细介绍 Liferay Portal 集群配置过程：
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-medium wp-image-2505" title="liferay_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/liferay_logo-300x79.jpg" alt="liferay_logo" width="300" height="79" /></p>
<p>最近公司的 OA 系统出现性能问题，虽然问题的根源是应用中的签报系统采用的是 JBPM 框架，该框架在数据库设计方面的低效的惊人，但是在新的签报系统开发出来之前，作为系统运维人员的我们只能先采取其他曲线救国的方式来减少性能问题发生的可能性，所以就有了 OA 系统集群测试环境的搭建这个项目，这篇博文的诞生也拜该项目所赐。配置过程中费了老大的劲，尝试了很多种配置方式，其中的艰辛我就不说了，至少结果是好的。由于公司的 OA 系统是在 Liferay Portal 定制开发的，所以该集群测试环境的搭建也主要是围绕着 Liferay Portal 以及 Apache，Tomcat 来进行。我就不废话了，下面详细介绍 Liferay Portal 集群配置过程：</p>
<p>1. 在两个节点上分别编译安装 Apache ：</p>
<blockquote><p><code>[root@oaclstest1 media]# yum install openssl openssl-devel<br />
[root@oaclstest1 media]# cd httpd-2.2.14<br />
[root@oaclstest1 httpd-2.2.14]# ./configure --prefix=/usr/local/apache --enable-so --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-scgi --enable-proxy-ajp --enable-proxy-balancer --enable-ssl<br />
[root@oaclstest1 httpd-2.2.14]# make<br />
[root@oaclstest1 httpd-2.2.14]# make install</code></p></blockquote>
<p>2. 配置 httpd.conf 文件，添加以下内容：</p>
<blockquote><p><code>&lt;VirtualHost *:80&gt;<br />
ServerName 10.1.2.200<br />
#ErrorLog /var/log/apache2/ajp.error.log<br />
#CustomLog /var/log/apache2/ajp.log combined</code></p>
<p><code>&lt;Proxy *&gt;<br />
AddDefaultCharSet Off<br />
Order deny,allow<br />
Allow from all<br />
&lt;/Proxy&gt;<br />
ProxyPass /balancer-manager !<br />
ProxyPass / balancer://ajpCluster/ stickysession=JSESSIONID<br />
ProxyPassReverse / balancer://ajpCluster/ stickysession=JSESSIONID<br />
&lt;Proxy balancer://ajpCluster&gt;<br />
BalancerMember ajp://10.1.2.190:8009 route=node2<br />
BalancerMember ajp://10.1.2.189:8009 route=node1<br />
ProxySet lbmethod=byrequests<br />
&lt;/Proxy&gt;</code></p>
<p><code>&lt;Location /balancer-manager&gt;<br />
SetHandler balancer-manager<br />
Order deny,allow<br />
Allow from all<br />
&lt;/Location&gt;<br />
&lt;/VirtualHost&gt;</code></p></blockquote>
<p>3. 配置 RHCS 集群，cluster.conf 文件内容如下：</p>
<blockquote><p><code>&lt;?xml version="1.0" ?&gt;<br />
&lt;cluster alias="OaHA" config_version="17" name="OaHA"&gt;<br />
&lt;fence_daemon post_fail_delay="0" post_join_delay="3"/&gt;<br />
&lt;clusternodes&gt;<br />
&lt;clusternode name="oaclstest1" nodeid="1" votes="1"&gt;<br />
&lt;fence/&gt;<br />
&lt;/clusternode&gt;<br />
&lt;clusternode name="oaclstest2" nodeid="2" votes="1"&gt;<br />
&lt;fence/&gt;<br />
&lt;/clusternode&gt;<br />
&lt;/clusternodes&gt;<br />
&lt;cman expected_votes="1" two_node="1"/&gt;<br />
&lt;fencedevices/&gt;<br />
&lt;rm&gt;<br />
&lt;failoverdomains&gt;<br />
&lt;failoverdomain name="Failover_Oa" ordered="0" restricted="1"&gt;<br />
&lt;failoverdomainnode name="oaclstest1" priority="1"/&gt;<br />
&lt;failoverdomainnode name="oaclstest2" priority="1"/&gt;<br />
&lt;/failoverdomain&gt;<br />
&lt;/failoverdomains&gt;<br />
&lt;resources&gt;<br />
&lt;ip address="10.1.2.200" monitor_link="1"/&gt;<br />
&lt;script file="/usr/local/apache/bin/apachectl" name="httpd_script"/&gt;<br />
&lt;/resources&gt;<br />
&lt;service autostart="1" domain="Failover_Oa" name="OaHA_Service" recovery="relocate"&gt;<br />
&lt;ip ref="10.1.2.200"/&gt;<br />
&lt;script ref="httpd_script"/&gt;<br />
&lt;/service&gt;<br />
&lt;/rm&gt;<br />
&lt;/cluster&gt;</code></p></blockquote>
<p>4. 启动集群</p>
<blockquote><p><code>[root@oaclstest1 ~]# service cman start<br />
[root@oaclstest2 ~]# service cman start<br />
[root@oaclstest1 ~]# service rgmanager start<br />
[root@oaclstest2 ~]# service rgmanager start<br />
</code></p></blockquote>
<p>5. 配置 server.xml 文件以（node1 为例）：</p>
<blockquote><p><code>&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;Server port="8005" shutdown="SHUTDOWN"&gt;</code></p>
<p><code>&lt;!--APR library loader. Documentation at /docs/apr.html --&gt;<br />
&lt;Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /&gt;<br />
&lt;!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --&gt;<br />
&lt;Listener className="org.apache.catalina.core.JasperListener" /&gt;<br />
&lt;!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --&gt;<br />
&lt;Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /&gt;<br />
&lt;Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /&gt;</code></p>
<p><code>&lt;GlobalNamingResources&gt;</code></p>
<p><code>&lt;Resource name="UserDatabase" auth="Container"<br />
type="org.apache.catalina.UserDatabase"<br />
description="User database that can be updated and saved"<br />
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"<br />
pathname="conf/tomcat-users.xml" /&gt;<br />
&lt;/GlobalNamingResources&gt;</code></p>
<p><code>&lt;Service name="Catalina"&gt;</code></p>
<p><code>&lt;Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"<br />
connectionTimeout="20000"<br />
redirectPort="8443" URIEncoding="UTF-8" /&gt;</code></p>
<p><code>&lt;!-- Define an AJP 1.3 Connector on port 8009 --&gt;<br />
&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /&gt;</code></p>
<p><code>&lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"&gt;<br />
</code><br />
<code>&lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<br />
channelSendOptions="6"&gt;</code></p>
<p><code>&lt;Manager className="org.apache.catalina.ha.session.BackupManager"<br />
expireSessionsOnShutdown="false"<br />
notifyListenersOnReplication="true"<br />
mapSendOptions="6"/&gt;</code></p>
<p><code>&lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<br />
&lt;Membership className="org.apache.catalina.tribes.membership.McastService"<br />
address="228.0.0.4"<br />
port="45564"<br />
frequency="500"<br />
dropTime="3000"/&gt;<br />
&lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />
address="auto"<br />
port="5000"<br />
selectorTimeout="100"<br />
maxThreads="6"/&gt;</code></p>
<p><code>&lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<br />
&lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/&gt;<br />
&lt;/Sender&gt;<br />
&lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/&gt;<br />
&lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/&gt;<br />
&lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/&gt;<br />
&lt;/Channel&gt;</code></p>
<p><code>&lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/&gt;<br />
&lt;Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/&gt;</code></p>
<p><code>&lt;ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/&gt;<br />
&lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/&gt;<br />
&lt;/Cluster&gt;</code></p>
<p><code>&lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"<br />
resourceName="UserDatabase"/&gt;<br />
</code><br />
<code>&lt;Host name="localhost" appBase="webapps"<br />
unpackWARs="true" autoDeploy="true"<br />
xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&lt;/Host&gt;<br />
&lt;/Engine&gt;<br />
&lt;/Service&gt;<br />
&lt;/Server&gt;</code></p></blockquote>
<p>6. 配置 context.xml 文件：</p>
<blockquote><p><code>&lt;?xml version='1.0' encoding='utf-8'?&gt;</code></p>
<p><code>&lt;Context distributable="true"&gt;<br />
&lt;!-- Default set of monitored resources --&gt;<br />
&lt;WatchedResource&gt;WEB-INF/web.xml&lt;/WatchedResource&gt;<br />
&lt;/Context&gt;</code></p></blockquote>
<p>7. 配置 EHcache ：将 hibernate-clustered.xml 和 liferay-multi-vm-clustered.xml 文件从 portal-impl.jar 里解压出来并且放到一个命名为 myehcache 的文件夹内。然后将 myehcache 文件夹复到 [TOMCAT-HOME]/webapps/ROOT/WEB-INF/classes 目录下。在 portal-ext.properties 文件里加上如下配置信息：</p>
<blockquote><p><code>net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml<br />
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml</code></p></blockquote>
<p>8. 配置 Jackrabbit : 请确认在 portal-ext.properties 文件里包含如下配置信息：</p>
<blockquote><p><code>dl.hook.impl=com.liferay.documentlibrary.util.JCRHook</code></p></blockquote>
<p>9. 开启 clusterLink： 在 portal-ext.properties 文件里加上如下配置信息：</p>
<blockquote><p><code>cluster.link.enabled=true</code></p></blockquote>
<p>10. 在 Liferay 后台配置 LDAP：将 Authentication Search Filter field 设置成 (&amp;(objectCategory=person)(sAMAccountName=@screen_name@))。</p>
<p>11. 分别启动两个节点上的 Tomcat 应用。</p>
<p>12. 在浏览器中输入 http://10.1.2.200 进行测试。</p>
<p>需要再说明一下的是：在配置 Apache 的负载均衡的过程中，我使用红帽自带的 Apache，一直没有配置成功，最后通过编译安装特定版本的 Apache 才得以成功，这其中失败的原因我还没找到，另外，在编译安装 Apache 后，我没有再尝试使用 mod_jk 模块来实现负载均衡，不过貌似该模块比我配置的 mod_proxy 模块效率高，稳定性好。想更多了解这两个模块的区别的朋友请参考<a href="http://ningq.com/2010/12/modproxy_vs_modjk.html" target="_blank">这里</a>。未来我会找时间，再尝试用 mod_jk 模块配置一下。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年10月11日 -- <a href="http://www.chenjunlu.com/2011/10/oracle-ha-script/" title="Oracle HA 脚本">Oracle HA 脚本</a> (0)</li><li>2011年05月20日 -- <a href="http://www.chenjunlu.com/2011/05/how-to-monitor-tomcat-server-by-using-cacti/" title="在 Cacti 下实现对 Tomcat 的监控">在 Cacti 下实现对 Tomcat 的监控</a> (9)</li><li>2011年04月19日 -- <a href="http://www.chenjunlu.com/2011/04/red-hat-cluster-suite-overview/" title="Red Hat Cluster Suite 概览">Red Hat Cluster Suite 概览</a> (0)</li><li>2011年03月7日 -- <a href="http://www.chenjunlu.com/2011/03/red-hat-gfs/" title="Red Hat GFS 存储解决方案">Red Hat GFS 存储解决方案</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/12/liferay-portal-ha-cluster-configuration-manual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Keyboard 上手玩</title>
		<link>http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-play-kindle-keyboard</link>
		<comments>http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 02:26:58 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[数码先锋 | Digital]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Briss]]></category>
		<category><![CDATA[E-ink]]></category>
		<category><![CDATA[e-Reader]]></category>
		<category><![CDATA[Instapaper]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Kindle]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2450</guid>
		<description><![CDATA[Kindle 这款亚马逊的产品刚推出的时候我就很关注，低廉的价位，电子墨水屏，都是吸引我的主要原因，由于手里有 iPad 用来看一些技术类书籍，所以一直也就忍着没有入手 Kindle。上个月终于下定决心，毕竟 iPad 的娱乐性太强了，很难安下心来静静的看书，而且 Kindle 的 E-ink 屏还有保护眼镜的功效，有利于长时间的阅读。淘宝上随便选了一家信用比较高的卖家就下单了，我购买的是 Kindle Keyboard wifi 广告版，也就是大家常说的 Kindle3，没有买 3G 版一是觉得性价比不高，另外怕在国内使用会被封号，另外强烈建议大家购买广告版，不但便宜而且对使用几乎没有影响，因为广告只是出现在系统主页，以及屏保画面。
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2468" title="kindle-in-hand" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle-in-hand.jpg" alt="kindle-in-hand" width="342" height="182" /></p>]]></description>
			<content:encoded><![CDATA[<p>Kindle 这款亚马逊的产品刚推出的时候我就很关注，低廉的价位，电子墨水屏，都是吸引我的主要原因，由于手里有 iPad 用来看一些技术类书籍，所以一直也就忍着没有入手 Kindle。上个月终于下定决心，毕竟 iPad 的娱乐性太强了，很难安下心来静静的看书，而且 Kindle 的 E-ink 屏还有保护眼镜的功效，有利于长时间的阅读。淘宝上随便选了一家信用比较高的卖家就下单了，我购买的是 Kindle Keyboard wifi 广告版，也就是大家常说的 Kindle3，没有买 3G 版一是觉得性价比不高，另外怕在国内使用会被封号，另外强烈建议大家购买广告版，不但便宜而且对使用几乎没有影响，因为广告只是出现在系统主页，以及屏保画面。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2468" title="kindle-in-hand" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle-in-hand.jpg" alt="kindle-in-hand" width="342" height="182" /></p>
<p>亚马逊做的东西就是精致，无论是拿到手上的手感，还是系统的可用性，我下单时侯，选择了代装 <a href="http://www.duokan.com/forum/index.php" target="_blank">多看</a> 系统的服务，一个月玩下来，我发现完全没有必要安装多看系统，在我看来多看系统唯一一个功能 Kindle 原生系统没有的功能就是中文 TTS，这个功能我几乎不用，所以我一直在用原生系统，也许有的朋友会说，原生系统看不了 txt 文件，看不了 ePub 格式的文件。恩，这个确实，不过，对于 txt 文件，我们可以通过亚马逊的在线服务来转换成 mobi 格式就好了。拿到 Kindle 的第一件事就是注册了，这里会一点英语的朋友基本都能很轻松做得到，成功后你会得到一个 Kindle 邮箱（你可以自己设置用户名），这个邮箱可是相当好用的东东，要想使用亚马逊丰富的云服务，就靠这个邮箱了。说回浏览 txt 文件的话题，用你注册邮箱给你的 kindle 邮箱发一封信，附件是你需要转换的 txt 文件，亚马逊会自动转换该文件成原生系统可识别的格式，并同步到你的 Kindle 中去。这里需要说明的是，如果你使用的是 @free.kindle.com 的邮箱，那么亚马逊只在你的 Kindle 存在 wifi 连接时同步，这样如果你的 Kindle 是 3G 版的，这样可以避免产生多余的流量费用。如果你不在意这些，你可以直接使用 @kindle.com 的邮箱地址，当然因为我的 Kindle 只是 wifi 版的，我使用哪个地址就无所谓了，我索性使用的就是 @kindle.com 地址。如果你有一些非扫描版的 pdf 文件需要转换，那么注意了，请把邮件的标题写成 “convert”，因为 Kindle Keyboard 支持 pdf 的浏览，所以如果没有 convert 标题，亚马逊不会转换相关文件，只是同步该 pdf 到你的 Kindle 上去。如果有朋友，执意要在 Kindle 原生系统上浏览 ePub 格式文件的话，那么这也不是不可能的，不过请先对你的 Kindle 进行越狱，具体的教程请参考 <a href="http://bbs.mydoo.cn/thread-19025-1-1.html" target="_blank">这里</a>。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2476" title="kindle" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle.jpg" alt="kindle" width="350" height="197" /></p>
<p>英语有待提高的我，使用 Kindle 浏览英文原版书籍时，常常遇到单词不会的情况，没关系，亚马逊都想到了，原生系统支持字典查询，不过系统自带的字典是英英字典，不太符合国人的实际情况，但是网上有很多可以下载的 Kindle 英汉字典，你可以下载后用 USB 连接拷贝到 Kindle 中去，淘宝买家也会送一些英汉字典的，不过这些英汉字典基本没有支持变形的功能，我自己在网上下了一些比较好用的英汉字典，想要的朋友可以直接联系我，有了英汉字典，我们就可以保证在阅读的时候随时查找不会的单词，这不仅节省了很多时间，还大大提高了我读英文原版书籍的速度。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2451" title="kindle_keyboard_thumb" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle_keyboard_thumb.jpg" alt="kindle_keyboard_thumb" width="300" height="177" /></p>
<p>我用 Kindle 除了看书之外最多的事情就是看新闻了，在 Kindle Store 订购杂志和报纸的方法，我就不说了，一个是我没弄过，二是身为国人的我为真没有付费购买信息的习惯。我的方法是使用一些第三方网站来实现每日新闻的推送，国内的网站我推荐 <a href="http://ikindle.mobi/" target="_blank">ikindle.mobi</a> 和 <a href="http://dogear.mobi/" target="_blank">狗耳朵</a>，注册成功后，你可以在帐号设置里设置自己的 Kindle 邮箱，然后勾选你感兴趣的新闻进行推送，需要说明的是，记得一定要在 Amazon 的 Manage your Kindle 页面下把相应网站地址添加到白名单里，这样每天清晨你打开 Kindle 就可以浏览最新的国内外资讯。狗耳朵还提供一个烧制 Google Reader 的 RSS 种子功能，不过貌似每天发送的文件太多了，有被退信的现象，我不太推荐，毕竟我的 Google Reader 里少说也有几十个种子。说到 Google Reader ，我不得不推荐 <a href="http://www.instapaper.com/" target="_blank">Instapaper</a>， 老外的创意实在是太绝了，在阅读 Google Reader 时，如果想读这篇文章现在又没有时间仔细阅读，可以点击 Instapaper 提供的 Read Later 按钮，Instapaper 自动把该文章推送到你的 Kindle 上。目前 iPad 上的 Flipboard 应用也开始支持 Instapaper 了。<a href="http://www.instascriber.com/" target="_blank">Instascriber</a> 提供了自动推送 RSS 种子的服务，应该说是 Instapaper 服务的再集成，感兴趣的朋友可以试试。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2464" title="kindle_keyboard_thumb_1" src="http://www.chenjunlu.com/wp-content/uploads/2011/12/kindle_keyboard_thumb_1.jpg" alt="" width="407" height="252" /></p>
<p>也许有的人还会抱怨 Kindle 原生系统没有 pdf 自动切白边功能，的确，不过使用 <a href="http://sourceforge.net/projects/briss/" target="_blank">Briss</a> 开源软件完全可以自己手动切白边，Briss 的好处就是跨平台，并且用户自由度比较高。</p>
<p>絮絮叨叨的说了一堆，以上就是我使用 Kindle 的一个月的上手经验，希望有着同样爱好的朋友能够一起交流。Kindle 说到头来就是一个读书的工具，在这里，我希望跟大家一起共勉，让我们多多看书，充实自己，提高自己，为自己，也为身边那些爱你的人。最后，送给大家关于梦想的一句话：</p>
<blockquote><p>梦想无论怎样模糊，总潜伏在我们心底，使我们的心境永远得不到宁静，直到这些梦想成为事实才止；像种子在地下一样,一定要萌芽滋长，伸出地面来，寻找阳光。</p>
<p style="text-align: right;">－－ 林语堂</p>
</blockquote>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2012年05月7日 -- <a href="http://www.chenjunlu.com/2012/05/how-to-remove-all-personal-archive-documents-of-kindle/" title="如何批量删除 Kindle 上的归档文档？">如何批量删除 Kindle 上的归档文档？</a> (0)</li><li>2011年08月4日 -- <a href="http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/" title="Comex &#8212; 年仅19岁的超级黑客">Comex &#8212; 年仅19岁的超级黑客</a> (0)</li><li>2011年03月16日 -- <a href="http://www.chenjunlu.com/2011/03/pes2011-for-android-and-ipad/" title="PES2011 for Android and iPad">PES2011 for Android and iPad</a> (0)</li><li>2011年03月2日 -- <a href="http://www.chenjunlu.com/2011/03/ipad-tips/" title="iPad 你不可不知的使用小技巧">iPad 你不可不知的使用小技巧</a> (0)</li><li>2011年01月20日 -- <a href="http://www.chenjunlu.com/2011/01/how-to-configure-your-ipad-after-jailbreaking/" title="玩转 iPad：越狱后的配置">玩转 iPad：越狱后的配置</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/12/how-to-play-kindle-keyboard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下安装 Cognos Server</title>
		<link>http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-cognos-server-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 09:27:53 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[CM-CFG-5063]]></category>
		<category><![CDATA[CM-CFG-5137]]></category>
		<category><![CDATA[CM-SYS-5124]]></category>
		<category><![CDATA[Cognos]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[RHEL]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2436</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2444" title="Cognos_IBM_logo_centered" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/Cognos_IBM_logo_centered.jpg" alt="Cognos_IBM_logo_centered" width="281" height="111" /></p>
最近一段时间，公司这边最大的项目就是 BI 项目了，公司买了 N 台服务器，用来运行 IBM Cognos 商业智能解决方案。我实际上是在项目的上线部署的过程中才参与进来，说心里话，真的从中学到很多东西。过去在 HP Neoview 组也号称涉足商业智能，但是毕竟只是支持，通过这个项目，我才真正了解到了一个公司应该如何来构建自己的商业智能解决方案。技术层面上，我除了掌握了 Cognos 的一些简单安装配置外，还接触到了 Oracle GoldenGate 技术，GoldenGate 亚秒级的数据同步技术，不但实现了数据库的冗余备份，而且使用 Cognos ETL 工具对备库进行抽取，也大大降低生产数据库的负载。GoldenGate 这方面的内容以后我也会把一些实践心得写到博客上来。感兴趣的朋友请关注博客的相关更新。

下面我来简单介绍一下 Cognos Server 的配置过程：
... ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2444" title="Cognos_IBM_logo_centered" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/Cognos_IBM_logo_centered.jpg" alt="Cognos_IBM_logo_centered" width="281" height="111" /></p>
<p>最近一段时间，公司这边最大的项目就是 BI 项目了，公司买了 N 台服务器，用来运行 IBM Cognos 商业智能解决方案。我实际上是在项目的上线部署的过程中才参与进来，说心里话，真的从中学到很多东西。过去在 HP Neoview 组也号称涉足商业智能，但是毕竟只是支持，通过这个项目，我才真正了解到了一个公司应该如何来构建自己的商业智能解决方案。技术层面上，我除了掌握了 Cognos 的一些简单安装配置外，还接触到了 Oracle GoldenGate 技术，GoldenGate 亚秒级的数据同步技术，不但实现了数据库的冗余备份，而且使用 Cognos ETL 工具对备库进行抽取，也大大降低生产数据库的负载。GoldenGate 这方面的内容以后我也会把一些实践心得写到博客上来。感兴趣的朋友请关注博客的相关更新。</p>
<p>下面我来简单介绍一下 Cognos Server 的配置过程：</p>
<ol>
<li>安装 Java SDK。由于 Cognos 要求的 Java 版本比较高，所以必须自行下载新版本的 Java。我自己下载并安装的是 jdk1.6.0_29。</li>
<li>创建 itadmin 用户和用户组。</li>
<li>配置相关环境变量：<br />
<blockquote><p>export JAVA_HOME=/jboss/jdk1.6.0_29<br />
export PATH=$JAVA_HOME/bin:$PATH:.<br />
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib</p></blockquote>
</li>
<li>配置 vncserver 并启动：<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ vi .vnc/xstartup<br />
#!/bin/sh</p>
<p># Uncomment the following two lines for normal desktop:<br />
unset SESSION_MANAGER<br />
exec /etc/X11/xinit/xinitrc</p>
<p>[ -x /etc/vnc/xstartup ] &amp;&amp; exec /etc/vnc/xstartup<br />
[ -r $HOME/.Xresources ] &amp;&amp; xrdb $HOME/.Xresources<br />
xsetroot -solid grey<br />
vncconfig -iconic &amp;<br />
xterm -geometry 80&#215;24+10+10 -ls -title “$VNCDESKTOP Desktop” &amp;<br />
twm &amp;<br />
[itadmin@dlidcbiuatapp ~]$ vncserver</p></blockquote>
</li>
<li>创建安装目录，并修改相应的权限：<br />
<blockquote><p>[root@dlidcbiuatapp ~]# mkdir -p /opt/ibm/cognos<br />
[root@dlidcbiuatapp ~]# chown -R itadmin:itadmin /opt/ibm/cognos</p></blockquote>
</li>
<li>安装 Cognos Server 的依赖软件包。<br />
<blockquote><p>[root@dlidcbiuatapp ~]# yum install libXp*<br />
[root@dlidcbiuatapp ~]# yum install openmotif*<br />
[root@dlidcbiuatapp ~]# yum install compat-libstdc++*</p></blockquote>
</li>
<li>使用 vncviewer 以 itadmin 登录 vncserver。</li>
<li>挂载 Cognos Server 安装光盘。<br />
<blockquote><p>[root@dlidcbiuatapp ~]# mount -o loop /media/Cognos_Server_linux_x86_64.iso /cognos/</p></blockquote>
</li>
<li>运行安装脚本：<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ cd /cognos/linuxi38664h/<br />
[itadmin@dlidcbiuatapp linuxi38664h]$ ./issetup</p></blockquote>
</li>
<li>拷贝jar文件。<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ cp /opt/ibm/cognos/c10_64/bin64/jre/6.0/lib/ext/bcprov-jdk14-134.jar $JAVA_HMOE/jre/lib/ext/</p></blockquote>
</li>
<li>在 /opt/ibm/cognos/c10_64/webapps/p2pd/WEB-INF/lib/ 目录下添加 Oracle 数据库驱动包 ojdbc14.jar。</li>
<li>启动可视化配置：<br />
<blockquote><p>[itadmin@dlidcbiuatapp ~]$ cd /opt/ibm/cognos/c10_64/bin64/<br />
[itadmin@dlidcbiuatapp bin64]$ ./cogconfig.sh</p></blockquote>
</li>
<li>配置 content manager。</li>
<li>拷贝 /opt/ibm/cognos/c10_64/webcontent/ 目录下的所有内容到 /opt/ibm/cognos/c10_64/webapps/p2pd/ 目录下。</li>
<li>启动 Cognos server。</li>
<li>打开浏览器输入：http://10.10.7.175:9300/p2pd/servlet/dispatch</li>
</ol>
<p>在具体的实践中，如果你遇到了 CM-CFG-5137 错误，log 给出的具体信息是：“Content Manager was unable to complete the initialization of the content store.”。请参考<a href="http://www-01.ibm.com/support/docview.wss?uid=swg21342265" target="_blank">这里</a>解决。</p>
<p>如果你遇到了CM-CFG-5063 错误，那么你一定是数据库的用户配置的权限不够，具体请参考<a href="https://www-304.ibm.com/support/docview.wss?uid=swg21340046" target="_blank">这里</a>解决。</p>
<p>另外一个需要说明的就是，如果你使用 Oracle 作为 Cognos Server 的数据库，那么创建的数据库编码方式一定要是 UTF-8，否则你会遇到 CM-SYS-5124 错误，排错请参考<a href="https://www-304.ibm.com/support/docview.wss?uid=swg21338618" target="_blank">这里</a>解决。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年07月12日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-configure-the-installed-apache-as-a-service-of-the-linux-server/" title="配置编译安装的 Apache 为系统服务">配置编译安装的 Apache 为系统服务</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 Mac OS X 下使用 IPython</title>
		<link>http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-ipython-under-mac-os-x</link>
		<comments>http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 01:08:08 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[easy_install]]></category>
		<category><![CDATA[iMac]]></category>
		<category><![CDATA[iPython]]></category>
		<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[readline]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2399</guid>
		<description><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2422" title="IPython_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/IPython_logo.png" alt="IPython_logo" width="140" height="140" /></p>
使用 IPython 真的很让人着迷，我决定把家里的 iMac 也安装上 IPython 以便于我进一步的学习。在 Mac OS X 下安装 IPython 则是件很简单的事，使用 easy_install 命令即可。值得说明的是，由于 Mac OS X Snow Leopard 更改了 GNU Lisence，所以在 Mac OS X 下安装 IPython 还单独需要 readline 功能，不过在 setuptools 工具面前一切都那么简单。直接在 Mac 的命令行下执行如下命令即可，具体过程如下：
... ...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-2422" title="IPython_logo" src="http://www.chenjunlu.com/wp-content/uploads/2011/11/IPython_logo.png" alt="IPython_logo" width="140" height="140" /></p>
<p>使用 IPython 真的很让人着迷，我决定把家里的 iMac 也安装上 IPython 以便于我进一步的学习。在 Mac OS X 下安装 IPython 则是件很简单的事，使用 easy_install 命令即可。值得说明的是，由于 Mac OS X Snow Leopard 更改了 GNU Lisence，所以在 Mac OS X 下安装 IPython 还单独需要 readline 功能，不过在 setuptools 工具面前一切都那么简单。直接在 Mac 的命令行下执行如下命令即可，具体过程如下：</p>
<blockquote><p><code>chenjunlu@mac:~ &gt; easy_install-2.6 readline ipython<br />
Searching for readline<br />
Reading http://pypi.python.org/simple/readline/<br />
Reading http://github.com/ludwigschwardt/python-readline<br />
Reading http://www.python.org/<br />
Best match: readline 6.2.1<br />
Downloading http://pypi.python.org/packages/2.6/r/readline/readline-6.2.1-py2.6-macosx-10.6-universal.egg#md5=ede81e48d1d5a0b889fe75a240833f47<br />
Processing readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
creating /Library/Python/2.6/site-packages/readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
Extracting readline-6.2.1-py2.6-macosx-10.6-universal.egg to /Library/Python/2.6/site-packages<br />
Adding readline 6.2.1 to easy-install.pth file</code></p>
<p><code>Installed /Library/Python/2.6/site-packages/readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
Processing dependencies for readline<br />
Finished processing dependencies for readline<br />
Searching for ipython<br />
Reading http://pypi.python.org/simple/ipython/<br />
Reading http://ipython.scipy.org<br />
Reading http://ipython.scipy.org/dist<br />
Reading http://ipython.scipy.org/dist/0.10<br />
Reading http://ipython.scipy.org/dist/0.9.1<br />
Reading http://ipython.scipy.org/dist/0.8.4<br />
Reading http://ipython.org<br />
Reading http://archive.ipython.org/release/0.11/<br />
Reading http://ipython.scipy.org/dist/old/0.9<br />
Best match: ipython 0.11<br />
Downloading http://archive.ipython.org/release/0.11/ipython-0.11-py2.6.egg<br />
Processing ipython-0.11-py2.6.egg<br />
creating /Library/Python/2.6/site-packages/ipython-0.11-py2.6.egg<br />
Extracting ipython-0.11-py2.6.egg to /Library/Python/2.6/site-packages<br />
Adding ipython 0.11 to easy-install.pth file<br />
Installing ipcontroller script to /usr/local/bin<br />
error: /usr/local: Permission denied<br />
chenjunlu@mac:~ &gt; sudo easy_install-2.6 readline ipython<br />
Searching for readline<br />
Best match: readline 6.2.1<br />
Processing readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
readline 6.2.1 is already the active version in easy-install.pth</code></p>
<p><code>Using /Library/Python/2.6/site-packages/readline-6.2.1-py2.6-macosx-10.6-universal.egg<br />
Processing dependencies for readline<br />
Finished processing dependencies for readline<br />
Searching for ipython<br />
Best match: ipython 0.11<br />
Processing ipython-0.11-py2.6.egg<br />
ipython 0.11 is already the active version in easy-install.pth<br />
Installing ipcontroller script to /usr/local/bin<br />
Installing iptest script to /usr/local/bin<br />
Installing ipcluster script to /usr/local/bin<br />
Installing ipython script to /usr/local/bin<br />
Installing pycolor script to /usr/local/bin<br />
Installing iplogger script to /usr/local/bin<br />
Installing irunner script to /usr/local/bin<br />
Installing ipengine script to /usr/local/bin<br />
Installing ipython-qtconsole script to /usr/local/bin</code></p>
<p><code>Using /Library/Python/2.6/site-packages/ipython-0.11-py2.6.egg<br />
Processing dependencies for ipython<br />
Finished processing dependencies for ipython<br />
chenjunlu@mac:~ &gt;</code></p></blockquote>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年03月28日 -- <a href="http://www.chenjunlu.com/2011/03/microsoft-mouse-driver-under-mac-os-x/" title="Mac OS X 下的 MicroSoft 鼠标驱动">Mac OS X 下的 MicroSoft 鼠标驱动</a> (2)</li><li>2011年11月2日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Python 和 IPython">在 RHEL 5.5 下安装 Python 和 IPython</a> (0)</li><li>2011年08月4日 -- <a href="http://www.chenjunlu.com/2011/08/comex-a-hacker-with-nineteen-years-old/" title="Comex &#8212; 年仅19岁的超级黑客">Comex &#8212; 年仅19岁的超级黑客</a> (0)</li><li>2011年07月14日 -- <a href="http://www.chenjunlu.com/2011/07/how-to-edit-the-hosts-file-in-mac-os-x/" title="在 Mac OS X 下修改 hosts 文件">在 Mac OS X 下修改 hosts 文件</a> (3)</li><li>2010年06月22日 -- <a href="http://www.chenjunlu.com/2010/06/ios4-%e7%bb%88%e4%ba%8e%e5%87%ba%e6%9d%a5%e4%ba%86/" title="iOS4 终于出来了">iOS4 终于出来了</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在 RHEL 5.5 下安装 Python 和 IPython</title>
		<link>http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-install-python-and-ipython-under-rhel-5-5</link>
		<comments>http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 06:58:45 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[OS]]></category>
		<category><![CDATA[信息世界 | IT]]></category>
		<category><![CDATA[egg]]></category>
		<category><![CDATA[iPython]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[setuptools]]></category>

		<guid isPermaLink="false">http://www.chenjunlu.com/?p=2392</guid>
		<description><![CDATA[上周利用一周的时间学习了《A Byte of Python》，基本掌握了 Python 语言，但我作为一名系统工程师，基本告别了令人讨厌的编码工作，所以学习 Python 的主要原因除了爱好，就是想用它进行系统管理，所以我又开始读《Python for Unix and Linux System Administration》这本书，我开始尝试用 Python 来进行系统配置。工欲善其事，必先利其器！使用 Python 进行系统管理，当然首推 IPython，IPython 是一种“高级交互式Python”， 除了包含内置的交互解释器的功能（当然这个用起来感觉还是不一样地）以外还提供了一组灰常灰常有用的工具。Fernando Pérez 是 iPython 的创建者，他通过阅读《IPP and LazyPython》产生了灵感，现在他是 IPython 对象的核心开发人。在 Fernando 看来，IPython 是一种能够解决问题的高度可配置的工具。

下面我来介绍一下在 RHEL 5.5 下如何安装 Python 和 IPython。我的 RHEL 5.5 64bit 预装的是 Python 2.4.3，版本比较老，而 iPython 0.11 要求 Python 的版本至少是2.6。好在可以在一个系统上安装多个版本的 Python，前提是不要安装在同一个目录中，具体的安装配置过程如下：
<ol>
	<li>使用 yum 安装 Python 的依赖包。</li>
	<li>编译安装 Python 程序包。</li>
	<li>创建软连接</li>
	<li>如果运行上一步创建的软连接报函数库没有加载的错误，请配置 Python 函数库：</li>
	<li>安装 IPython 程序包。</li>
	<li>大功告成！</li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>上周利用一周的时间学习了《A Byte of Python》，基本掌握了 Python 语言，但我作为一名系统工程师，基本告别了令人讨厌的编码工作，所以学习 Python 的主要原因除了爱好，就是想用它进行系统管理，所以我又开始读《Python for Unix and Linux System Administration》这本书，我开始尝试用 Python 来进行系统配置。工欲善其事，必先利其器！使用 Python 进行系统管理，当然首推 IPython，IPython 是一种“高级交互式Python”， 除了包含内置的交互解释器的功能（当然这个用起来感觉还是不一样地）以外还提供了一组灰常灰常有用的工具。Fernando Pérez 是 iPython 的创建者，他通过阅读《IPP and LazyPython》产生了灵感，现在他是 IPython 对象的核心开发人。在 Fernando 看来，IPython 是一种能够解决问题的高度可配置的工具。</p>
<p>下面我来介绍一下在 RHEL 5.5 下如何安装 Python 和 IPython。我的 RHEL 5.5 64bit 预装的是 Python 2.4.3，版本比较老，而 iPython 0.11 要求 Python 的版本至少是2.6。好在可以在一个系统上安装多个版本的 Python，前提是不要安装在同一个目录中，具体的安装配置过程如下：</p>
<ol>
<li>使用 yum 安装 Python 的依赖包。<br />
<code>yum -y install gcc gdbm-devel readline-devel ncurses-devel zlib-devel bzip2-develsqlite-devel db4-devel openssl-devel tk-devel bluez-libs-devel make</code></li>
<li>编译安装 Python 程序包。<br />
<code>[root@pubservicedb ~]# tar -xvf Python-2.7.2.tar.bz2<br />
[root@pubservicedb ~]# cd Python-2.7.2<br />
[root@pubservicedb Python-2.7.2]# ./configure --prefix=/usr/local/python2.7 --with-threads --enable-shared<br />
[root@pubservicedb Python-2.7.2]# make<br />
[root@pubservicedb Python-2.7.2]# make install</code></li>
<li>创建软连接。<br />
<code>[root@pubservicedb Python-2.7.2]# ln -sf /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7</code></li>
<li>如果运行上一步创建的软连接报函数库没有加载的错误，请配置 Python 函数库：<br />
<code>[root@pubservicedb Python-2.7.2]# python2.7<br />
python2.7: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory<br />
[root@pubservicedb Python-2.7.2]# touch /etc/ld.so.conf.d/python2.7.conf<br />
[root@pubservicedb Python-2.7.2]# echo "/usr/local/python2.7/lib/" &gt;&gt; /etc/ld.so.conf.d/python2.7.conf<br />
[root@pubservicedb Python-2.7.2]# cat /etc/ld.so.conf.d/python2.7.conf<br />
[root@pubservicedb Python-2.7.2]# ldconfig<br />
[root@pubservicedb Python-2.7.2]# python2.7<br />
Python 2.7.2 (default, Nov 1 2011, 14:00:46)<br />
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2<br />
Type "help", "copyright", "credits" or "license" for more information.<br />
&gt;&gt;&gt;<br />
[root@pubservicedb Python-2.7.2]#</code></li>
<li>安装 IPython 程序包。<br />
<code>[root@pubservicedb ~]# tar -xvf ipython-0.11<br />
[root@pubservicedb ~]# cd ipython-0.11<br />
[root@pubservicedb ipython-0.11]# python2.7 setup.py install<br />
[root@pubservicedb python2.7]# ln -sf /usr/local/python2.7/bin/ipython /usr/bin/ipython<br />
[root@pubservicedb python2.7]# ipython<br />
Python 2.7.2 (default, Nov 1 2011, 14:00:46)<br />
Type "copyright", "credits" or "license" for more information.</code></p>
<p><code>IPython 0.11 -- An enhanced Interactive Python.<br />
? -&gt; Introduction and overview of IPython's features.<br />
%quickref -&gt; Quick reference.<br />
help -&gt; Python's own help system.<br />
object? -&gt; Details about 'object', use 'object??' for extra details.<br />
In [1]: exit()<br />
[root@pubservicedb ipython]#</code></li>
<li>大功告成！</li>
</ol>
<p>本文使用的是源代码安装的方式来安装的 IPython，其实如果系统上安装了 setuptools，那么你可以使用 easy_install 来安装，或者直接下载 IPython 的 egg 包再配置好相关环境后直接使用。如果你对 setuptools 和 egg 包的概念不是很理解，请参考这篇<a href="http://www.ibm.com/developerworks/cn/linux/l-cppeak3.html" target="_blank">文章</a>。</p>
<h3  class="related_post_title">相关日志：</h3><ul class="related_post"><li>2011年11月24日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-cognos-server-under-rhel-5-5/" title="在 RHEL 5.5 下安装 Cognos Server">在 RHEL 5.5 下安装 Cognos Server</a> (0)</li><li>2011年11月3日 -- <a href="http://www.chenjunlu.com/2011/11/how-to-install-ipython-under-mac-os-x/" title="在 Mac OS X 下使用 IPython">在 Mac OS X 下使用 IPython</a> (0)</li><li>2011年10月25日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-fix-the-segmentation-fault-when-using-yum/" title="yum 命令出现“段错误”的解决方案">yum 命令出现“段错误”的解决方案</a> (0)</li><li>2011年10月16日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-setup-oracle-ha-environment-by-using-rhcs-under-rhel-5-5/" title="在 RHEL 5.5 下应用 RHCS 实现 Oracle HA">在 RHEL 5.5 下应用 RHCS 实现 Oracle HA</a> (0)</li><li>2011年10月10日 -- <a href="http://www.chenjunlu.com/2011/10/how-to-solve-the-multipath-problem-for-hp-msa2312fc-under-rhel-5-5/" title="在 RHEL 5.5 下解决 MSA2312fc 的多路径问题">在 RHEL 5.5 下解决 MSA2312fc 的多路径问题</a> (0)</li><li>2011年08月3日 -- <a href="http://www.chenjunlu.com/2011/08/how-to-solve-the-multipath-problem-for-ibm-ds4700-under-rhel-5-5/" title="RHEL 5.5 下解决 IBM DS4700 的多路径问题">RHEL 5.5 下解决 IBM DS4700 的多路径问题</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.chenjunlu.com/2011/11/how-to-install-python-and-ipython-under-rhel-5-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

