<?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>apt-blog.net   无证程序员的PT桑 &#187; Linux</title> <atom:link href="http://apt-blog.net/tag/linux/feed" rel="self" type="application/rss+xml" /><link>http://apt-blog.net</link> <description>潜逃中。</description> <lastBuildDate>Sat, 26 Nov 2011 07:45:40 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3</generator> <item><title>黑莓续断膏 MDS服务器的Linux版本</title><link>http://apt-blog.net/blackberry_broken_net_fix_server_for_linux</link> <comments>http://apt-blog.net/blackberry_broken_net_fix_server_for_linux#comments</comments> <pubDate>Wed, 23 Feb 2011 10:18:43 +0000</pubDate> <dc:creator>BOYPT</dc:creator> <category><![CDATA[C/C++]]></category> <category><![CDATA[Mobile]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[Blackberry]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[mds]]></category> <category><![CDATA[黑莓]]></category> <guid
isPermaLink="false">http://apt-blog.net/blackberry_broken_net_fix_server_for_linux</guid> <description><![CDATA[黑莓系统5.0以上系统在没有购买使用黑莓网络服务的手机上的断网现象一直比较恼人。几个月前有人做出了“黑莓续断膏”，原理是自架一台服务器，程序模拟MDS服务的简单回应，可以忽悠手机继续在线。 5.0系统断网自动修复程序黑莓断续膏(AntiBrokenNet！) BrokenNetFixup断网修复工具 区别是前者后台自动修复，后者要手动运行修复。 从网友的留言看出，虽然软件虽然有效，但没有稳定的服务器，软件刚出现时候确实有一批地址提供了服务，但很快就失效了。北京小C这里提供了模拟MDS服务器的程序，是VC写的一个小UDP服务器，虽然原理很简单，但用一台Windows的服务器来跑成本太高了，当然很难稳定提供。 其实服务只是很简单的几行代码，稍微改了一下就可以在Linux下面运行。一台低端Linux VPS的费用大概一年200RMB，这个费用对大多数人来说都不是什么问题的，所以推荐想要稳定防断网服务器的人去弄一台，一台可以很多人共享了。VPS侦探 、Lowendbox上有很多这样的推荐。 Linux版本的MDS服务器代码在Google Code上，可以直接下载。 在服务器（Debian/Ubuntu系统）上编译并运行： 1 2 3 4 5 sudo apt-get install build-essential wget http://ptcoding.googlecode.com/svn/trunk/mds_server.c gcc -Wall -o mds_server mds_server.c sudo cp mds_server /usr/local/bin/ /usr/local/bin/mds_server 现在可以设置手机的续断软件使用这个服务器来连接断网测试了，手机连接的时候，会实时打印出手机的连接信息跟PIN码。 当然最好把程序加入系统自动启动： sudo touch /var/log/mds_server.log sudo chown nobody /var/log/mds_server.log sudo sed -i '/^exit 0/isu nobody -c &#34;nohup /usr/local/bin/mds_server &#62;&#62;/var/log/mds_server.log &#38;&#34;' /etc/rc.local 这样程序会在系统启动后自动在后台运行，运行的LOG会记录在/var/log/mds_server.log文件当中。 下面也无偿提供一枚MDS服务器，就是跑在我的Linux服务器上的。 [...]]]></description> <content:encoded><![CDATA[<p>黑莓系统5.0以上系统在没有购买使用黑莓网络服务的手机上的断网现象一直比较恼人。几个月前有人做出了“黑莓续断膏”，原理是自架一台服务器，程序模拟MDS服务的简单回应，可以忽悠手机继续在线。</p><ul><li><a
href="http://www.bbercn.com/auto-fix-network-problems-by-antibrokennet.html">5.0系统断网自动修复程序黑莓断续膏(AntiBrokenNet！)</a></li><li><a
href="http://www.bjxiaoc.cn/index.php/archives/11437">BrokenNetFixup断网修复工具</a></li></ul><p>区别是前者后台自动修复，后者要手动运行修复。</p><p>从网友的留言看出，虽然软件虽然有效，但没有稳定的服务器，软件刚出现时候确实有一批地址提供了服务，但很快就失效了。<a
href="http://www.bjxiaoc.cn/index.php/archives/11437">北京小C</a>这里提供了模拟MDS服务器的程序，是VC写的一个小UDP服务器，虽然原理很简单，但用一台Windows的服务器来跑成本太高了，当然很难稳定提供。</p><p>其实服务只是很简单的几行代码，稍微改了一下就可以在Linux下面运行。一台低端Linux VPS的费用大概一年200RMB，这个费用对大多数人来说都不是什么问题的，所以推荐想要稳定防断网服务器的人去弄一台，一台可以很多人共享了。<a
href="http://www.vpser.net/">VPS侦探</a> 、<a
href="http://www.lowendbox.com/">Lowendbox</a>上有很多这样的推荐。</p><p>Linux版本的MDS服务器代码在<a
href="http://code.google.com/p/ptcoding/source/browse/trunk/mds_server.c">Google Code</a>上，可以<a
href="http://ptcoding.googlecode.com/svn/trunk/mds_server.c">直接下载</a>。</p><p>在服务器（Debian/Ubuntu系统）上编译并运行：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>ptcoding.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>trunk<span style="color: #000000; font-weight: bold;">/</span>mds_server.c
<span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #660033;">-Wall</span> <span style="color: #660033;">-o</span> mds_server mds_server.c
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> mds_server <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>mds_server</pre></td></tr></table></div><p>现在可以设置手机的续断软件使用这个服务器来连接断网测试了，手机连接的时候，会实时打印出手机的连接信息跟PIN码。</p><p>当然最好把程序加入系统自动启动：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">touch</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>mds_server.log
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> nobody <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>mds_server.log
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">'/^exit 0/isu nobody -c &quot;nohup /usr/local/bin/mds_server &gt;&gt;/var/log/mds_server.log &amp;&quot;'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.local</pre></div></div><p>这样程序会在系统启动后自动在后台运行，运行的LOG会记录在<code>/var/log/mds_server.log</code>文件当中。</p><p>下面也无偿提供一枚MDS服务器，就是跑在我的Linux服务器上的。</p><div
class="wp_syntax"><div
class="code"><pre class="text" style="font-family:monospace;">地址：119.134.250.11
端口：19781</pre></div></div><p>另外服务端口可以修改源代码里面的宏：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define LOCAL_SERVER_PORT 19781</span></pre></td></tr></table></div> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/blackberry_broken_net_fix_server_for_linux/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Debian/Ubuntu - Xen折腾秘笈</title><link>http://apt-blog.net/cheat-notes-about-using-xen-under-debian-ubuntu</link> <comments>http://apt-blog.net/cheat-notes-about-using-xen-under-debian-ubuntu#comments</comments> <pubDate>Mon, 23 Aug 2010 10:40:47 +0000</pubDate> <dc:creator>BOYPT</dc:creator> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[Debian]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Ubuntu]]></category> <category><![CDATA[virtual]]></category> <category><![CDATA[xen]]></category> <category><![CDATA[xen-tools]]></category> <guid
isPermaLink="false">http://apt-blog.net/?p=864</guid> <description><![CDATA[作为秘籍，本文包含折腾Xen所必须了解，但是在一般能找到的教程里面都没提及的资料。这里不包含一些必须的步骤等，所以很可能你需要先浏览这些资料，并让浏览器同时开着这些页面随时查阅： DebianWiki Xen DebianWiki DebianInstaller/Xen XenWiki HowTos Ubuntu Doc/Xen Ubuntu 9.04上的XEN虚拟服务器（一） 安装XEN （二） 安装虚拟机 在 Debian 上安装和配置 Xen 一：Xen工具及其关系 《在 Debian 上安装和配置 Xen》一文把在Debian上安装Xen简化成一道命令： On Debian Lenny 5.0 : apt-get install xen-hypervisor-3.2-1-amd64 xen-linux-system-2.6.26-2-xen-amd64 xen-utils-3.2-1 xenstore-utils xenwatch xen-shell xen-tools On Debian Squeeze 6.0 apt-get install xen-linux-system xen-hypervisor xen-utils xen-tools xen-hypervisor主要只有一个文件:/boot/xen-3.2-1-amd64.gz，就是宿主内核； xen-linux-system则是打了Xen补丁的Linux内核，这个内核脱离hypervisor是无法启动的，只适用于虚拟机；dom0对hypervisor来说也是虚拟机之一，domU也可以直接用这个内核启动。 xen-utils则是运行在Dom0上的程序，比如xend、xm，作用是跟hypervisor通讯，是主要由Python编写的一系列程序。 xen-tools是如xen-create-image的一系列工具，作为xm工具的前端，用以管理安装虚拟机；这是一套perl脚本，也有很灵活扩展性。 xen-shell是一个交互式的shell，常见用于VPS服务商提供给用户的操作界面，用户根据几个封装好的命令控制虚拟机如重启等工作。(Debian 6.0 下没有了。) xenstore-utils、 [...]]]></description> <content:encoded><![CDATA[<p>作为秘籍，本文包含折腾Xen所必须了解，但是在一般能找到的教程里面都没提及的资料。这里不包含一些必须的步骤等，所以很可能你需要先浏览这些资料，并让浏览器同时开着这些页面随时查阅：</p><ul><li><a
href="http://wiki.debian.org/Xen">DebianWiki Xen</a></li><li><a
href="http://wiki.debian.org/DebianInstaller/Xen">DebianWiki DebianInstaller/Xen</a></li><li><a
href="http://wiki.xensource.com/xenwiki/HowTos">XenWiki HowTos</a></li><li><a
href="https://help.ubuntu.com/community/Xen">Ubuntu Doc/Xen</a></li><li>Ubuntu 9.04上的XEN虚拟服务器<a
href="http://wells.osall.com/blog/index.php?m=content&amp;p=1434">（一） 安装XEN</a> <a
href="http://wells.osall.com/blog/index.php?m=content&amp;p=1436">（二） 安装虚拟机</a></li><li><a
href="http://www.vpsee.com/2010/03/install-xen-on-debian/">在 Debian 上安装和配置 Xen</a></li></ul><h2>一：Xen工具及其关系</h2><p>《<a
href="http://www.vpsee.com/2010/03/install-xen-on-debian/">在 Debian 上安装和配置 Xen</a>》一文把在Debian上安装Xen简化成一道命令：</p><p>On Debian Lenny 5.0 :</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> xen-hypervisor-<span style="color: #000000;">3.2</span>-<span style="color: #000000;">1</span>-amd64
xen-linux-system-2.6.26-<span style="color: #000000;">2</span>-xen-amd64 xen-utils-<span style="color: #000000;">3.2</span>-<span style="color: #000000;">1</span>
xenstore-utils xenwatch xen-shell xen-tools</pre></div></div></p><p>On Debian Squeeze 6.0</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> xen-linux-system xen-hypervisor xen-utils xen-tools</pre></div></div></p><ul><li><code>xen-hypervisor</code>主要只有一个文件:<code>/boot/xen-3.2-1-amd64.gz</code>，就是宿主内核；</li><li><code>xen-linux-system</code>则是打了Xen补丁的Linux内核，这个内核脱离hypervisor是无法启动的，只适用于虚拟机；dom0对hypervisor来说也是虚拟机之一，domU也可以直接用这个内核启动。</li><li><code>xen-utils</code>则是运行在Dom0上的程序，比如xend、xm，作用是跟hypervisor通讯，是主要由Python编写的一系列程序。</li><li><code>xen-tools</code>是如<code>xen-create-image</code>的一系列工具，作为xm工具的前端，用以管理安装虚拟机；这是一套perl脚本，也有很灵活扩展性。</li><li><code>xen-shell</code>是一个交互式的shell，常见用于VPS服务商提供给用户的操作界面，用户根据几个封装好的命令控制虚拟机如重启等工作。(Debian 6.0 下没有了。)</li><li><code>xenstore-utils</code>、 <code>xenwatch</code>分别是虚拟机间数据共享和虚拟机监控的工具，不是必要组建，可不安装。</li></ul><h2>二: Dom0的启动</h2><ol><li><p>grub2跟xen dom0目前关系不怎么所以如果你用grub2启动遇到挂掉xen启动不起来之类的，换回grub-legacy吧。</p></li><li><p>装完xen-hypervisor后可以打开<code>/boot/grub/menu.lst</code>看看，第一个选项应该是<code>Xen 3.2-1-amd64</code>之类的，看他的启动参数，是先加载Xen内核/xen-3.2-1-amd64.gz，再按模块挂在Linux内核；如果没有出现，需要运行<code>update-grub</code>。有这个后就可以放心重启了。</p></li><li><p><code>/boot/grub/menu.lst</code>文件里面有这么一行配置：</p></li></ol><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">## Xen hypervisor options to use with the default Xen boot option</span>
<span style="color: #666666; font-style: italic;"># xenhopt=</span></pre></td></tr></table></div><p>是预留来传hypervisor参数的，比如要限制dom0的内存使用，可以写成：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># xenhopt=dom0_mem=256M</span></pre></td></tr></table></div><p>修改后记得运行 <code>update-grub</code>才生效。</p><p>关于Dom0内存的占用可能导致虚拟机不稳定可参看：<a
href="http://www.jolokianetworks.com/70Knowledge/Virtualization/My_Xen_is_Crashing!/Dom0_mem_allocation_and_domU_network_issues">Dom0 mem allocation and domU network issues</a>。</p><h2>三：虚拟机的网络</h2><p>无论是简单的桥接，安全的NAT子网，内部私有网，单双向网，利用内核的特性都可以做到： <a
href="http://wiki.kartbuilding.net/index.php/Xen_Networking">Xen Networking</a></p><h2>四：虚拟机的安装</h2><h3>关于管理工具</h3><p>有两套工具可以用来创建Xen虚拟机：<a
href="http://www.xen-tools.org/software/xen-tools/">xen-tools</a>, <a
href="http://libvirt.org/index.html">libvirt-bin</a>，从它们各自的主页很清晰看到它们的定位不同，前者主要用于本地管理Xen，由Debian支持，后者用于管理各种虚拟方案（xen,openvz,kvm,qeum,vbox,vmware....），由Redhat支持。虽然都支持跟兼容，但实际上前者有利于安装前者的系统，后者有利于安装后者的系统。这里只研究前者。</p><h3>关于 xen-create-image</h3><p>xen-tools是相当简单实用的一套脚本，教程里面一般提到使用的<code>xen-create-image</code>。</p><p>xen-tools有一个全局配置文件<code>/etc/xen-tools/xen-tools.conf</code>，里面写的参数会最终被<code>xen-create-image</code>的命令行参数覆盖或补充。</p><h3>关于 --install-method</h3><p>xen-tools的作用主要是控制怎么安装一个发行版，因为xen虚拟机的特殊方式，一般都不会启动该发行版的安装程序，而是用发行版的基础包管理来进行安装，安装参数<code>--install-method</code>负责这个过程，比如Debian/Ubuntu就要用<code>debootstrap</code>方法安装，CentOS/Fedora用<code>rinse</code>或<code>rpmstrap</code>，另外还有<code>copy</code>、<code>tar</code>方法。安装好一个模板系统后对那个镜像手动挂载，tar压缩后来用部署其他虚拟机，是个好方法。</p><h3>关于 --dist</h3><p><code>--dist</code>让你指定一个发行版的名字，你会发现并不是所有发行版都能被支持的，实际支持的可以看看<code>/usr/lib/xen-tools</code>的内容，里面各个对应发行版的目录内都包含了一系列的脚本，如预先安装什么包，需要设置某个配置文件，比如说<code>libc6-xen</code>，不过在<a
href="http://xen-tools.org/lists/xen-tools-discuss/Apr07/0265.html">64位机环境下这个是不需要的</a>，脚本会自动判断。</p><h3>关于安装新版本系统</h3><p>因为版本太旧，在Debian Lenny里面的xen-tools跟debootstrap不能直接支持比如Ubuntu Lucid(10.4)之类的较新的发行版的安装，倒是有比较曲折的方法<a
href="http://blog.webangel.ie/2010/04/ubuntu-upgrade-to-9-1010-04-for-xen-domu/">Ubuntu upgrade to 9.10/10.04 for Xen DomU</a> 。但其实有更好的方法：下载新版的<a
href="http://packages.debian.org/squeeze/xen-tools">Xen-tools</a>跟<a
href="http://packages.debian.org/squeeze/debootstrap">debootstrap</a>的deb回来装上。因为这些只是一些脚本，不会跟系统其他包有冲突。装完后就可以直接安装新版系统了。(dpkg安装新版xen-tool时候提示缺一个依赖，按名字装上即可)</p><h3>关于 --mirror</h3><p>安装教程里面一般都让你指定一个对应发行版的源，考虑到网速因素，这样安装一个虚拟机是很累的，虽然xen-create-image有个<code>--cache</code>可以在dom0上缓存deb包。其实如果你有相应发行版的iso文件，完全可以拿iso来做安装源：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>isodir
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-o</span> loop <span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>the_iso_file.iso <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>isodir
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>isodir
python <span style="color: #660033;">-m</span> SimpleHTTPServer</pre></td></tr></table></div><p>现在这个机器就在8000端口上运行着一个HTTP源了，直接在mirror参数里面指定该地址即可，这样的安装过程很快。缺点是可能安装脚本有一些包在iso中没有提供而出错，建议加上<code>--verbose</code>参数查看整个安装过程。</p><p>安装过程的日至会被放在<code>/var/log/xen-tools/&lt;NAME&gt;.log</code>，如果安装过程出现什么问题可以直接看这个对应的文件。使用本地ISO做源虽然一般没什么问题，但如果缺了什么包之类的会在日志中提示。</p><h3>关于 --role</h3><p><code>--role=udev</code>这个参数建议创建新虚拟机时候加上。<code>--role</code>参数会让创建脚本在<code>/etc/xen-tools/role.d/</code>目录下寻找相应名字的脚本运行，udev就是其中一个，作用是给虚拟机装上<code>udev</code>包。udev是提供动态<code>/dev</code>目录的机制，是提供内核对硬件识别的事件桥梁，对一般的xen虚拟机来说影响不算太大，如果不安装最显然的是会找不到<code>/dev/shm</code>挂载点（启动过程有一个warnning），但一般来说还是推荐安装。</p><p><code>/etc/xen-tools/role.d/</code>里面默认包含了以下一些有用的脚本，使用时可以逗号分隔，如<code>--role=udev,minimal,cfengine</code>：</p><ul><li><code>builder</code> 自动安装build-essential等编译链包，部署distcc集群有用。</li><li><code>cfengine</code> CFengine是一个服务器自动化控制服务，对部署大量服务器很有用。会拷贝dom0上的配置。</li><li><code>editor</code> 自动根据dom0里面的sed脚本来配置domU内的配置文件，具体可以打开<code>/etc/xen-tools/role.d/editor</code>看看说明。</li><li><code>passwd</code> 自动修改domU的密码。默认--passwd参数是会出现passwd的交互修改root密码的过程，用这个role脚本就可以实现自动应答。要使用<code>--role-args=mYpassWd</code>传入相应密码。</li><li><code>minimal</code> 精简化domU系统。安装一些screen、vim等实用工具，卸除manpages等对虚拟机意义不大的包。</li><li><code>udev</code> 如前述，安装<code>udev</code>包。</li><li><code>xdm</code> 安装X、xdm、icewm等GUI包。</li><li><code>gdm</code> 同上，登陆器换成gdm。</li></ul><p>另外这些脚本默认都是针对Debian系系统设计的，Redhat系的应该用不了。</p><h3>关于 --pygrub</h3><p>最后有个<code>--pygrub</code>参数，关系到domU的引导过程。xen的半虚拟并没有从引导区的虚拟过程，而是直接读取内核文件运行。默认情况下是直接用dom0的内核的，如果domU的发行版跟版本跟dom0一致，这样处理倒是很方便，但是一旦不一致就容易出现找不到root分区等各种引导问题。如果安装的domU的系统跟dom0不一致的（包括amd64/i386这样的架构不同），就加上<code>--pygrub</code>参数，这会让domU安装上它自己的内核，以及生成一个<code>/boot/grub/menu.lst</code>文件，引导虚拟机时会根据这个文件模拟grub出现一个引导菜单，提出其自己的内核文件来启动虚拟机。</p><p>pygrub其实是xend的一个python工具，在<code>/usr/lib/xen-3.2-1/bin/pygrub</code>，可以直接这样运行来测试pygrub是否正常读取到内核：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>xen-<span style="color: #000000;">3.2</span>-<span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>pygrub <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>xen<span style="color: #000000; font-weight: bold;">/</span>domains<span style="color: #000000; font-weight: bold;">/</span>lenny3<span style="color: #000000; font-weight: bold;">/</span>disk.img</pre></td></tr></table></div><p>会出现菜单，选择后会退出，返回一段临时文件数据，内核文件的临时位置。</p><p>目前在Debian Squeeze内的Xen 4.0的pygrub有个小小的低级错误，运行后会报模块导入错误，其实只要编辑<code>/usr/lib/xen-4.0/bin/pygrub</code>文件，把里面修改path的一行提前即可：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
</pre></td><td
class="code"><pre class="python" style="font-family:monospace;"><span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">insert</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>, <span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">'/../lib/python'</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;">#这行原在30行左右，提前到这里</span>
<span style="color: #ff7700;font-weight:bold;">import</span> xen.<span style="color: black;">lowlevel</span>.<span style="color: black;">xc</span>  <span style="color: #808080; font-style: italic;">#原本这里出错</span></pre></td></tr></table></div><h3>典型的几种创建方法</h3><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;">xen-create-image <span style="color: #660033;">--hostname</span>=my-lenny <span style="color: #660033;">--dist</span>=lenny <span style="color: #660033;">--mirror</span>=http:<span style="color: #000000; font-weight: bold;">//</span>mirrors.163.com<span style="color: #000000; font-weight: bold;">/</span>debian <span style="color: #660033;">--role</span>=udev <span style="color: #660033;">--force</span> <span style="color: #660033;">--verbose</span>
&nbsp;
xen-create-image <span style="color: #660033;">--hostname</span>=my-ubuntu-vm <span style="color: #660033;">--dist</span>=lucid <span style="color: #660033;">--mirror</span>=http:<span style="color: #000000; font-weight: bold;">//</span>mirrors.163.com<span style="color: #000000; font-weight: bold;">/</span>ubuntu <span style="color: #660033;">--role</span>=udev <span style="color: #660033;">--pygrub</span> <span style="color: #660033;">--force</span> <span style="color: #660033;">--verbose</span>
&nbsp;
xen-create-image <span style="color: #660033;">--hostname</span>=my-xen-vm <span style="color: #660033;">--dist</span>=squeeze <span style="color: #660033;">--install-method</span>=<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">--install-source</span>=<span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>system_tared.tar.gz <span style="color: #660033;">--pygrub</span> <span style="color: #660033;">--force</span> <span style="color: #660033;">--verbose</span></pre></td></tr></table></div><h2>第五章：虚拟机的运行</h2><h3>关于虚拟机配置文件</h3><p>完成创建虚拟机后，默认情况下在<code>/home/xen/domains/&lt;NAME&gt;</code>下生成虚拟机的磁盘文件，在<code>/etc/xen/&lt;NAME&gt;.cfg</code>生成相应虚拟机的配置文件。关于虚拟机配置的修改，只需直接打开这个cfg文件修改即可(如内存大小，CPU多少，使用VNC等)。配置文件其实是一个Python脚本，也就是说可以对虚拟机的参数进行创建时的动态调节。</p><p>配置文件的选项完整说明可以运行<code>xm create --help_config</code>查看。</p><p>启动虚拟机以Xen的术语来说是创建一个实例：<code>xm create -c /etc/xen/&lt;NAME&gt;.cfg</code>，-c参数可以马上进入虚拟机的console，使用pygrub的虚拟机只能通过这个方法看到grub菜单。</p><h3>关于虚拟机启动过程</h3><p>本文成文时，使用Debian Lenny默认安装系统部署的domU似乎都有一个启动bug，即创建后使用<code>xm console &lt;NAME&gt;</code>仅能看到虚拟机启动的log信息，但是不出现shell，也无法登录，无法响应，只能按<code>ctrl-]</code>返回dom0。如果按上述安装了新版的<a
href="http://packages.debian.org/squeeze/xen-tools">Xen-tools</a>跟<a
href="http://packages.debian.org/squeeze/debootstrap">debootstrap</a>再创建的虚拟机就没有这个问题了。</p><p>用了旧版工具但要修复这个问题也不算太麻烦：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;">xm shutdown <span style="color: #000000; font-weight: bold;">&lt;</span>NAME<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #666666; font-style: italic;">#确保关闭，运行xm list确保虚拟机已经没有运行</span>
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-o</span> loop <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>xen<span style="color: #000000; font-weight: bold;">/</span>domains<span style="color: #000000; font-weight: bold;">/&lt;</span>NAME<span style="color: #000000; font-weight: bold;">&gt;/</span>disk.img <span style="color: #000000; font-weight: bold;">/</span>mnt
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>inittab <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>inittab.bak
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/tty1/hvc0/'</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>inittab.bak <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>inittab
<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt</pre></td></tr></table></div><p>就是替换<code>/mnt/etc/inittab</code>文件里面，把虚拟终端的交互设备从tty1改成hvc0。在新版的xen-tools里面，这个替换已经由安装脚本完成了。hvc0是Xen虚拟机的类终端设备，只有让虚拟终端的输出输入跟hvc0链接，才能通过xen的console方法登录虚拟机。</p><p>如果使用vnc连接虚拟机，又会发现vnc里面无法登录虚拟机，vnc是framebuffer驱动的图形，默认连接tty1设备，可以按上述方法打开虚拟机的<code>/mnt/etc/inittab</code>文件，在getty那一段，写成这样：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">0</span>:<span style="color: #000000;">2345</span>:respawn:<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>getty <span style="color: #000000;">38400</span> hvc0
<span style="color: #000000;">1</span>:<span style="color: #000000;">2345</span>:respawn:<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>getty <span style="color: #000000;">38400</span> tty1</pre></td></tr></table></div><p>如果你安装的是Ubuntu，Ubuntu默认没有使用inittab来配置终端，而是使用了新的机制，使用目录<code>/etc/init/</code>里面的文件来控制，可以发现里面有tty1.conf之类的文件，可以<code>cp /etc/init/tty1.conf /etc/init/hvc0.conf</code>，然后打开<code>/etc/init/hvc0.conf</code>，把tty1那一段改成hvc0，保存即可。</p><h3>关于使用VNC查看虚拟机</h3><p>关于VNC的设置在<code>/etc/xen/xend-config.sxp</code>和各个虚拟机的配置文件里面都有选项，关系是前者是全局配置。</p><p>要打开一个虚拟机的VNC输出，只需在其配置文件内添加（望文生义即可）：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
</pre></td><td
class="code"><pre class="python" style="font-family:monospace;">vfb = <span style="color: black;">&#91;</span> <span style="color: #483d8b;">'type=vnc'</span> <span style="color: black;">&#93;</span>
<span style="color: #808080; font-style: italic;">#复杂点的：</span>
vfb = <span style="color: black;">&#91;</span> <span style="color: #483d8b;">'type=vnc,vncdisplay=10,vncpasswd=s3cr3t'</span> <span style="color: black;">&#93;</span></pre></td></tr></table></div><p>vncdisplay的值加上5900，得到的就是最终vnc服务所监听的端口。</p><p>更复杂的配置选项看<code>xm create --help_config</code>。</p><h3>关于虚拟机的自动启动</h3><p>让虚拟机跟随dom0启动的方法有很几种，比如在<code>/etc/xen/auto/</code>目录里面放虚拟机配置文件的链接。但似乎更好的做法是在每个配置文件里面写上：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
</pre></td><td
class="code"><pre class="python" style="font-family:monospace;">on_xend_start = <span style="color: #483d8b;">'start'</span>
on_xend_stop = <span style="color: #483d8b;">'suspend'</span></pre></td></tr></table></div><p>这样的好处是当dom0关机，Xen会先让虚拟机进入挂起状态（当然也可以改成shutdown直接关机），下次重启后虚拟机直接恢复。</p><h2>第六章：其他问题</h2><h3>关于虚拟机的磁盘方式</h3><p>使用xen-create-image工具创建的虚拟机，默认都是使用loop文件设备来映射，这样对io比较敏感的服务来说会有些影响。<a
href="http://wiki.xensource.com/xenwiki/blktap">Xen3.3后引入了使用blktap驱动映射的磁盘设备</a>，据称性能会有提高，不过根据试验好像跟pygrub配搭不怎么稳定（在xen-4.0下）。</p><p>觉得最靠谱的方式是使用lvm，xen-create-image工具也是支持直接创建lvm逻辑卷来安装的，这样即没有性能问题，也没有稳定问题。</p><h3>全虚拟半虚拟与CPU支持VM指令集的关系</h3><p>扫了一圈Google到的Xen资料，很多都让你检查<code>/proc/cpuinfo</code>里面有没有支持VM标记。其实CPU是否支持VM指令集，对xen来说只是能不能跑windows的问题，对于Xen的特色——半虚拟来说没什么影响，而且这才是xen最有价值的地方。</p><h2>相关资料</h2><ul><li><a
href="http://wiki.kartbuilding.net/index.php/Details,_Installation,_%26_Set-up_of_Debian_based_Linux_Servers">Details, Installation, &amp; Set-up of Debian based Linux Servers</a></li><li><a
href="http://mediakey.dk/~cc/howto-install-windows-xp-vista-on-xen/">Howto Install Windows XP / Vista on Xen</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/cheat-notes-about-using-xen-under-debian-ubuntu/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>下班关机拔U盘的提醒程序</title><link>http://apt-blog.net/shutdown_reminder_to_unplug_usb_drive</link> <comments>http://apt-blog.net/shutdown_reminder_to_unplug_usb_drive#comments</comments> <pubDate>Fri, 02 Jul 2010 10:57:46 +0000</pubDate> <dc:creator>PT</dc:creator> <category><![CDATA[Shell]]></category> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[beep]]></category> <category><![CDATA[device]]></category> <category><![CDATA[initscript]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[shutdown]]></category> <category><![CDATA[usb drive]]></category> <guid
isPermaLink="false">http://apt-blog.net/%e4%b8%8b%e7%8f%ad%e5%85%b3%e6%9c%ba%e6%8b%94u%e7%9b%98%e7%9a%84%e6%8f%90%e9%86%92%e7%a8%8b%e5%ba%8f</guid> <description><![CDATA[我的U盘是跟钥匙系一起的，最近两次因为U盘插在公司机器上下班后忘了拿，结果回家后在门口游荡，郁闷的等室友回来才有家门进，于是要做这么个东西，关机前检测到没拔U盘，要猛叫猛叫。 原理倒是不复杂，研究了下，检测U盘可以读取/proc/bus/usb/devices，如果主机上插有U盘，会出现Driver=usb-storage这一行的。 *Update: * /proc/bus/usb/devices只有在挂载了usbfs才有; usbutils工具里面除了lsusb，还提供了usb-devices工具，列出内容跟/proc/bus/usb/devices是一样的, 更适合。 然后是关机脚本的运行。Linux关机时候会执行level 0的init脚本，比如对于Debian/Ubuntu，就是/etc/rc0.d下的文件，我工作机跑的是Archlinux，专门为用户自定命令提供了/etc/rc.local.shutdown文件，作为/etc/rc.shutdown的hook，前者不会因为initscripts包的升级安装被覆盖。 至于让主机会叫，当然是主机喇叭了，这里可没有外放音箱。查了下发现beep这个程序，安装后发现功能还不少，可以定制beep的音调，时长等，可玩性很高。于是先找了音谱频率对照表，按把美剧《24小时》里面CTU内常用的电话铃声谱了出来，大概是EEGC 或者 EEC^C的样子，不过因为主板蜂鸣器的结构区别，通常不同频率的音量有些不同。 另外当然也应该有点视觉提示啦，在init script里面，终端支持的东西多着呢，按终端颜色代码，让终端打印红色加粗闪烁体，足够显眼了。 最终效果是这样的： 1 2 3 4 5 6 7 8 9 10 #!/bin/bash # # /etc/rc.local.shutdown: Local shutdown script. # &#160; while &#91;&#91; `usb-devices &#124; grep usb-storage` &#93;&#93;; do echo -e &#34;\033[31;1;5m!!!!!! Unplug Your USB Driver or I'll Keep SCREAMING !!!!!!! \033[0m&#34; [...]]]></description> <content:encoded><![CDATA[<p>我的U盘是跟钥匙系一起的，最近两次因为U盘插在公司机器上下班后忘了拿，结果回家后在门口游荡，郁闷的等室友回来才有家门进，于是要做这么个东西，关机前检测到没拔U盘，要<strong>猛叫猛叫</strong>。</p><p>原理倒是不复杂，研究了下，<S>检测U盘可以读取/proc/bus/usb/devices，如果主机上插有U盘，会出现<strong>Driver=usb-storage</strong>这一行的。</S></p><p>*Update: * <code>/proc/bus/usb/devices</code>只有在挂载了usbfs才有; usbutils工具里面除了lsusb，还提供了usb-devices工具，列出内容跟<code>/proc/bus/usb/devices</code>是一样的, 更适合。</p><p>然后是关机脚本的运行。Linux关机时候会执行level 0的init脚本，比如对于Debian/Ubuntu，就是/etc/rc0.d下的文件，我工作机跑的是Archlinux，专门为用户自定命令提供了/etc/rc.local.shutdown文件，作为/etc/rc.shutdown的hook，前者不会因为initscripts包的升级安装被覆盖。</p><p>至于让主机会叫，当然是主机喇叭了，这里可没有外放音箱。查了下发现beep这个程序，安装后发现功能还不少，可以定制beep的音调，时长等，可玩性很高。于是先找了<a
href="http://www.phy.mtu.edu/~suits/notefreqs.html">音谱频率对照表</a>，按把美剧《24小时》里面CTU内常用的电话铃声谱了出来，大概是EEGC 或者 EEC^C的样子，不过因为主板蜂鸣器的结构区别，通常不同频率的音量有些不同。</p><p>另外当然也应该有点视觉提示啦，在init script里面，终端支持的东西多着呢，<a
href="http://linuxshellaccount.blogspot.com/2008/03/using-color-in-linux-or-unix-shell.html">按终端颜色代码</a>，让终端打印红色加粗闪烁体，足够显眼了。</p><p>最终效果是这样的：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># /etc/rc.local.shutdown: Local shutdown script.</span>
<span style="color: #666666; font-style: italic;">#</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">`</span>usb-devices <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> usb-storage<span style="color: #000000; font-weight: bold;">`</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;\033[31;1;5m!!!!!!  Unplug Your USB Driver or I'll Keep SCREAMING !!!!!!! \033[0m&quot;</span>
    beep <span style="color: #660033;">-f</span> <span style="color: #000000;">659.3</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">659.3</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">1046</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">523.3</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">600</span>
    <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>;
<span style="color: #000000; font-weight: bold;">done</span>;</pre></td></tr></table></div><p>其他的几组不同八度的响声，记下来以后备用。</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
beep <span style="color: #660033;">-f</span> <span style="color: #000000;">659.3</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">659.3</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">784</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">523.3</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">600</span>
beep <span style="color: #660033;">-f</span> <span style="color: #000000;">1318.5</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">1318.5</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">1568</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">1046.5</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">600</span>
beep <span style="color: #660033;">-f</span> <span style="color: #000000;">2637</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">100</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">2637</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">3136</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">200</span> <span style="color: #660033;">-D</span> <span style="color: #000000;">50</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-f</span> <span style="color: #000000;">2093</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">600</span></pre></td></tr></table></div> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/shutdown_reminder_to_unplug_usb_drive/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Linux系统的备份、恢复与迁移</title><link>http://apt-blog.net/backup_or_migrate_linux_system_using_tar</link> <comments>http://apt-blog.net/backup_or_migrate_linux_system_using_tar#comments</comments> <pubDate>Wed, 09 Jun 2010 15:24:07 +0000</pubDate> <dc:creator>PT</dc:creator> <category><![CDATA[Shell]]></category> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[backup]]></category> <category><![CDATA[disk]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[system]]></category> <category><![CDATA[tar]]></category> <category><![CDATA[磁盘镜像]]></category> <category><![CDATA[系统备份]]></category> <guid
isPermaLink="false">http://apt-blog.net/backup_or_migrate_linux_system_using_tar</guid> <description><![CDATA[整系统的备份，应该很多人会想起Ghost，其实开源界有其相应的实现，比如CloneZilla、Partimage，或者原始点的dd，对备份Linux来说，这些Linux原生的工具显然要比需要DOS/WinPE环境的Ghost要更加“原汁原味”，而且开源版的工具功能一点也不少，一样可以网络传输等，而且支持多种格式（或者说格式无关，dd），不过本文关注的，是一个更加原始的方法，tar。 tar的历史都好几十年了，它的用法没有改变，而且相信未来很几十年内都不会变，而且作为一个日常常用的压缩解压工具，很多人都可以对它自如控制。其实，tar是很好的系统备份/迁移工具，它抽象于文件系统，不管是从ext迁移到reiserfs，从普通文件系统到LVM，还是到RAID，比起上述的那些影像工具，tar可以说是最胜任的迁移工具。 其实Ubuntu的社区文档BackupYourSystem/TAR有详细的解析和介绍，我在这里抄录一些重点，不做过多解释，看命令： 创建备份： cd / tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --exclude=/lost+found --exclude=/proc/* --exclude=/sys/* --exclude=/mnt/* --exclude=/media/* --exclude=/dev/* / 恢复备份： tar -xvpzf /home/test/backup.tar.gz -C / 通过网络接收备份并恢复： nc -l -p 1024 &#124; tar -xvpjf - -C /mnt/disk 或者：（这个就不用nc了，也就不需要下面那行，但是要开sshd） ssh user@host cat backfile.tar.gz &#124;tar -xvpzf - -C /mnt/disk 通过网络发送备份： cat backup.tar.gz &#124; nc -q 0 192.168.1.x 1024 通过网络发送备份成文件等，按需自由配置。 【这里用的nc是netcat工具，提供稳定的后台网络连接；另外archlinux下默认安装的gnu-netcat不支持-q参数，意为管道传输完后退出，一般在发送方配置，如果省了，可以人工Ctrl+C结束之】 [...]]]></description> <content:encoded><![CDATA[<p>整系统的备份，应该很多人会想起Ghost，其实开源界有其相应的实现，比如<a
href="http://www.clonezilla.org/" target="_blank">CloneZilla</a>、<a
href="https://help.ubuntu.com/community/DriveImaging#Partimage" target="_blank">Partimage</a>，或者原始点的<a
href="https://help.ubuntu.com/community/DriveImaging#Creating%20Disc%20Images%20Using%20dd" target="_blank">dd</a>，对备份Linux来说，这些Linux原生的工具显然要比需要DOS/WinPE环境的Ghost要更加“原汁原味”，而且开源版的工具功能一点也不少，一样可以网络传输等，而且支持多种格式（或者说格式无关，dd），不过本文关注的，是一个更加原始的方法，tar。</p><p>tar的历史都好几十年了，它的用法没有改变，而且相信未来很几十年内都不会变，而且作为一个日常常用的压缩解压工具，很多人都可以对它自如控制。其实，tar是很好的系统备份/迁移工具，它抽象于文件系统，不管是从ext迁移到reiserfs，从普通文件系统到LVM，还是到RAID，比起上述的那些影像工具，tar可以说是最胜任的迁移工具。</p><p>其实Ubuntu的社区文档<a
href="https://help.ubuntu.com/community/BackupYourSystem/TAR">BackupYourSystem/TAR</a>有详细的解析和介绍，我在这里抄录一些重点，不做过多解释，看命令：</p><p>创建备份：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-cvpzf</span> backup.tar.gz <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>backup.tar.gz <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>lost+found <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>media<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span></pre></div></div><p>恢复备份：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xvpzf</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>test<span style="color: #000000; font-weight: bold;">/</span>backup.tar.gz <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">/</span></pre></div></div><p>通过网络接收备份并恢复：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;">nc <span style="color: #660033;">-l</span> <span style="color: #660033;">-p</span> <span style="color: #000000;">1024</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xvpjf</span> - <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>disk</pre></div></div><p>或者：（这个就不用nc了，也就不需要下面那行，但是要开sshd）</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> user<span style="color: #000000; font-weight: bold;">@</span>host <span style="color: #c20cb9; font-weight: bold;">cat</span> backfile.tar.gz <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xvpzf</span> - <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>disk</pre></div></div><p>通过网络发送备份：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> backup.tar.gz <span style="color: #000000; font-weight: bold;">|</span> nc <span style="color: #660033;">-q</span> <span style="color: #000000;">0</span> 192.168.1.x <span style="color: #000000;">1024</span></pre></div></div><p>通过网络发送备份成文件等，按需自由配置。<br
/> 【这里用的nc是netcat工具，提供稳定的后台网络连接；另外archlinux下默认安装的gnu-netcat不支持-q参数，意为管道传输完后退出，一般在发送方配置，如果省了，可以人工Ctrl+C结束之】</p><p>PT的喃喃自语：<br
/> 看到netcat这个工具在这里应用，我第一感觉是，惊艳，太惊艳了，虽然玩Linux两年来惊艳的感觉时有体会。马上想起的是不久前读的<a
href="http://linuxtoy.org/docs/guide/index.html" target="_blank">《开源世界旅行手册》</a>。其中一章节，<a
href="http://linuxtoy.org/docs/guide/ch12.html">无根的根：无名师的 Unix 心传</a>（Rootless Root:The Unix Koans of Master Foo）原来是《Unix编程艺术》一书的附录，中文翻译颇像一些类似经文之类的口吻（就是翻译后略显艰涩了，我找来英文版对着才看懂），内容很有趣。其中“<a
href="http://linuxtoy.org/docs/guide/ch12s02.html" target="_blank">无名师与万行码</a>”就说到shell跟C，哪个更“Unix-nature”，netcat就是很好的例子，功能很简单，就是提供网络连接，但至于要传输什么，是系统备份的压缩数据，是个配置文件，是ffmpeg编码出来摄像头的视频信息……经过了内核的管道，bang!，多神奇的功能就这么组合起来轻松实现了，这就是Unix-nature，注重于任务的快速、高效、简洁地完成，而不是写了多少行代码。</p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/backup_or_migrate_linux_system_using_tar/feed</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Linux下Synaptics笔记本触摸板的配置</title><link>http://apt-blog.net/configuring_laptop_synaptics_touchpad_in_linux</link> <comments>http://apt-blog.net/configuring_laptop_synaptics_touchpad_in_linux#comments</comments> <pubDate>Thu, 29 Apr 2010 07:06:27 +0000</pubDate> <dc:creator>BOYPT</dc:creator> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[laptop]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[synaptics]]></category> <category><![CDATA[synclient]]></category> <category><![CDATA[touchpad]]></category> <category><![CDATA[x11]]></category> <category><![CDATA[xorg]]></category> <category><![CDATA[多点触摸]]></category> <category><![CDATA[笔记本]]></category> <category><![CDATA[触摸板]]></category> <guid
isPermaLink="false">http://apt-blog.net/?p=779</guid> <description><![CDATA[笔记本上Synaptics的触摸板比较常见，但关于其配置的资料目前来看比较混乱，主要原因是这两年来桌面环境的变化比较大，搜索出来的结果是不同时期的人的解决办法，往往五花八门让人无所适从，如果想完全控制触摸板，可能需要了解以下的事情： 触摸板是输入设备，首先需要Xorg的支持，所以/etc/X11/xorg.conf里面会有synaptics的配置； 大约08年开始，X11依赖hal来挂载硬件驱动，hal读取/etc/hal/fdi/policy里面的配置，所以会有写hal的配置文件的配置方法； 10年3月，Xorg发布了1.8.0版，不再依赖hal而实现动态加载驱动，依然使用xorg.conf配置驱动参数，还新引入/etc/X11/xorg.conf.d目录里面的配置文件； Xorg的synaptics驱动带有一个配置程序，synclient可对驱动参数动态设置； 各个桌面环境，如Gnome、KDE默认自带了不同程度对触摸板设置的支持； gsynaptics设置程序提供比桌面环境自带的多一些的设置选项，但是这个项目即将面临被荒废；Gnome有个子项目GPointingDeviceSettings，跟gsynaptics功能基本一致但还未被收录到Gnome桌面的默认组件。 在网上搜到的资料，包括各大发行版的Wiki，一般都只会覆盖以上其中一两点的配置描述，而且很多都过时。 从上面这些很“历史性”的事情可以概括出的事实： 使用xorg.conf、synclient来配置触摸板最具体的参数，这点是不会变的； HAL作为一个过渡性组件，对其配置的意义不太大； Gnome等桌面环境启动后会重新设定一些参数，可能会重载xorg.conf的设置参数； gsynaptics提供了一个常驻进程，在进入桌面时候启动，它的配置参数记录在gconf，只要其进程在运行，就会重载所有触摸板的配置参数； 没有一个图形界面的设置工具能提供所有的触摸板高级特性特性设置支持。 下面列举一些触摸板的高级特性： 四边角按钮 触摸板被分布成类似九宫格的区域，除了中间的矩形区域面积较大，四个边角可以设置为一个按钮，比如最常用就是点击右下角就相当于右键，左上角为中键（个人 喜好）。 涉及参数：（2为右键，3为中键） RTCornerButton=2 RBCornerButton=0 LTCornerButton=3 LBCornerButton=0 多点触摸 如果是硬件原生支持多点触摸的，在Gnome的触摸板设置内能够直接打开双指滚动的选项； 模拟多点触摸 非多点触摸的触摸板也可以实现双指滚动，它通过触摸板的感应宽度来判断，即两指的在触摸板的跨度比单指大；但是这需要设置驱动参数： EmulateTwoFingerMinZ=50 #模拟双指感应压力 EmulateTwoFingerMinW=6 #模拟双指感应跨度 VertTwoFingerScroll=1 #使用双指垂直滚动 HorizTwoFingerScroll=1 #使用双指水平滚动 VertScrollDelta=75 #垂直滚动速度 HorizScrollDelta=100 #水平滚动速度 这些参数很可能需要用户自己调试出最适合的组合（如何设置调试请看本文后介绍），以上数值仅供参考。 多指按键 即在触摸板任意地方多指同敲就是相当于某击键，涉及参数： TapButton1=1 #一指，左键，默认 TapButton2=3 #两指，右键； TapButton3=0 #三指，仅适合硬件支持多触点的触摸板，否则没法感应三指同 圆周滚动 即可在某个边沿（通常右）开始手指在触摸板按顺时/逆时针圆周划动，即产生鼠标滚轮滚动作用，通常效率比仅仅使用右侧划动区上下滚动高，特别浏览长网页时（本设置在gsynaptics/GPointingDeviceSettings里面可以直观地设置）。涉及参数： CircularScrolling=1 #打开圆周滚动 CircScrollTrigger=3 #右边沿，除了0代表任意边沿，1～8分别代表从顶开始顺时针的九宫格外围8个位置。 想使用这些高级特征，一个方法是就像多数搜索出来的资料，修改xorg.conf，但如前文说会有弊端，被桌面环境重载，所以我们最好还是使用synaptics驱动自带的小工具synclient。synclient接受k=v的参数，而实时修改X11对触摸板的驱动，也很方便调试，就是运行synclient [...]]]></description> <content:encoded><![CDATA[<p>笔记本上Synaptics的触摸板比较常见，但关于其配置的资料目前来看比较混乱，主要原因是这两年来桌面环境的变化比较大，搜索出来的结果是不同时期的人的解决办法，往往五花八门让人无所适从，如果想完全控制触摸板，可能需要了解以下的事情：</p><ul><li>触摸板是输入设备，首先需要Xorg的支持，所以/etc/X11/xorg.conf里面会有synaptics的配置；</li><li>大约08年开始，X11依赖hal来挂载硬件驱动，hal读取/etc/hal/fdi/policy里面的配置，所以会有写hal的配置文件的配置方法；</li><li>10年3月，Xorg发布了1.8.0版，不再依赖hal而实现动态加载驱动，依然使用xorg.conf配置驱动参数，还新引入/etc/X11/xorg.conf.d目录里面的配置文件；</li><li>Xorg的synaptics驱动带有一个配置程序，synclient可对驱动参数动态设置；</li><li>各个桌面环境，如Gnome、KDE默认自带了不同程度对触摸板设置的支持；</li><li>gsynaptics设置程序提供比桌面环境自带的多一些的设置选项，但是这个项目即将面临被荒废；Gnome有个子项目GPointingDeviceSettings，跟gsynaptics功能基本一致但还未被收录到Gnome桌面的默认组件。</li></ul><p>在网上搜到的资料，包括各大发行版的Wiki，一般都只会覆盖以上其中一两点的配置描述，而且很多都过时。</p><p>从上面这些很“历史性”的事情可以概括出的事实：</p><ul><li>使用xorg.conf、synclient来配置触摸板最具体的参数，这点是不会变的；</li><li>HAL作为一个过渡性组件，对其配置的意义不太大；</li><li>Gnome等桌面环境启动后会重新设定一些参数，可能会重载xorg.conf的设置参数；</li><li>gsynaptics提供了一个常驻进程，在进入桌面时候启动，它的配置参数记录在gconf，只要其进程在运行，就会重载所有触摸板的配置参数；</li><li>没有一个图形界面的设置工具能提供所有的触摸板高级特性特性设置支持。</li></ul><p>下面列举一些触摸板的高级特性：</p><ul><li><h4>四边角按钮</h4><p>触摸板被分布成类似九宫格的区域，除了中间的矩形区域面积较大，四个边角可以设置为一个按钮，比如最常用就是点击右下角就相当于右键，左上角为中键（个人 喜好）。<br
/> 涉及参数：（2为右键，3为中键）</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">RTCornerButton</span>=<span style="color: #000000;">2</span>
<span style="color: #007800;">RBCornerButton</span>=<span style="color: #000000;">0</span>
<span style="color: #007800;">LTCornerButton</span>=<span style="color: #000000;">3</span>
<span style="color: #007800;">LBCornerButton</span>=<span style="color: #000000;">0</span></pre></div></div></li><li><h4>多点触摸</h4><p>如果是硬件原生支持多点触摸的，在Gnome的触摸板设置内能够直接打开双指滚动的选项；</li><li><h4>模拟多点触摸</h4><p>非多点触摸的触摸板也可以实现双指滚动，它通过触摸板的感应宽度来判断，即两指的在触摸板的跨度比单指大；但是这需要设置驱动参数：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">EmulateTwoFingerMinZ</span>=<span style="color: #000000;">50</span> <span style="color: #666666; font-style: italic;">#模拟双指感应压力</span>
<span style="color: #007800;">EmulateTwoFingerMinW</span>=<span style="color: #000000;">6</span> <span style="color: #666666; font-style: italic;">#模拟双指感应跨度</span>
<span style="color: #007800;">VertTwoFingerScroll</span>=<span style="color: #000000;">1</span> <span style="color: #666666; font-style: italic;">#使用双指垂直滚动</span>
<span style="color: #007800;">HorizTwoFingerScroll</span>=<span style="color: #000000;">1</span> <span style="color: #666666; font-style: italic;">#使用双指水平滚动</span>
<span style="color: #007800;">VertScrollDelta</span>=<span style="color: #000000;">75</span> <span style="color: #666666; font-style: italic;">#垂直滚动速度</span>
<span style="color: #007800;">HorizScrollDelta</span>=<span style="color: #000000;">100</span> <span style="color: #666666; font-style: italic;">#水平滚动速度</span></pre></div></div><p>这些参数很可能需要用户自己调试出最适合的组合（如何设置调试请看本文后介绍），以上数值仅供参考。</li><li><h4>多指按键</h4><p>即在触摸板任意地方多指同敲就是相当于某击键，涉及参数：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">TapButton1</span>=<span style="color: #000000;">1</span>    <span style="color: #666666; font-style: italic;">#一指，左键，默认</span>
<span style="color: #007800;">TapButton2</span>=<span style="color: #000000;">3</span>    <span style="color: #666666; font-style: italic;">#两指，右键；</span>
<span style="color: #007800;">TapButton3</span>=<span style="color: #000000;">0</span>    <span style="color: #666666; font-style: italic;">#三指，仅适合硬件支持多触点的触摸板，否则没法感应三指同</span></pre></div></div></li><li><h4>圆周滚动</h4><p>即可在某个边沿（通常右）开始手指在触摸板按顺时/逆时针圆周划动，即产生鼠标滚轮滚动作用，通常效率比仅仅使用右侧划动区上下滚动高，特别浏览长网页时（本设置在gsynaptics/GPointingDeviceSettings里面可以直观地设置）。涉及参数：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">CircularScrolling</span>=<span style="color: #000000;">1</span> <span style="color: #666666; font-style: italic;">#打开圆周滚动</span>
<span style="color: #007800;">CircScrollTrigger</span>=<span style="color: #000000;">3</span> <span style="color: #666666; font-style: italic;">#右边沿，除了0代表任意边沿，1～8分别代表从顶开始顺时针的九宫格外围8个位置。</span></pre></div></div></li></ul><p>想使用这些高级特征，一个方法是就像多数搜索出来的资料，修改xorg.conf，但如前文说会有弊端，被桌面环境重载，所以我们最好还是使用synaptics驱动自带的小工具synclient。synclient接受k=v的参数，而实时修改X11对触摸板的驱动，也很方便调试，就是运行synclient TapButton2=3，应该马上就有双指右键的效果了。所以，把所有需要设置的参数写成一个脚本文件，让进入桌面时候启动synclient来设置，似乎是目前最方便好的方法：</p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">DISPLAY</span>=:<span style="color: #000000;">0.0</span>
&nbsp;
synclient \
<span style="color: #007800;">EmulateTwoFingerMinZ</span>=<span style="color: #000000;">50</span> \
<span style="color: #007800;">EmulateTwoFingerMinW</span>=<span style="color: #000000;">6</span> \
<span style="color: #007800;">VertTwoFingerScroll</span>=<span style="color: #000000;">1</span> \
<span style="color: #007800;">HorizTwoFingerScroll</span>=<span style="color: #000000;">1</span> \
<span style="color: #007800;">VertScrollDelta</span>=<span style="color: #000000;">75</span> \
<span style="color: #007800;">HorizScrollDelta</span>=<span style="color: #000000;">100</span> \
;</pre></td></tr></table></div><p>把代码保存成touchpad_args.sh，chmod +x加上执行位，放倒任意地方，加入到System-Preferance-Startup Application内，即可！</p><p>关于synclient的另外一个小功能是可以实时查看触摸板的感应参数，运行synclient -m 100即每100毫秒读取一次触摸板的数据并打印，所以如果感觉触摸板操作不够灵敏，肯定是那些参数数值有些不合理，可以借助这个功能（使用这个功能需要<a
href="http://www.google.com/search?q=synclient+-m+SHMConfig+%C3%A8%C2%AE%C2%BE%C3%A7%C2%BD%C2%AE">打开X11的synaptics的SHMConfig设置</a>）。其运行结果如下：</p><pre>&nbsp;time     x    y   z f  w  l r u d m     multi  gl gm gr gdx gdy
0.000     1 5855   0 0  0  0 0 0 0 0  00000000   0  0  0   0   0
1.465  2562 2450  10 1  5  0 0 0 0 0  00000000   0  0  0   0   0
....
</pre><p>其中主要参数：x,y是水平竖直值，z指垂直压力，f是手指数，非硬件支持多指的只会0或1，w指感应跨度。这些就是对应上述的参数，如Z就是EmulateTwoFingerMinZ的Z，如果设置过大是不会反应的。</p><p>另外有人不喜欢触摸板，设置touchpadoff=1即可关闭触摸板的感应；Gnome的触摸板设置里面有一个选项，键盘打字时智能关闭触摸板，个人感觉比较有效，也就没做更多设置了。</p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/configuring_laptop_synaptics_touchpad_in_linux/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>配置Linux下的虚拟摄像头</title><link>http://apt-blog.net/virtual_simulate_webcam_in_linux</link> <comments>http://apt-blog.net/virtual_simulate_webcam_in_linux#comments</comments> <pubDate>Sat, 24 Apr 2010 12:16:08 +0000</pubDate> <dc:creator>PT</dc:creator> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[cam]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[simulate]]></category> <category><![CDATA[virtual]]></category> <category><![CDATA[webcam]]></category> <category><![CDATA[摄像头]]></category> <category><![CDATA[虚拟]]></category> <guid
isPermaLink="false">http://apt-blog.net/virtual_simulate_webcam_in_linux</guid> <description><![CDATA[最近随着chatroulette、tinychat等的Flash P2P视频应用的普及，突然想念起以前Win下softcam之类的软件，Google了一圈找到个AVLD，Another Video Loopback Device。[请翻墙] AVLD是作为内核模块起作用的，挂载avld，就会生成/dev/videoX，于是Flash、Pidgin、Skype（貌似不行）就能打开这个设备作为摄像头；而AVLD的输入则是对/dev/videoX文件的写入，可以用mencoder、ffmpeg之类的工具把其他视频流转换特定格式后写到/dev/videoX，这就完成整个“虚拟”的过程了。 我在Archlinux下用yaourt从AUR里面安装avld，很快很方便，下面一些例子命令： #把自己加入video组，方便以后写video设备 sudo gpasswd -a boypt video &#160; #挂载avld模块 sudo modprobe avld &#160; #查看video设备，我的本本自带的摄像头是video0，虚拟的为video1 ls -l /dev/video* &#160; #设置虚拟摄像头的分辨率等参数，后面输入的视频必须跟这参数一致，否则会报错，报错信息运行dmesg&#124;tail查看 echo &#34;width=320 height=240 fps=25&#34; &#62; /dev/video0 &#160; #用mencoder给虚拟摄像头写入数据 #其中-vf的scale参数设置输出的分辨率，format设置视频颜色参数； #读取端的颜色参数需要跟这里一致画面才正常 #-ss参数可以设置视频从某时间开始播放 mencoder &#34;myvideofile.avi&#34; -cache 8192 -nosound -ovc raw -vf scale=320:240,format=rgb24 -of rawvideo -o /dev/video1 -ss 0:5:0 &#160; #从另外的终端运行mplayer查看输出 mplayer tv:// [...]]]></description> <content:encoded><![CDATA[<p>最近随着chatroulette、tinychat等的Flash P2P视频应用的普及，突然想念起以前Win下softcam之类的软件，Google了一圈找到个<a
href="http://allonlinux.free.fr/Projets/AVLD/" target="_blank">AVLD，Another Video Loopback Device</a>。[请翻墙]</p><p>AVLD是作为内核模块起作用的，挂载avld，就会生成/dev/videoX，于是Flash、Pidgin、Skype（貌似不行）就能打开这个设备作为摄像头；而AVLD的输入则是对/dev/videoX文件的写入，可以用mencoder、ffmpeg之类的工具把其他视频流转换特定格式后写到/dev/videoX，这就完成整个“虚拟”的过程了。</p><p>我在Archlinux下用yaourt从AUR里面安装avld，很快很方便，下面一些例子命令：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#把自己加入video组，方便以后写video设备</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gpasswd <span style="color: #660033;">-a</span> boypt video
&nbsp;
<span style="color: #666666; font-style: italic;">#挂载avld模块</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> modprobe avld
&nbsp;
<span style="color: #666666; font-style: italic;">#查看video设备，我的本本自带的摄像头是video0，虚拟的为video1</span>
<span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>video<span style="color: #000000; font-weight: bold;">*</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#设置虚拟摄像头的分辨率等参数，后面输入的视频必须跟这参数一致，否则会报错，报错信息运行dmesg|tail查看</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;width=320 height=240 fps=25&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>video0
&nbsp;
<span style="color: #666666; font-style: italic;">#用mencoder给虚拟摄像头写入数据</span>
<span style="color: #666666; font-style: italic;">#其中-vf的scale参数设置输出的分辨率，format设置视频颜色参数；</span>
<span style="color: #666666; font-style: italic;">#读取端的颜色参数需要跟这里一致画面才正常</span>
<span style="color: #666666; font-style: italic;">#-ss参数可以设置视频从某时间开始播放</span>
mencoder <span style="color: #ff0000;">&quot;myvideofile.avi&quot;</span> <span style="color: #660033;">-cache</span> <span style="color: #000000;">8192</span> <span style="color: #660033;">-nosound</span> <span style="color: #660033;">-ovc</span> raw <span style="color: #660033;">-vf</span> <span style="color: #007800;">scale</span>=<span style="color: #000000;">320</span>:<span style="color: #000000;">240</span>,<span style="color: #007800;">format</span>=rgb24 <span style="color: #660033;">-of</span> rawvideo <span style="color: #660033;">-o</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>video1 <span style="color: #660033;">-ss</span> <span style="color: #000000;">0</span>:<span style="color: #000000;">5</span>:<span style="color: #000000;">0</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#从另外的终端运行mplayer查看输出</span>
<span style="color: #c20cb9; font-weight: bold;">mplayer</span> tv:<span style="color: #000000; font-weight: bold;">//</span> <span style="color: #660033;">-tv</span> <span style="color: #ff0000;">&quot;driver=v4l:device=/dev/video1:noaudio:outfmt=rgb24&quot;</span></pre></div></div><p>上面echo的命令是可以动态修改虚拟摄像头的输出参数的，也可以在挂载时候用参数设置；默认挂载的参数是320x240。<br
/> 其中fps帧速可以有如下取值：</p><ul><li>fps = 0：不设置帧速，输出帧速跟写入的一致；</li><li>fps &gt; 0：固定输出某个帧速；</li><li>fps &lt; 0：帧速由输出程序决定（当没有输出读取程序就暂停）。</li></ul><p>因为摄像头设备同时只能被一个程序读取，退出mplayer后可以打开视频Flash，或者其他摄像头应用查看效果。</p><p
style="text-align: center;"> <img
class="size-full wp-image-773 aligncenter" title="simulate _ webcam" src="http://apt-blog.net/wp-content/uploads/2010/04/simulate_webcam.png" alt="webcam in chatroulette" width="280" height="432" /></p><p>PS：尝试使用ffmpeg对X11抓屏发送到摄像头，没完全成功，理论上的命令应该如下：</p><div
class="wp_syntax"><div
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> <span style="color: #660033;">-y</span> <span style="color: #660033;">-t</span> <span style="color: #000000;">30</span> <span style="color: #660033;">-f</span> x11grab <span style="color: #660033;">-qscale</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-r</span> <span style="color: #000000;">15</span> <span style="color: #660033;">-s</span> 1024x768 <span style="color: #660033;">-i</span> :<span style="color: #000000;">0.0</span> <span style="color: #660033;">-s</span> 320x240 <span style="color: #660033;">-f</span> rawvideo <span style="color: #660033;">-vcodec</span> rawvideo -pix_fmt rgb24 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>video1</pre></div></div><p>即对X进行1024x768, 15fps的抓图，转换成320x240大小，按rawvideo，rgb24方式写到video1，这样的效果仅仅是更新目标图像上面一部分，可能跟ffmpeg的rawvideo输出设置有关，但还没找出什么原因。</p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/virtual_simulate_webcam_in_linux/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>轻量级本地/局域网DNS缓冲：DNSMASQ</title><link>http://apt-blog.net/lightweight_local_dns_cache_dnsmasq</link> <comments>http://apt-blog.net/lightweight_local_dns_cache_dnsmasq#comments</comments> <pubDate>Tue, 30 Mar 2010 14:24:49 +0000</pubDate> <dc:creator>PT</dc:creator> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[Arch]]></category> <category><![CDATA[Cache]]></category> <category><![CDATA[DNS]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[pacman]]></category> <category><![CDATA[wget]]></category> <guid
isPermaLink="false">http://apt-blog.net/lightweight_local_dns_cache_dnsmasq</guid> <description><![CDATA[这次折腾Arch，因为觉得2009.8的包都太旧了，就完全使用了网络安装。网络环境是静态IP，安装前用ifconfig、route、resolve.conf这些配置好，再运行安装程序。网络速度并不慢，使用163的源，下载都有几百K，但是看着pacman，每个包开始前都在那里挂上10来秒，觉得很不妥，有些包很小，下载过程才1秒，但要等这么久才下载，为何呢？ 趁着装包，我换到另外的tty测试，比如wget g.cn，因为最近这个域名会被先转到google.cn，再转到google.com.hk，所以看着wget，每次解释域名就得等待10来秒。用w3m打开网站，也一样，在Open socket那里挂着好几秒才开。我用的是google提供的DNS 8.8.8.8，速度不至于这么慢吧，nslookup g.cn，速度很快，一秒钟内就返回了，换了几个DNS，包括本地电信的，OpenDNS的，效果都一样；又怀疑跟IPv6模块有关，跑了v6发现不通才走v4，往modprobe.conf里面禁用了ipv6模块，故障依然。 最后试着做本地的DNS Cache，安装了dnsmasq，没做什么配置，直接启动/etc/rc.d/dnsmasq start，然后resolve.conf里面写nameserver 127.0.0.1，wget马上变得迅速起来了，再看pacman，全都正常。 清空dnsmasq的缓存可给它发送个SIGHUP，如sudo killall -s SIGHUP dnsmasq。（国内的DNS常常收到GFW污染，缓冲了受污染的DNS记录，出现用vpn连出去后上不了某些网站的情况） 以前没留意过本地DNS缓冲有这么大影响，不知道会不会跟最近国内的网络环境有关。]]></description> <content:encoded><![CDATA[<p>这次折腾Arch，因为觉得2009.8的包都太旧了，就完全使用了网络安装。网络环境是静态IP，安装前用ifconfig、route、resolve.conf这些配置好，再运行安装程序。网络速度并不慢，使用163的源，下载都有几百K，但是看着pacman，每个包开始前都在那里挂上10来秒，觉得很不妥，有些包很小，下载过程才1秒，但要等这么久才下载，为何呢？</p><p>趁着装包，我换到另外的tty测试，比如wget g.cn，因为最近这个域名会被先转到google.cn，再转到google.com.hk，所以看着wget，每次解释域名就得等待10来秒。用w3m打开网站，也一样，在Open socket那里挂着好几秒才开。我用的是google提供的DNS 8.8.8.8，速度不至于这么慢吧，nslookup g.cn，速度很快，一秒钟内就返回了，换了几个DNS，包括本地电信的，OpenDNS的，效果都一样；又怀疑跟IPv6模块有关，跑了v6发现不通才走v4，往modprobe.conf里面禁用了ipv6模块，故障依然。</p><p>最后试着做本地的DNS Cache，安装了dnsmasq，没做什么配置，直接启动/etc/rc.d/dnsmasq start，然后resolve.conf里面写nameserver 127.0.0.1，wget马上变得迅速起来了，再看pacman，全都正常。</p><p>清空dnsmasq的缓存可给它发送个SIGHUP，如sudo killall -s SIGHUP dnsmasq。（国内的DNS常常收到GFW污染，缓冲了受污染的DNS记录，出现用vpn连出去后上不了某些网站的情况）</p><p>以前没留意过本地DNS缓冲有这么大影响，不知道会不会跟最近国内的网络环境有关。</p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/lightweight_local_dns_cache_dnsmasq/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>最简单方法远程调试Python多进程子程序</title><link>http://apt-blog.net/debugging_python_multiprocessing</link> <comments>http://apt-blog.net/debugging_python_multiprocessing#comments</comments> <pubDate>Fri, 05 Mar 2010 15:00:12 +0000</pubDate> <dc:creator>PT</dc:creator> <category><![CDATA[Python]]></category> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[debug]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[pdb]]></category> <category><![CDATA[pipe]]></category> <category><![CDATA[process]]></category> <category><![CDATA[多进程]]></category> <category><![CDATA[远程调试]]></category> <guid
isPermaLink="false">http://apt-blog.net/debugging_python_multiprocessing</guid> <description><![CDATA[Python 2.6新增的multiprocessing，即多进程，给子进程代码调试有点困难，比如python自带的pdb如果直接在子进程代码里面启动会抛出一堆异常，原因是子进程的stdin/out/err等文件都已关闭，pdb无法调用。据闻winpdb、Wing IDE的调试器能够支持这样的远程调试，但似乎过于重量级（好吧前者比后者要轻多了，但一样要wxPython的环境，再说pdb的灵活可靠它们难以比拟）。 其实只需稍作改动即可用pdb继续调试子进程的代码，思路来自这个博客：子进程的stdin/out/err关闭了，那可以自己重新按/dev/stdout的名称打开来用。当然这指*nix下，win下要麻烦一些，后面再说。 pdb支持自定义输出输入的文件，我再稍作改动，使用fifo管道(Named Pipe)来完成pdb的输出输入的重定向，这样的好处是，可以同时对父子进程调试！ multiproces_debug.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/usr/bin/python &#160; import multiprocessing import pdb &#160; def child_process&#40;&#41;: print &#34;Child-Process&#34; pdb.Pdb&#40;stdin=open&#40;'p_in', 'r+'&#41;, stdout=open&#40;'p_out', 'w+'&#41;&#41;.set_trace&#40;&#41; var = &#34;debug me!&#34; &#160; def main_process&#40;&#41;: print &#34;Parent-Process&#34; p = multiprocessing.Process&#40;target = [...]]]></description> <content:encoded><![CDATA[<p>Python 2.6新增的multiprocessing，即多进程，给子进程代码调试有点困难，比如python自带的pdb如果直接在子进程代码里面启动会抛出一堆异常，原因是子进程的stdin/out/err等文件都已关闭，pdb无法调用。据闻winpdb、Wing IDE的调试器能够支持这样的远程调试，但似乎过于重量级（好吧前者比后者要轻多了，但一样要wxPython的环境，再说pdb的灵活可靠它们难以比拟）。</p><p>其实只需稍作改动即可用pdb继续调试子进程的代码，思路来自<a
href="http://almirkaric.com/2010/01/07/debugging-python-multiprocessing/" target="_blank">这个博客</a>：子进程的stdin/out/err关闭了，那可以自己重新按/dev/stdout的名称打开来用。当然这指*nix下，win下要麻烦一些，后面再说。</p><p>pdb支持自定义输出输入的文件，我再稍作改动，使用fifo管道(Named Pipe)来完成pdb的输出输入的重定向，这样的好处是，可以同时对父子进程调试！</p><p><span
style="font-weight: bold;">multiproces_debug.py</span></p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td
class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> multiprocessing
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">pdb</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> child_process<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Child-Process&quot;</span>
    <span style="color: #dc143c;">pdb</span>.<span style="color: black;">Pdb</span><span style="color: black;">&#40;</span>stdin=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'p_in'</span>, <span style="color: #483d8b;">'r+'</span><span style="color: black;">&#41;</span>, stdout=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'p_out'</span>, <span style="color: #483d8b;">'w+'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">set_trace</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    var = <span style="color: #483d8b;">&quot;debug me!&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main_process<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Parent-Process&quot;</span>
    p = multiprocessing.<span style="color: black;">Process</span><span style="color: black;">&#40;</span>target = child_process<span style="color: black;">&#41;</span>
    p.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #dc143c;">pdb</span>.<span style="color: black;">set_trace</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    var = <span style="color: #483d8b;">&quot;debug me!&quot;</span>
    p.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
    main_process<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div><p>只需要给pdb的构造参数传入stdin/stdout的文件对象，调试过程的输出输入就自然以传入的文件为方向了。这里需要两个管道文件p_in、p_out，运行脚本之前，使用命令<span
style="font-weight: bold;">mkfifo p_in p_out</span>同时建立。这还未完成，还需要个外部程序来跟管道交互：</p><p><span
style="font-weight: bold;">debug_cmd.sh</span></p><div
class="wp_syntax"><table><tr><td
class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td
class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">cat</span> p_out <span style="color: #000000; font-weight: bold;">&amp;</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #c20cb9; font-weight: bold;">read</span> <span style="color: #660033;">-e</span> cmd
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$cmd</span><span style="color: #000000; font-weight: bold;">&gt;</span>p_in
<span style="color: #000000; font-weight: bold;">done</span></pre></td></tr></table></div><p>很简单的bash。因为fifo管道在写入端未传入数据时，读取端是阻塞的（反之亦然），所以cat的显示挂在后台，当调试的程序结束后，管道传出EOF，cat就自动退出了。</p><p>实验开始：先在一个终端运行debug_cmd.sh（其实顺序无关），其光标停在新的一行，再在另外一个终端运行multiproces_debug.py，可见到两个终端同时出现了(Pdb)的指示符，可以同时对父子进程调试了！</p><p
style="text-align: center;"><img
class="aligncenter" style="max-width: 800px;" src="http://apt-blog.net/wp-content/uploads/2010/03/python-remote-debug.png" alt="" width="406" height="240" /></p><p>在Windows下使用管道就没这么方便了，因为没有实体的管道文件支持，可以考虑使用socket的类文件对象传给pdb。但这样要写的python代码就多一点，以及要另外用做个交互程序；不过依然用不了多少代码，可以写成一个模块专门用做远程调试，import即用。暂未实现，以后有空弄好放代码出来。</p><p>Update: 专用调试模块见<a
href="http://apt-blog.net/rm_pdb_module_for_debugging_multiprocessing">《PDB远程调试Python多进程子程序》</a></p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/debugging_python_multiprocessing/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>锐捷/联想/神州数码 802.1x客户端支持MacOS、BSD</title><link>http://apt-blog.net/802-1x_support_macos_freebsd</link> <comments>http://apt-blog.net/802-1x_support_macos_freebsd#comments</comments> <pubDate>Fri, 09 Oct 2009 05:32:23 +0000</pubDate> <dc:creator>BOYPT</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[802.1x]]></category> <category><![CDATA[BSD]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[MacOS]]></category> <category><![CDATA[神州数码]]></category> <category><![CDATA[联想]]></category> <category><![CDATA[锐捷]]></category> <guid
isPermaLink="false">http://apt-blog.net/?p=656</guid> <description><![CDATA[Insion同学之前发来一段可以在MacOS/BSD编译运行获取网卡MAC地址的代码，于是整理了一下，让几个802.1x Client都能支持MacOS/BSD了。 下载了个FreeBSD 7.2在vbox虚拟机里面装了下，发现FreeBSD比Linux好像原始多了［呃，我说安装程序］，分区的时候他不叫Create Partition，叫Create Slice，我对着界面看了半天才猜到，囧；退出那里写着：Q = Finish，Quit就Quit嘛，什么Finish，纠结……但还好，其他的配置跟Linux还是很相像的，调试了一下就有了全可编译的代码了。 代码部分修改倒没多少，就添加了一个专门给BSD系系统获取MAC的函数，再用maroc判断一下，以及几个头文件，就完事了，有点麻烦的是makefile，发现freebsd默认那个make好像是很古老很古老的版本，我程序里面那个Makefile是用了vim里面c-support插件里面带的Makefile模板，有点复杂，但是freebsd居然不支持！所以整理了个简单的版本，专门给MacOS/BSD编译，也方便别人的修改；另外一个原因是，程序里面转换服务器消息时候用了iconv库，linux里面iconv是系统内嵌库来的，用不着链接的时候给出参数，但MacOS/BSD偏偏就要-liconv…… 需要编译MacOS/BSD版本的同学，可以check出项目里面trunk的代码，运行make -f Makefile.bsd来编译。Insion同学已经编译成功，而且在他的主页上有二进制版下载了。 相对的说，可能在MacOS里面编译是最麻烦的，我大概说说流程（实际上我没试过，我可没Mac机器［T.T］） 1.安装gcc，参考这里从http://connect.apple.com/的Dev Tools里面下载Xcode Tools，安装。2.编译安装libpcap，从http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz下载源码，tar xvfz libpcap-1.0.0.tar.gz解压，进去该目录，./configure、make、make install安装完成；3.编译802.1x客户端，从所用项目内签出源码，在目录内make，没出什么差错的话，已经完成了。然后按Readme.txt的方法安装运行，即可！ 项目主页 锐捷：http://code.google.com/p/zruijie4gzhu/联想：http://code.google.com/p/zlevoclient/神州数码：http://code.google.com/p/zdcclient/]]></description> <content:encoded><![CDATA[<p>Insion同学之前发来一段可以在MacOS/BSD编译运行获取网卡MAC地址的代码，于是整理了一下，让几个802.1x Client都能支持MacOS/BSD了。</p><p>下载了个FreeBSD 7.2在vbox虚拟机里面装了下，发现FreeBSD比Linux好像原始多了［呃，我说安装程序］，分区的时候他不叫Create Partition，叫Create Slice，我对着界面看了半天才猜到，囧；退出那里写着：Q = Finish，Quit就Quit嘛，什么Finish，纠结……但还好，其他的配置跟Linux还是很相像的，调试了一下就有了全可编译的代码了。</p><p>代码部分修改倒没多少，就添加了一个专门给BSD系系统获取MAC的函数，再用maroc判断一下，以及几个头文件，就完事了，有点麻烦的是makefile，发现freebsd默认那个make好像是很古老很古老的版本，我程序里面那个Makefile是用了vim里面c-support插件里面带的Makefile模板，有点复杂，但是freebsd居然不支持！所以整理了个简单的版本，专门给MacOS/BSD编译，也方便别人的修改；另外一个原因是，程序里面转换服务器消息时候用了iconv库，linux里面iconv是系统内嵌库来的，用不着链接的时候给出参数，但MacOS/BSD偏偏就要-liconv……</p><p>需要编译MacOS/BSD版本的同学，可以check出项目里面trunk的代码，运行make -f Makefile.bsd来编译。Insion同学已经编译成功，而且在<a
target="_blank" href="http://garning.com/forever/68_garning_%E7%A5%9E%E5%B7%9E%E6%95%B0%E7%A0%81-for-mac-%EF%BC%88interpowerpcbsd%EF%BC%89_garning.html">他的主页上有二进制版</a>下载了。</p><p>相对的说，可能在MacOS里面编译是最麻烦的，我大概说说流程（实际上我没试过，我可没Mac机器［T.T］）</p><p>1.安装gcc，参考<a
target="_blank" href="http://www.tech-recipes.com/rx/726/mac-os-x-install-gcc-compiler/">这里</a>从<a
target="_blank" href="http://connect.apple.com/">http://connect.apple.com/</a>的Dev Tools里面下载Xcode Tools，安装。<br
/>2.编译安装libpcap，从<a
target="_blank" href="http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz">http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz</a>下载源码，tar xvfz libpcap-1.0.0.tar.gz解压，进去该目录，./configure、make、make install安装完成；<br
/>3.编译802.1x客户端，从所用项目内签出源码，在目录内make，没出什么差错的话，已经完成了。然后按Readme.txt的方法安装运行，即可！</p><p>项目主页</p><p>锐捷：<a
target="_blank" href="http://code.google.com/p/zruijie4gzhu/">http://code.google.com/p/zruijie4gzhu/</a><br
/>联想：<a
target="_blank" href="http://code.google.com/p/zlevoclient/">http://code.google.com/p/zlevoclient/</a><br
/>神州数码：<a
target="_blank" href="http://code.google.com/p/zdcclient/">http://code.google.com/p/zdcclient/</a></p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/802-1x_support_macos_freebsd/feed</wfw:commentRss> <slash:comments>20</slash:comments> </item> <item><title>Acer Aspire 4736ZG 本本上安家Linux的小问题</title><link>http://apt-blog.net/setup_linux_on_notebook_acer_aspire_4736zg</link> <comments>http://apt-blog.net/setup_linux_on_notebook_acer_aspire_4736zg#comments</comments> <pubDate>Sun, 27 Sep 2009 05:25:06 +0000</pubDate> <dc:creator>BOYPT</dc:creator> <category><![CDATA[Unix/Linux]]></category> <category><![CDATA[4736]]></category> <category><![CDATA[Acer]]></category> <category><![CDATA[Arch]]></category> <category><![CDATA[Atheros]]></category> <category><![CDATA[Headphone]]></category> <category><![CDATA[Linux]]></category> <category><![CDATA[Ubuntu]]></category> <category><![CDATA[内核模块]]></category> <category><![CDATA[耳机]]></category> <category><![CDATA[驱动]]></category> <guid
isPermaLink="false">http://apt-blog.net/?p=643</guid> <description><![CDATA[早天在新蛋上入手了Acer Aspire 4736ZG本本一台，T4200、1G、NV105M、250G，带蓝牙摄像头等，3600，还送了一台水星无线路由。低端本本为了降低成本，很多都是不装Windows的，这款也是，本来以为原装系统都是Linux，应该对Linux兼容不错的啦，那天到提货点验本本时候，运行一看，傻了，那个什么Linpus，2.6.15的内核，没带X，lshw没有，lspci没有，hwinfo更没有，总之就没什么东西好看的，除了黑漆漆的画面告诉我屏幕没坏点，就匆匆打上包回来了。 第一件事就是用Arch 09.08的Live CD启动重新分区，顺便装好core，但是启动后又傻了，连不上有线网卡……这款机器的网卡是Atheros AR8132的千兆卡，不知道是太新还是太罕见。几经折腾后发现规律：完全关机重开后，Arch就能认到网卡，ipconfig -a能看到eth0，但是ifconfig eth0 up了之后，是这个样子的： eth0 Link encap:Ethernet HWaddr 00:26:18:80:C5:AB UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4294967293 errors:4294967278 dropped:4294967290 overruns:4294967293 frame:4294967281 TX packets:4294967293 errors:4294967284 dropped:0 overruns:4294967293 carrier:4294967291 collisions:4294967281 txqueuelen:1000 RX bytes:4294967293 (4095.9 Mb) TX bytes:4294967293 (4095.9 Mb) Interrupt:28 大堆奇怪的数字，这时候不管dhcp还是手动指定IP，都没法正常工作的，如果这时重启，好，完全认不了网卡了，又要完全关机再开一次。 这个问题在Arch论坛上面也有人碰到，他的是华硕eeePC 1005HA，也是上个月的帖子。［详细情况帖子里面比较完备，但是，未解决］ 于是我就转战Ubuntu。Ubuntu 9.04的Live CD版本也是没能驱动好这块网卡的，但是这里找到解决方法，总之就是到Atheros官网下载网卡的驱动，编译，挂载驱动模块，幸好Ubuntu的Live CD跟初始系统都带了GCC和Make utils，编译安装过程倒没什么波折，很快就折腾好连上网了。呃，怎么这么简单？于是试试在台式机的Arch上面编译了这个atl1c.ko，哇，一开始就一屏幕的错误……后来发现这个是这个驱动跟内核兼容问题，Ubuntu好像专门有补丁搞定的，Ubuntu 9.04把内核升级到2.6.28.15-generic网卡就完全正常了，也顺便下载了9.10的Live CD，直接iso启动，发现虽然是31内核，但是网卡工作也正常……好吧……看来要么等kernel彻底搞定这块网卡的驱动，不然只能自己找Ubuntu的patch来编译才能跑Arch了…… Ubuntu很是省心，挂上受限驱动什么3D特效全都出来了，跑了下glxgears，大概2600fps，比台式机的集显好一点吧……7025只有1300左右的fps；更新了一下系统，用Ubuntu [...]]]></description> <content:encoded><![CDATA[<p>早天在新蛋上入手了Acer Aspire 4736ZG本本一台，T4200、1G、NV105M、250G，带蓝牙摄像头等，3600，还送了一台水星无线路由。低端本本为了降低成本，很多都是不装Windows的，这款也是，本来以为原装系统都是Linux，应该对Linux兼容不错的啦，那天到提货点验本本时候，运行一看，傻了，那个什么Linpus，2.6.15的内核，没带X，lshw没有，lspci没有，hwinfo更没有，总之就没什么东西好看的，除了黑漆漆的画面告诉我屏幕没坏点，就匆匆打上包回来了。</p><p>第一件事就是用Arch 09.08的Live CD启动重新分区，顺便装好core，但是启动后又傻了，连不上有线网卡……这款机器的网卡是Atheros AR8132的千兆卡，不知道是太新还是太罕见。几经折腾后发现规律：完全关机重开后，Arch就能认到网卡，ipconfig -a能看到eth0，但是ifconfig eth0 up了之后，是这个样子的：</p><blockquote><pre>eth0      Link encap:Ethernet  HWaddr 00:26:18:80:C5:AB
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4294967293 errors:4294967278 dropped:4294967290 overruns:4294967293 frame:4294967281
          TX packets:4294967293 errors:4294967284 dropped:0 overruns:4294967293 carrier:4294967291
          collisions:4294967281 txqueuelen:1000
          RX bytes:4294967293 (4095.9 Mb)  TX bytes:4294967293 (4095.9 Mb)
          Interrupt:28</pre></blockquote><p>大堆奇怪的数字，这时候不管dhcp还是手动指定IP，都没法正常工作的，如果这时重启，好，完全认不了网卡了，又要完全关机再开一次。</p><p><a
target="_blank" href="http://bbs.archlinux.org/viewtopic.php?pid=626481#p626481">这个问题在Arch论坛上面也有人碰到，他的是华硕eeePC 1005HA，也是上个月的帖子</a>。［详细情况帖子里面比较完备，但是，未解决］</p><p>于是我就转战Ubuntu。Ubuntu 9.04的Live CD版本也是没能驱动好这块网卡的，<a
target="_blank" href="http://www.lipengcheng.com/atheros_ar8131_driver_ubuntu.html">但是这里找到解决方法</a>，总之就是<a
target="_blank" href="http://partner.atheros.com/Drivers.aspx">到Atheros官网下载网卡的驱动</a>，编译，挂载驱动模块，幸好Ubuntu的Live CD跟初始系统都带了GCC和Make utils，编译安装过程倒没什么波折，很快就折腾好连上网了。呃，怎么这么简单？于是试试在台式机的Arch上面编译了这个atl1c.ko，哇，一开始就一屏幕的错误……后来发现这个是这个驱动跟内核兼容问题，<a
target="_blank" href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/415358">Ubuntu好像专门有补丁搞定的</a>，Ubuntu 9.04把内核升级到2.6.28.15-generic网卡就完全正常了，也顺便下载了9.10的Live CD，直接iso启动，发现虽然是31内核，但是网卡工作也正常……好吧……看来要么等kernel彻底搞定这块网卡的驱动，不然只能自己找Ubuntu的patch来编译才能跑Arch了……</p><p>Ubuntu很是省心，挂上受限驱动什么3D特效全都出来了，跑了下glxgears，大概2600fps，比台式机的集显好一点吧……7025只有1300左右的fps；更新了一下系统，用Ubuntu Tweak添加了一堆三方源后拉好一大堆软件，基本可用了，另外的问题是，声卡的耳机输出没声音！</p><p>update: 其实是我插错洞了，黑色的是耳机输出，自动断开外放喇叭，我之前插的是绿色，本来是给后置音源用的。</p><p><del
datetime="2010-06-22T06:59:11+00:00">本本的耳机问题好像从来都是老大难的，因为音频接口的硬件随意性很大，Linux驱动的很难做到通用；本本里面的是ALC888 HD声卡，装了最新的<a
target="_blank" href="http://www.alsa-project.org/main/index.php/Download">alsa-driver 1.0.21</a>，情况依旧，喇叭有声音，但是耳机就是没反应，也没那个选项有效；后来查看了一些帖子才知道，虽然是同一款驱动，但是有不同的挂载模式的参数，通常就是用来指定这类变化很大的接口等，有些帖子给出一大堆参数列表，说，在/etc/modprbe.d/alsa-base.conf里面更换不同的参数，然后重启测试……天啊，起码上百条的参数，要重启到哪个年月阿……稍微看了下，所谓的挂载参数就是传给modprobe的参数嘛，比如modprobe snd_hda_intel model=ooxx，只需要用不同的参数重新挂载snd_hda_intel，完全没必要重启阿……<a
target="_blank" href="http://www.linlap.com/wiki/audio+tester">在Linlap找到一个AudioTester脚本，专门用来测试不同的模块挂载参数的</a>，但是在Ubuntu下用也挺麻烦，正常模式下不让删除snd_hda_intel模块，只好启动到recover mode，手动挂载后运行这个脚本；终于测试到"lenovo-sky"这个参数能让耳机出声，证明还不是残废……但是进入alsamixer里面看，使用这个参数之后，只有寥寥几个选项，连录音都不见了……而且耳机跟喇叭是同时发声的，不能关闭喇叭……</p><p>后来想到，这个参数列表应该不是固定的，新的alsa里面应该会有新的参数，不知道有没有专用Acer的参数呢？因为看到原来的列表里面有acer跟acer-aspire，虽然两个没合适这款机器；grep了一下alsa-driver的源代码目录，发现sound/pci/hda/patch_realtek.c里面有一大堆acer xxxx，试了acer-aspire-4730g跟acer-aspire-4730g，设置成4ch/6ch模式后，终于能通过设置Surround让耳机出声，通过Front调整外放喇叭的声音！</del></p> ]]></content:encoded> <wfw:commentRss>http://apt-blog.net/setup_linux_on_notebook_acer_aspire_4736zg/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> </channel> </rss>
