<?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>My Life, My Love! &#187; Linux</title>
	<atom:link href="http://gfrog.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://gfrog.net</link>
	<description>指点江山 激昂文字 修身隆德 自然自我</description>
	<lastBuildDate>Sun, 05 Sep 2010 17:00:00 +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>一堆小Tips （4）</title>
		<link>http://gfrog.net/2010/08/gfrog-tips-4/</link>
		<comments>http://gfrog.net/2010/08/gfrog-tips-4/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 08:51:15 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://gfrog.net/?p=937</guid>
		<description><![CDATA[<p>今天的Tip是关于虚拟化的。<br />
问题的起因是青蛙当时使用的VirtualBox的网络配置很不方便，guset系统启动之后不能该网络连接类型不说（后来的版本做了改进，但是用着还是不够舒服），NAT模式下还不能直接跟Host系统通信。于是青蛙痛下决心，学习了一下Linux tap和br设备的用法，写了一个小脚本来搞定虚拟机的网络问题。<br />
这个脚本同样也可以用于KVM的虚拟机。</p>
<p>这个脚本会根据配置文件建立一系列的tap设备，然后桥街到几个br设备上去，然后在br上设置好IP，如果需要NAT功能则配置iptables规则。<br />
脚本文件在这里： <a href="http://gfrog.googlecode.com/hg/script/vnet.sh">http://gfrog.googlecode.com/hg/script/vnet.sh</a></p>
<p>配置文件如下：<br />
<code><br />
USER=gfrog           #指定建立tap设备时所用的用户名<br />
VNET_NUM=2         #需要建立的虚拟网络数<br />
EXITIF=eth0           #SNAT的出口接口</p>
<p>#以下是每个虚拟网络的配置<br />
[vnet1]<br />
VETH_NUM=4          #虚拟网络中包含的tap设备数<br />
VNET_IP=11.11.1.1/24  #虚拟网络br设备上配置的ip地址<br />
DONAT=no                  #是否需要做nat</p>
<p>[vnet2]<br />
VETH_NUM=4<br />
VNET_IP=11.11.2.1/24<br />
DONAT=yes<br />
EXITIF=wlan0             #针对这个虚拟网络指定专门的SNAT出口<br />
</code></p>
<p>此配置脚本需要一个名为confget的程序解析配置文件，这个程序在debian/ubuntu源上有，fedora系需要自己找一下。</p>
<p>还要注意一点，因为每次建立tap设备的MAC地址都会变化，所以使用KVM虚拟机的时候需要在启动虚拟机时给网卡指定MAC地址，防止guest系统里的网卡名称变化。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2010/08/gfrog-tips-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一堆小Tips （3）</title>
		<link>http://gfrog.net/2010/08/gfrog-tips-3/</link>
		<comments>http://gfrog.net/2010/08/gfrog-tips-3/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 04:07:11 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://gfrog.net/?p=933</guid>
		<description><![CDATA[<p>今天继续关于ssh的话题，青蛙本来想把今天这个主题放在昨天一起讲的，但是这两个Tip的关联不大，最后决定还是分开说。</p>
<p>在平时上网过程中，有可能遇到某个服务器（我们叫他S）无法访问的问题。<br />
但是如果另外一台主机（叫做P）可以访问到S，并且我们还有P上面的ssh权限，那就可以把P当作跳板，直接访问到S。<br />
假设要访问S上面的http（80）服务，那就执行如下命令：<br />
<code>ssh user@P的地址 -L 8080:S的地址:80</code><br />
这个命令会在本地打开8080端口，将连接转发到S的80端口上，这样就达到了从本地直接访问S的目的。</p>
<p>事实上ssh的-L参数主要是用来建立一条客户端到服务器之间的安全隧道，以便安全的传输数据。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2010/08/gfrog-tips-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一堆小Tips （2）</title>
		<link>http://gfrog.net/2010/08/gfrog-tips-2/</link>
		<comments>http://gfrog.net/2010/08/gfrog-tips-2/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 02:01:21 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://gfrog.net/?p=930</guid>
		<description><![CDATA[<p>今天的Tip主题是ssh。</p>
<p>经常有人问，为什么Linux里面的ssh那么难用呢，就不能有个像secureCRT那样有地址簿的东西么。答案是，有，而且不需要其他的软件，ssh自己就能搞定。</p>
<p>要实现这个功能，首先要在~/.ssh里面建立一个config文件，并设置600权限。<br />
<code>touch ~/.ssh/config<br />
chmod 600 ~/.ssh/config</code><br />
然后在这个文件中加入以下内容（以10.1.1.1为例）</p>
<p><code><br />
Host 1                     #指定主机名，这个名称可以任意，取对自己方便的就可以<br />
HostName 10.1.1.1    #指定主机的IP，这里是10.1.1.1<br />
User aaa                  #默认登录的用户名<br />
Port 22                    #主机上sshd的端口号<br />
</code></p>
<p>以后，访问10.1.1.1就直接执行#ssh 1就可以了，非常方便。</p>
<p>再继续探索一下~/.ssh/config，我们会发现更多有趣的配置。<br />
<code><br />
Host *<br />
ControlMaster auto<br />
ControlPath ~/.ssh/master-%r@%h:%p<br />
</code><br />
这段配置会打开所有主机的ControlMaster的功能，也就是在一条ssh connection上开启多个session。更多的配置选项，可以参考ssh_config(5)。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2010/08/gfrog-tips-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一堆小Tips （1）</title>
		<link>http://gfrog.net/2010/08/gfrog-tips-1/</link>
		<comments>http://gfrog.net/2010/08/gfrog-tips-1/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 02:17:49 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[IPSec]]></category>

		<guid isPermaLink="false">http://gfrog.net/?p=922</guid>
		<description><![CDATA[<p>青蛙离职在即，在东软混了三年，在工作中积累的一些小技巧。估计这些技巧到了其他公司基本上用不到了。记录一下，方便后来人。青蛙准备分几天写完，每天一个小Tips。</p>
<p>今天要说的是IPsec VPN的密码问题。搞安全的部门自然有安全部门的特色，所有的服务器都需要拨VPN才能访问。用Windows的童鞋们都很幸福，第一次连接的时候输入帐号密码，然后选保存密码，下次就可以直接登录了。但是Linux的童鞋就比较麻烦了，按照部门攻略上的办法，每次都要输入密码。</p>
<p>青蛙在ipsec.conf(5)里面找到了这个问题的解决办法。</p>
<p>首先要编辑一下/etc/ipsec.conf</p>
<blockquote><p>conn work</p>
<blockquote><p>left=10.x.x.xxx<br />
leftnexthop=10.x.x.1<br />
leftid=&#8221;C=cn,ST=liaoning,O=neusoft,OU=nsd,CN=xxx_l/emailAddress=xxx_l@neusoft.com&#8221;<br />
leftcert=cert.pem<br />
leftxauthclient=yes<br />
leftmodecfgclient=yes<br />
<span style="color: #ff0000;"> leftxauthusername=xxx_linux</span><br />
modecfgpull=no<br />
right=10.x.x.254<br />
rightsubnet=10.xxx.x.0/24<br />
rightxauthserver=yes<br />
rightmodecfgserver=yes<br />
rightid=&#8221;C=cn,ST=liaoning,O=neusoft,OU=nsd,CN=vpnser,E=vpnser@neusoft.com&#8221;<br />
<span style="color: #ff0000;"> auto=add</span></p></blockquote>
</blockquote>
<p>注意leftxauthusername=xxx_linux这行，关键就在这里了，这句话就指定了这个vpn 连接所用的用户名。</p>
<p>然后再编辑一下/etc/ipsec.secrets</p>
<blockquote><p>: RSA /etc/ipsec.d/private/key.pem<br />
<span style="color: #ff0000;"> @xxx_linux : XAUTH &#8220;password&#8221;</span></p></blockquote>
<p>@xxx_linux : XAUTH &#8220;password&#8221; 这行指定了用户名对应的密码。</p>
<p>修改完这两个文件以后，下次再连接VPN的时候就会自动连接了。</p>
<p>PS. /etc/ipsec.conf 还有一句auto=add，加上这句话之后，就可以使用#ipsec auto &#8211;up connname这种命令格式连接vpn了，命令格式简单些。</p>
<p>PS2. 为了更进一步达到偷懒的目的，继续包装一下连接vpn的流程，建立一个alias：<br />
alias vpn=&#8217;/etc/init.d/ipsec restart &amp;&amp; ipsec auto &#8211;up work&#8217;<br />
然后每次sudo vpn就成了，偷懒目的达到。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2010/08/gfrog-tips-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>测试linux系统的启动速度</title>
		<link>http://gfrog.net/2009/04/test-debian-boot-time-with-bootchart/</link>
		<comments>http://gfrog.net/2009/04/test-debian-boot-time-with-bootchart/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 12:13:36 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://gfrog.net/2009/04/test-debian-boot-time-with-bootchart/</guid>
		<description><![CDATA[<p>今天看到blog一则，话说<a href="http://linuxdesktop.cn/2009/04/08/ubuntu-904-fast-boot.html" target="_blank">ubuntu9.04竟然可以在14秒内启动</a>。于是青蛙拿<a href="http://www.bootchart.org" target="_blank">bootchart</a>测了一下自己的debian。</p>
<p>青蛙自己的系统用了33秒，其中有启动vmware和virtualbox的服务的时间，还有启动ntfs-3g、lighttpd、transmission、wicd的，比较起来，成绩还不算太差。    <br />不过wicd是用python写的，加载确实比较耗时，但是network-manager的可定制性实在不高，不知道还有没有同类的软件可以替换。</p>
<p>另外，bootchart加载之前的一段时间应该是内核加载的时间，看来青蛙还要继续精简内核才行。</p>
<p>顺便记录一下bootchart的使用方法。    <br />说起来也很简单，统共分3步。</p>
<ol>
<li>装好bootchart之后，配置自己的bootloader，例如grub，在内核选项里面加上一句： init=/sbin/bootchartd。 </li>
<li>重启，bootchart自己就会在后台记录启动信息，默认保存在/var/log/bootchart.tgz中。 </li>
<li>完成启动后，运行bootchart命令，它就会把启动信息转化为下面这张图啦。 </li>
</ol>
<p><a href="http://gfrog.net/wp-content/uploads/2009/04/bootchart.png"><img title="bootchart" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="1117" alt="bootchart" src="http://gfrog.net/wp-content/uploads/2009/04/bootchart-thumb.png" width="554" border="0" /></a></p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2009/04/test-debian-boot-time-with-bootchart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在debian sid上面安装eva</title>
		<link>http://gfrog.net/2008/03/install-eva-in-debian/</link>
		<comments>http://gfrog.net/2008/03/install-eva-in-debian/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 17:03:12 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://gfrog.net/2008/03/install-eva-in-debian/</guid>
		<description><![CDATA[<p><img src="http://haokanbu.s3.amazonaws.com/picture/external/c8b6c8df6df744f7af186747f25a35b3.jpeg" alt="debian-ubuntu" /></p>
<p>自从青蛙人品爆发，在pidgin上面死活登录不上QQ以后，青蛙都是在wine上面跑QQ.在wine上面速度慢不说，QQ时不时的来一下非法操作就把青蛙折磨的死去活来。<br />
据说最近eva又升级了，于是青蛙决定换用eva。</p>
<p>Debian的apt里面是没有eva的。青蛙上网搜了一圈，也没有发现eva的升级包，连<a href="http://sourceforge.net/projects/evaq">它的主页</a>上也都还是很久很久以前的版本（大概eva已经转入地下了）。青蛙最后在ubuntu的源里面终于翻倒了eva的deb包了。</p>
<p>eva在ubuntu源的universe里面，随便找一个ubuntu的镜像(青蛙用的是<a href="http://debian.ustc.edu.cn/ubuntu">中科大的源</a>)，在/pool/universe/e/eva目录里找到<a href="http://debian.ustc.edu.cn/ubuntu/pool/universe/e/eva/eva_0.4.9+svn20080215-0ubuntu1_i386.deb">eva_0.4.9+svn20080215-0ubuntu1_i386.deb</a>，下载回来备用。</p>
<p>在正式安装eva之前，青蛙还要搞定它的依赖性问题。</p>
<p>ubuntu里面的eva是依赖于kdelibs4c2a这个包的。但是debian里面的kdelibs4c2a存在一个依赖性的bug：<br />
它依赖于包libopenexr2ldbl，但是这个包在debian的i386源里面竟然没有。</p>
<p>于是青蛙再从ubuntu源里把<a href="http://debian.ustc.edu.cn/ubuntu/pool/main/o/openexr/libopenexr2ldbl_1.2.2-4.4ubuntu1_i386.deb">libopenexr2ldbl</a>给抓回来，dpkg -i安装之，然后执行#aptitude install kdelibs4c2a，安装一系列的依赖包。</p>
<p>顺便说一句，debian跟ubuntu这两个兄弟有时候还真不错，互相谁也不挑谁的，deb包拿过来一般都能直接用。</p>
<p>最后，执行#dpkg -i eva_0.4.9+svn20080215-0ubuntu1_i386.deb，eva安装成功。聊天去也~</p>
<p><img src="http://haokanbu.s3.amazonaws.com/picture/external/c8b6c8df6df744f7af186747f25a35b3.jpeg" alt="eva" /></p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2008/03/install-eva-in-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>世界上最小的linux</title>
		<link>http://gfrog.net/2008/03/picotux-tiny-linux-device/</link>
		<comments>http://gfrog.net/2008/03/picotux-tiny-linux-device/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 13:50:56 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[美丽图片]]></category>

		<guid isPermaLink="false">http://gfrog.net/2008/03/picotux-tiny-linux-device/</guid>
		<description><![CDATA[<p><img src="http://www.picotux.com/pt100a.jpg" alt="picotux" /><img src="http://www.picotux.com/pt112a.jpg" height="180" width="240" /></p>
<p>上面的图片就是号称世界上最小的linux：<a href="http://www.picotux.com/techdatae.html">picotux 100</a>（右侧为picotux 112）。<br />
这个小东西只有35mm×19mm×19mm大小，只比一个RJ45接口大了那么一点点。<br />
它使用32-bit ARM 7 Netsilicon NS7520处理器，主频55MHz，<br />
搭载2M~4M Flash和8M SDRAM，带有一个10/100M网卡，一个可以达到230.400 bps的串口，还有5个I/O针脚。<br />
使用3.3V电压供电。</p>
<p>软件方面，它使用uClinux 2.4.27系统，系统大小最少720KB。Shell可以使用Busybox，使用CRAMFS、JFFS2文件系统, 还可以使用NFS，<br />
有Webserver、Telnet等等程序。开发工具使用GUN Toolchain，使用GCC3.4.4以上版本和ulibc0.9.26以上版本。</p>
<p>这东东售价最低99欧元。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2008/03/picotux-tiny-linux-device/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Dreamhost主机上安装bugzilla</title>
		<link>http://gfrog.net/2008/03/install-bugzilla-in-dreamhost/</link>
		<comments>http://gfrog.net/2008/03/install-bugzilla-in-dreamhost/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 16:23:55 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Dreamhost]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bugzilla]]></category>

		<guid isPermaLink="false">http://gfrog.net/2008/03/install-bugzilla-in-dreamhost/</guid>
		<description><![CDATA[<p><a href="http://www.bugzilla.org/">bugzilla</a>是<a href="http://www.mozilla.org/">mozilla</a>一个很好的开源bug管理软件，青蛙准备在glinux的开发过程中用它来管理发现的bug。<br />
但是dreamhost上没有bugzilla的自动安装功能，青蛙按照<a href="http://wiki.dreamhost.com/Bugzilla#Installing_Bugzilla">dreamhost的wiki上面介绍的方法</a>安装时，<br />
又有很多perl模块没有，而且在dreamhost的主机上也没有权限安装这些perl模块。所以，青蛙决定先在主机上自己搞一个perl。</p>
<p>perl的安装方法很简单，<a href="http://wiki.dreamhost.com/Perl#Path_to_the_Perl_interpreter">dreamhost的wiki也有介绍</a>。<br />
青蛙选择的是perl5.8.8，因为wiki上头说有一个针对dreamhost环境的补丁要打<br />
（补丁文件在<a href="http://schwern.org/~schwern/src/dreamhost-5.8.8-cwd.patch">这里</a>下载）。<br />
打上补丁以后，执行：</p>
<blockquote><p>sh Configure -Dusethreads -Duselargefiles -Dccflags=-DDEBIAN \<br />
-Dcccdlflags=-fPIC -Darchname=i386-linux -Dprefix=~/apps \<br />
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Uusesfio \<br />
-Uusenm -Duseshrplib -Dvendorlib=/usr/share/perl5 \<br />
-Dvendorarch=/usr/lib/perl5 -Dvendorprefix=/usr -Uinstallusrbinperl -des</p></blockquote>
<p>其中Dprefix参数要设置为要安装perl的目录。<br />
config完毕就可以make \&amp;\&amp; make install了。</p>
<p>下面正式开始安装bugzilla，（青蛙的perl在~/apps/bin目录下，这个目录要换成你自己实际的目录哦），首先进入bugzilla的目录，执行：</p>
<blockquote><p>~/apps/bin/perl chechsetup.pl</p></blockquote>
<p>这个脚本会检查当前的perl环境，如果有缺少的模块，它会给出安装命令。<br />
例如，在青蛙的主机上，Email::Send、Email::MIME::Modifier就被提示安装。<br />
按照这个脚本给出的命令把必须的模块安装上，然后再次执行上面的命令，会在bugzilla目录下生成一个localconfig文件。</p>
<p>修改这个localconfig文件：</p>
<blockquote><p>$webservergroup = &#8220;apache&#8221;中的apache改为自己真实的组名称，这个组名字可以用groups命令查到。<br />
$db<em>host = &#8220;localhost&#8221; 修改为真实的mysql服务器地址。<br />
$db</em>name = &#8220;bugs&#8221; 修改为真实的数据库名。<br />
$db<em>user = &#8220;bugs&#8221; 修改为真实的用户名。<br />
$db</em>pass = &#8221; 修改为真实的密码。</p></blockquote>
<p>上面几项都改完后，重新执行checksetup.pl脚本。这时脚本会询问管理员邮箱地址，设置管理员密码等等动作。</p>
<p>因为dreamhost使用suexec方式运行的cgi脚本，所以每次执行完checksetup.pl以后，都要执行以下命令：</p>
<blockquote><p>for i in docs graphs images js skins; do find $i -type d -exec chmod o+rx {} \; ; done<br />
for i in jpg gif css js png html rdf xul; do find . -name *.$i -exec chmod o+r {} \; ; done<br />
find . -name .htaccess -exec chmod o+r {} \;<br />
chmod o+x . data data/webdot</p></blockquote>
<p>完成这些后，bugzilla就算是安装成功啦。可以先用浏览器访问下bugzilla的地址看看效果。</p>
<p>接下来说一下汉化的问题，汉化包可以在<a href="http://bugzilla-cn.googlecode.com/">这里</a>下载到，下载、解压以后，把cn文件夹复制到bugzilla目录里的template/目录就行啦。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2008/03/install-bugzilla-in-dreamhost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>glinux开发摘要(2)-构建目录结构</title>
		<link>http://gfrog.net/2008/03/glinux-setup-build-directory/</link>
		<comments>http://gfrog.net/2008/03/glinux-setup-build-directory/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 15:18:34 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://gfrog.net/2008/03/glinux-setup-build-directory/</guid>
		<description><![CDATA[<p>下面的操作步骤青蛙基本上是从<a href="http://www.linuxfromscratch.org/lfs/view/6.3">lfs6.3</a>学来的，所以会有$LFS这个变量，如果你对lfs也有兴趣，可以<a href="http://www.linuxfromscratch.org/">去它的官方网站</a>看看。</p>
<p>青蛙编译完成了toolchain以后，就可以开始建造glinux的目录体系了。<br />
首先，构造虚拟内核文件系统(Virtual Kernel File Systems)，这个东东是跟内核通信的一个途径。</p>
<p>执行下面的命令，来建立文件系统的挂载点：</p>
<blockquote>
<p>mkdir -pv $LFS/{dev,proc,sys}</p>
</blockquote>
<p>然后，建立几个必要的设备文件，</p>
<blockquote>
<p>mknod -m 600 $LFS/dev/console c 5 1 <br />
  mknod -m 666 $LFS/dev/null c 1 3          </p>
</blockquote>
<p>青蛙准备用udev来管理设备文件，所以只建立这两个文件就够了，其他文件udev会在系统启动的时候自动创建。<br />
现在udev模块在glinux上还没有安装，所以暂时用mount &#8211;bind命令将宿主系统的/dev目录镜像到glinux的目录结构里来：</p>
<blockquote>
<p>mount -v &#8211;bind /dev $LFS/dev          </p>
</blockquote>
<p>把几个重要的虚拟文件系统都挂在到glinux的目录上去：</p>
<blockquote>
<p>mount -vt devpts devpts $LFS/dev/pts <br />
  mount -vt tmpfs shm $LFS/dev/shm <br />
  mount -vt proc proc $LFS/proc <br />
  mount -vt sysfs sysfs $LFS/sys                        </p>
</blockquote>
<p>以上几个步骤在每次重新chroot以后都要执行一遍。</p>
<p>上面的步骤都完成，历史性的时刻就要来了：chroot进入glinux。</p>
<blockquote>
<p>chroot &#8220;$LFS&#8221; /tools/bin/env -i HOME=/root TERM=&#8221;$TERM&#8221; PS1=&#8217;\u:\w\$ &#8216; \ <br />
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash &#8211;login +h</p>
</blockquote>
<p>看到命令提示符在喊“I have no name!”了么？如果看到它喊了，就说明chroot成功了 <img src='http://gfrog.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
进入新系统的第一件事就是要建立glinux的目录结构了，关于linux的目录结构，<a href="http://www.linuxfans.org/">linuxfans</a>上面有<a href="http://www.linuxfans.org/bbs/thread-182534-1-1.html">一篇文章介绍的非常详细</a>，青蛙执行以下命令来建立一个完整的目录结构：</p>
<blockquote>
<p>mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt} <br />
  mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} <br />
  install -dv -m 0750 /root <br />
  install -dv -m 1777 /tmp /var/tmp <br />
  mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} <br />
  mkdir -pv /usr/{,local/}share/{doc,info,locale,man} <br />
  mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo} <br />
  mkdir -pv /usr/{,local/}share/man/man{1..8} <br />
  for dir in /usr /usr/local; do <br />
   ln -sv share/{man,doc,info} $dir <br />
  done <br />
  mkdir -v /var/{lock,log,mail,run,spool} <br />
  mkdir -pv /var/{opt,cache,lib/{misc,locate},local}                             </p>
</blockquote>
<p>然后，把/tools/目录下的一些文件链接到chroot环境对应的目录下：</p>
<blockquote>
<p>ln -sv /tools/bin/{bash,cat,echo,grep,pwd,stty} /bin <br />
  ln -sv /tools/bin/perl /usr/bin <br />
  ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib <br />
  ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib <br />
  ln -sv bash /bin/sh                               </p>
</blockquote>
<p>建立一个/etc/mtab文件：</p>
<blockquote>
<p>touch /etc/mtab                            </p>
</blockquote>
<p>建立/etc/passwd文件和/etc/group文件：</p>
<blockquote>
<p>cat > /etc/passwd &lt;&lt; &#8220;EOF&#8221; <br />
  root:x:0:0:root:/root:/bin/bash <br />
  nobody:x:99:99:Unprivileged User:/dev/null:/bin/false <br />
  EOF                             </p>
<p>cat > /etc/group &lt;&lt; &#8220;EOF&#8221; <br />
  root:x:0: <br />
  bin:x:1: <br />
  sys:x:2: <br />
  kmem:x:3: <br />
  tty:x:4: <br />
  tape:x:5: <br />
  daemon:x:6: <br />
  floppy:x:7: <br />
  disk:x:8: <br />
  lp:x:9: <br />
  dialout:x:10: <br />
  audio:x:11: <br />
  video:x:12: <br />
  utmp:x:13: <br />
  usb:x:14: <br />
  cdrom:x:15: <br />
  mail:x:34: <br />
  nogroup:x:99: <br />
  EOF                                 </p>
</blockquote>
<p>然后重新运行一次bash，让bash不再喊“I have no name!”</p>
<blockquote>
<p>exec /tools/bin/bash &#8211;login +h                                 </p>
</blockquote>
<p>接下来再建立一些要用到的log文件：</p>
<blockquote>
<p>touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} <br />
  chgrp -v utmp /var/run/utmp /var/log/lastlog <br />
  chmod -v 664 /var/run/utmp /var/log/lastlog                              </p>
</blockquote>
<p>到这里，glinux的目录结构基本上搞定了，下面我们就可以制作内核跟busybox了。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2008/03/glinux-setup-build-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>glinux开发摘要(1)&#8211;编译环境制作</title>
		<link>http://gfrog.net/2008/03/glinux-setup-compile-environment/</link>
		<comments>http://gfrog.net/2008/03/glinux-setup-compile-environment/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 11:16:47 +0000</pubDate>
		<dc:creator>gfrog</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://gfrog.net/2008/03/glinux-setup-compile-environment/</guid>
		<description><![CDATA[<p>在uty同学的积极鼓励下，青蛙开始了glinux下一个版本的制作（关于glinux的历史，欢迎回顾青蛙从前的日志）。<br />
一开始，青蛙准备利用debian现成的编译环境，但是后来突然想自己构建一个工具链比较好。工具稳定下来，做出来的东西才比较有保障。于是，青蛙从新拾起lfs，开始第二轮lfs征程，不过这次lfs只做三分之一，青蛙的目标就是：lfs6.3的Toolschain。<br />
具体操作过程没啥好说的，简单的step by step就好，但是在制作过程中，遇到了几个bug（可能也算不上bug，可能是青蛙系统的原因）。</p>
<p>这第一个，就是在glibc-2.5.1这步，会遇到下面这个错误：</p>
<blockquote><p> mawk: scripts/gen-sorted.awk: line 19: regular expression compile failed (bad class &#8212; [], [^] or [)<br />
/[^<br />
mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]<br />
mawk: scripts/gen-sorted.awk: line 19: runaway regular expression /, &#8220;&#8221;, subd &#8230;</p></blockquote>
<p>再往上翻还有这么一句：</p>
<blockquote><p>mawk: scripts/gen-sorted.awk: line 19: syntax error at or near ]</p></blockquote>
<p>拿google一划拉，发现这个错误是因为青蛙系统上用了mawk的问题，据说换用gawk可以解决。<br />
在babble.com上面<a href="http://www.nabble.com/small-fix-for-crosstool-with-glibc-2.7-td13448350.html">有人给出了一个patch</a>，很简单，给三个地方加个“\”就ok了。但是这个patch是给glibc2.7用的，在lfs6.3里带的glibc2.5.1里面没法直接用。青蛙按图索骥，改了这个gen-sorted.awk，就没有上头那些错误了。<br />
虽说一个补丁可以解决这个问题，但是<a href="http://www.linuxquestions.org/questions/showthread.php?p=2969014#post2969014">有前辈告诉我们</a>，lfs里面的用的都是awk的脚本，如果用mawk很有可能不会有正确的结果，所以建议大家还是安装gawk的好。<br />
gawk源码<a href="http://ftp.gnu.org/pub/gnu/gawk/">在这里下载</a>，debian系的系统只需要aptitude install gawk就好了。其他发行版要注意检查/etc/alternatives/awk是不是正确指向了gawk。</p>
<p>（顺路说一句，cpu在卖力的cc的时候正好可以过来写blog，真是很不错，可以随时把过程记录下来 :p）</p>
<p>第二个错误是在glibc2.5.1的make check过程中：</p>
<blockquote><p> /tools/bin/ld: cannot find -lstdc++<br />
collect2: ld returned 1 exit status<br />
make[2]: *** [/mnt/lfs/sources/glibc-build/nptl/tst-cancel24] Error 1<br />
make[2]: Target `tests&#8217; not remade because of errors.<br />
make[1]: *** [nptl/tests] Error 2<br />
make[1]: Target `check&#8217; not remade because of errors.<br />
make: *** [check] Error 2</p></blockquote>
<p>青蛙没有找到这个错误的原因，大概就像lfs文档里说的，第一次编译lfs跟宿主系统依赖关系太大的原因造成的。</p>
<p>第三个错误发生在bash3.2的make过程中，它会提示没有找到yacc这个程序，解决方法很简单，通过apt装上就好了。</p>
<p>到这里，工具链的制作就完成了，下一步就可以制作系统的目录结构并编译内核了。</p>
<hr /><small>
本作品采用
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议</a>进行许可。&copy; 2008 <a href="http://gfrog.net">gfrog.net</a> <br /> a90255f136e145f6f38fa3fbbc88aef1 (38.107.191.92) )</small>]]></description>
		<wfw:commentRss>http://gfrog.net/2008/03/glinux-setup-compile-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
