<?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>江淼的Blog &#187; ubuntu/debian</title>
	<atom:link href="http://www.jiangmiao.org/blog/c/ubuntudebian/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jiangmiao.org/blog</link>
	<description>简单生活</description>
	<lastBuildDate>Sat, 24 Dec 2011 07:02:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Linux chromium 性能优化</title>
		<link>http://www.jiangmiao.org/blog/1729.html</link>
		<comments>http://www.jiangmiao.org/blog/1729.html#comments</comments>
		<pubDate>Sat, 22 Jan 2011 08:49:39 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[chromium]]></category>
		<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1729</guid>
		<description><![CDATA[上次提到换了mini电脑，因为CPU只有1.6G，发现chromium初次打开网页很慢。以百度贴吧首页为例，第一次打开居然要花20秒，top发现CPU一直处于满负荷状态，但只要不关chromium第二次打开贴吧首页只需2秒，这是为什么呢？肯定不是渲染上的问题，那chromium一定在初使化什么。思考许久，猜测是字体过多的问题。于是把/usr/share/fonts中的所有字体删除，仅保留DejaVu Sans, Serif, Monospace和Zenhei 4种字体。fc-cache 更新了一下缓存，再用chromium打开网页行云流水，问题解决。 之前用高性能的CPU一直没感觉到，其实过多的无用字体才是chromium真正的一大性能杀手。]]></description>
			<content:encoded><![CDATA[<p>上次提到换了mini电脑，因为CPU只有1.6G，发现chromium初次打开网页很慢。以百度贴吧首页为例，第一次打开居然要花20秒，top发现CPU一直处于满负荷状态，但只要不关chromium第二次打开贴吧首页只需2秒，这是为什么呢？肯定不是渲染上的问题，那chromium一定在初使化什么。<br />思考许久，猜测是<strong>字体过多</strong>的问题。于是把/usr/share/fonts中的所有字体删除，仅保留DejaVu Sans, Serif, Monospace和Zenhei 4种字体。<br />fc-cache 更新了一下缓存，再用chromium打开网页行云流水，问题解决。</p>
<p>之前用高性能的CPU一直没感觉到，其实过多的无用字体才是chromium真正的一大性能杀手。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1729.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用ccache加速Linux内核编译</title>
		<link>http://www.jiangmiao.org/blog/1687.html</link>
		<comments>http://www.jiangmiao.org/blog/1687.html#comments</comments>
		<pubDate>Tue, 11 Jan 2011 20:48:22 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1687</guid>
		<description><![CDATA[ccache是一款加速编译的工具。第一次编译时可能略微多花10~20%的时间用于缓存，第二次及之后的编译可以说是风雷电掣。 使用ccache gcc代替作为CC进行编译，MAKEFLAGS=&#8221;CC=ccache\ gcc&#8221; CONCURRENCY_LEVEL=4 make-kpkg &#8211;initrd &#8211;append-to-version=-miao-0.7 kernel_image 中间的CONCURRENCY_LEVEL意为并发编译数，几核就写几，有人推荐内核数+1，不过我没发现有多大差别。 经测试未使用ccache编译内核一次需3分钟。第二次使用ccache编译：1分21秒。 快了一倍多。 相关链接内核编译流程]]></description>
			<content:encoded><![CDATA[<p>ccache是一款加速编译的工具。第一次编译时可能略微多花10~20%的时间用于缓存，第二次及之后的编译可以说是风雷电掣。</p>
<p>使用ccache gcc代替作为CC进行编译，<br />MAKEFLAGS=&#8221;CC=ccache\ gcc&#8221; CONCURRENCY_LEVEL=4 make-kpkg &#8211;initrd &#8211;append-to-version=-miao-0.7 kernel_image</p>
<p>中间的CONCURRENCY_LEVEL意为并发编译数，几核就写几，有人推荐内核数+1，不过我没发现有多大差别。</p>
<p>经测试<br />未使用ccache编译内核一次需3分钟。<br />第二次使用ccache编译：1分21秒。 快了一倍多。</p>
<p>相关链接<br /><a href="http://www.jiangmiao.org/blog/511.html" target="_blank">内核编译流程</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1687.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fvwm 介绍</title>
		<link>http://www.jiangmiao.org/blog/1304.html</link>
		<comments>http://www.jiangmiao.org/blog/1304.html#comments</comments>
		<pubDate>Fri, 17 Sep 2010 06:45:22 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1304</guid>
		<description><![CDATA[Fvwm 是一个X11的窗口管理器。Fvwm 具有以下特点1、系统启动快：从登录用户到启动完成不超过2秒2、资源占用少3、自定义性强：可以随心所欲的改造桌面，绑定快捷键。 因其上3个特性，Fvwm已成为我的主要桌面环境。当然最主要的是第3个特性，可以用只用少量代码即可完成如按 Win+w 如果 chromium-browser + gnome-terminal + gvim 未运行则运行，再按指定位置排列上述程序等操作。 基本上只要能想到的和键盘，鼠标，窗口三者有关的任何操作，在Fvwm的帮助下均可以无障碍完成。着实方便。 Fvwm首页: http://www.fvwm.org/Fvwm文档: http://www.fvwm.org/doc/unstable/index.html]]></description>
			<content:encoded><![CDATA[<p>Fvwm 是一个X11的窗口管理器。<br />Fvwm 具有以下特点<br />1、系统启动快：从登录用户到启动完成不超过2秒<br />2、资源占用少<br />3、自定义性强：可以随心所欲的改造桌面，绑定快捷键。</p>
<p>因其上3个特性，Fvwm已成为我的主要桌面环境。当然最主要的是第3个特性，可以用只用少量代码即可完成如<br />按 Win+w 如果 chromium-browser + gnome-terminal + gvim 未运行则运行，再按指定位置排列上述程序<br />等操作。</p>
<p>基本上只要能想到的和键盘，鼠标，窗口三者有关的任何操作，在Fvwm的帮助下均可以无障碍完成。着实方便。</p>
<p>Fvwm首页: <a href="http://www.fvwm.org/" target="_blank">http://www.fvwm.org/</a><br />Fvwm文档: <a href="http://www.fvwm.org/doc/unstable/index.html" target="_blank">http://www.fvwm.org/doc/unstable/index.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1304.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linux下的本地化与国际化 –  2. gettext</title>
		<link>http://www.jiangmiao.org/blog/1285.html</link>
		<comments>http://www.jiangmiao.org/blog/1285.html#comments</comments>
		<pubDate>Thu, 16 Sep 2010 09:21:20 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1285</guid>
		<description><![CDATA[GNU gettext 是一套GNU下的国际化工具，几乎支持所有Linux下的计算机语言。在gettext的帮助下，可以轻松完成程序的国际化。 一、相关文件 .pot po 的模版，可由xgettext生成 .po 翻译的源，可由msginit + .pot生成 .gmo 编译后的po，可由 msgfmt + .po 生成 .mo 同上，只是gmo通常指的是未安装的mo，可由 install + .gmo 生成 二、相关工具 xgettext 从源代码中提取需要翻译的字串，生成pot文件 msginit 替换pot中的Entry信息，如译者，文件编码等 msgmerge 合并现有的.po文件 msgfmt 把.po文件生成.gmo或.mo文件 三、相关函数 bindtextdomain(const char *domain, const char *dirname) 通过domain与dirname绑定mo文件的域 &#8230; <a href="http://www.jiangmiao.org/blog/1285.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>GNU gettext 是一套GNU下的国际化工具，几乎支持所有Linux下的计算机语言。在gettext的帮助下，可以轻松完成程序的国际化。<br />
<h3>一、相关文件</h3>
<dl>
<dt>.pot</dt>
<dd>po 的模版，可由xgettext生成</dd>
<dt>.po</dt>
<dd>翻译的源，可由msginit + .pot生成</dd>
<dt>.gmo</dt>
<dd>编译后的po，可由 msgfmt + .po 生成</dd>
<dt>.mo</dt>
<dd>同上，只是gmo通常指的是未安装的mo，可由 install + .gmo 生成</dt>
</dl>
<h3>二、相关工具</h3>
<dl>
<dt>xgettext</dt>
<dd>从源代码中提取需要翻译的字串，生成pot文件</dd>
<dt>msginit</dt>
<dd>替换pot中的Entry信息，如译者，文件编码等</dd>
<dt>msgmerge</dt>
<dd>合并现有的.po文件</dd>
<dt>msgfmt</dt>
<dd>把.po文件生成.gmo或.mo文件</dt>
</dl>
<h3>三、相关函数</h3>
<dl>
<dt><strong>bindtextdomain</strong>(const char *domain, const char *dirname)</dt>
<dd>通过domain与dirname绑定mo文件的域</dd>
<dt><strong>textdomain</strong> (const char *domainname)</dt>
<dd>指定gettext所用的域</dd>
<dt><strong>gettext</strong>(const char *msgid):</dt>
<dd>由locale与textdomain指定的domain得到翻译后的字串</dd>
<dt><strong>ngettext</strong>(const char *msgid1, const char *msgid2, unsigned long int n):</dt>
<dd>通过n返回单数的msgid1 或 复数的msgid2</dd>
<dt><strong>dgettext</strong>(const char *domain, const char *msgid)</dt>
<dd>指定domain的gettext</dd>
<dt><strong>dngettext</strong>(const char *domain, const char *msgid, unsigned long int n);</dt>
<dd>指定domain的ngettext</dd>
<dt><strong>dcgettext</strong>(const char *domain, const char *msgid, int category):</dt>
<dd>指定domain与category的gettext</dd>
<dt><strong>dcngettext</strong>(const char *domain, const char *msgid1, const char *msgid2, unsigned long int n, int category):</dt>
<dd>指定domain与category的ngettext</dt>
</dl>
<p>gettext的dirname, locale domain, category, 在磁盘上的结构为<br />dirname/locale/category/domain.mo<br />如<br />/usr/share/locale/zh_CN/LC_MESSAGES/gettext_demo.mo<br />默认的category为LC_MESSAGES<br />
<h3>四、实例</h3>
<h4>1. 新建文件 gettext_demo.c</h4>
<div class="pre">
<pre class="cpp" name="code">#include &lt;locale.h&gt;
#include &lt;libintl.h&gt;
#include &lt;stdio.h&gt;

#define _(string) gettext(string)

const char *DOMAIN  = &quot;gettext_demo&quot;;
const char *DIRNAME = &quot;languages&quot;; 

int main(int argc, char **argv) {

  /* 设置locale与系统一致 */
  setlocale(LC_ALL, &quot;&quot;);

  /* 添加域 gettext_test 在目录 po */
  bindtextdomain(DOMAIN, DIRNAME);

  /* 设定默认域为 gettext_test */
  textdomain(DOMAIN);

  /* gettext(Hello World) */
  puts(_(&quot;Hello&quot;));
  return 0;
}</pre>
</div>
<h4>2. 制作zh_CN.UTF-8的语言包</h4>
<div class="pre">
<pre>
gettext_demo$ ls
gettext_demo.c
gettext_demo$ mkdir po
gettext_demo$ cd po

由xgettext生成pot
gettext_demo/po$ xgettext -k_  --package-name gettext_demo --package-version 0.1 ../*.c  -o gettext_demo.pot
gettext_demo/po$ ls
gettext_demo.pot

由gettext_demo.pot生成zh_CN.po
gettext_demo/po$ msginit #因为我的系统locale为zh_CN.UTF-8,因此msginit自动生成针对zh_CN.UTF-8的po
gettext_demo/po$ ls
gettext_demo.pot  zh_CN.po

修改po文件
#: ../gettext_demo.c:22
msgid &quot;Hello&quot;
msgstr &quot;&quot;
为
#: ../gettext_demo.c:22
msgid &quot;Hello&quot;
msgstr &quot;你好&quot;

由zh_CN.po生成zh_CN.mo
gettext_demo/po$ msgfmt zh_CN.po -o zh_CN.mo
gettext_demo/po$ ls
gettext_demo.pot  zh_CN.mo  zh_CN.po

复制zh_CN.mo到../languages/zh_CN/LC_MESSAGES/gettext_demo.mo
gettext_demo/po$ mkdir -p ../languages/zh_CN/LC_MESSAGES
gettext_demo/po$ cp zh_CN.mo ../languages/zh_CN/LC_MESSAGES/gettext_demo.mo 

编译并测试
gettext_demo$ gcc gettext_demo.c -o gettext_demo
gettext_demo$ ls
gettext_demo  gettext_demo.c  languages  po
gettext_demo$ ./gettext_demo
你好

测试英文环境
gettext_demo$ LC_ALL=en_US ./gettext_demo
Hello
如果尝试 LC_ALL=zh_CN.GBK ./gettext_demo 在UTF-8环下显示&quot;乱码&quot;，因为显示的是GBK编码，gettext转换到相应的编码了。&lt;/pre&gt;
当系统发生变化时，添加了新的语句，为此通过工具msgmerge进行和并
修改 gettext_demo.c
/* gettext(Hello World) */
puts(_(&quot;Hello&quot;));
为
/* gettext(Hello World) */
puts(_(&quot;Hello&quot;));
puts(_(&quot;World&quot;));

gettext_demo/po$ xgettext -k_  --package-name gettext_demo --package-version 0.1 ../*.c  -o gettext_demo.pot
gettext_demo/po$ msgmerge zh_CN.po gettext_demo.pot -o zh_CN.po
. 完成。

修改文件 zh_CN.po
#: ../gettext_demo.c:23
msgid &quot;World&quot;
msgstr &quot;世界&quot;

得新生成并复制zh_CN.mo到../languages/zh_CN/LC_MESSAGES/gettext_demo.mo
测试
gettext_demo$ ./gettext_demo
你好
世界
</pre>
</div>
<h3>五、相关链接</h3>
<p><a href="http://www.gnu.org/software/gettext/manual/gettext.html" target="_blank">GNU gettext 官方文档</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1285.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Linux下的本地化与国际化 –  1. locale</title>
		<link>http://www.jiangmiao.org/blog/1265.html</link>
		<comments>http://www.jiangmiao.org/blog/1265.html#comments</comments>
		<pubDate>Thu, 16 Sep 2010 03:35:46 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=1265</guid>
		<description><![CDATA[locale是POSIX标准下系统用于区域管理的系统，使系统满足不同地区用户的语言，日期格式等文化习惯。 一、为什么要国际化 各个地区有各自不同的文化，因为文化的差异，因此对同一事物如当前日期，货币格式等有着各自的描述方式，为了使程序面向世界，国际化必不可少。 二、Linux下的国际化 Linux 遵循标准 POSIX 2001因此，对于地区习惯的定义共分为以下系统环境变量： LC_COLLATE 字符序 LC_CTYPE 字符类别，如定义A的小写为a LC_MONETARY 货币格式 LC_NUMERIC 数字格式 LC_TIME 日期时间格式 LC_MESSAGES 语言 LC_ALL 以上所有 LANG 除以上其它任何用途 在程序中通过查询上述变量来获知用户的文化习惯。当前系统所支持的locale可用通过 locale -a 查询 因Linux下的标准应用程序与库都基于上述标准，所以只要理解的locale，就等于国际化了一半。 三、GNU C下的国际化 C99标准定义所有程序初始locale为C而后可通过setlocale进行设置或改变 char * setlocale(int category, const char *locale) 当locale为NULL时，返回当前locale。当输入的locale为&#8221;"时，设为与当前用户环境一致。当输入的locale不被支持时，返回NULL。 &#8230; <a href="http://www.jiangmiao.org/blog/1265.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>locale是POSIX标准下系统用于区域管理的系统，使系统满足不同地区用户的语言，日期格式等文化习惯。<br />
<h3>一、为什么要国际化</h3>
<p>各个地区有各自不同的文化，因为文化的差异，因此对同一事物如当前日期，货币格式等有着各自的描述方式，为了使程序面向世界，国际化必不可少。<br />
<h3>二、Linux下的国际化</h3>
<p>Linux 遵循标准 POSIX 2001<br />因此，对于地区习惯的定义共分为以下系统环境变量：<br />
<table>
<tr>
<td width="50%">LC_COLLATE</td>
<td width="50%">字符序</td>
</tr>
<tr>
<td width="50%">LC_CTYPE</td>
<td width="50%">字符类别，如定义A的小写为a</td>
</tr>
<tr>
<td width="50%">LC_MONETARY</td>
<td width="50%">货币格式</td>
</tr>
<tr>
<td width="50%">LC_NUMERIC</td>
<td width="50%">数字格式</td>
</tr>
<tr>
<td width="50%">LC_TIME</td>
<td width="50%">日期时间格式</td>
</tr>
<tr>
<td width="50%">LC_MESSAGES</td>
<td width="50%">语言</td>
</tr>
<tr>
<td width="50%">LC_ALL</td>
<td width="50%">以上所有</td>
</tr>
<tr>
<td width="50%">LANG</td>
<td width="50%">除以上其它任何用途</td>
</tr>
</table>
<p>在程序中通过查询上述变量来获知用户的文化习惯。<br />当前系统所支持的locale可用通过 locale -a 查询</p>
<p>因Linux下的标准应用程序与库都基于上述标准，所以只要理解的locale，就等于国际化了一半。<br />
<h3>三、GNU C下的国际化</h3>
<p>C99标准定义所有程序初始locale为C<br />而后可通过setlocale进行设置或改变
<dl>
<dt>char * setlocale(int category, const char *locale)</dt>
<dd>当locale为NULL时，返回当前locale。<br />当输入的locale为&#8221;"时，设为与当前用户环境一致。<br />当输入的locale不被支持时，返回NULL。</dt>
</dl>
<p>例子：
<div class="pre">
<pre class="cpp" name="code">#include &lt;locale.h&gt;
#include &lt;time.h&gt;

void puts_time(struct tm *loctime) {
  char buf[64];
  strftime(buf, sizeof(buf), &quot;%c&quot;, loctime);
  puts(buf);
}
int main(int argc, char **argv) {
  time_t now;
  struct tm *loctime;
  const char *new_locale;

  now = time(NULL);
  loctime = localtime(&amp;now);

  puts(&quot;获取当前locale&quot;);
  puts(setlocale(LC_ALL, NULL));
  puts_time(loctime);

  puts(&quot;设定locale为系统:&quot;);
  puts(setlocale(LC_ALL, &quot;&quot;));
  puts_time(loctime);

  puts(&quot;设定locale为en_US.UTF-8:&quot;);
  new_locale = setlocale(LC_ALL, &quot;en_US.UTF-8&quot;);
  if(new_locale)
    puts(new_locale);
  else
    perror(&quot;set locale failed&quot;);
  puts_time(loctime);

  puts(&quot;设定locale为an invalid locale:&quot;);
  new_locale = setlocale(LC_ALL, &quot;an invalid locale&quot;);
  if(new_locale)
    puts(new_locale);
  else
    perror(&quot;set locale failed&quot;);
  puts_time(loctime);
  return 0;
}</pre>
</div>
<p>=== 输出 ===<br />获取当前locale<br />C<br />Thu Sep 16 12:21:19 2010<br />设定locale为系统:<br />zh_CN.UTF-8<br />2010年09月16日 星期四 12时21分19秒<br />设定locale为en_US.UTF-8:<br />Thu 16 Sep 2010 12:21:19 PM CST<br />en_US.UTF-8<br />设定locale为an invalid locale:<br />Thu 16 Sep 2010 12:21:19 PM CST<br />set locale failed: No such file or directory<br />
<h3>四、相关链接</h3>
<p><a href="http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html" target="_blank"> Locale 在POSIX规范中的定义 </a><br /><a href="http://www.gnu.org/s/libc/manual/html_node/Locales.html" target="_blank">Glibc 的locale 描述 </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/1265.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian下配置mrtg</title>
		<link>http://www.jiangmiao.org/blog/938.html</link>
		<comments>http://www.jiangmiao.org/blog/938.html#comments</comments>
		<pubDate>Fri, 04 Jun 2010 04:34:11 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>
		<category><![CDATA[系统管理]]></category>
		<category><![CDATA[mrtg]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=938</guid>
		<description><![CDATA[目标：配置mrtg并每5分钟更新一次mrtg到/var/www/mrtg 一、安装snmpd, mrtg apt-get install snmpd mrtg mrtg是基于snmp通信，snmpd必不可少 二、配置snmpd 修改 /etc/snmp/snmpd.conf com2sec paranoid default public #com2sec readonly default public #com2sec readwrite default private 为 # sec.name source community #com2sec paranoid default public com2sec readonly 127.0.0.1 public #com2sec readwrite default private &#8230; <a href="http://www.jiangmiao.org/blog/938.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>目标：配置mrtg并每5分钟更新一次mrtg到/var/www/mrtg<br />
<h3>一、安装snmpd, mrtg</h3>
<div class="pre">
<pre>
apt-get install snmpd mrtg
</pre>
</div>
<p>mrtg是基于snmp通信，snmpd必不可少<br />
<h3>二、配置snmpd</h3>
<p>修改 /etc/snmp/snmpd.conf
<div class="pre">
<pre>
com2sec paranoid   default         public
#com2sec readonly  default         public
#com2sec readwrite default         private
</pre>
</div>
<p>为
<div class="pre">
<pre>
#       sec.name  source          community
#com2sec paranoid  default         public
com2sec readonly  127.0.0.1         public
#com2sec readwrite default         private
</pre>
</div>
<p>创建一个source为本机，名为public的只读通信</p>
<p>重启snmpd<br />/etc/init.d/snmpd restart<br />
<h3>三、检测snmpd是否工作并显示当前网络的interface</h3>
<div class="pre">
<pre>
snmpwalk -v 1 -c public localhost 1.3.6.1.2.1.2.2.1.2
</pre>
</div>
<p>后面一串1.3.6.1.2.1.2.2.1.2为snmp通信的oid，意为ifDescr</p>
<p>如我的interface描述输出
<div class="pre">
<pre>
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.3 = STRING: venet0
</pre>
</div>
<p>有2个可监控的interface，1为localhost，3为virtual net<br />
<h3>四、编写mrtg.cfg</h3>
<p>虽说可以mrtg.cfg由cfgmaker生成，但手写mrtg.cfg可以更好的理解mrtg<br />理论上mrtg.cfg可以在任何位置，这里为/etc/mrtg.cfg，因为debian在/etc/cron.d/mrtg已为mrtg添加了周期为5分钟的cron
<div class="pre">
<pre>
#工作目录，也就是mrtg生成的图表等在的目录
WorkDir: /var/www/mrtg

#通用配置
#Title前缀
Title[^]: Traffic Analysis for
#以bit为单位，图表内的数据居右显示
Options[_]: bits, growright

#标题
Title[wan]: wan
#最大字节，比如10Mbps，那么MaxBytes为 10/8=1.25M=1250000
MaxBytes[wan]: 1250000
#监控目标 interface 3
Target[wan]: 3:public@127.0.0.1
</pre>
</div>
<h3>五、更新mrtg数据</h3>
<p>env LANG=C mrtg /etc/mrtg.cfg<br />生成的网页在/var/www/mrtg。通过对http访问该目录即可。<br />
<h3>六、添加至crontab</h3>
<p>若/etc/cron.d 中无mrtg那么可通过crontab -e添加一个cron
<div class="pre">
<pre>
*/5 *	*  *  env LANG=C /usr/bin/mrtg /etc/mrtg.cfg  2&gt;&amp;1 | tee -a /var/log/mrtg/mrtg.log
</pre>
</div>
<h3>七、相关链接</h3>
<p><a href="http://oss.oetiker.ch/mrtg/doc/mrtg-reference.en.html" target="_blank">mrtg配置文档</a><br /><a href="http://www.alvestrand.no/objectid/top.html" target="_blank">snmp oid描述</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/938.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux命令行下的ctrl+r</title>
		<link>http://www.jiangmiao.org/blog/852.html</link>
		<comments>http://www.jiangmiao.org/blog/852.html#comments</comments>
		<pubDate>Fri, 16 Apr 2010 09:50:30 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>
		<category><![CDATA[系统管理]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=852</guid>
		<description><![CDATA[linux命令行的history是一个熟知但不常用的命令，原因是要查某个命令的编号需要输入 history&#124;grep xxx ，又因为!?xxx,!xxx 属于运行即执行也不方便，ctrl+r则方便多了。 ctrl+r用途：反向搜索执行过的命令。(reverse-i-search) 若对于现有history 611 ruby foo.rb 612 ruby bar.rb 613 ruby fo.rb 614 ruby ba.rb 615 &#8230; &#8230; 700 &#8230; 在不知道序号的情况下，若要运行ruby foo.rb。1、ctrl+r2、foo或1、ctrl+r2、fo3、ctrl+r (继续反向搜索)只需要寥寥几键。当然若仅是上几个命令还是[上]键更有效率。]]></description>
			<content:encoded><![CDATA[<p>linux命令行的history是一个熟知但不常用的命令，原因是要查某个命令的编号需要输入 history|grep xxx ，又因为!?xxx,!xxx 属于运行即执行也不方便，ctrl+r则方便多了。</p>
<p>ctrl+r<br />用途：反向搜索执行过的命令。(reverse-i-search)</p>
<p>若对于现有history<br />  611  ruby foo.rb<br />  612  ruby bar.rb<br />  613  ruby fo.rb<br />  614  ruby ba.rb<br />  615  &#8230;<br />  &#8230;<br />  700  &#8230;</p>
<p>在不知道序号的情况下，若要运行ruby foo.rb。<br />1、ctrl+r<br />2、foo<br />或<br />1、ctrl+r<br />2、fo<br />3、ctrl+r (继续反向搜索)<br />只需要寥寥几键。当然若仅是上几个命令还是[上]键更有效率。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/852.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ssh无密码登入设置</title>
		<link>http://www.jiangmiao.org/blog/559.html</link>
		<comments>http://www.jiangmiao.org/blog/559.html#comments</comments>
		<pubDate>Tue, 24 Nov 2009 20:32:40 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=559</guid>
		<description><![CDATA[现有2台机器 1、服务器192.168.1.112 2、个人机192.168.1.110 要使110无需密码通过ssh登入112 步骤 1、创建密钥 miao@u32-192-168-1-110:~/.ssh$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): (忽略) Enter same passphrase again: (忽略) Your identification has been saved in /home/miao/.ssh/id_rsa. Your public key has been saved &#8230; <a href="http://www.jiangmiao.org/blog/559.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>现有2台机器</p>
<p>1、服务器192.168.1.112</p>
<p>2、个人机192.168.1.110</p>
<p>要使110无需密码通过ssh登入112</p>
<p>步骤</p>
<p><strong>1、创建密钥</strong></p>
<pre>
miao@u32-192-168-1-110:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (忽略)
Enter same passphrase again: (忽略)
Your identification has been saved in /home/miao/.ssh/id_rsa.
Your public key has been saved in /home/miao/.ssh/id_rsa.pub.
</pre>
<p><strong>2、复制公密到服务器</strong></p>
<pre>
miao@u32-192-168-1-110:~/.ssh$ scp id_rsa.pub miao@192.168.1.112:/home/miao/.ssh/192.168.1.110
miao@192.168.1.112's password:
id_rsa.pub                                                                   100%  404     0.4KB/s   00:00
miao@u32-192-168-1-110:~/.ssh$
</pre>
<p><strong>3、添加公密到192.168.112的信任区域</strong></p>
<pre>
miao@debian-192-168-1-112:~/.ssh$ cat 192.168.1.110 &gt;&gt; authorized_keys
miao@debian-192-168-1-112:~/.ssh$
</pre>
<p><strong>注： 2，3两步可由命令ssh-copy-id一步到位</strong></p>
<pre>
miao@ubuntu-192-168-1-110:~/.ssh$ ssh-copy-id miao@192.168.1.112
Password:
Now try logging into the machine, with "ssh 'miao@192.168.1.112'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
</pre>
<p><strong>4、启动ssh-agent</strong></p>
<p>如果ssh 192.168.112返回 Agent admitted failure to sign using the key<br />ps -Af|grep agent查看有无ssh-agent有无运行，若没有</p>
<pre>
miao@u32-192-168-1-110:~/.ssh$ ssh-agent
</pre>
<p><strong>5、添加id_rsa到ssh-agent</strong></p>
<pre>
miao@u32-192-168-1-110:~/.ssh$ ssh-add id_rsa
</pre>
<p><strong>6、完成</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/559.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>升级至内核2.6.31+ATI官方9.9成功，及一点注意事项</title>
		<link>http://www.jiangmiao.org/blog/511.html</link>
		<comments>http://www.jiangmiao.org/blog/511.html#comments</comments>
		<pubDate>Wed, 16 Sep 2009 07:40:45 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=511</guid>
		<description><![CDATA[第一次编内核，搞了一个通宵，终于还是成功了。一、基本配置和效果原系统: Ubuntu 9.04 (内核2.6.28) ATI官方9.8升级至: Ubuntu 9.04 (内核2.6.31) ATI官方9.9CPU: AMD Phenom 9550+集成显卡ATI HD3300initrd.img 由7.4M缩至3.1Mvmlinuz 由3.3M缩至2.8M启动速度 12秒提升至6秒glxgears由1000提升至2400chromium 4.0, Firefox-3.5 peacekeeper分数均有10%~15%的提升。 二、问题碰到的主要问题是ATI官方fglrx mod加载失败,当启动时显示fglrx失败时，按ctrl+alt+f1可切至终端登入。错误可以由dmesg查看1、find_task_by_vpid 未定义原因：2.6.31内核不再提供find_task_by_vpid函数解决方法：https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/394985修改/usr/src/fglrx-8.65的firegl_public.cdiff -ruN fglrx-8.620.orig/firegl_public.c fglrx-8.620/firegl_public.c&#8212; fglrx-8.620.orig/firegl_public.c 2009-07-30 02:29:19.000000000 0100+++ fglrx-8.620/firegl_public.c 2009-07-30 02:47:43.000000000 0100@@ -1292,7 1292,10 @@#if LINUX_VERSION_CODE &#60; KERNEL_VERSION(2,6,26)p = &#8230; <a href="http://www.jiangmiao.org/blog/511.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>第一次编内核，搞了一个通宵，终于还是成功了。<br /><strong><span>一、基本配置和效果</span></strong><br />原系统: Ubuntu 9.04 (内核2.6.28) ATI官方9.8<br />升级至: Ubuntu 9.04 (内核2.6.31) ATI官方9.9<br />CPU: AMD Phenom 9550+集成显卡ATI HD3300<br />initrd.img 由7.4M缩至3.1M<br />vmlinuz 由3.3M缩至2.8M<br />启动速度 12秒提升至6秒<br />glxgears由1000提升至2400<br />chromium 4.0, Firefox-3.5 peacekeeper分数均有10%~15%的提升。</p>
<p><strong><span>二、问题</span></strong><br />碰到的主要问题是ATI官方fglrx mod加载失败,当启动时显示fglrx失败时，按ctrl+alt+f1可切至终端登入。错误可以由dmesg查看<br />1、find_task_by_vpid 未定义<br />原因：2.6.31内核不再提供find_task_by_vpid函数<br />解决方法：<a href="https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/394985">https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/394985</a><br />修改/usr/src/fglrx-8.65的firegl_public.c<br />diff -ruN fglrx-8.620.orig/firegl_public.c fglrx-8.620/firegl_public.c<br />&#8212; fglrx-8.620.orig/firegl_public.c	2009-07-30 02:29:19.000000000 0100<br />+++ fglrx-8.620/firegl_public.c	2009-07-30 02:47:43.000000000 0100<br />@@ -1292,7 1292,10 @@<br />#if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2,6,26)<br />p = find_task_by_pid( pid );<br />#else<br />+#if LINUX_VERSION_CODE &lt; KERNEL_VERSION(2,6,30)<br />p = find_task_by_vpid( pid );<br />+else p = pid_task( pid, PIDTYPE_PID );<br />+#endif<br />#endif<br />if (p)<br />{</p>
<p>2、*ERROR* firegl_stub_register failed<br />原因：drm或radeon已加载<br />解决方法：禁用模块drm<br />修改/etc/modprobe.d/blacklist.conf加入<br />blacklist radeon<br />blacklist radeonfb<br />blacklist drm<br />当然作为自编译的内核，我连drm的模块模式都取消了。即编译配置的Graphics Support-&gt;Direct Rendeering Manager 为 N<br />另：/dev/agppart(AGP support)一定要选上,不然agp相关的函数fglrx都找不到而导致加载失败。同时我还钩了该项下的 ATI chipest<br />support. 该项下的其余选项都为 N</p>
<p><strong><span>三、其它事项</span></strong><br />1、Sound card support的Advanced Linux Sound Architecture为module形式更好，<br />我个人自编译alsa驱动效果大大好于内核符带的效果(声卡: Creative Audigy Value, CA0106)。如果为是built-in alsa，则无法安装。</p>
<p>2、USB support的USB verbose debug messages为N<br />否则dmesg会出现大量usb uevent消息，我不清楚是好是坏，但禁用了usb debug信息后消失。</p>
<p>3、File systems中的FUSE勿必选上<br />否则nautilus试图加载其它硬盘分区将失败。</p>
<p>4、多核编译时加前缀CONCURRENCY_LEVEL以提高速度<br />如我是4核则为<br />CONCURRENCY_LEVEL=4 make-kpkg &#8211;initrd &#8211;append-to-version=-miao-0.1 kernel_image<br />这样在AMD 9550上编译精简的内核一次只需要3分钟 (实测,180秒)。如果花了30分钟乃至数小时编译，那多半勾了太多可能用不着的东西。参见5<br />不太好选择&nbsp;</p>
<p>5、精简<br />编译的耗时主要花在各类硬件支持上。而实际上大多数硬件支持可能短时间内不需要。目前除SCSI disk support看上去没有实际上要勾的情况外，其余不需要的支持就放心的打上N吧。像网卡，声卡，显卡驱动支持勾的选项只需3个，特性支持酌情删减。</p>
<p><span>四、其关命令与顺序</span><br />1、初使化<br />make mrproper<br />make defconfig</p>
<p>2、修改配置<br />make xconfig<br />xconfig 需qt3支持&nbsp;<br />apt-get install libqt3-headers libqt3-mt-dev</p>
<p>3、编译</p>
<pre>
make-kpkg clean
CONCURRENCY_LEVEL=4 make-kpkg --initrd --append-to-version=-miao-0.1 kernel_image
</pre>
<p>生成的deb文件在上级目录。</p>
<p>4、安装<br />dpkg -i xx.deb</p>
<p>5、重编译<br />重复2,3,4</p>
<p>PS:&nbsp;<a href="http://forum.ubuntu.org.cn/viewtopic.php?f=97&amp;t=110461">配置并编译内核</a>&nbsp;说要重编译无需删除只需再编译即可，但我这里没有，大家可以看看deb的修改时间是否变动来检验，重启重装了N次才发现..</p>
<p><strong><span>五、参考</span></strong><br />1.&nbsp;<a href="http://forum.ubuntu.org.cn/viewtopic.php?f=97&amp;t=222228">精简内核的最终方法&hellip;&hellip;</a><br />2.&nbsp;<a href="http://forum.ubuntu.org.cn/viewtopic.php?f=97&amp;t=110461">配置并编译内核[更新到linux-2.6.29.2]</a></p>
<p><span>六、相关链接</span><br />内核地址&nbsp;<a href="http://www.kernel.org/">http://www.kernel.org/</a><br />ATI linux驱动&nbsp;<a href="http://ati.amd.com/support/driver.HTML">http://ati.amd.com/support/driver.HTML</a><br />ALSA下载&nbsp;<a href="http://www.alsa-project.org/main/index.php/Download">http://www.alsa-project.org/main/index.php/Download</a></p>
<p>&nbsp;</p>
<div>&nbsp;</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/511.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu在Thunderbird中使用Firefox3.5打开链接</title>
		<link>http://www.jiangmiao.org/blog/509.html</link>
		<comments>http://www.jiangmiao.org/blog/509.html#comments</comments>
		<pubDate>Sun, 30 Aug 2009 06:03:09 +0000</pubDate>
		<dc:creator>JiangMiao</dc:creator>
				<category><![CDATA[ubuntu/debian]]></category>

		<guid isPermaLink="false">http://www.jiangmiao.org/blog/?p=509</guid>
		<description><![CDATA[在安装了Thunderbird2.0与Firefox3.5后，发现点击Thundbird的http链接，没有任何反应，若同时安装了Firefox3.0与Firefox3.5则会调用Firefox3.0打开链接。解决方法：点击Thunderbird菜单->Edit(编辑)->Preferences(首选项)->Advanced(高级)->Config Editor(配置编辑)在Filter(过滤)中输入network.protocol-handler.app.http，若未找到则新建一个，值设为/usr/bin/firefox-3.5。则Thunderbird会使用/usr/bin/firefox-3.5打开http链接。]]></description>
			<content:encoded><![CDATA[<p>在安装了Thunderbird2.0与Firefox3.5后，发现点击Thundbird的http链接，没有任何反应，若同时安装了Firefox3.0与Firefox3.5则会调用Firefox3.0打开链接。<br />解决方法：<br />点击Thunderbird菜单->Edit(编辑)->Preferences(首选项)->Advanced(高级)->Config Editor(配置编辑)<br />在Filter(过滤)中输入network.protocol-handler.app.http，若未找到则新建一个，值设为/usr/bin/firefox-3.5。则Thunderbird会使用/usr/bin/firefox-3.5打开http链接。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiangmiao.org/blog/509.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

