You are on page 1of 126

封面

卷首语

自由是根本 开源是形式
9 月 20 日,软件自由日(Software Freedom Day,简称 SFD)将迎来第五个年头。
软件自由日于 2004 年发起,定于在当年 9 月份的第三个“星期六”举行,由软件自由国际
(SFI,Software Freedom International)非盈利组织的领导,其主席 Pia Waugh 女士是
澳洲 FOSS(自由/开源软件)著名活动家,曾是 Linux Australia 前总裁和副总裁,同时,
她还有个身份就是 Ubuntu 计划发起人之一 Jeff Waugh 的夫人。

在中国,软件自由日活动的概念在 2005 年传了进来,袁萌教授远赴浙江,试图与


Lupa 筹划在中国的自由软件日,结果因为各种原因未能如愿,自由软件在中国的声音 还是
太小。2006 年,由袁萌教授提议,赛迪 Ubuntu 实验室参与组织,CSDN 一起协办的软件
自由日的活动终于在北大举行了,那一天,参会人数众多,袁萌教授慷慨激昂的演讲,将自
由软件背回中国的宫敏博士与热情四溢学生的交谈给我留下了深刻的印象。2007 年,自由
软件的理念在中国已经得到了广泛的普及,全国各地都自发 的举行了自由软件日的活动,
在北京,由 BLUG(Beijing Linux User Group)在清华举办庆祝自由软件日的活动得到了
Google 等公司的支持,这一年,自由软件日在中国如火如荼地铺展开来,而 BLUG 在清华
的活动最后在 SFI 的评选中排名世界第三,第一为尼泊尔,第二为尼加拉瓜,这是两个自由
软件使用率极高的“小国”。

举办软件自由日的目的是在于唤醒社会公众对软件自由的良知,提高全社会对自由软件
的认识。庆祝活动不分国界、不分种族,举办庆祝活动不以城市为单位,而是 向 SFI 注册报
告经纬度,最终在庆祝自由软件日活动的 Map 中体现出来。

自由软件日活动在我国的兴起,我认为对于长期困扰人们关于自由软件与开源软件概念
模糊不清的认识将起到很大的促进作用。自由软件运动与开源软件运动是两种不同意识形态
的运动,自由软件运动的目标是使所有软件摆脱知识产权的约束,因为他们认为这些约束会
妨碍技术的进步并且对社区无益。开源运动的目标与自由软件运动基本一样,但采取了一种
更加务实的方式,他们依据经济与技术的价值主张源代码可以自由的获得,而自由软件运动
是由道德与伦理驱使的。

自由软件奠基人 Richard Stallman 很明了地指出过自由软件和开源软件的区别,那就


是自由软件是一项政治运动;而开源软件是一种开发模式。我们常常用“Free”来 表示自由软
件,很多人将“Free”理解为免费,而忽略了其“自由”的权利。而实际上,这里的“Free”代表
了四重关于软件使用、修改,再分发的属性,而不存在是否免费的定义。Stallman 认为自


oss.linuxpk.com 源 2008 年第 9 期  2
卷首语
由软件应该能让用户以所希望的方式使用软件,能够研究并修改源代码,可以根据你自己的
修改重新分发软件,同时,也保留你发布修改 后软件新版本的自由。

由此可以看出,开放源代码只是自由软件的一种表现形式,或者说是自由软件的一种开
发模式,自由软件和开源软件是两个不同的概念,而“自由”则是软件的根本,这有别于传统
的商业软件。

随着自由软件被更多的人所熟知,所信仰,今年北京 BLUG、北邮等都将举办一些庆祝
活动,而在青岛,在兰州,在西安这样的庆祝活动也将同时展开,随着软件自由 日活动在
我国全面地展开和普及,对于自由软件的概念、精神将为更多的人所熟悉和认知。


oss.linuxpk.com 源 2008 年第 9 期  3
主办:Linux 宝库
网址:www.linuxpk.com
官方下载地址:oss.linuxpk.com

主席:陆首群
专家委员会(按姓氏拼音为序)
陈怀临 宫敏 毛德操 倪光南 许洪波 袁萌
顾问委员会(按姓氏拼音为序)
曹冬 陈绪 贾栋 李科研 毛文波

主编:陈杰
副主编:陈伟
排版:邱风 魏鸿易 邹洋
封面设计:张亚运
编辑部:王文龙 赵龙

声明:杂志部分内容来自开源社区及互联网,目的是加强开源文
件交流和开源应用传播,如在版权问题,敬请联系,我们将在第一时
间进行处理。
致谢:本电子杂志由 OpenOffice 制作,并直接导出 PDF 文档,
在此表示感谢
投稿信箱:opensource@linuxpk.com
目录

目录
封面.................................................................................................................................................1
卷首语............................................................................................................................................2
自由是根本 开源是形式...........................................................................................................2
产业聚焦........................................................................................................................................7
LinuxPK 社区与中科院自动化所自由软件协会展开合作.....................................................7
对 Linux 感兴趣的国家排名......................................................................................................7
Linux 系统在服务器市场占 13.4%...........................................................................................7
Ubuntu Linux 用户突破 800 万..................................................................................................8
Firefox 卸载率中国居首............................................................................................................8
六国反对 OOXML 成为国际标准质疑 ISO 公正性................................................................9
微软与 Novell 进一步扩展互操作性合作................................................................................9
Intel OTC 助力 OpenSolaris 电源管理....................................................................................10
主流 Web 浏览器引擎列表......................................................................................................10
红旗 Linux 北上举办辽宁电子政务研讨会............................................................................12
杨叙:英特尔与龙芯是竞合关系...........................................................................................13
开源的成熟及 Intel 的 Moblin 战略........................................................................................14
谷歌浏览器 Chrome 的由来....................................................................................................19
7 大理由剖析 Chrome 优缺点.................................................................................................20
谷歌 Chrome 浏览器开发内幕................................................................................................22
开源通迅......................................................................................................................................28
英特尔北京 Moblin 团队成立.................................................................................................28
红旗藏文 Linux 成功验收 攻克多项技术难题......................................................................28
华硕 Eee Box 集成 Splashtop 即时启动软件..........................................................................28
英特尔收购英国 Opened Hand 公司.......................................................................................29
红帽 Fedora 项目公布新奖学金计划......................................................................................29
DeviceVM 获得价值 1500 万美元的第三轮投资...................................................................29
英特尔高调发布 Moblin 2.0....................................................................................................29
恩信科技开源 ERP V7.10 发布...............................................................................................30
第二届 PHP 全国调查圆满结束..............................................................................................30
蓝迪科技推出基于开源软件的高清机顶盒方案...................................................................30
天石网通网络宝(V2.0)产品通过 CSIP 产品检测.............................................................30
红旗 2000 金友兵入选 2008 年北京市“新世纪百千万人才工程”...................................31
中科龙梦与法国 Dexxon 展开合作........................................................................................31
Novell 增强其 ZENworks 能力................................................................................................31
神州商桥与中小企业协会携手推出“信星计划”...............................................................31
红帽企业 Linux 赢得美国国防部 IPv6 认证..........................................................................32
OASIS SOA-EERP 技术委员会正式成立..............................................................................32


oss.linuxpk.com 2008 年第 9 期  5

目录
“开源行动日” 技术巡讲全国展开.....................................................................................32
威盛获清华同方定单首批出货预计数十万颗.......................................................................32
百资科技发布 Notebook 网络管理管理工具.........................................................................33
IBM 宣布"Microsoft-Free"客户端计划...................................................................................33
开源社区......................................................................................................................................34
Firefox 3.1 Alpha 2 发布..........................................................................................................34
OpenOffice.org 3.0.0 RC1 发布...............................................................................................34
QQ for Linux 1.0 Preview(106)发布........................................................................................35
Wine 推出 1.1.4 版....................................................................................................................35
2627-rc5 Kernel 发布................................................................................................................35
Ubuntu 9.04(兴奋的野兔)紧锣密鼓筹备................................................................................36
迎接国际软件自由日(SFD 2008)......................................................................................37
20 件 Win 平台不行而 Linux 能搞定的事情..........................................................................38
Larry Wall 和 Perl 语言............................................................................................................41
ObjectWeb 产业链....................................................................................................................45
知识学堂......................................................................................................................................50
Linux 下设备完全驱动(四)................................................................................................50
PC 的足迹(下).....................................................................................................................60
经验技巧......................................................................................................................................67
Linux 一句话精彩问答............................................................................................................67
Squid 做 loadbalance 并支持按源 ip 做会话保持...................................................................72
Ubuntu 英文环境下使用 Fcitx 中文输入法............................................................................73
通过串口管理 Linux 主机........................................................................................................74
实用入侵监测的配置和部署...................................................................................................76
实现基于 LDAP 的用户管理...................................................................................................81
Linux 下防范黑客实用技巧....................................................................................................84
双系统的用户如何卸载 Linux................................................................................................84
把脉 Linux 上 USB 数据流......................................................................................................85
企业应用......................................................................................................................................90
Linux on Power 性能调优........................................................................................................90
基于 Linux 平台的网页内容过滤系统的实现......................................................................100
基于加密容器法保护家庭计算机文件.................................................................................105
嵌入式........................................................................................................................................113
嵌入式开源模式.....................................................................................................................113
嵌入式 Linux 文件系统的构建..............................................................................................115
开源小知识................................................................................................................................122
Linuxpkcom 九月十大热门帖................................................................................................125


oss.linuxpk.com 2008 年第 9 期  6

产业聚焦

LinuxPK 社区与中科院自动化所
自由软件协会展开合作

月一期的系列讲座,普及自由软件之自由开放思
想、推动自由软件在中国的应用与发展。

系列讲座每月一期,受众群主要包括中科院
京区各研究所、各大高校学生,以及来自开源社
区的爱好者。邀请自由软件领域的企业领袖、开
发者和推广者座谈交流,协助在自由软件使用方
面有困难者解决问题,与开源社区爱好者展开互
动,推动社区发展。第一期讲座将于 9 月 25 日
Richard Stallman 在自动化所演讲情景 在中科院自动化所举行,议题围绕 Vim 的应用展
开。详情参见:
近日,开源社区 LinuxPK 宣布与中科院自动
http://bbs.linuxpk.com/thread-35558
化所自由软件协会展开合作,双方将共同举办每 -1-1.html

对 linux 感兴趣的国家排名

Linux 的搜索量和使用量呈正比,得出对各个
Linux 发行版占有最高的国家排名。结论显示,
Linux 在东方比西方更流行。一个可能的原因是
这些国家收入低,只好用免费 Linux 满足对系统
的需求。对 Linux 最感兴趣的前五个国家是印度、
古巴、俄罗斯、捷克和印尼。Ubuntu 的前五排
名为意大利、古巴、印尼、挪威和捷克。
openSUSE 前五名分别为俄罗斯、捷克、马尔多
瓦、德国和印尼。而 Fedora 的前五名为斯里兰
近日,Pingdom 网站做了一项调查,假设
卡、孟加拉、印度、尼泊尔和津巴布韦。

Linux 系统在服务器市场占 13.4%

根据 IDC 的最新报告显示,Linux 依然蓬勃 发展。从 2007 年到现在,Linux 在整体服务器


oss.linuxpk.com 2008 年第 9 期  7

产业聚焦
市场占有的份额已经达到 13.4%,Unix 则为
7.7%,Windows Server 最为普及为 36.5%。

报告同时指出,如果 Linux 继续深入发展,


则必须正视 Windows 的挑战,而非蚕食 Unix 仅
剩的份额。目前,Red Hat 和 Novell 在服务器市
场的 Linux 相对占有优势。

Ubuntu Linux 用户突破 800 万

但据 Canonical 的市场调查数据显示,Ubuntu
Linux 目前已经拥有了 800 万用户。

对于桌面 Linux 市场而言,这是相当不容易


的成绩,Ubuntu 以其具有亲和力的界面和便捷
的操作方法获得了用户的好感,为桌面 Linux 用
户增长做出了极大的贡献。

2007 年年中 Ubuntu Live 会议上,


Ubuntu/Canonical 创始人 Mark Shuttleworth
就已经预计该 Ubuntu 系统装机量 600~1200
Windows 计划 2010 年在 10 亿台设备上运 万,现在这一任务已经完成了一半。
行,而 Ubuntu Linux 虽然没有如此之大的野心,

Firefox 卸载率中国居首

近日,根据 Survey Mozilla 收集到的 2008 (23%)、日本巴西和德国(9%)。


年 5 月的数据统计,每天
在中国,Firefox 遇到
在中国大陆只有 1.9%的活
的最主要问题是大量非标
跃用户,却有高达 18.6%
准中文网页的存在。在
的用户在安装了 Firefox
Sociz 论坛上每天都有用户
之后将其卸载。在全世界
在询问为什么某些网站无
所有卸载 Firefox 的用户
法正常浏览,这种状况阻
中,有 30%来自中国,排
碍了 Firefox 在中国的普及
在后面的分别是美国
和推广。


oss.linuxpk.com 2008 年第 9 期  8

产业聚焦
六国反对 OOXML 成为国际标准
质疑 ISO 公正性

国际标准化组织(ISO)于 8 月中旬拒绝了四个 成为国际标准的进程,引起我们强烈关注。”这也


成员国(巴西、印度、南非和委内瑞拉)提出的 就是说,上述六国继续抱怨 OOXML 国际标准投
对批准微软 OOXML 成为国际标准的申诉,上述 票程序违反流程,批准速度过快且不透明,从而
四国认为,今年 2 月召开的国际标准投票会议违 导致 OOXML 获批成为国际标准。微软标准在去
反流程。 年 9 月并未获得国际标准化组织首 次投票通过,
而在 3 月 29 日结束的第二轮的投票期间,微软
此举引发了其六个成员国对该组织公正性的
贏得 86%的投票国及 75%的 P 级成员国的支持。
强烈质疑。巴西、南非、委内瑞拉、厄瓜多尔、
根据开放文档协会公布的名单,支持 OOXML 的
古巴和巴拉圭六国的政府 IT 组织在南非官方网站
国家包括美国、英国、德国、日本,反對国包括
(www.raffee.co.za)上发表声明称,他们已不再
中国、印度和俄罗斯。许多公共机构希望国际标
信任国际标准化组织是一家卖方中立组织。声明
准化组织拥有文档格式规范,以避免将来无法打
称:“尽管过去国际标准化组织/国际电工委员会标
开自己的文档,或是以付费方式打开。国际标准
准自动被视为政府内使用的标准,但很明显的是
化组织一个由 157 个国家的标准组织组成的非政
这种状况将不复存在。”
府组织。该组织成立于上世纪 40 年代。
声明还称:“变通的规则加速了 OOXML 批准

微软与 Novell 进一步扩展


互操作性合作

近日,微软与 Novell 公司宣布进一步扩展双 微软-Novell 模式于 2006 年 11 月启动以来


在市场上引起反响。根据双方最初签署的五年期
合作伙伴协议,微软购买了 2.4 亿美元 Novell 证
书并销售给客户。在 18 个月内,Novell 已经获
得超过 1.56 亿美元的证书销售收入,占最初配
额的 65%。

微软首席运营官 Kevin Turner 表示:“微软


与 Novell 之间的合作源于我们对满足客户实际 IT
方的合作关系,增加投入以满足客户对双方共同 需求、帮助合作伙伴提供更多解决方案选择的愿
开发的业务模式越来越高的需求,帮助客户在开 望。客户希望能够无缝运行 Windows Server 和
源软件和商业软件之间搭建起一座桥梁,为混源 Linux,但很多情况下,他们在从其他 Linux 环
IT 环境下的用户提供互操作性并避免知识产权纠 境向 SUSE Linux Enterprise Server 迁移时需要
纷。 帮助。我们增加投资的目的是向客户和合作伙伴


oss.linuxpk.com 2008 年第 9 期  9

产业聚焦
提供最佳的 Windows-Linux 互操作性解决方案, 并避免知识产权纠纷。”
同时提升他们现有 Windows Server 投资的价值,

Intel OTC 助力 OpenSolaris 电源管理

8 月 19~21 日,在美国旧金山莫斯克尼会议中心(Moscone Center West)举办的 IDF(Intel


Developer Forum)2008 上,作为生态系统合作厂商,Sun 公司专门设立了一个 Solaris 电源管理进展
的展台,展示了在 Xen 的 dom 0 和 OpenSolaris 的 Xen 客户端中同时运行的 PowerTOP 1.1 软件系统。
该 OpenSolaris 运行在超低功耗的 Intel“凌动处理器平台”(ATOM)上。PowerTOP 开源项目(http://
www.l esswatts.org)是 Intel 开源技术中心(OTC)在电源管理方面的核心项目之一,最初由 OTC 的
主任工程师(Principal Engineer)-- Van De Ven, Arjan 在 linux 上实现,而后在 Intel 中国 OTC
OpenSolaris 团队里由内核资深工程师李崇的推动下将其在 OpenSolari s 和 Solaris 虚拟机上重新实现。
PowerTOP 使得开发者和最终用户可以在 OpenSolaris 和 Solaris 虚拟机上观察 Intel 处理器耗能状态 从
而调节软件配置以达到省电目的。Sun 公司 Solaris 内核团队的资深经理 Darrin Johnson 表示,对 Intel
OTC OpenSolaris 团队做出的巨大贡献和给予的无私帮助表示衷心的感谢。

主流 Web 浏览器引擎列表

10 年来,微软的 Internet Explorer 几乎统治了整个浏览器


市场,而最近,FireFox,Safari,Opera,Google Chrome 已
经对 IE 构成了围攻之势。

他们凭借什么去和 IE 对抗?答案是各自不同的优秀引擎,引
擎是浏览器的核心,渲染网页的速度,效果都将在引擎的好坏上体现出来,以下向大家介绍目前世界范


oss.linuxpk.com 2008 年第 9 期  10

产业聚焦
围内主流的浏览器引擎。

Trident

Internet Explorer、Avant Browser、Maxathon、Microsoft Outlook、Outlook


流行的应用
Express、AOL Browser
授权 闭源
Acid2 兼容性 是 (Internet Explorer 8)
Acid3 兼容性 否
操作系统支持 Windows
主流客户 Microsoft
市场份额 2004 年达到 95%,目前大约 70%
最早发布时间 1997 年 4 月

Gecko

Firefox、Camino、Flock、Thunderbird、Seamonkey、Epiphany、NVU、Netsc
流行的应用
ape、K-Meleon
授权 开源
Acid2 兼容性 是
Acid3 兼容性 No
操作系统支持 Windows、Mac OS X、Linux/BSD
主流客户 Mozilla Corporation、Netscape (originally)
市场份额 大约 20%
最早发布时间 1998 年 12 月

WebKit
Safari、Chrome、Adobe AIR、iCab、Epiphany (experimental)、Konqueror
流行的应用
(KHTML)
授权 开源
Acid2 兼容性 是
Acid3 兼容性 是
操作系统支持 Windows、Mac OS X、Linux/BSD
主流客户 WebKit Foundation、Apple、Nokia、Adobe、Google、KDE Team (originally)


oss.linuxpk.com 2008 年第 9 期  11

产业聚焦
市场份额 大约 7%
最早发布时间 2000 年 10 月

Presto
流行的应用 Opera Desktop/Mobile/Mini、Nintendo DS、Wii Internet
Channel、Macromedia Dreamweaver MX and above、Ado be CS 2 and above
授权 闭源
Acid2 兼容性 是
Acid3 兼容性 是
操作系统支持 Windows、Mac OS X、Linux/BSD
主流客户 Opera Software
市场份额 少于 2%
最早发布时间 2002 年 11 月

红旗 Linux 北上举办
辽宁电子政务研讨会

8 月 22 日(沈阳)消息,由中科红旗主办的辽宁电子政务研讨会在沈阳凯宾斯基饭店召开,研讨会围


oss.linuxpk.com 2008 年第 9 期  12

产业聚焦
绕“Linux 与您携手共迎挑战,带您进入电子政务的高效未来!”的主题展开,IBM 与首信等合作伙伴,基
于 Linux 解决方案做了精彩演说,得到了现场参会人员的一致好评。

会上,优秀电子政务软件提供商中科红旗介绍了在电子商务方面的优势。红旗联合合作伙伴推出电子
政务基础平台,已成功应用于湖北省荆门市。该电子政务平台采用了红旗 DC 服务器作为 Linux 平台,
成功解决了信息资源共享交换的深化整合问题,被评为信息产业部优秀电子政务示范工程,树立了湖北
省乃至全国的电子政务建设的标杆。

此外,中科红旗表示,红旗积极与 Intel、IBM、Oracle、Dell、HP 等国际巨头通过联合测试、认证、


举办会议活动等形式给予 Linux 越来越多的支持,促进产业链完善;携手广大 SI、ISV 和 IHV 等开发了众
多 Linux 应用,以提高产品兼容性、互操作性及结合度,提高用户业务系统效率。

杨叙:英特尔与龙芯是竞合关系

9 月 11 日,英特尔全球副总裁兼大中华区总经理杨叙在深圳大学
参加“英特尔高校行”活动时,接受了媒体的采访。杨叙首次对中国自
主研发的下一代四核及八核龙芯 3 处理器作出回应,称英特尔与龙芯
3 之间既是竞争也是合作关系。同时他也透露,自 8 月 1 日反垄 断法
实施,英特尔未受到任何反垄断诉讼。

在被问到如何看待龙芯 3 时,杨叙称,龙芯 3 和英特尔的处理器


之间既有竞争也有合作。他说,英特尔和中科院之间也有过很多合作。
对于龙芯 3 和中国的 CPU 发展,杨叙认为,CPU 所在的高科技行业,
决定它必须要有技术创新,但更重要的是,要让 CPU 产业链整体发展,
而不单单只是卖芯片那样简单。

就在 8 月底,中科院带着国产龙芯 3 号处理器的架构设计在美国
硅谷进行展览,引发国内外媒体和网民的热烈讨论,焦点集中在龙芯
3 能否与 CPU 巨头英特尔等抗衡。新的龙芯处理器提高了与 X86 架构的兼容性,因此龙芯在一定程度上
成为英特尔的竞争对手。

此外,杨叙语气坚定的表示,英特尔在中国没有受到反垄断诉讼。他同时也强调,英特尔也没有因为
反垄断法而调整自身的产品策略。就在上个月,AMD 上任不久的 CEO 德克·梅尔对中国媒体表示,AMD
暂时没有利用反垄断法起诉英特尔的计划。


oss.linuxpk.com 2008 年第 9 期  13

产业聚焦

开源的成熟及 Intel 的 Moblin 战略

OSCON 2008 记行
陈绪

2008 年 7 月 21 日到 25 日,从周一到周五,是第十个年 1. 会议盛况


头的 OSCON。OSCON 是 Oreilly OpenSource 2. 开源的成熟
Convention 的简称,在全球开源爱好者中享有崇高的声 ○ Linux 桌面走向成熟
誉。几乎每年的这个时候,都有数以千计的厂商、爱好
○ 开源商业模式的成熟
者,涌到美国 Oregon 州的 Portland 市,在
○ 开源成为主流
OCC(Oregon Co Nvention Center)参加这次盛会,享
受开源的盛宴。同时,这次会议上数以百计的技术和非 3. Moblin:OSCON2008 上漫天的飞花
技术专题讲座(session),又承载着丰富的开源内容, ○ Moblin 和 MID
○ Moblin 2.0
肩负着给开源指明方向的使命。当然,为了更好地理解
○ Moblin 的生态系统
开源文化、理念和趋势,我作为 Intel 北京
○ 2008 年 ATOM/Moblin 的几个重大事件
OTC(Opensource Technology Center)唯一的代表,
欣然与会。 4. 展望

会议盛况
21 日和 22 日是全天的 tutorial,就是手把手的技术专题授课,每个专题是半天。从 23 到 25 日,
早晨是几个 keynote,接着是丰富的 session,一般每个 session 是 45 分钟,同一时间会有 16 个左右
的 session,也就是说,你得从 16 个以上的 session 中选择一个去参加。会议参加人数是 1000 左右,
会场里面到处都是拎着笔记本赶场的人,从一个 session 到另一个 session。

主题演讲所有人都参加,现场是人头攒动,热闹非凡。十多个主题演讲中,我印象最深的是其中两个:

Tim O’Reilly,O’Reilly 的掌门人,讲述了 OSCON 的十年。能做十年的大会毕竟不多,OSCON 能


做到现在,证明了开源的前途是光明的。

另外一个是 Intel 开源技术中心的 Dirk Hohndel 所做的 keynote,名字叫“Moblin,用于下一代移动


互联网的 Linux”。Dirk 是 OTC 的发言人,短短 15 分钟演讲,让他讲得妙趣横生,反正观众是笑了好几
次。虽然只有简简单单的三页演讲稿,但 Dirk 全面生动阐述了 Mo blin 的重大意义。当然,Moblin 作
为本次大会 Intel 的重头节目,后文会专门进行介绍。

本次大会的顶级钻石级赞助商是 Intel 和 Microsoft。同时,24 日晚上的 Sourceforge 年度大奖颁奖


晚会,也是这两家赞助商。首先,Intel 的 Troy Allison 发表讲话,呼吁大家多多参与 Moblin 社区。接
着,Sam Ramji 代表微软,亲自揭晓了一个大奖,并在现场发表了热情洋溢的讲话,表示希望和开源社
区继续紧密合作。最酷的是,现场还有 4 台 XBOX360 可供娱乐。


oss.linuxpk.com 2008 年第 9 期  14

产业聚焦
开源的成熟
谁也没有想到,从 91 年 Linux 内核横空出世以来,开源和 Linux 从涓涓细流,会成为时代的主旋律,
进而发展为横扫业界的狂飙。不过,这和我做开源这十多年来的感悟是一致的:重在定位,贵在坚持。

OSCON2008 的主题: Open Your Mind


事实上,每年的 OSCON 大会都会展示新的开源走势。

● Linux 桌面走向成熟
22 日晚,Mark Shuttleworth 做了一个讲话。现场会议我并没有参加,当时我在外面和开源爱好者
在交流。我是第二天看新闻报道得知的,特别是还看到袁萌的评析文章。

事实上,Ubuntu 在桌面领域已经获得了长足的发展。Mark 提出的是,要和苹果的 Mac OS 竞争。


我的感觉是,如果 Linux 的发行版本 如果能做到 Mac OS 的水平,相信大家都会争着用 Linux 桌面。

Mark 将 MacOS 定位 Ubuntu 的对手,这是很有意思的一个命题。我们注意到,每次在最新版的


Ubuntu 发布之际,最为热门的一类文章 是将 Ubuntu 的桌面截图和 Mac OS 的截图进行比较。从图中
可以看到,两者之间的差距越来越小,包括 2D/3D/各种特效等。

在 OSCON 大会上,随处可见 Mac 笔记本,银色的本本,上面一个被啃了一口的苹果。同时,在


session 当中,也随处可见 Mac 用户在很酷的 Mac OS 系统中工作。其次是 Windows 机器。当然,也有
很多使用的是 Linux 桌面。

随着 Linux 在桌面市场份额首次超过 1%,对 Linux 是否真正能进入桌面市场持怀疑态度的人相信都


受到了不同程度的震撼。

我认为,Linux 桌面的成功,最关键的是 X.org 的成熟以及 3D 技术(Xgl 等)的引入。本次有一个


session 是 Keith Packard(OTC 的 X 专家,x.org 的创始人和 maintainer)的讲座,已经开始关注
XServer 的安全性以及性能的进一步优化问题。


oss.linuxpk.com 2008 年第 9 期  15

产业聚焦
下一阶段,随着 Linux 下应用程序的进一步丰富,大家会更加为这个平台的魅力所倾倒。

● 开源商业模式的成熟
现场的展台有上百个,都是展示各种开源产品和社区的开源团体和公司。

前一段时间,我在国内写过相关文章,阐述开源的商业模式问题,这次则更加深有体会。

中午吃免费自助午餐的时候,我遇到了一个来自印度的开源企业家。他叫 Kumaran Mani,他创办


的公司叫 Tenth Planet,目前他任 CEO。在六年的时间里,公司从 1 个人,发展到 120 名员工。业务模
式很简单,将精力集中在 4 个 Java 开源产品上,为全球客户展开支 持服务和定制模块服务。这 4 个产品
是 OpenCMS、Compiere、Liferay、Alfresco。Kumaran 说他这个公司关注点是三个 O:
OpenSource/OutSource/Offshore。

开始的两年里,他采用的模式和目前国内的一些项目差不多,就是从社区拿代码,然后自己用。两年
结束的时候,他发现这个模式行不通了。抛去开源社区有意见不说,自己的维护工作和维护成本实在太
高。接下来他决定强调回馈,结果代码都进了开源社区的代码库,获得了社区的赞许,也展示了自己的
实力,并获得了更多的客户认可。单纯地强调贡献,并没有太多的影响力。只有受到不回馈社区带来的
切肤之痛,才会真正地感受到开源社区的精神。

● 开源成为主流
以前谈到开源,似乎更多的是一些爱好者和发烧友的偏好,以往 OSCON
上也多是一些独行侠似的人物。这次,我看到的是,除了开源爱好者,更多的
是来自商业公司的参与者。Intel 来的同事们就不说了,其实各大 IT 公司均有
众多人员参加,搞得周边的酒店全 部爆满。同时,还有诸多依托开源产品,
蓬勃发展的公司和基金会,都摆开了展台,大方亮相。

除了 Intel 之外,我还注意到微软和 Google 的积极参与。微软 OSSL 的工


程师 Janssen 介绍了该实验室的工作内容和规划,他们和 AM 本文作者在 Intel 展台中
P(Apache,mysql,php)都在亲密合作。还有其他很多很多的项目,如
samba 等,都得到了 Microsoft 的帮助。而 Subversion 的作者加入了 Google,并做了 Subversion
Worst Practices 的讲座。应该说,Google 通过雇佣开源开发者,为开源在做出贡献。

长期以来开源所欠缺的产业链,终于完全展开。没有人能忽视开源的影响力:无论你是否喜欢,你的
生活都会面对开源软件。据不完全统计,在全球范围内,部署了开源软件的企业高达 70%以上。

Moblin: OSCON2008 上漫天的飞花


Intel 公司对 OSCON 非常重视。同时,由于美国的研发大本营就在 Oregon,离 Portland 很近,所
以作为顶级的钻石赞助商,每年都会有很大的展台(booth),展示开源的成果和技术。我也在展台向参
观者展示和讲解 MID 样品。


oss.linuxpk.com 2008 年第 9 期  16

产业聚焦

本文作者手持 MID 样品,在 Intel 展台中

在 OSCON 大会的主题演讲中,Intel 开源技术中心的技术总监 Dirk Hohndel 宣布,将启动 Moblin


2.0 的开发工作,并欢迎更多爱好者和厂商加入。Intel 的展台上最显眼的也是 Moblin 的产品展示,几个
MID 受到了观众的普遍关注。

● Moblin 和 MID
更重要的是,要认识到,Moblin.org 是一个标准的开源社区,承载着 Moblin 的 SDK、技术资料和
源代码等等。而 Mobin 是一个优化的 Linux 操作系统和核心软件栈,适用于“英特尔凌动处理器技术”平
台,也就是大家常说的“ATOM”平台。“英特尔凌动处理器技术”平 台,涵盖 MID、netbook、nettop、
汽车的 IVI(In-Vehicle Infotainment)系统等多个领域。Moblin 的核心特性,在于基于的小型 低功耗
设备,提供丰富的互联网和媒体体验。

MID 的全称是 Mobile Internet Device,硬件采用“英特尔凌动处理器技术”CPU,软件使用 Moblin


或者 Moblin 兼容软件栈。

Moblin 软件架构中,简单地说,包括 5 个组成部分:a)Linux 内核和底层驱动程序;b)超酷的用


户界面和应用程序开发框架;c)可定制的用户界面(UI);d)丰富的预装和 Intel 优化的应用程序,例
如:浏览器,音视频播放器,照片查看器,媒体播放器等;e)开发者工具,库和其他工具,用于在“英
特尔凌动处理器”上产生和优化应用程序。

● Moblin 2.0
而 moblin2.0 的开发,相对 1.0 而言,会更加关注多个平台,并进一步优化软件栈。这里透露一下,
2.0 的开发过程,中国 OTC 的程序员将会承担更多的工作。另外一个变化是,Moblin2.0 将基于 Fedora
进行,采用 rpm 打包,而原来的 1.0 是基于 Ubuntu/Debian 的 deb 打包。

一切资料和工具,均可以通过 moblin.org 获取。


oss.linuxpk.com 2008 年第 9 期  17

产业聚焦
● Moblin 的生态系统
这次的展台上,展示了两款 MID 的样机,一款是 Lenovo 的,另一款是 Compal(一家韩国厂商)的。
事实上,Moblin 在全球生态系统中获得了巨大进展和支持。近期有多款 MID 上市,包括爱国者的
P8860 型号,将于在 8 月 8 日香港首发。

就 MID 而言,Asianux 和 Canonical 公司都对 MID 的 Linux 操作系统进行了产品化;而


ODM/OEM,如爱国、明基、歌乐、技嘉和联想等,均宣布了要出货 MID 硬件产品;另外,Adobe,
Real Networks 及全球超过 40 个 ISV 基于 Moblin compliant 的操作系统,发布自己的产品。

对于 netbook 和 nettop 而言,Xandros, Linpus, Asianux 和 Canonical 都计划于 2008 年发布针


对 Diamondville 的产品,而 2009 年则发布针对 Pineview 的操作系统;OEM 厂商,如华硕和宏碁,在
自己的硬件产品中,会使用基于 Moblin 的操作系统。

● 2008 年 ATOM/Moblin 的几个重大事件:


4 月 2 日到 3 日,ATOM 在上海 IDF(Intel Developer Forum)上高调亮相;

4 月到 7 月,在 CSDN 举办的 Moblin 开发大赛;

6 月下旬,亚洲各国(大陆—北京/上海,台北,印度,越南,韩国,日本等)同时举行的
Moblin 应用开发者大会;

8 月 4 日到 7 日,在美国加州旧金山举办的 Linuxworld2008,我的老板 Peddibhotla


Rammohan 将发布精彩的 Moblin 演讲;

8 月 19-21 日,美国加州旧金山 IDF,Moblin 演讲;

10 月 20-21 日,中国台湾台北 IDF,Moblin 演讲。

总之,ATOM 和 Moblin 必将是 Intel 力推的重要方向,其低功耗、低成本,给业界带来的强烈的震


撼,而且运作方式是完全的社区方式,也是业界在新产品上运作方式一种创新。

展望
参加了国际的开源盛宴,感受了国际的开源顶尖水平,更加引发了我对国内开源业界的思考。长期以
来,国际的 IT 走势一直对中国有着前瞻性的指导作用。Linux,乃至开源行业,更是如此。不过中国有
自己的特点,用户有自己的需求,我们的很多用户甚至比 国外的用户更加狂热。

一个事物要长久发展,光靠热情是不够的,更需要的是理性的思考和实际的行动。很高兴地看到,国
内的开源业界有了红旗、中标、拓林思等一系列企业。国际上的一些活动,如 OSCamp、Linux User
Group 等也都登陆中国。但是,真正的开源精神来了没有?什 么时候,更多的中国开源企业能够成长起
来,成为软件行业的主力军?让我们拭目以待。


oss.linuxpk.com 2008 年第 9 期  18

产业聚焦
谷歌浏览器 Chrome 的由来

袁萌
谷歌由互联网搜索起家,经过多年的逐步发展,转向更广泛的网络服务。谷歌很早就明白浏览器性能
的优劣将决定它自己的前途命运。谷歌虽然帮助 Mozilla 的开发火狐,但是,感到还是不能满足自己的需
要。于是,从 2002 年春开始,谷歌就着手准备自己的浏览器开发(技术和人才的储备)。

2002 年 7 月,Brian Rakowski 加盟谷歌,主持 GMail 的开发,那时,GMail 的开发涉及(触及)


到一些浏览器最新的核心技术。谷歌的 Maps 和 Mail 的研发不断提高对浏览器性能的要求。随着 Ian
Hickson 加盟谷歌,带来了多年的浏览器 Opera 开发经验。在这 一期间,谷歌不断地搜集具有浏览器开
发经验的技术人才,为自己的浏览器开发做准备。

2005 年 8 月,谷歌购并 Android,建立起进军互联网移动设备的支撑点。Android 借助基于引擎


WebKit 的浏览器和相关应用加强了谷歌的 Web 应用特性。在 2005 年夏天,谷歌兼并 Reqwireless 及
其移动 Web 浏览器技术,并且把这个开发团队与 Android 开发团队合并,一起开发自己的 Web 接口规
范。实际上,谷歌浏览器 Chrome 分享了许多 Android 的程序代码和它的图形引擎。同时,谷歌在
2005 年兼并 Skia,利用其向量图形库增强 Chrome 的图形引擎。在 2007 年 5 月,谷歌购并应用安全
公司 GreenBorder,直接获得了浏览器 Chrome 的一项关键技术,即虚拟机中所谓“沙盒”技术,为每一
个标签(Tab)配备一个程序进程(多线程)。至此,谷歌浏览器 Chrome 的技术准备完毕,呼之欲出
了。

谷歌浏览器 Chrome 的技术负责人 Ben Goodger,精于火狐浏览器的集成,在 2005 年被谷歌聘用,


准备最后冲刺谷歌浏览器 Ch rome 的开发。实际上,谷歌在 2005 至 2006 年期间,聘用了火狐的顶级
开发高手,比如,Darin Fisher、Pam Greene 和 Brian Ryner,在 2006 年的春天,正式组建自己的浏
览器开发团队(20 人),从事浏览器 Chrome 原型的开发。浏览器 Chrome 原型,基于 WebKit 引擎
之上,特别针对互联网宽带的持续连接(“always-on”)的 Web 应用。

随着现代计算机硬件性能的迅速提高,比如,多核高频 CPU、大内存和高带宽等,对浏览器提出了更
高的要求,比如,为每个浏览器标签分配一个单独的进程,与操作系统的通信都必须是多线程的,加大
缓存容量,不怕消费更多的带宽资源。由此可见,虽然 IE 8、FireFox 3.1 和苹果的 safari 浏览器都采用
了不少新技术,但是,在某些方面(比如,多进程),谷歌浏览器 Chrome 的优异性能是它们所不能及
的。

谷歌为了自己的需要,多年积累人才和技术,开发了浏览器 Chrome(寓意为铬合金,注意合金两
字),并且开放其全部源代码,欢迎竞争对手自由使用。这是非常难能可贵的,局外人生(谷歌)什么
气呢?


oss.linuxpk.com 2008 年第 9 期  19

产业聚焦

7 大理由剖析 Chrome 优缺点

PCWorld 金童
近日,Google 周二发布了开源浏览器 Chrome。在进行评测后,《PC World》杂志列出了支持和反对
Chrome 的 7 大理由。

支持 Chrome 的 7 大理由
1. 不会崩溃

Chrome 最具吸引力之处在于多进程结构,能够避免恶意网页内容或应用导致整个浏览器崩溃。这
一功能同时将各个网页和应用隔离开,从而提高了安全性。

2. 运行速度确实很快

由于基于多进程结构,某一网站速度较慢并不会影响用户对其他网站的浏览。当某一网页"卡住"时,
用户可以点击其他标签继续浏览,同时等待该网页的打开。此外,网页中某一插件运行缓慢也不会
影响整个网页,因为网页和插件也使用不同进程。

3. 用户几乎感觉不到浏览器的存在

仅仅"流畅"一词还不足以描述 Chrome 的设计风格。Chrome 看起来并不像一款软件,屏幕上显示


的大部分内容都是网站内容,按钮或标志很少。Chrome 的设计者表示,希望使用户忘记在使用浏
览器。

4. 使搜索变得更简单

Chrome 的另一大特色是经过整合的全功能工具栏 Omnibox。用户可以在其中输入网站链接或关


键词,Chrome 随后能正确的加载用户希望的网 站。Omnibox 还能智能习用户习惯。例如当用户
访问 PCWorld 网站后,Chrome 能够现 PCWorld 的搜索引擎,用户随后就可以在 Omnibox 中直
接使用该搜索引擎。

5. 加强了用户对标签的控制

Chrome 赋予标签浏览新的意义。用户可以拖动一个标签,使其自身创建一个窗口;也可以将标签
拖放至现有窗口中,将标签合并。Chrome 还允许用户在启动时根据预设打开网页,而其他浏览器
通常需要第三方插件才能实现该功能。

6. 创新的主页

Chrome 默认使用动态主页。当用户使用该功能时,Chrome 能够记录用户访问最多的网站,并在


动态主页上显示用户访问最多的九个网站的缩略图。动态主页还将展示用户使用最多的搜索引擎和
书签。用户并不会被强制使用动态主页。


oss.linuxpk.com 2008 年第 9 期  20

产业聚焦
7. Incognito 隐私保护模式

与 IE8 的隐私保护模式类似,Chrome 允许用户打开一个特定窗口,用户在该窗口中的活动都不会


被记录下来。与 IE 不同的是,Chrome 的 Incognito 窗口与其他窗口是分开的,因此用户可以同
时使用隐私保护模式和非保护模式进行浏览。

反对 Chrome 的 7 大理由
1. 目前仅仅是 Beta 测试版

目前发布的是 Chrome 浏览器的第一个测试版,因此未来几个月中必将有大量问题产生。如果用


户在日常工作中需要大量使用浏览器,那么使用这样一款未经证明的浏览器无疑是存在风险的。此
外,目前用 Chrome 登录一些基于插件的网站会报错。

2. 无法安装任何插件

插件是许多用户使用火狐的主要原因,然而 Chrome 目前没有提供任何插件。预计 Google 会为插


件开发者提供 API,但是目前尚不清楚 Google 何时会推出这种 API。

3. 没有同步功能

火狐浏览器允许用户通过 Mozilla Weave 在多台电脑之间实现同步,从而使用户家庭电脑、工作


电脑和笔记本电脑上的浏览器保持一致。一旦用户习惯于这种同步服务,那么将很难摆脱它。
Chrome 目前尚不具备该功能。

4. 标准带来的劣势

Chrome 基于 WebKit 开发,与苹果的 Safari 浏览器一样。然而,当你用 Chrome 打开网页时,


你会发现文本格式与火狐和 IE 不一样。由于大部分网站在开发中更关注火狐和 IE 用户的需求,因
此 Chrome 在这方面处于劣势。

5. 给予网络广告冠冕堂皇的理由

或许很多用户还没有关注 Chrome 浏览器的隐私策略。实际上,从用户打开 Chrome 一直到关闭


它,Google 将能够完全掌握用户的上网行为。这就意味在你上网过程中,Google 旗下广告公司
DoubleClick 会一直站在你身后盯着你。

6. 取消了地址栏下拉菜单

Chrome 取消了地址栏的 URL 下拉菜单,代之以 Omnibox 的智能功能。不过,如果你需要重新


取回最近打开的链接地址,那么你会想念 URL 下拉菜单。

7. 丢失上网历史信息

Chrome 的历史功能相对于火狐来说十分平庸。Chrome 仅仅是通过简单的屏幕显示来展示用户的


每日上网历史,而无法根据日期、网站或用户访问频率来排列这些历史信息。


oss.linuxpk.com 2008 年第 9 期  21

产业聚焦

谷歌 Chrome 浏览器开发内幕

《连线》杂志 杨琳编译

导语:10 月号《连线》杂志撰文称,谷歌推出 Chrome 浏览器是一个计划周密的行动,目的非常明


确,就是要与微软的 IE 抢占市场份额。

开发浏览器传闻变现实
➢ 开发浏览器传闻变现实
8 月 18 日,谷歌在加州山景城总部 41 号大楼一个小会议室召
➢ 早在 2001 年便有开发打算
开每周一次的经理会,这可能是发布 Chrome 浏览器前的最后一
➢ 开发过程一波三折
次经理会。在会议上,布赖恩·拉考维斯基(Brian Rakowski)走向
➢ 公司高层终开绿灯
白色书写板,用黑色干擦笔在白板上写了 12 个条目。
➢ 速度是最大优势
拉考维斯基今年 20 多岁,身体瘦长,喜爱交友,是一项秘密 ➢ 具有全新功能
计划——Chrome 浏览器开发——的产品经理。据悉,这一计划 ➢ 保密工作非常好
从启动到现在已经有两年多时间了。

他写的第一条是“发布状态”(State of the Release)。被讨论的发布对象就是外界极为关注的 Chrome


——谷歌的第一个网页浏览器。浏览器是网上冲浪的必备工具,帮助用户完成搜索、阅读、购买、办理
银行业务、登录 Facebook、聊天、观看视频、听音乐等网上 活动。对于谷歌来说,推出 Chrome 绝对
是一个重大举措,是实现谷歌时代真正到来所必不可少的一步。

在将桌面计算升级到“云计算”过程中,谷歌拥有相当大的优势。Chrome 的出现无疑是向其竞争对手
微软发出的一大挑战。多年前,微软正是凭借 IE 浏览器击溃 Netscape Navigator。随着 Chrome 的登
场,IE 是否会面临和 Netscape Navigator 一样的命运,我们拭目 以待。

实际上,谷歌将推出浏览器的传闻很久以前就已不胫而走。在漫长的等待中,很多人早已闭上讨论之
口。但这一次的经理会势必再次启动讨论之门。按照谷歌的计划,Chrome 在 9 月 2 日正式登场。在公
开测试版之前的最后一个版本,拉考维斯基及其团队只发现 5 个“bug”,而且都已解决。技术负责人之一
的马克·拉尔森(Mark Larson)说:“事情看起来还不错。”

谷歌产品管理副总裁桑达·皮采(Sundar Pichai)问道:“什么东西让你们搞了一个晚上?”参与第一个原
型开发的工程师达林·费希尔(Darin Fisher)说:“当然不是 Chrome。”这句话引来一片笑声,因为每一个
人都知道他家里有一个只有 10 周大的孩子。拉考维斯 基拿出一支红笔在“发布状态”旁边加了一个“X”。
这是一个信号,暗示谷歌 Chrome 浏览器离成为现实只有一步之遥。

早在 2001 年便有开发打算


oss.linuxpk.com 2008 年第 9 期  22

产业聚焦
谷歌为什么要开发浏览器?这似乎是一个很容易回答的问题。相比之下,人们更为关注的是,谷歌开
发浏览器为什么用了这么长时间。皮采说:“我们要做的是让人们使用一种浏览器访问我们的资源和网络。
”CEO 埃里克·施密特(Eric Schmidt)说:“浏览器是关键所在。”他应该很清楚这一点,因为在上世纪 90 年
代激烈的浏览器大战中,他就竟曾担任过 Sun 的首席技术官(CTO)。毫无疑问,谷歌创始人拉里·佩奇
(Larry Page)和塞吉·布林(Sergey Brin)自然也知道这一点。

施密特说:“在 2001 年加盟谷歌时,佩奇和布林就对我说‘我们要开发自己的浏览器’。我当时的回答


是‘不’。”他解释说,当时的时机还不成熟。“我不相信公司那时已具备足以经受住一场浏览器战争的实力。
我们的战略目标应该在‘雷达探测不到的地方’,这一点非常重要。”虽然当时没有进行开发,但打造自家浏
览器的想法却保留下来,传闻也开始蔓延开来。2004 年,《纽约时报》援引一名自称了解谷歌业务具体
细节的人的话报道说,谷歌正开始开发浏览器。消息一经传出,施密特随即予以公开否认。

在幕后,Chrome 开发仍旧是施密特与谷歌创始人争论的话题。谷歌最后采取了一种折衷办法,组建
一个小组,任务是改进浏览器奇才本·古德杰(Ben Goodger)和费希尔负责开发的开源浏览器 Firefox。
(古德杰和费希尔均效力于 Firefox 拥有者、非盈利性组织 Moz illa)除此之外,谷歌还推出另一个举措,
聘请曾就职于 NeXT 公司的 37 岁的工程师莱纳斯·厄普森(Linus Upson)担任工程研发总监 。费希尔说:
“佩奇和布林的决定是非常明智的,原因再简单不过:如果能做好 Firefox 扩展,他们就有能力开发出一
款优秀的浏览器。”

2006 年春季,Firefox 开发小组开始讨论设计一款新的浏览器。他们热爱 Firefox,但他们也知道当


前所有浏览器都有一个共同缺陷。在最初构思微软 IE 和 Firefox 心脏的代码库时,浏览器并没有现在这
么复杂。之前只能在桌面上实现的功能——邮件、电子表格、数据库管理——现在却越来越多地在网上
进行。在即将到来的“云计算”时代,网络已不仅仅是一个内容传递平台。

开发过程一波三折
对现有浏览器进行修补以适应这一想法意味着,必须不断开发相关附加组件,例如工具条、RSS 阅读
器等等。但这种修补可能因为一次彻底升级成为一种徒劳。费希尔说:“作为 Firefox 的开发者,你必须
不断创新,但你又经常担心,一旦推出下一版本,所有扩 展将成为废物。实际上,这种事情已经发生了。
”结论是显而易见的:只有开发自己的软件,谷歌才能将浏览器送入“云计算”时代,并潜在地掀起一股自
微软和 Netscape 拉锯战(市场排名几乎每月变换)之后从未有过的革新浪潮。

谷歌构想的一个关键性革新就是所谓的多处理结构,这一系统能够帮助计算机在软件崩溃时继续运行。
那为什么不将这一系统应用到浏览器身上呢?也就是说,当一个标签页崩溃时,其它标签页仍可以泰然
自若。当然了,为了解决“一个老鼠屎坏了一锅汤”的问题,你也可以采取拖拽现有标签页创建一个新窗口
这种方式。简单地说,就是从头开始,这种方式拥有其它一些优势。在设计上,你可以做到更加简洁并
使其运行速度更快,而更简洁、更快速恰恰是谷歌奉行的两大原则。

2006 年 6 月,古德杰、费希尔和曾就职于 Mozilla 的布赖恩.莱纳(Brian Ryner)开发出一个“小原型”。


他们的第一个重大决定就是选用渲染引擎——帮助处理网页的 HTML 代码,并将结果显示在用户的屏幕
上。他们敲定的两个开源引擎分别是用于 Firefox 的 Gecko 和用于苹果 Safari 浏览器的 WebKit。


oss.linuxpk.com 2008 年第 9 期  23

产业聚焦
WebKit 已被负责开发谷歌移动操作系统 Android 的研究小组采用,其运行速度是 Gecko 的 3 倍,
自然成为 Chrome 的首选。

几周之后,古德杰等人便开发出可在 Windows 系统下运行 WebKit 的一款比较简单的浏览器——某


一个标签页崩溃后,这个浏览器仍能运行。古德杰回忆说:“当标签页崩溃后,用户会看到一个沮丧的表
情图标,表明这个标签页已经‘死’了,这是 Chrome 浏览器的第一大特色。”不久之后,布林和佩奇视察
了秘密开始的浏览器开发计划。参与开发的工程师帕姆·格里纳(Pam Greene)回忆说:“我 记得很清楚,
当时我就坐在桌子旁边,一条玩具蛇趴在桌子后面。布林一边玩着健身球,一边看费希尔演示,同时还
不忘用手爱抚那条玩具蛇。”

公司高层终开绿灯
没有谁能确切地说出公司高层是什么时候给 Chrome 浏览器工程开的绿灯。皮采回忆起一次行政会
议,当时施密特好像不再像以前那样反对。这位 CEO 表示,如果谷歌确实决心上马浏览器工程,研究团
队就必须开发出与 IE 和火狐有着很大不同的东西。另外,谷歌的浏览器速度必须更快,而且必须是开放
源代码。

当然,这些正是研发团队早就想到了的地方。

总之,到 2006 年秋,Chrome 浏览器从非正式概念跨越到了正式的工程。工程师布雷特·威尔逊


(Brett Wilson)说:“某个星期五,我们开了一个会。主管说‘高层正在考虑做我们自己的浏览器,你们怎
么看?’所有人是既兴奋又惶恐。”之所以惶恐,部分是因为他 们非常清楚,研发一款有竞争力的浏览器是
一项巨大的任务。

由于对火狐的依赖,研发团队成员内心的感受可谓五味杂陈,作为开放源代码发展的代表,火狐是对
抗微软统治地位的一道屏障。

2006 年 10 月加入研发团队的工程师埃里克·凯(Erik Kay)说:“我们的担心是,人们会把它解读为破


坏火狐。”

让谷歌人感到欣慰的是,他们的浏览器将百分之百地开放源代码:谷歌的创新可能会帮助找到进入
Mozilla 编码库的方法。厄普森说:“我们真心希望火狐和其它开放源代码的浏览器都能够成功。”

作为谷歌力挺火狐的一部分,皮采会见了 Mozilla 总裁米切尔·贝克(Mitchell Baker),并在向她介绍


了谷歌的计划。现在贝克表示,对 Mozilla 和火狐来说,Chrome 浏览器是一种混合体。她将 Chrome
浏览器的推出视为是对 Mozilla 有关浏览器的选择至关重要这一 信念的拥护。她说:“如果谷歌提出一些
很好的新创意,那对用户来说再好不过。竞争促生最棒的浏览器。”但她也明白,很多她的客户将会下载
谷歌的应用程序。她说:“我们期待人们去试用,然后再回来。因为独立非常重要,Mozilla 还将继续存
在。”


oss.linuxpk.com 2008 年第 9 期  24

产业聚焦

谷歌 Chrome 浏览器开发人员 (左起 )Mark Larson, Brian Rakowski, Darin


Fisher, Ben Goodger
一个次要的问题是这款产品应该取一个什么名字。在研究了代号,但感觉都非常愚蠢之后,他们借用
了过去用来描述框架、工具栏和浏览器窗口周围菜单的一个词:chrome。另外聘请的一个人也非常重要。
因为用户期望 Chrome 能使运行 Web 应用程序最优化,一个关键要素应该是 JavaScript Java 引擎,这
是一种运行 Web 应用程序编码的“虚拟机”。建造这种虚拟机的理想人选是丹麦计算机科学家拉尔斯·巴克
(Lars Bak)。2006 年 9 月,在不停地进行了 20 多年的设计后,巴克准备抽出一部分时间用在他位于奥
尔胡斯郊外的农场里。就在这个时候,谷歌打来了电话。

巴克建立了一个小团队,最初在农场工作,之后搬到了当地大学的办公室。他知道他的任务是研发一
款比以往任何一款浏览器更快的引擎。他称自己的团队是“V8”项目的一部分,他说:“我们下定决心,一
定要加快 JavaScript 的运行速度,我们花了 4 个月的时间 去做。”这个丹麦研发小组通常是早上 7、8 点
钟开工,一直编程到晚上 6、7 点钟。唯一的休息时间是午饭,他们会在 5 分钟内狼吞虎 咽地吃完,然
后玩 20 分钟的游戏。巴克说:“我们都很会玩 Wii 网球游戏。”

速度是最大优势
他们还善于编写一个 JavaScript 引擎。巴克在谷歌推出 Chrome 浏览器前几周曾表示:“我们今天只
是在尝试一些基准运行。”实际上,V8 引擎处理 JavaScript 的速度比 Firefox 或 Safari 浏览器快 10 倍。
而在那些相同的基准下,Chrome 与浏览器市场的霸主微软 IE 7 相比又如何?答案是前者运行速度是后
者的 56 倍。巴克说:“我们有点低估了自己的工作能力。”

速度可能是 Chrome 浏览器是最重要的进步。当你以数量级的方式去改善某些设备的时候,你没有


造出更好的东西——你造出的是新产品。巴克说:“开发人员一体会到这类速度的魅力,他们就会开始从
事更美妙的新的网络应用,他们在这方面更具创造力。”谷歌希 望推出新一代网络应用,这样一来,微软
最不愿看到的梦魇将成为现实:浏览器将成为相当于操作系统的应用。

谷歌还对 Chrome 进行了一些改进,令其成为多进程操作平台,使每个打开的标签页可以像独立的


oss.linuxpk.com 2008 年第 9 期  25

产业聚焦
程序一样运行。2007 年 5 月,谷歌收购了 GreenBorder Technologies 公司,这是一家软件安全公司,
其技术被用于为 Firefox 或 IE 创建一个封闭、安全的环境,将它们的活动隔离到“虚拟会议”(或沙盒)中,
在这里,恶意软件入侵不会破坏电脑上的其它活动和数据。

这项交易对外公开宣布时,业界就怀疑谷歌可能会涉足反病毒领域。这项收购完成后不久,
GreenBorder 的工程师们即了解到,他们的工作就是为新一代浏览器的标签页构建“沙盒”。卡洛斯·皮萨
诺(Carlos Pizano)说:“我们都糊涂了。他们不会说明用沙盒去 干什么。”

尽管 Chrome 开发团队日益壮大,但开发工作从没有陷入像官僚机构经常遭遇的困顿中。在
Chrome 项目的初期阶段,开发人员还能在谷歌某个咖啡厅一张桌子上共用午餐。不久,即便是最大的
桌子,亦不能满足这个团队的用餐需要了。

每位工程师都怀以“开源”的精神工作,他们可以随便检查任何代码,去调整或改进。拉考维斯基总在
尝试让开发进程保持透明。

具有全新功能
随着产品整体规划逐项落到实处,工程师们开始把工作重点放在用户界面上。一开始,Chrome 开发
团队希望,这款浏览器的视觉效果一定要做到平淡无奇,这样,用户甚至认为他们不是在使用浏览器。
开发人员的口号变成了“内容,而不是 chrome”,鉴于这款浏览器的名称,给人以一种奇怪的感觉。马克·
拉尔森(Mark Larson)说,我们学会了如何在遭人嘲讽下生活。

当你把一个含有像 Gmail 这样的网络应用的标签页拖至一个单独的窗口,说明你希望一个“应用捷径”


(app shortcut)的时候,最清晰的表达会出现在你的面前。此刻,菜单、按钮、地址栏全部消失了,Web
应用看上去更像是桌面应用。

在决定包括哪些按钮和功能时,开发小组开始玩起一个智力游戏,即消除一切东西,然后再去分析如
何恢复。后面的按钮?没什么用处,删去。前面的按钮?没有什么必要,但它最后幸存下来。如果你是
浏览器状态栏的忠实拥趸,那么你可能对 Chrome 不太习惯 。

Chrome 有书签栏。最初,工程师认为他们不应该要书签栏。Chrome 引入多个新的导航方法,如在


其中一个导航方法中,浏览器可以分析用户不用打字也清楚接下来该进入哪项程序。你输入文字时,可
以使用“omnibox”,一项结合了地址栏和搜索栏的功能:只要输入你想要查找的东西,它就能提供网络
地址、搜索结果或适合你要求的受网友欢迎的目的地,这些信息全部是以非插入式文本形 式出现在框的
下面。

一定程度上讲,它就是谷歌著名按钮“I'm Feeling Lucky(手气不错)”的增强版。谷歌在用户中进行的


调查表明,一些人仍喜欢点击这个书签栏获取导航信息。一个折中方案是:如果用户以前在 IE 或 Firefox
浏览器上设定了书签栏,Chrome 将会导入这项设置。否则,用户将没有书签栏,除非他们特意选择。

保密工作非常好
令人难以置信的是,谷歌浏览器在两年时间里竟然不为外界所知。直到 2007 年年中,即 Chrome 项
目实施约一年的时候,开发小组让未参与该项目的公司职员了解他们的创新工作时,这方面的消息才泄


oss.linuxpk.com 2008 年第 9 期  26

产业聚焦
露出去。在以当前原型为特征的高科技谈话系列的一开始,员工们反响非常强烈。在各种功能(如将标签
页拖至新窗口)演示过程中,他们不时爆发出发自内心的欢呼声。

随着知道 Chrome 浏览器的人越来越多,有件事必然要发生——相关消息传到博客的耳中。但是,


没有一名记者能将这些传言整理在一起。乌普森(Upson)说:“我想这是因为有关谷歌浏览器的传闻存在
了很久,就像是人们天天说看到大脚怪或尼斯湖怪,到最后便习以为常了。”

在 Chrome 浏览器推出前夕,皮查伊(Pichai)同一些人分享了他对 Chrome 浏览器的期望。究竟会有


多少人用谷歌的浏览器?他说:“怎么也有几百万吧。我希望老妈也用,当然还有老爸。”谷歌内部对
Chrome 的认可并不代表这款浏览器会获得成功,乌普森认为,即便 Chrome 不能夺取很大的市场份额,
但其创新技术将提高浏览器整体表现。他说:“如果网络变得越来越好,我们自然会是直接 受益者。”

随着 Chrome 浏览器推出的时间日益临近,开发小组搬到谷歌公司园区一栋装饰一新的大楼内办公。
在园区内最大的一间会议室内,全体工程师可以在此开会,但也只能站着,坐下的话空间就不够了。公
司还向他们提供牛奶和饼干。在经过初期发展后,拉考维斯基将整层楼交给了手下。他不厌其烦地向大
家解释将 Chrome 打造为开源产品的种种益处。开源产品是指代码对外公开,每个用户可以帮助改善浏
览器的功能。

拉考维斯基说:“我们将可以衡量我们的测试效果。它能使人们从事我们从未想象过的事情,让用户
对我们产生一种信赖,这是别的工作所没有的效应。“

随着会议即将结束,与会人员的情绪也达到顶点,这不仅仅是因为咖啡的作用。毕竟,Chrome 开发
小组即将揭开谷歌冥冥中要去完成的一款新产品的神秘面纱。尽管如此,开发小组当务之急是消除横亘
在他们面前的五个技术难题。


oss.linuxpk.com 2008 年第 9 期  27

开源通讯

Linux 藏文操作系统作为目前市场上屈指可
英特尔北京 Moblin
数的全藏文系统软件,它的面世意味着藏文信息
团队成立 处理领域达到了较高水平,不再受到语 言文字的
限制,有效填补藏文软件数字鸿沟。
英特尔北京 Moblin 团队 8 月正式成立,隶属
英特尔开放源码技术中心(OTC)。该团队目前的
主要工作是研发针对 netbook 和 nettop 的 M 华硕 Eee Box 集成 Splashtop
oblin 版本,并直接参与 Moblin2.0 的发布。这
也是英特尔公司加大在华开源研发投入的具体举 即时启动软件
措。

依托该 Moblin 团队、OSV 支持团 队以及在 8 月 19 日 DeviceVM 宣布其获奖产品

上海成立多年的内核团队、虚拟化团队,英特尔 Splashtop 将被集成在华硕的低成本电脑 Eee

OTC 在中国将与 CSIP、中国科学院等机构展开全 Box B202 上,Eee Box 是华硕继 2007 年推出

面合作,启动“虚拟导师”、“开源讲座”等一系列项 的畅销产品上网笔记本电脑 Eee Pc 后,开发的又

目,为中国的高校、科研机构培养开源人才。 一款 Eee 系列台式电脑。

Eee Box 的硬件规格中包括 Intel Atom


N270 1.6 GHz 处理器,1G DD R2 内存,80G
硬盘,802.11n 无线网卡,微软 Windows XP 家
红旗藏文 Linux 成功验收 攻克
庭版,和被华硕命名为 Express Gate 的
多项技术难题 Splashtop 系统。Splashtop 是一种“即时启动”平
台,它让用户打开电脑后几秒内就能阅读邮件,
8 月 20 日消息,由中科红旗、中科院、及西 和朋友聊天,共享图片,上网冲浪。
藏相关部门联合开发的 Linux 藏文操作系统通过
信息产业部科技成果鉴定,达到同类产品技术的
国际先进水平。目前已经正式向用户开放。

根据专家组的鉴定,Linux 藏文操作系统实
现了对《信息技术信息交换用藏文编码字符集基
本集》、《信息技术藏文编码字符集扩充集 A》
和《信息技术藏文编码字符集扩充集 B》的支持,
解决了 Linux 系统支持 ISO 10646:2003 标准
中非 BMP 平面藏文字符的问题。

同时,该系统完整覆盖上述三个标准所有字
符的 TrueType 字体,开发了支持上述标准所包
含的所有字符的两种藏文输入法等,攻克了多项
技术难题。


oss.linuxpk.com 2008 年第 9 期  28

开源通讯

英特尔收购英国 DeviceVM 获得价值 1500 万


Opened Hand 公司 美元的第三轮投资

英特尔于近日收购了英国 Opened Hand 公 8 月 19 日 DeviceVM 宣布获得由著名风险投


司,该公司专注于移动 Linux 的开发研究和服务。 资 New Enterprise Associates (NEA)牵头的价
英特尔表示,交易达成后,Opened Hand 将隶 值 1500 万美元的第三轮投资,至此,Device
属于英特尔的“开放源代码技术中心(OTC)”,并加 VM 已经获得累计 3700 万美元的风险投资。原
入英特尔的移动软件平台社区 Moblin,为英特尔 有的投资者 Storm Ventures,德丰杰龙脉,Tim
开发基于 Atom 处理器的 Linux 软件,该软件能 Draper 和 Larry Augustin 也一并参与此次投资,
够优化低功耗上网本(Netbooks)和移动互联网设 以表示继续支持 DeviceVM 的持续发展。
备。英特尔的一位发言人表示:“Opened Hand
能为我们带来用户互动框架领域的非常专业的知
识和技术,可以帮助英特尔改善为各类新型设备
英特尔高调发布
提供优秀界面的能力。”英特尔表示,会继续支持
Opene d Hand 现有的开发项目,包括软件库 Moblin 2.0
Clutter,GUI 的使用以及 Matchbox(一项为 X
Window 设计的基于开源环境的系统),且这些 8 月底在美国旧金山举行的 IDF 2008(Intel
项目将成为英特尔移动项目的一部分。 Developer Forum)上,英特尔开源技术中心
(OTC)总监 Peddibhotla Rammohan 发表了关
于 Moblin 的精彩主题演讲,阐述了业界向移动
互联网/移动 Linux 的发展趋势,介绍了
红帽 Fedora 项目公布 Moblin.org 的发展情况,并高调宣布 Moblin
新奖学金计划 2.0 的正式推出。在 IDF 上亮相的一系列设备,
将为快速发展的基于 Moblin 操作系统的软件生
态系统提供强大的支持,其中包括针对社交网络
红帽公司赞助并提供社区支持的开源协作项
的 GyPSii、针对网络游戏的 Fuel Games、针对
目——Fedora 项目宣布了新创立的 Fedora 奖学
互联网电视的 Move Networks 以及针对用户界
金计划,对全世界大学和即将进入大学的学生中
面和应用软件的东软等 10 多家软件厂商,都公
对自由软件和 Fedora 项目做出出色贡献者给予
布了支持基于 Moblin 互联网设备的应用软件产
肯定。Fedora 奖学金项目秉承红帽和 Fedora 项
品计划。
目的一贯宗旨,即帮助发展和加强开源软件领域
未来人才。2009 年申请开放时间为 2008 年 9
月 1 日至 2009 年 2 月 16 日。如欲了解有关
Fedora 奖学金的详细信息,或提出申请,请访问
https://fedoraproject.org/wiki/Scholarship


oss.linuxpk.com 2008 年第 9 期  29

开源通讯

恩信科技开源 蓝迪科技推出基于开源软件的
ERP V7.10 发布 高清机顶盒方案

恩信科技开源 ERP 软件是源代码开放可以免 蓝迪科技从 2008 年 4 月开始与国家广播电


费使用的企业管理软件,它涵盖了客户关系、生 影电视总局广播科学研究所(下简称广科院)合
产、供应链、进销存、财务、人力资源、办公和 作研发基于开源软件的高清机顶盒方案,并于 8
电子商务等众多功能。9 月 1 日恩信科技推出开 月获得阶段性成果,样机全部采用开源软件,实
源 ERPv7.10(ForTomcat5MySQL5)和 ERPv7.0 现了三网合一的高清机顶盒解决方案。支持常见
升级包。只要在您已安装好的恩 信科技开源 的 TV 芯片,网络芯片。支持 D VB-C/S/T,支
ERPv7.0(ForTomcat5MySQL5)系统中,按照升 持网络流媒体,支持 1080P 高清节目,并能够达
级指南添加该升级包就可以马上使用。 到广播级视频播放水平。在该样机基础上,双方
将进行产品化研究工作,并与有线电视运营商合
作进行商业试点。

第二届 PHP 全国调查


圆满结束 天石网通网络宝(V2.0)产品
由 PHPChina 主办,CSDN 协办的《第二届 通过 CSIP 产品检测
PHP 中国开源与人才发展状况调查》活动于近日
正式结束,共有近三千名 PHP 爱好者及技术管理 8 月 14 日,北京天石网通公司网络宝
人员参与了此调查。较首届 PHP 调查结果不同的 (V2.0)产品顺利通过国家软件与集成电路公共
是,第二届的调查中不同等级的参与者比例有很 服务平台(CSIP)赛普实验室的产品测试,测试
大变化。其中 23%的参与者属于听 的内容包括:网络宝(V2.0)产品基本功能、产
品性能和产品可靠性等。 经检测,网络宝
说过,但不会使用的朋友,29%属于了解,
(V2.0)产品除了具有多种网络应用功能外,同
偶然使用者,非常熟悉的参与者达到了 45%的比
时具备较强的稳定性和安全性。测试结果进一步
例。值得一提的是,今年的调查增加了针对 PHP
证明了网络宝产品在技术上已经比较成熟,完全
应用企业部分的调查,这部分参与者的比例达到
可以适用于中小企业和基层政府(社区、农村)
了 3%。虽然今年调查受暑假和奥运会的影响,样
信息化的多种网络应用。
本收集数量方面不如去年。但在质量上较去年有
很大改观,从结果上我们能看出,国内 PHP 的发
展更为成熟了。


oss.linuxpk.com 2008 年第 9 期  30

开源通讯

道商作 为开发欧洲市场的合作伙伴,对龙芯进一
红旗 2000 金友兵入选 2008 年
步壮大阵营与市场影响奠定了坚实的基础。
北京市“新世纪百千万人才工程”

日前,经亦庄经济技术开发区推荐、北京市 Novell 增强其 ZENworks 能力


人事局组织的专家评审,红旗 2000 公司副总经
理金友兵博士入选 2008 年北京市“新世纪百千万 8 月 12 日, Novell 宣布配备支持包 1(SP
人才工程”。该工程是由人事部等部委联合组织实 1)的 ZENworks 配置管理解决方案已上市。已
施的培养造就年轻一代学术技术带头人的人才专 经过测试的 SP1 可使扩展性达到一个新的水平,
项计划,主要选拔支持年 龄在 45 周岁以下,有 并使那些在偏远低带宽地方工作的设备的性能得
强烈事业心、较高的学术造诣和较强的组织协调 到改进。这个最新版本扩展了对 Windows Vista
能力的中青年科技人才。金友兵博士多年来主要 SP1 和 Windows Server 2008 的平 台支持,进
从事 Linux 操作系统、中文办公软件、中文信息 一步加强了 Novell 在基于身份的、交叉平台系统
处理、组件技术和 NC 计算机软件系统等方面的 管理领域的领导地位。ZENworks 配置管理解决
研究,并在 XML 技术、网络和多媒体信息处理方 方案 SP1 具有更大的灵活性、更佳的合规性以及
面 有丰富的研究经验。他的当选体现了社会各界 增强的性能,帮助客户有效管理大中型企业 IT 环
对红旗 2000 公司科研人才取得成绩的肯定,也 境,简化并改善操作。
体现了红旗 2000 公司坚持自主创新,注重高层
次人才队伍建设的成果。
神州商桥与中小企业协会携手
推出“信星计划”
中科龙梦与法国 Dexxon
展开合作 信星计划是由国家发展和改革委员会、国家
教育部、国家科技部 、国家工业和信息化部、国
家商务部、国家海关总署、国家邮政局指导,由
近日,中科龙梦与法国 Dexxon 公司签署了
中国电子商务协会、中国中小企业协会、中国电
一个技术合作协议,首批 1300 套笔记本正在抓
子商务协会标准应用推广中心主办,由北京神州
紧生产中。Dexxon 是欧洲著名的移动储存设备
商桥技术服务有限公司承办以加快中小企业电子
生产商和 IT 渠道商,它们打算全面和龙梦合作,
商务活动为目标,吸引一批较专业、有实力、在
逐步把龙芯低成本便携计算机解决方案引入欧洲
行业或者区域内有影响力的电子商务服务提供商,
乃至全球。这个协议的基本内容 是中科龙梦负责
为中小企业提供专业、低成本和优质的电子商务
设计开发、测试及质保工作并授权给 Dexxon 公
服务。“信星计划”工作的开展,将推动电子商务信
司生产以及在全球销售,Dexxon 公司将该款笔
用在其会员企业中的全面采用,逐步改善电子商
记本命名为 Gdium。这次成功的合作为龙芯赢得
务的信用环境。
了欧洲市场,助推着龙芯走向世界。更重要的是,
争取到法国 Dexxon 公司这样一个欧洲著名的渠


oss.linuxpk.com 2008 年第 9 期  31

开源通讯

红帽企业 Linux 赢得美国 “开源行动日” 技术


国防部 IPv6 认证 巡讲全国展开

红帽公司近日宣布,根据美国国防部 IPv6 主 7 月 15 日至 9 月 4 日期间,“开源行动日” 技


测试计划,红帽企业 Linux 5.2 已获得国防信息 术推广巡讲活动先后在武汉、长沙、广州、南京、
系统局的 IPv6 (Internet Protocol Ve rsion 6 ) 苏州、上海、无锡、济南、大连、长春、西安、
特别互操作性认证。获得该认证后,红帽企业 成都、杭州、深圳等地软件园及软件产业基地火
Linux 5.2 将被列入国防部统一获准产品清单 如荼的展开。由“共创软件联盟”领导带队,以
(UC APL),可用于具备 IP v6 能力的主机、工 SUN、Intel、中科红旗、灰 狐社区等单位高级技
作站和具备 IPv6 能力的高级服务器。该认证将确 术专家为核心的专家团队,分别就有关开放源代
保红帽企业 Linux 5.2 能够满足国防部的任务要 码的理念、应用和前景,及最新开放源代码技术、
求,适用产品类别,并在与国防部 IPv6 网络中已 开发技巧、知识产权问题等内容作了精彩的演讲。
使用的其它 IPv6 产品实现互操作是非常必要的。 活动为各地软件园的软件企业利用开源技术创新
能力与应用能力的提高发挥了积极作用,并极大
促进开源软件在各园区的推广应用。

OASIS SOA-EERP 技术委员会


正式成立 威盛获清华同方定单
近日,SOA-EERP 技术委员会正式成立。于 首批出货预计数十万颗
8 月 6 日举办的第一次会议圆满地完成了各项
OASIS 组织进程中的要求,现在成为一个完整的 清华同方在北京推出 S1 imini 系列 Mini-
OASIS 组织的技术委员会。OASIS 是一个推进电 Note 中,将采用威盛的 C7-M 处理器平台。S1
子商务标准的发展、融合与采纳的非盈利性国际 imini 最大功耗仅 15 瓦,方便携带及使用,将在
化组织。SOA-EERP 是面向服务架构 中国主要城市的 PC 卖场中销售,这是双方在超
级移动计算机市场合作的第一个产品。
SOA-EERP 技术委员会的独特之处在于将
SOA 工作与 EERP 优化构架组合,技术委员会将 据了解,同方首批定单数量并不大,应该在
主要致力于实现优化和流程改善。SOA 作为一项 数十万颗左右,不过如果市场接受度提高,随时
开发、部署和管理的方法论已经日趋成熟,端到 可以追加定单数量。
端资源规划(EERP)以一种新颖的方式将服务发现、
同时,该公司的超级移动平台解决方案在全
组合、模拟和优化技术应用于 改善业务成果。当
球已经有超过 40 款产品采用,包括 HP、Everx
软件产业将 SOA 应用于电子商务的开发部署时,
Packard Bell、及同方等,而威盛新推出的 Nano
以 EERP 为代表的自主系统变得更加灵活和必要。
处理器平台,提供高端计算机的快速运算需求,
兼具省电节能功能,将在第 4 季正式出货。


oss.linuxpk.com 2008 年第 9 期  32

开源通讯

新网络联机装置。
百资科技发布 Notebook
网络管理管理工具
IBM 宣布"Microsoft-Free"
百资科技日前在适用于 Netbook solution 的
Lite 产品上发表了网络管理应用程序新技术,由 客户端计划
于客户反应及市场需求呈现了 3G 联机装置是
Netbook 在市场上成功的关键,因此百资改善了 8 月 5 日,IBM 宣布与 Red Hat、Novell 和
网络管理应用程序即意味使用者无须再单独使用 Ubuntu 等 Linux 发行商合作推出了一
3G、有线网络或无线网络个别 的连网应用程序 种"Microsoft-Free"的个人电脑计划,以此来扩
进行上网。譬如使用 3G USB 上网,Lite 之网络 展公司的 Linux 解决方案。"Microsoft-Free 计
管理应用程序可以自动搜寻到 3G 装置,并且直 划"采用 Red Hat、Novell 和 Ubuntu 等众多流行
接藉由 3G 装置连上网络。在底层它是连接网络 Linux 操作系统,并结合 IBM Lotus Notes 及 L
装置的程须,在上层则是能够分别秀出有线网络 otus Symphony 等开放协作客户端解决方案,
无线网络以及 3G 连网装置的接口系统。由于使 可以作为基于 Windows 和 Office 客户端的替代
用者在不同环 境需要以不同的方式连网,譬如从 选择,以满足用户逐渐增长的对节约成本的需求,
咖啡店移动到公园,需要轻易就能有良好的网络 这项措施将进一步促进 Linux 桌面的快速增长。
联机。因此使用者可藉此支程序轻易的管理及更


oss.linuxpk.com 2008 年第 9 期  33

开源社区

Firefox 3.1 Alpha 2 发布

个 Alpha 测试版。现在,Alpha 2 也放出了。喜


欢尝鲜的 Firefox 用户赶紧下载试试吧。

Firefox3.1 Alpha 2 基于 Mozilla 的 Gecko


1.9.1 布局引擎,该版本加入了以下几项新特性:
布局引擎,该版本加入了以下几项新特性:
● 支持 HTML 5 <video> 元素;
● 初步支持 web worker threads;
● 现在能够在浏览器窗口之间拖曳标签页;
● 能够在 XUL 中使用 Aero "Glass";
● 支持 CSS 2.1 属性:::before and ::after, and
Firefox 3.1,代号为 Shiretoko,是目前 white-space:pre-line;

Mozilla 正在开发的下一个 Firefox 版本。 ● 支持 CSS 3 属性:-moz-border-image, word-


wrap: break-word, text-shadow, box-
在 7 月底,Mozilla 发布了 Firefox 3.1 的首 shadow and column-rule;
● 改善了性能及新的色彩管理选项。

OpenOffice.org 3.0.0 RC1 发布

OpenDocument 文件格式的办公套件。

OpenOffice.org 3.0.0 RC1 的改进主要包括:


● 不仅有文字处理功能、简单的图形制作功能、强大
的图表功能,还可以编辑 HTML 文件。
● 易于安装,新功能的使用更直观方便。
近日,OpenOffice.org 3.0.0 RC1 正式发布。
● 后台更完善:易于上手的数据库管理器和完全整合
OpenOffice.org 兼容其他主要的办公套件,支 的数据库。
持 XML、微软.doc、Excel、ppt 文件等格式, ● 兼容其他软件包:现在可以支持一些主流软件中的
而且免费下载、使用,是首款支持 OASIS 标准 功能,甚至包括一些不常用的功能。

QQ for Linux 1.0 Preview(106)发布


oss.linuxpk.com 2008 年第 9 期  34

开源社区
一月以前,腾讯发布了 QQ for Linux 的首个版 ● 单独发布支持龙芯 CPU 的版本;

本,受到了很大的关注。近日,腾讯又推出了 ● 优化对输入法的支持。

QQ for Linux 1.0 Preview(106)版本,性能得


Preview(106)版本,性能得 106 版在软件包方面变动较大,安装目录从
到大幅提升,更新包括: 此前/usr/share/apps/Tencent 变更
● 优化安装文件的目录结构; 为/usr/share/tencent,遵循了 Linux 的规范。
● 优化了程序、目录的访问权限控制; 据测试,输入法支持还有点欠缺,依然无法
● 优化代码,降低内存的占用; 支持 Fcitx 的大写英文上屏模式,希望在下一个
● 优化代码,提高了运行效率; 版本中能改进这些问题。
● 支持 TCP 模式登录;

Wine 推出 1.1.4 版

近日,Wine 开发小组宣布针对 1.1.x 开发分 步实现了 shell AppBar。另外,Wine 1.1.4 也


支发布了 1.1.4 版。这个版本主要实现了 增加了中文翻译,并修正了针对 Google
WinHTTP、包括更多的 JavaScript 支持、以及初 Chrome 支持及其他的问题。

2.6.27-rc5 Kernel 发布

改进:
● 更新了 EXT4 和 XFS 文件系统的支持;
● 新的无线网络设备的支持;
● 新的 USB 驱动支持;
近日,最新的 Linux 内核 Linux 2.6.27-rc5
● PowerPC、ARM 和 IA64 构架的更新;
正式发布。这个版本并没有加入多少令人激动的
除此之外,最受关注的应当属新应用的 DRM
新特性,只作了 Bug 修正和少许改进。
补丁,它带来了对新的 AMD 和 Intel 显卡设备的
3D 支持,设备包括了 ATI R500 和 Intel GMA
Linux 2.6.27 是继 Linux 2.6.26 之后全新的
4500,相信拥有该设备的朋友会比较关注这个新
Linux 内核,从 rc1 到 rc5,主要作了以下方面的
rc5,主要作了以下方面的
的 Linux 内核。


oss.linuxpk.com 2008 年第 9 期  35

开源社区
Ubuntu 9.04(兴奋的野兔)紧锣密鼓筹备

Ubuntu 创始人 Mark Shuttleworth 近日宣布 Ubuntu 9.04 预计将于 2009 年 3 月发布,这个版本
的代号为“活泼的怀俄明野兔—Jaunty Ja ckalope”。Ubuntu 基本上每六个月就会发布一个包含最新版本
的流行开源软件和服务。

Mark Shuttleworth 相信目前已经具备了和 Windows 以及 Mac OS X 竞争的条件,并且希望明年能


够更多的计算机能安装运行 Ubuntu Linux。

Ubuntu 社区现在正在紧锣密鼓的开发 8.10(代号坚强的山羊 Intrepid Ibex),预计下个月可以发


布。8.10 包含了 GNOME 2.24 和许多新版本的软件。

在忙完了 8.10 后,Ubuntu 开发团队将集中精力开发 9.04,一个重要亮点就是更快的启动时间和系


统性能,Shuttleworth 将更加关注 Web 与桌面的应用融合,他认为 9.04 会像一只兴奋的野兔一样速度
敏捷和迅速,并且将带来桌面和 web 应用的全新感受。


oss.linuxpk.com 2008 年第 9 期  36

开源社区

迎接国际软件自由日(SFD 2008)

袁萌

每年 9 月份的第 3 个星期六那一天,全球都要举办一次“国际软件自由日”(“Software Freedom


Day”)活动,弄得那些主张软件私有的人士心里面很不安。相对于传统软件秩序而言,软件自由日无疑是
一种反叛行为,不受欢迎。但是,每年搞一天“软件自 由日”活动并无大碍,过一天就会忘记的。

记得,在 2005 年软件自由日那一天,我和一位年轻朋友两个人在杭州西湖边一起度过的。2006 年


那次软件自由日的庆祝活 动是在北京大学举办的,人们心情很激动。2007 年软件自由日活动是在清华
大学举办的,取得了巨大的成功,获得国际自由软件日组织者的奖励(第一名为尼泊尔,第二名为尼加
拉瓜,北京是第三名)。那一天,我很高兴,领到了一件印有 Ubuntu 字样的 T-恤衫,同时,见到了许
多朋友。

今年的国际软件自由日(9 月 20 日),还不知道具体怎么搞法。我想,参加的人可能更多一些。在
我看来,番茄花园修改版 XP 的作者洪磊本人,根本算不上是什么编程高手,即便番茄花园没有“东窗事
发”。番茄花园们(不是别人)整天提心吊胆过日子 ,怪可怜的。他们根本不知道自由软件为何物,就是
知道了、听说了,也不屑一顾。人各有自己的活法儿。我根本就不寄希望他们有一天会转向自由软件。
他们的个人品质(极端自私)确实太坏了,根本就不佩涉猎自由软件的开发领域。在我看来,他们这辈
子(在软件开发方面)算完了。

主张软件知识的私有与分享,这是两种不同的思维方式。站在软件私有的立场上看问题,番茄花园们
是罪犯,因为,侵犯他人版权是犯罪;站在软件自由的立场上看问题,番茄花园们是英雄(这话也许说
过了一点),分享他人版权是天理。我们敢搞软 件自由日,他们敢搞软件私有日吗?恐怕有点说不出口。

北京奥运造就了一大批志愿者(Volunteer),这是一件大好事。字面上讲,所谓“志愿者”就是“愿意
帮助他人”的人(群)。没有特定理由,喜欢帮助他人,这可不是一件小事情。我想,这批志愿者一定乐
于接受自由软件(与他人分享软件知识)的哲学 理念。对于中国的现代软件业,我并不悲观。迟早有一
天,人们是会接受自由软件的。我们坚信,保护软件版权与主张软件自由(使用)是根本一致的。只有
商业软件的兴旺发达,才能推进自由软件的健康发展,两者具有共同的敌人(即软件免费、共享)。(
注:自由软件不是免费共享软件,后者本质上属于商业软件范畴,所谓“先尝后付钱” 模式。)


oss.linuxpk.com 2008 年第 9 期  37

开源社区
今年,在软件自由日那一天,我们想组织一次爬山眺望活动,站在北京森林公园的山顶(上午 9 点正
开始爬山),眺望国家体育馆“鸟巢”,畅想、畅谈我国软件业发展的美好前景。我们欢迎微软朋友参加这
次活动,尽管这不可能发生。我们欢迎各方朋 友的到来。

20 件 Win 平台不行而
Linux 能搞定的事情

其实对于 Windows 与 Linux 之间孰优孰劣的争论一直就没有停止过,不过确实我们知道在很多方面


Linux 相比于 Windows 有着先天优势,而 Linux 的铁杆支持者更是可以将这些特点如数家珍的叙述出来,
不过作为不同的用户或者对于 Linux 的优势还了解的不是十分充分的时候,一个官方总结的 20 大 Linux
系统的优势相信一定可以帮助你坚定使用 Linux 的心,下面我们就一起来看一看吧。

1. 合法升级到最新版本却不花一分钱。

2. 同一个硬件平台上最新的操作系统却老的
更快。

3. 如果你不喜欢默认的桌面环境,可以非常
容易的自行安装其他的界面。

4. 一个命令就可以安装二十个程序。

5. 让系统自动为我所安装的软件更新。

6. 可以在 N 台机器上安装同一份 OS 拷贝而无


须担心协议限制或激活码。 不用考虑激活码这件事

7. 可以自由分发该操作系统及其他运行其上的软件而不会违犯法律,政治或伦理道德,因为他本身
就提倡这么做的。

8. 可以裸奔(无杀毒软件,反广告/间谍防护软件),以及可以数月不用重启机器,我甚至一直在
更新着安全补丁。

9. 从来不用磁盘碎片整理。

10.尝试软件,觉得不喜欢,就删掉他,而且知道他不会在什么注册表里留下一些垃圾可能导致把我
的系统搞慢。

11.犯了重大错误而导致全新重装系统,也不过花去了 1 小时不到的时间,因为我把我的数据放在了
独立于操作系统和程序的分区。

12.在一台 3 岁的老电脑上可以有如 vista 那样超酷的登录效果,少于 40 秒,这已经是将我输入用户


名和密码并登录计算在内了。


oss.linuxpk.com 2008 年第 9 期  38

开源社区

开源理念—每个人都能成为开发者
13.合法自定义任何我想要的东西,包括我最喜爱的程序。我甚至可以跟踪软件开发者并向他们问问
题,提意见,如果我愿意的话,也可以参与到真正的软件设计和开发进程中去。

14.超过 4 个的文字处理窗口,听音乐,玩超酷的桌面效果,联系一个大型的社区,并同时运行着
firefox,即时通讯以及 email 客户端。

15.使用"dpkg --get-selections > pkg.list"命令来获得一个完整详尽的已装软件列表,备份我的/


etc 和/home 文件夹到一个独 立分区,然后你就可以随时恢复你的系统了,而且超简单。

16.同时运行多个桌面,甚至可以让多用户同时登录并使用该机器。

17.无损调整分区大小而不用担心会丢失数据。

18.硬件可以使用超过五年而无须更换,我甚至有一些硬件都超过 10 年的历史了,还依然健在。


oss.linuxpk.com 2008 年第 9 期  39

开源社区

使用 LiveCD 版,安装图中仍可进行其他操作
19.可以在 OS 安装的同时浏览网页!

20.使用几乎所有的硬件,因为系统已经自带了驱动,而不必再去硬件供应商的主页上去苦苦搜寻。

看过这些 Linux 相对于 Windows 的优势之后是不是已经跃跃欲试了,那么正好可以乘着


Ubuntu8.10 正式版发布之际,将你的操作系统 更换之开源 Linux 平台,诚然我们都能理智的认识到目
前它还并不可能完全取代 Linux,但作为日常的办公以及听歌看片等基本娱乐需求的话,开源 Linux 平
台还是完全能够胜任的。


oss.linuxpk.com 2008 年第 9 期  40

开源社区

Larry Wall 和 Perl 语言

宋威
Perl 是一种开放源代码的、通用的脚本语言。凡是其它编程语言能够使用的地方,都有它的用武之地。
目前,它已经被用于人们能 够想象到的、各种各样任务的处理中,比如,股票市场、产品制造和设计、
客户支持、质量控制、系统编程、工资处理及库存管理 等各个领域,尤其是 Web 应用。

绝大多数 Web 站点管理员都会选择 Perl 作为他们常用的工具。当问到能否做某事时,他们往往会回答:


我可以写一个 Perl 脚本搞定它。并且,为数众多的 Web 程序员也认为,Perl 是一种不可缺少的粘合剂,
它使得整个 Web 紧紧联系在一起,其中不乏 Yahoo、Amazo N 这样的门户网站。

提到 Perl,它的作者 Larry Wall 表现得非常谦逊,他认为 Perl 只不过是一种“粗陋的”的语言,是一个


温顺的仆人,只是为了让它服从于人们的需要而存在。但是,Perl 的支持者们认为,如果没有 Larry
Wall,那么网络只是它现在样子的一个苍白的影子。

“艺术家”Larry Wall
在开源运动的发展过程中,Larry Wall 扮演了一个重要的角色。
他的同事们尊称他为开源运动的“极为重要的首领和睿智的长者” ,但
是,Wall 的领导风格却是谦卑的。这个显著的个性使得他区别于该
运动的其它领导人物。除此之外,Wall 的与众不同之处还表 现在,
他更喜欢称自己为艺术家(见图所示),更确切地说是文化艺术家。
Wall 认为,自己不仅仅为了编程而编程,而是为了解决 计算机编程
领域的文化问题而编程。

Wall 的与众不同与他的家庭背景和人生经历有着密切的关系。
Wall 出生于美国洛杉矶的一户牧师世家,他的父亲、祖父及好多祖
先都是牧师。这种潜移默化的影响使他从小就对哲学、艺术、语言,
以及宗教有着浓厚的兴趣,并善于思辨。此外,Wall 还认为,19 世
纪的作家 George Macdonald 及他的祖母对他也有着重要的影响,
● “艺术家”Larry Wall
尤其是他的祖母,她曾在自己 77 岁高龄时获得了比较文学的博士 学
● 需要是发明之母
位。
● Perl——后现代的胶水语言
1972 年,Wall 进入了华盛顿的一所高中,在那里他第一次接触
编程,当时他使用的是那所高中刚刚购置的一台可编程的计算器。高中毕业后,Wall 进入了西雅图太平
洋大学。在大学里,他的与众不同和兴趣广泛得到了充分的发挥。他最初学的专业是音乐,随后 转为化
学,接着又改为医学预科。他还在学校的计算机中心工作了 3 年,在那里,Wall 第一次接触到了一台
PDP-11 计算机。最后, 他为自己设计了一个名为“自然语言和人工语言”的专业,并最终获得了学士学位。
从入学到毕业,Wall 在西雅图太平洋大学度过了整整 8 年时光。


oss.linuxpk.com 2008 年第 9 期  41

开源社区
大学毕业后,怀着对自己设计专业的浓厚兴趣,Wall 和他的妻子先后进入了加州大学伯克利分校和
加州大学洛杉矶分校的研究生院继续深造语言学。那时候,他们最大的理想是翻译圣经。他们曾设想到
那些没有书面语言的、极端落后的地方去传播圣经。但是, 由于健康的原因,Wall 放弃了这个理想。由
于曾在西雅图太平洋大学的计算机中心工作过,所以 Wall 改行从事计算机。

需要是发明之母
Larry Wall 曾先后到了 Unisys 公司(美国大型计算机厂商之一)和 Jet Propulsion 实验室工作。令
人吃惊的是,Wall 这位曾经就读 于加州大学伯克利分校的开源运动的领袖,在伯克利期间却从未参加过
任何 Unix 的最初的开发工作,因此,工作后他基本上是从头 做起的。Wall 从离散事件模拟等经典问题
入手,开始苦练编程基本功。当他觉得自己已经有了一定的水平以后,就开始利用 Usenet 新闻组与世界
各地的程序员讨论各种各样感兴趣的问题,这些讨论使他受益匪浅,水平有了很大的提高。但是 Wall 逐
渐开始发现,当时的新闻阅读器(用于参加 Usenet 讨论的客户端程序)存在着很多问题,使用起来很麻
烦。于是,他决定写一个自己的新闻阅读 器。

经过努力,Wall 的新闻阅读器终于有了结果,他把该程序命名为“Rn”。自认为满意后,Wall 在
Internet 上公布了 Rn 及其源代码。然 后利用 Internet 广泛征求世界各地的编程高手的建议,并进行相
应的修改,接着再开始着手做升级版本。从软件开发的角度来看,这种开发过程可以被认为是开源软件
开发模式的早期原型。

Rn 的发布使 Wall 在程序员中赢得了较高的声望,但新的问题也产生了:随着 Rn 的逐步完善,其源


代码也越写越多,这无疑给 Wall 发布代码和各地的程序员下载代码造成了不小的麻烦。因为在 20 世纪
80 年代中期,人们一般通过 300~1200 波特率的 Modem 连接网络,不可能轻松地传递上兆的源代码。

这又一次搔到了 Wall 的“痒”处。于是,Wall 写了一个小


程序,称为“Patch”。Patch 带有可应用于以前源代码的、
压缩的、新的升级代码。它能够提高旧代码更新的速度,甚
至可以非常聪明地考虑以前的源代码变化。虽然 Wall 是一
个相当慎重的人,但这次却语出惊人,“Patch 改变了计算机
文化”,艺术家 Larry Wall 说。此外,开放源代码运动的倡
导者、著名的计算机专家 Eric Raymond 也认为,“Patch 是
Wall 最为成功的活儿,是 Wall 对开源文化最重要的贡献,
至少关键性地促成了被 Linux 验证了的现代化的高度分布的
开发模式。”

除了这些知名的程序外,Wall 还写过很多的小程序,如
用于写配置脚本的程序 metaconfig 等。在 Wall 加州
Mountai View 镇的家中, 他写的小程序更是随处可见,并
早已融入到他的日常生活中。Wall 喜欢教他的计算机如何
Richard Stallman 与 Larry Wall.jpg
应对房间中所发生的事情,比如,让计算 机根据指令来接
电话,与按门铃的人进行简单的对话,当甩干机结束工作时用一种汽笛声进行提示等,这样,Wall 可以


oss.linuxpk.com 2008 年第 9 期  42

开源社区
不必走很远 就能了解家里发生的事情。

Perl——后现代的胶水语言
在 Larry Wall 的众多作品中,最为知名的当属 Perl 语言。Perl 的起源可追溯到 1986 年,那时 Wall
是 Burroughs 公司附属公司的一个 系统管理员,负责美国国家安全局(NSA)的一个秘密项目,主要是解
决不同结构计算机之间的信息同步交换的有关问题。但是,NSA 不只希望信息的同步,还希望能生成关
于每次交换的报表,然而 Wall 现有的工具没有一样可以胜任这个任务。

当 Wall 回忆起那段经历时认为,也许当时可以用 awk 语言来完成那个任务。但为什么没有那样做呢?


他分析到,首先,非常“懒惰”,认为 awk 无法解决想要解决的问题;其次,非常“急躁”,认为如果用 awk
的话,则速度将慢得令自己无法容忍;最后,非常“狂妄” ,坚信自己可以做得更好。于是,Wall 决定自
己创造一种新的编程语言——Perl(Practical Extraction and Report Language),即 实用提取和报表语
言。有趣的是,上面所提到的懒惰、急躁和狂妄后来被 Wall 称为程序员的三大德行。

Wall 首先做的是选择一个好的切入点。他不想进行重复劳动,因为其它编程语言也都有各自的优势。
比如,C 语言适于底层操作;C ++则长于复杂工程的管理;而一些 Shell 更适合做一些简单的工作。通
过分析,Wall 发现 C 语言和 Shell 之间有极大的空白区域,无 论 C 还是 Shell 都无法很好地处理这部分
问题。后来,他进一步发现,这样类似的空白区域在计算机科学的其它领域中也大量存在。

于是,Wall 把 Perl 定位在可以连接计算机领域中所有大的空白区域的语言。这也是人们往往把 Perl


称作“胶水”语言的原因。

Wall 深厚的语言和哲学基础给 Perl 注入了不同寻常的特征。他称 Perl 为人造自然语言,是第一种后


现代语言。一方面,Perl 尽量地模拟人类解决问题的方式,让计算机像人一样思考,而不是传统意义上
的让人像计算机一样思考。这意味着这门语言为解决每个可 能的问题提供许多不同的途径,即 Perl 的口
号,“有不止一条路径可以实现”。Wall 认为,如果人们想用同一种语言开处方、做诗、 写报纸专栏和杂
志专题的话,该语言就必须具有足够的灵活性。这与人们在计算机科学中学到的二值逻辑却大相径庭,
因为当时的计算机教育使学生们认为任何冗余都是有害的、恶劣的。而 Wall 并没有这样认为,他从自然
语言的角度给 Perl 赋予了足够的灵活性 。另一方面,Perl 沿着一门自然语言的道路发展,它吸收了长期
以来其它语言的优点。

正像 Wall 所说的那样,与计算机语言不同,自然语言经常会吸收其它语言的有益成分。Perl 也正是


如此,其成分有些来自 Unix,有些来自 C++,有些则来自 BASIC 等。总之,Perl 以它折衷、包容的方
式,在每一个隐蔽处和裂缝中寻找哪怕一点点的真理。

Perl 的诞生使 Wall 顺利地完成了 NSA 的项目,但真正使 Perl 深入人心的还是在 Internet 逐渐普及
以后,其中最为著名的要数 David F ilo 和 Jerry Yang 这两个斯坦福大学的本科生创造的 Yahoo。他们
用 Perl 来生成 Web 页面,为执行 Web 数据搜集的机器人编写代码,并且维护 Web 地址的数据库。Filo
认为:“如果没有 Perl,Wall 发明的通用编程语言,Yahoo 是不可能开始的。”

Perl 的成功,使 Wall 在计算机界获得了较高的声望。1996 年,Wall 获得了“Dobb 博士杰出程序设


计奖”;1998 年,Wall 获得了自由软件基金会 FSF 的首届“自由软件奖”。此外,每天都会有许多用户给


oss.linuxpk.com 2008 年第 9 期  43

开源社区
Wall 写信,表达他们对 Perl 的喜爱。一位用户在信中写道:“它(P erl)改变了我的生命。我曾经讨厌编程,
现在编程又是一件快乐的事情。”

取得成功后,Wall 并没有像绝大多数人那样选择开公司赚钱,而是致力于著书立说和 Perl 的继续研


究工作。这使得 Wall 并不像人们想象的那样富有,至今他还在开着一辆 1977 年的本田汽车。

Wall 的工作得到了出版商 O'Reilly 的资助,这些资助包括对 Perl 语言的研究、举办有关 Perl 语言的


国际会议,以及出版 Perl 语言的书籍等。

当然,和其它事物一样,Perl 也不是没有反对者。它的反对者们认为,Perl 不够清晰,可读性不好。


对此,Wall 经常只是付之一笑。当然,人们也会发现他曾引用过托尔斯泰的话作为还击:“这真奇怪,托
尔斯泰写道,漂亮就是好的这个错觉是如此的完美!”此 外,Wall 在《Perl 语言编程》一书的封面上也用
一只骆驼表达了类似的观点,即丑陋但却实用。

总之,Larry Wall 和他的 Perl 语言的出现令人耳目一新,从一个全新的角度推动了开源运动的发展。正如 Wall


所说的那样:“它(Pe rl)让你富有创造力,给你众多选择。你常用的计算机语言就像一种训练,它会把你带到它到
过的任何地方。而 Perl 则更像一辆偏离大路的汽车,将把你带到你想去的地方,即使那里没有任何正式的道路。
” 究竟 Larry Wall 和他的 Perl 还会把开源运动带往何方呢?我们拭目以待。


oss.linuxpk.com 2008 年第 9 期  44

开源社区

从 ObjectWeb 看开源

许洪波
近年来,开源软件作为软件产业的一支新军,正受到越来越大的关注。可是在我国,大多数人对开源软
件的认识仍主要停留在开源软件是源代码开放,可以免费地使用的软件这个层面上。虽然我国各级政府
也对以 Linux 为代表的开源软件给予了大力的扶持,对于开源软件究竟能给我们什么样的机会,基于开源
软件的盈利模式是什么,以及开源软件的潜在风险是什么等诸多问题,许多人仍缺乏清晰和系统的认识。

ObjectWeb(国际开源中间件联盟,www.objectweb.org,现更名为 OW2)是国际中间件领域最著名的开
源组织之一,获得了法国政府和欧盟的大力支持。法国政府及欧盟已将 ObjectWeb 作为他们在基础软件
领域核心竞争力的重点战略来打造。本文的作者许洪波教授是 ObjectWeb 的理事,与 ObjectWeb 相关的
决策人员有着密切的合作和交往。本文旨在通过介绍、分析 ObjectWeb 的发展和运作,为我国政府相关
决策机构发展开源软件提供参考意见,并通过开源软件,对如何发展适合我国国情的基础软件产业提出
建议。

认识 ObjectWeb
ObjectWeb 是由布尔公司(Bull)、法国电信(France Telecom)、法国国家计算机与自动化科学
院(INRIA)于 2002 年共同创建的 非盈利组织,其目的是为了促进新一代开源中间件的研发和推广。迄
今为止,国际开源中间件联盟拥有来自三大洲,超过 60 家的企业和学术界成员,以及来自 80 多个国家
的三千余名个人成员。国际开源中间件联盟的目标是提供高质量、稳定可靠、具有最佳性价比的独立解
决方案与软件。

ObjectWeb 提供了约 80 多个项目,超过四百万行的源代码。ObjectWeb 的项目包含了


INRIA、BULL、法国电信等法国大型科学研究院 和企业十多年的科研成果,获得了法国 RNTL 科技创新
基金、欧盟 ITEA 科研基金和欧盟 IST 科研基金的大量支持,广泛应用于法国电信、法国内政部、法国财
政部、法国军方、欧洲电子教育门户等大型单位的核心业务支撑系统,并获得了 Thales 公司、BULL 公
司、 美国 Red Hat 公司等大型系统集成公司和软件厂商的大力支持。尽管如此,作为一家欧洲组织,
ObjectWeb 强调技术的领先性和产品 的稳定性,忽视市场宣传的作用,由此 ObjectWeb 在中国鲜为人
知,并不具备很好的市场知名度。

2005 年 11 月,在中国科技部的主持下,国家“十五”863 计划的支持下的“四方国件”联盟与


Objectweb 于 2006 年 10 月合并,创建 OW2 联 盟。2007 年 5 月 3 日,OW2 联盟在布鲁塞尔完成组
建并召开了首届理事会。新创建的 OW2 联盟由 12 个战略会员组成,包括中国的发起会员:北京大学、
北京航空航天大学、国防科学技术大学和中国科学院软件研究所及中创软件股份有限公司,其他发起会
员有法国的 BULL 公司、INRIA、法国泰雷斯集团(Thales Group),另外红帽公司(Red Hat)也是联
盟的战略会员之一。

重建后的 OW2 联盟拥有欧洲、亚洲、南美洲及北美洲超过 100 个业内组织会员及 6000 多名开发者


oss.linuxpk.com 2008 年第 9 期  45

开源社区
的强大研发队伍,拥有超过 100 个大型技术项目,包括 StarCCM, StarWebServices, Xservice suite,
OncePI, Istx, JOnAS, Jonas/PKUAS, prototype ,Lomboz, Sy nc4j, eXo Platorm, Xwiki 和 SpagoBI
等项目。其中一些合作项目已经进入市场运作,促进了系统集成商、设备制造商及终端用户行业解决方
案的执行。

法国如何发展基础软件产业
首先,很重要的一点,既然法国政府对 ObjectWeb 相关的中间件研发进行了大量的投入,为什么不
希望通过产业化的模式获得市场效益,而将其免费地向全世界公布出来了?带着这个疑问,笔者作为
ObjectWeb 的特邀嘉宾,在参加 ObjectWeb05 年会时询问了法国工业部信息与软件产业负责人
Emmanuel Neuville 先生。Neuville 先生谈到:第一,中间件是现代网络应用和分布式系统的核心技术,
对应用信息系统的重要性,如同空气和水一样。假如我们赖以生存的空气和水被一个国家甚至一个公司
垄断的话,那实在是太危险了,我们没有选择,必须开发自己的核心技术,所以法国和欧盟投入了巨大
的力量来支持中间件技术和 ObjectWeb 的发展。

第二,当前,世界上几乎所有的著名软件公司和技术都来自美国,这对法国和欧洲的产业是相当不
利的。由于美国的公司在软件市场上占据了垄断地位,我们无法在产品的层面和美国的公司竞争。开源
是我们采取的一种手段,使得我们的核心技术被广大的市场 所接受的同时成熟起来,并成为国际标准。
我们将它开源,让全世界都可以因此受益。

第三,我们不仅要看直接的经济效益,也要关注非直接经济效益。通过开源的模式有助于核心技术
的创新,大大降低了法国和欧洲广大中小企业的技术使用门槛,并且使得法国和欧洲的系统集成商和软
件服务商掌握了核心技术,对提高他们的核心竞争力有很大的帮助。更重要的是,它使得法国在基础软
件领域和未来标准的制定中掌握先机,使得企业和政府都获得了巨大的收益。

ObjectWeb 产业链
ObjectWeb 构成的产业链由下图所示,产业链的核心组成部分包括政府、研究机构、最终用户、教
育机构、系统集成与解决方案提供商五大环节。

ObjectWeb 产业链图示


oss.linuxpk.com 2008 年第 9 期  46

开源社区
法国政府在支持 ObjectWeb 的发展,打造 ObjectWeb 产业链的过程中,非常注意结合中短期的市
场需求、长线的科研创新,关键客户 的验证,系统集成商的支持和建立可持续发展的社区这几个关键部
分。以 ObjectWeb 的旗舰产品 JonAS 为例:JonAS 的开发和推广的 关键部分包括 INRIA,BULL,法国
电信,Thales 等服务解决方案提供商和 ObjectWeb 开源社区。在产业链的构造过程中,他们让 BULL 公
司专注于 JonAS 中、短期的产品开发,确保 JonAS 具有商业软件所具有的质量和稳定的发展策略;让法
国电信这样的大型国有公司作为 JonAS 的战略用户(法国电信有一条规定:只要能用 JonAS 的地方,就
不能用其他的中间件),确保 JonAS 能满足苛刻的商业需求;让国有的研究机构 INRIA 专注于长线的科
技研发,确保 JonAS 在技术上的持续创新和领先性。最后通过 ObjectWeb 以开源的方式进行普及,以图
获得最大的市场份额和客户群体。法国政府希望通过这样的努力将他们的技术变成国际标准,打破超级
大国在核心技术上的垄断,并大大降低法国与欧洲在使用基础技术上的门槛,从而达到提升法国在基础
软件领域的国际地位和核心竞争力的目的。

我们的机会与挑战
随着中法友好合作进程,ObjectWeb 也在积极寻求和我国的广泛合作。ObjectWeb 和华南理工大学
在中间件等开源软件领域已经开展了一系列紧密的,富有建设性的合作,共同开发和建设中欧基础中间
件平台。我们应该把握这个契机,有效地借鉴法国政府在利用开源发展本国基础软件核心技术上的成功
模式,通过开源的方式和两国的共同合作,摸索出一条适合我国国情的开发基础软件核心技术的发展模
式。本文针对我们应该怎样通过开源的模式来支持我国在基础软件,尤其是中间件领域的发展提出一些
看法和建议。

中间件是现代化信息应用系统的基础,尤其是互联网应用的关键共性技术。发展中间件对我国的国民
经济意义重大,它可以帮助提升我国软件产业核心竞争力、有效维护国家信息安全、并推动相关产业信
息化进程。从另外一方面来说,中间件属于新兴的信息软件技术,中间件是三大基础软件中最有可能取
得突破的,为我国在基础软件领域赶上世界先进水平提供了一个千载难逢的机会。我们总结以往的工作
经验,借鉴 ObjectWeb 的成功运作经验,提出以“国际合作、长短结合、用户驱动、开源普及、共赢生
态” 为核 心的中间件基础软件平台建设思路。

• 国际合作

打造我国在基础软件领域的核心竞争力,使得我国可以在软件领域和世界领先水平抗争是一个很艰巨
的任务。正如 Emmanuel Neuvi lle 先生在和笔者谈到的一样:法国在这个领域进行了长期艰苦的努力,
可是并不很成功。假如我们各自为战,我们在国际舞台上仍然会是二等公民。可是假如我们有效地整合
我国和法国、欧洲在基础软件领域的资源,我们就有可能在中间件领域和其他的领域形成全球的主要力
量,成为驱动国际相关标准发展的生力军。开源给了我们一个机会,使得我们不仅可以共同分享源代码,
并且可以通过双方的交流和合作,掌握基础软件设计的核心机制和理念,这对我国在基础软件领域赶超
世界先进水平提供了良好的机会。

我们有人或许会有这样的疑问:既然是开源的,我们拿来用不就好了吗?为什么需要我们共同参与开
发呢?中间件是非常复杂庞大的系统。我们不可能通过阅读源代码的方式去掌控系统的核心机制和设计
思想,并驱动其未来的发展。决定系统软件的优劣的关键因素在于系统底层关键机制的设计,系统的架



oss.linuxpk.com 源 2008 年第 9 期  47

开源社区
构和工程经验,这一切都不可能从使用第三方的软件,甚至包括源代码中获得。获得知识的唯一途径是
参与,而通过开源和建立一个中欧广泛合作的平台会大大缩短我们掌握关键技术的进程。

• 长短结合

长短结合意味着我们必须通过在产业链各方的清晰分工,有效地平衡中短期的市场需求、经济利益和
长期的基础领域研究和创新需求。长期以来,我国在软件领域重视产业化的指标而忽视基础领域的研发
和创新,这样的结果是我们的软件和产品通常只是跟随者 ,我们在国际标准组织也鲜有发言权。我们可
以考虑参照 JonAS 的做法,将产品开发和基础软件的研究进行清晰的分工和资源整合,既保证我们的产
品可以满足当前市场和客户的需求,又加强在基础领域的研究,以图我们在世界未来的软件产业竞争中
有一席之地。

用户驱动:任何技术和产品的成熟都必须经过市场的检验。法国政府敢于将法国最大的企业的核心系
统用来检验其开源中间件产品 JonAS,足见其战略胆识。他们的逻辑是:假如 JonAS 可以满足法国电信
的业务要求,它就几乎可以满足任何其他系统的要求。可是 ,法国电信是如何看待这件事情的呢?在我
和法国电信 IT 部门负责人的交流过程中,他们给了我支持 JonAS 三个主要理由:第一,我们是国企,当
然要支持政府的战略和决定,其次,电信的竞争是服务的竞争,而软件是服务的基础,通过对中间件核
心机制的掌 控可以加强我们的核心竞争力,尤其是加强我们推出新一代电信服务的能力。第三,使用
JonAS 大大降低了我们的技术使用门槛和费用,对提高我们的盈利水平有很大的帮助。由此可见:关键
用户的支持不仅是促使自主知识产权软件产品成熟的重要因素,同时,它也可以有效地加强关键用户的
核心竞争力,所以这是一个双赢的局面。

• 开源普及

Linux、FireFox、Apache、Eclipse,ObjectWeb 等著名开源软件的成功表明:开源是将基础软件
以廉价,快速的方式让广大的市场接受的有效途径,开源为基础软件研究成果产业化提供了一个有效的
途径,使得广大的用户收益。同时,市场用户的广泛使用也会帮助我们在技术上的进一步成熟和创新。
更重要的是,开源为我们提供了一个机会,使得我们的技术和产品为国际社会所认识,并有机会成为国
际和工业标准,这对我们国家在信息软件领域的核心竞争力具有重要意义。

• 共赢生态

开源的目的在于通过开源这一途径来打造一个健康的,可持续发展的生态环境。在我国,许多人对开
源抱有怀疑的态度:开源是免 费的,我们靠什么盈利?我们为什么要将我们的核心技术给我们的竞争对
手使用?我们可以从以下几个方面看待上述问题: 首先 ,开源是一种后发制人的有效竞争手段。通过开
源我们可以在基础软件等核心技术领域打破国外厂商在高端软件领域的市场垄断,从而降低我国的政府
和企业使用核心技术的门槛;其次,通过对核心技术的普及和推广可以改变我国广大的系统集成商和软
件厂商 缺乏核心技术,竞争层面低的局面,增强他们的核心竞争力和盈利水平;第三,通过开源这一方
式可以将我们的核心技术最大限度普及到市场,有助于建立起围绕核心技术的可持续发展的生态圈,这
对加强我国的核心技术的成熟,以及进一步的创新与发展有很大的帮助。

以 BULL 公司在 ObjectWeb JonAS 上的经验为例:BULL 公司曾经是全球最著名的主机(Main


Frame)生产厂商。在 90 年代末期,BULL 公司在大型机上的业务逐年萎缩,遇到了巨大的挑战。BULL


oss.linuxpk.com 2008 年第 9 期  48

开源社区
公司在决定新的战略时选择了 Java 中间件,他们相信 Java 中间件作为新兴的技术,会给 BULL 带来未来
的核心技术。BULL 公司用了两年的时间,在 1999 年公布了 JonAS 1.0。之后,JonAS 作为 ObjectWeb
的 核心组件,在 BULL、法国电信和 INRIA 的支持下获得了长足的发展。BULL 公司将其 Java 中间件以开
源的形式贡献出来,不仅向世界证明了 BULL 在核心技术上的领先性,使得 BULL 在服务器市场上可以和
IBM 这样的巨型公司进行竞争,同时使 BULL 公司进入了高端的 服务领域,到今天,服务已经成为了
BULL 公司的核心业务,成为最为盈利的部门之一。更为有趣的是,BULL 公司虽然和欧洲另一家巨型公
司 Thales 虽然是竞争对手,他们却共同合作开发 JonAS,通过合作的方式分享在中间件基础软件上的研
发费用。通过以上例子我们可以看到,通过开源我们可以建立一个健康,可持续发展的产业链,使得产
业链上的各方都获得相应的价值。

需要解决的问题
那么,是不是所有软件都适合开源呢?答案是否定的。我们认为,具有以下的特征的项目开源才能具
有显著效果:

● 技术相对成熟;

● 市场适用面广;

● 相关技术和产品在当前市场竞争中处于弱势;

● 大规模推广后有机会在相关产业和国际标准中扮演重要角色。

对开源项目的建设我们需要关注和解决以下的问题:组织模式,知识产权,版权与专利,法律风险,
运作机制,产业链的建设等。

通过对 ObjectWeb 运作机制的讨论,我们可以看到法国政府在利用开源促进本国基础软件领域的发


展进行了一系列有效的尝试。它山之石,可以攻玉。我们可以在和 ObjectWeb 的合作过程中,有机地汲
取其成功的经验,探索出一条符合我国国情的基础软件研发和推广之路,借助开源的力量,打造具有世
界先进水平的基础软件平台。


oss.linuxpk.com 2008 年第 9 期  49

知识学堂

Linux 下设备完全驱动(四)

郄晓烨
尽管各种数码设备越来越多,但是 Linux 在对它们的配置上还没有做到像 Windows 一样方便,很多人正
是因为心爱的数码相机无法在 Linux 下使用,而不得不保留一个 Windows 系统。所以,掌握如优盘、移
动硬盘、数码相机等设备在 Linux 下的驱动方法,对于熟练使用 Linux 而言是必备的技能。

这一讲将会介绍常见 USB、IEEE1394、PCMCIA 等移动设备的驱动概念和安装技巧,为读者更好地配置


和使用这些设备提供帮助。

USB 设备驱动概述
USB 是通用串行总线(Universal Serial Bus),是在 1994 年由 Intel、NEC、微软和 IBM 等公司共
同提出的。USB 的目的在于将众多的接口(串口、并口、PS2 口等),改为通用的标准。它仅仅使用一
个 4 针插头作为标准插头,并通过这个标准接头连接各种外设,如鼠标、键盘、游戏手柄、打印机、数
码相机等。USB 接口的特点是支持热插拔,支持单接口上接多个设备等。

USB 的优点此处不再赘述,我们主要来看一看 Linux 对 USB 的支持。USB 采用串行方式传输数据,


USB 1.1 最大数据传输率为 12Mbps,Linux 内核为 2.4 以上版本都可以支持。USB 2.0 规范是由 USB
1.1 规范演变而来的,它理论上速度较 1.1 提高了 40 倍,达到了 480Mb/s,但目前常见的 USB 2.0 设备
只能达到理论值的一半。Linux 内核 2.4.19 版本开始对 USB 2.0 进行支持。

除了内核的版本要对 USB 接口进行支持之外,还要确定目前的系统是否编译了 USB 的驱动模块。如


果让 Linux 系统支持 USB 设备,还需要一些驱动模块。我们都知道内置的驱动程序一般都
在/lib/modules/2.4XXX/kernel/drivers 目录中。这个目录中会有 usb 及几个 子目录,可以从中找到
以下的几个 USB 关键基础模块:

usbcore.o 所有 USB 设备都需要的基本驱动模块;

host/ehci-hcd.o USB 2.0 设备支持;

host/usb-uhci.o Intel VIA 等芯片组 USB 部分的驱动;

host/usb-ohci.o iMac、SiS、Ali 等非 Intel 芯片组 USB 部分的驱动;

storage/usb-storage.o USB 接口的存储设备,如移动硬盘、U 盘等都会用到;

hid.o USB 接口的键盘、鼠标等人机交互设备的基础支持。

在该目录下还有一些具体设备的驱动程序,分别驱动不同设备:

# ls -p /lib/modules/2.4.21-4.EL/kernel/drivers/usb/
acm.o CDCEther.o hpusbscsi.o microtek.o rtl8150.o usbcore.o wacom.o
audio.o dabusb.o kaweth.o pegasus.o scanner.o usb-midi.o


oss.linuxpk.com
源 2008 年第 9 期  50
知识学堂
brlvger.o hid.o kbtab.o powermate.o serial/ usbnet.o
catc.o host/ mdc800.o printer.o storage/ uss720.o

比如,scanner.o 模块对应的就是 USB 扫描仪的驱动;audio.o 对应 USB 接口的扬声器驱动。

从上面看来,Linux 对 USB 设备的支持一般分为两个部分,首先通过通用的 usbcore 等模块驱动


USB 芯片,这样识别出 USB 设备;然后再通过具体的驱动程序驱动该设备。所以,常驻内存的 USB 驱动
模块为 usbcore、ehci-hcd 和 usb-uhci 等。

# lsmod
Module Size Used by Not tainted
... ...
hid 22212 0 (unused)
input 5888 0 [keybdev mousedev hid]
ehci-hcd 20104 0 (unused)
usb-uhci 26412 0 (unused)
usbcore 79392 1 [hid ehci-hcd usb-uhci]
... ...

在这些 USB 基础驱动模块已经加载的情况下,再插入优盘等 USB 设备才能被识别出来,系统将会自


动加载相对应的驱动。如果插入优 盘没有反应,那么可能是这些 USB 基础驱动没有加载,可以手动通过
以下方式加载:

# modprobe usbcore
# modprobe ehci-hcd
# modprobe usb-uhci
# modprobe hid //如果是 USB 鼠标或键盘

USB 存储设备的驱动
USB 存储设备使用的非常广泛,例如优盘、移动硬盘、读卡器、数码相机等,它们都是在加载了 USB
的通用驱动后,再使用/lib/mod ules/2.XXX/kernel/drivers/usb/storage/usb-storage.o 作为存储
的驱动模块,该驱动会将存储设备模拟成 SCSI 设备。

需要注意的是,只有在系统加载了上面叙述的几种 USB 基础驱动后,该 USB 设备才可以被认出,然


后系统会将它们模拟成 SCSI 设备( 主要原因是系统允许 SCSI 设备热插拔),如 SCSI 硬盘、SCSI 光驱
等。

下面先来看一下这类存储设备还需要哪些配套驱动模块。这些模块分散
在/lib/modules/2.XXX/kernel/drivers 目录中:

usb-storage.o USB 对与存储部分的驱动模块;

scsi_mod.o 对 SCSI 设备的支持;

sd_mod.o 对 SCSI 硬盘支持模块,针对 USB 硬盘;

sr_mod.o 对 SCSI 光盘支持模块,针对 USB 光驱;

sg.o SCSI 序列的通用支持模块;

ide-scsi.o 该模块可以把 IDE 设备模拟成 SCSI 接口。


oss.linuxpk.com 2008 年第 9 期  51

知识学堂
通过查看/lib/modules/2.XXX/modules.dep 文件,可以查看上述这些模块是否存在。一般情况下
这些模块已经被编译,否则需要重新编译内核模块。

在正确地装载了驱动以后,可以通过访问/dev/sd?设备来访问优盘或移动硬盘。通常情况下,通过
访问 sda1 来访问移动硬盘或优盘的第一个分区。在 USB 基本驱动存在的情况下插入优盘,就可以看到
如下信息:

usb.c: USB device 7 (vend/prod 0xea0/0x6803) is not claimed by any active driver
Starting timer : 0 0

Vendor: Netac Model: OnlyDisk Rev: 1.11

Type: Direct-Access ANSI SCSI revision: 02


Starting timer : 0 0
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 32256 512-byte hdwr sectors (17 MB)
sda: Write Protect is off

上面这一段是 usb-storage.o 和 SCSI 驱动在起作用,我们可以看到优盘被认成是 sda,要使用它可


以先查看分区表:

# fdisk -l /dev/sda
Disk /dev/sda: 16 MB,16515072 bytes
2 heads, 32 sectors/track, 504 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 503 16080 1 FAT12
# mkdir /mnt/usb
# mount -t msdos /dev/sda1 /mnt/usb 该优盘得类型为 FAT12

之后就可以通过访问/mnt/usb 来访问优盘了。注意,如果要拔掉优盘或移动存储设备,请先
umount 然后再拔出,这样可以保证数据全部被写入,否则系统会出错,数据可能不完整。

# umount /mnt/usb

USB 数码相机的驱动
数码相机类型繁多,但是在 Linux 下使用数码相机有比较简便的方法。我们知道 USB 接口是数码相
机的主要接口,在 Linux 中访问数 码相机,通常可以通过下面两种方法。

1. 使用专门软件

Red Hat Linux 中自带的 gtkam 软件是一个提供了数码照相机图形化界面的程序,它支持 100 多


种数码相机。gtkam 可以直接与数码照 相机相连,允许直接打开、查看、并删除图像。在 Red
Hat 9.0 的光盘中,有 gtkam 的 RPM 包:

# ls gtkam*
gtkam-XXXX.i386.rpm gtkam-gimp-XXXX.i386.rpm
# rpm -ivh --aid gtkam*


oss.linuxpk.com
源 2008 年第 9 期  52
知识学堂
# rpm -ivh --aid --force gphoto2-XXXX.i386.rpm

gtkam 基于 gphoto,有时无法使用 gtkam 的原因是因为 gphoto 没有安装或模块被覆盖,所以


需要重新安装 gphoto。

# gtkam

单击 gtkam 的“camera”→“Add Camera”可以添加数码相机,然后在弹出的窗体中单击


“Detect”,测试数码相机的连接类型。最后单击“OK”,就可以看到数码相机中的照片了。

使用 gtkam 连接 Kodak DX6340 相机,看到存储卡中的照片。选择照片,单击保存就可以把照


片保存到硬盘上。

我们也可以从 http://sourceforge.net/project/showfiles.php?
group_id=8874&release_id=209817 获得 gtkam 的最新版本及源代 码,下载后可以使用其中
的 install.sh 来进行安装。

2. 把数码相机当做是 USB 存储设备

还有一种方式就是把数码相机当做是 USB 存储设备,如优盘、读卡器等,这样就可以像访问优盘


那样来访问数码相机:

# mount -t vfat /dev/sda1 /mnt/usb

但是,采用这种方式极有可能遇到不能支持的数码相机,比如笔者使用的 Kodak DX6340 数码相


机,插入 USB 口之后出现以下信息:

usb.c: USB device 2 (vend/prod 0x40a/0x570) is not claimed by any active


driver.

对这种问题的解决办法不只是可以驱动不支持的数码相机,像不支持的存储设备也都可以使用,比
如优盘、读卡器等。

(一)使用 lsmod 确定 USB 基本驱动模块已经装载,如果没有使用以上的命令装载:

# modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage


# modprobe ide-scsi; modprobe scsi_mod; modprobe sd_mod

(二)使用 cat /proc/bus/usb/devices 得到当前系统 USB 总线上的设备信息,尤其注意


Vendor、ProdID、Product 等信息:

C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA


I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=040a ProdID=0570 Rev= 1.00
S: Manufacturer=Eastman Kodak Company


oss.linuxpk.com
源 2008 年第 9 期  53
知识学堂
S: Product=KODAK EasyShare DX6340 Zoom Digital Camera
S: SerialNumber=KCKCJ33400274

数码相机也是一种存储设备,然而对于 Linux 下的移动存储设备都是通过 usb-storage.o 驱


动的,然后模拟为 SCSI 设备。如果数码相机无法使用,通常是 usb-storage 驱动未包括此
厂商识别和产品识别信息(在类似 skel_probe 的 USB 最初探测时被屏蔽了)。对于 USB 存
储设备的硬件访问部分,通常是一致的。所以,要支持数码相机,仅需要修改 usb-storage
中关于厂商识别和产品识别列表部 分。

USB 设备识别信息中重要的部分如下:

P: Vendor=040a ProdID=0570 Rev= 1.00


S: Manufacturer=Eastman Kodak Company
S: Product=KODAK EasyShare DX6340 Zoom Digital Camera

若/proc/bus/usb 下没有相应 USB 设备信息,应输入以下命令将 USB 设备文件系统手动挂


装到/proc/bus/usb:

# mount -t usbdevfs none /proc/bus/usb

(三)编辑 drivers/usb/storage/unusual_devs.h 文件。下面是所有已知的 USB 产品登记列


表,格式如下:

UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax,


vendor_name,
product_name,
use_protocol, use_transport, init_function,

Flags).

usb-storage.o 就是根据这个列表来识别各种设备。这样,可以将刚
才/proc/bus/usb/devices 文件中得出的信息添加在上面,重新编译模块,让 usb-
storage 驱动去认识和发现它。

UNUSUAL_DEV( 0x040a, 0x0570, 0x0001, 0x0001,


"Eastman Kodak Company",
"KODAK EasyShare DX6340 Zoom Digital Camera",
US_SC_SCSI, US_PR_CB, NULL,
US_FL_FIX_INQUIRY | US_FL_START_STOP | US_FL_MODE_XLATE ),

注意,添加以上几句代码的位置一定要正确。经过比较发现,usb-storage 驱动对所有注册
都是按 idVendor、 idProduct 数值从小到大排列的,因此添加代码也要放在相应位置。

(四)重新编译模块,之后插入的数码相机就可以像其它优盘一样作为 USB 存储设备去访问。


oss.linuxpk.com
源 2008 年第 9 期  54
知识学堂
# make dep
# make modules
# make modules_install

USB 摄像头的驱动
在内核源文件中,自带了一部分摄像头的驱动,目前大量的杂牌摄像头都可以使用 OV511 的驱动模
块。如果 USB 摄像头无法使用,则 可以试试重新编译模块。下面就以一个没有驱动程序的摄像头为例,
尝试使用 OV511 驱动模块驱动。

1. 获取内核源码

先从 Red Hat 光盘或 kernel.org 获取当前版本的内核源码,并安装:

# rpm -ivh kernel-source-2.XXX.rpm

或者

# tar zxvf linux-2.XXX.tar.gz

2. 运行

到源码目录中运行:

# make menuconfig

或者

# make xconfig //需要在 X-Window 下

3. 选择 USB 的模块

选择要编译的驱动可以查看说明书,确定摄像头芯片是什么型号,选定 OV511 摄像头的支持。在


USB support 下可以选择多种驱动的 模块,比如常用的 OV511 芯片的摄像头驱动、USB 打印机
的驱动等。

4. 保存、编译和安装
# make dep
# make modules
# make modules_install

5. 加载驱动
# modprobe ehci-hcd
# modprobe usb-uhci
# modprobe ov511
# cat /proc/devices

接着运行 gnomemeeting 等工具,选择/dev/video0 或/dev/video1 作为摄像头设备文件,这样摄


像头就可以使用了。


oss.linuxpk.com
源 2008 年第 9 期  55
知识学堂
外置 USB 光驱及刻录机的驱动
USB 光驱与其它的 USB 存储设备使用类似,只不过 USB 光驱会被识别为 SCSI 光驱,如/dev/sr0 或/
dev/scd0 等设备,它需要 sr_mod.o( SCSI CD-ROM 设备)驱动模块。

# modprobe sr_mod //如果 sr_mod 模块没有编译,请重新编译内核,在 SCSI 部分


# mount -t iso9660 /dev/scd0 /mnt/cdrom

关于外置刻录机驱动详见本刊第七期“Linux 完全驱动(二)”:

# mkisofs -Jv -V examplecd -o example.iso /root/

将/root/目录下的文件做成一个名叫 example.iso 的光盘镜像文件,该文件的卷标为 examplecd;


还可通过下面命令将该文件加载到/mnt/iso 文件夹中。

# mkdir /mnt/iso
# mount -t iso9660 -o loop example.iso /mnt/iso

在调整完/mnt/iso 文件的内容后使用下面命令:

# umount /mnt/iso

最后使用 cdrecord 命令刻录:

# cdrecord -scanbu s

查看 SCSI 总线中刻录机的配置信息:

Cdrecord 2.0 (i686-pc-linux-gnu) Copyright (C) 1995-2002 J?rg Schilling


Linux sg driver version: 3.1.25
Using libscg version 'schily-0.7'
cdrecord: Warning: using inofficial libscg transport code version (schily - Red
Hat-scsi-linux-sg.c-1.75-RH '@(#)s
csi-linux-sg.c 1.75 02/10/21 Copyright 1997 J. Schilling').
scsibus0:

0,0,0 0) 'HL-DT-ST' 'RW/DVD GCC-4240N' 'E112' Removable CD-ROM

0,1,0 1) *

0,2,0 2) *

0,3,0 3) *

0,4,0 4) *

0,5,0 5) *

0,6,0 6) *

0,7,0 7) *

从上面可以看到目前光驱在 SCSI 总线的参数,然后根据参数输入下面的命令刻录光盘:


oss.linuxpk.com
源 2008 年第 9 期  56
知识学堂
# cdrecord -v -eject speed=24 dev=0,0,0 example.iso

“speed=24”是以 24 速来刻录光盘,“dev=”后加上刚才显示的刻录机的 SCSI 参数。如果是外置


DVD,则应使用 dvdrecord 命令,其用法与 cdrecord 相同。

# rpm -ivh dvdrecord-0.1.2-12.i386.rpm


# man dvdrecord 查看帮助

USB 鼠标和键盘的驱动
1. 鼠标的驱动

在 Red Hat Linux 中,可以使用 mouseconfig 命令来配置鼠标,选择 USB 接口鼠标即可。

# mouseconfig

如果使用手动的方式来配置,可以人工加入以下模块:

# modprobe hid
# modprobe input
# modprobe usbmouse
# modprobe mousedev

2. USB 键盘的驱动
# modprobe hid
# modprobe input
# modprobe usbkbd
# modprobe keybdev

3. IEEE1394 设备的驱动

IEEE1394 又称 Firewire(火线)、i-Link(Sony 的叫法),它跟 USB 接口类似,目前可以提供


400Mb/s 的带宽,虽然在理论上它较 US B 2.0 的 480Mb/s 的速度慢一些,但是在实际使用中,
Firewire 要比 USB 2.0 的设备快不少,所以仍然有很多设备配备这种接口,如 D V(数字摄像机)
和移动硬盘等。

与 USB 相比,Firewire 的通用性不够强,得到的支持也较少。一般主板上不带该 Firewire 的芯片,


通常是购买带 1394 接口的 PCI 卡来 支持 1394 的设备。对于 1394 设备,Linux 内核 2.4.10 之
后的版本都可以支持。IEEE1394 的驱动放在以下位置:

# ls /lib/modules/2.XXX/kernel/drivers/ieee1394
amdtp.o dv1394.o ieee1394.o raw1394.o video1394.o
cmp.o eth1394.o ohci1394.o sbp2.o

IEEE1394 的驱动方式较 USB 大同小异,只是首先加载的是对 1394 总线的驱动(ieee1394.o)


和 1394 芯片的驱动(ohci1394.o)。如果使用 1394 卡连接 DV,那么需要 1394 视频驱动
(video1394.o)和 DV 视频 I/O 驱动(dv1394.o);如果需要访问的是 1394 外接硬盘或 CD-
ROM、刻录机等,则需要对 SBP-2 协议的支持(sbp2.o);如果使用 1394 接口的以太网卡,则
需要加载驱动 eth1394.o。


oss.linuxpk.com
源 2008 年第 9 期  57
知识学堂
如果没有某种设备的驱动,则可以重新编译内核模块,选择以下模块:

# cd /usr/src/linux-2.XXX
# make xconfig

选择其中的 IEEE1394 选项,然后重新编译模块:

# make dep
# make modules
# make modules_install

驱动 IEEE1394 接口的硬盘或光驱时,需要预先加载的驱动有 ieee1394.o 和 ohci1394.o:

# modprobe ohci1394

上面代码会将两样驱动全部装载上,因为 ohci1394 依赖于 ieee1394。

硬盘需要的驱动是 sbp2.o,插入硬盘后它应该会自动加载。与 USB 设备相同,硬盘会被模拟成


SCSI 设备,请留意屏幕上显示的信息,看看是被模拟为 sda 还是其它的设备。使用以下命令使用
硬盘:

# mkdir /mnt/1394
# mount -t vfat /dev/sda1 /mnt/1394

IEEE1394 光驱应该使用设备为/dev/scd0,如果在插入设备时没有自动加载,则可以试着手动加
载 sbp2 模块及 SCSI 模块:

scsi_mod.o 对 SCSI 设备的支持;

sd_mod.o 对 SCSI 硬盘支持模块,对应硬盘;

sr_mod.o 对 SCSI 光盘支持模块,对应光驱;

sg.o SCSI 序列的通用支持模块。

IEEE1394 光驱驱动与 USB 下相应的设备驱动非常相似,这里就不再赘述了。

现在各种移动设备层出不穷,花样繁多,目前国内网站上的资料不是很全,使用 google 搜索英文网


站往往能得到许多自己需要的东西。

优盘或 USB 硬盘常见问题解决方法


1. 加载/dev/sda1 时出错

这是因为较早的优盘不分区,它们使用/dev/sda,也有可能使用/dev/sda2 或 sda3 等设备文件,


请仔细观察 fdisk -l /dev/sda 的输出结果,看一看优盘的分区到底是哪一个。

2. 主机中已有 SCSI 或 USB 设备

主机中已经有 SCSI 或 USB 设备,比如/dev/sda 硬盘或另一个优盘,这时可以尝试 sdb 或 sdc 等


设备。实际上每一次在插入优盘时可以留意一下屏幕上显示的信息,那个优盘被转换成哪一个 sd
设备。


oss.linuxpk.com
源 2008 年第 9 期  58
知识学堂
3. 优盘插入后没有反应,访问/dev/sd 设备也没有反应

这时可以查看相关模块是否已经加载,如果没有加载可以手动加载,然后重新插入该设备,看看是
否有反应:

# modprobe ehci-hcd; modprobe usb-uhci; modprobe usb-storage.o


# modprobe ide-scsi; modprobe scsi_mod.o; modprobe sd_mod.o

4. 设备驱动已经加载,如何知道访问哪个设备文件

对比加载驱动前和加载驱动后的/proc/devices 文件,多出的那一行就是这种驱动程序注册的主设
备号。例如,对比 OV511 加载前后/proc/devices 文件的变化,就会发现多出如下一行:

# cat /proc/devices
Character devices:
...
81 video_capture
...

上面代码表示 C 型设备、主设备号为 81 的设备文件是访问 OV511 驱动的入口,再对照/usr/src/


Documentation/devices.txt 中查找 C 类型的主设备号 81,就可以知道对应如下设备文件:

81 char video4linux
0 = /dev/video0 Video capture/overlay device

上面简要介绍了 Linux 下常用的 USB、IEEE1394、PCMCIA 设备驱动的安装与配置,希望能对读者


安装与使用这些设备提供帮助。


oss.linuxpk.com
源 2008 年第 9 期  59
知识学堂

PC 的足迹(下)

Intel 开源软件技术中心
王齐

真假双核
2003 年 9 月 23 日,AMD 在美国的旧金山发布研发代号为 Hammer 的 K8
处理器,Athlon 64。K8 处理器几乎倾注了 AMD 全部的心血,这个处理器
核心从 1998 年开始设计,加入了对 64 位的支持,引入 HyperTransport
总线负责处理器与 Chipset 之间的通信,与 K7 处理器相比,K8 处理器极大
降低了功耗。

这颗处理器的发布是 PC 领域的里程碑,PC 从此步入到 64 位时代。随后


Intel 在 2004 年 2 月的 IDF(Intel Developer Forum)宣布在不久将推出
x86-64 处理器,为和 AMD64 区别,而将这种处理器架构命名为 Intel 64
AMD 发布 K8 Manchester 架构,这也在一定程度上表明英特尔对 AMD 的 x86-64 处理器的认可。
处理器
64 位 PC 处理器的斗争方兴未艾,人们正翘首以观其变,微软却迟迟拿不出
支持 64 位处理器的操作系统,这使最普通的用户也明白目前使用 64 位处理器还是有些超前。Intel 也借
此获得喘息之机。但很快一场双核之战将 Intel 和 AMD 推到了风口浪尖,Intel 和 AMD 再一次被万众瞩
目。

Intel 率先将其双核 Pentium Extreme Edition(和之前的 Pentium IV


Extreme Edition 不同,下文将其简称为 Pentium EE)的发布时间定在 2005 年
4 月 18 日,摩尔定律 40 周年纪念日,而 AMD 确定将双核发布时间定在 4 月 21
日,就是 Opteron 64 的两周年纪念日。不过 AMD 的本次发布的双核是针对服
务器市场的 Opteron。在第一回合的较量中,Intel 略微领先。

随后 AMD 展开了与时间赛跑的游戏,在 2005 年 5 月 31 日的 Computex


Intel 双核 Pentium
2005 Show 上发布 Athlon 64 x2 处理器,这是 AMD 首次发布针对 PC 领域的
Extreme Edition 处理
双核处理器,并在发布会上不止一次提起“和其他厂商不同,我们的产品才是真双

核”。Intel 当然明白“这个其他厂商”绝对不是指 2001 年发布 Power4 的 IBM,并
作出“双核不分真假”的回应,这正是 AMD 等待已久的。口水战能够继续发展的要诀就是双方都要适时地
参与,其目的并不是某一方非要在嘴上占多大便宜。这一点梁实秋先生在《骂人的艺术》一文早已解释
的非常清楚。


oss.linuxpk.com
源 2008 年第 9 期  60
知识学堂
要骂人须要挑比你大一点的人物,比你漂亮一点的或者比你坏得万倍而比你得势的人物总之,你要骂
人,那人无论在好的一方面或坏的一方面都要能胜过你,你才不吃亏的。你骂大人物,就怕他不理你,
他一回骂,你就算骂着了。在坏的一方面胜过你的,你骂他就如教训一般,他既便回骂,一般人仍不会
理会他的。假如你骂一个无关痛养的人,你越骂他他越得意,时常可以把一个无名小 卒骂出名了,你看
冤与不冤?

Intel 的回应使口水战升级,AMD 先是大张旗鼓的邀请 Intel 参加“双核决斗”,接着找了一堆评测机构


造势。Intel“希望此事到此休矣”的终极回应也将这场口水战越描越黑。整个口水战的历程更像是 AMD 的
市场销售人员出题目,Intel 的研发工程师回答,Intel 能占到便宜才是怪事。

Intel 在这场口水战中输得一点都不冤,AMD 的主动挑衅依仗着对双核技术的自信。双核这个概念本


身由来已久,许久之前 SMP(Sym metric Multiprocessors)系统中就存在着多个处理器内核,只是这
些多个处理器内核是放置在同一个 PCB(Printed Circuit Boa rd)上。而 AMD 和 Intel 的多核实际上是
指 CMP(Chip Multiprocessors),即在一个芯片上集成多个微处理器核心。如果单纯从这 个角度上说,
Intel 和 AMD 的双核处理器都属于 CMP,都是真多核。

AMD 指责 Intel 的是“伪双核”主要因为 Pentium EE 处理器采用了“Dual Die Package”技术实现双核。


这种技术是将两个处理器内核的 Die 封装到一起,而 AMD 将两个处理器内核封装在一个 Die 中。从耦合
度的角度上看 AMD 的这种方式更优,而且芯片的集成度也更 大。从 Cache 共享的效率上说,两者使用
的都是基于总线监听的 Cache 共享一致性协议,但是 AMD 使用“MOESI”协议进行 Cache 共享一 致,而
不是多数处理器系统使用的 MESI 协议。与 MESI 协议相比,MOESI 协议在发生 Cache 写失效时,效率较
高。

Pentium EE 还存在的一个问题是功耗,Intel 的 Netburst 构架由于功耗过大遇到了处理器频率的瓶


颈,如 Presler 内核的典型功耗已经到达了 135 瓦。从性能价格比的角度上看,Netburst 构架已经无法
越过 4GHz 主频的大关,因为普通用户购买 PC 机的目的绝对不是 希望还能顺便再带台热水器。诸多事
实表明 Netburst 构架举步维艰,如果 AMD 继续发布更强的处理器内核,Intel 将无以为对,这个 从
2000 年开始使用的构架终于到了尽头。这可能也是 Intel 面对 AMD 的各种挑战,始终保持缄默的本质
原因。

2006 年,AMD 首次进入半导体厂商排名 TOP10,这一方面得益于 AMD 并购了图像芯片厂商


ATI,一方面得益于处理器销售额的大幅增长。这一年是 Intel 历史上最糟糕的一年,销售额与 2005 年
相比下降了 11.1%,市场份额被大幅蚕食,昔日的铁杆盟友纷
纷叛逃。Inte l 步入寒冬。

酝酿的反击
2003 年 3 月 12 日是一个很特别的日子,在这一天 Intel 和
AMD 同时发布了针对笔记本的产品 Athlon XP-M 和 Intel 的迅
AMD 发布针对笔记本
驰平台。迅驰平台一经推出立刻得到认可,第一代迅驰平台由
的 Athlon XP-M 处理
Intel 推出迅驰平台

Pentium M 处理器、基于 Intel 855 的 Mobile Chipset 和基于
Intel PRO/Wireless 2X00 的无线网卡芯片共同组成,缺一不可。


oss.linuxpk.com 2008 年第 9 期  61

知识学堂

在 Pentium M 之前,笔记本使用的处理器是基于台式机处理器的简化版本,而 Pentium M 是一个专


门为笔记本重新设计的。Pentium M 主要基于 Pentium III Tualatin,并作出了许多改动。指令流水线
从 Pentium IV 的 20/31 级缩短为 12 级,或者说从 Pentium III 的 1 0 级提高到 12 级;第一次提出了
超线程的概念;增加了 μop Fusion 功能以提高流水线的效率,在之前的处理器一个 μop 只能使用两个
操作数,而 Pentium M 中的 μop 可以使用三个操作数。

Pentium M 系列处理器是 P6 系列处理器的终结者,在此之前的 Pentium Pro,Pentium II 和


Pentium III 都是基于 P6 的,Pentium M 处理器只使用了 Pentium IV 的前端总线。从这个角度上看,
Pentium M 处理器主要基于 P6 核心。但是 Pentium M 处理器并没有引起大家 的足够重视,在那个年代
64 位处理器和双核才是真正的焦点。

当时许多用户还经常将 Pentium M 处理器和迅驰平台混为一谈,Intel 花费了 3 亿美元的广告费进行


澄清。大家非常不解为什么 Penti um M 处理器加上别的 Chipset 或者无线网卡芯片都不能称为迅驰。
在多数人眼中处理器才是最重要的,太多的人认为迅驰不过是一 个广告的嘘头。Intel 却将这个嘘头发扬
光大,除了迅驰一代(Carmel 平台)外陆续推出一系列笔记本平台,2005 年推出 Sonoma 平 台,
2006 年推出 Napa 平台,2007 年推出 Santa Rosa 平台,还要在 2008 年和 2009 年陆续推出
Montevina 平台和 Calpella 平台。这些平台产品除了处理器芯片之外,还包含了 Chipset 和无线网卡芯
片。这些平台的推出使 Intel 在笔记本领域几乎一统天下。

AMD 在 2005 年 4 月发布旨在针对 Pentium M 处理器的 Turion 64 时,居然找不到实质的对手,


Pentium M 系列处理器都隐藏在各自的平台里,而偏偏 AMD 当时并没有平台的概念。当时 Turion 64
处理器最令人记忆犹新的是,Acer 发布的一系列“法拉利笔记本”。这 些笔记本从设计到造型都令人耳目
一新。跳跃的火焰伴着宁谧的夜晚,骏马如闪电越过长空。炫红的法拉利 F2004 赛车模型使围观 这款笔
记本的人群久久不愿离去。但即便是这款法拉利笔记本的推出也远改变不了 Intel 在笔记本市场的领先,
这也在某种程度上促使 AMD 做出购买 ATI 的决定。

ATI 与 nVidia 在图像处理领域上并称双雄,Intel 和 AMD 都是 ATI 的大客户。Intel 除了购买 ATI 和


nVidia 的图像处理芯片外,自己也掌 握图像处理的技术并将显卡集成在自己的 Chipset 中,而 AMD 则
必须要依赖 ATI 和 nVidia,这也是 AMD 急于收购 ATI 的原因,AMD 需要具 有和 Intel 进行平台竞争的
能力。2006 年 7 月 24 日,AMD 以 54 亿美金收购 ATI。之后 Intel 突然成为 AMD 最大的客户,这也意
味着 AMD 强行参加平台之争的许多不合理。

平台之争是 Intel 和 AMD 之间的一场全方位较量,这种可以给客户提供“Turn-key Solution”战争的


背后,是两个公司底蕴的抗衡。这是一个由若干战役组成的一场大的会战,是两个正规军拉开阵势的正
面之争。

“飞机终将被击落,战舰最终也会被击沉。一场真正残酷的战争,到最后,任何高精尖的武器都会耗
尽,战争的根本,还是人和人的对抗,人和人的战争”。Intel 的十万之众,携“放眼世界任何一个半导体
厂商都不曾拥有”的财富所等待的不过是 AMD 的加入,结 果是无需预料的。

一场战争中,强者总是希望战必胜之战,总是希望与对手打一场必胜的决战,弱者的参与或者被捕捉,


oss.linuxpk.com
源 2008 年第 9 期  62
知识学堂
一般意味着战争的结束。资治通鉴中列举了许多以弱胜强的故事,弱者大多采取了一个普遍的方法,“及
时的示弱,适当的逞强”迷惑对手,避免和对手发生任 何决战,用最大的努力使对手陷入持久战的泥潭,
在漫长的岁月中寻觅战机,积小胜而为大胜,等待战争天平的倾斜。《贞观长歌 》中虚构的范兴留给李
世民平胡十策,前九道都是个忍字,应该时刻活在每个想战胜强者的弱者心中。

平台之争使 AMD 率先陷入泥潭,ATI 著名的“Paper Launch”文化估计和 AMD 的文化无法共处,而


ATI 的这种文化已根深蒂固,如果一个文化很容易被改变,这本不应是文化。AMD 对这个文化的改变,
即便成功也是惨胜若败。也许正如太多的批评家所指出的,AMD 收购 ATI 的直接受益者并非 Intel,而
是 nVidia。这个专注于 GPU 的公司,目前的市值是 AMD 的两倍。

Intel 推出 Core 2 处理器


Intel 发布 Pentium M 处理器后又陆续推出的 Core,Core 2 处理器。此时 Intel 不仅在平台上压倒
AMD,也重新确立了处理器性能的王者地位。

2006 年 1 月 5 日,Intel 发布 Core Duo 处理器 Yonah,这是 Intel 第一款将两个处理器内核放到一


个 Die 中的处理器,这也是 Apple 第一 款正式发布的基于 x86 构架的处理器(Apple 在开发机中还使用
过 Pentium IV)。Core Duo 的发布使 x86 在 PC 领域中一统江湖,P owerPC 处理器彻底退出了 PC 领
域的历史舞台。

Core 构架有两个分支,一个是 Core Duo 双核和 Core Solo 单核处理器,这个构架基于 Pentium


M,实际上有些早期使用 Yonah 处理器 的笔记本还打着 Pentium M 的商标。Core 构架支持双核结构,
在降低功耗和 SIMD 指令上做一些改进,但是仅支持 32 位构架。Core 构 架还有一个被称为“Smart
Cache”的技术,这是一种共享 L2 Cache 的机制而已,许多高性能体系结构的教科书都讲述过一些类似
的技术,所谓“Smart”一定是针对 Pentium EE 的。

Core 构架的生命周期非常短,2006 年 7 月 27 日,Intel 正式发布基于 Core 2 架构的处理器


Conroe 和 Merom,其中 Conroe 针对桌面机, 而 Merom 针对笔记本。接着 Intel 令人眼花缭乱地推出


oss.linuxpk.com
源 2008 年第 9 期  63
知识学堂
许多基于 Core 2 构架的处理器,如 Allendale、Wolfdale、Kentsfield(Intel 第一个 4 核处理器),
Yorkfield,Conroe XE,Kentsfield XE,Yorkfield XE 和 Merom XE。

在这段时间里,AMD 陆续推出基于 Opteron 的 Barcelona 处理器和基于 K10 内核的所谓“真四核”的


Phenom 处理器,也再没有邀请 Intel 华山论剑。

多核时代
Intel 的下一代新内核 Nehalem 即将问世,AMD 代号为“上海”的新一代处理器也发布在即。再此之前
Kentsfield、Yorkfield 和 Phenom 处理器均实现了多核,多核时代已经来临。

在计算机科学领域中,多核不是一个新的概念。远在 PC 还没有问世之前,多处理器系统就已出现,
MPP(Massively parallel processing)系统已经集成了成千上万个处理器,这些处理器受限当时的工
艺,无法像如今的 CMP 将多个处理器集成到一个封装中,但是从数学的角度上看,这两者等效,只是
MPP 集成的处理器间的通信延时大于 CMP 系统中处理器间的通信延时。而 MPP 系统需要解决的问题与
如今基于 CMP 的多核不同,MPP 系统所要解决的是一些特定问题,如医药模拟、地质勘探、天气预报、
核能开发及密码破译等金字塔尖的顶级问题。MPP 处理器的用户是这个星球上顶级的科研人员,而 CMP
系统所面对的是芸芸众生。不同的用户群决定了两者在使用上的区别,CMP 的多核使用不能照搬 MPP 处
理器的使用经验。而即便是 MPP 处理器也没有解决好如何使用的问题,可编程性至今还是 MPP 处理器需
要亟待解决的核心问题。

而 Intel 的 Tick-Tock 计划使摩尔定律在近些年看不到失败的迹象,见下表。


Tick-Tock Roadmap
Fabrication
Architectural change Year
process
Shrink/derivative of previous micro 2005
Tick
architecture (P6) 65nm
2006
Tock Intel Core micro architecture
Tick Shrink/derivative (Penryn) 2007
45nm
Tock Nehalem micro architecture 2008
Tick Shrink/derivative (Westmere) 2009
32nm
Tock Sandy Bridge micro architecture 2010
Tick Sandy Bridge Shrink/derivative 22nm 2011

目前 Intel 的第二轮 Tick-Tock 即将完成,Nehalem 面世在即,Westmere 和 Sandy Bridge 也在有


条不紊地进行。更新的半导体工艺进一步提高了芯片的集成度,使得一个芯片内部可以集成更多的处理
器内核,目前有许多公司都拥有多核产品。这里面,不仅仅有 Intel、IBM 和 AMD 传统的处理器公司,
还有一些近些年 Startup 的公司。
多核处理器
Xeon 四核和 6 核处理器
Intel Core 2 Quad
80 个内核的 Teraflops Research Chip,也被称为 Polaris
IBM 3 个内核的 Xenon 处理器


oss.linuxpk.com
源 2008 年第 9 期  64
知识学堂
和 Sony、Toshiba 联合推出的 Cell 处理器,Cell 中包含一个
PowerPC 内核和 8 个 SPU(Synergystic Processing Unit)
Sun Microsystems 8 核的 UltraSPARC T1 和 T2
Opteron 4 核处理器
AMD
Phenom 3 核、4 核处理器
Raza
Microelectronic 8 核的 XLR732
Cavium Networks 16 核的 CN5860
Tilera 64 核的 TILE64

除此之外还有一些多核的 GPU,如 AMD/ATI 的 Radeon 和 FireStream、nVidia 的 GeForce 200 多


核 GPU 和 Tesla 多核 GPGPU(General-purpose GPU)。

多核处理器降临并不以人们的意志转移,突然间满城尽是多核。连最保守的科学家也不得不承认目前
需要解决的多核问题,不是讨论多核目前适不适用已有的软件平台,而是多核时代已经来临,如何调整
软件平台使之适用。摩尔定律的不断成功,面对的挑战除了工艺的继续提高,还面对了来自另外一个定
律 Amdahl’s law 的挑战。

Amdahl’s Law 提出了最大并行度(The Maximum Speedup)的计算方法。当使用 N 个处理器运


算一个课题时,理论上最大并行度为 N。但是对于一个指定的课题,很难做到所有部分都是可以并行的,
1
假设其可并行的程序比率为 P,则这个课题在使用 N 个处理器运算时,其并行度为: P
 1−P 
N
如果我们对 N 取极限将得到并行度=1/(1-P)这个公式,这个公式表明即便我们可以使用无限数目的
处理器,也不能进一步提高执行这个课题的效率。如果一个课题的 P 为 90%,即这个课题可以并行执行
的部分为 90%,此时这个程序的最大并行度为 10,这也表明片面提高处理器的数目对解决一些并行度不
高的课题没有太大意义。当然有些并行度较好的课题当 N 上升时,P 也随之上升,从而课题的最大并行度
也会上升,当 P 为 1 时,最大并行度为 N。

Amdahl’s Law 是一个理想模型,这个定律没有考虑多核之间通信的延时与带宽。如果考虑通信所花


费的时间,采用多核处理器解决一个课题所耗费的总时间如下
Tp
T = f ( N ) = Ts + + Tis × N
N
其中 Ts 为这个课题串行执行所需要的时间,Tp 为这个课题并行执行所需要的时间,而 Tis 为单个处理
器所花费的通信时间。利用以上公式,我们可以轻易得出解决一个特定课题所需要的最优的处理器数目。

Tp Tp
f '( N ) = − 2
+ Tis = 0 ⇔ N =
N Tis

由以上公式可以看出,处理器间通信时间 Tis 与解决一个问题可能使用的处理器数目直接相关,Tis 越


大则可能使用的处理器数目越小。从这个公式也可以看出片面提高处理器内核的数目并不能提高一个课


oss.linuxpk.com
源 2008 年第 9 期  65
知识学堂
题执行的效率。

这个公式也为 CMP 的发展指明了方向,CMP 的发展不应该是将多个处理器内核放在一个 Die 中,然


后再找一条总线将多个处理器内核连接在一起,而是根据多核间的互联结构的延时与带宽决定在一个 Die
中到底集成多少个内核,多核的设计核心是处理器内核间的互联结构而不单纯是处理器核心。Freescale
即将推出的 MPC8578 处理器在这方面做了许多工作,MPC8578 处理器中将 CoreNet Architecture
(互联网结构)作为设计重心,这个 CoreNet Architecture 可以连接的处理器内核数目的最大值为
32。

摆在多核处理器面前的除了处理器的延时与带宽外,还有一个大的难题就是并行程序的可编程性。并
行程序的编写、调试与维护的难度远大于串行程序。熟练掌握并行编程模型并不是一件简单的事情。

对于之前使用在巨型计算机上运行的程序在 CMP 运行上没有太大问题,因为这些程序本身就是由并


行运算的专家编制,并经过精心并行优化的。书写这些程序的编程人员本身不仅掌握了 MPI 和 OpenMP
这些并行编程模型,对高性能计算机体系结构也有充分的认识。

对于一些银行,网站等服务性部门,他们的程序的并发性非常好。业务的无关性使得处理器间的通信
与延时几乎可以忽略不计。这种程序的天然并发性使得多核处理器在 CMP 没有出现之前就得到了充分的
应用。

多核面对的最大挑战来自 PC 领域的用户,这些用户良莠不齐,各种不利于程序并行化的现象都会出
现在这些用户使用的机器中。而这些用户却是使用 CMP 人数最多的群体,这些用户正在使用的程序绝大
多数都没有经过并行化处理,而这些程序的数目过于庞大,基本不可能做到将其一一优化。这些用户所
执行的程序连多核处理所需要的最基本的负载均衡这个特性也很难满足。目前这些客户使用的操作系统
也不能有效帮助这些客户完成这些工作。既然如此,4 核、8 核或者更多的内核对于他们并没有意义。

多核处理器如果不能真正解决这些人群所面临的挑战,CMP 又将被重新回到高端计算的领域,而这
个高端领域所蕴含的能量不足以支撑整个多核产业链的继续发展。这也可能是制约多核技术继续向前发
展的决定力量。

多核处理器崭露头角的背后蕴藏着太多的危机,而这个危机的解决需要牵扯到计算机科学的所有领域,
并行算法、编译器、运行时库、操作系统、处理器及制作工艺。如何提高多核处理器的可编程性高悬在
每一个计算机科学研究人员心里。而这个问题,即便在超级计算机中也没有解决。发明一个聪明的编译
器将串行程序直接翻译成并行程序,是一个很容易想到的方法,但是这种方法目前还很难推广到 PC 领域。
目前已有的几个并行语言,如 UPC(Unified Parallel C)、CAF(Co-Array Fortune)并不足以推广到
PC 用户。而 IBM 的 X10、Sun 的 Fortness 和 Cray 的 Chapel 还在开发阶段。并行处理需要的函数库急
需完善。

而目前在多核领域,唯一令人欣慰的是处理器及制作工艺的提高使得在一个封装中可以集成更多的处
理器,这也正是令人担忧的。在多核领域跑得过快的硬件迟早会被几乎停滞不前的软件拖住后腿。也许
在不远的将来,Life will find a way。


oss.linuxpk.com
源 2008 年第 9 期  66
经验技巧

Linux 一句话精彩问答

系统配置篇(7)
陈绪
《Linux 一句话精彩问答》是 Linux 初学者很好的入门文档,想必很多朋友当时都是边看该文档,边敲打
键盘,玩着 Linux 过来的。
该文档由本刊顾问陈绪主编,迄今已经收录近千个精彩问答。从本期开始将在桌面应用栏目进行连载,
希望能帮助到更多刚接触到 Linux 的朋友们。

1. 用命令清空 Root 回收站中的文件


2. 在 Red Hat 上加 Simsunttc 字体
3. Unicon 和 Zhcon 的区别和作用
4. 如何卸载 tar 格式安装的软件
5. 定制 linux 提示符
6. 在 vi 中搜索了一个单词,该单词以高亮显示,看起来很不舒服,怎么能将它去掉
7. 如何找出系统中所有的 cpp、h 文件
8. 如安装 Debian 需要几张盘就够了?7 张盘全部都要下载吗
9. Debian 第一张光盘为什么有两个版本?debian-30r1-i386-binary-1iso 和 debian-30r1-i386-
binary-1_NONUSiso 该下载哪一个呢?它们有什么区别
10. 为何我使用 umount mntcdrom 命令的时候出现 device is busy 这样的语句,不能 mount
11. 我使用的是笔记本电脑,怎么才能在控制台下显示现在还剩多少电量呢
12. 为什么我进入 Linux 的终端窗口时,man 一条命令出来的都是乱码呢
13. 编译内核的时候出错,提示“Too many open files”,请问怎么处理
14. 本来装有 Linux 与 Windows XP,一次将 Windows XP 重装后,发现找不到 Linux 与 Windows Xp 的启动选单,
请问如何解决
15. 安装了一台 Linux 服务器,想自己编译内核,一步一步做下来,GRUB 也添加进去了,但出现“kernel
PanicVFSUnable to mount root fs on 000”的错误,请问是怎么回事
16. 如何设置用户登录后的欢迎信息
17. 下载了 rcs57,用 configure && make && make install 时报错如下:confsh testing permissions confsh
This command should not be run with superuser permissions 我是以 root 用户身份登录编译安装的,为
什么会这样?
18. 我在安装 USBView 时失败,具体情况如下:rpm -ivh usbview-10-9srcrpm
warningusbview-10-9srcrpmV3 DSAsignatureNOKEYkey Idab42a60e
19. 如何防止某个关键文件被修改
20. 怎样限制一个用户可以启动的进程数
1141 用命令清空 Root 回收站中的文件

cd /var/.Trash-root
rm -rf *


oss.linuxpk.com
源 2008 年第 9 期  67
经验技巧
1142 在 Red Hat 上加 Simsun.ttc 字体

以 Red Hat 7.3 为例,安装时选取简体中文安装,先复制一个 simsun.ttc 到/usr/X11R6/lib/X11/


font/TrueType,改名为 simsun.t tf;然后进入/usr/X11R6/lib/X11/font/TrueType 目录下,运行
ttmkfdir > fonts.dir 命令;接着用 vi 编辑 fonts.dir 文件,把有 s imsun.ttf 行修改如下:

simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-ascii-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-iso10646-1
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-15
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-iso8859-1
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0simsun.ttf
-misc-SimSun-medium-r-normal--0-0-0-0 -p-0-gb2312.1980-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-m-0-gb2312.1980-0
simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gbk-0

接着运行 cat fonts.dir > fonts.scale 命令,修改/etc/X11/XF86config-4, 在 Section“Files”加上


下面这一行:

FontPath “/usr/X11R6/lib/X11/fonts/TrueType”

最后回到 KDE 桌面里, 在“开始”→“选项”→“观感”→“字体”,将所有字体改为 Simsun

1143 Unicon 和 Zhcon 的区别和作用

Unicon 是内核态的中文平台,基于修改 Linux FrameBuffer 和 Virtual Console(fbcon)实现的。


由于是在系统底层实现的,所以兼容性极好,可以直接支持 gpm 鼠标。但是相对比较危险,稍有漏洞就
可能会危及系统安全。Zhcon 是用户态的中文平台,有点像 UC DOS

1144 如何卸载 tar 格式安装的软件

进入安装该软件的原代码目录,运行 make uninstall。如果不行,也可以查看一下 Makefile 文件,


主要是看 install 部分,从其中找出 tar 格式的文件被复制到了什么路径,然后进入相应的目录进行删除
即可

1145 定制 linux 提示符

在 bash 中提示符是通过一个环境变量$PS1 指定的。用 export $PS1 查看现在的值,比较直观常用


的提示符可以设定为 export PS1=“[ \u@\h \W]\$”。其中\u 代表用户名,\h 代表主机名,\W 代表当
前工作目录的最后一层,如果是普通用户\$则显示$,root 用户显示#

1146 在 vi 中搜索了一个单词,该单词以高亮显示,看起来很不舒服,怎么能将它去掉

在 vi 的命令模式下输入:nohlsearch 就可以了。另外可以在~/.vimrc 中写上下面的语句就会有高亮


oss.linuxpk.com
源 2008 年第 9 期  68
经验技巧
显示:set hlsearch

加上下面的语句就不会有高亮显示: set nohlsearch

1147 如何找出系统中所有的*.cpp
如何找出系统中所有的*.cpp、
、*.h 文件

用 find 命令就可以了。不过如果从根目录查找消耗资源较高,使用下面的命令就可以:

find / -name "*.cpp" -o -name "*.h"

1148 如安装 Debian 需要几张盘就够了?7


需要几张盘就够了?7 张盘全部都要下载吗

如果经常有网络环境的话,下载第一张就可以了。要是没有网络环境的话不推荐使用 Debian,因为
Debian 主要依赖网络来更新软件。实在要安装的话,要下载全部 7 张盘,否则可能会出现需要的软件包
找不到的问题。

1149 Debian 第一张光盘为什么有两个版本?debian-30r1-i386-binary-1.iso


第一张光盘为什么有两个版本?debian-30r1-i386-binary-1.iso 和 debian-30r1-
i386-binary-1_NONUS.iso 该下载哪一个呢?它们有什么区别

因为含有“non-US”(不属美国)的软件不能合法地存放在架设于美国境内的服务器中。以前,其原
因通常是因为软件含有严密的密码编码,而今天,则是因为程序使用了美国专利保护的演算法。每个人
应该取用“non-US”来供私人用途所用;而没有这个标识的 is o 则只对架设在美国的镜像及供应商才有用
处。其它二进制的光盘则不会含有任何“US-sensitive”(与美国相关的)软件,它们和 其它种 binary-1
光盘一样运作得很好。因此,个人使用还是下载 debian-30r1-i386-binary-1_NONUS.iso 版本

1150 为何我使用 umount /mnt/cdrom 命令的时候出现 device is busy 这样的语句,不能


这样的语句,不能 mount

在使用 umount 的时候一定要确保已退出/mnt/cdrom 这个目录,退出这个目录就可以使用


umount /mnt/cdrom 了

1151 我使用的是笔记本电脑,怎么才能在控制台下显示现在还剩多少电量呢

使用 apm -m 就可以看到还有多少分钟了,具体参数可以用 man apm 查看

1152 为什么我进入 Linux 的终端窗口时,man


的终端窗口时,man 一条命令出来的都是乱码呢

这是因为你的字符集设置有问题。临时解决办法可以使用 export LANG=“en_US”。要想不必每次都


修改的话,在/etc/sysconfig/i1 8n 文件里面修改 LANG=“en_US”就可以了。也可以针对某个用户来做,
这样就可以改变个人的界面语言,而不影响别的用户。命令如 下:

# cp /etc/sysconfig/i18n $HOME/.i18n

1153 编译内核的时候出错,提示“Too
编译内核的时候出错,提示“Too many open files”,请问怎么处理
files”,请问怎么处理


oss.linuxpk.com
源 2008 年第 9 期  69
经验技巧
这是因为 file-max 默认值(8096)太小。要解决这个问题,可以 root 身份执行下列命令(或将它
们加入/etc/rcS.d/*下的 init 脚本):

# echo "65536" > /proc/sys/

最后进入解压后的目录,运行安装命令。

# cd vmware-linux-tools
# ./install.pl

1154 本来装有 Linux 与 Windows XP,一次将


XP,一次将 Windows XP 重装后,发现找不到 Linux 与 Windows
XP 的启动选单,请问如何解决

首先光盘启动,进入 rescue 模式,运行 GRUB,进入 grub 提示符 grub>,然后敲入下面的语句,


重启就好了。

root (hd0,2),setup (hd0)

1155 安装了一台 Linux 服务器,想自己编译内核,一步一步做下来,GRUB


服务器,想自己编译内核,一步一步做下来,GRUB 也添加进去了,但出现
也添加进去了,但出现
“kernel Panic:VFS:Unable to mo unt root fs on 0:00”的错误,请问是怎么回事
0:00”的错误,请问是怎么回事

一般情况下 initrd 这个文件在台式机上不是必须的,但是在有 SCSI 设备的服务器上却是必须的。有


可能因为编译内核的时候没有产生 initrd 那个文件,所以会有上面的错误提示。用户可以使用 mkinitrd
命令来生成一个 initrd.img 文件,然后加入 GRUB,重启试一 试

1156 如何设置用户登录后的欢迎信息

修改/etc/motd 文件,往里面写入文本,就能使用户通过 Telnet 正确登录后,执行 Shell 之前得到


相应的提示信息。motd 就是“messages of the day”,也就是当日信息的意思。管理员可以往里面写一
些需要注意的事项或通知等来提醒正式用户

1157 下载了 rcs5.7,用./configure && make && make install 时报错如下:


rcs5.7,用./configure ./conf.sh: testing
时报错如下:./conf.sh:
permissions ... ./conf.sh : This command should not be run with superuser permissions. 我是
以 root 用户身份登录编译安装的,为什么会这样?

有些软件确实因为考虑到安全等其它原因不能用 root 用户编译。这时只要用其它用户编译,到


make install 这步时,如果该软件安 装在不属于编译时的用户的主目录下时,需要使用 su 命令转换为
root 用户再执行 make install 。

1158 我在安装 USBView 时失败,具体情况如下:


时失败,具体情况如下: #rpm -ivh usbview-1.0-9.src.rpm
warning:usbview-1.0-9.src.rpm:V3 DSAsignature:NOKEY,key IDab42a60e

这行代码说明安装失败是因为你的系统上没有安装合适的钥匙来校验签名。要使该软件包通过校验,
可以通过导入 Red Hat 的公匙来解决,具体的方式是在 Shell 下运行如下命令:


oss.linuxpk.com
源 2008 年第 9 期  70
经验技巧
#rpm -import /usr/share/rhn/RPM-GPG-KEY (注意大小写)

1159 如何防止某个关键文件被修改

在 Linux 下,有些配置文件是不允许任何人(包括 root)修改的。为了防止被误删除或修改,可以


设定该文件的“不可修改位(immut able) ”。命令如下:

# chattr +i /etc/fstab

如果需要修改文件则采用下面的命令:

# chattr -i /etc/fstab

1160 怎样限制一个用户可以启动的进程数

先确定一下/etc/pam.d/login 文件中下面一行的存在:

session required /lib/security/pam_limits.so

然后编辑/etc/security/limits.conf,在里面可以设置限制用户的进程数、CPU 占用率和内存使用率
等,如 hard nproc 20 就是指限制 20 个进程,具体可以看 man。


oss.linuxpk.com 2008 年第 9 期  71

经验技巧

Squid 做 loadbalance 并支持


按源 ip 做会话保持

刘晗昭
今天有时间研究 squid 的负载均衡,目前已经有了一定的进展,下面就把我的心得总结出来和大家分
享一下。

我的目标:

1.使用 squid 进行负载均衡

2.做到会话保持

我使用的 squid 版本。Squid 3.0.STABLE8。注:只有 squid3.0stable8 可以实现(SQUID


2.6.STABLE21 也可以实现,2.7 目前可以实 现负载均衡,但无法实现会话保持)

实现使用参数 cache_peer,其中的 options 1,round-robin,2,sourcehash,第 2 个 options


是 stable8 新加入的,是按 client 的 ip 来进行 loadbalance,配置参数如下:

acl no_direct_domain dstdomain a.b.c 定义不被转发的域名

always_direct allow !no_direct_domain 除了定义的域名都可以被转发


include /path/to/a.b.c.conf

前两行的作用,如果你想 cache_peer 和/etc/hosts 同时使用,就需要添加上面的两行,具体实现功


能我后面会详细介绍,下面说下 a.b.c.conf 中的内容

cache_peer 192.168.213.130 parent 80 0 no-query originserver name=www1 round-


robin sourcehash no-digest 定义第一台 RS
cache_peer 192.168.213.133 parent 80 0 no-query originserver name=www2 round-
robin sourcehash no-digest 定义第二台 RS

cache_peer_domain www1 a.b.c a.b.c 域名投递到第一台 RS

cache_peer_domain www2 a.b.c a.b.c 域名投递到第二台 RS

到此,负载均衡的配置就完成了,接下来修改/etc/hosts 文件添加另外一个域名

192.168.213.133 b.c.d

在 RS213.133 这台 server 上建立两个 vhost,一个域名 a.b.c,默认页面 index.html 内容 a.b.c,另


一个域名 b.c.d,默认页面 index.h tml,内容 b.c.d。另外为了区分 loadbalance 成功,130 这台 RS 我
用的是 nginx,这样默认页面内容就是 Welcome to nginx!,下面 开始测试。


oss.linuxpk.com
源 2008 年第 9 期  72
经验技巧
为了防止 squid 机器上 dns 对域名解析的干扰,我去掉了 squid 上的 dns,启动 squid 使用-ND 参
数,启动 RS1 的 nginx,启动 RS2 的 apach e,修改我自己 windows 的 hosts 文件,内容如下:

192.168.213.129 a.b.c b.c.d

这样这两个域名的解析都知道 squid 上了,现在访问 http://a.b.c,开始显示 130 的内容,使用


ctrl+F5 刷新,第二次就是 a.b.c 的内 容,当刷新多次以后,就会始终停留在停留在其中的一个页面了,
之所以用 ctrl+F5 我是忽略 squid 缓存,由此证明会话保持成功, 之前看到两个页面切换说明
loadbalance 成功,接下来是另一个测试。

访问 http://b.c.d,结果浏览器显示 b.c.d 内容,说明域名可以通过 hosts 文件解析。

首先说明一点:为了防止公网使用我的 squid 当代理服务器上网,所以我去掉了 dns,这样所有域名


我都会通过 hosts 文件解析。

1,如果配置文件中加上 always_direct allow all,将会出现 a.b.c 域名因为找不到对应的 ip 而


无法访问,但 b.c.d 可以正常访问。

2,如果注释掉 always_direct allow all,则相反,a.b.c 可以正常访问,b.c.d 会提示 squid


无法转发请求。

由此我就想到了用第一个实现的办法来同时工作,需要走 loadbalance 的就用 cache_peer,不需要


loadbalance 的就用 hosts 文件转 发。

squid 的 loadbalance 支持健康检测,如果后端 RS 服务停了,squid 会自动判断,并不再把请求发


给后方。

以上配置已经在我的一台生产线环境的 squid 上应用,目前稳定性,性能还处于观察中。

不过以上基于 client 的 ip 做的会话保持,我发现了一个问题,就是我不知道在哪里设置会话保持的


过期时间,如果谁找到了,还望 告知,以上描述性的话语过多,如有不明白的地方,我们一起交流。

Ubuntu 英文环境下使用
Fcitx 中文输入法

张召伟
很多朋友有在英文界面的环境下使用中文输入法的需求,但默认的系统没有提供这个功能,所以需要
生动对系统进行小小设置,来完成英文环境下的中文输入。

首先,安装 fcitx 中文输入法和输入法设置工具。

从面板上选择菜单 Applications -> accessories ->Terminal 来使用终端程序。

输入下面的命安装:


oss.linuxpk.com
源 2008 年第 9 期  73
经验技巧
# sudo apt-get install im-switch fcitx

输入您的密码后执行软件的安装。

安装完成后设置用户使用 fcitx 作为默认的输入法,使用下面的命令设置使用 fcitx 掌握输入法:

# im-switch -s fcitx -z default

完成输入法设置后,按 Ctrl+Alt+Backspace 键重启 X,从登录管理器重新登入系统。

修改系统配置文件,使在英文环境下也能调出中文输入法,调出输入法相关的配置文件
是/usr/lib/gtk-2.0/2.10.0/immodule-fil es.d/libgtk2.0-0.immodules

修改 libgtk2.0-0.immodules 文件:

# sudo gedit /usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules

找到行:

"xim" "X Input Method" "gtk20" "/usr/share/locale" "ko:ja:th:zh"

将其改为:

"xim" "X Input Method" "gtk20" "/usr/share/locale" "en:ko:ja:th:zh"

注销当前用户,退出系统,然后从登录管理器重新登录进入系统,即可使用 Fcitx,如果没有出来按
Ctrl + Spaces 将其调出。

通过串口管理 Linux 主机

刘颖
在某些情况下,需要同时对两台或多台 Linux 主机进行管理和操作。如果手头缺少足够多的键盘和显
示器,那么通过一台机器的串 口对其余主机进行控制不失为一种快捷、有效的方法。下面就以两台主机
为例,简单介绍一下配置方法。假设这两台主机分别为 A 和 B,它们都运行 Red Hat Linux。

A 主机配置

A 主机要选择一个合适的串口通信工具,本文中使用 Linux 自带的 Minicom。

以 root 身份登录,运行如下命令:

# minicom -s

屏幕上出现 Minicom 的主配置选单,移动键盘的方向键,选择“Serial Port Setup”选单项,会出现


如下配置项:

A - Serial Device : /dev/ttyS0


oss.linuxpk.com
源 2008 年第 9 期  74
经验技巧
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 9600 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
Change which setting?

按照需要配置如下参数:

◆ 串口设备 /dev/ttyS0;

◆ 波特率 9600;

◆ 帧格式 8N1(表示有 8 位数据、0 位校验和 1 位停止位);

◆ 软、硬件流控 No。

注意,串口设备号可以根据所连接的端口进行更改,比如,连接到 COM2 口就设置为/dev/ttyS1。


波特率的设定要与 B 主机一致。

配置完成后回到主配置选单,选择“Modem and Dialing”选单项,清除掉“A - Init string”、“B -


Reset string”和“K - Hang-up string”选项的值。然后重新返回主选单,选择“Save As Dfl”选单项,保
存为缺省设置。

注意,串口设备号可以根据所连接的端口进行更改,比如,连接到 COM2 口就设置为/dev/ttyS1。


波特率的设定要与 B 主机一致。

配置完成后回到主配置选单,选择“Modem and Dialing”选单项,清除掉“A - Init string”、“B -


Reset string”和“K - Hang-up string”选项的值。然后重新返回主选单,选择“Save As Dfl”选单项,保
存为缺省设置。

选择“Exit from Minicom”退出后,用如下命令重新启动 Minicom:

# minicom

B 主机配置

B 主机需要修改以下几个文件。

1. 修改/etc/inittab 文件

该文件是 init 程序的配置文件,用于设置缺省状态和终端连接。在该文件中增加如下一行,用来初


始化串口终端:

tty:2345:respawn:/sbin/agetty ttyS0 9600 vt100

“tty”为该行 ID;“2345”指该行的运行级别是 2、3、4、5 级;“respawn”使命令退出后再执行一


次,以便其它用户能够登录;“/sbin /agetty ttyS0 9600 vt100”表示具体的命令,该命令通


oss.linuxpk.com
源 2008 年第 9 期  75
经验技巧
过/sbin/agetty 程序打开串口/dev/ttyS0(COM1),波特率设置为 9600bps ,终端模式为
vt100。

重启主机 B 后,在 A 主机中会显示 B 主机的登录界面。但是,此时还有两个问题:一个是无法在 A


主机以 root 身份登录 B;另一个是 A 中无法显示 B 主机启动和关闭过程的相关提示信息。后者是
因为 Linux 启动时的信息都是由内核显示的,默认输出到系统主控制台(tt y1)。要解决这两个
问题,还需要修改/etc/securetty 文件和/etc/lilo.conf 文件。

2. 修改/etc/securetty 文件

该文件是一个被允许以 root 身份登录的 tty 设备列表,这些设备由/bin/login 程序读取。为了使


用户能以 root 身份通过串口登录,需要在该文件中添加“ttyS0”,告诉系统 COM1 是安全的。

3. 修改/etc/lilo.conf 文件

本文假设系统使用 LILO 启动。为了使 LILO 和内核的启动信息能够输出到串口,必须修


改/etc/lilo.conf 文件,在“linear”一行后添 加“serial=0,9600n8”,将
“append="root=LABEL=/"”改为“append="root=LABEL=/ console=ttyS0,9600"”。 serial 选
项使 LILO 的启动信息输出到串口,以便选择不同的系统或内核进行启动。其中,“0”表示串口使用
COM1;“9600”表示比特 率为 9600bps;“n”表示无校验位;“8”表示有 8 位数据位。
“append="root=LABEL=/ console=ttyS0,9600"”的作用是向内核传递参数,使系统启动信息输
出到串口 COM1,比特率设为 9600bps 。修改完成后,重新运行一下 LILO 命令使配置生效。

至此,将键盘和显示器等外设连接在主机 A 上,主机 A 再通过串口连接主机 B,就可以对 B 进行管理


和控制了。所需的硬件就是一条串 口线,当然还要求两台主机都具备串口。

实用入侵监测的配置和部署

邵海杨
处于公网上的服务器一般都会被安置在防火墙的 DMZ(Demilitarized Zone)区,受到防火墙的保
护。这在一定程度可以防止具有 已知非法特征的危险连接和恶意攻击,但是却防止不了合法用户的非法
访问。

什么时候会出现合法用户的非法访问呢?举例说明,比如,合法用户的机器被他人控制,成为了黑客
的攻击跳板,或者是合法用户想做一些别有用心的探测等。

除此之外,有些攻击者还会用端口扫描程序扫描服务器的所有端口,以收集有用的信息(比如,哪些
端口是打开的?哪些是关闭的?)。服务器端口被扫描往往是入侵的前奏。防火墙的脚本大都是基于规
则的静态表示,对于网络上动态的探测就显得有点束手无策。因此,现在正在形成一个新的安全学科领
域,称为“入侵检测”。


oss.linuxpk.com
源 2008 年第 9 期  76
经验技巧
入侵检测工具简介
入侵检测工具主要是用来检测已经发生的和正在进行的攻击,有些工具甚至可以和防火墙实现“联动”,
采取一定的措施来阻止这些 攻击。

目前入侵检测技术采取的措施主要分为主动和被动两种。主动方式会通过网络监测器监听网络通信,
一旦察觉到可疑的活动(比如 特定数据包的流入),就会采取相应的措施。当网络上有瞬间的攻击及大
流量非法数据发生时,主动方式允许系统在攻击者发动攻 击的第一时间内做出反应,把攻击者狙击在外。
被动方式是通过事后分析日志记录,当注意到有可疑活动时,系统才会采取相应的 措施。

主流的入侵检测工具软件有 CHKWTMP、TCPLogd、Shadow、Snort、MOM 和蜂鸟系统等。其中,


MOM 比较复杂,功能也很强劲,支持分布式的入侵检测;蜂鸟系统是基于大型网络的入侵检测。

本文重点介绍简单实用的 PortSentry。PortSentry 是入侵检测工具中配置最简单、效果最直接的工


具之一。它可以实时检测几乎所有类型的网络扫描,并对扫描行为做出反应。一旦发现可疑的行为,
PortSentry 可以采取如下一些特定措施来加强防范:

◆ 给出虚假的路由信息,把所有的信息流都重定向到一个不存在的主机;

◆ 自动将对服务器进行端口扫描的主机加到 TCP-Wrappers 的/etc/hosts.deny 文件中去;

◆ 利用 Netfilter 机制,用包过滤程序,比如 iptables 和 ipchain 等,把所有非法数据包(来自对服


务器进行端口扫描的主机)都过滤掉;

◆ 通过 syslog()函数给出一个日志消息,甚至可以返回给扫描者一段警告信息。

PortSentry 的安装配置
下面详细介绍 PortSentry 工具的安装和配置方法。

1.安装

从 http://www.psionic.com/abacus/portsentry 下载软件的最新版本 portsentry-1.2.tar.gz,


用 root 用户执行如下命令进行安装 :

# tar zxvf portsentry-1.2.tar.gz


# cd portsentry-1.2
# make linux
# make install

2.修改配置文件 portsentry.conf

通过 PortSentry 进行入侵检测,首先需要为它定制一份需要监视的端口清单,以及相应的阻止对策。
然后启动后台进程对这些端口 进行检测,一旦发现有人扫描这些端口,就启动相应的对策进行阻拦。

(1)设置端口清单

下面给出 portsentry.conf 中关于端口的默认配置情况:

# Un-comment these if you are really anal:


oss.linuxpk.com
源 2008 年第 9 期  77
经验技巧
#TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,
139,143,512,513,514,515,540,635,1080,1524,2000,2001,[..]
#UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,
517,518,635,640,641,666,700,2049,31335,27444,34555,[..]
# Use these if you just want to be aware:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,
2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,[..]
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,
34555,31335,32770,32771,32772,32773,32774,31337,54321"
# Use these for just bare-bones
#TCP_PORTS="1,11,15,110,111,143,540,635,1080,1524,
2000,12345,12346,20034,32771,32772,32773,32774,49724,54320"
#UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,
32771,32772,32773,32774,31337,54321"

可以有选择地去掉前面的注释来启用默认配置,也可以根据自己的实际情况定制一份新的清单,格式
和原来的一样即可。端口列表要根据具体情况而定,假如服务器为 Web 服务器,那么 Web 端口就不需要
监视;反之,如果是 FTP 服务器,那么监视 Web 端口也是有必要的。

(2)给定相关文件

在 portsentry.conf 中还要添加如下代码,用以指定相关文件的位置:

# 此文件记录允许合法扫描服务器的主机地址

IGNORE_FILE="/usr/local/psionic/portsentry/portsentry.ignore"

# 此文件中保留了以往所有入侵主机的 IP 历史记录

HISTORY_FILE="/usr/local/psionic/portsentry/portsentry.history"

# 此文件中是已经被阻止连接的主机 IP 记录

BLOCKED_FILE="/usr/local/psionic/portsentry/portsentry.blocked"

(3)设置路由重定向

通过配置 portsentry.conf 文件,可以设置一条虚拟路由记录,把数据包重定向到一个未知的主机,


使之无法获取信息。相应配置代码如下:

# Generic
#KILL_ROUTE="/sbin/route add $TARGET$ 333.444.555.666"
# Generic Linux
KILL_ROUTE="/sbin/route add -host $TARGET$ gw 333.444.555.666"


oss.linuxpk.com
源 2008 年第 9 期  78
经验技巧
针对不同的平台有不同的路由命令,在配置文件中选择适合自己平台的命令即可。

(4)利用其它工具

直接利用 Linux 中的 ipchain、iptables、ipfw 和 Netfilter 等命令,可以切断攻击主机的连接:

KILL_ROUTE="/usr/local/sbin/iptables -I INPUT -s $TARGET$ -j DROP"

也可以直接把攻击者的 IP 记录到/etc/hosts.deny 文件中,利用 TCP-Wrappers 保护机制来防止攻


击:

KILL_HOSTS_DENY="ALL: $TARGET$ # Portsentry blocked"

(5)定制警告信息

可以定制一条警告信息,嘲笑一下攻击者。不过,手册上建议不要使用该选项,因为这样做可能会暴
露主机的 IDS 系统。

PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS


BEEN LOGGED. GO AWAY."

修改完毕后,改变文件的权限,以保证其安全性:

# chmod 600 /usr/local/psionic/portsentry/portsentry.conf

3.配置 portsentry.ignore 文件

/usr/psionic/portsentry/portsentry.ignore 文件中设置了希望 PortSentry 忽略的主机 IP,即允


许合法扫描的主机地址。下面是笔者的配置情况:

# Put hosts in here you never want blocked. This includes the IP addresses
# of all local interfaces on the protected host (i.e virtual host, mult-home)
# Keep 127.0.0.1 and 0.0.0.0 to keep people from playing games.
127.0.0.1/32
0.0.0.0

# Exclude all local interfaces 所有的本地网络 IP


192.168.0.223
192.168.254.1
127.0.0.1

# Exclude the default gateway(s) 默认网关 IP


192.168.0.10

# Exclude the nameservers(域名服务器 IP)


202.101.172.35
202.96.96.68

修改完成后同样需要改变文件默认的权限:


oss.linuxpk.com
源 2008 年第 9 期  79
经验技巧
# chmod 600 /usr/local/psionic/portsentry/portsentry.ignore

启动检测模式

最后介绍一下 PortSentry 的启动检测模式。对应 TCP 和 UDP 两种协议方式,分别有三种启动模式,


如下所示:

◆ portsentry -tcp,TCP 的基本端口绑定模式;

◆ portsentry -udp,UDP 的基本端口绑定模式;

◆ portsentry -stcp,TCP 的秘密扫描检测模式;

◆ portsentry -sudp,UDP 的秘密扫描检测模式;

◆ portsentry -atcp,TCP 的高级秘密扫描检测模式;

◆ portsentry -audp,UDP 的高级秘密扫描检测模式。

一般情况下,建议使用秘密扫描检测模式或高级秘密扫描检测模式。

使用高级秘密扫描检测模式(Advanced Stealth Scan Detection Mode),PortSentry 会自动检查


服务器上正在运行的端口,然后把这些端口从配置文件中移去,只监控其它的端口。这样会加快对端口
扫描的反应速度,并且只占用很少的 CPU 时间。

启动 PortSentry 的命令如下:

# /usr/psionic/portsentry/portsentry -atcp
# /usr/psionic/portsentry/portsentry -sudp

可以把启动命令加到“/etc/rc.d/rc.local”脚本文件中,这样当重新启动计算机的时候 PortSentry 就
会自动运行。如果想让它和其它后台进程一样可以随时启动、停止并查看进程状态,可以去
http://linux.cudeso.be/linuxdoc/portsentry.php 下载一个后台 管理脚本,把该脚本放
在/etc/rc.d/下对应的运行级别目录中即可。

测试

启动 PortSentry 后,可以用扫描器扫描服务器,进行测试。PortSentry 检测到扫描后,会采取措施


进行阻击,并在 /usr/local/psionic/portsentry 目录下生成对应的 portsentry.blocked.atcp 文件或
portsentry.blocked.audp 文件,文件记录了 发动攻击的主机的信息。


oss.linuxpk.com
源 2008 年第 9 期  80
经验技巧

同时,TCP-Wrappers 会把非法主机的 IP 添加到/etc/host.deny 文件中。这样既切断了与非法主机


之间的通信,又在服务器上还保留 了其犯罪的证据和时间记录,让它无处遁形,不可能再有进一步的非
法行为。

实现基于 LDAP 的用户管理

马路遥
管理多台 Linux 服务器时,如果每台服务器都有自己独立的用户名和密码,那么记忆和维护这些信息
就非常具有挑战性。笔者从事 L inux 的培训工作,经常遇到这样的问题:每次学生上机的座位可能都不
同,用户名和密码等相关的信息经常被修改。如果互相配合 不好,就很容易造成有些人无法登录,并且
学生的文件资料也难以保存。于是,笔者通过将老师使用的电脑配置成为 LDAP 和 NFS 服 务器,为所有
的学生提供密码验证服务来解决这个问题。

本文中 LDAP 服务器使用的是 Fedora Core 自带的 OpenLDAP-Server 软件,读者配置时需要确保


已经安装了该软件包。主流的 LDAP 服务器还有 IBM Directory Server 和 Sun Java System Directory
Server 等,使用它们同样可行,配置也是大同小异。其中 Sun Java S ystem Directory Server 还可以在
Windows 或 Solaris 平台运行。

配置 OpenLDAP 服务器
首先,为每个学生指定组、用户名和密码,分别写入/etc 下的 group、passwd 和 shadow 文件。然
后修改配置文件 /etc/sldap.co nf 为如下内容:

#载入模版
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/slapd.pid

#配置访问控制列表,使得用户可以修改自己的密码及查询其它资料
access to attr=userPassword


oss.linuxpk.com 2008 年第 9 期  81

经验技巧
by self write
by anonymous auth
access to dn="dc=tiantian.com"
by self write
by * read
database ldb
suffix "dc=tiantian.com"
rootdn "cn=Manager,dc=tiantian.com"

#指定 LDAP 管理员的密码


rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
directory /var/lib/ldap

修改完成后,执行如下命令启动 LDAP 服务器:

# service ldap start

将信息导入 LDAP 服务器

在/usr/share/openldap/migration/目录中有一些 Perl 脚本,这些脚本可以将/etc/group 中的组,


以及/etc/passwd 和/etc/shadow 中的用户名和密码导出成.ldif 格式的文件,供 OpenLDAP 服务器使
用。这些脚本也可以到 http://www.padl.com/下载。

首先,编辑 migrate_common.ph 文件,分别给“$DEFAULT_MAIL_DOMAIN”和


“$DEFAULT_BASE”赋值:

$DEFAULT_MAIL_DOMAIN = "tiantian.com";

$DEFAULT_BASE = "dc=tiantian.com";

注意,所赋的值要和/etc/sldap.conf 中的设置相对应(dc=tiantian.com)。

然后,执行以下脚本,将 OpenLDAP 服务器初始化所需要的资料写入/root/base.ldif 文件:

# ./migrate_base.pl > /root/base.ldif


# ./migrate_group.pl /etc/group >> /root/base.ldif
# ./migrate_passwd.pl /etc/passwd >> /root/base.ldif

随后执行如下命令:

# ldapadd -x -D 'cn=Manager,dc=tiantian.com' -W -f /root/base.ldif

这样,就将所有组、用户名及其密码等信息导入了 LDAP 服务器。

配置 LDAP 客户端


oss.linuxpk.com
源 2008 年第 9 期  82
经验技巧
在客户端执行 authconfig 或 authconfig-gtk 命令,进入认证配置界面,选中图 1 所示的三个选项
后单击“Next”,进入图 2 所示的界面 中配置 LDAP 服务器的信息。

图1 图2

客户端每次启动之后需要自动运行 nscd 服务。通过执行 ntsysv 命令或“chkconfig -level 35 nscd


on”命令,可以使该服务自动执行。

配置 NFS 服务器
配置 NFS 服务器很简单,只需要在/etc/exports 文件中写入如下一行即可:

/home (rw)

然后,执行如下命令,使得 PortMap、NFS 和 NFSLock 服务能够自动运行:

# chkconfig --level 35 portmap on


# chkconfig --level 35 nfslock on
# chkconfig --level 35 nfs on

如果使用 NFS v4 版本,则还需要开启几个 RPC 服务。

配置 NFS 客户端

在每台机器的/etc/fstab 文件中增加如下一行:

server:/home /home nfs defaults 1 1

然后,执行如下命令,使得 PortMap 和 NetFS 服务能够自动运行:

# chkconfig --level 35 portmap on


# chkconfig --level 35 netfs on


oss.linuxpk.com
源 2008 年第 9 期  83
经验技巧
如果 NetFS 服务没有自动打开,客户机就无法在启动时成功挂载 NFS 卷。

小结
配置完成后,不论用户在哪台机器上登录,都会去服务器验证密码,并且,服务器本身也可以使用
OpenLDAP 服务器来进行用户验证。

用户登录后,所在的初始位置表面上是客户机的/home/<username>目录,实际是服务器上
的/home/<username>目录。这样,用户的 文档资料就都会存储在服务器中,不论用户在何处登录,
文档资料总是位于同样的位置。全部用户的密码资料也都存储在 OpenLDAP Server 中,既可以由 LDAP
管理员统一维护,也可以由用户使用 passwd 命令来修改。只不过,改变的不是客户机的/etc/shadow
文件和/etc/passwd 文件,而是 OpenLDAP Server 中的资料。

Linux 下防范黑客实用技巧

Linux 是一个多用户的系统,一旦人家取得你的 root 用户之后,他就可以在你的系统上为所欲为了,


由于单用户对系统有完全的控制权限,如果操作不当或被他人进入,那么后果将不堪设想,如何防止入
行单用户了,有以下几个注意的方面:

● 对/etc/inittab 文件进行保护,如果把 id:3:initdefault 中的 3 改为成 1,就可以每次启动直接


进入到单用户方式。对/etc/ini ttab 文件,以 root 身份进入通过 chown 700 /etc/inittab 把属
性设为其它用户不能修改就行了。

● 如果是使用的 lilo 方式进行引导,可能通过 linuxconf 或直接修改 lilo.conf 把引导时等待输入


时间设置为 0 或最短时行。这种情 况下,如果进入单用户方式,可以用软盘进行引导。

● 如果使用是 GRUB 方式进行引导,最简单的方法是使用 GRUB 密码,对启动选项进行保护。

● 为了防止他人远程进行破坏,使系统重启,除了对 ROOT 的密码和/etc 目录下的文件进行有效


管理之外,还应当对 CMOS 进行密码设置,这样即使把系统改成单用户方式了,也无法直接的启动
计算机进行操作。

双系统的用户如何卸载 Linux

原来电脑装的是 windows 和 Redflag linux,后来感觉不爽,就准备卸载 linux。于是,开始了卸载


之旅:

● 在 windows 下的我的电脑-》管理-》磁盘管理,会看到没有名字的 linux 分区,在上面点右


键,删除逻辑分区。


oss.linuxpk.com
源 2008 年第 9 期  84
经验技巧
● 重新启动,改动 bios 启动顺序,把从磁盘启动给禁用,一定要禁用。

● 保存 bios 设置,并重新启动,插入 windows 安装盘,当出现安装画面是选择故障恢复控制台,


就是按 R,进入控制台。

● 会出现选择在那个地方安装 windows,然后输入 1,代表是在 c 盘了,实质上并不是安装


windows,所以不要害怕。

● 然后运行 fixmbr 命令,会说什么没有主启动文件,问是否创建?当然是输入 y,创建了。

● 然后运行 exit 命令,退出重启,把 bios 中的启动顺序改回来就可以了。

把脉 Linux 上 USB 数据流

刘子洋
笔者曾得到一个类似于加密“狗”的 USB 设备,要使之在 Linux 下正常工作。然而,通过一个名为
USBView 的小程序判断,Linux 内核无 法驱动这个 USB 设备,并且在“Linux USB Working Devices”的
列表中也没有找到该设备,这意味着只有很少的人在使用这种类型的 USB 设备。

在 Linux 的/proc/bus/usb/devices 文件中,有这个 USB 设备的一些信息:

T: Bus=01 Lev=02 Prnt=03 Port=02 Cnt=01 Dev#=4 Spd=1.5 MxCh=0


D: Ver=1.00 Cls=ff(vend.) Sub=00 Prot=ff MxPS=8 #Cfgs=1
P: Vendor=0d7a ProdID=0001 Rev=1.07
S: Manufacturer=Marx
S: Product=USB crypToken
C: * #Ifs=1 Cfg#=1 Atr=80 MxPwr=16mA
I: If#=0 Alt=0 #EPs=0 Cls=ff(vend.) Sub=00 Prot=ff Driver=(none)

通过查阅该 USB 设备产品光盘上提供的文档,可以简单了解这个 USB 设备的用途。产品光盘上还提


供了一个共享库,应用程序可以通过共享库使用这个 USB 设备。此外,产品光盘还提供了一个小的测试
程序来展示不同的库方法是如何工作的。通过这个共享库,使 用者可以采用 libusb 方式直接访问该设备。
也就是说,使用这个 USB 设备并不需要一个内核级的驱动。但是,这个共享库的授权协 议不允许一个遵
循 GPL 协议的程序来使用它。只有以上这些信息是无法把这个 USB 设备驱动起来的,下面就从追溯
Linux 上的 USB 数据流开始,给大家提供一种解决此类问题的思路。

解决方案
可以从最新的 2.6 版本的内核入手,解决此问题。2.6 版本的内核可以通过很多种渠道得到,这里不
做详述。

在内核源代码的结构树中的 drivers/usb/core/目录下,有 inode.c、devices.c 和 devio.c 三个文件,


oss.linuxpk.com
源 2008 年第 9 期  85
经验技巧
这三个文件共同实现了 usbfs 文件系统。也就是说,Linux 是通过这三个文件访问 USB 设备的。实现文
件系统的主要工作由 inode.c 完成,它提供多种 VFS 代码,用 这些代码可以创建虚拟文件系统或虚拟文
件。devices.c 文件用于创建和读取/proc/bus/usb/devices 下表示 USB 设备状态信息的文 件。
devio.c 文件用于控制通过 usbfs 文件系统对 USB 设备的访问。要想使 Linux 能够访问 USB 设备,需要
对 devices.c 和 devio.c 做些修改。

具体实现

1.记录访问信息
探索 USB 数据流从记录所有的 USB 设备访问信息开始。在用户程序中,通过 usbfs 访问 USB 设备需
要在相应的设备文件上调用 ioctl()

命令。通过进一步分析 devices.c 文件,发现每次执行 ioctl()时都会调用 usbdev_ioctl()函数,因此,


在这里记录发送给 USB 设备

的访问信息应该是一个很好的解决方法。通过在每一个 case 语句中加入一个自定义的 printk()函数,


可以实现此功能,基本内容如 下:


case USBDEVFS_CLAIMINTERFACE:
printk("CLAIMINTERFACE");
ret = proc_claiminterface(ps, (void __user *)arg);
break;
case USBDEVFS_RELEASEINTERFACE:
printk("RELEASEINTERFACE");
ret = proc_releaseinterface(ps, (void __user *)arg);
break;

经过编译、安装等过程后,每个 usbfs 访问都被记录在内核日志当中,通过 dmesg 命令可以访问这


些日志记录。

2.记录控制信息
通过分析/proc/bus/usb/devices 文件中对 USB 设备的描述,可以得知要最终解决问题必须关心这
些访问的控制终点(Control Endp oint)。devio.c 文件中的 proc_control()函数是用来处理控制消息
的。该函数通过如下语句区分请求访问的类型是读控制消息, 还是写控制消息:

if (ctrl.bRequestType & 0x80)

bRequestType 是一个二进制变量,其最高位决定请求的类型。


oss.linuxpk.com
源 2008 年第 9 期  86
经验技巧
在处理读消息的代码段中加入如下代码,用以记录控制请求的信息:

printk("control read: "


"bRequest=%02x bRrequestType=%02x "
"wValue=%04x wIndex=%04x",
ctrl.bRequest, ctrl.bRequestType,
ctrl.wValue, ctrl.wIndex);

然后,再加入如下代码,用来记录从设备中读出的实际数据:

printk("control read: data ");


for (j = 0; j < ctrl.wLength; ++j)
printk("%02x ", ctrl.data[j]);
printk("");

同样,可以在处理写消息的代码段中加入类似的代码。这样以来,生成并重新装载新的 usbcore 模
块后,就可以记录对设备的所有 双向控制消息了。这些消息可能会返回如下信息:

CONTROL
control read: bRequest=06 bRrequestType=80 wValue=0300 wIndex=0000
control read: data 00 00 61 63

3.优化

接下来要对修改代码做些优化,以使内核源代码很好地接受这些修改。首先,应该修正在 printk()调
用中的一些不正确的地方。其次,所有的 printk()调用都应该有一个相应的日志级别(Logging
Level),这些日志级别可以通过预处理的方式生成。将 include /linux/kernel.h 文件修改如下:

#define KERN_EMERG "<0>" /* system is unusable */


#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */

以上修改完成后,将 usbfs_ioctl()函数中的 printk()调用从“printk("CLAIMINTERFACE");”修改为


“printk(KERN_INFO "CLAIMINTE RFACE);”。

实际上,并不是所有的消息都需要记录到日志中。可以采用头文件 include/linux/device.h 中所提


供的宏(包括 dev_printk()、de v_dbg()、dev_warn()、dev_info()和 dev_err())来决定何种类型的
USB 设备访问消息需要被记录。这些宏都需要一个附加指针指 向一个结构类型,以此标识惟一的设备
ID。将 dev_info()调用修改如下:



oss.linuxpk.com
源 2008 年第 9 期  87

经验技巧
dev_info(&dev->dev, "CLAIMINTERFACE");

然后将确定读、写消息请求的 printk()调用修改如下:

dev_info(&dev->dev, "control read: "


"bRequest=%02x bRrequestType=%02x "
"wValue=%04x wIndex=%04x",
ctrl.bRequest, ctrl.bRequestType,
ctrl.wValue, ctrl.wIndex);
dev_info(&dev->dev, "control read: data ");
for (j = 0; j < ctrl.wLength; ++j)
printk("%02x ", ctrl.data[j]);
printk("");

经过上述修改,得到如下返回信息:

usb 1-1: CONTROL


usb 1-1: control read: bRequest=06 bRrequestType=80 wValue=0300 wIndex=0000
usb 1-1: control read: data 00 00 61 63

不难看出,经过上述修改,清除掉了无关的 USB 设备的消息记录信息。

上述过程会产生一个易用性上的问题,即消息记录信息并不是在用户请求时刻产生的,这样会导致用
户的消息记录过于庞大。在 de vio.c 文件中加入下面的代码行可以解决这一问题:

static int usbfs_snoop = 0;


module_param (usbfs_snoop, bool, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC (usbfs_snoop, "true to log all usbfs traffic");

上述代码定义了一个新的 module_param()函数,用来代替原来的 MODULE_PARM()函数。两者之


间的主要区别在于 module_param()中含有一个新的参数“usbfs_snoop”。可以运行 modinfo 命令查看
修改后的效果:

$ modinfo usbcore
license: GPL
parm: blinkenlights:true to cycle leds on hubs
parm: usbfs_snoop:true to log all usbfs traffic

正常的模块装载命令如下:

#modprobe usbcore

修改后,可以通过下面的命令装载模块:

#modprobe usbcore usbfs_snoop=1

当 usbfs_snoop 不为 0 时,它将会在 sysfs 中显示,并允许用户在模块被装载时查询和修改选项,


其形式如下:


oss.linuxpk.com
源 2008 年第 9 期  88
经验技巧
$ ls -l /sys/module/usbcore/
-r--r--r-- 1 root root 4096 May 13 15:33 blinkenlights
-r--r--r-- 1 root root 4096 May 13 15:33 refcnt
-rw-r--r-- 1 root root 4096 May 13 15:33 usbfs_snoop

如果想打开消息记录功能,可以进行如下操作:

#echo 1 > /sys/module/usbcore/usbfs_snoop

如果要确定用户是否想打开消息记录功能,还需对 dev_info()进行更深一步修改,创建下述宏:

#define snoop(dev, format, arg...)


do {
if (usbfs_snoop)
dev_info( dev , format , ## arg);
} while (0)

这个宏用于测试参数 usbfs_snoop 的值,如果为“true”,则调用 dev_info(dev , format , ##


arg)。

接下来将先前调用 dev_info()宏的地方改为调用 snoop()宏:

snoop(&dev->dev, "control read: ","bRequest=%02x bRrequestType=%02x ","wValue=


%04x wIndex=%04x", ctrl.bRequest, ct rl.bRequestType,ctrl.wValue, ctrl.wIndex);

为了能正确打印数据,需对 snoop()宏做简单修改(只需判断 usbfs_snoop 的值即可):

if (usbfs_snoop) {
dev_info(&dev->dev, "control read: data ");
for (j = 0; j < ctrl.wLength; ++j)
printk("%02x ", ctrl.data[j]);
printk("");
}

至此,修改工作完毕。这样,当通过 libusb 访问一个 USB 设备时,应该可以很好地得到 usbfs 的访


问信息。


oss.linuxpk.com
源 2008 年第 9 期  89
企业应用

Linux on Power 性能调优

陈杰
2004 年,IBM 高调推出了 OpenPower 服务器产品系列,进一步完善了自己的 Linux 产品线,旨在
让开放源码的 Linux 操作系统能够更加可靠高效的进行在 Power 平台上。本文将从 Linux 系统的特性和
Power 架构自身的优势谈起,概略性的讲解如何在 Power 上更好的使用 Linux 系统,如何优化 Linux
on Power,以求带给我们的客户更大的使用价值。

在整个 IBM 的产品战略中 Linux 占有举足轻重的作用。IBM 目前拥有五大硬件构架:System


z、System i、System p、System x 以及 System storage,五大软件品牌:
WebSphere、DB2、Lotus、Tivoli、Rational,在这样一个异构的环境中,Linux 可以相对简洁的提供
一个同构的操作系统层,从而能够向广大的合作伙伴和独立软件开发商提供一个技术整合和商业整合的
平台。

经过开源界不断的努力,Linux 事实上也被证明是解决目前日益复杂的 IT 应用的一剂良药,它能够


支持几十种截然不同的硬件架构,本身优秀的 Unix 血统又使之非常适合作为软件研发的底层平台。IBM
也正是看到了这些 Linux 的特性,才决心在自己的全线产品中支持 Linux,并向我们的合作伙伴推荐这
个操作系统平台。

对 Linux 的支持上,除了人所共知的基于 X86 及其衍生 CPU 构架的 IBM X 系统服务器以外,IBM P


系统服务器也能非常好的支持 Linux 操作系统及其相关软件。IBM Power 平台在产生之初就考虑到是为


oss.linuxpk.com
源 2008 年第 9 期  90
企业应用
高性能计算和高商业负载运行而设计的。在 IBM 与 RedHat、Novell SUSE、RedFlag、Turbo 等 Linux
厂商合作研发之后,Linux on Power 平台更趋完善可用,性能也更趋优越,下面我们就主要来探讨
Linux on Power 上的性能调试技术。

一、性能调优的层次
对于一个应用系统来说,可以进行性能调整的层次很多。

从系统调用的层次上来说,首先应该是应用层,即应用开发者使用 C、C++、Java、SQL 等等开


发语言和相关开发工具开发客户的应用程序,使用高效的开发类库、优化算法,避免各类已知的开


oss.linuxpk.com 2008 年第 9 期  91

企业应用
发错误,在应用层优化是最能够提高性能的一个办法。

接下来就有可能在中间件层进行优化,对应用服务器如 WebSphere 及数据库管理系统如 DB2 进


行优化,调整连接池或者内存区进行优化。

再下来则应该是对操作系统如 Linux 进行优化,除了在客户应用层面会反映出性能问题(如常常连


接超时,没有在有效时间内返回正确结果)以外,在操作系统的监控终端上我们也能够发现性能问
题(如 CPU 运行 100%,内存消耗殆尽)。虽然所有这些问题并不一定是操作系统本身的的问题,
但是通过操作系统,我们能够感知系统的性能问题,并为下一步的解决提供线索。

最后有可能需要对硬件构架进行调整,以适应整个应用系统的性能要求。

下面根据我们的经验,简要列出一些应用系统在出现性能问题时的组件。

从应用开发的角度来划分性能问题的解决的途径,那么第一应该是系统设计阶段就重视性能问题,


oss.linuxpk.com
源 2008 年第 9 期  92
企业应用
仔细斟酌客户对性能的要求,选择合适的应用系统构架以应对性能问题。

在应用程序开发阶段,严密监控开发流程,使用优秀的算法和工具,避免未来的性能损失。

尽可能早的进入到性能测试阶段,找到问题关键,合力解决问题。

二、Linux on Power 性能分析工具


当在应用层次我们已经经过艰苦的努力,提高了应用程序的性能,接下来就要聚焦在 Linux 操作系
统和 Power 硬件平台上调整性能。在设法调整之前,我们需要一系统的监控工具告诉我们性能的
瓶颈在哪里。下面就简要列出 Linux on Power 上的性能分析工具和命令。

● CPU 性能分析工具:

vmstat
ps
sar
time
strace
pstree
top

● Memory 性能分析工具:

vmstat
strace
top
ipcs
ipcrm
cat /proc/meminfo
cat /proc/slabinfo
cat /proc/<pid #>/maps

● I/O 性能分析工具:

vmstat
ipstat
repquota
quotacheck

Network 性能分析工具:
ifconfig
ethereal


oss.linuxpk.com
源 2008 年第 9 期  93
企业应用
tethereal
iptraf
iwconfig
nfsstat
mrtg
ntop
netstat
cat /proc/sys/net

三、Linux on Power 性能调优工具


当通过上述工具及命令,我们发现了应用的性能瓶颈以后,我们可以通过以下工具或者命令来进行
性能的调整。

● CPU 性能调优工具:

nice / renic
sysctl

● Memory 性能调优工具:

swapon
ulimit
sysctl

● I/O 性能调优工具:

edquota
quoton
sysctl
boot line:
elevator= <ioscheduler>

● Network 性能调优工具:

ifconfig
iwconfig
sysctl

四、CPU 性能调整
当一个系统的 CPU 空闲时间或者等待时间小于 5%时,我们就可以认为系统的 CPU 资源耗尽,我
们应该对 CPU 进行性能调整。


oss.linuxpk.com
源 2008 年第 9 期  94
企业应用
CPU 性能调整方法:

● 减少工作负载,选择合适的运行级。

# vi /etc/inittab

# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have
networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

● 关闭非核心的服务进程。

使用如下命令关闭非核心的服务守护进程。

命令形式:#chkconfig [--level levels] name <on/off/reset>

# chkconfig --list talk


talk on
# chkconfig talk off
# chkconfig --list talk
talk off

命令形式:# service [ service_name ] <start|stop|restart|condrestart|status|panic|


save>
# service sshd status
sshd (pid 29927 28946 23589) is running...
# service sshd stop

● 关闭增加型加密 Linux 特性,在/etc/yaboot.conf 文件中让 selinux=0。

#vi /etc/yaboot.conf

image=/vmlinuz-2.6.9-11.EL
label=linux
read-only
initrd=/initrd-2.6.9-11.EL.img
root=/dev/VolGroup00/LogVol00
append="selinux=0 rhgb quiet"

● 编辑/proc/sys/kernel/中的文件,修改内核参数。

#cd /proc/sys/kernel/
# ls /proc/sys/kernel/
acct hotplug panic real-root-dev


oss.linuxpk.com
源 2008 年第 9 期  95
企业应用
cad_pid modprobe panic_on_oops sem
cap-bound msgmax pid_max shmall
core_pattern msgmnb powersave-nap shmmax
core_uses_pid msgmni print-fatal-signals shmmni
ctrl-alt-del ngroups_max printk suid_dumpable
domainname osrelease printk_ratelimit sysrq
exec-shield ostype printk_ratelimit_burst tainted
exec-shield-randomize overflowgid pty threads-max
hostname overflowuid random version

一般可能需要编辑的是 pid_max 和 threads-max,如下:

# sysctl kernel.threads-max
kernel.threads-max = 8192
# sysctl kernel.threads-max=10000
kernel.threads-max = 10000

● 关闭 SMT 功能。

一般而言,POWER 的 SMT(Simultaneous Multi-Threading)功能是有利于大多数程序的


一个 POWER 默认功能,且默认是打开的。但在一些高性能计算中,几乎所有的资源被一个
线程所使用,这时可以尝试关闭 SMT 功能,在/etc/yaboot.conf 文件中加入 smt-
enabled=off。

[root@p615a kernel]# more /etc/yaboot.conf



image=/vmlinuz-2.6.9-11.EL
label=linux
read-only
initrd=/initrd-2.6.9-11.EL.img
root=/dev/VolGroup00/LogVol00
append="smt-enabled=off rhgb quiet"

● 绑定 IRQ 到某一个进程。

● 应用级调优简述。

调优工具有 oprofile/gprof;

编译器 gcc 选项:-o<1/2/3/5> –mcpu=power5,或者直接选择 IBM 的 XL C/C++编译


器;

FDPR-Pro 后连接优化等。

五、Memory 性能调整
当一个应用系统的内存资源出现下面的情况时,我们认为需要进行 Memory 性能调整:

○ 页面频繁换进换出;

○ 缺少非活动页。


oss.linuxpk.com
源 2008 年第 9 期  96
企业应用
例如在使用 vmstat 命令时发现,memory 的 cache 使用率非常低,而 swap 的 si 或者 so 则有比
较高的数据值时,应该警惕内存的性能问题。

Memory 性能调整方法:
● 关闭非核心的服务进程。

相关的方法请见 CPU 性能调整部分。

● 修改/proc/sys/vm/下的系统参数。

# ls /proc/sys/vm/
block_dump laptop_mode nr_pdflush_threads
dirty_background_ratio legacy_va_layout overcommit_memory
dirty_expire_centisecs lower_zone_protection overcommit_ratio
dirty_ratio max_map_count page-cluster
dirty_writeback_centisecs min_free_kbytes swappiness
hugetlb_shm_group nr_hugepages vfs_cache_pressure
# sysctl vm.min_free_kbytes
vm.min_free_kbytes = 1024
# sysctl -w vm.min_free_kbytes=2508
vm.min_free_kbytes = 2508
# cat /etc/sysctl.conf

vm.min_free_kbytes=2058

● 配置系统的 swap 交换分区等于或者 2 倍于物理内存。

# free
total used free shared buffers cached
Mem: 987656 970240 17416 0 63324 742400
-/+ buffers/cache: 164516 823140
Swap: 1998840 150272 1848568

六、I/O 性能调整
系统出现以下情况时,我们认为该系统存在 I/O 性能问题:

○ 系统等待 I/O 的时间超过 50%;

○ 一个设备的平均队列长度大于 5。

我们可以通过诸如 vmstat 等命令,查看 CPU 的 wa 等待时间,以得到系统是否存在 I/O 性能问题


的准确信息。

I/O 性能调整方法:
1. 修改 I/O 调度算法。

Linux 已知的 I/O 调试算法有 4 种:

deadline - Deadline I/O scheduler


oss.linuxpk.com
源 2008 年第 9 期  97
企业应用
as - Anticipatory I/O scheduler
cfq - Complete Fair Queuing scheduler
noop - Noop I/O scheduler

可以编辑/etc/yaboot.conf 文件修改参数 elevator 得到。

# vi /etc/yaboot.conf

image=/vmlinuz-2.6.9-11.EL
label=linux
read-only
initrd=/initrd-2.6.9-11.EL.img
root=/dev/VolGroup00/LogVol00
append="elevator=cfq rhgb quiet"

2. 文件系统调整。

对于文件系统的调整,有几个公认的准则:

将 I/O 负载相对平均的分配到所有可用的磁盘上;

选择合适的文件系统,Linux 内核支持 reiserfs、ext2、ext3、jfs、xfs 等文件系统;

# mkfs -t reiserfs -j /dev/sdc1

文件系统即使在建立后,本身也可以通过命令调优;

tune2fs (ext2/ext3)
reiserfstune (reiserfs)
jfs_tune (jfs)

3. 文件系统 Mount 时可加入选项 noatime、nodiratime。

# vi /etc/fstab

/dev/sdb1 /backup reiserfs acl, user_xattr, noatime, nodiratime
1 1

4. 调整块设备的 READAHEAD,调大 RA 值。

[root@overflowuid ~]# blockdev --report


RO RA SSZ BSZ StartSec Size Device

rw 256 512 4096 0 71096640 /dev/sdb
rw 256 512 4096 32 71094240 /dev/sdb1
[root@overflowuid ~]# blockdev --setra 2048 /dev/sdb1
[root@overflowuid ~]# blockdev --report
RO RA SSZ BSZ StartSec Size Device

rw 2048 512 4096 0 71096640 /dev/sdb
rw 2048 512 4096 32 71094240 /dev/sdb1


oss.linuxpk.com
源 2008 年第 9 期  98
企业应用
七、Network 性能调整
一个应用系统出现如下情况时,我们认为该系统存在网络性能问题:

○ 网络接口的吞吐量小于期望值;

○ 出现大量的丢包现象;

○ 出现大量的冲突现象

Network 性能调整方法:

1. 调整网卡的参数。

# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Half
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes
#ethtool -s eth0 duplex full
#ifconfig eth0 mtu 9000 up

2. 增加网络缓冲区和包的队列。

# cat /proc/sys/net/ipv4/tcp_mem
196608 262144 393216
# cat /proc/sys/net/core/rmem_default
135168
# cat /proc/sys/net/core/rmem_max
131071
# cat /proc/sys/net/core/wmem_default
135168
# cat /proc/sys/net/core/wmem_max
131071
# cat /proc/sys/net/core/optmem_max
20480


oss.linuxpk.com
源 2008 年第 9 期  99
企业应用
# cat /proc/sys/net/core/netdev_max_backlog
300
# sysctl net.core.rmem_max
net.core.rmem_max = 131071
# sysctl -w net.core.rmem_max=135168
net.core.rmem_max = 135168

3. 调整 Webserving。

# sysctl net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_reuse = 0
# sysctl -w net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_reuse = 1
# sysctl net.ipv4.tcp_tw_recycle
net.ipv4.tcp_tw_recycle = 0
# sysctl -w net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_recycle = 1

基于 Linux 平台的网页内容过滤系统的实现
蒋年华

引言
互联网是现代信息通信技术发展的产物,是 20 世纪人类社会最伟大的发明之一。我国发展互联网的历史
至今将近 10 年,发展速度非迅速。目前,我国互联网上网用户已经达到了八千万,居世界第二位,其中
宽带接入用户达到一千六百万,联网计算机为三千四百四十万,各类网站五十九万个。
在全球互联网快速发展的同时,境内外不法分子也利用互联网站、电子邮件、病毒传播、黑客攻击等手
段散布暴力、色情、非法宗教、赌博、政治等各种不良信息,网络犯罪活动的现象也日渐增多。这不仅
危害网络与信息安全、扰乱社会秩序、破坏社会风气,对青少年的健康成长产生不良影响,而且对国家
安全、社会稳定、人类文明的进步都构成了严重的威胁。这些问题已经引起党中央、国务院的高度重视,
及时采取了各种措施和应对防范措施。目前,与我国互联网发展状况相适应的一整套法律法规、管理机
制等正在逐步建立,以自我管理、自我规范、互相监督、共同发展为核心的行业自律机制逐步形成,并
在净化网络环境方面发挥了重要的作用。
从整体来看,我国互联网发展的主流是好的,存在的问题主要是对互联网的管理和规范,仍许存在许多
不到位的地方,尤其是网上不良信息的大量涌入,腐蚀未成年人的心灵,严重影响青少年的健康成长,
已引起社会各方面的广泛关注和强烈不满。特别是 2004 年 7 月 16 日,公安部等部门开展打击淫秽色情
网站专项行动以来,违法和不良信息举报中心网站更是家喻户晓,打击非法网站、抓获犯罪分子成果显
著。在这场声势浩大的打击淫秽色情网站专项行动中,我国的大学校园各级领导和网络管理人员为净化
网络空间,阻断和铲除网上“黄毒”不知疲倦地工作着。

校园网对信息内容过滤的要求
对我们大学校园内的局域网网络而言,接入互联网的好处不言自明,但互联网也是一柄双刃剑,一方
面老师同学们从网上能及时了解、掌握最新资讯,进行网络教学;同时,作为校园网的网络管理部门,


oss.linuxpk.com
源 2008 年第 9 期  100
企业应用
如果对此管理不当,同学们上网时间无节制上网浏览,学习时间上网聊天、游戏、看电影、BT 下载、浏
览色情网站甚至浏览反动、邪教网站等,这些都给我们的学校应用互联网高效工作、学习的预期打上了
较大的折扣,甚至会导致学生们走上违法犯罪的道路。

如何利用现有的网络条件,在最节省资金和资源的情况下,构建一套高效安全的网页内容过滤系统对
校园网网站浏览情况进行监控,通过阻止在对不适当的网址的访问来提高学习工作效率,成为目前大学
校园网网络管理员需要解决的技术难题。

和大多数学校一样,目前我校主要利用 Linux 平台下的代理服务器 Squid 为内网的所有客户端提供


浏览互联网的代理服务。在不增加软硬件成本的情况下,我们通过在 Linux 服务器中安装开放源码的网
页内容过滤软件 DansGuardian,配合 Squid 来实现网址和内容的过滤,当用户要求访问网页时,
DansGuardian 将检索管理员设定的非法网站和 IP 地址列表,遇到非法请求则阻止该用户对不正当的站
点的链接。

DansGuardian 网页内容过滤技术原理
网络内容过滤技术是将用户请求的 IP 或 URL 与不良信息库或列表进行比对,阻断数据库中存在的不
良站点。目前所知的最大的数据库拥有超过两亿个 URL,这些 URL 由专门的机构(公司、团体等)对互
联网站点进行内容健康性检查、分类并长期维护。在我们构造的这套基于 Linux 的网页内容过滤系统中,
正是需要使用这些机构提供的 URL 数据库作为非法网站和 IP 地址的列表。这样就具有一定的权威性和通
用性。

在运行有 SQUID 代理服务器的 Linux 平台中,我们将 DansGuardian 安装客户端和 SQUID 代理服


务器之间,DansGuardian 最大的作用就是中途截取和修改客户端浏览器和 SQUID 代理服务器的通讯。
DansGuardian 默认监听 8080 端口,而 SQUID 默认监听 3128 端口。当用户向 SQUID3128 端口提出
请求的时候,此请求必须先通过 DansGuardian8080 端口这一关,如果 DansGuardian 同通过分析该
请求的报头“request header”、MIME-type 等信息发现非法关键字,或者该用户请求符合 BLOCK
LIST(阻止名单)的非法网站和地址,DansGuardian 将直接给予用户一个警告页面,而不会把该请求
发送到 SQUID 的 3128 端口,从而达到内容过滤和非法网站访问的目的。DansGuardian 对普通的
HTML 请求分析分析非常详细到位,基本上能对报头的 username, malformed URL, source IP, URL,
POST status, banned user, exception user, banned URL, exception URL, banned IP, exception
IP 等项目进行分析,还能对使用 443 端口的 SSL 服务、压缩的 HTML 内容、请求的图片等文件进行分析,
功能十分强大,能满足目前我们校园网网页内容过滤的要求。

以下几副示意图能够将 DansGuardian 技术工作原理进行一个简要的介绍。


oss.linuxpk.com
源 2008 年第 9 期  101
企业应用

图一

图二

图三

图四

DansGuardian 网页内容过滤的优势及安装
选择 DansGuardian 作为校园网的网页内容过滤系统主要在于 DansGuardian 存在许多优点,非常
适合大学校园利用现在的网络设备构建低成本的网页内容过滤系统。

1. 相对于商业网页内容过滤系统而言,在开发源码环境下开发的 DansGuardian 无
疑是低成本的选择。无需增添任何硬件设备,直接在 Linux 平台下编译安装设置即可。

2. DansGuardian 可以阻止商业广告网站,过滤烦人的商业广告内容。


oss.linuxpk.com
源 2008 年第 9 期  102
企业应用
3. DansGuardian 可以过滤涉及含有色情、暴力、种族歧视、非法宗教、暴力、欺
诈信息等内容的 HTML 请求。

4. DansGuardian 对服务器硬件要求较低,资源占用小,执行速度很快,隐蔽运行。
DansGuardian 的警告页面提示详细,支持多国语言,包括简体中文。

5. 可以过滤指定的 URL 或 IP。可对 Big5, Unicode , top-bit 等字符集进行分析过


滤,内容过滤技术具有一定的智能化。

6. 可以指定那一些文件不可以下载,例如:电影格式文件、mp3、vb、BT 种子等。
这点对提高网络带宽资源利用率,防治病毒从互联网对我内网的传播起到很大作用。

7. DansGuardian 支持多种操作系统,如 Linux, FreeBSD, OpenBSD, NetBSD, Mac OS


X, HP-UX,只要安装有 SQUID 代理服务器的系统都能安装 DansGuardian。

8. DansGuardian 网站和 IP 阻止列表具有全球性,管理员可以在国内外的 BLOK LIST


网站下载编辑,如著名的 urlblacklist.com 实时提供了全球非法网站的列表,省去管
理员自行编辑非法网站列表的大量人力物力。

9. DansGuardian 提供了灵活的内容管理策略制定,各种配置文件,黑白名单,管
理策略具有良好的编辑能力。

DansGuardian 在全球的大学里得到越来越多的使用,具有良好的通用性,不同大学之间的技术力量
甚至可以联合起来,共享或者共同构建统一的非法网站列表,避免各自为战的编辑非法网站列表,节省
资源,提高整体作战能力。据悉,DansGuardian 近期也被权威媒体评为最佳的开放源码下的网页内容
过滤软件。

DansGuardian 的安装和使用,DansGuardian 的安装不是很复杂,具有一定 Linux 操作管理技能的


系统管理员都能很好的完成这个任务。下面简要说明 DansGuardian 的安装过程。详细安装使用指南需
要参考 DansGuardia 网站。http://dansguardian.org/downloads/detailedinstallation2.4.html

首先,下载软件:http://dansguardian.org/downloads/2/Stable/

安装的过程很简单。

$ tar xvfz dansguardian-2.8.0.6.source.tar.gz


$ cd dansguardian-2.8.0.6
$./configure --cgidir=/var/www/cgi-bin
$ make
$ make install

注意:下指令./configure 的时候要用参数--cgidir=/var/www/cgi-bin 因为 cgidir 内定值


是/home/httpd/cgi-dir 与 Fedora Core 2 不一样。

安装的档案如下:

设定各种过滤、管理文档:
/etc/dansguardian/
bannedextensionlist
bannediplist


oss.linuxpk.com
源 2008 年第 9 期  103
企业应用
bannedmimetypelist
bannedphraselist
bannedregexpurllist
bannedsitelist
bannedurllist
banneduserlist
contentregexplist
exceptioniplist
exceptionphraselist
exceptionsitelist
exceptionurllist
exceptionuserlist
greysitelist
greyurllist
filtergroupslist
phraselists/*
pics
weightedphraselist

cgi 档案:
/var/www/cgi-bin/dansguardian.pl

执行档:
/usr/sbin/dansguardian

开机自动执行档:
/etc/rc.d/init.d/dansguardian

现在 DansGuardian 已经安装了。要启动:

先确定开机时会自动执行 DansGuardian 程序:


chkconfig --level 345 dansguardian on

手动启动 DansGuardian:
service dansguardian start

接下来需要给 DansGuardian 提供一个 http 服务器。当 DansGuardian 分析到一个网页有不适当的


内容,它不会把这网页内容送给客户端浏览者。而是通过 http 服务器给使用者一个警告信息。最简单的
方法是利用 Linux 中我们已有的 APCHE http 服务器,将 dansguardian.pl 拷贝到 http 服务器的/var/
www/cgi-bin 就可以了。然后编辑/etc/dansguardian/dansguardian.conf,将
accessdeniedaddress 的值指向这 http 服务器。

最后提醒用户,将客户端浏览器代理端口改为 8080 即可。

DansGuardian 管理
在具体使用中,我们对 DansGuardian 采取了分级管理的模式。由校园里的高级系统管理安装设置
好 DansGuardian,对于 DansGuardian 运行参数配置和配置文件不允许其他人员修改。而对于控制
DansGuardian 的非法网站列表,黑白名单等则由 1 个或者多个普通管理员负责承担。在日常网络维护
中,普通管理员可定时访问国内外官方或民间提供的非法网站列表,不断添加到服务器 DansGuardian
的列表中去,不断充实 DansGuardian 的过滤能力。同时 DansGuardian 记录下来的经常访问非法网站
的用户进行警告,提醒他们不要尝试访问不适合的网站,对于屡教不改的用户,将通过 Linux 平台上的


oss.linuxpk.com
源 2008 年第 9 期  104
企业应用
防火墙或其他手段禁止其上网。

实际上,DansGuardian 除了能对网页内容进行过滤之外,还有其他一些功能,例如 DansGuardian


可以加挂防病毒模块,配合其他一些开发源码爱好者编写的模块来实现不同的功能。对于采用 C++编写
的 DansGuardian,我们也可以对其源代码进行研究和改进,使之更为完善。

结束语

国际互联网自诞生起,便充彻各种繁杂信息。良莠不齐的内容与互联网长期共存是不争的事实,也是互联网的“
开放性”所决定了的特点。我们应当充分认识打击非法网站,净化网络环境这项工作的长期性、艰巨性、复杂性,
认真研究、准确把握互联网的客观规律,不断改进我们对网络管理的技术水平,加强教育、管理,发展、完善内
容过滤技术,全社会共同努力,加强和改进未成年人思想道德建设工作不断推向深入,不断取得新的成效,促进
我国互联网事业全面、协调、可持续发展。

基于加密容器法保护家庭计算机文件

朱先忠
许多人采用加密分区或驱动器的方式来确保数据的安全性,但是如果你正在寻找一种更为简单但仍安
全的方式的话,我建议你使用容器加密方法。

在多数情况下,把你的信息存放在自家机器中更为安全些。然而,如果某人有一天突然闯入你家并偷
走你的计算机,那么你可能因由此丢失的东西,如医疗信息、银行帐户、税记录等,而面临以后数年的
胆战心惊。

针对此情形,我决定开发一种方式来保护家庭中的关键信息。但在开始前,我必须为之确定几个目标:
● 必须尽可能简单易用。
● 不能出现数据损失。
● 即使一台计算机物理上被盗,数据仍受到保护。

第一个目标是绝对必要的。我不可能是使用该系统的唯一人,因此必须针对非技术人员开发该系统。
另一方面,避免数据损失也是一个非常重要的目标。如果在硬盘驱动器失败的情况下你无法取回数据,
那么对数据进行保护又有何意义呢?最后一个目标是创建这个工程的主要目的之所在:如果真正出现家
中计算机被偷,需要花多长时间才能搞清楚贼人存取所有必需的信息来窃取我的家庭成员之一的身份呢?

一旦定下目标,我马上看手分析我的选择并加以评估。最终,我决定使用一种加密“容器”机制—它在
功能上就象任何其它存储设备,但只有在需要时才展示其保护功能。为了防止数据损失,它应该能够被
备份到我的家庭服务器上。在家庭服务器上,同样的技术被使用来保护我的备份,而在其上我还能刻录
CD 或 DVD 以实现离线存储。

为了实现数据保护,首先要搞清楚如何创建一个加密容器。最终,我发现了两种实现方法:一种是使


oss.linuxpk.com
源 2008 年第 9 期  105
企业应用
用 cryptoloop;一种是使用 cryptoloop 的后继者—dm_crypt。对于使用 cryptoloop,有很多的参考
信息,但是我很快发现它已经过时了,所以我决定采用更安全的 dm_crypt 内核模块。

前提

为了编译在本文中所描述的加密容器配置,必须满足下面条件:
● 必须安装内核版本 2.6.4-rc2 或更高版本。
● 必须安装 KDE 版本 3.3 或更高版本。
● 你必须具有根权限来实现初始设置。

现在,我正在使用这种配置:在内核版本 2.6.12 上运行 Gentoo 系统。另外,本文展示的脚本已经


被应用于 KDE 版本 3.3.x 和 3.4.x 中;但是更旧版本的 KDE 也可能会工作,但是我没测试过。

配置系统
为了使用 dm-crypt,必须把相关模块编译或构建到内核中。首先,你必须启动设备映射器模块—它
允许你在现有设备部分上创建新的逻辑块设备。然后,该逻辑块设备被“映射”到被当作正常驱动分区使用
的设备。一旦启动了设备映射器,随后你就可以启动 dm-crypt;这对应于内核配置菜单中的“Crypt
Target Support”选项。dm-crypt 是一个内核模块,你正是用它来处理加密/解密的。

为了把一个加密容器应用到你的文件而不是整个驱动器或分区上,还需要在内核中启动 loopback 设
备支持。该 loopback 设备内核模块允许你使用普通文件,好象它们是真实的块设备。最后,你必须把想
使用的加密类型编译到内核中或设置为一个模块。在本文示例中,我使用了 AES 加密算法,但也可以选
用其它算法。

一旦启动所需的内核模块,应该编译该内核并安装它。因为我没有直接把这些模块构建到内核中去,
所以我把必需的模块 dm-mod,dm-crypt 和 aes-i586 添加到我的 Gentoo OS
的/etc/modules.autoload/kernel-2.6 下,这样它们可以在启动时自动加载。下面是你需要在内核中
启动的一个内核模块列表:

Device Drivers -> Multi-Device Support (RAID and LVM) -> Device Mapper Support
Device Drivers -> Multi-Device Support (RAID and LVM) -> Crypt Target Support
Device Drivers -> Block Devices -> Loopback Device Support
Cryptographic Options -> <encryption type>

对于其它可能没有中心位置来帮助在启动时自动装载内核模块的系统,你可以把适当的 modprobe
命令添加到一个启动脚本中。对于基于 Debian 的系统,例如 Ubuntu,使用的脚本
是/etc/init.d/bootmisc.sh。对于其它分发包,你可以使用/etc/init.d/rc.local。下面是对于非
Gentoo 分发包推荐的添加到启动脚本中的命令:

$ modprobe dm-mod
$ modprobe dm-crypt


oss.linuxpk.com
源 2008 年第 9 期  106
企业应用
$ modprobe aes

现在,你已经配置好内核,接下来必须安装两个包—它们将有助于创建该加密容器并作为一个设备来
使用。需要安装的第一个包是设备映射工具。在 Gentoo 上,简单地执行 emerge device-mapper 将自
动地下载、编译并安装该包。其实,它有可能已经安装在其它的 Linux 分发包中。一种容易的确定是否
你已经安装了该设备映射器包的方法是看一下是否/dev/mapper 和/dev/mapper/control 已经存在。
如果它们存在,那么该设备映射器已经安装。否则,对于基于 Debian 的系统,例如 Ubuntu,你可以执
行 apt-get 来安装 libdevmapper。如果你使用一不同的分发包,那么请检查你的包管理系统来查看它
是否容易安装。如果不容易安装,请到“参考资料“部分找一个你能直接下载它的链接。

接下来,你需要安装的第二个包是 cryptsetup 工具。可以通过执行 emerge cryptsetup 命令来把该


工具安装到 Gentoo 上。其实,cryptsetup 可能已经为你所用的 Linux 自动安装了。你可以通过检查是
否该 cryptsetup 命令可用以判断是否该包已经安装(很可能是在/bin 目录下)。否则,你可以参考“参
考资料”中的 dm-crypt 列表。

创建加密容器
在重启动你的内核之后,你就可以为自己的文件创建容器并登录它。选择一个具有足够空间的分区来
创建该容器并使该容器留下足够的空间来存储所有你想要放在其中的文件。记住,在我写本文之时,一
旦你创建了容器,就无法增加这个容器的大小。代之的是,你必须创建一个新的更大的驱动器容器,把
旧容器中的一切复制到新容器中去,然后删除旧的容器。

为了创建该容器文件,可以使用 dd 命令;典型地,它被用于复制驱动器分区。在下面的实例中,我
指定了每块的大小为 1MB 并且该容器的大小应该是 2,048 块(该容器的大小为 2GB—1MB×2,048
块)。

注意,我使用了一个特殊设备(当被读时它只输出零)作为该 dd 命令的一个源。有人建议使
用/dev/random 可能更好一些;但是,这样以来,不好确定该容器实际使用的空间大小。我也使用了一
个分区(/encrypted),这是我特地为存储容器而保留下来的。

$ dd if=/dev/zero of=/encrypted/data.crypt bs=1m count=2048

现在,使用你的容器文件来创建一个 loopback 设备。如果你使用多个容器,那么如果你想要同时登


录它们的话,你必须使用一个不同的/dev/loopX 设备—在此,X 是一个唯一的名字。我选择把特定的容
器放在我的脚本中的具体数字上(见后面的细述),这样我就知道哪个容器正在使用哪个 loopback 设备。

$ losetup /dev/loop0 /encrypted/data.crypt

接下来,创建加密的设备。在下面给出的例子中,我选择了使用 AES 加密算法,它在内核配置期间


作为一个内核模块被编译。当创建设备时,你必须指定一个口令(或者密钥),以便用于加密和解密该
容器中的一切。这可能是一个你在命令行上指定的安全口令字。对于我的情况,我使用了/dev/random
来生成一个具有 32 个字符的随机字符串(256 位)—临时存放在一个文
件/home/pritchey/crypto.key 中;后面将详述其细节实现。

$ cat /dev/random > /home/pritchey/foo (hit control-c after a second goes by to


oss.linuxpk.com
源 2008 年第 9 期  107
企业应用
stop it!)
$ cat /home/pritchey/foo | cut -b 0-31 > /home/pritchey/crypto.key
$ rm /home/pritchey/foo
$ cryptsetup -c aes -d /home/pritchey/crypto.key create data.crypt /dev/loop0

现在,你已经拥有一个行为上类似于正常的驱动器分区的东西。为了登录并使用它,你必须在其上创
建一个文件系统。我选择使用 ext2 文件系统,但是你也可以使用其它文件系统。一旦创建该文件系统,
它就可以象一个常规的驱动器分区一样地被登录。

$ mke2fs -j /dev/mapper/data.crypt
$ mkdir /mnt/encrypted
$ mount /dev/mapper/data.crypt /mnt/encrypted

一旦登录,你的加密的设备就象一个正常的驱动器分区一样—你可以在其上实现复制文件,删除文件,
编辑文件,等等。唯一的差别是,你必须记住,当你使用完后,要正确地卸载该设备并删除 loopback 安
装:

$umount /mnt/encrypted
$ cryptsetup remove data.crypt
$ losetup -d /dev/loop0

现在,要在以后存取你的文件只需要三个步骤:

$ losetup /dev/loop0 /encrypted/data.crypt


$ cryptsetup -d /home/pritchey/crypto.key create data.crypt /dev/loop0
$ mount /dev/mapper/data.crypt /mnt/encrypted

这就解决了保护你的数据的问题。但是,对于非技术用户来说,这些命令很难记住且看上去也别扭—
更不用提它们需要根存取权限了。下一步是以一种既易于操作又对于想查找这些内容的人来说并不那么
明显的方法自动化登录/卸载该加密容器。

自动创建(Ⅰ)
为了自动登录/卸载加密容器,我求助于搜索引擎和我的一位同事。当我想为上面的命令创建一个脚
本时所遇到的问题是,要求有根存取权限来建立一切。我想实现家庭中的其他人也能够使用该加密容器,
但是他们还没有足够的经验来使用根级存取权限。我费了很大劲才从网上找到一个很小的用 C 语言编写
的程序,可以用它来担当一个需要根权限的脚本的包装器(见“参考资料”)。所有要做的是,更改该程序
假定要运行的命令,编译该程序并把它通过粘位(sticky bit)复制到指定位置。

为了使用这个包装器,你需要在编译它之前改变三个值。首先,把变量 myprog 设置为你想要执行的


脚本。第二个变量叫 myarg1,它包含要使用的 loopback 设备(/dev/loopX)的名字。最后一个变量叫
myarg2,被设置为你想要登录的容器名。对于我的命名计划,我把一个.crypt 添加到我的容器文件名的
后面。我还以一种相同的方式命名我的密钥文件并以.key 扩展名结束。下面是程序 wrapper.c 的 C 语言
源代码:

#include <stdio.h>

#include <unistd.h>


oss.linuxpk.com
源 2008 年第 9 期  108
企业应用
const char myprog[] = "/bin/encrypt_mount_gen";

const char myarg1[] = "loop0";

const char myarg2[] = "data";

main(){

putenv("PATH=/bin:/usr/bin");

putenv("IFS= \t\n");

setgid(getegid());

setuid(geteuid());

execl(myprog, myprog, myarg1, myarg2, (char*)0);

fprintf(stderr,"Could not execute %s\n",myprog);

perror("exec");

exit(1);

正确修改后,编译该程序,把它复制到位并且确保设置了正确的权限。我选择仅对于能够登录到加密
容器(名为 crypto)的用户在/etc/group 下创建一个特定的组。加密设备能够登录的目录的许可权和所
有权(在上一步中作为/mnt/encrypted 创建)也是用这种方式设置的。这可以阻止另外的在该计算机
上具有帐户的用户来登录或存取加密的设备。

$ gcc -o mysecretcommand wrapper.c


$ cp mysecretcommand /bin
$ chown root:crypto /bin/mysecretcommand
$ chmod 750 /bin/mysecretcommand
$ chmod u+s /bin/mysecretcommand

为了保护登录的加密数据:

$ chown pritchey:crypto /mnt/encrypted


$ chmod 770 /mnt/encrypted

为了卸载该加密容器,你需要再次使用这个包装器程序—在本示例脚本中称作 encryptoff。但是,
这一次,它调用一个脚本(包含正确的用于卸载该加密容器的命令)。下面的示例脚本是用于卸载一个
登录的加密容器:

#!/bin/bash

/bin/umount /mnt/encrypted

/bin/cryptsetup remove data.crypt

/sbin/losetup -d /dev/loop0

#对于每个加密容器重复上面三个命令....


oss.linuxpk.com
源 2008 年第 9 期  109
企业应用
自动创建(Ⅱ)
首先,编写从上面的包装器中调用的脚本,这样以来当用两个参数调用它时,它就能够登录到任何加
密的容器中。用这种方式,我可以拥有多个包装器—它们对于每个特定的加密容器是唯一的,但是只有
一个脚本实际执行登录和卸载。该脚本假定,加密容器以.crypt 扩展名结束,而密钥文件以.key 扩展名
结束,但是它们都有相同的开始名—这被作为第二个参数传递。

为了进一步增强安全性,我还决定对一个 U 盘上的加密设备存储密钥(口令字)。把口令存储在一个
文件内永远不会是个好主意,但是在这种情况中口令字是不可能记住的。只要该 U 盘与它所属的计算机
相脱离—例如,被锁在一个安全的地方,那么这就是一个足够的方案了。如果该计算机被偷,窃贼带走
USB 密钥和计算机并知道如何来操作的可能性很小。而且,由于使用了一种 256 位(32 个字符)的密钥,
系统会很难用暴力方式来破解。

因此,该自动化脚本还负责登录该 U 盘并在完成后卸载它。这会最小化该 U 盘需要连接到计算机上


的登录时间。这就使得某人让其一直连接的可能性极小,因为该驱动器可以在登录后被立即移去(后面
将详述)。

下面是从包装器调用的 encrypt_mount_gen 外壳脚本:

#!/bin/bash

/bin/mount /mnt/usb_stick

/sbin/losetup /dev/$1 /encrypted/$2.crypt

/bin/cryptsetup -d /mnt/usb_stick/$2.key create $2.crypt /dev/$1

/bin/mount /dev/mapper/$2.crypt /mnt/encrypted_$2

/bin/umount /mnt/usb_stick

这种设计部分地解决了易用性的问题,但是它仍然需要某人记住一个命令—为了把它隐藏起来我可以
给它任何命名。我有一个想法,并且搜索了一下网络,发现 KDE 有两个特殊目录—它们能够包含用户第
一次登录或登出后要运行的脚本或包含到可执行文件的链接。每个用户的 home 目录下都包含一个隐藏
的目录.kde。这正是此两个目录用于登录/登出的位置。用于登录的目录称作 Autostart,第一个字母大
写。只需把一个脚本放在此,由它负责执行你需要的包装器的数目。下面是我放
在/home/pritchey/.kde/Autostart 目录下的示例脚本:

#!/bin/bash

/bin/mysecretcommand

/bin/mysecretcommand2

...

同样,你可以在另一个脚本中使用目录.kde/shutdown 来卸载并自动清除任何加密容器。这是解决
使用问题的最后一步。为了使用该系统,你仅需要打开计算机,然后用加密容器的密钥插入 U 盘并且登


oss.linuxpk.com
源 2008 年第 9 期  110
企业应用
录到 KDE。一旦登录,拔下该 U 盘并且立即把它返回到它的隐藏点。如果你在插入 U 盘之前登录,那么
你或者可以登出然后通过插入该 U 盘来再次登录,或者从一个外壳提示符下执行该包装器命令。

备份工作
最后要强调的是:应该尽最大努力来保护你自己免受数据损失。我已在前面解决了这个问题,所以至
此仅剩下一个简单的把加密容器集成到我的备份系统的问题。当其他使用者退出 KDE 时,我的所有系统
被设置为备份用户的 home 目录—这是通过在.kde/shutdown 中的一个脚本激活的。所有我需做的是,
当用户登录时修改该脚本来处理加密容器。这个脚本执行 rsync 并且把任何已改变的文件保存到一个服
务器上。于是,我修改该备份脚本,以便使用参数来指定要被同步的目录。缺省情况是,用服务器上的
备份位置同步用户的 home 目录。然后,在用户的 shutdown 目录下的脚本被修改来探测是否加密容器
已经被登录;而如果已经登录,则在卸载前 rsync 它。同步登录的数据要比同步大的容器文件本身快得
多,即使在一个安静的家庭网络上。下面是我放在/home/pritchey/.kde/shutdown 中的脚本:

#!/bin/bash

#检查是否你的加密容器已经登录;如此已经登录,

#那么在卸载它们之前,对其进行备份

is_projects_mounted=`df | grep encrypted_projects`

is_encrypted_mounted=`df | grep encrypted | grep -v projects`

if [ "$is_projects_mounted" != "" ]; then

/home/pritchey/scripts/backup_rsync.sh /mnt/encrypted_projects

fi

if [ "$is_encrypted_mounted" != "" ]; then

/home/pritchey/scripts/backup_rsync.sh /mnt/encrypted

fi

#现在,既然它们已经被正确备份,卸载加密分区。

#调用包装器—它调用该脚本(其中包含卸载已登录的容器的命令)

/bin/encryptoff

# 现在,备份非加密的数据,这样就可以拥有一个脱机备份。

/home/pritchey/scripts/backup_rsync.sh

而且,下面是在我的 KDE 关闭脚本中所参考的目录备份脚本的一般目的:

#!/bin/bash -x

#缺省地(如果没有参数传递),这个脚本执行一个很简单的用户家庭目录的备份。


oss.linuxpk.com
源 2008 年第 9 期  111
企业应用
#这个脚本可备在用户的~/.kde/shutdown 目录中参考之用

# 如果传递参数,那么它们的用法如下:

# 参数 1:用作被同步的基目录

# 参数 2:用作目录/文件的'忽略'列表
echo "------------" >> /tmp/rsync.log
echo "starting" `/bin/date` >> /tmp/rsync.log

#确保你在线并能够存取你的备份服务器...
if [ `ping -c 1 192.168.1.50 | grep '64 bytes from' | wc -l` -eq 1 ]
then

if [ "$1z" == "z" ]; then

BACKUP_DIR="/home/$USER"

EXCLUDE_DIR="/home/$USER/OpenOffice*"

else

BACKUP_DIR="$1"

EXCLUDE_DIR="$2"

fi

/usr/bin/rsync -vauR --delete --stats --exclude="$EXCLUDE_DIR"

"$BACKUP_DIR" rsync://192.168.1.50/intrepid-linux

echo "Rsync for: $BACKUP_DIR succeeded" >> /tmp/rsync.log

else

echo "Rsync for: $BACKUP_DIR FAILED" >> /tmp/rsync.log

fi

echo "completed" `/bin/date` >> /tmp/rsync.log

总结

我读过许多有关加密完整的分区和驱动器的文章,但是我选择了使用加密容器作为代替。通过使用容器,我可以
实现灵活地移动数据,把它们备份到 CD 或 DVD 上,而且当我不需要它们时则不必登录它们。如果是其它情形,
我可以选择使用加密分区或驱动器的方式。在最开始,我也非常关心使用一种加密系统对性能所造成的影响。但
是,经过一年的试用,我还没有发现任何性能方面的问题。

显然,可以进一步增强我所用的备份脚本。对于我个人的家庭使用来说,这已被证明足够了。另外,本文提供的
脚本中没有涉及其它安全检查问题;我也没有详及有关 rsync 的使用问题。为了实现保护我的系统,我还在系统
关闭脚本中包含了用于卸载该加密容器的命令。这样,如果一个系统被远程关闭或 UPS 软件关闭了系统,那么加
密容器也将被正确而干净地卸载。


oss.linuxpk.com
源 2008 年第 9 期  112
嵌入式

嵌入式开源模式

顾宏军
开源对于有效组织群体智慧,降低开发成本和快速建立用户群等方面,都具有独特的优势。开源是一
种高效,节约的高生产力模式 ,开放源代码可以增加项目的透明度,降低开发风险,协同合作的机制使
众多自愿者们在项目的发展过程中与项目本身建立起感情 ,形成一个社区,同时这些项目参与者也将为
市场推广带来良好口碑,成为潜在的用户或者合作伙伴。

传统的开源模式
开源软件已从“玩家”手中走向产业化,开源技术也趋于成熟,并发展了若干种成功的商业模式,如
RedHat 的订阅模式、MySQL 的双 授权模式、SugerCRM 的租赁模式等。据 IDC 预测,全球 Linux 市场
每年以 25%的速度增长,到 2008 年将达到 350 亿美元(其中桌面 Lin ux 将达到 10 亿美元,占
3%)。国内很多公司也看到了开源的巨大商业价值,当这些在国外成功应用的商业模式,在国内却显有
成 功案例。我们需要探索有中国特色的开源商业模式。

国内的 Linux 企业现在基本都是模仿 Red Hat 和 Suse 模式,做 Linux 发行版,如红旗 Linux、中标
软件等。但据中国软件行业协会调查显示,国内有相当数量的计算机用户在购买预装了 Linux 的计算机
后,将 Linux 舍弃不用,私自安装了盗版的 Windows。用户将 Linux 舍弃不用,这类 Linux 厂商又何谈
向用户收服务费呢?它们只能是靠政府的扶持资金艰难度日了。严重的盗版问题、对知识产权的 不认同
注定了目前这种服务模式目前在中国难以推广。

在国内推广软件租赁服务的 C3CRM 团队,为了生存被迫对业务进行调整,推出了商业版 CRM 系统。


“做出今天的选择,实在是迫不得已,在没有专职从事 C3CRM 之前,一直觉得在中国能通过技术支持和
服务能生存,成立公司正式运营了 4 个多月,发现我们想错了, 国内的企业都不大愿意为服务付费,即
使有一些付费客户,付一段时间就不再付费了。"目前在国内靠服务收费很难做,而且国人 都有种感觉拿
到手的、见得着的才是货真价实,对服务很少乐意付费,shopex 的裴总也有这样感受。对客户而言,产
品功能能否满足需求,往往是用户选择产品的标准,而不是该产品是否开源。

嵌入式模式最富潜力
在中国市场,嵌入式模式也许是最富潜力的模式,也是最适合中国国情的开源模式。嵌入式系统是以
应用为中心,以计算机技术为 基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、
功耗有严格要求的专用计算机系统。PDA、机顶盒、游 戏机、交换机、路由器、数控设备或仪表、汽车
电子、家电控制系统、医疗仪器、航天航空设备等都是典型的嵌入式系统。

嵌入式软件就是为嵌入式系统设计的软件,同样由程序及其文档组成,可细分成系统软件、支撑软件、
应用软件三类,是嵌入式系 统的重要组成部分。嵌入式模式实质就是充分发挥开源软件的优势,实现软


oss.linuxpk.com
源 2008 年第 9 期  113
嵌入式
件和硬件一体化,做一个整体销售,也就是销售设备化 了的软件。

从国家战略目标与产业发展来看,嵌入式软件是实现传统制造业转型与提升的关键技术,它对整体提
升我国制造业的竞争能力意义重大。正如信息产业部娄勤俭副部长在天津软件出口基地讲话中指出的:“
大力发展嵌入式软件,不仅可以提高整机和设备的附加 值,而且有利于扩大软件出口。是我国软件产业
跨越式发展的一条好路子!”

中国是个制造业大国,具有雄厚的制造业基础,传统制造业正面临升级换代,增加产品附加值的压力。
嵌入式开源软件正好给了中国制造企业一个发展的良好机会:采用开源软件,使开源软件成为他们硬件
产品的基础软件,从而大大增加产品的附加值。制造业 企业自身开发和维护软件的成本很高,而采用开
源软件恰恰降低了其软件成本,缩短产品上市时间。嵌入式模式已经为很多国际公 司广泛采纳。

你也许正在用 Linksys 的 Wi-Fi 路由器无线冲浪, 想没想过此时你正在使用着 Linux?或者你驾驶沃


尔沃轿车,而控制汽车发动机的微处理器的正是 Linux。而在 TiVO 录像机和 Sony Playstation 中起重要
作用的,也是 Linux。Linux 的优势是开放源码,其市场已经 成熟,很多公司开始注意它能带来的优势。
通过对 Linux 的改写,可以大大提高产品性能,给产品增加附加价值。

对硬件制造商而言,随着竞争的普及,市场压力迫使硬件公司开发并维护软件,实现硬件的增值;但
是自己软件本身的开发维护成本很高,采用第三方软件时授权费又特高,这时他们就可采用开源软件,
或对开源软件进行二次开发以节约成本。这种模式为大型 公司广泛采纳,比如 IBM 、HP 等服务器供应
商巨头,通过捆绑免费的 Linux 操作系统销售硬件服务器。

对电子设备公司而言,采用开源的 Linux,可以通过开发和重复使用模块代码,可以大大缩短电子设
备公司新产品进入市场的周期,与此同时,由于开放性,Linux 也吸引了大量的软件天才加入到了
Linux 社区,极大地丰富了 Linux 产品,增强了市场影响力 。Linksys 的一位工程副总裁表示,在开发
社区,Linux 成了通用语言。该公司在多种网络产品中采用了 Linux 操作系统。

很多电子设备在使用时需要优化性能或增加新功能,在这方面,开放源码的系统有突出优势。以加州
公司 Cyclades 为例,它开发的硬件系统可以让数据中心远程开关服务器,其客户包括 Yahoo!、Google
和 NASA。

“专有的嵌入式软件公司可能不会主动为我们开发一个特殊的功能,”该公司 CTO Marcio Sait 说。但


是如果采用 Linux 为内核,Cycl ades 可以轻松地购买到 Linux 应用模块并将这些新功能集成到以前的
系统中,而不需要担心许可证问题。Saito 说:“谁愿意被一 个要用 Licence 的软件牵着鼻子走呢?”与竞
争对手相比,Cyclades 可以更快地将加密技术添加进 Linux 系统中。

也是由于开放性,全球 Linux 开发者成为电子公司的研发力量。Internet 安全设备制造商 ServGate


认识到自己需要一类特殊的设备驱动程序,它想寻求第三方帮助而不愿意自己开发,在网上查询了一个
开发源码的社区时发现,已经有这样的驱动程序满足他们的 要求了。

“如果我们自己开发也会比较容易,但需要两到三个月,”该公司 CEO Bruce Hendrix 说。有了


Linux,“我们只需要一个星期就可以了。当然这并不意味着你要解散你的研发部门,但你可以考虑利用
一个更棒的研发网上社区。”


oss.linuxpk.com
源 2008 年第 9 期  114
嵌入式
在移动智能终端领域,于 Symbian、WinCE 相比,嵌入式 Linux 操作系统由于代码开放和强大的网
络功能,越来越受到手机厂商青睐 。MOTOROLA 的智能手机采用 Linux 操作系统。其 E680 是成为中
国市场上为数不多的几款可以与 S60 机型抗衡的智能手机,而 E680 在中 国的畅销也直接印证了 Linux
的受认可程度。开源软件所带来的无须授权费、灵活性和针对性方面的优势,使得 Linux 替代 Symbian
、WinCE,成为新兴的智能手机厂商作为了自己产品的操作系统首选。海尔推出的 N60 智能手机即是采
用 Linux,而同样采用 Linux 智能手机还有被列入 863 计划的中兴 e3。

智能家居是未来社会发展的主流方向。未来家庭内各种智能家电通过家庭网关,与 Internet 连接,


用户可以通过 Internet 对各种智能家电进行控制,从而实现家居生活的真正智能化。海尔成功将嵌入式
Linux 系统应用于网络微波炉,该产品已经在欧美及中东地 区正式销售。

对新兴创业公司而言,利用开源软件可以有效降低创业的初期成本。在传统科技公司中,一个产品从
立项,组织团队,招聘人员,到调拨资金,市场分析,整个过程耗费巨大的人力物力。而采用开源软件
后,公司需要做的,设计针对应用的硬件,对现有开源软 件进行二次开发,针对特定应用场合进行修改,
然后对软件进行固化。初期成本可以降低很多,这样整个嵌入式产品成本会降低。

嵌入式 Linux 在消费电子、电信设备和网络设备中的应用,将是雪崩式的。美国 MontaVista 软件公


司的 CEO Jim Ready 说:“我们的未来将极其美好。”该公司生产用于消费类电子产品的嵌入式系统,其
工具软件和嵌入式 Linux 系统为特殊的客户量身定做,其 客户包括 TI、沃尔沃、法国电信和韩国三星。
路由器、交换机,家庭网关设备等为开源软件提供了广泛的应用舞台。华为、中兴等 很多网络设备厂商
也采用这种模式将 Linux、FreeBSD 等开源系统剪裁后固化在防火墙、路由器产品中。

目前中国的电子制造业规模已经名列世界第二,但是大多数企业是做简单加工、装配,工业附加值和
利润都很低,即使是‘电子百强’,利润率也只有 3%左右,这与外国高技术企业的高利润形成很大的反差。
究其原因,是因为我国企业缺乏核心技术。要改变这种被动局面,一个重要的举措就是发展嵌入式软件,
使原来生产的低附加值的设备变成智能化的高附加值的设备。而 Linux 给中国 的开发商提供了巨大的机
会,现在是中国的 Linux 技术人员发挥创造力的时候了。

嵌入式领域非常广泛,能够容纳大量不同的公司和产品,为各种创业公司提供了广阔的舞台。由于嵌
入式系统的软件和硬件结合的特点,使得公司销售的产品和单纯的软件相比,很难被别人模仿,盗版和
模仿难度很大。因此嵌入式系统模式可能是开源商业模式里最适合中国国情的,为中国制造业提供了一
条低成本的产业升级之路。

文件系统是 Linux 系统最基本的资源。本文介绍了一种嵌入式 Linux 文件系统的构建过程。较为详细


地讲解了如何选择和配置所需的系统文件, 以及如何设置文件系统的用户和属组来使系统达到一定的安
全性能。


oss.linuxpk.com
源 2008 年第 9 期  115
嵌入式

嵌入式 Linux 文件系统的构建

赵晖
嵌入式产品已经渗透到人们生活的方方面面,特别是在数字信息技术和网络技术高速发展的今天,手
持信息产品正拓展着一片越来越大的市场,PDA、手机、掌上电脑、信息家电等各式手持产品已拥有了
庞大的用户群。手持信息产品所运用的最关键的核心技术就是嵌入式操作系统。人们对嵌入式产品的需
求也不再仅仅是功能单一的电子词典类产品,嵌入式操作系统逐步成为嵌入式产品的核心。而其中,
Linux 以其开源的内核和免费的应用程序、能够自由地移植和开发的优势,更迎合嵌入式市场。

嵌入式 Linux 的开发大致可分为三个层次:引导装载内核、构造文件系统和图形用户界面。作为


操作系统重要组成部分的文件系统,决定了操作系统本身的信息和用户的数据在存储设备上的组织形式。
对嵌入式文件系统的研究、设计和开发也逐渐成为嵌入式系 统研究领域的一个方向。

嵌入式 Linux 文件系统


文件系统是指在一个物理设备上的任何文件组织和目录,它构成了 Linux 系统上所有数据的基础,
Linux 程序、库、系统文件和用户 文件都驻留其中,因此,它是系统中庞大复杂且又是最为基本和重要
的资源。值得提出的是,Linux 系统中的文件不仅包括普通的 文件和目录,每个和设备相关的实际实体
也都被映射为一个文件,例如磁盘、打印机、终端等等。这样的设备文件又称为特殊文件 。所以,
Linux 下的文件是操作系统服务和设备的简单而又统一的接口,从某种意义上可以说,Linux 里的一切事
物都是文件。

在 Linux 中,文件系统的结构是基于树状的,根在顶部,各个目录和文件从树根向下分支。目录树的
最顶端被称为根目录(/)。在后面介绍的所构造文件系统结构图(图 1)即显示了树状的文件系统。Linux 操
作系统由一些目录和许多文件组成,例如,图中的/bi n 目录包含二进制文件的可执行程序,/sbin 目录
用于存储管理系统的二进制文件,/etc 目录包含绝大部分的 Linux 系统配置文件 ,/lib 目录存储程序运
行时使用的共享库,/dev 目录包含称为设备文件的特殊文件,/proc 目录实际上是一个虚拟文件系统,/
tmp 目录用于存储程序运行时生成的临时文件,/home 目录是用户起始目录的基础目录,/var 目录保存
要随时改变大小的文件,/usr 目录及其子目录对 Linux 系统的操作非常重要,它保存着系统上的一些最
重要的程序以及包含你安装的大型软件包。

由于 Linux 是一个多任务、多用户的操作系统,因此它里面的文件还都被赋予了一定的权限,权限决
定谁能读、写或执行一个文件,以及这个文件的类型和如何执行。例如下面的文件列表:

-rw-r-r-- 1 root root 1756 Sep 9 2005 inittab

其表示:这个名为 inittab 的文件是普通文件,所有者有读写的权限,所在组和其他人都只有读的权


限,它的连接数为 1,所有者及 文件所属的组都是 root,文件中字节数为 1756,文件创建日期是 2005
年 9 月 9 日。我们可以通过对文件属性的设置,来满足文件在不同用户组、不同用户操作下的不同状态。


oss.linuxpk.com
源 2008 年第 9 期  116
嵌入式

由于嵌入式设备的一些特殊性,使得嵌入式文件系统除了满足一般文件系统的基本要求外,还有一些
自身的特性:(1)文件系统面对的存储介质特殊;(2)文件系统有快速恢复的特殊要求;(3)物理文件
系统的多样性和动态可装配性;(4)需要文件系统具有跨操 作平台的安全性;(5)文件系统要能满
足整个系统的实时性要求。

嵌入式文件系统有安全性和均衡负载这样的要求,而日志型文件系统可以很好地解决安全性的问题。
经过几年来的发展。日志型的嵌入式文件系统已成为嵌入式文件系统的主流。1999 年。Axis
Communications AB 发布了 JFFS(JournalingFlash File System)的 第一个版本。这是一个专门为嵌入
式系统的 Flash 设备而设计的文件系统,同时它也是一个日志型的文件系统。JFFS2 是 JFFS 的第二 个版
本,于 2001 年发布,并得到了 Red Hat 的支持,成为 Red Hat 嵌入式操作系统 eCos 的文件系统。
Flash 存储容量的有限性决定了 J FFS 是一个小尺寸的文件系统。因而在文件系统的内部设计上采用了许
多简化处 理。同时,它们结合了 Flash 设备的读写特性和嵌入式文件系统的防断电特性,使得 JFFS 成为
适合于嵌入式系统上针对 Flash 设备的文件系统的理想选择。

嵌入式 Linux 文件系统的设计

● 实验主机和目标平台的连接
实验主机和目标平台的连接有两种方法。一种是以太网连接,这种连接方式可以进行内核文件、根文
件系统映像文件的下载。另一 种是串口连接,这样的连接方式可以供调试之用。对于以太网连接,作者
使用一根普通网线,将实验主机和目标平台都连接在 Hub 上。这样做既简单,也不妨碍实验主机与外部
网络的通讯。对于串口连接,用一根串口线连接目标平台的 Ful Function UART(FFUA RT)串口和实验主
机的串口。主要是在调试阶段使用这种连接方式,在目标平台的标准输入还未被驱动的情况下。用实验
主机的标准输入控制目标平台,向目标平台发控制命令。

● 构建文件系统
首先建立一个文件系统的工作空间。创建目录/
bome/work,我们所构造的文件系统就在 work 这
个目录中。建立基本目录,如:
bin,dev,etc,lib,mnt,proc,sbin,tmp,u
sr,vat,tools 具体结构图见图 1(图中所显示的文
件都是目录文件)。其中,tools 是便于开发而创建
的目录。因为整个系统要求尽量小,所以应只包含
一些必须的二进制程序。而开发过程中需要用到的
命令就放在 tools 中,将 PATH 包含 tools 即可。/
etc 目录下只包含了一些启动过程的配置文件,/lib
目录下的 modules 于目录包含了可动态加载到核心


oss.linuxpk.com
源 2008 年第 9 期  117
插图 1: 构建文件系统的树状结构
嵌入式
的各种模块。另外,目录 var 下还应创建两个子目录 log 和 run,负责记录系统的日志和运行状态。整个
文件系统中除了 tmp 和 var 目录放在 SDRAM 内以外,其他所有目录都放在 Flash 中,因为 trap 和 var
中的内容需要经常写入,所以放在可读写的 RAM 里。

当在目标平台实现了一个嵌入式 Linux 之后,为了很好地管理操作系统和用户的数据文件,引入了文


件系统。物理文件系统是 JFFS2 ,考虑到扩充物理文件系统的要求,保留了 Linux 的 VFS 层次。考虑到
存储设备扩充的要求,在 Linux 内核中加入了对 MTD 设备的支持。

根据上面的叙述,可给出整个文件系统的体系结构图,
见图 2 所示。

构建文件系统最基本的要求就是系统能够在此基础上
启动运行起来,所以,/sbin 下的 init 程序必不可少。
init 程序是引导过程完 成后内核运行的第一个程序,它
能启动全部其他程序。只要 init 完成运行全部必要的程序,
系统就开始建立并开始运行。当程序开 始启动时,init
读取一个配置文件 inittab,这个文件位于/etc 下,它确
定了 init 在启动和关机时的工作特性。在我们开发的这个
嵌入式系统中,所有的文件内容只需保留与开发要求有
关的必须部分。

这个系统运行单用户模式启动:启动后立即运行
rc.sysinit 脚本,进行系统初始化动作。rc.sysinit 脚本
也进行了精简,只保留了以读写的方式重新加载(mount)
插图 2: 文件系统体系结构
根文件系统的操作(内核启动时只以只读的方式加载了根
文件系统),具体 rc.sysinit 脚本中的内容 如下:

# Remount the root filesystem read-write


# mount -n -o remount.rw / mount -o remount.rw -n/dev/mtdblock2/mount -a

为了开发过程用户与系统能进行交互,启动了/bin/bash 这个命令解释器。用户在键盘上输入某些命
令,bash 将读取输入加以解 析然后执行该程序。/tools 中的 telnetd 和/sbin 中的 pppd 分别是远程
登陆和串口通讯的后台程序,加入它们也是为了方便开发。

另外,为了尽量精简内核,程序都以动态链接库文件的方式编译,即当程序运行到所需库文件时才动
态加载。所以保证库文件的完整性就显得相当重要。为确保运行各种程序都能在/lib 目录中找到合适的
库文件,就干脆对/lib 中的库文件不作任何删减,而完 整的/lib 目录(含子目录及全部库文件)也不过
2MB 大小。

● 配置文件系统用户
这一步骤的实现,体现了该嵌入式操作系统的一大特色---安全性。为了防止系统中的文件被误改或


oss.linuxpk.com
源 2008 年第 9 期  118
嵌入式
被恶意破坏,我们设置组和用 户,让只有隶属于特定组的特定用户才能对特定的程序进行合法操作。
/etc 目录中没有列入管理组的 group 文件和管理用户的 pass wd 文件,所以在设置文件或目录的所有权
时,全部用 id 号来代替组名和用户名。用 chown 命令来改变文件的所有权,如 chown 0.0 i nittab(前
一个“0”代表属组,后一个“0”代表用户),修改后的 inittab 文件的详细信息为:-rw-r-r-- 1 0 0 237
Jul 26 l0:30 inittab

将系统中所有的文件和目录按照其具体类型和要求,为其设定特定的组和用户对它的所有权。例如,/
etc 中的 module.conf 配置文件的所有权是 module 组和 module 用户。那么只有组和用户同为
module 的程序(比如/lib/modules/中的程序)才有权查看 module.c onf 文件,其他非 root 用户的程序
都打不开这个文件。这样,除了 root 用户,其他不具有操作权限的用户就不可能对那些特殊文件, 如有
关网络、安全等重要信息进行执行和修改。而拥有 root 用户权限的文件只有 init 和 bash 两个。init 用于
完成系统的初始化过程,并不涉及对其他文件和程序的操作;bash 是开发过程中用户与系统交互的需要,
便于对文件系统进行修改,开发完成后的实际系 统并不需要 bash,可删除。这样,各个文件和程序均在
自己所属的组和用户中运行,不会互相干扰。使得整个系统有条不紊,不会 发生程序越权误操作的现象。
保证了操作系统本身的安全性,也让试图窃取或破坏数据的攻击者无机可乘。

根据需要,在基本文件系统上添加应用程序基本文件系统完成后,再根据开发的实际要求,在上面再
构筑一些应用和服务。例如,对于所需求的网络功能,我们在/bin 中加 入 netstat、ping,在/sbin 中
加入 ifconfig、route、xinetd 等网络程序:为了将一些服务以模块的方式加载,以缓解内核的负担 ,
我们在/sbin 中加入了 insmod、lsmod、modprobe、depmod、rmmod 等有关操作模块的命令。还
有,为了搭建开发过程的交叉编译的环境,需要用到串口通讯,所以在/sbin 中加入 pppd 的命令,在/
etc 中加入 PPP 目录及其配置文件等等。

到此,一个满足系统需求的嵌入式 Linux 文件系统就基本构造完成。为了系统能在特定的嵌入式硬件


设备上运行,系统中所有的二 进制文件都必须是经过特定的嵌入式开发编译工具编译,将编译好的文件
系统烧至嵌入式系统的开发板中,调通串口,就可以进行 调试和进一步的开发了。

嵌入式 Linux 文件系统的进一步开发


按照上一部份给出的文件系统体系结构,文件系统的实现主要在 VFS 层、物理文件系统层和 MTD 层。
在 Linux 2.4 以后的版本中,JFF S2 已经作为一种标准的文件系统被支持,所以使得 Linux 的 VFS 支持
JFFS2 并不是一件难事,在源代码中也不用做修改。下面给出在 MTD 层,Linux 的源代码做的一些修改。
另外,叙述 JFFS2 物理文件系统映像文件的生成。

支持 MTD 设备
对 MTD 设备的支持要经过配置内核、编写设备驱动程序和建立 MTD 设备这几个步骤。

第一步,配置内核参数,选中 Memory Technology Devices(MTD)support,下面的子项中至少


要选择 MTD partitioning support、D irect char device access to MTD devices 和 Caching block
device access to MTD devices 这三项。其他的有关 NFTL,CFI 的支持根据需要选取。


oss.linuxpk.com
源 2008 年第 9 期  119
嵌入式
第二步,编写针对目标平台 Flash 设备的 MTD 驱动程序,主要实现创建 MTD 分区和删除 MTD
分区的函数。创建分区的流程见图 3 所示。删除分区的函数比较简单,如果存在 MTD 分区,就调用
del_mtd_partitions(struct mtd info*)删除分区,并且删除为 MTD 设备创建的映射表。

插图 3: 创建 MTD 分区

第三步,将修改过的 MTD 驱动文件作为内核文件的补丁,并给内核文件打上这个补丁,最后,


编译生成内核文件。

第四步,使用 mknod 命令建立 MTD 设备。

JFFS2 映象文件的生成

首先,需要内核支持 JFFS2,因此在配置内核参数时,选中 File Systems 下的 Journaling Flash File


System v2(JFFS2)support。

假设从一个 RAMDISK 的文件系统中得到建立根文件系统所需的全部文件和系统所有的设备等信息。


制作步骤如下:


oss.linuxpk.com
源 2008 年第 9 期  120
嵌入式
第一步,在开发主机上将这个 Ramdisk 以 loop 的方式挂接到某个临时目录下。在这个目录下就出现
了一些文件系统的基本文件和信息,可以做增删以达到定制的目的。第二步,修改/etc/rc.d/rc.sysinit
文件,使得文件系统在 remount 时不会出现只读的情况。具体修改如下:

Mount -n -o remount.rw//加入这一行

Mount -n -t proc/proc rw//在这一行中加入-n

第三步,使用 mkfs.jffs2 生成 JFFFS2 的映像文件。具体的命令格式如下:

Mkfs.jffs2 -d<文件系统所在目录>-o<映像文件名>

这时,就得到了一个 JFFS2 的映像文件,将它下载到目标平台。最后就是如何挂载它,使它成为一个


根文件系统了。在调试阶段和最终系统成型之后,挂载的方式有所不同,而具体的挂载方法在前面已叙
述,这里不再重复说明。

结语

我们构造了一个嵌入式版本的 Linux 文件系统,它使得内核在系统尽量精简的情况下能够运行起来,并满足产品


和系统各方面的要求。其中,为文件系统配置用户和属组以达到一定的安全性更是系统的一大特色。另外,在这
个嵌入式文件系统中,引入了 VFS 的支持,虽然牺牲了一些空间,但是大大方便了今后各种物理文件系统的动态
加载。

Linux 的文件系统事实上非常的庞大,构造一个嵌入式的 Linux 文件系统是一个很复杂的过程。如何让文件系统


在保证安全的前提下精简得更紧凑、运行得更有效率,是需要深入探索的一个课题。


oss.linuxpk.com
源 2008 年第 9 期  121
开源小知识

开源小知识

开 发者是否可以自己
创造一个许可证?
开 源软件许可证带来
的纠纷可能有哪些?
当然可以。如果某个人或者组织开发了一种 ● 发布软件时未表明版权信息以及必要的修改信息;

新的程序,这个程序又没有受控于任何已有的许 ● 发布软件时没有附上相应许可证;

可证,这个开发者就可以选择已有的许可协议或 ● 源代码提供不符合许可证的要求;
许可协议模板进行修改发布自己的软件。当然, ● 违反许可证的规定将软件代码与其他代码混合;
如果开发者认为现有的许可证都是不理想,他就 ● 发布软件时违反许可证的规定收取不适当的费用;
可以自己编写新的许可证 ,他可以将自己价值取 ● 违反许可证的规定以开放源码软件申请专利。
向体现在对许可人和被许可人的权利和义务的不
同规定中。也可以将许可证提交 OSI 进行认证, 开源软件许可证有什么共同特点?
获得目前比 较通用的证明,从而表示出遵循这个
许可证的共同点一般都是规定了发布义务
新的许可证的软件是开放源代码软件。
(将获得的源代码再发布)、对发布源代码的要
求(须保证源代码的完整和可以被获得)、允许
一个软件是否可以适用多个许可? 修改的权利(可以根据获得的源代码产生演绎作
可以,只要这些许可证之间不发生实质性的 品)。一般开源软件许可证都不定补担保条款和
冲突。以前开发人员必须考虑的只是软件的依赖 责任免除条款。
性和不兼容性,现在他们还得考虑开源软件项目 ● 开放源码软件许可证都会规定在被许可人接受本
之间许可证的冲突。如:Mozilla 包含四个不同 许可证或的源代码之后,有将源代码再发布的义

的许可证。参与该项目的开发需要注意许可证间 务,以促进开源码运动。

的冲突。Galeon 是一个 基于 Mozilla 的浏览器, ● 开放源码软件许可证有“不担保”(No


Warranty) 条款。由于源码程序准予免费使用,
利用 GPL 下发布的 GTK+ 图形工具包开发。对
在一般情况下,对程序都没有担保。
其的分发将在分别受 MPL 和 GPL 保护的模块间
● 开放源码软件许可证都规定了关于修改、复制和
产生冲突。同 样,Transarc(IBM 子公司)以
再发布的条款。但是各个许可证对授予被许可人
IPL 许可开发了一个 Linux 分布式网络文件系统 的各项具体的权力略有不同。
的变体。不幸的是 IPL 与 GPL 不兼容,因而禁止
其在 Linux 内核上运行。另外,对源代码的每个
错误修正和改动,都具有“分叉”出一个新版本的
潜在可能。
不 同开源软件许可证
之间差异在哪里?

开源软件许可证之间的差异主要体现在:
● 是否允许可以同其他非开放源码软件代码混合;


oss.linuxpk.com
源 2008 年第 9 期  122
开源小知识
● 是否可以将对源代码的修改不公开; 品,则要求连接各部分都受该开源许可证限制,
● 是否明确了专利许可授权; 也就是必须成为指定的开源软件,是容易产生问
● 是否明确了专利侵权诉讼导致许可协议中止; 题的地方。对于冲突的问题,现在我们能做的就
● 是否明确禁止与函数库连接; 是尽量避免。
● 是否只能按本许可证发布源代码;
● 是否要求对于获得的源代码可能存在的知识产权 OSI 与开源许可证是什么关系?
进行以“LEGAL”为抬头的提示。
OSI 组织也即“开放源代码首创行动组织”

主 要许可证的之间 (Open Source Initiative,简称 OSI),这是一


个非盈利的组织,Open Source Initiat ive 、
有哪些关键差别?
OSI 等标志都是属于该组织的证明商标,统称为
● BSD 许可——它要求版权和著者身份申明; “OSICertified”标志,由 OSI 组织作为证明商标的
● GPL——通用公共许可("CopyLeft") 禁止派生或 管理者。OSI 组织的宗旨就 是要让开源软件的发
发行产品的限制; 展有一个更好的土壤,OSI 主要管理和推广开放
● LGPL——库/次级 GPL,它不同于 GPL 许可证, 源码的定义,尤其是 OSI 认证的开放源码软件的
在这个许可证下,库(函数库)可以自由地联
认证标记和认证 程序。
接到专有软件;
● Artistic 许可——使作者保持对进一步开发的控 根据 OSI 组织的规章,是否是开源软件,不
制。 光要看权利人是否提供源代码,另外一个很重要
● Netscape 公共许可(NPL)——基于 GPL 精神 的标志就是许可证的问题,因为基本所有的开源
的新的许可证,但是保持了对源码更多的控制和 软件在发布时都会附带一个许可协议,即我们所
所有权; 说的许可证,在许可证中,会规定许可人和被许
● 公共域(Public Domain)——通常用于决定性 可人的权利与义务,而正 是这些权利和义务,决
的算法以鼓励广泛使用,通常由美国政府使用。
定了权利人是否将源代码真正的向社会公众开放,


从而可以实现是否是开源软件的判断。
可证之间的规定
开放源代码组织是通过开源软件许可证这种
存在冲突怎么办? 合同形式来明确规定源代码使用者的义务,使开
国际上较为严格的许可证主要是 GPL 许可证、 放源代码的思想得以传播,同时巧妙地保有了其
QNCL 许可证和 Ricoh 许可证三种,其他的均被 Open Source Initiative 、OSI 等一系列商标的
认识是比较宽松的开放源码软件许可证。来自于 所有权。虽然,对这些证明商标没有使用费的要
不同许可证的程序源代码想要结合起来就会产生 求,但是使用这些商标还 是必须遵守 OSI 的规则。
许可证之间规定的冲突问题。实际上,主流的开
源软件,尤其是开源平 台 LAMP(Linux, 许可证经 OSI 认证有何益处?
Apache, MySQL, PHP/Perl/Python),都是依
OSI 组织从软件的许可证上着手,将证明商标
照 GPL 发布的。而 GPL 又是一个要求严格的许
许可给那些经其审核认定为开源软件的软件提供
可证,所以冲突主要是不同许可证与 GPL 许可证
者。这样,凡被认定为开源软件许可证的,都可
之间的冲突。一些开源许可证要求当出现程序之
以标注 OS、OSI 等商标标识。因此,许可证经过
间的连接、或者程序修改时,如果出现了组合作
OSI 认证可以在一定程度上保证遵循它的软件获


oss.linuxpk.com
源 2008 年第 9 期  123
开源小知识
得开源软件界的认可。 将自己定位为一个行业自律协会性质,并且巧妙
的应用了商标战略。将 Open Source Initiative
但 OSI 终究是个非官方组织,OSI 组织要想在
、OSI 申请了证明商标,称为“OSICertified”标志,
开源软件领域实现“统一标准”的目的几乎没有什
自己作为证明商标的管理者,为开源软件业的发
么成功的希望。但是该组织的定位和战略很好,
展做出了重大的贡献。


oss.linuxpk.com
源 2008 年第 9 期  124
编读往来

Linuxpk.com 九月十大热门帖

Fedora 9 中文输入法问题分享一下
http://bbs.linuxpk.com/thread-35487-1-1.html

VIM 用户手册 7.2 中文版 PDF


http://bbs.linuxpk.com/thread-33846-1-1.html

小型的图书管理:struts+spring
http://bbs.linuxpk.com/thread-35450-1-1.html

深度解析开源软件与赢利模式
http://bbs.linuxpk.com/thread-35393-1-1.html

可能取代 Windows 的 7 个操作系统


http://bbs.linuxpk.com/thread-33898-1-1.html

投票:关于《开源》杂志的排版,单栏还是双栏?
http://bbs.linuxpk.com/thread-35401-1-1.html

greasemonkey 的 linuxpk 页面显示脚本[firefox/iepro?]


http://bbs.linuxpk.com/thread-35530-1-1.html

bash read 时默认移除首尾空格的情况


http://bbs.linuxpk.com/thread-35515-1-1.html

硅谷禁书
http://bbs.linuxpk.com/thread-35483-1-1.html

使用 VIM 编辑 C 程序
http://bbs.linuxpk.com/thread-35487-1-1.html


oss.linuxpk.com 源 2008 年第 9 期  125
封底