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

<channel>
	<title>Linux&#124;系统管理&#124;WEB开发</title>
	<atom:link href="http://blog.wgzhao.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.wgzhao.com</link>
	<description>关注Linux，系统管理，WEB开发以及开源世界</description>
	<lastBuildDate>Sat, 28 Aug 2010 08:57:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>fg 7.0.2 release</title>
		<link>http://blog.wgzhao.com/2010/08/25/fg-7-0-2-release.html</link>
		<comments>http://blog.wgzhao.com/2010/08/25/fg-7-0-2-release.html#comments</comments>
		<pubDate>Wed, 25 Aug 2010 10:37:44 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[技术技巧]]></category>
		<category><![CDATA[gfw]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2249</guid>
		<description><![CDATA[Update: 请使用评论里给出的新版本链接。 下载它，使用它。你懂的。 https://dl-web.dropbox.com/u/220586/fg702p.exe http://www.adrive.com/public/10caf93ac8b3d4b6b4364f29dee5f669b8de5d5c7fd6df869f9691494085f2f9.html 小心你的XX360，小心你的诺顿，小心你的瑞星，总之，小心除MS官方以外的“杀毒”软件。 Linux使用者正在得意的笑！]]></description>
			<content:encoded><![CDATA[<p><strong>Update: 请使用评论里给出的新版本链接。</strong></p>
<p>下载它，使用它。你懂的。</p>
<p><a href="https://dl-web.dropbox.com/u/220586/fg702p.exe"> https://dl-web.dropbox.com/u/220586/fg702p.exe</a><span style="text-decoration: underline;"><br />
</span> <a href="http://www.adrive.com/public/10caf93ac8b3d4b6b4364f29dee5f669b8de5d5c7fd6df869f9691494085f2f9.html"> http://www.adrive.com/public/10caf93ac8b3d4b6b4364f29dee5f669b8de5d5c7fd6df869f9691494085f2f9.html</a></p>
<p>小心你的XX360，小心你的诺顿，小心你的瑞星，总之，小心除MS官方以外的“杀毒”软件。</p>
<p>Linux使用者正在得意的笑！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/08/25/fg-7-0-2-release.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>public DNS servers</title>
		<link>http://blog.wgzhao.com/2010/08/24/public-dns-servers.html</link>
		<comments>http://blog.wgzhao.com/2010/08/24/public-dns-servers.html#comments</comments>
		<pubDate>Tue, 24 Aug 2010 09:05:15 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[WEB开发]]></category>
		<category><![CDATA[dns]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2246</guid>
		<description><![CDATA[珍爱生命，远离国内ISP提供的DNS。 以下是一些考谱的公众DNS服务器： Google Public DNS (8.8.8.8, 8.8.4.4,4.3.2.1)、 Norton DNS (198.153.192.1, 198.153.194.1)、 OpenDNS (208.67.222.222, 208.67.220.220)、 OpenDNS Family (208.67.222.123, 208.67.220.123)、 Comodo Secure DNS (156.154.70.22, 156.156.71.22)、 ScrubIt DNS (67.138.54.100, 207.225.209.66)、 DNS Advantage (156.154.70.1, 156.154.71.1)。]]></description>
			<content:encoded><![CDATA[<div>珍爱生命，远离国内ISP提供的DNS。</p>
<p>以下是一些考谱的公众DNS服务器：</p>
<p>Google Public DNS (8.8.8.8, 8.8.4.4,4.3.2.1)、</p>
<p>Norton DNS (198.153.192.1, 198.153.194.1)、</p>
<p>OpenDNS (208.67.222.222, 208.67.220.220)、</p>
<p>OpenDNS Family (208.67.222.123, 208.67.220.123)、</p>
<p>Comodo Secure DNS (156.154.70.22, 156.156.71.22)、</p>
<p>ScrubIt DNS (67.138.54.100, 207.225.209.66)、</p>
<p>DNS Advantage (156.154.70.1, 156.154.71.1)。</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/08/24/public-dns-servers.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>抓取LINUX桌面的视频</title>
		<link>http://blog.wgzhao.com/2010/08/23/record-linux-desktop-using-ffmpeg.html</link>
		<comments>http://blog.wgzhao.com/2010/08/23/record-linux-desktop-using-ffmpeg.html#comments</comments>
		<pubDate>Mon, 23 Aug 2010 05:57:51 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[Linux技术]]></category>
		<category><![CDATA[技术技巧]]></category>
		<category><![CDATA[ffmpeg]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2243</guid>
		<description><![CDATA[$ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg 我们在一些视频网站上看到别人的3D桌面怎么怎么酷的视频，通常就是这么来的，ffmpeg可以直接解码X11的图形，并转换到相应输出格式。 ffmpeg的通常用法是，根据一堆参数，输出一个文件，输出文件通常放最后，下面解析下几个参数： -f x11grab 指定输入类型。因为x11的缓冲区不是普通的视频文件可以侦测格式，必须指定后ffmpeg才知道如何获得输入。 -s wxga 设置抓取区域的大小。wxga是1366*768的标准说法，也可以换成-s 800×600的写法。 -r 25 设置帧率，即每秒抓取的画面数。 -i :0.0 设置输入源，本地X默认在0.0 -sameq 保持跟输入流一样的图像质量，以用来后期处理。 至于其他ffmpeg的用法，可以参考下面两篇文章： How to Extract Audio Tracks from YouTube Videos Converting YouTube Flash Videos to a Better Format with ffmpeg]]></description>
			<content:encoded><![CDATA[<blockquote><p>$ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg</p></blockquote>
<p>我们在一些视频网站上看到别人的3D桌面怎么怎么酷的视频，通常就是这么来的，ffmpeg可以直接解码X11的图形，并转换到相应输出格式。</p>
<p>ffmpeg的通常用法是，根据一堆参数，输出一个文件，输出文件通常放最后，下面解析下几个参数：</p>
<p>-f x11grab 指定输入类型。因为x11的缓冲区不是普通的视频文件可以侦测格式，必须指定后ffmpeg才知道如何获得输入。</p>
<p>-s wxga 设置抓取区域的大小。wxga是1366*768的标准说法，也可以换成-s 800×600的写法。</p>
<p>-r 25 设置帧率，即每秒抓取的画面数。</p>
<p>-i :0.0 设置输入源，本地X默认在0.0</p>
<p>-sameq 保持跟输入流一样的图像质量，以用来后期处理。</p>
<p>至于其他ffmpeg的用法，可以参考下面两篇文章：</p>
<p><a href="http://www.catonmat.net/blog/how-to-extract-audio-tracks-from-youtube-videos/" target="_blank">How to Extract Audio Tracks from YouTube Videos</a><br />
<a href="http://www.catonmat.net/blog/converting-youtube-flvs-to-a-better-format-with-ffmpeg" target="_blank">Converting YouTube Flash Videos to a Better Format with ffmpeg</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/08/23/record-linux-desktop-using-ffmpeg.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>山寨版Matrix</title>
		<link>http://blog.wgzhao.com/2010/08/19/matrix-keyboard.html</link>
		<comments>http://blog.wgzhao.com/2010/08/19/matrix-keyboard.html#comments</comments>
		<pubDate>Thu, 19 Aug 2010 08:41:09 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[随心所想]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/2010/08/19/%e5%b1%b1%e5%af%a8%e7%89%88matrix.html</guid>
		<description><![CDATA[山寨版Matrix，原由 mlsx 上載。 用皮皮的架子鼓架空笔记本，增加散热能力。 用从用户处讹来的原状IBM键盘做主键盘。 笔记本键盘主要用做快捷键。]]></description>
			<content:encoded><![CDATA[<div style="text-align: left; padding: 3px;">
<a href="http://www.flickr.com/photos/mlsx/4906513189/" title="photo sharing"><img src="http://farm5.static.flickr.com/4095/4906513189_a7d50ef3b7.jpg" style="border: solid 2px #000000;" alt="" /></a><br />
<br />
<span style="font-size: 0.8em; margin-top: 0px;"><a href="http://www.flickr.com/photos/mlsx/4906513189/">山寨版Matrix</a>，原由 <a href="http://www.flickr.com/people/mlsx/">mlsx</a> 上載。</span>
</div>
<p>
用皮皮的架子鼓架空笔记本，增加散热能力。<br />
用从用户处讹来的原状IBM键盘做主键盘。<br />
笔记本键盘主要用做快捷键。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/08/19/matrix-keyboard.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows下压缩包在linux解压乱码的解决办法</title>
		<link>http://blog.wgzhao.com/2010/08/06/fix-the-encode-of-files-extracted-from-windows-zip-ball.html</link>
		<comments>http://blog.wgzhao.com/2010/08/06/fix-the-encode-of-files-extracted-from-windows-zip-ball.html#comments</comments>
		<pubDate>Fri, 06 Aug 2010 02:27:58 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[技术技巧]]></category>
		<category><![CDATA[7z]]></category>
		<category><![CDATA[convmv]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2237</guid>
		<description><![CDATA[我的系统是ubuntu 10.04 ，编码是zh_CN.UTF-8。 我从网络上下载的绝大部分zip包，解压后，连带目录和文件都是乱码。在终端尝试更换LANG，LANGUAGE等环境变量，还是不能直接解决问题。 而且用unzip解压后，无论你怎么设置convmv命令的编码参数，均不能解决问题。后通过7z工具算是暂时解决了这个问题。 首先用apt安装7z工具包。 然后用下面的两条指令： 1) LANG=C 7z x xxx.zip 2) convmv -f cp936 -t utf8 -r &#8211;notest *]]></description>
			<content:encoded><![CDATA[<p>我的系统是ubuntu 10.04 ，编码是zh_CN.UTF-8。<br />
我从网络上下载的绝大部分zip包，解压后，连带目录和文件都是乱码。在终端尝试更换LANG，LANGUAGE等环境变量，还是不能直接解决问题。<br />
而且用unzip解压后，无论你怎么设置convmv命令的编码参数，均不能解决问题。后通过7z工具算是暂时解决了这个问题。<br />
首先用apt安装7z工具包。<br />
然后用下面的两条指令：<br />
1) LANG=C 7z x xxx.zip<br />
2) convmv -f cp936 -t utf8 -r &#8211;notest *</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/08/06/fix-the-encode-of-files-extracted-from-windows-zip-ball.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>在ssh服务里使用chroot</title>
		<link>http://blog.wgzhao.com/2010/07/14/chroot-in-ssh-server.html</link>
		<comments>http://blog.wgzhao.com/2010/07/14/chroot-in-ssh-server.html#comments</comments>
		<pubDate>Wed, 14 Jul 2010 08:00:19 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[Linux技术]]></category>
		<category><![CDATA[chroot]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2235</guid>
		<description><![CDATA[对于虚拟主机而言，平衡用户易用体验和安全是一个挑战，比如如果开发ssh给用户，那么无疑能极大的增加用户操作的灵活性，但是ssh的强大也是得在安全方面让管理员很头疼，如何将用户限制在自己的环境中，就显得尤为重要。幸而openSSH已经了解到了这点，目前的版本均支持chroot功能，下面我简单的描述一下在ubuntu 10.04系统上如何实现，其他系统实现的原理相同，只是一些配置文件和指令不同而已。 1）确定chroot目录 按照传统，chroot的目录都在/var/chroot/下面。我们遵循这种传统，将目录限定在/var/chroot/sshd下面。 2）创建必要的目录和文件。 我们需要在/var/chroot/sshd下创建一个最小的系统环境，特别是需要有交互终端，如果用到一个系统高级的功能，还需要一些特定的设备文件。因为我们这里只是演示最基本的功能，复杂的的功能，可以根据错误提示要按需增加需要的资源。 $sudo mkdir -p /var/chroot/sshd/{bin,home,etc} $sudo apt-get install busybox-static $sudo cp /bin/busybox /var/chroot/sshd/bin/ 每次敲busybox 显然不够环保，我们还是做一些额外的工作，将所有内置的busybox命令都用软链接的方式导出来，下面的python脚本能快速帮你做到这点。 cat ctlink.py #!/usr/bin/env python import commands import os,sys output=commands.getoutput('./busybox --help') c=[x.strip() for x in output.split('functions:')[1].strip().split(',')] for x in c: os.system("ln -sf busybox %s" % x) 只需要在/var/chroot/sshd/bin/下面执行这个脚本就好了。 为了能让chroot环境能正确识别用户，组等信息，我们需要在etc目录下创建passwd,group,shadow等文件。而用户登录验证的时候，依赖的是chroot之前的/etc/{passwd,shadow,group}文件，这里我们采取硬链接方式来解决这个问题 $cd /var/chroot/sshd/etc $sudo ln -n /etc/{passwd,group,shadow} . 当然，如果你的/var和/并不是在一个分区上，那么硬链接就不能工作，那你可以尝试在/etc和/var/chroot/sshd/etc来个同步工具。 [...]]]></description>
			<content:encoded><![CDATA[<p>对于虚拟主机而言，平衡用户易用体验和安全是一个挑战，比如如果开发ssh给用户，那么无疑能极大的增加用户操作的灵活性，但是ssh的强大也是得在安全方面让管理员很头疼，如何将用户限制在自己的环境中，就显得尤为重要。幸而openSSH已经了解到了这点，目前的版本均支持chroot功能，下面我简单的描述一下在ubuntu 10.04系统上如何实现，其他系统实现的原理相同，只是一些配置文件和指令不同而已。</p>
<p>1）确定chroot目录<br />
按照传统，chroot的目录都在/var/chroot/<server>下面。我们遵循这种传统，将目录限定在/var/chroot/sshd下面。</p>
<p>2）创建必要的目录和文件。<br />
我们需要在/var/chroot/sshd下创建一个最小的系统环境，特别是需要有交互终端，如果用到一个系统高级的功能，还需要一些特定的设备文件。因为我们这里只是演示最基本的功能，复杂的的功能，可以根据错误提示要按需增加需要的资源。<br />
$sudo mkdir -p /var/chroot/sshd/{bin,home,etc}<br />
$sudo apt-get install busybox-static<br />
$sudo cp /bin/busybox /var/chroot/sshd/bin/</p>
<p>每次敲busybox <cmd>显然不够环保，我们还是做一些额外的工作，将所有内置的busybox命令都用软链接的方式导出来，下面的python脚本能快速帮你做到这点。</p>
<pre>
cat ctlink.py
#!/usr/bin/env python
import commands
import os,sys

output=commands.getoutput('./busybox --help')
c=[x.strip() for x in  output.split('functions:')[1].strip().split(',')]
for x in c:
	os.system("ln -sf busybox %s" % x)
</pre>
<p>只需要在/var/chroot/sshd/bin/下面执行这个脚本就好了。</p>
<p>为了能让chroot环境能正确识别用户，组等信息，我们需要在etc目录下创建passwd,group,shadow等文件。而用户登录验证的时候，依赖的是chroot之前的/etc/{passwd,shadow,group}文件，这里我们采取硬链接方式来解决这个问题<br />
$cd /var/chroot/sshd/etc<br />
$sudo ln -n /etc/{passwd,group,shadow} .</p>
<p>当然，如果你的/var和/并不是在一个分区上，那么硬链接就不能工作，那你可以尝试在/etc和/var/chroot/sshd/etc来个同步工具。</p>
<p>3）创建测试帐号<br />
我们不用之前的用户帐号，是因为我们需要对帐号的基本信息做一些修改，我们不想破坏你现在的环境，因为来一个测试帐号是比较安全的。<br />
$ sudo useradd -d /var/chroot/sshd/home/test -m -s /bin/sh  test<br />
然后修改/etc/passwd文件将<br />
test:x:1001:1001::/var/chroot/sshd/home/test:/bin/sh<br />
修改成<br />
test:x:1001:1001::/home/test:/bin/sh<br />
接着创建密码<br />
$sudo passwd test<br />
输入新的 UNIX 密码：<br />
重新输入新的 UNIX 密码：<br />
passwd：已成功更新密码</p>
<p>4）修改openssh-server配置文件<br />
编辑/etc/ssh/sshd_config文件，在最后一行增加chrootDirectory指令来指定chroot的路径，类似如下：<br />
chrootDirectory /var/chroot/sshd<br />
保存退出。</p>
<p>5）测试，测试<br />
以上步骤完成后，执行<br />
$sudo /etc/init.d/sshd reload<br />
来重新加载配置文件<br />
然后我们可以测试了，下面是一个登录的测试结果：</p>
<pre>
$ ssh test@localhost
test@localhost's password:
Linux wgzhao-laptop 2.6.32-23-generic #37-Ubuntu SMP Fri Jun 11 07:54:58 UTC 2010 i686 GNU/Linux
Ubuntu 10.04 LTS
~ $ pwd
/home/test
~ $ cd /
/ $ ls
bin   etc   home
/ $
</pre>
<p></cmd></server></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/07/14/chroot-in-ssh-server.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>共享会话的ssh连接配置</title>
		<link>http://blog.wgzhao.com/2010/07/02/multiple-ssh-connects-with-the-same-session.html</link>
		<comments>http://blog.wgzhao.com/2010/07/02/multiple-ssh-connects-with-the-same-session.html#comments</comments>
		<pubDate>Fri, 02 Jul 2010 07:41:33 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[Linux技术]]></category>
		<category><![CDATA[技术技巧]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2231</guid>
		<description><![CDATA[针对一个服务器需要同时开几个ssh连接，也许是同一个帐号链接，也许是不同的帐号，你是不死和厌烦了每次的都要输入密码？其实ssh链接可以做到共享会话的。 一个办法是用一些ssh链接客户端，比如Windows下的Secure CRT，Linux下的hotssh。 另外一个办法，就是自己修改ssh客户端配置文件，创建~/.ssh/ssh_config文件，加入下面的内容： Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p 当对服务器发起一个链接的时候，在~/.ssh目录下就会创建一个文件，文件命名规则是master-@: 当你退出所有多该服务器的链接是，该文件会自动删除。 现在就尝试吧]]></description>
			<content:encoded><![CDATA[<p>针对一个服务器需要同时开几个ssh连接，也许是同一个帐号链接，也许是不同的帐号，你是不死和厌烦了每次的都要输入密码？其实ssh链接可以做到共享会话的。<br />
一个办法是用一些ssh链接客户端，比如Windows下的<a href="http://www.vandyke.com/products/securecrt/">Secure CRT</a>，Linux下的<a href="http://projects.gnome.org/hotssh/">hotssh</a>。<br />
另外一个办法，就是自己修改ssh客户端配置文件，创建~/.ssh/ssh_config文件，加入下面的内容：<br />
Host *<br />
  ControlMaster auto<br />
  ControlPath ~/.ssh/master-%r@%h:%p</p>
<p>当对服务器发起一个链接的时候，在~/.ssh目录下就会创建一个文件，文件命名规则是master-<username>@<hostname>:
<port>
当你退出所有多该服务器的链接是，该文件会自动删除。<br />
现在就尝试吧</port></hostname></username></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/07/02/multiple-ssh-connects-with-the-same-session.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>redhat el5如何映射裸设备到逻辑卷</title>
		<link>http://blog.wgzhao.com/2010/06/24/mapping-raw-devices-to-lvm-devices-on-redhat-as5-update-2-or-later.html</link>
		<comments>http://blog.wgzhao.com/2010/06/24/mapping-raw-devices-to-lvm-devices-on-redhat-as5-update-2-or-later.html#comments</comments>
		<pubDate>Thu, 24 Jun 2010 13:06:48 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[Linux技术]]></category>
		<category><![CDATA[dmsetup]]></category>
		<category><![CDATA[raw devices]]></category>
		<category><![CDATA[udev]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2222</guid>
		<description><![CDATA[之前的版本如何做，这里不做描述，自行google。 之前通常的方法，在该版本，KERNEL并不能直接获得设备名称或者主次设备号，我们需要通过dmsetup指令来间接获得。 一下操作的目录均在/etc/udev/rules.d/。 1）编辑90-dm.rules文件，注释掉下面则行 ﻿KERNEL==&#8221;dm-[0-9]*&#8221;, ACTION==&#8221;add&#8221;, OPTIONS+=&#8221;ignore_device&#8221; 2）编辑60-raw.rules文件，加入下面几行： KERNEL!="dm-[0-9]*",GOTO="skip_dm" PROGRAM!="/sbin/dmsetup  ls --exec /bin/basename -j %M -m %m", GOTO="skip_dm" RESULT=="vg1-lv1", RUN+="/bin/sh -c '/bin/raw /dev/raw/raw1 $MAJOR $MINOR'" LABEL=skip_dm 上面第一行代码表示如果不是dm设备，则直接跳到skip_dm处 第二行表示如果后面的指令返回为假（非0值），则跳到skip_dm处。 如果以上条件满足，则来到真正的裸设备映射指令。注意要注意的是RESULT给出的结果是/dev/mapper下的lv名称，而不是大家通过google查询到的一些资料所宣称的mpath1，当然，到底这里结果值是多少，我们下面会通过测试来获得。后面的RUN指令就比较浅白了，直接通过主次设备号来做绑定。 如果还有其他LVM设备需要绑定，依次添加类似行。 但是，但是，如果你有上百个LVM设备需要做裸设备映射呢？难道写上几百行。当然不需要这样，我们可以通过匹配方式来操作，就像下面这样： RESULT=="vg1-lv[0-9]*",RUN+="/bin/sh -c '/bin/raw /dev/raw/raw$MINOR $MAJOR $MINOR'" 这里我们通过次设备号来作为裸设备的编号依次映射。 恩，看上去很好，But，这里有个bug，那就是我们无法对raw0这样的设备进行映射，而第一个LV对应的MINOR恰好是0的话（很不幸，大部分情况是这样），那我们该怎么办。简单的办法是每次给MINOR+1来作为裸设备的编号。就像下面这样： RESULT=="vg1-lv[0-9]*",RUN+="/bin/sh -c '/bin/raw /dev/raw/raw$((MINOR+1)) $MAJOR $MINOR'" 看上去很美好，很遗憾，我在Asianux 3.0 SP2,Centos 5.4版本上均没有成功。所以我采取了下面折衷的办法： KERNEL!="dm-[0-9]*",GOTO="skip_dm" PROGRAM!="/sbin/dmsetup ls --exec /bin/basename -j [...]]]></description>
			<content:encoded><![CDATA[<p>之前的版本如何做，这里不做描述，自行google。</p>
<p>之前通常的方法，在该版本，KERNEL并不能直接获得设备名称或者主次设备号，我们需要通过dmsetup指令来间接获得。</p>
<p>一下操作的目录均在/etc/udev/rules.d/。</p>
<p>1）编辑90-dm.rules文件，注释掉下面则行</p>
<p>﻿KERNEL==&#8221;dm-[0-9]*&#8221;, ACTION==&#8221;add&#8221;, OPTIONS+=&#8221;ignore_device&#8221;</p>
<p>2）编辑60-raw.rules文件，加入下面几行：</p>
<pre>
KERNEL!="dm-[0-9]*",GOTO="skip_dm"
PROGRAM!="/sbin/dmsetup  ls --exec /bin/basename -j %M -m %m", GOTO="skip_dm"
RESULT=="vg1-lv1", RUN+="/bin/sh -c '/bin/raw /dev/raw/raw1 $MAJOR $MINOR'"
LABEL=skip_dm
</pre>
<div>上面第一行代码表示如果不是dm设备，则直接跳到skip_dm处</div>
<div>第二行表示如果后面的指令返回为假（非0值），则跳到skip_dm处。</div>
<div>如果以上条件满足，则来到真正的裸设备映射指令。注意要注意的是RESULT给出的结果是/dev/mapper下的lv名称，而不是大家通过google查询到的一些资料所宣称的mpath1，当然，到底这里结果值是多少，我们下面会通过测试来获得。后面的RUN指令就比较浅白了，直接通过主次设备号来做绑定。</div>
<div>如果还有其他LVM设备需要绑定，依次添加类似行。</div>
<div>但是，但是，如果你有上百个LVM设备需要做裸设备映射呢？难道写上几百行。当然不需要这样，我们可以通过匹配方式来操作，就像下面这样：</div>
<pre>
RESULT=="vg1-lv[0-9]*",RUN+="/bin/sh -c '/bin/raw /dev/raw/raw$MINOR $MAJOR $MINOR'"
</pre>
<div>这里我们通过次设备号来作为裸设备的编号依次映射。</div>
<div>恩，看上去很好，But，这里有个bug，那就是我们无法对raw0这样的设备进行映射，而第一个LV对应的MINOR恰好是0的话（很不幸，大部分情况是这样），那我们该怎么办。简单的办法是每次给MINOR+1来作为裸设备的编号。就像下面这样：</div>
<div>
<pre>
RESULT=="vg1-lv[0-9]*",RUN+="/bin/sh -c '/bin/raw /dev/raw/raw$((MINOR+1)) $MAJOR $MINOR'"
</pre>
</div>
<div>看上去很美好，很遗憾，我在Asianux 3.0 SP2,Centos 5.4版本上均没有成功。所以我采取了下面折衷的办法：</div>
<pre>
KERNEL!="dm-[0-9]*",GOTO="skip_dm"
PROGRAM!="/sbin/dmsetup ls --exec /bin/basename -j %M -m %m", GOTO="skip_dm"
RESULT=="vg1-lv[0-9]*", RUN+="/bin/sh -c 'if [ $MINOR -eq 0 ]; then /bin/raw /dev/raw/raw256 $MAJOR $MINOR; else /bin/raw /dev/raw/raw$MINOR $MAJOR  $MINOR;fi'"
LABEL=skip_dm
</pre>
<div>上面的做法是如果次设备号是0的话，我们尽可能把他映射到裸设备编号靠后的设备，这里采取的是256。如果你需要映射的设备操作超过256的话，你知道该怎么办</div>
<div>保存该文件后，执行start_udev，然后执行raw -qa，看看是不是已经绑定了，类似如下：</div>
<pre>
/dev/raw/raw1:	bound to major 253, minor 1
/dev/raw/raw2:	bound to major 253, minor 2
/dev/raw/raw3:	bound to major 253, minor 3
/dev/raw/raw4:	bound to major 253, minor 4
/dev/raw/raw5:	bound to major 253, minor 5
/dev/raw/raw6:	bound to major 253, minor 6
/dev/raw/raw7:	bound to major 253, minor 7
/dev/raw/raw8:	bound to major 253, minor 8
/dev/raw/raw9:	bound to major 253, minor 9
/dev/raw/raw10:	bound to major 253, minor 10
/dev/raw/raw11:	bound to major 253, minor 11
/dev/raw/raw12:	bound to major 253, minor 12
/dev/raw/raw13:	bound to major 253, minor 13
/dev/raw/raw14:	bound to major 253, minor 14
/dev/raw/raw15:	bound to major 253, minor 15
/dev/raw/raw16:	bound to major 253, minor 16
/dev/raw/raw17:	bound to major 253, minor 17
/dev/raw/raw18:	bound to major 253, minor 18
/dev/raw/raw19:	bound to major 253, minor 19
/dev/raw/raw256:	bound to major 253, minor 0
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/06/24/mapping-raw-devices-to-lvm-devices-on-redhat-as5-update-2-or-later.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用python解决amule中文乱码的问题</title>
		<link>http://blog.wgzhao.com/2010/06/18/correct-ed2k-links-with-python.html</link>
		<comments>http://blog.wgzhao.com/2010/06/18/correct-ed2k-links-with-python.html#comments</comments>
		<pubDate>Fri, 18 Jun 2010 09:04:17 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[Linux技术]]></category>
		<category><![CDATA[WEB开发]]></category>
		<category><![CDATA[技术技巧]]></category>
		<category><![CDATA[amule]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2216</guid>
		<description><![CDATA[Linux下的amule并不会对链接做编码转换，也就是说，比如下面这样的链接地址： ed2k://&#124;file&#124;%E7%94%9F%E6%B4%BB%E5%A4%A7%E7%88%86%E7%82%B8.The.Big.Bang.Theory.S02E15.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTs%E4%BA%BA%E4%BA%BA%E5%BD%B1%E8%A7%86.avi&#124;230043648&#124;e49a10d7052b5dfee4aa8b3336b76301&#124;h=qkhaltxhuygwphznp2holcvdarxki3e6&#124;/ 直接交给amule下载时，给出的文件名就会变成下面这个样子： çæ´»å¤§çç¸.The.Big.Bang.Theory.S02E04.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTsäººäººå½±è§.avi 所以需要我们自己先把链接转变成“正确”的编码，然后交给amule，还是上面那个链接，转换过来就是： ed2k://&#124;file&#124;生活大爆炸.The.Big.Bang.Theory.S02E15.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTs人人影视.avi&#124;230043648&#124;e49a10d7052b5dfee4aa8b3336b76301&#124;h=qkhaltxhuygwphznp2holcvdarxki3e6&#124; 这样交给amule就会获得正确的文件名。 如果你一次性获得大量的这样链接，我们可以简单的写个脚本来转换，这里用Python演示，代码如下： 上面的代码针对需求做了一些改进，那就是你只需要提供带有ed2k链接的页面，脚本会自动分析并转码，这样，你只需要复制屏幕上的输出，然后粘贴到amule即可。 即便是这样，有人可能觉得还是麻烦，如果在复制的时候，同时就完成了转码，那不更好吗？恩，人的欲望是无止境的，要做到这点，就得监控粘贴板了。 学习Python时间不长，对X不太了解，google了一番，找到了一个样例代码，照葫芦画瓢，变成了下面的代码： 运行该脚本到后台，尝试复制ed2k链接，然后粘贴看看，是不是改变了？]]></description>
			<content:encoded><![CDATA[<p>Linux下的amule并不会对链接做编码转换，也就是说，比如下面这样的链接地址：<br />
ed2k://|file|%E7%94%9F%E6%B4%BB%E5%A4%A7%E7%88%86%E7%82%B8.The.Big.Bang.Theory.S02E15.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTs%E4%BA%BA%E4%BA%BA%E5%BD%B1%E8%A7%86.avi|230043648|e49a10d7052b5dfee4aa8b3336b76301|h=qkhaltxhuygwphznp2holcvdarxki3e6|/</p>
<p>直接交给amule下载时，给出的文件名就会变成下面这个样子：<br />
çæ´»å¤§çç¸.The.Big.Bang.Theory.S02E04.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTsäººäººå½±è§.avi</p>
<p><span id="more-2216"></span><br />
所以需要我们自己先把链接转变成“正确”的编码，然后交给amule，还是上面那个链接，转换过来就是：<br />
ed2k://|file|生活大爆炸.The.Big.Bang.Theory.S02E15.Chi_Eng.HR-HDTV.AC3.960X528.x264-YYeTs人人影视.avi|230043648|e49a10d7052b5dfee4aa8b3336b76301|h=qkhaltxhuygwphznp2holcvdarxki3e6|</p>
<p>这样交给amule就会获得正确的文件名。<br />
如果你一次性获得大量的这样链接，我们可以简单的写个脚本来转换，这里用Python演示，代码如下：<br />
<script type='text/javascript' src='http://snipt.net/embed/d5da927c274387abd348305e45e3b528'></script><br />
上面的代码针对需求做了一些改进，那就是你只需要提供带有ed2k链接的页面，脚本会自动分析并转码，这样，你只需要复制屏幕上的输出，然后粘贴到amule即可。</p>
<p>即便是这样，有人可能觉得还是麻烦，如果在复制的时候，同时就完成了转码，那不更好吗？恩，人的欲望是无止境的，要做到这点，就得监控粘贴板了。<br />
学习Python时间不长，对X不太了解，google了一番，<a href="http://github.com/nkchenz/watchmen/raw/9af2be161184f250276b723233e84eb9a1c92e03/watchmen.py">找到了一个样例代码</a>，照葫芦画瓢，变成了下面的代码：<br />
<script type='text/javascript' src='http://snipt.net/embed/bb2b5131aa43015b97ec794f901880a4'></script><br />
运行该脚本到后台，尝试复制ed2k链接，然后粘贴看看，是不是改变了？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/06/18/correct-ed2k-links-with-python.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>有链接无说明</title>
		<link>http://blog.wgzhao.com/2010/06/18/fg-last-edition.html</link>
		<comments>http://blog.wgzhao.com/2010/06/18/fg-last-edition.html#comments</comments>
		<pubDate>Fri, 18 Jun 2010 01:41:12 +0000</pubDate>
		<dc:creator>wgzhao</dc:creator>
				<category><![CDATA[WEB开发]]></category>
		<category><![CDATA[gfw]]></category>

		<guid isPermaLink="false">http://blog.wgzhao.com/?p=2214</guid>
		<description><![CDATA[http://www.adrive.com/public/3c6cddabe023b34b32684fbc2bc4942eecbc7382db35d8fc62d64a6cdd16ba76.html http://www.adrive.com/public/688ac9412399642b3484ae96bd379e8da1c4f3e838f3fda0b3e9de50742bb946.html 别问这是什么，下载了，你就知道了。]]></description>
			<content:encoded><![CDATA[<p>http://www.adrive.com/public/3c6cddabe023b34b32684fbc2bc4942eecbc7382db35d8fc62d64a6cdd16ba76.html</p>
<p>http://www.adrive.com/public/688ac9412399642b3484ae96bd379e8da1c4f3e838f3fda0b3e9de50742bb946.html</p>
<p>别问这是什么，下载了，你就知道了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.wgzhao.com/2010/06/18/fg-last-edition.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
