You are on page 1of 135

封面

卷首语

跨越“源”界限
中秋节后的第一天,微软(中国)在雍和宫一个四合院里举行了一次小规模的技术专家
联谊会,我有幸参加了此次活动。这个联谊会有个很有意义的说词,那就是“跨越源界限,
共创新纪元”,很明显,这是一个关于微软与开源之间交流的一次探讨会,受邀的专家包括
微软、开源界以及互操作方面的一些技术专家。

最近两年,微软频繁的与开源业界、开源社区接触,一改过去开源“死对头”的角色,
通过对话、交流、合作等方式日益融入开源世界。自文档格式 OOXML 成为国际标准后,微
软与其它文档标准在各个层面展开了互操作;在今年世界开源大会(OSCON 2008)上,微
软一跃于 Intel 一同成为大会最主要赞助商,并且宣布每年向 Apache 基金会赞助 10 万美
金,以支持开源软件的发展,更难能可贵的是微软首次基于开源许可证 LGPL 向开源社区贡
献了代码,这是一次具有里程碑意义的转变。

开源世界与微软信奉的是两种不一样的软件哲学,而其中最重要的一环就是“源代码”
的开放,微软与开源世界要在更多层面展开合作,如何跨越“源”界限将显得格外重要,对
于微软,我认为,跨越源界限有着三个切入点,其一是各个层面的互操作,其二是运行在
Windows 上的开源软件,其三则是混源应用,也就是异构。

开源软件与商业软件的互操作包括多个层面,有操作系统之间的互操作问题,也就是人
们耳熟能详的跨平台;也有同一操作平台下软件的互操作问题,也就是我们经常提到的兼容
问题;还有文档之间的互操作问题,文档必须实现在不同平台、不同办公套件下的统一标准,
才能真正的实现互操作。关于如何更好的实现互操作的问题,业界也有着不同的声音,开源
社区人士认为开放源代码是解决互操作的前提,而来自商业软件阵营人士则认为解决互操作
的关键在于标准,只有在解决互操作的问题上形成统一的标准,才能更好的解决互操 作的
问题。

微软与 Linux 操作系统是敌人,但与更多的开源软件是朋友,这种说法是成立的。我们


在开源软件库 sourceforge.net 上,能看到成千上万的开源软件是跨平台的,既能运行于
Linux 上,同时也能运行在 Windows 操作系统之上,很多大家熟知的开源软件都具有了
For Windows 的版本,例如 OpenOffice、Pidgin、Firefox 等,而一些基于 Java 开发的


oss.linuxpk.com 2008 年第 10 期 2

卷首语
开源软件,本身就具有跨平台性。未来的开源世界,我们将看到更多的开源软件推出 For
Windows 的版本。

而事实上,开源项目发展是不平衡的,有些层面的开源软件发展比较好,而有些发展比
较缓慢,当面临这样的情况时,很多企业会在部分功能或者模块选择商业的解决方案,这就
是成了“混源”结构。美国做了这方面的统计,有超过 70%用户都要求能提供混源架构,
而不少厂商也希望推广混源架构,所以混源架构将是开源与商业软件结合的一种趋势,并且
开源软件厂商与商业软件厂商也都积极的在向这个领域靠拢。对于“混源”架构,微软有着
不一样的说法,就是“异构”,无论是“混源”还是“异构”,获得两者结合最优价值的无
疑是最终用户,也难怪在“LAMP”(L:Linux、A:Apache、M:MySQL、P:PHP)架构盛
行的同时,“WALP”(W:Windows)架构也悄然得到了广泛的应用。

微软作为全球软件界的领袖,不可否认 Windows 是一个很成功的操作系统,在 IT 领


域日新月异的今天,无论是微软还是开源世界,都应该寻求更多的切入点,为商业软件带来
先进开发模式的同时,也为开源软件的商业化摸索出一套可行的商业模式,携手跨越“源”
界限,共创新纪元。

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


oss.linuxpk.com 2008 年第 10 期 3

主办:Linux 宝库
网址:www.linuxpk.com
官方下载地址:oss.linuxpk.com

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

主编:陈杰
副主编:陈伟
排版:邹洋
封面设计:张亚运
编辑部:李彦荣 顾宏军 沈佩琪 王文龙 赵龙

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

目录
卷首语............................................................................................................................................2
跨越“源”界限........................................................................................................................2
产业聚焦........................................................................................................................................7
“大家一起学 VIM”讲座成功举办.........................................................................................7
Linuxpk.com 开通开源 SNS 社区.............................................................................................7
中国高校教师开源代表团参观 Intel 总部..............................................................................8
微软打击盗版四面楚歌央视力挺开源软件...........................................................................9
OLPC 遭遇重创 委内瑞拉购买 100 万台 Classmates............................................................9
SGI 的 OpenGL 成为自由软件...............................................................................................10
在电影业 Linux 仍是大赢家.................................................................................................10
东芝 NB100 发布预装 Ubuntu 8.04 .......................................................................................10
10 个有趣的开源软件分支.....................................................................................................11
08 软件自由日几大看点.........................................................................................................14
谷歌 Chrome 浏览器市场占有率稳定在 0.7% ...................................................................15
微软加快与开源社团协作的步伐.........................................................................................17
Ubuntu 是开源社区中的害群之马?.....................................................................................18
专家专栏......................................................................................................................................24
自由软件与开源软件的概念纷争.........................................................................................24
DOS 时代往事的回忆.............................................................................................................28
从赤壁之战看文档领域“瑜亮之争” ...............................................................................29
开源社区......................................................................................................................................32
Gnome 2.24 正式发布..............................................................................................................32
Fedora 10 Beta 版正式发布.....................................................................................................32
Picasa 3.0 beta for Linux 正式发布 .......................................................................................33
空中 Opera 3.0 正式发布 .......................................................................................................33
重复去年尴尬 Gentoo Linux 2008.1 版本被取消 ..............................................................34
Firefox 4 早期版本 Minefield:比 Chrome 快?.........................................................................34
认证展示开源风景..................................................................................................................35
开源认证 百家争鸣................................................................................................................37
创新源自开源文化..................................................................................................................43
关于开源许可证 GPL 的探讨.................................................................................................45


oss.linuxpk.com 2008 年第 10 期 5

目录
知识学堂......................................................................................................................................47
Linux 下设备完全驱动(五)...............................................................................................47
Linux 内核的维护者--Alan Cox .............................................................................................64
经验技巧......................................................................................................................................68
Linux 一句话精彩问答 ..........................................................................................................68
为 NFS 加油提速.....................................................................................................................72
构建安全 rsync.........................................................................................................................78
在 ubuntu 中使用下一代输入法 ibus......................................................................................80
CVS 提高软件开发效率.........................................................................................................83
独辟蹊径实现远程接入局域网.............................................................................................87
Linux 下体验无线网络............................................................................................................89
Linux 操作系统下运行命令时 CTRL+Z 的作用 .................................................................91
Linux 服务器下误删除文件的解决方法...............................................................................92
企业应用......................................................................................................................................94
Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过 Apache 十倍的 Web 服务器......................94
Linux 网络中 DHCP 和 DNS 服务快速整合........................................................................114
配置 OpenLDAP 使用 TLS 通信...........................................................................................117
嵌入式........................................................................................................................................120
Linux:移动创新的真正未来..............................................................................................120
抢占科技前沿的嵌入式 Linux 关键应用............................................................................123
开源小知识...............................................................................................................................130
利用开源软件与实现商业目的时需注意的问题...............................................................130
编读往来....................................................................................................................................134
Linuxpk.com 十月十大热门帖 ............................................................................................134


oss.linuxpk.com 2008 年第 10 期 6

产业聚焦

“大家一起学 VIM”讲座成功举办
高编辑效率,编程变得更加迅捷。作为 Vim
7.2 手册中文翻译者,本次报告人赵如飞拥有多
年 Vim 使用经验,通过经验的分享与现场的演
示,为参加此次讲座的朋友们提供了速成 Vim
编辑器的一个捷径。

Intel 开源经理和本杂志顾问陈绪博士在此
次活动中介绍了 Intel 开源技术中心对中国开源
界的巨大贡献,并为北京 OTC 团队发布了 招聘
由中科院自动化所自由软件协会、Intel 开 宣传。同时,本刊主编陈杰也在现场为大家介绍
源技术中心和 LinuxPK 社区合办的每月一期讲 了 Linuxpk.com 开源社区及《开源》杂志的
座暨第三十四次讲座"大家一起学 VIM"于 9 月 相关情况。
25 日晚在中科院自动化大楼成功举办。 下一期讲座将在 10 月下旬进行,具体情况
Vim 是一款功能异常强大的跨平台编辑器, 请大家密切关注 Linuxpk.com,我们将第一时
江湖人称“编辑器之神”。熟练 Vim 将大大提 间提供讲座信息。

Linuxpk.com 开通开源 SNS 社区


SNS 社区,为广大的开源爱好者提供了一个全新
的 SNS 娱乐交友社区。SNS 全称 Social
Networking Services,即社会性网络服务,专
指旨在帮助人们建立社会性网络的互联网应用服
务。近年来,SNS 社区得到长足发展,
Facebook、MySpace 等社区的成功更为 SNS
注入了新的增长动力。Linuxpk.com 推出的
SNS 社区,将以开源为主题,以开源为己任,通
过“熟人的熟人”模式发展开源、推广开源,也
为社区朋友提供了一个新的娱乐交友平台。
近日,Linuxpk.com 推出了自己的开源
新推出的 SNS 社区采用全新的子域名:


oss.linuxpk.com 2008 年第 10 期 7

产业聚焦
http://sns.linuxpk.com,除了传统的 SNS 社 而中国开源校园联盟更为广大的在校大学生们提
区功能外,增加了许多好玩的小游戏,反恐精英、 供了一个校园交友平台。注册方式:
疯狂出租车这些可玩性很强的小游戏不仅放松了 http://bbs.linuxpk.com/register.php,注册
心情,也在娱乐的同时结交到志同道合的朋友, 后用户名与密码即可在 linuxpk.com 中一站通用!

中国高校教师开源代表团
参观 Intel 总部
9 月 3 日,“中国高校教师开源代表团”一 绍了 Intel OpenSolaris 团队做的努力,首席工
行 10 人,参观了位于加州 Santa Clara 的 Intel 程师兼虚拟化架构师 Jun Nakajima 介绍了虚拟
全球总部,并听取了 Intel 化方面的工作等等。
开源技术中心市 场专家、
此次访问为拓展中国高
战略专家、技术专家精心
校的开源视野,更好地理解
准备的多场讲座。开源市
国际公司的开源战略和学习
场经理 Sunita Shenoy 展
其社区工作经验,起到了积
示了 Intel 开源软件战略,
极的作用。同时也为中国的
资深产品经理 Rao Ye
高校 开源界今后借助 Intel
leswarapu 介绍了 ATOM
开源技术中心的中国研发团
和 Moblin 最新进展,主任
队,培养本土开源人才,奠
工程师 Venkatesh
定了良好的基础。此次访问
Pallipadi 讲述了电源管理技术
得以成功,受益于 COPU 的大力举荐介绍。
(lesswatts.org),研发经理 Dave Stewart 介


oss.linuxpk.com 2008 年第 10 期 8

产业聚焦

微软打击盗版四面楚歌
央视力挺开源软件
道,题目为《微软状告“番茄”为何引发关注》。
综合客观地报道了微软、番茄花园、盗版、垄断、
开源、Linux 等一系列关键词。

作为中国政府的喉舌部门,央视 12 日、13
日分别在收视率最高 CCTV-1 和 CCTV--新闻频
道连续四次播出番茄花园盗版案。节目中,主 持
人表明国家一贯打击盗版的态度,但是微软产品动
辄千元的价格难为一般消费者接受。综合价格、
反垄断等因素,国产红旗 Linux 操作系统完全可
以满足网民日常办公的需求,性价比很高,呼吁使

CCTV 展示 Redflag 操作系统 用国产 Linux。这也是 CCTV 首次大篇幅介绍开

近日,中央电视台《东方时空》栏目在 源软件,预计全国有 数千万人观看,意味深远。

CCTV 新闻频道首次播出了对番茄花园案件的报

OLPC 遭遇重创 委内瑞拉购买 100 万台


Classmates
100 美元的目标,Intel Classmates 的热销使
得这一进程将大大推迟,甚至有夭折的风险。

尽管委内瑞拉总统查韦斯强烈反对美式资本
主义,但他显然不准备把孩子和脏水一起泼掉,
此次引入的 100 万台 Classmates 电脑由葡萄牙
生产。这是委内瑞拉和葡萄牙达成的超过 30 亿
美元的双边贸易协议之一, 这一单项订单就已经
超过 OLPC 项目在全世界总销量的 50%。
与许多人的认识所不同的是,Intel 推出的
Classmates 是对 OLPC(100 美元笔记本计划)


oss.linuxpk.com 2008 年第 10 期 9

产业聚焦

SGI 的 OpenGL 成为自由软件


OpenGL 是个定义了一个跨程 现在 FSF 宣布,受争议的许可证 SGI Free
序语言、跨平台的编程接口的 License B 和 GLX Public License,经过 FSF
规范,GNU/Linux 中的 3D 加 和 SGI 之间多月的磋商之后进行了重写,问题 已
速就主要使用 OpenGL 代码,但是 SGI 在 1999 经完美解决,OpenGL 代码成为了自由软件,
年发布时采用了一个既不被自由软件基金会( FSF 的执行董事 Peter Brown 说,“这是给予自
FSF)接受也不被开源促进会(OSI)接受的许 由软件社区的大礼”。
可证。

在电影业 Linux 仍是大赢家


超级计算机市场 用混合平台,例如《南方公园》是用 Mac 桌面和
Linux 是第一,而在好莱 Linux 服务器。 《夺宝奇兵 4》、《星球大战:克
坞 Linux 同样是排名第 隆战争》、《Wall E》、《300 勇士》、《黄金
一的操作系统。电影巨 罗盘》、《哈利波特与凤凰社》和《我是传奇》
头 Disney/Pixar,梦工 等电影的动画和特效,都是运行在 Linux 集群上
厂动画,索尼,工业 光 的 Pixar's RenderMan 和 Autodesk Maya 制
魔,及其它工作室都使 作的。
用 Linux 去制造重量级的大片。也有一些公司使

东芝 NB100 发布
预装 Ubuntu 8.04
据国外媒体报道,东芝进军 能的设备。NB100 有预装 Linux 系统和
netbook 市场的首款产品 NB100 已经 Winodws 系统两个版本,Linux 版预装
在英国发售。东芝公司称,NB100 大小 的系统是 Ubuntu8.04,而 Winodws
为 8.9 英寸,重量不到一公斤,是一个 版预装的是 Windows XP Home
时尚小巧并具有先进的通讯和多媒体功 Edition。NB100 共有黑色、银色和金


oss.linuxpk.com 2008 年第 10 期 10

产业聚焦
色三种不同的颜色可供选择。NB100 的配 置如 ● 硬盘大小:120GB
下:
此外,NB100 还包括 Wi-Fi、一个 10/100
● CPU:Intel Atom N270 以太网卡、三个 USB 接口和一个 0.3MP 的摄像
● 内存:512M(Linux 版)、1G(Winod- 头。
ws 版)

10 个有趣的开源软件分支
开放源码软件分支的一个好处是能够采取应用程序的代码基础并将它在新的方向上进行开发、创新。
这是大多人都知道的,称之为分支,在开源社区是很常见的。例如,许多 Linux 的发行可追溯到任何的
Dbian,Fedora 或 Slackware 的。

许多开放源码软件分支在目前一些流行的项目中使用。我们认为这是很有意思的事情,来看看历史上
的一些软件,找出他们为什么会比原生软件受欢迎。

我们寻找软件分支常常被看作是浪费开发资源,以及不被视为是好事。从下面的例子中我们可以清楚
地看到有些分支软件比原生软件更受欢迎,因此寻找软件分支,并总结其成功的原因是有好处的。

产品名称 产品解释 发布时间 产生原因

Ubuntu 是世界 2004 年 10 月 Ubuntu 最初是 Debian 项目做的


上最有名的 20 日 的临时分区,每 6 个月可以推出一个
Linux 社区 新版本,因此提供更多的最新系统

Ubuntu from Debian


oss.linuxpk.com 2008 年第 10 期 11

产业聚焦
FireFox 是第二 2002 年 9 月公开 Firefox 项目最初是 Mozilla 项目的
大网页浏览器 测试,04 年 9 月 一个实验分支,打算替代日益臃肿的
Mozilla 推出 Mozilla 套件
FF1.0 版本

Firefox from Mozilla


Application Suite

Joomla 是用来 2005 年 8 月 17 由于考虑到今后的 Mambo 项目管


管理网站内容的 日 理,有几个核心开发人员认为 Milo
开放源码系统 需要太多的控制,Joomla 就被分离
出来,现在是一个成功的独立的
CMS 系统

Joomla from Mambo

OpenBSD 像一 1995 年 10 Theo de Raadt 创办 NetBSD。


个 Unix 操作系 月,OpenBSD1. 1994 年 12 月,Theo de Raadt
统,并且还是比 2 于 1996 年 7 月 被要求从他的开发者和 NetBSD 小
较流行的 BSD 发布 组核心成员的职位上离职,最有可能
变体 是由于他的个性与 NetBSD 团队冲
突。不到一年后,他创立了从
OpenBSD from NetBSD NetBSD 的 1.0 分叉出来的
OpenBSD

X.Org 服务器是 2005 年 6 月 XFree86 4.4 新许可证的不一致和


X Window 系 X.Org 成立 许多 XFree86 贡献者间的分歧最终
统流行的实施服 导致了 X.Org 的产生
务器,有时还用
于 Linux 和其他
Unix 上
X.Org from XFree86


oss.linuxpk.com 2008 年第 10 期 12

产业聚焦
Drizzle 是开放 2008 年 4 月 5 日 从 Brian Aker 开始,Drizzle 从
源码的数据库管 MySQL6.0 代码库里分离出来,它
理系统,尽管它 本打算作为一个小的、灵巧
还未发布 、快捷的 MySQL 版本。参与者有来
自 Google、Sun、Canonical 等
的员工
Drizzle from MySQL

NeoOffice 是 2003 年 6 月 22 NeoOffice 最初是一个旨在探讨如


用于 Mac OS X 日 何建立一个 OpenOffice.org 的本
上的办公套件 地 Mac OS X 端口的项目

NeoOffice from
OpenOffice.org

XEmacs 是一 1980 年,那时称 1987 年到 1993 年这段期间,拖延


个图形、基于控 为 Lucid Emacs 了 GNU Emacs 的一个版本的推出
制台的文本编辑 。80 年代末,Lucid 想更新
器 项目的 Emacs,所以他们将
Emacs 分支代码的意图和变化纳入
到下一版本中 。然而,自由软件基金
XEmacs from GNU 会最终拒绝这些变化,因此
Emacs
XEmacs 只能继续作为一个单独的
分支

Carrier 是一个 2008 年 3 月 12 分支(最初成为 Funpidgin)是用


开放源码的在线 日发布第一个版本 于 Pidgin2.4.0 的,新分支更注重
消息应用软件 用户的需求

Carrier from Pidgin


oss.linuxpk.com 2008 年第 10 期 13

产业聚焦
Webkit 是用于 2003 年 1 月苹果 苹果创造了一个 KDE 项目的 HTML
创建网页浏览器 公司宣布 Webkit 布局引擎 KHTML 的分叉和它的
的开放源码应用 作为 Safari 内核 JavaScript 引擎 KJS,使用它们
框架 来开发 Safari 网络浏览器

Webkit from KHTML

从上面的 10 个软件分支例子中可以推断,产生的原因是由于(有时是纯粹的意识形态)意见分歧和
个人冲突,但更实际的理由也很常见(如 Webkit 和 Firefox 的例子)。有趣的是这些分离出来的软件往
往比原生软件更受欢迎。

08 软件自由日几大看点
唐红梅

9 月 20 日,一年一度的世界软件自由日在全球开展庆典活动,笔者走访了软件自由日北京站北邮现
场。

应用多样化
上午十点半左右,工作人员便在北邮校区的主干道一旁搭起几张长条桌,展出的内容包括基于开源操
作系统的手机终端、100 美元笔记本如何应用开源操作系统与软件以及部分厂商的开源套件。

中国开源软件推进联盟副秘书长袁萌早早来到北邮,他带来了 Ubuntu 第八个版本的软件包,那只装


oss.linuxpk.com 2008 年第 10 期 14

产业聚焦
有 Ubuntu 软件包的小 U 盘挂在他胸前。

从高校开始
一位所学专业为计算机的北邮研一学生在填完一张关于自由软件问卷之后获得了一套 turbolinux
desktop,这位学生告诉记者,他平常就比较关注开源,长期浸泡于相关社区。像这位学生一样,本次
前来展区问讯的大多为学生。

作为本次活动的组织参与者之一,信息产业部软件与集成电路促进中心软件公共服务部嵌入式软件工
程师孙廉焘告诉记者,在软件自由日前夕,自由软件爱好者们在北大、清华、北航、北邮等做了大量宣
传,孙廉焘认为,要进行自由软件的推广,先从高校入手,而这也成为本届软件自由日北京站的一大特
色。

讲座以报告为主
下午两点,北邮教三 437 教室人满为患,原本能容纳 200 多人的教室,在两条过道上坐满了前来听
报告的自由软件爱好者,教室前后门也被围得水泄不通。孙廉焘做了简单估算,前来参加的人数大概在
三百人左右。

中国开源软件推进联盟陈伟博士、北京 BLUG 主席同时也是 Novell 技术经理的刘俊贤(Alex Lau)等


分别做了主题演讲。

与此同时,除了北邮站外,在北京东直门、兰州大学以及西安邮电大学以及青岛等地同时举行相关庆
典活动。


oss.linuxpk.com 2008 年第 10 期 15

产业聚焦

谷歌 Chrome 浏览器市场占有率
稳定在 0.7%

Net Applications 在今年 9 月的浏览器市占率侦测数字显示,新问世的 Chrome 占据了 0.78%的


浏览器市场,包括微软的 IE 及 Mozilla Firefox 浏览器的市占率都下滑,其中,IE 的市占率自 8 月的
72.15%下滑到 9 月的 71.52%,而 Firefox 的市占率则自 19.73%下滑到 19. 46%。

谷歌在今年 9 月 2 日最新发布的 Chorme 浏览器虽然备受各界瞩目,而且在发布 24 小时内其全球市


占率就达到 1%。不过,推出迄今已届满月的 Chrome 市占率却未能趁势直线成长,根据美国流量分析
业者 Net Applications 的追踪数字,Chrome 发布二周后其每日市占率 就下滑并稳定维持在 0.7%到
0.8%之间。

除了新出炉的 Chrome 之外,苹果的 Safari 成长,自 8 月的 6.37%成长到 9 月的 6.65%。至于


Opera 及 Netscape 则皆落后 Chrome,9 月市占率分别为 0.69%及 0.63%。

若从各式浏览器的版本来看,微软 IE7.0 的市占率为 46.35%,IE6.0 仍有 24.67%的市占率,仍


在测试中的 IE8.0 则有 0.37%的市占率,至于 Firefox3.0 市占率为 13.27%,显示出大多数
Firefox2.0 的用户皆已升级,Firefox2.0 市占率仅剩 5.77%。

目前谷歌的 Chrome 仅为 0.2 版,经过了刚发布时靠着 Chrome 简洁的外型及浏览速度赢得不少使


用者惊呼的阶段之后,现在各界关心的是 Chrome 何时才能更为成熟,真正成为使用者桌面上主要的浏
览器。


oss.linuxpk.com 2008 年第 10 期 16

产业聚焦

微软加快与开源社团协作的步伐
近日,微软公司表示他们 将加强与开源组织的合作并
且列出了一系列的相关措施, 包括通过一系列与 Linux 和
虚拟化相关的项目来增强网络 应用技术。

多年以来,微软一直被认 为是开源社区的死对头,但
微软却在 ZendCon 2008 大 会上重申了他们与开源组织
合作的决心,同时也公布了一 系列的举措。微软开源技术
中心总监汤姆・汉拉汉(Tom Hanrahan)说:“我们希望能
够加强与开源组织之间的互用 性,并将开源技术与
Windows 平台相整合。”他 表示,微软的开源技术中心
是由来自 Linux 和其他开源社 区的工程师所组成的,他们
能够更好 的理解如何与开源组 织之间进行合作。

这一中心既配有开源软件 实验室又设有 Microsoft-


Novell 互用性实验室,前者可 以帮助人们研究如何在微软
的产品上运行开源软件,他还 表示,微软正在与 Novell 紧
密合作来确定相关的管理问题, 微软开源技术中心总监汤姆·汉拉汉(Tom 同时也在就开发 OpenOffice
Hanrahan)
和微软 Office 文档的转换器展 开合作。另外,汉拉汗还提
到,微软也在为 Novell 的 MoonLight(微软 SilverLight 的 Linux 版本)提供支持。

除此之外,微软在开源领域的努力还包括,测试 Windows 与 Samba 开源文件和打印服务之间的互


通,与 PHP 社区展开合等与 PHP 社区之间的进一步合作将会涉及更多的数据库和应用程序。微软的战略
主要是希望在 Windows 平台上支持开源软件.Windows 和开源世界之间的互用性已经在产品层面得以
实现,它们之间可以通过网络标准实现互用而数据互用也在加紧推进之中。

汉拉汗还指出,他们最近已经成了 Apache 社区的白金级赞助商,而且已经在 Eclipse 中增加了 C#


插件,另外微软还向开源社区开放虚拟化的 VHD 等协议,这样一来,任何人都可以在无需授权的情况下
获得并共享数据。他们还希望确保 Linux 能够像 Guest OS(Guest OS,也即虚拟机使用的系统)一样在
微软的 Hyper-V 虚拟化平台上正常运转,微软的 Visual Studio 开发平台中还将包括 MySQL 的插件以
实现数据库通用。

最后,汉拉汗还提到了一些其他的开发项目,例如利用 Java、PHP 和 Ruby 等技术提供的应用程序


接口(API)来为火狐(Firefox)浏览器开发插件,从而使得 Windows Media 文档可以直接在火狐中播放。


oss.linuxpk.com 2008 年第 10 期 17

产业聚焦

Ubuntu 是开源社区
中的害群之马?

正方

Greg Kroah-Hartman 认为 Ubuntu 是害群之马


Greg Kroah-Hartman 终于忍不住发飙了。他在最近的 Linux Plumbers Conference 2008 的主
题演讲中,直言不讳的指责 Ubuntu 社区的背后公司 Canonical,认为他们对 Linux 社区贡献微弱,特
别是在内核方面几乎为零。

在他的演讲 ppt 中,他指出,Ubuntu 社区对内核的贡献非常少,在过去的 5 年中,仅仅提交了 100


个左右的内核补丁。而在此同时,L inux 内核小组收到了差不多 10 万多个内核补丁提交,Ubuntu 的贡
献只是占到 0.1%。远远落后于其他两个 Linux 发行版厂商 Red Hat 和 Novell,这两者分居 Linux 内核
贡献的前两位。

对此,Ubuntu 社区运营公司 Canonical 坐不住了,Ubuntu CEO Matt Zimmerman 站了出来。


他认为,Greg Kroah-Hartman 的言论实在令人作呕,他的统计方法不科学。此外,Ubuntu 并没有说
他们在内核方面做得比 Red hat 和 Novell 好。

Ubuntu 内核大部分是由原始的 Linux 内核源码组成。Zimmerman 还提到了 Kroah-Hartman 定


义的“Linux 生态系统”概念,他认为,后者的定义实在太奇怪了。Kroah-Hartman 定义的“Linux 生
态系统 ”中包括了 GCC、binutils、X.org 和 Glibc 等,但是却无视那些 普通 Linux 用户的认知,因为
普通用户一直习惯认为,比如桌面环境系统 GNOME 和 KDE、桌面和服务器应用程序等等这些都应该是
Li nux 组成部分。

不仅如此,Zimmerman 还指出,Kroah-Hartman 和 Novell 直接存在联系,而 Novell 正式


Ubuntu 的竞争对手之一。 Ubuntu 的 CEO 还不屈不饶的指出,应该就此事在会议主题发言下展开一个
讨论,考虑所有必要的因数,为 Ubuntu 的贡献要讨回一个公道。

Greg Kroah-Hartman:目前的 Linux 内核主要维护者之一,主要负责 Linux 架构下 USB, PCI,


I2C 等设备驱动维护,目前供职于 Novel l,经典的《Linux Device Drivers》第三版的作者。


oss.linuxpk.com 2008 年第 10 期 18

产业聚焦
中国网友评 Ubuntu Linux 发行版

文/cppgx

Ubuntu 根本就是个祸害开源社区发行版。资本
家是“无利不起早”的。“新人用 Ubuntu 系列是最
不明智的选择,因为很难利用到别人的经验。
Ubuntu 修改了太多东西造就了和其它发行版的不兼
容。

“Ubuntu 通过大量散发免费光盘圈走很大一部分初级用户,这部分用户自行解决问题能力相对较差,
当遇到问题而又因为系统和别 人不兼容而无法获得别人帮助时,最终将屈服于 Ubuntu 而购买 Ubuntu
的服务。

“ 这种称作糖衣炮弹的诈骗手段古往今来屡试不爽。实际上微软也这样,只不过微软是通过放纵盗
版来圈客户,并且微软的 Windows 好歹还有很大一部分是它自己编的;Ubuntu 则明着圈初学者,并且
利用的工具也基本上不是它自己的,而是 GNU/Linux。”(按 :在以上大字报贴出一年后,Ubuntu 果
然提供了比买 Windows Vista 还贵的收费服务。)

由于 Ubuntu 直接抄袭 Debian 的特色内容,所以有的网友称 Ubuntu 为“番茄花园版的 Debian”。


这个系列的发行版以标新立异为荣,轻率修改关键代码,对用户极不负责。例如对随机数发生器的非官
方修改导致 openssl 密钥容易重复,直到现在 Ubuntu 还在不断追 加 black list,让其用户苦受倒悬之
危。

Ubuntu 区别于其它大多数发行版的另一显著特征就是临近版本之间改动极大。经常有人抱怨:“我
的 Ubuntu 升级后不能启动了。”(例如 7.04 版升级到 7.10 时,很多用户无法进入 X Window.)

同时 Ubuntu 为了进一步增加用户的麻烦,用 dash 取代了 bash,带来繁多的兼容问题。不幸的是,


在其自身的论坛上,Ubuntu 被证实 在一些只兼容 dash 的脚本开头使用了#!/bin/sh 而不是
#!/bin/dash,从而自掘坟墓,损人害己。由此可见 Ubuntu 本身就不是一个严 肃的产品,不适合作为
操作系统使用。

只有让用户经常遇到麻烦,为 Ubuntu 提供服务的公司才能最大限度地赚钱。要多赚钱,不但要让每


个用户多使用服务,还要扩大用 户群。这就要从 Windows 世界不择手段地拉拢用户。

Ubuntu 为了讨好 Windows 用户不惜东施效颦。作出了一些破坏*nix 惯例的修改,例如学习


Windows 的 Program Files 目录,将不同软 件装到各自的目录而不是分散在统一目录结构中,导致类
似 tkConfig 失效等 Ubuntu 特有问题。


oss.linuxpk.com 2008 年第 10 期 19

产业聚焦
综上所述,Ubuntu 完全就是一个用砸钱的办法耧取商业利益同时祸害自由软件社区的发行版。一般
人无论是从自身利益还是从社会责任考虑都不应该主动使用 Ubuntu。

反方

为 Ubuntu 辩护,人人有责

文/袁萌

近日,有一篇抨击 Ubuntu 发行版的“猛文”在网上广为流


传,影响不小。这里面有什么背景?作者是何用意?这股歪风
从何而来? 9 月 19 日,Novell 公司的 Linux 内核开发高手
Greg Kroah-Hartman 在《国际 Linux 内核维修者》大会上,
率先对 Ubuntu 主要支持者 Can onical 公司发难,指责
Canonical 公司对 Linux 内核贡献“极少”,在过去 3 年中,
Canonical 总共才提交了 100 个补丁程序,占此期 间 Linux 内
核补丁程序总数的 0.1%。由此,Greg 的真正意思是说:
Ubuntu 对“Linux 生态系统”的贡献“极小”。这一非常怪异的说法和看问题的立场和视角,立即遭到
业界相关人士的猛烈反击。

有关业内人士指出:一方面,在过去几年中,Linux 内核的演变轨迹主要涉及服务器支持方面,触及
桌面应用(Ubuntu 的主攻方向 )的因素很少,另一方面,Canonical 在全球的员工只有 130 人,相对
Novell(4,100 名)和 IBM(38 万名)而言,是一个很小的公司 ,因而,Canonical 公司对 Linux 内
核提交的补丁程序必然较少,这是完全可以理解的。近年来,Ubuntu 实际上创造了全球近一半的 Linux
的桌面基础用户,毫无疑问,这是对 Linux 生态系统的最大贡献。与此同时,业内人士指出,Greg 是
Novell 公司的雇员,大家 知道,Novell 是 Ubuntu 进入企业级市场的竞争对手。Greg 如此乱发议论,
不能令人信服。

国际上这股攻击 Ubuntu 的歪风,不知怎么搞的,很快刮到我国境内,“猛文”便是一例。猛者,勇


猛之意也,就是把力气集中地使 出来。果真如此,“猛文”一开口便断言:“Ubuntu 根本就是祸害开
源社区的发行版”,“新人用 Ubuntu 系列是最不明智的选择” ,理由是“Ubuntu 修改了太多的东西
”,“与其他发行版不兼容”,等等,“猛文”甚至还说,“Ubuntu 是 Debian 的番茄花园修改 版”。
“猛文”宣称,“Ubuntu 以标新立异为荣,轻率修改关键代码,对用户极不负责任”,“临近版本之间
改动极大”,“用户 经常抱怨”,等等。 “猛为“作者恨不得一口气把 Ubuntu 吃掉。事实是怎样的,
我们先不细说(容我以后撰文再议),这里我们要问,为何“猛文”要如此集中发力,猛烈攻击


oss.linuxpk.com 2008 年第 10 期 20

产业聚焦
Ubuntu?

“猛文”作者不只是攻击 Ubuntu 发行版,而是把攻击矛头直接指向 Ubuntu 的主要支持者


Canonical 公司,他的背后必定有利益因素 动的,明显地代表了某种利益集团的切身利益。“猛文”说,
“只有让用户经常遇到麻烦,为 Ubuntu 提供服务的公司(意指 Canoni cal 公司)才能最大限度地赚钱
”,“要多赚钱,不但要让每个用户多使用服务,还要个扩大用户群”,如此一来,Canonical 倾力 支
持 Ubuntu 的主观动机就全然被否定了,这与客观事实完全不符。

(注:从网络上,搜索“猛文”作者,可以看出,作者一贯自视清高,沾沾自喜,实则不敢恭维,特
别是,在 Love 专区的言论,实在令人恶心。)

普通 Linux 的使用者:为 Ubuntu 平反

文/Cross

日前,一篇抨击 Ubuntu 的猛文在国内火速流


传。我身为一个 ubuntu 的支持者,我实在忍受不
了这种无理的栽赃与指责;而且我不希 望国内潜在
的大量 linux 爱好者受此文影响,而对 ubuntu 产
生错误的理解,我一一对比阐述我对 ubuntu 的认
识与理解。

事情是这样的:

9 月 19 日,Novell 公司的 Linux 内核开发高手


Greg Kroah-Hartman 在《国际 Linux 内核维修者》大会上,率先对 Ubuntu 主要支持者 Canonical
公司发难,指责 Canonical 公司对 Linux 内核贡献极少,在过去 3 年中,Canonical 总共才提交了 100
个补丁程序,占此期间 Linux 内核补丁程序总数的 0.1%。”

由此,Greg 的真正意思是说:Ubuntu 对“Linux 生态系统”的贡献“极小”。这一非常怪异的说


法和看问题的立场和视角,立即遭到业界相关人士的猛烈反击。

我一个 ubuntu 的使用者和支持者的切身体会:

针对所谓“贡献”

Linux 是一个开放,开源的系统;如果大家有过 sourceforge.net 上的浏览或者参与经历,都会了


解到,开源社区需要大家都出一份力,正所谓人人为我,我为人人,但是不是每个人都是有足够时间,
精力和实力去做最最核心的开发代码的工作,还有很多工作,比如翻译,发现 bug 或者是传播开源文化。


oss.linuxpk.com 2008 年第 10 期 21

产业聚焦
所以在这一点上,最大的两家 linux 开发公司 red hat(redhat 和 fedora)和 novell(suse 和
opensuse)他们确实为了 linux 的内核做出了卓越的工作,但是即便是 ubuntu 内核工作的做的少,但
是 ubuntu 不遗余力的推广和普及工作,做这些工作的就要遭到抨击?

那我们普通使用者要怎样参与这个开源的项目呢?!如果我们不做内核开发工作,就要挨骂,这将据
所有人于千里之外,逼大家回到 windows 的世界里,难道这是这个 novell 的内核专家想看到的?这是
他在为 linux 做贡献吗?其居心不可谓不叵测啊。

针对所谓“胡乱篡改代码”

open source 的初衷就是让大家学习其代码,并发布自己定制的系统和大家共同探讨学习以及享受


到不同定制的便利,而摆脱 micro soft 提供的桎梏,发挥人类的想象力和创造力,而不是为几个公司,
几个开发者所左右我们人类的思维;而且上百个 linux 的版本 ,都是基于那么 3,4 个版本修改并开发而
来,从这一点上,ubuntu 修改 debian 有什么错?!而且 ubuntu 里面最原始的安装,根本不 带任何商
业软件,完全的开源与免费,为何这要受到一些人的诟病?

这个 novell 的内核专家是为 suse 这个系统工作;但是不要忘记 suese 早年也是 2 个德国人现从翻


译并传播 redhat 的 rpm 系统,而最终自立门户,后又卖身给美国的 novell 而发展起来的;现在你们羽
翼丰满了,又龌龊的与微软签订了一些不伦不类的契约,受了大笔 的钱后,反倒回过头来指责另外一个
给他带来竞争力的公司。而且,要说修改的很夸张的,我觉得 linux 的所有软件里最特殊的并 孤立其他
版本的莫过于 suse 的 yast,不能否认其功能之强大,但是完全是一个傻瓜系统,如果你用惯了这个系
统,你就会变成一个 linux 的白痴,一旦没有了这个 yast,所有设置你都不会做,估计连 terminal 是干
嘛的可能都不知道(正像许多使用 apple 的 mac 的 人)。从这一点上来说,真正改变 linux 的标准的是
novell 的 suse 系统,而他们有名的内核专家却开口以此为理由指责一个只是完善可用性的 ubuntu,其
居心不可谓不小人啊。

针对所谓“制造麻烦,卖服务”

个人学习 linux 的经验,从早期的 redhat,到 fedora(1-9),再从 suse 到 opensuse,一直是


麻烦不断,硬件支持很差,效率很低。真正享受到了 linux 提供的便利,强大和高效的工作效率是从
ubuntu 开始的。Ubuntu 也不止一次的被评为兼容性最好的 linux 发行 版;是真正的为了初学者敞开了
一扇通往学习 linxu 的大门;并且对 linux 社区有大概了解的人都知道,ubuntu 的社区是规模最大的,并
且 ubuntu 还提供相关的 brainstorm(专门的一个网站,让大家提出尽可能多的想法和建议,这是一个
普通用户和开发者联系的纽带)和 launchpad(普通用户提交 bug 的非常强大的管理系统),看看这些,
就会知道,ubuntu 怎么会所谓的‘故意制造困难,然 后让用户买服务’。相比之下看看这位指责者开
发的 suse 系统吧,用户社区逐年缩水,并且由于历史原因,suse 来源德国,有大 量老牌开发者都是来
自德国,suse 维护了这样大量的德语社区,这就使得世界上其他语言的使用者很难找到最权威的帮助和


oss.linuxpk.com 2008 年第 10 期 22

产业聚焦
开发文档。并且 suse 也宣称过,最近几年内不会进入桌面系统领域。这样一个只知道做商业用途的开发
系统,有什么资格来说 ubuntu 是在 故意给用户制造麻烦。

针对所谓“商业利益”

Redhat 和 novell 为何拥有企业版的 Red Hat enterprise linux 和 SUSE,免费的 fedora 和


opensuse?其实显然,后者是给普通用户使 用的,以普通用户为小白鼠来完善他们的企业版,这种不
惜牺牲普通用户的做法正是他们能够提供高质量的企业版的原因;并且,针对 linux 的一些不完善,这两
家公司也都先后宣布暂不大力度投入桌面用户领域,这实际也就是说,普通用户对于他们完全是无 足轻
重的,钱途才是最最重要的。而相比之下,ubuntu 填补这个空缺,仅以 130 个员工的实力去完全为普
通用户提供完善的桌面系统,并先后开发出针对 mobile 设备,超便携电脑(umpc)的不同版本系统,
而且 ubuntu 的服务器版本完全就是整个 ubuntu 软件库里的一部分软件的组合,也就是说企业版和个
人版都是一样的,只是选择的软件包不一样而已。从道义上讲,这为开发者服务的 suse 系统是无法和一
个把普通用户和企业级用户视为同等地位的 ubuntu 相提并论的,真正为了‘商业利益’的,就是他们
自己,结果倒反咬他人一口。

总之

ubuntu 对开源社区,对 linux 所作的贡献不能只以对内核贡献来衡量;它对 linux 的代码的完善做


了卓有成效的贡献,使得大家不再像以往使用 fedora 和 opensuse 这样的垃圾系统时那样没完没了的
找解决问题的方法,而无从谈及工作效率,ubuntu 真正把 linux 变成了一个工具给人类使用;ubuntu
提供了最广泛的社区支持,这也是它能鹤立鸡群的原因,他是真正为用户考虑,并创立了 独有的商业模
式,而不是像 suse 那样的牺牲普通用户利益而达成自己的商业利益的开发版本。

ubuntu 是 for human being 的意思,ubuntu 这个系统当之无愧,最早的支持者就是南非为了人


类自由而致力的曼得拉。而 suse 呢?

我个人不喜欢看到这种互相指桑骂槐的事情在 linux 和开源领域发生,这毕竟是一个崇高的项目,不


该像 apple 那样猥琐的演出一幕幕'i'm mac, i'm pc'的无聊的互相挖苦无聊的掐架(在这一点上微软要
比 apple 正人君子多了)。当时,red hat 和 novell 都宣布 暂不致力个人桌面系统领域,这真的让很多
linux 的用户感到痛心,毕竟如果失去这种竞争,很多优秀的创意的可能就不会出现了 ,同样很多人在
争执 kde 和 gnome 哪个更好,相信,当有一天真的一方落败并消失的时候,遭受损失的是我们每一个
人,而不是某一个单独的阵营。大家应该致力把整个社区,甚至是整个人类学习工作的平台做的更好,
让不同的理念和想法自由发展;而非这位大名鼎鼎的内核开发者这般无理的指责。

希望更多潜在的或者是已经在使用 ubuntu 的用户不要因为这位开发者的言论蒙骗。


oss.linuxpk.com 2008 年第 10 期 23

专家专栏

自由软件与开源软件的概念纷争
中国开源软件推进联盟主席

1
陆首群
983 年 Richard Stallman 提出了自由软件(Free Software)的概念,1998 年 Chris
Peterson 提出了开源软件(Open Source Software)的概念,自由软件和开源软件有共
性也有区。别。有人说,这可看作为观察同一类事物的具有不同价值取向的两种角度;两
者都致力于突破专用软件(私有软件)的约束和包围;对各自的开放源代码的许可证,两者对“被许可
人权利”的“限制”在严、宽的程度上有所不同;正如 Apache 创始人 Brain Behlendorf 所说的那样,
无论是自由软件还是开源软件,都一直处于“利他主义(Altruism)和利己主义(Capitalism)”既斗
争又合作的漩涡之中,自由软件当然主张纯粹的“利他主义”,而开源软件则力求从中取得平衡点。开
源软件相对于自由软件有两点“发展”:(1)在一定程度上开源软件可与私有软件相连接。(2)允许
开源软件建立商业模式;开源软件在继承并融合自由软件哲学理念的基础上,在发展中形成多元的指导
思想;开源软件可以包容自由软件。自由软件与开源软件在价值观念和实现方式上是可以互补的,在原
创性开发和规模化发展上也是互补的,我们通常可以把它们看成是一体,统称为自由/开源软件
(FLOSS,Free/Libre and Open Source Software)。10 年来,自由软件与开源软件两个概念的争
论,延绵不断、时急时缓,其中也不乏相互妥协与包容。几年前我曾讲过:“不要挑动自由软件与开源
软件之间的分裂”,“不要热衷于搞内耗”,“自由、开源软件,合则两利,分则俱伤”。

自由软件的创始人曾认为:“开发、传播自由软件是一项政治运动,一项社会工程,是使用技术手段
来进行社会变革的自由运动”。我认为,唱这样泛政治化的调子非学者所为,似乎对自由软件及其作用,
估计过高了,我们还应该把它从“神坛”上请到人间来。

在历史上自由软件的概念有多种解释,但多数人认同的概念是:自由软件的原作者们放弃自己知识产
权的权利,向公众开放许可,不但开放源程序代码,而且鼓励人们自由使用、自由复制、自由修改、自
由演绎和自由发布,在全球各地创立一种自由开发、使用和传播的环境,核心是保证自由传播,自由软
件在传播过程中一直要保持自由。人们对自由软件进行修改、改进和再发布时,要严格接受自由软件的
运行规则,即在自由软件的许可证中,不允许被许可人将本许可证许可的源程序代码的修改或演绎版本,
以其它的许可证方式再许可。

自由软件强调其价值观念、文化特征、伦理道德或哲学理念(即看世界的方法)。

1983 年 Richard Stallman 本着自由、开放、共享、协作、奉献的价值观念,面对当时充斥全球的


专用软件逆流而动,提出了自由软 件的概念,写出《GNU 宣言》(GNU Manifesto,作者注:GNU 一
词,从字面上讲,即 GNU’s Not Unix,GNU 作为自由软件操作系统 不是当时著名的 Unix 操作系统,


oss.linuxpk.com 2008 年第 10 期 24

专家专栏
含义为自由软件运动的组织、计划、技术、体系、工程);启动 GNU 工程,企图通过不受约束的操作系
统、应用程序与编程工具,来开发、推动自由软件模式,建立通用公共许可证(GPL,Gereral Public
License,一种主要的 自由软件的运行规则);提出“左版”(Copyleft)版权;并创建自由软件基金
会(FSF,Free Software Foundation)。

自由软件基金会致力于 GNU 系统的编写工作,唯一缺乏的构件是一个操作系统内核,由于种种原因,


GNU 自由操作系统的内核 Hurd 一直没有开发成功,恰巧在 1991 年 Linus Torvalds 开发了 Linux 操作
系统(即 Linux 内核,Linux Kernel),FSF 随即把 Linux(Kernel )作为 GNU 操作系统的内核,并
将 Linux(Kernel)在 GNU GPL 下发布,从而使一个完整的、可运行的、自由软件操作系统得以实现。
Richard Stallman 一直认为自由软件和开源软件在基本原理上存在着分歧,但它们或多或少在行动上一
致,可以在许多项目上一起工作;他认为开源是一个方法论问题,实用问题,是一种开发模式;自由软
件运动的“敌人”是私有软件,开源运动是“同盟军”,他不反对开源运动。

有趣的是,Linux(Kernel)的开发成功,使自由软件运动实现了关键性突破(即推出 GNU Linux


操作系统),Richard Stallman 自然把 Linux(Kernel)称之为自由软件(实际上也是迄今为止一种主
要的自由软件),对此 Linus Torvalds 也表赞同,但他后来更多地称之为开源软件。

GPL、BSD 和 Artistic 均被认为是自由软件许可证的范例(我看 BSD 作为自由软件许可证有点勉强,


它似乎阻断了自由传播),实际上,GPL 是一种主要的自由软件许可证,不但大多数自由软件是依照
GPL 发布的,很多主流的开源软件也是依照 GPL 发布的,在现有约 60 多种自由、开源软件许可证中,
使用 GPL 的占 65.8%,占绝大多数。所以作为自由软件许可证的限制措施:在被许可人进行修改或演绎
的版本再发布时,不得以其他的许可证方式再许可,严格限制了在传播中出现两种不同许可证的冲突。
其实对自由软件而言,一旦发生冲突,主要是不同许可证与 GPL 许可证之间的冲突。

对许可证的限制,开源软件要比自由软件宽松、灵活一些。从自由/开源运动自身的利益出发,在自
由软件向开源软件演变时,要求对其许可证限制的规定能作变通处理。1998 年就在“变通处理”问题上,
引爆了自由软件与开源软件的一场争论。争论是围绕 Linux 操作系统扩展问题展开的:随着 Linux 的发
展,早期 Linux 由其内核作代表,已不能满足用户对其功能扩大的需求,期望 Linux 扩展,随着 Linux
纳入了各种“库函数”进行扩展时,人们发现在其中的 C 库(glibC)中,有一些库函数是专用软件。当
然 Linux(Kernel)模块在执行自由软件许可证即通用公共许可证(GPL)时,是没有问题的,但在与
库函数模块相连时,就要对许可证作变通处理,如执行次级通用公共许可证(LGPL,Lesser General
Public License);而且当时有人提出,要把 GPL 和 LGPL 都认定为“开源许可证”。1998 年自由软
件与开源软件的争论,涉及到学术和意识形态领域,这场争论随着 Richard Stallman 的妥协而日渐平
息,最终开源相对占据了上风。

这样,开源软件虽然在连接专用软件问题上有所“发展”,但也有一定限制,即不允许附加的专用软
件占主导地位。或者说,在由不同模块组成的开源软件中,允许出现不同许可证并存于一体的局面,也
有所突破,但这时也要求附加软件模块所执行的另外一种许可证不占主导地位。


oss.linuxpk.com 2008 年第 10 期 25

专家专栏
开源(Open Source)的概念是由 Chris Peterson 提出来的,开源的定义取自 Bruce Perens 为
Debian 社区起草的“自由软件指导方针”,该方针支持在 Debian GNU/Linux 自由软件平台上可运行
及开发非自由软件用户,但不允许该平台依赖于任何非自由软件(作者认为,这里说的自由软件似改为
开源软件为宜)。结合我们上面讲的,这项方针体现开源软件较之自由软件的第一个“发展”。另外该
方针还体现从务实的商业立场来发展和传播开源软件的观点,这是开源软件较之自由软件的第二个“发
展”。

自由软件运动一直试图改变世界,都忘记当今这个世界是用知识产权堆砌起来的,自由软件运动冲击
专用软件和专利、版权(右版)制度,威胁到一些私有商业软件企业,他们已开始反击。

自由软件运动厌恶并摒弃商业行为,但如果它还不愿与开源运动合作,它就突破不了自身“技术发烧
友”的狭隘圈子,难以持续发展,做大做强,不可能在软件市场上形成主流,也无法在社会上广泛传播。
自由软件不能光靠自由的理念,以及“左版”版权、开放源程序代码这样的善良意图,不能光凭自己的
所谓道德力量,这是打不赢这场现实激烈的“战争”的。

有人说,如果没有 Linux(Kernel),就不可能推动自由软件运动(GNU)的成长;如果没有 Red


Hat(指实现 Linux 商业化),Linux 就不可能成为主流操作系统。我认为,这种说法是很有道理的。

自由软件与开源软件是可以互补的;在一定意义上开源软件运动可以包容自由软件运动。

开源软件同样坚持开放源程序代码,执行“左版”版权和自由/开源软件许可证,如前所述,开源软
件尊重自由软件的价值观念,并在其主要部分继承和融合了这些理念;但开源软件在发展中形成了多元
指导思想。除继承、融合自由软件的价值观外,它还有所创新和“发展”:开源软件要求把 Richard
Stallman 所坚持的“开发者第一、使用者第二”的观念颠倒过来,即从主要强调“开发者使用程序的自
由性”改变为更强调“使用者使用的方便性”。开源软件不主张把“伦理”与“实现”对立起来,而主
张统一起来(事实上,Stallman 在总结 Linux 取得成就的主要原因时一度也认承:不是代表自由软件理
念的 GPL 规则起的作用,而是 Linus Torvalds 找到的社区实现方式起的作用);开源软件不主张搞泛政
治化,要求实现商业化(当然这与专用软件的商业化是有区别的,开源软件要求创建一种便民的低成本
销售模式,或支持 SaaS,创建一种“软件免费、服务收费”的模式)。

自由/开源软件开发的全过程,一般是由社区进行“自由软件项目”的原创性开发,与由企业(或发
行商)进行“开源软件产品”的工程化开发两个阶段组成的。

由全球志愿者组成的社区其开发机制是:集体开发、合作创新、对等评估;社区开发不直接考虑市场
需求,没有开发路线图,没有商业模式,其推出的“社区发行版”可在网上自由免费下载,社区不负责
对已往的发行版进行持续回馈式的纠错改错、打补丁(Bug Fix, Patch ),也不负责向公众或用户提供
支持或服务。

社区版充满很多原创性的亮点,但它在总体上质量还不够稳定,性能还不够成熟,它只是一个研发“
项目”,还不是一个“产品”,距产品化尚有距离。国内有人认为国际上一些著名社区(如 Linux


oss.linuxpk.com 2008 年第 10 期 26

专家专栏
Kernel,Ubuntu 等)推出了优秀“产品”,其实这是误解,他们研发了优秀“项目”,有很多优秀成
果,但决不是优秀“产品”;而且如果只是社区的研发成果,可以肯定还有很多不完善之处。国内有人
设想在这个阶段能够实现“自主创新”,拥有“自主知识产权”,这只能是不现实的空想。社区开发的
自由软件“项目”,遵循左版版权、执行 GPL 许可证,有人在网上免费下载后,对源代码进行修改并再
发行,这时如果想摒弃原来的 GPL 许可证于不顾,照样可能遭遇法律追究(如果像 Google 那样,进行
修改后不再发行,而转化为提供服务,这是可行的)。

企业在社区对自由软件“项目”进行原创性开发的基础上,进一步开发工程化实现技术,实现开源软
件的“产品”化工作。工程化实现技术由专用技术、工程经验、质量认证、兼容性测试技术等组成,工
程化实现技术可催化自由软件研发“项目”促使其更加稳定、优质、高效、成熟,实现原创软件“产品
”化。社区开发阶段与企业开发阶段结合和互补,实际上是将社区的分布式开发成果与企业的工业开发
流程的无缝结合,不但实现“产品”化,而且为“产业”腾飞创造条件。在开源软件产品中的工程化实
现技术是可以不公开的,也就是在这里,在这个阶段,可以“自主创新”,可以“拥有自主知识产权”。
开源软件是具有商业模式的,从其发展的角度出发,开源软件需要实现商业化,认识到可以用开源来构
建商业模式是一个巨大的进步,商业化对于开源软件不应视为高度敏感的“雷区”,商业化绝不会毁掉
开源。开源软件只有实现商业化才能持续发展,做大做强,在市场上真正冲击专用软件的垄断地位,形
成主流的竞争形势。

开源软件虽然需要商业化,但也要防止其过度无限制的发展,防范有关“资本”或“商业”活动对开
源的侵蚀。在自由/开源软件运动冲击下,近来一些私有商业软件企业在进行自身适度“开源”的同时,
以兼并、“结盟”、组建“产业链(生态系统)”和成立社区“基金会”的名义,运用将自己在标准、
专利、技术、人才、资金和市场等方面的优势地位,在推动这些“合作”中,或在建立技术平台上,力
图抓住自己的“主导地位”,“反客为主”,这些动态在自由/开源软件队伍中引发了不同的反应和争论,
Richard Stallman 近来关于自由软件和开源软件的一些言论,似乎有点过激或有些反复,恐怕与他在这
方面的受到的刺激和担忧有关。

在自由/开源软件队伍中,我们不时会听到对 Richard Stallman 批评的声浪,来自 BSD 社区的抨击


尤为激烈;在推行 GPLv3 自由/开源软件许可证时,出现了 Linus Tolvalds 与 Richard Stallman 意见
相左的情况,去年 Richard Stallman 的主要助手、自由软件基金会首席法律顾问 Eben Moglen 也离他
而去。

我还是那句话,自由软件与开源软件宜合不宜分。


oss.linuxpk.com 2008 年第 10 期 27

专家专栏

DOS 时代往事的回忆
中国开源软件 (0SS)推进联盟副秘书长
袁萌


约在 20 年之前,那时的个人计算机内存只有 640KB,DOS 操作系统很难管理 640KB
以上的内存。一块 10MB 的硬盘,体积有一本厚书那样大小,沉甸甸的,1,700 元人民
币一块。那时候,容量为 640KB 的软盘是存储数据和程序的主要载体。那时个人计算机
的显示器是单色的字符显示器,计算机的操作都是命令行方式。在那个时候,一台 PC 计算机(那时叫做
“IBM PC 计算机”,或 IBM 兼容机)的零售价一般在 2~3 万人民币一台。在那个时候,我算得上是一
个 PC 迷,至少在中国人民大学校园内(甚至在北京高校范围内(行政管理自动化方面))。

我至今还清楚地记得,在那个时候,整个(汉字)DOS 操作系统可以放在一张软盘上,无论你走到
那里,只要把随身带的 DOS 系统盘插入计算机的 A 驱动器直接启动计算机系统即可。那时的 DOS 操作
系统品牌有几个,IBM 的 PC-DOS,微软的 MS-DOS,还有所谓“RT-DOS”。那时,人们不知道要
把操作系统“绑定”在一台特定的计算机上,脑袋里面也没有什么盗版软件的概念。说句实在话,随身
携带的自启动 U 盘就是对那个美好时代(精神)的向往和追求。

在 DOS 时代,我们手头只有两件“法宝”:文字处理(Wordstar 3.0)和数据库(dBASE II),


各放在一张软盘上,随身带着(放在书包里面)。数据库 dBASE II 自身带有一套很完备的编程语言,
数据库被视为由一些相关的数据表文件(附带索引功能)所组成。我承认,玩这两件东西是会上瘾的。

在 DOS 时代,版权保护意识似乎还很淡漠。自编的程序,如同文字作品,与他人交流,是极为普通
的现象。那时,在软件界,不存在什么“巨无霸”,人们必须对其毕恭毕敬。在那个时候,人们软件创
新的热情极为高涨,在北京展览馆举办的“软件交易会”,人山人海,熙熙攘攘,挤得你浑身大汗。一
场参观(展览会)下来,心里就别提有多么畅快!我是一个很固执的人,多年来,我总是想回到过去那
个激动人心的美好时光。

十几年来,我与“软件赚钱”(即“软件商业”)的思路格格不入,被视为异端(不合群),弄得很
孤立。但是,我亲眼看到国际 Ubuntu 社区在日益强大,蒸蒸日上,时至今日此时,Ubuntu 社区注册
人数已达 672,678 人,其中积极分子就有 62,911 人。这批 Ubuntu 分子(里面也有中国人),天天忙
活,人海战术,每年定期都拿出两个“Ubuntu 新版本”,任你使用,也不管你怎么用(当然,不能“犯
规”)。说句实话,Ubuntu 很对我的胃口。对我而言,自启动 U 盘,不就是 20 年前的那张软盘吗?只
不过 U 盘的容量(8GB)是软盘的一万倍罢了。当年我的 DOS 朋友现今都老了,但是,今年国庆期间我
还是想和他们聚一聚。那时,我带上一万张软盘(一个小小的自启动 U 盘)在他们面前摆弄一番,就别
提心里面有多美了!


oss.linuxpk.com 2008 年第 10 期 28

专家专栏

从赤壁之战看文档领域“瑜亮之争”
中国开源软件推进联盟副秘书长
陈伟


京奥运前的一部大片在短短四天的首映时间内,票房收入超过亿元,赚得金银钵满。而
剧中对周瑜(公瑾)和诸葛亮(孔明)的仰慕依稀传承了千百年来文人骚客对“一时瑜
亮”的慨叹。东坡居士的“大江东去”千年来未曾淘尽的“瑜亮风流”在 IT 时代得到了
再次的升华。三国那百年苍海间涌现出的无数英雄本在历史长河中应仅仅是惊鸿一瞥,却在《三国演义》
中被罗贯中写得生动立体。上知天文、下知地理,中华智慧化身的诸葛孔明;风流倜傥的周郎公瑾;被
一代枭雄曹孟德意欲铜雀深锁的江东二乔的美艳,都成为耳熟能详的经典。

在信息产业领域也存在着多种的形式的“瑜亮之争”:开源软件与商业软件的市场之争,Wimax 与
TD 的频谱之争,UOF、ODF 和 OOXML 的文档格式标准之争等。这些“纷争”究竟是产业发展的助推
剂,还是造成产业资源浪费的祸首,这个问题不得不加以仔细斟酌与考虑。

其实,三国,更可说“赤壁”已经给了我们答案。赤壁之战的过程和三分天下的结果也说明了“瑜亮
之争”是一个既竞争又合作的关系,这里可以套用一个时髦的词“竞合”,诚然在赤壁之战的过程中,
“竞合”是以“合”为主线的。瑜亮作为不同的利益主体,但在共历时艰时,以天下苍生为念,首先选
择了合作,才得以成就以弱胜强的功绩。而在赤壁大胜后,基于不同的利益,孔明“三气周瑜”令人宕
气回肠,而周郎公瑾临终也发出了“既生瑜,何生亮”的千古悲叹!

UOF、ODF 和 OOXML
在文档格式标准领域当前有两个国际标准 ODF、OOXML,和一个国家标准 UOF。

UOF 是由国家电子政务总体组所属的中文办公软件基础标准工作组组织起草制定的《中文办公软件
文档格式规范》 (即 UOF--Unified Office document Format,中文简称“标文通”) ,该规范已于
2007 年公布,2007 年 9 月正式执行。当前无锡永中科技的 Office 2009 和红旗中文 2000 的 Red
Office 4.0 已正式宣布符合 UOF 标准。

ODF 是 OASIS Open Document Format for Office Applications (OASIS 办公应用程序开放文
档格式) 的简称。它是一个开放的文档格式,主要用来存储和转换那些可编辑的办公文档。这里所指的办
公文档包括文本文档(比如备忘录、报告、书籍)、电子数据表格、图表以及陈述文件。ODF 标准由
OASIS 工业联盟制定,它是以 OpenOffice.org 创造的基于 XML 语言的文件格式为基础的。2006 年 5
月,ODF 被国际标准组织和国际电信联盟投票批准为办公文档标准 ISO/IEC 26300。支持 ODF 的
Office 软件主要有 OpenOffice,Star office,Koffice, Corel WordPerfect, IMB Lotus Notes,
红旗中文 2000 的 Redoffice 等。


oss.linuxpk.com 2008 年第 10 期 29

专家专栏
OOXML 全称是 Microsoft Office Open XML,OOXML 是由微软公司为 Office 2007 产品开发的
技术规范,并于 2006 年 12 月成为 ECMA 标准,然后由 ECMA 以快速通道的方式向 ISO 提请成为国际
标准,经过多轮投票及众多的国家的质询,ISO 拒绝了印度、巴西和南非等四国的抗议,日前宣布将
OOXML 以 ISO/IEC 29500 发布为办公文档标准。

ODF 和 OOXML 当前已经成为 ISO 组织的两个文档格式国际标准。UOF 采用一种开放的参与方式,


也是一个开放标准,让所有致力于文档格式交换的产学研机构共同参与,其成果也是所有参与者集体智
慧的结晶。在政府主推的 UOF 的情况下,ODF 和 OOXML 也都在开展 UOF-ODF 和 UOF-OOXML 的文
档格式转换工作。UOF 依托其鲜明的中国特色和借助巨大的中国市场容量的影响力,其影响力也在逐步
提升,而 UOF 标准也是保持中国在文档领域话语权的关键。

标准难以解决兼容性问题
三个文档标准从技术角度而言,都是基于 XML 的,从开放性的角度, ODF 走在最前面,并且也为国
际开源界和 IBM、SUN 等国际大公司所力挺。

标准出台了,针对同一标准,由不同的公司来实现,其最终的产品的兼容性问题就是一个难题,而现
在更何况是有三个标准。

根据相关的分析,上述三个标准在制定的过程中,针对的是文档的生成和编辑过程所制定的标准,没
有涉及到文档最终呈现给用户的样式进行规范。而用户所希望的是文档在可编辑性和样式的一致性方面
能基本相同。当前的标准只对前一问题进行了规范,而至于样式一致性需要去引用其它的文档发布标准,
如 PDF 等格式。基于这一现实,即使是基于同一标准,由不同的产品或不同厂家来实现,基本上也只能
保证文档内容的兼容性,而对最终用户更为关心的文档样式及版面布局也只能任由各个产品自行解决。
在这种情况下,即使办公软件采用同样的标准而由不同的厂家来开发,其编辑的文档给使用不同厂家产
品的用户,其差异性仍然是显著的。前一阶段,国内 Office 厂商所提出的与主流产品的“精确兼容”也
就不奇怪了。“精确兼容”是用户的切实需求,也是对用户负责的一个表现。在当前有三个标准的情况
下,这个问题将尤为突出。

由此可见,文档的可编辑标准与文档的发布标准的分离,而 Office 软件的用户他不仅关心文档内容


的可编辑性,同时也关注在文档交换以后,其它用户用相关的 Office 软件打开后能否得到相同的版面效
果。当前 UOF、ODF 以及 OOXML 没有对文档发布进行相应的规范,不同的厂商基于对标准的不同理解
和在版面算法上的不统一,造成即使基于同一标准所开发 Office 软件也很难达到较好的兼容性,更何况
现在是三个标准并存。

几点展望
UOF 作为政府主导推广的文档格式标准,也是国内软件在办公软件领域突破的基础。国内现在至少


oss.linuxpk.com 2008 年第 10 期 30

专家专栏
有四个 Office 厂商,他们的 Office 软件在处理同一个文档时,版面上有较大差异(原因如上),给用户
造成了较大的困惑。OOXML 在经由 ECMA 提交 ISO 以后,做了不少修改,当前 MS Office 2007 就不
完全符合 OOXML 标准。而国内厂商在 UOF 的实现上也没有做到完全的符合标准,因此针对本土至少四
款 Office 软件做进一步的标准符合性评估是必要的,这也是推进 UOF 标准的一个关键点。

电子政务及政府采购为本土的软件企业提供了一定的市场空间,但由于本土操作系统和办公套件的完
善还需要一个过程,在产品没有匹配用户需求,以及相关应用与服务支撑环境还没有基本成熟的情况下,
直接大规模推动本土操作系统和办公套件的应用,这对用户是不负责任的,更在一定程度上会伤害用户
对本土软件的信心。结合近年来本土操作系统及办公套件的应用情况,推动 UOF 标准的应用也需要有一
个过程,可以借鉴传统设备制造领域的国产化逐步替代的经验,本着对用户负责的精神,进行规划有步
骤地阶段性应用 UOF 标准,完善相关的应用环节,以促进本土软件产业的发展。

根据笔者的研究分析与相关企业技术人员的讨论,UOF,ODF 以及 OOXML 三个标准之间,仅通过


文档格式转换器来保证用户的文档在不同标准下的兼容性还有很多问题。三国开篇中提到“分久必合,
合久必分”,文档格式标准的发展也是一个渐进的过程,当技术的进步和用户的需求可以抵消厂商之间
的差异时,文档格式将趋于同一,但统一的时间将难于评估。

在“存在即合理”实用主义哲学的原则下,Office 文档领域多个标准共存的格局也难以在短期内改变,
应以广大用户的利益为重,切实推动不同标准间的互操作,保障用户的权益,这是当务之急。在 UOF、
ODF 和 OOXML 三个标准之间建立互操作的协商、研究与开发协调机制,既是以用户为本的一个重要举
措,也是推动 UOF 发展的一个关键步骤。

在信息技术日新月异的今天,“既生瑜,何生亮”的消极只能失去更多的机会。在市场规律和用户至
上准则的驱使下,UOF、ODF 与 OOXML 之间良性互动竞争将推动了信息时代的进步,在企业得到发展
的同时,让用户得到了更多的实惠。


oss.linuxpk.com 2008 年第 10 期 31

开源社区

Gnome 2.24 正式发布


、MSN、QQ 都没有问题。但是,目前只支持简
单的文字聊天。像是传输文件、语音、及视频聊
天都还需要后续 的开发及时跟上才行。看起来,
这是一个很有前途的程序,大家所要做的也许是
给它多一点时间吧。

Conduit 为 Linux 桌面用户提供一种完整的


备份解决方案,支持的备份途径包括本机、远程
计算机、流行的在线服务、电子设备等等。而支
持的数据涵盖了个人文件、照片、邮件、日程表、
经过半年的开发,主流的桌面环境:Gnome 备忘录等各种类型。对于那些重视自己数据安全
2.24 终于正式发布了!在 Gnome 2.24 中引入 的用户来说,Conduit 是一个很有帮助且值得拥
了几个新的应用程序和组件,包括 Empathy、 有的工具。
Conduit 以及 Project Hamster。下面,我们 Project Hamster 是一个 Gnome 面板组件,
将为大家分别介绍: 它提供容易使用的时间跟踪功能。
Empathy,一个新的 IM 客户端,它支持多 下载:
种即时通讯协议。就我的试用来看,连接 Gtalk http://ftp.gnome.org/pub/GNOME/desktop
/2.24/2.24.0/sources/

Fedora 10 Beta 版发布


在上一次跳票之后,Fedora 10 Beta 终于于
近日发布了。Fedora 10 Beta 与上一版本相比,
有了很多的改进和新的特性,各位 Fedora 的爱
好者可以下载 Fedora 10 Beta 进行测试,并向
Fedora 社区反馈你遇到的问题,为 Fedora 的发
展供献自己的力量。

Fedora 10 Beta 中的新特性:


oss.linuxpk.com 2008 年第 10 期 32

开源社区
● 新的网络管理器 ● 新的图标主题”Echo”
● RPM 4.6 ● Gnome 2.24
● Kernel 2.6.27,能更好的支持 Wi-fi ● KDE 4.1

Picasa 3.0 beta for Linux 发布


增强了与 Linux 桌面的整合,增强了在 Gnome
和 KDE 下的效果,并且支持相机检测、网络同步
和一系列实用工具。

Google 对新版 Picasa 3.0 及 Picasa 网络相


册作出了重大技术升级,加入了脸部识别技术,
并在 Picasa 相册中加入了全新的“姓名标签
(Name Tags)”功能,可帮助用户迅速标记相片
中的所有人物,从而根据相片中的人物分类和共
享相片。
近日,Google 在其 Photo Blog 中发布了 下载:
Picasa 3.0 for Linux 的第一个 Beta 版本,它 http://picasa.google.com/linux/download.
html#picasa30

空中 Opera 3.0 正式发布


近日,由空中网和 Opera 共同推出的免费手
机浏览器——空中 Opera 3.0 正式发布。空中
Opera 3.0 采用了 Opera Mini 浏览器的所有最
新技术,除了浏览速度快、能够同时访问 Wap 和
Web 页面之外,更针对中国用户的使用习惯,增
添了文件上传下载、书签同步(Opera Link)等
新功能,从而让手机上网的体验能够向电脑上网
靠拢。

手机上网访问 kong.net 或通过电脑访问


ko.operachina.com 即可免费下载。


oss.linuxpk.com 2008 年第 10 期 33

开源社区
空中 Opera 是一款用于手机的全网浏览器, 1600 万的活跃用户使用,它以速度快、数据压
它基于 Opera Mini 最新版本为中国用户定制, 缩比例大以及能够同时访问 Wap 和 Web 页面而
并根据中国用户的使用习惯不断改进。Opera 闻名,并因此受到众多手机上网用户的喜爱。
Mini 是全世界受欢迎的手机浏览器,有超过

重复去年尴尬 Gentoo Linux


2008.1 版本被取消
一般来说 Linux 发行版 Gentoo 的开发者们表示,“我们正在推行一
的发行周期为一年两次,这 种全新的发行新版本 Gentoo Linux 的模式,就
对于 Gentoo Linux 来说也 是回避诸如红帽子、Novell、Debian 以及其他
不例外,按照这个周期今年 著名发行版 Linux 的推陈出新的周期。此外,
应该是 Gentoo Linux 发行 Gentoo 也在极力推动那种实时的、延续式的更
新版本的时候,但令人遗憾的是 Gentoo Linux 新发行方式,以此来取代固定发行新版本的模式。
就像一年前取消发行 2007.1 版本那样,第二次 ”目前 Gentoo 的开发人员正在通 过每周推出一
取消了本应该于九月发行的 2008.1 版本的 种致力于补充定制化安装包的最小化镜像
Gentoo Linux。但是这并不意味着 Gentoo (weekly minimal images)的实践来逐渐改
Linux 项目发展进度的倒退。 变并取代先前的发行方式。

Firefox 4 早期版本 Minefield:


比 Chrome 快?
Minefield 的早期 Alpha 的 nightly 版本,并且
宣布,它又成为了世界上最快的浏览器。

现在用户就可以下载最新的 nightly 版本体验,


但需要注意,安装完该版本后请在地址栏键入
about:config 并将
javascript.options.jit.content 设为允许,这
近日,开发团队公布了 FireFox 4 的早期版
样才可以启动疯狂的 tracemonkey 特性。据测


oss.linuxpk.com 2008 年第 10 期 34

开源社区
定,新版 FireFox 比 Chrome 还要快 10%。

认证展示开源风景
李麦琪
对于开源认证和培训的方方面面,我们也许会有不同的见解,也会有不同的选择,不过殊途同归的
是, 正是这些东西在一起,让我们 的开源坚实地根植于肥沃的土壤,
成长为百鸟栖居的大树,谁都将拥 有自 己偏爱的枝头和风景。

在广范的普及教育创造了强大群众 基础的时候,我们培训架构的大树
终于开始如愿向着天空不断成长, 然而,这样一个宏伟的建筑实在是
需要太多人的参与,我们需要熟练 的工匠和深谋远虑的专家,我们还
需要初出江湖的新人,开源认证这 个时候就将让每一个参与其中的人
可以找到自己的位置。事实上,开 源认证目前的良好形势正好可以和
开源的发展互相印证,任何一种 IT 认证本身的存在都具有其现实意
义,它或者是热爱技术人们自我证 明的标签,或者是人们借以进入某
一热门领域的入场劵,一方面开源 认证的目标是吸引人们的参与,另
一方面人们在参与的过程中又推进 了开源认证的发展。通过盘点分析
我们熟悉的 LPIC 认证、红帽的 RHCE 认证、Novell 的 SUSE 认证
和红旗 Linux 认证等活跃在开源中的认证,我们可以进一步去发现认证对于开源不可或缺的独特角色。

一种必然 一种使命
开源伊始,从未有人想象过日后开源认证在今天比起其它传统认证的受欢迎程度来也竟然毫不逊色,
那 时候认为开源不过是 IT 精英们阳春白雪自娱自乐玩具的人不在少数。随着开源社区的壮大和开源自由
精神的迅速传播,开源发展逐步成熟,但具备坚实专业知识的人才对于推动开源的作用和最初时那样从
来不曾变过,不同的是今天的开源需要越来越庞大的队伍来支撑。开源技能的认证培训于是顺运而生,
它逐渐成为完善开源生态链各环节无缝连接的粘合剂,开源产品因为认证培训的存在而使其自身价值有
机会得以最大程度的体现。目前,开源人才队伍壮大比起开源的发展来说仍然是众所周知的瓶颈,开源
认证这个时候就肩负起传播开源和锻炼专业人才的使命。

认证群英
美国红帽公司的认证培训有自己一套特有的理念,而且在整个 IT 市场也有着相对比较高的含金量,
经过 一段时间的努力已经获得了很大的成功,培养出了许多专业的技术高手。在中国市场方面,全球培


oss.linuxpk.com 2008 年第 10 期 35

开源社区
训服务作为 Red Hat 对中国市场长期承诺的主要内容之一,主要就是培养更多开源软件人才,促进中国
开源软件产业的发展。红帽全球培训服务在 2005 年 11 月正式推向中国市场以来,为用户提供一系列在
真实应用环境下进行的培训课程,通过设计在线等级测试评估等工作,吸引了大量开发人员的参与。

红帽公司的红帽学院成立也让我们看的了教育培训作为其三角策略里的重要一环在红帽公司受到高度
重视,红帽中国区总经理陈实对红帽学院本身介绍道:“红帽学院是一个教育平台,它可以把很多新鲜
的开源知识带给学生,同时也可以最终解决学而致用的问题,因为现在很多从大学校园里出来的学生,
进入一个工作环境,并不能很快的上手去工作,开源的理念就可以很好的解决这个问题。它可以让很多
对开源有兴趣的人们都可以加入到开发团队中,有好的想法大家共同共享。红帽学院对于红帽企业本身
的一个中长期预期影响现在还是模糊的阶段,相信它将在不久的将来得到体现。”

与红帽一样,许多重量级开源企业目前都针对培训认证推广做出了一系列努力,这其中就有 Novell
将目 光放到了高校,最具有得天独厚条件的培训体系身上,加快在教育领域与高校的合作成为 Novell 培
训认证推广的重要举措,这其中包括两种模式,Novell 培训部经理尹姝梅在接受采访时介绍道:“其一
是针对广大 Linux 课程内容缺乏的院校进行 Linux 课程设置或置换合作,例如将其列入网络开发专业的
必修课 程;其二就是在院校放假期间由院校开设 Novell SUSE Linux 认证课程短训班。我们把合作学
校分为 211 学校和非 211 学校,其中与 211 学校现在已经和兰州大学、南开大学等 11 所高校成功合作,
我们把自身的一套课程教材全部免费,为教育领域和开源的发展实现双赢。”针对目前培训认证在开源
生态链中是否已提升到战略高度这一问题?尹姝梅表示:“培训一直都是开源生态链中的重要环节,开
源的意义在于,通过开源开发出来的产品都可以在更加开放和更广的范围内被大家所使用,因为毕竟开
源产品需要有一个基础的过程,不可能任何人通过自学能力都可以成为开源的精英,那么在这样的一种
情况下,培训就成为一个非常重要的途径,即通过培训来传播开源知识,培训也就成为了体现开源产品
价值最大化的推动力。”

“培训给予我们更多的意义在于希望以此来使更多用户用开源的东西,来用创新的力量,装备开源引
擎,这确实能给用户带来更多回报。”全球性组织 LPI 认证机构秉承的也是这样的理念,LPI 作为一个
非 盈利的机构,只参与设置认证考试标准的工作,独立于众多 Linux 产品供应商、培训提供机构和课件
发行机构。目前从 Linux 团体和业内专业人士所关注的程度来看,LPIC 认证得到了广泛的支持。这其中
的部分原因归功于 LPI 认证的设计完全采用了 Linux 操作系统和开放源代码软件的同样开发方式,
Linux 公司和团体中有许多人都为该认证提供了大量的支持和帮助。在这里,培训和开源主产品体现了
完美的 统一。

开源培训认证之路,也正是一条务实的发展之路,早从 2001 年起,中科红旗就与 IBM 联手在全国


范围内开展红旗 Linux 认证培训,旨在提升 Linux 合作伙伴技术素质,并为红旗 Linux 在全国范围内的
深入推广打下深厚的基础。借助自身本土化企业的优势,中科红旗开展了细致的认证培训工作,针对不
同层次的 Linux 用户,设立了从初级到高级的红旗 Linux 用户基础、红旗 Linux 系统管理、红旗 Linux
网络管理等课 程,以此相适应提供了涵盖基础技能、系统管理员、网络管理员的全方位资格认证。目前,


oss.linuxpk.com 2008 年第 10 期 36

开源社区
红旗 Linux 认证培训几乎覆盖全国所有的城市地区,推出配套的培训教材并出版相关的 Linux 书籍。认
证培训不仅是中科红旗 Linux 发展战略中的重要举措,对推动整个 Linux 产业在国内更大范围内的普及
与成长也有着 重要的作用。

前不久,北京中科红旗软件技术有限公司与华育国际教育集团在北京签定协议,双方将在培训市场上
紧密合作,联手拓展 Linux 职业教育市场。而在此之前,职业教育日受国家的重视,政府刚刚宣布将要
投资 140 亿打造职业教育的品牌。

通过双方的合作,华育教育目前遍及北京、天津、济南、青岛、沈阳、哈尔滨、南昌等城市的 10 个集团 所属校


区,将同时成为红旗认证中心,并开展相关红旗 Linux 技术的职业技术教育服务工作。而中科红旗也将给予华育
教育在教师力量的培训上和技术上给予最大的支持,将基于开源文化的创新技术知识和务实的商业应用技术,通
过品牌职业化的教育体系,系统化的加以推广普及,并将携手华育教育承担国家劳动部、职教中心等 Linux 职业
教育方面的工作。

开源认证 百家争鸣
http://www.ossplus.com/Linux
顾宏军
在过去的这几年里,以 Linux 为代表的开源运动得到了长足的发展,得到了 IBM、Oracle 等众多国际巨
头的垂青和推进。据了解,2005 年到 2009 年的五年时间里,中国 linux 软件市场将以年均 43%的复合
增长率高速增长,Linux 人才的需求也将超过 120 万。

与日益增长的人才需求相比,开源人才的供给却严重滞后,就 Linux 人才为例,目前过呢熟练的 Linux


开发人才严重不足,而且有很大一部分 Linux 技术人员都是自由软件爱好者,或者由 windows 开发人
员自学成才,并没有经过专业的培训。

开源运动的快速发展,产生的巨大的人才需求,和过慢的人才供给之间的矛盾,大大增加了部署开源
软件的人力成本。为解决这一矛盾,更好地促进开源软件的发展,很多组织和企业都先后开始提供开
源软件相关的培训。

Linux 培训
Linux 诞生于 1991 年 10 月,至今已有十多年历史。目前,全球主要的 Linux 发行商主要有 Red
Hat,Novell 两家,而国内则以红旗 Linux 为主。

国内提供 Linux 相关培训认证时间并不算长,1999 年第一个 Linux 认证--RED HAT 的 RHCE 进


入国内,中国技术人员接受标准化的 Linux 培训正式开始,紧接着,国内的红旗,中软也开始提供自己
的 Linux 认证。


oss.linuxpk.com 2008 年第 10 期 37

开源社区
虽然国内的 Linux 起步较晚,但是目前国内的 Linux 认证各有特点,让人看得有些眼花聊乱。下面就对
它们进行简单的介绍,希望通过介绍您能选择到最合适自己的 Linux 培训或认证。

LPI 认证

RHCE 认证

RCE 认证

嵌入式 Linux 培训

Php 培训

Mysql 培训

PostgreSQL 认证

Jboss 培训

LPI 认证
LPI(Linux Professional Institute)是一个中立的,非商业行为的机构,致力于提供了中立于厂商的
L inux 培训和认证。由于其独特的形式,LPI 逐渐发展为一个倍受公认和广泛认可的中立的 Linux 认证


oss.linuxpk.com 2008 年第 10 期 38

开源社区
考试体系。LPIC 认证体系分为三个层次,LPI 已经推出了 Linux Profession Institute Certified-
Level 1(简称为 LPIC-1)和 LPIC-2 认证,并即将在 07 年 1 月份推出 LPIC-3 认证。为了获得
LPIC-1 证书,你必 须通过两门各自长达 90 分钟的考试—--101 (LPI General Linux,Part1)和 102
(LPI General Linux ,Part 2)。LPI 的 LPIC—1 的应试对象主要是有至少 1 年 Linux 工作经验的系统
管理员。

LPI 考试形式是多选+单选+填空,考题非常注重经验,只要题目中提到的问题亲自动手做过了就一
定能答对,靠背书是不大可能通过的。目前,LPI 只提供一级和二级考试的培训课程,LPIC-3 认证预计将
在 20 07 年 1 月推出。LPIC 每门的考试费是 100 美元(国内经常在各种 Linux 相关展会期间有打折的
LPI 考试)。

作为一个国际社区组织,LPI 拥有许多分支机构:在美国、澳大利亚、巴西、欧洲、中国、日本、德
国、法国等国家和地区都设立了 LPI 的分支机构。LPI(中国)是大中华地区的 LPI 分支机构,负责中国
大陆、台湾和香港地区的 LPI 事务。LPI(中国)总部设立在北京。国内部分培训机构也开设了 LPI 相关
培训课程,LPI 授权培训中心可在 LPI 官方网站 http://www.lpi-china.org/查到。

RHCE 认证
RHCE 是 Red Hat Certified Engineer 的简称,始于 1999 年 3 月。截至 2001 年 1 月 17 日,
Red Hat 的统计资 料表明,RHCE 资格认证的通过率为 62.5%。RHCE 是市场上第一个面向 Linux 的
认证考试,它不是一个普通 的认证测试,和其他操作系统认证考试相比,RHCE 考试需要花费一整天的
时间,而且在测试中更加注重考察考生的实践经验。

RHCE 认证考试由三部分组成:第一部分要求考生在规定的 2.5 小时内完成 2?4 个系统的修复;第


二部分要求考生在规定的 1 小时内完成 50 道多项选择题;第三部分要求考生在 2.5 小时内对指定的系统
完成安装和配置工作。凡是参加 RHCE 考试的考生在考前都必须签署一个协议,保证在考试完毕之后,
不论成功还是 失败,都不许向其他人透露考题内容。这样不仅考题的保密程度得到保证,在一定程度上
也维护了考试的公平性。此外,确切的考试内容是在考试当天,从一个巨大的题库中随机抽出的,即使
考官本人,在下载考题之前都不知道考试的内容。考试注重学员的动手操作能力,颇有难度,也颇有权
威性。

RHCE 的培训费和考试费和 LPI 相比高很多。典型的费用和知名度成正比的证书,RHCE 认证的认可


度相当高,可算是 Linux 认证中含金量最高的了,花点银子也值得的。神州数码和上海文华电脑学校是
RedHat 的授权培训机构。

RCE 认证
RCE 认证是国内最早期的 Linux 厂商——红旗提供的 Linux 认证,其课程结构与 RHCE 的类似,不


oss.linuxpk.com 2008 年第 10 期 39

开源社区
过是基于红旗自己的 Linux 产品。目前,红旗 Linux 共提供红旗产品应用专家和红旗认证工程师两种认
证。

RCE 面向的是应用层次的培训,考试难度却相对容易,价格也适应中国的消费层次,RCE 三门课程


的培训费用仅在 4000 元左右,考试费用每门课只需 200 元。

作为中国人最早的 Linux 操作系统,红旗 Linux 是目前中国市场上份额最大的 Linux,有着广泛的


用户群和众多的培训机构。目前,红旗 Linux 已纳入劳动和社会保障部全国计算机信息高新技术考试和
培训中,在全国普及推广,这是国家首次把 Linux 作为职业技能培训标准。如果您使用红旗 Linux,并
且只是想接受入门级,基本使用这一层次的培训,推荐选择 RCE 认证。有需要的朋友可到
http://www.redflag -linux.com 了解详情。

嵌入式 Linux 培训
嵌入式 Linux 作为这两年兴起的一个 Linux 应用领域,发展迅猛,嵌入式领域进入门槛相对较高,
对技术人员要求高,同样对嵌入式培训机构的要求也更高,专业的提供嵌入式 Linux 培训的企业还很少。
北京的华清远见科技信息有限公司算是在这方面做得比较专业的一个。它们提供完整的嵌入式相关培训,
包括嵌入式 Linux 培训,也出版了部分嵌入式 Linux 开发相关书籍,有志进行嵌入式 Linux 开发的朋友
可以前往网站 http://www.farsight.com.cn/了解,也可在各地新华书店购买相关书籍。

Php 培训
LAMP 通过几年的迅速发展,目前已经在世界范围内走出草根阶层,成为 Web 服务的事实标准。由
于 Linu x、Apache 均免费,此外还有免费数据 MySQL 服务器和开源语言 PHP 共同构建了广受追捧的
“LAMP”套件 ,性价比极高,因此赢得网站开发人员的非常青睐。最近数据表明,快速崛起的 WEB2.0
网站半数以上采用了完全的 LAMP 平台。

拿目前流行度仅次于 Email 的互联网社区来说,国外最知名的三大 BBS 软件提供商 IPB、VBB、


PHPBB 等均基于 Linux 的 LAMP 平台。随着社区 BBS 及 Web2.0 应用的普及,以及国内 PHP 技术支持
者的不断增加,据 PHP China 资料统计在中国前 200 名的网站中有 61%的采用了 LAMP 技术,2006
年超过 41%的网站运行着 PHP,更 有 50%的 WEB2.0 网站系统平台采用 PHP 开发。目前,国内 PHP
人才非常紧缺,企业需求与人才的比例是 10: 1。一个 PHPer 平均薪水一般在 5000/月,而项目管理级
以上起薪 7500-18000 元/月。

国内部分机构已针对这一需求开设相应的 PHP 培训课程。PHPChina(PHP 语言开发公司 Zend


Technology 在大中华区的唯一授权官方网站,PHPChina 同时也是 Zend 中国技术支持中心的官方社区)
开设了 PHP 培 训课程,为社会培养合格的 PHP 程序员。目前,PHPChina 开办 PHP 课程数百小时,为
社会、企业培训 PHP 人才近 500 人。PHPChina 的课程包括 PCTI 课程(PHP China Training——


oss.linuxpk.com 2008 年第 10 期 40

开源社区
Improving,面向初级 PHPer),PCTP 课程(PHP China Training Professional,面向具有项目经验
的 PHPer)和 ZCE 课程(Zend Cert ification Engineer,Zend 认证工程师的认证课程)三种课程。
为了方便学员学习,PHPChina 目前在北 京、天津、深圳、广州等四地直接开设 PHP 培训中心。官方网
站 http://www.phpchina.com/

Mysql 培训
Mysql 作为 LAMP 软件栈中重要的一环,和 Linux,PHP 语言一样也有大量的培训需求。今年,北
京万里开 源软件有限公司全球 最大开源数据库厂商 MySQL 公司共同组建成立 MySQL 中国研发中心,
已开展专业的 MySQL 相关培训课程,包括 MySQL for Beginner, MySQL 5.0 for Database
Administrator 和 MySQL 5.0 for Developers 三种培训,相信由 MySQL 公司自家提供的 MySQL 培
训应该不会让大家失望。

PostgreSQL 认证
PostgreSQL 一种非常复杂的对象-关系型数据库管理系统,也是目前功能最强大,特性最丰富和最
复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备,它使用 BSD 授权,比 MySQL 更宽
松,这两 年 PostgreSQL 得到了包括富士通在内的大量商业公司支持。

日本一家公司提供了一个 PostgreSQL 资格认证体系 PostgreSQL CE,该体系服务于从事


PostgreSQL 开 发和管理的工程师、PostgreSQL 培训人员和顾问。 PostgreSQL CE 为具备相关资格
的人员提供了一个机会,帮助他们展示自己管理 PostgreSQL 数据库系统的能力。此外,PostgreSQL
CE 还为系统集成人员和信息系统部门提供了可靠的评估标准。如果您想了解关于 PostgreSQL CE 计划
的更多信息,请访问他们的网站。http://osb.sra.co.jp/postgresql-ce/news_en.html

Jboss 培训
Jboss 是一个同时运行 Web 及 EJB 的 J2EE 应用服务器。它是开放源代码的项目,遵循最新的 J2EE
规范。从 J boss 项目开始至今,它已经从一个 EJB 容器发展成为一个基于的 J2EE 的一个 web 操作系
统(operating s ystem for web),它体现了 J2EE 规范中最新的技术,并且它还在 the JavaWorld
Editors' Choice 200 2 评选中获得"最佳 Java 应用服务器"大奖。无论是学习还是应用,JBoss 为我们
提供了一个非常优秀的平 台。

目前,在 Redhat 公司 2006 年 6 月份完成对 JBOSS 的收购后,JBOSS 已经成为 RedHat 重量级的应


用服务器产品。Redhat 公司提供最新的,最精确的动手实验的 JBoss 课程。JBoss 系列课程的适用对
象为希望熟练管 理 JBoss 应用程序服务器实例的系统管理员,将重点介绍安装、部署和设置等问题及更


oss.linuxpk.com 2008 年第 10 期 41

开源社区
多知识。完成此课程后,学员将能够设置高可用性的集群 JBoss 部署。除此之外,Redhat 公司还提供
Tomcat 训练课程。

以上介绍了主要的 Linux,开源相关的培训和认证提供商。实际上,国内目前还有很多其它的开源相关培训提供
商,但多半是作坊式的,缺乏发展后劲,培训多以入门培训为主,缺乏专业的培训师,但它们 的存在也帮助宣
传和推广了开源软件,对做大整个开源产业很有益处。比如,浙江,云南等地成立的省 一级的 Linux 中心就对
Linux 在当地高校的普及起了至关重要的作用。另外,现在大多数开源培训机构只 注重对学员单一技能的培养训
练,这就造成技术视野狭小,恐无法胜任复杂企业应用环境对人才的要求。


oss.linuxpk.com 2008 年第 10 期 42

开源社区

创新源自开源文化
中科红旗
贺唯佳
回味上下五千年的中华文明与远古文化,中华子孙无不为之骄傲。而伴随着陆
海丝绸之路的延伸,人类文化在碰撞中交融发展,其中不乏众多源于中华文明的技
术被加以创新发挥,成为人类物质文明生活中的骄傲。任何先进的技术与知识,只
有在不断的交流与创新中,去造福于人类与社会,才会发扬光大。 单纯的固步自
封与崇洋迷外,带来的只是抱怨与自卑。

在科技飞速发展的今天,计算机技术的发展可谓举足轻重。在得意于祖先发明
的算盘等众多神兵利器之 余,是否也要反思今天与明天我们是否也可有更多发明与创新技术服务于社会。
在贪婪于关键技术掌握在他人手中的鲜美鱼肴时,是否也该探求与发扬猎渔之技了那。

回首国内近二十年的计算机技术的应用与相关职业技术教育的发展,在恰逢视窗技术与微机技术的天
缘佳配时,使其得以在大众化应用中普及发展,而在尽情享受快速发展的商业技术之余,不注重知识产
权合理应用,造成广泛“使用软件方式不当行为”的泛滥,也自然迷茫了院校人才培养教育中的技术与
知识导向发展问题,更多的计算机相关技能与知识的职业教育都集中在了面向某些特定商业技术的美味
品尝上。而各职能部门推出的好似适应国情的众多各自领域认证评测项目,也都一时难于摆脱针对少数
特定商业技术产品的知识与技术的制约,无形中我们的人才职业教育与认证评测也都趋近于特定商业产
品用户的应用培养,相关知识、技术的教育也都只能依附于特定产品的垄断发展,难于普及培养锻炼出
具备广博知识和技术创新的人才。在国家号召职业教育要注重知识创新型人才培养的今天,面对院校艰
辛耕耘培养出的大量学子奔波于先就业、在择业的循环,而现实社会中广泛需求的务实与创新型人才难
求的现象,在职业教育领域就必然要探讨融入多种技术理念,感受百花齐放,探寻创新型人才培养的现
实发展知识布局。

开源文化是相对众多商业技术文化领域较为另类的文化和技术,他首先推崇知识的开放与自由,借助
于广泛的参与和交流来发展创新技术服务社会。但同样在现实社会中,他也要面对社会现实商业需求的
现实,有机的务实结合各类文化与商业的现实发展需要,才可更加有效的服务社会。

目前,在计算机技术应用领域中,代表性的开源应用技术为基于 Linux 操作系统平台的众多开源文化


技术,社会对此的争论和疑惑也是褒贬不一。这其中有很多文化与理念的碰撞,而开源文化的发展就是
在各类文化的交融中,不断发展完善。在充分感受知名商业技术产品在现实社会中的务实与易用性之余,
社会也在其完善的商业服务中享受着快乐。但同时,也必然要面对商业核心技术的封闭与垄断,这也是
商业社会的必然生存发展现实。


oss.linuxpk.com 2008 年第 10 期 43

开源社区
纵观开源文化技术的发展,这一领域中汇集了众多业界有思想的技术精英,他们没有地域与种族之分,
相互间从各自不同的文化理念和畅想中吸收灵感、交流思想与技术。同时也有机的结合商业技术的发展 ,
服务于现实社会。因此,在职业技术教育中,剖析基于开源文化的技术,则较易于深化掌握多种文化的
精深技术。在开源文化技术的探研中,要理解其“表现技术”与“隐性技术”的不同,在职业教育中,
不应只是针对表面技术的体验上,还应该更加注重隐性技术的思想与技术实现上,其中的精华蕴含在系
统的优化、整合与工程化等隐含在公开的源代码技术之内的技术思想实现中。或许对开源技术发展的一
些片面认识,会导致一些思想的误区,一是怀疑基于开源技术产品的应用技术价值,二是难于感受开源
技术在商业社会应用中有效的技术服务。因此说,在开源文化技术的发展中,能否有效的提供原始发布
技术厂商本地化技术服务,则也是开源技术服务厂商发展生存的关键所在,这就是软件无价,服务有价
的思想。其中软件无价是指无需一定要用通常商业社会的产品价格观来衡量开源软件技术产品的价值,
而更应该通过有效、广泛、务实的技术服务来体现其价值。这也是在职业教育领域中,通过开源文化技
术的学习,还需要重点在潜意识中加强体现的团队合作与服务创新的开源思想。

在浩瀚技术空间中的畅游,校企间的有机结合,则又是一个必然的现实。在开源文化的知识创新技术
发展中,一方面有来自于大千世界的集体开发与合作开发的通俗与核心技术,而另一方面,针对不同地
区人文文化与商业服务的特殊需求,还必须要大批有能力提供具有自主知识产权的“自主开发”、“自
主创新”技术的人才。以往主要在众多的开源社区中孕育的广博技术,在通过产品发布商面向商业社会
的不同特定需求,通过有机的优化整合,工程化的打造出可供商业应用的技术产品和完善的技术服务来
提升用户的应用价值。而随着校企结合的务实发展,在院校的职业技术教育中,可直接有效的通过企业
需求的窗口,了解现实技术的发展与需求,并通过院校的有效资源,更加快捷的引导学员分析感受现实
核心技术,并可通过开源文化的意识导向,加强学员的知识创新欲望、知识产权保护意识以及良好的团
队合作与服务理念。同时,企业也可通过分布在各技术园区的实训基地和院校实验室,将不同层次的项
目模块开发,推到实际教学研习环节中,从而摆脱以往只是做作业式的机械迟后的学习模式。对于那些
具备开源文化技术开发服务灵感的学员,则可直接定向融入到这一技术领域。而作为另类的文化与技术
背景知识,相信走出校门的学员均可在不同服务领域获益。

这是一条具有挑战自我的道路,不管是强悍的雄狮还是迅捷的羚羊,在浩瀚的大草原上,只有更快速
的奔跑,才不会被淘汰。


oss.linuxpk.com 2008 年第 10 期 44

开源社区

关于开源许可证 GPL 的探讨


张平
在开源领域,有着众多的许可证,包括 GPL、LGPL、
MPL 和 BSD 等,然而使用最广泛,最纯正的就是 GPL 许
可证,众多的优秀的开源项目使用 GPL 许可证,更突出
GPL 在开源领域的重要地位。

GPL 许可证是 General Public License 的缩写。GPL 许可


证是自由软件联盟 GNU 的开源软件许可证的一种,是开
源软件领域最富盛名的一种许可证,但同时,GPL 许可证
也是开源软件领域对被许可人权利限制最严的。

GNU 自由软件之父 Richard Stallman 在倡导自由软件联盟


计划时,从软件的版权许可协议入手,创设了 一种与其
开源软件发展相适应的“通用公共许可协议”( General
Public License,GPL),凡想加入 GN U 的软件著作人都
要接受这份许可协议,其宗旨就是保证用户有无限复制和
修改的权利。并且在 GPL 的导言部分中,对自由软件和 GNU 项目创始人 Richard Stallman
知识产权的相关问题进行了论述。

GPL“自由”的法律含义
前面已经提过,开源软件这一定义的来源是从技术角度,而自由软件这一定义本身就是版权意义上的
范畴自由软件的“自由”体现为通过版权许可给予的自由,而不是自由的没有知识产权。也就是说,自
由软件不是没有版权,它首先是承认软件的版权--软件有原始的版权所有者,然后纳入自由软件的版权
许可约束,使每个人在维持该许可的条款不变的情况下,都有权复制,修改和发布软件或其衍生的工作 ,
这就是所谓的自由软件的自由理念。

GPL 与自由软件的版权许可
对于普通的商业软件,软件开发商与使用者之间一般都会设立软件使用许可协议,即“一般商业许可
”(General Business License,GBL).这种许可协议一般由开发商单方拟订,用户接受协议是使用软
件的 前提,而获得许可的前提是支付费用购买软件产品.其许可条款一般按照版权法或专门的软件保护条
例 ,或者通过双方合意达成略高于版权法和软件保护条例保护标准的软件许可使用条款。


oss.linuxpk.com 2008 年第 10 期 45

开源社区
面对于这种显然不适合自由软件的 GBL,Richard 在倡导自由软件联盟计划时,从软件的版权许可
协议入手,创设了一种与自由软件发展相适应的 GPL 许可证,凡想加入 GNU 的软件著作人都要接受这
份许可协议 ,其宗旨就是保证用户有无限复制和修改的权利。更有趣的是,相对于“著作权
”(“Copyright”)这 一名词,Richard 新造了一个词,将这种许可协议叫做“Copyleft”。

当然,GPL 许可证既然是一种软件知识产权的保护方式,它并不排斥软件开发者从软件中获取利益,
只是盈利的方式有所改变:从过去依赖软件的销售,转向主要提供软件及信息服务。而且,现有商业软
件嫁接到 GNU/Linux 等自由软件上时,也不一定非要公布源代码和提供免费,这意味着,自由软件可以
与商业软件共存。

GPL 与软件专利
一人或一个单位将一项软件技术申请为专利,他人即使是独立思考和完成的软件,只要涵盖专利的必
要技术特征,就不得使用,否则构成侵犯专利权。软件公司所开发的软件,在不知不觉中就成了侵犯专
利权的牺牲品。鉴于此,。许多软件组织已发出了反对软件专利的呼声。

GNU 的自由软件受到专利的威胁来自两个方面:一是不受 GPL 约束的第三人拥有某项软件专利,而


自由软件的原始开发者或后续修改者在程序或其衍生作品上同样使用了这项技术;二是自由软件的再发
布者以个人名义将自由软件中的某项技术获得专利,事实上将自由软件变为私有。对于后一个专利问题,
GPL 有权力约束专利申请人,GPL 明确地规定:要么申请到专利后允许任何人自由使用(这等于没有专
利),要么不准许有专利。对于第一个专利问题,GPL 许可证是无权约束专利权人的,而且如果在该专利
有效 区域内发布该自由软件,可能会导致专利侵权责任。对于这个情况,GPL 许可证做出了无奈的规定:
在 G Pl 的导言部分中,还专门有一项关于自由软件可否申请软件专利的条款:“鉴于任何自由软件时刻处
于软件专利的威胁之下,我们希望能避免这种情况:自由软件的再传播者在实施过程中使得这项软件程序
获得专利独占权,正是基于此目的,我们明确地要求承诺任何自由软件可以去获得专利授权的前提是一
旦获得软件专利授权必须向所有的人以符合自由软件使用条件的标准许可使用该专利,否则就不可去申
请软件专利。”GPL 也考虑到了更为严酷的情况:在某些国家由于专利问题,自由软件的发布和使用受
到限制。这种情况下,原始版权人可以增加限制发布地区的条款,将这些国家明确排除在外。针对开源
软件本身,从这里可以看出 GPL 多少是排斥软件专利的。


oss.linuxpk.com 2008 年第 10 期 46

知识学堂

Linux 下设备完全驱动(五)
郄晓烨
在 Linux 中安装打印机和扫描仪是件不难的事情,但是需要掌握一部分关键命令。打印机和扫描仪的驱
动程序通常运行在用户空间,而不是内核空间。目前,Linux 可以支持快速并口(EPP)、USB 接口的
打印机和扫描仪。USB 接口打印机和扫描仪由于安装方便、传输速度快,所以已经成为主流配置。

Linux 下打印驱动概述
Linux 打印和 Windows 系统不同,从 20 世纪 90 年代中期开始,已经从传统的 BSD LPD 打印系统
转移到更新 的 LPRng 打印系统。目前 Linux 打印正在向完全重新设计的 CUPS 打印系统转移。Linux
打印模型是面向网 络的,因此共享打印机是相对简单的。

在 Unix 中,一直使用 PostScript 页面描述语言进行打印,所以 Linux 和 Linux 应用程序都直接支


持 PostSc ript 打印。使用 PostScript 页面描述语言进行打印的优点是,极大地简化了设计,不用像
Windows 系统 一样要安装各种打印机驱动程序。但是,它的缺点是许多打印机(特别是低端打印机)
不能解析 PostScript 输出。Linux 系统对此的解决方法是,从打印机队列调用
Ghostscript(http://www.ghostscript.com)软件包支持打印机。

Ghostscript 实际运行在 Linux 系统上,而不是打印机上的 PostScript 页面描述语言的解释程序。


它可以处理输入的数据,并且输出为其它打印机可以理解的格式。Linux 打印系统的基础是一个假脱机程
序(Sp ooler),它可以管理打印任务队列,而一个队列通常和一个打印机相关联,并且用户提交的任务
都是按照先进先出的原则来处理的。当一个打印任务被处理时,任务中的数据在送达打印机前一般都要
通过一定数量的过滤器。

要查看 Ghostscript 在使用的 Linux 发行版本上支持什么打印机列表,可以在命令行下键入下面命


令:

$gs --help

gs 命令会列出一份它支持的打印机和输出设备的名单,它可使用-r 选项设置打印分辨率。假如 gs 的
输出不能让人满意, 还有一些其它办法可以调整输出的位置及大小。位置、 大小及图像在页面上的视觉
比例是由 Ghostscript 中的打印机驱动程序所控制的。

Linux 支持许多种类的打印机,从老式的针式打印机,到最新的激光打印机都可以使用。表 1 列出了


几个主流 Linux 发行版本使用的打印系统,它们分别是 BSDLPD、LPRng 和 CUPS 三个打印系统。

第一代的 BSD LPD 打印系统源自于伯克利的 Unix 发行版,它是用于 Linux 发行版(比如


oss.linuxpk.com
源 2008 年第 10 期 47
知识学堂
Slackware)的第一个打印系统。现在仍然有发行版(Debian 和 Slackware)还会带有这种假脱机打印程
序。BSD 打印系统核心的功能仅限于队列任务,由一个后台程序(lpd)及一些位于/etc 目录下的配置文
件组成,在这些配置文件中有着队列和属性的一些定义。在相应的目录下,还有一系列基本的、用于提
交、删除和处理任务使用的命令(lpd、lprm 和 lpc)。

BSD 打印系统的一个缺陷是,不能向应用程序反馈打印机的一些特殊功能。例如,用户如果使用宽
行打印机,BSD 打印系统就不能将信息告诉应用程序,用户需要为高级功能进行特殊配置。这显然是比
较繁 琐的。例如,它还缺乏在网络上进行最大传播打印列表的功能,每个用户必须单独配置才能使用打
印服务器。

BSD LPD 适合小型网络上的单台打印作业,它包括四个基本命令:行打印请求(lpr)、行打印查询


(lpq)、行打印删除(lprm)和行打印控制(lpc)。

第二个使用较广、较有影响力的基于 BSD 的打印系统是 LPRng(LPR Next Generation)。该系统


实际上重写了原来的 BSD LPR 系统,但原有概念都保留了下来。它保留了 printcap 文件的格式,还引
入了一些新的属性以使配置过程更加灵活。过滤器定义可以被独立出来,并且还可以定义真正的 I/O 过
滤器。用户也可以通过在本地机主目录下编写/etc/printcap 文件来定义自己的队列。

LPRng 打印系统不需数据库环境就可以执行 lpr lpc lprm 命令;打印队列可以自动转向;打印工作


可以自动保留;多重打印机可以使用同一打印队列;客户端不需要 SUID root;可以大幅度提高安全性
检查;可以使用 printconf 工具维护配置文件(/etc/printcap)。

第三个通用 Unix 打印系统 CUPS 是比较新的打印系统。CUPS 软件为 Unix/Linux 用户提供了以有


效而可靠的方式来管理打印的方法,支持 IPP(互联网打印协议)。IPP 协议的四个主要目的是帮助用户
寻找网络上可用的打印机; 传送打印作业;传送打印机状态信息;取消打印作业。CUPS 有 LPD、
SMB(服务器消息块,例如与 MS Windows 连接的打印机)和 JetDirect 接口。CUPS 采用的另外一个
标准是 PPD(PostScriptPrinter Definition)文件格式,这是 Adobe 另外一个用于 PostScript 打印机的
标准。

从以上可以看出,CUPS 打印系统是目前 Linux 打印系统中理想的选择,从 Red Hat Linux 9.0 开


始它取代了 LPRng 成为 Linux 缺省安装的打印系统。CUPS 是跨桌面的,也就是说可以在 GNOME 或
KDE 下安装打印机工作。CUPS 采用 IPP 以加强网络打印功能;自动检测网络打印机;可以设置 Web 界
面;支持 PPD 打印机文件;支持大多数打印机。CUPS 主要功能见表 2 所示。

打印设备驱动的安装
下面以 Red Hat Linux 9.0 为例,讲解如何为 Linux 系统配置打印系统。


oss.linuxpk.com
源 2008 年第 10 期 48
知识学堂
1. 运行 CUPS 打印系统
如果系统是从以前使用 LPRng 的 Red Hat Linux 中升级而来,升级过程不会使用 CUPS 来替代
LPRng,系统仍会继续使用 LPRng。要使用 CUPS 首先需要停止原来的打印守护进程,启动
CUPS 服务共分成下面三个步骤:

2. 停止原来的打印守护进程:
# chkconfig -level 2345 lpd off

3. 启动 CUPS 守护进程:
# chkconfig -level 2345 cups on

4. 切换打印系统,运行下面命令:
# redhat-switch-printer

切换界面见图 1 所示。

图1

如果需要恢复使用 LPRng 打印系统,以上过程是可逆的。


oss.linuxpk.com
源 2008 年第 10 期 49
知识学堂
管理 CUPS 打印系统
管理 CUPS 打印系统可以有两种方法:一种是编辑/etc/cups/cups.conf(CUPS 打印机守护进程配
置文件);另一种是使用 Web 管理界面。cups.conf 配置文件和 Apache 的/etc/httpd.conf 相似。一
个典型的 cups.conf 配置文件内容如下:

<Location /printers/Office-Canon s400> #打印机型号


Order Deny,Allow
Deny From All
Allow From 127.0.0.1
AuthType None
</Location>
<Location />
Order Deny,Allow
Deny From All

Allow From 127.0.0.1 #允许从本地配置


</Location>
Browsing On

BrowsingAddress 192.168.1.0/24 #允许浏览打印机 Web 界面的网络


BrowseProtocols cups
BrowseOrder Deny,Allow
BrowseAllow from @LOCAL

Listen 127.0.0.1:631 #打印机 Web 管理监听端口

除了主配置文件 cups.conf 外,目录下还有 classes.conf - CUPS 类别配置文件,它负责指向不同


的打印组。client.conf -客户端配置文件指向默认 CUPS 服务器,可以指定加密要求。mine.cons-列
出不同文件格式的过滤器,如图像和文本。mine.types-列出 CUPS 打印机可以处理的文件类型。
print.conf-CUPS Web 工具改变的配置文件的细节写入这个文件。pstoraster.cons -包含
Ghostscript 文件的过滤 器,GUN 通过这种方法处理 PostScript 打印机。如果感到命令行文件比较复杂,
可以使用 Web 管理 CUPS 打印系统。

 使用命令检查 RPM 包安装是否完整:

#rpm -qa |grep cups;rpm -qa|grep foo

cups-libs-1.1.17-13 #CUPS 高级访问命令集

cups-devel-1.1.17-13 #CUPS 开发库


oss.linuxpk.com
源 2008 年第 10 期 50
知识学堂
cups-1.1.17-13 #CUPS 主程序,包括基本命令和默认配置文件

foomatic-2.0.2-15 #独立于假脱机打印的数据库,支持 redhat-config-printer 命令

Omni-foomatic-0.7.2-4 #Omni 打印机数据库

 通过浏览器管理 CUPS
CUPS 可以通过网页浏览器从打印服务器的 631 端口访问 http://localhost:631/。631 端口是 IPP
协议的通信信道,可以从远程计算机的 Web 浏览器运行 CUPS 配置程序,但是要确保防火墙没有阻断
631 端口的通信,见图 2 所示。

图2


oss.linuxpk.com
源 2008 年第 10 期 51
知识学堂
 CUPS 打印系统配置功能简介

 增加一个打印机
在图 2 所示的页面中有多个选项,点击第一个选项“Do Administration Tasks”(管理任务选项),
这时程序会提示登录,用户名必须以 root 身份登录,并且输入超级用户密码。若要增加一个打印机,单
击“Add Printer”按钮,出现的页面会提示用户填写打印机的名字(Name)、连接打印机的主机名
(Loaction)和对打印机的简短描述(Description)。

填写完以上信息后,单击“Continue”键。随后会询问打印机当前使用什么类型的设备。惟一的选项
是“Disk File”,所以用户只要选择“Continue”就可以了。接着用户要提供设备的 URI,具体如下:

file:/path/to/filename.prn 可以将打印内容打印到硬盘的文件中。

http://hostname:631/ipp/port1 将打印内容直接打印到 CUPS 的端口。

ipp://hostname/ipp/port1 通过 IPP 打印协议将打印内容直接打印到某个端口。

ipd://hostname/queue 通过 IPP 打印协议将打印内容放入到打印队列中去。

当上面的信息全部填写完成后,系统会发送一条打印机已经正确加入的消息。在打印机正确加入后,
点击“Administration”管理打印机。


oss.linuxpk.com
源 2008 年第 10 期 52
知识学堂

图3

图 3 提供的操作包括测试打印机、启动打印机及其打印任务管理。它同时显示打印任务及打印机型号
和状态。注意,Modify Printer 和 Configure Printer 功能是不同的。Modify Printer 设置的内容是打
印机类型及设备位置等,而 Configure Printer 设置的内容包括打印精度、纸张大小等。

.查询打印机驱动程序
一般来说,普通打印机附带的光盘中没有 Linux 的驱动,如果不知道该打印机是否可以在 Linux 下
使用,则可以到 http://www.linuxprinting.org/站点,单击网页右列的 Printer Listings,进入查询界
面后输入打印机厂商和型号后,即可进行查询。通常会得到下面四个查询结果:

• perfectly 完全支持 Linux 下打印,并且可以使用打印机所有功能和打印分辨率。

• mostly 大部分功能支持 Linux 下打印,有一些小缺陷)。


oss.linuxpk.com
源 2008 年第 10 期 53
知识学堂
• partially 只有一部分功能支持 Linux 下打印,许多功能不能实现,例如彩色打印机只能打印黑
白图像。

• paperweight 完全不支持 Linux 下打印。

笔者使用的 Cannon 的 S400 打印机查询结果如图 4 所示。

图4

图 4 表明,mostly 经过测试,打印图像时 Cannon S400 打印机不能达到最大分辨率


1440×720dpi,只能实现 720×720dpi 最大分辨率打印。实际上,这样的打印分辨率已经足够使用了。

使用 Red Hat 的配置管理工具


Red Hat Linux 9.0 自带的配置管理工具既能够配置 CUPS,也能够配置 LPRng 打印系统。根据系
统配置而定,它会配置活跃的打印系统。要使用打印机配置工具,必须具备根特权。要启动这个应用程
序,选择“主选单”→“系统设置”→“打印”,或者键入“redhat-config-printer”命令。该命令会
根据它所执行的环境是图形化 X 窗口系统,还是基于文本的控制台来自动判定,它应该以图形化还是文
本形式来运行程序。图 5 所示使用系统配置工具添加本地打印机。


oss.linuxpk.com
源 2008 年第 10 期 54
知识学堂

图5

如果没有安装图形界面,可以在命令行下添加打印机:

#redhat-config-printer-tui --Xadd-local options

主要选项如下:

--device=node 要使用的设备节点,例如/dev/lp0。

--make=make IEEE 1284 MANUFACTURER 字符串或 foomatic 数据库中的打印机生产厂商的名称(若无


manufacturer 字符串)。

--model=model IEEE 1284 MODEL 字符串或 foomatic 数据库中列出的打印机型号(若无 model 字符串)。

配置网络打印机
如果本地打印机不能被 Linux 支持或打印效果较差,可以使用网络打印机。Red Hat Linux 9.0 一
共可以配置六种类型的打印队列,见图 6 所示。


oss.linuxpk.com
源 2008 年第 10 期 55
知识学堂

图6

• 本地连接 直接通过并行、SCSI 或 USB 端口连接到计算机上的打印机。

• 联网的 CUPS(IPP) 连接到能够通过 TCP/IP 网络、使用互联网打印协议进入的打印机,又称


IPP。例如,连接到网络上另一个运行 CUPS 的 Red Hat Linux 系统的打印机。需要输入打印机
所连接的远程机器的主机名或 IP 地址和到远程机器上的打印队列的路径。

• 联网的 Unix(LPD) 连接到能够通过 TCP/IP 网络进入的其它 Unix 系统上的打印机。例如,连接


到网络上另一个运行 LPD 的 Red Hat Linux 系统的打印机。需要添加打印机所连接的远程机器
的主机名或 IP 地址和远程打印机队列。默认的打印机队列通常是 lp。

• 联网的 Windows (SMB) 连接到通过 SMB 网络共享的其它系统上的打印机。需要添加共享打印


机的 Samba 工作组的名称和共享打印机服务器的名称。共享打印机的名称必须和远程
Windows 机器上定义的 Samba 打印机的名称相同。在“用户名”字段中指定用户的口令,以
及要访问打印机所必须登录使用的用户名称。此外,用户在 Windows 系统上必须存在,并且有
访问打印机的权限。默认的用户名典型为 guest(Windows 服务器)或 nobody(Samba 服务
器)。

• 联网的 Novell(NCP) 连接到使用 Novell NetWare 网络技术的其它系统上的打印机。需要添加


打印机所连接的 NCP 系统的主机名或 IP 地址、NCP 系统上打印机的远程队列、使用打印机所必
须登录的用户名及为以上用户字段指定的口令。

• 联网的 JetDirect 通过 HP JetDirect 直接连接到网络打印机。添加 JetDirect 打印机的主机名


或 IP 地址和 监听打印作业的端口,默认端口为 9100。


oss.linuxpk.com
源 2008 年第 10 期 56
知识学堂
Linux 打印模型是面向网络的,因此共享打印机是相对简单的。

扫描仪驱动的安装
扫描仪是众多外设之一,在 Linux 下它的配置比打印机要简单一些,主要是 SANE(Scanner
Access Now Easy)软件包对它有比较好的支持。

扫描仪驱动概述
通常只需要对配置文件进行简单修改,就可以在 Linux 下使用扫描仪。如果不知道在 Linux 下如何
使用扫描仪,那么 SANE 站点可以告诉该怎么办。该站点不仅有最流行的 Linux 扫描仪软件,而且还以
兼容硬件的数据库而颇具特色。连线到 http://www.sane-project.org/sane-supported-
devices.html,即可进行查询。

在该站点通常会得到六个查询结果:

• complete 完全支持 Linux 下使用扫描仪,并且可以使用扫描仪的所有功能和分辨率。

• good 大部分功能支持 Linux 下使用,但是可能有一些小缺陷。

• basic 基本上支持 Linux 下使用,但是许多功能不能实现。

• minimal 最小程度支持 Linux 下使用,但是工作质量不好。

• untested 没有经过 Linux 环境测试,也许可以使用。

• unsupported 不能在 Linux 下使用。

Linux 对 SANE 的支持包括对底层接口设备的支持(SCSI 和 USB 等)及对一个具体型号的支持两


个方面。SANE 是一个应用程序接口,它包含三个部分,使用命令可以查询:

rpm -qa|grep sane

sane-frontends-1.0.9-2 #实现 API 的库(中间件)

sane-backends-1.0.9-5 #访问扫描以的驱动程序(后端程序)
xsane-gimp-0.89-3
sane-backends-devel-1.0.9-5

xsane-0.89-3 #调用 API 的程序(前端程序)

SANE 将前端与后台程序独立,后台程序为扫描仪提供驱动,前端程序是用户使用的接口。如果系统
中没有这些软件,可以在 http://www.mostang.com/sane 下载后安装。SANE 的配置文件
是/etc/sane.d/dll.conf 和/etc/sane.d/目录下的其它文件。


oss.linuxpk.com
源 2008 年第 10 期 57
知识学堂
/etc/sane.d/dll.conf 本身包含许多后端程序列表,通常以扫描仪制造商命名。SANE 调用时会搜索
这个列表。除了/etc/sane.d/dll.conf 之外,/etc/sane.d/还包含一些扫描仪其它特定的配置文件,这
些文件后缀是.conf。

设备检测
通常有 sane-find-scanner 和 scanimage 两个命令可以查询扫描仪的情况。Sane-find-scanner
用来搜索本地扫描仪的接口:

$ sane-find-scanner

# No SCSI scanners found. If you expected something different, make sure that

# you have loaded a SCSI driver for your SCSI adapter.


found USB scanner (vendor=0x04a5, product=0x2060) at /dev/usb/scanner0
found USB scanner (vendor=0x04a5 [Color], product=0x2060 [ FlatbedScanner 13]) at
libusb:0
02:002

# A USB device was detected. This program can't be sure if it's really

# a scanner. If it is your scanner, it may or may not be supported by

# SANE. Try scanimage -L and read the backend's manpage.

# Scanners connected to the parallel port or other proprietary ports can't be

# detected by this program.

设备文件之间符合链接或重复的设备文件,有时会让扫描仪出现两次。如果命令没有发现扫描仪请确
定它和计算机之间的物理连接情况。

使用 scanimage 命令加参数-L,可以用来确定扫描仪的具体型号:

# scanimage -L
device `snapscan:/dev/usb/scanner0' is a Acer FlatbedScanner13

正确检测到扫描仪的型号之后,就可以调用 Linux 下的扫描程序进行工作了。

使用图形化应用程序进行扫描
scanimage 是一个命令行下的扫描命令,其常用格式如下:

scanimage -d device >filename.pnm

其中 device 是设备名称,例如/dev/usb/scanner0,文件格式是.pnm。


oss.linuxpk.com
源 2008 年第 10 期 58
知识学堂
# scanimage -d /dev/usb/scanner0 --mode color > 1.pnm

这样一张名字是 1.pnm 的图片就扫描好了。

通常我们喜欢使用基于图形化应用程序进行扫描,Red Hat Linux 9.0 桌面环境下的应用程序主要


包括:xscanimage (基于 x 的图形化扫描程序)、Kooka(KDE 环境下图形扫描程序还可以进行
OCR 文字识别)、Xsane(XSane 是基于 GTK 的 SANE 处理软件,能够把 SANE 扫描的图像进行处理,
同时它还可以作为 GIM P 的插件使用)和 Vuescan(安装使用简单的扫描仪软件,不需要驱动程序,但
使用前要确认是否支持扫描仪,它支持 330 种型号主流扫描仪)。下面以 Kooka 为例看一看工作过程。

(1)在 Red Hat Linux 9.0 中,从主选单“开始选单→图形→更多的图形程序→扫描和文字识别程


序”便可运行 Kooka。

(2)Kooka 运行后首先检测硬件,如果它支持扫描仪,就会弹出一个具有检测信息的确认窗口确定
后,就可以看到 Kooka 的主界面。

(3)选择扫描仪扫描尺寸、扫描图形是否旋转,是否进行扫描锐化、压缩处理及去网纹等选项。

(4)将扫描的图像放入扫描仪中,单击“预览扫描”按钮进行预扫,在预览窗口中可以清楚地看到
该图片的扫描效果和详细信息。

(5)通过主界面选择合适的扫描模式和图像分辨率,然后再进行图像预览找到最合适的扫描效果。

(6)预览图片后光标就会变为十字形,然后使用该光标框出预览图片中要扫描的部分,确认后单击
“Final Scan”按钮,就可以进行扫描。

(7)扫描完成之后,Kooka 就会弹出一个“保存助手”,在其中选择一种合适的图形文件格式,如
常用的 JPG、BMP、GIF、PNG 和 PBM 等,选定后即可保存,结果见图 7。


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

图7

从图像到文本(OCR)
扫描仪是一种图像设备,它输出的是一种图像流格式。除了图像处理外,进行文字识别是扫描仪另一
个重要应用。OCR 通称为文字识别,它是 Optical Character Recognition(光学字符识别)的缩写。
它的工作原理为通过扫描仪(或数码相机)等光学输入设备获取纸张上的文字图片信息,利用各种模式
识别算法分析文字形态特征,判断出文字的标准编码,并按通用格式存储为计算机的文本文件。

Linux 下的 OCR 软件主要包括:

• GOCR(http://jocr.sourceforge.net/ )扫描仪的光学识别软件,没有图形界面是命令行下的工
具。但是它可以被 Kooka 和 Xsane 等软件调用。

• Clara OCR(http://www.claraocr.org/ )是一个大型图像处理软件,可以实现大量出版物到互联


• 文件的转换。但是这个软件没有扫描仪接口,可以使用它识别保存为文件后的图像文件。


oss.linuxpk.com
源 2008 年第 10 期 60
知识学堂
• OCR Shop(http://www.vividata.com/index.html )Linux 下的商业版本的 OCR 识别软件,效果
和速度比 GOCR 和 Clara OCR 好,但是价格较高(从 1500 美元到 50000 美元),不过有 30 天试用版
本的软件可以下载。

更多软件可以查看 http://www.linux-ocr.ekitap.gen.tr/en/网页。

由于中文 OCR 的研制工作从 1986 年开始,所以目前还没有 Linux 下的中文 OCR 软件可以使用。


在以前的 Linux 版本 OCR 软件中,只能对黑白效果的图像进行识别,这对于一些带有灰色底图(水印)
的文稿来讲,扫描后的识别率将会变得很低。现在,新版的 OCR 软件都支持灰度,甚至彩色识别。因此,
如果碰上此类的文稿,可以在扫描时选择图像类型为 Gray(灰度),可以大大提高识别的成功率。对于
文本识别来说,恰当的图像修正能够大大提高图像中文本的清晰程度,从而提高最终的文本识别率。

使用 Xsane 进行网络扫描
(1)首先在服务器上配置好扫描仪驱动,使它可以在服务器上正常工作。

(2)检查客户端是否安装了 saned,通常是安装 Xsane 等应用软件。

(3)在/etc/service 文件中加入一行添加 sane 端口号:

sane 6554/tcp #sane network svanner assess

(4)为 sanned 创建一个超级访问程序/etc/xine.d/saned

service sane
{

disable = no

socket_type = stream

protocol = tcp

wait = no
user =saned
group = sanned
server = /usr/sbin/saned
}

(5)向超级服务程序传递 SIGHUP 信号。

(6)确保加载 Saned 时超级服务程序使用的用户和组存在,并且可以访问扫描仪。

(7)在/etc/saned/sane.conf 文件中添加能够服务扫描仪的客户端主机名称。


oss.linuxpk.com
源 2008 年第 10 期 61
知识学堂
(8)在客户端的/etc/saned/dll.conf 文件中加入 net 选项,告诉客户端 sane 库搜索网络扫描仪。

(9)编辑客户端的/etc/sane.d/net.conf,添加 sane 服务器的主机名称。

(10)使用命令“lsof -i tcp|grep LISTEN”查看 6554 端口是否打开。

(11)在客户端使用 scanimage -L 命令查询网络扫描仪:

# scanimage -L
device 'net:cap.com:/dev/usb/scanner0' is a Acer FlatbedScanner13

此时 sane-find-scanner 命令已经不能使用,而 scanimage -L 命令检测到扫描仪前边已经多了两


个选项:标识符以'net 开始,在关键字之后是服务程序所在的主机名称。这表明客户端 Linux 计算机已
经检测到扫描仪,可以在客户端使用 Xsane 程序进行扫描。

(12)使用网络扫描仪要正确认识分辨率和色彩精度两个重要参数。扫描仪的性能指标主要有反映扫
描仪精度的分辨率、扫描图像彩色范围的色彩数(色彩精度)、灰度级、扫描速度和扫描幅面等。其中分
辨率 和色彩精度最为重要。网络扫描时,扫描仪精度、分辨率、扫描图像彩色范围的色彩数(色彩精度)
过高,会降低扫描速度和占用宝贵的网络带宽。一般来说,对普通 5 英寸照片而言,如果用于制作网页
72dpi 就够用了;如果用于打印输出,150dpi 也就足够了。

(13)进行网络扫描,其步骤和使用本地扫描没有区别,结果见图 8 所示。


oss.linuxpk.com
源 2008 年第 10 期 62
知识学堂

图8

SANE 通过网络可以将扫描仪连接到一台服务器上,并且通过访问控制网络中的一些计算机可以使用
扫描仪,就像扫描仪主机连在自己的计算机上。

小结
在桌面推广使用 Linux 的一大障碍就是与外围设备的兼容性问题,假如打印机、扫描仪等各种外设都不能与
Linux 兼容,那么 Linux 要想在桌面得到大面积应用就会比较困难。值得庆幸的是,目前大多是外设在 Linux 下
都可以使用,但愿这一系列文章能对读者在 Linux 下了解和使用外设有所帮助,让 Linux 系统真正用起来。

到这里,Linux 下设备完全驱动系列讲座就全部结束了。这一系列文章分别介绍了交互设备(显示卡和声卡)、
通信设备(网络接口卡、普通调制解调器和 ADSL 调制解调器)、存储设备(硬盘、CD-ROM 和 DV D-ROM)
、移动设备(存储设备、数码相机、摄像头、外置光驱和 IEEE1394 设备)、外设(打印机和扫描仪)驱动的配
置。其实,Linux 下的硬件设备还有很多,可以阅读 Linux 建档计划(Linux Docmentation Project ,LDP)
维护的 Linux 硬件兼容性列表 HOWTO,其最新链接为 http://www.linux.org/docs/ldp/howto/Hardware-
HOWTO/。另外,在大多数 Linux 发行版本中也可以看到 Linux 硬件兼容性列表 HOWTO 的电子版。


oss.linuxpk.com
源 2008 年第 10 期 63
知识学堂

Linux 内核的维护者--Alan Cox


今天,Linux 以其特有的开放源代码的魅力正逐步深入人心。然而在它出现之
前,有谁会想到一个世界级的操作系统是靠分散在全球的几千个开发人员用业
余时间创造出来的呢?

对于 Linux 的成功,人们往往会归功于天才 Linus Torvalds 的奇思妙想和别具一


格的项目管理方法。这是毫无疑问的。但是,除了 Linus 之外,还有一位在开源
领域内享有盛誉的高手对 Linux 开发的管理也至关重要,他就是 Alan Cox。下
面让我们一起见识一下这位幕后英雄的庐山真面目。

从头再来
1969 年,Alan Cox 出生于英国的伯明翰。他从小就对计算机有着浓厚的性趣,曾使用
Commodore PET 这种古老计算机学习编程。Cox 的第一个作品是一个利用简单的计算机动画来模拟月
亮起落的程序。尽管 Cox 认为它没有多大的实用性,但这的确为他后来所从事的游戏编程奠定了一定基
础。

Cox 认为自己第一个真正的程序是在高中的社会实践活动中完成的。当时,学校组织这种活动的目的
是让学生们利用两周的假期参与社会实践,从而认识到自己现有的水平不足以更好地完成令自己感兴趣
的工作,以达到激发学生们上大学的热情。但好多学生却领会不了学校的良苦用心,他们虽然联系了大
公司,但仅仅是做了两周的杂活,交差了事。而 Cox 在这方面则是个好学生,他想利用假期学习游戏编
程。于是还没开始放假,他就紧锣密鼓地联系工作,几乎给伯明翰所有相关的公司打了电话。最终,他
来到了 Adventure International 公司,编写了两周的游戏代码。Cox 的聪明和勤奋使得公司对他非常
感兴趣,两周的实习结束后,公司聘任他为长期兼职程序员。那年,Cox 刚满 18 岁。

高中毕业后,Cox 进入了位于斯旺西的威尔士大学的计算机系学习。在大学里,Cox 相当地活跃,


不仅经常与同学讨论问题,而且在学校的计算机协会里小有名气,因此,他在大学里有好多朋友。

但是,最令 Cox 难忘的还是他的忘年之交―Rob Ash。他们的相识也是从讨论问题开始的。当时 Cox


在课堂上遇到一个棘手的问题,于是他向老师请教,与同学讨论,但得到的回答都无法让他满意。于是,
他试着找到了当时学校的系统管理员 Rob Ash。尽管 Ash 非常忙,但他还是十分热情地接待了这位好学
的年轻人,并结合自己的经验阐述了他对问题的看法,这使得 Cox 茅塞顿开。在以后的大学生活中,每
当 Cox 遇到难题时,他总是来找 Ash 请教和探讨,Ash 也总是抽出时间为他耐心地讲解。

后来,当 Cox 回忆起大学里的学习生活时,他认为自己从 Rob Ash 那里几乎学到了所有的操作系统


重要部件的工作原理。Rob Ash 是他心中永远的偶像。


oss.linuxpk.com
源 2008 年第 10 期 64
知识学堂
除了学习和讨论理论知识外,Cox 在大学里依然没有放弃对游戏编程的喜爱,并经常为 Adventure
International 做一些兼职工作。这期间,作为主要设计者,他为游戏 ABERMUD 做了大量的设计乃至
编码工作。ABERMUD 尽管不是最早的 MUD (Multi-User Dungeon)游戏,但却是最早在 Internet 上
发布的 MUD 游戏,并在 20 世纪 90 年代初产生了重要的影响。

ABERMUD 的设计与开发工作进行得异常艰苦。最初的结果令 Cox 很不满意,于是他亲自动手修改


了一年多,但效果仍不理想,甚至有些地方是越改越糟。经过反复斟酌,Cox 决定推翻原来的工作,重
新设计编码,并最终取得了成功。

ABERMUD 的开发使 Cox 对项目的开发和管理有了深刻的认识。在对该项目的总结中,他认为 Fred


Brooks 在《人月神话》所提到的“要做好抛弃最初设计的准备”确实是金玉良言。ABERMUD 给他最大
的教训是,在确信前面的工作有严重错误时,要敢于舍弃原有的设计,从头再来。

众里寻它千百度
开发 ABERMUD 对 Alan Cox 产生了重要的影响,Cox 不但具备了一定的项目管理经验,而且还结
识了日后为之奋斗的 Linux。在推翻原计划从头再来的过程中,Cox 越来越感到自己的 Amiga 计算机已
经很难胜任这项工作了。于是,他模仿 Unix 的风格编写了大量的代码,来为自己的计算机做最大限度的
优化,但古老的 Amiga 常常令他捉襟见肘,最终他不得不决定为自己换一台新计算机。

1992 年春,Cox 买了一个当时主流的 386 处理器和一条 4MB 的内存,然后用它们和自己原来的硬


盘组装了一台新电脑。有了新电脑之后,Cox 接下来要做的是选一种合适的操作系统作为 ABERMUD 的
开发平台,这使他很伤脑筋。

Cox 考虑过使用当时已开始流行的 DOS 和 Windows 3.0,但这两种操作系统的稳定性很难达到


ABERMUD 的要求,对他的帮助不大。后来 Cox 又把目光转向了较为稳定的 FreeBSD。他花了好长时
间下载了 386BSD,但该操作系统需要一块浮点芯片。尽管 BSD 性能良好,但浮点芯片价格不菲,对于
当时的 Cox 来说不啻为天文数字。

值得庆幸的是,这个时候 Linux 出现了,尽管从技术上讲,当时的 Linux 在各方面都与 BSD 相去甚


远,但它也有着自身的优势。首先,Linux 对硬件的要求不高;其次,其稳定性已能够满足 Cox 的开发
需要;此外,当时的 MCC Linux,以及稍后的 SLS Linux 安装起来也很简单。当然,最令 Cox 感兴趣
的还是 Linux 是开放源代码的。于是,Cox 为自己的新电脑安装了 Linux,并从此与 Linux 结下了 10 多
年的不解之缘。

不拘一格揽人才
自从安装了 Linux 之后,ABERMUD 的开发进展顺利。而且,Alan Cox 还用它搭建了威尔士大学的


oss.linuxpk.com
源 2008 年第 10 期 65
知识学堂
BBS,这使得 Cox 对 Linux 更加情有独钟。在业余时间,Cox 为 Linux 写了一个补丁,并发给了 Linus
。很快 Linus 就给他回了信,告诉他这个问题已有人解决了。但 Cox 的热情不减,很快又写了一个用于
进程计数的补丁,这次被 Linus 加入了 Linux 的内核,并先后经过了 10 个人的修改,一直保存下来。

后来,Cox 又把 Linux 安装到了威尔士大学计算机协会的电脑上,试图通过使用 Linux,使得学校的


BBS 每天能够稳定地开放 3 小时以上。Cox 回忆说,他和计算机协会的其它成员可能是最早把 Linux 用
于大型的、多协议网络中的人。这使得他们能够比其它人更早地发现当时 Linux 在网络方面的许多问题,
比如他们用自己的新方法在 Linux 上实现了 TCP/IP 协议等。Cox 和同学们对发现的错误一一进行改正,
并写了许多新代码来弥补从前的漏洞。就这样,Cox 把他写的好多补丁合在一起,命名为
net2debugged,发给了 Linus,并且被采用。就这样,Cox 给 Linus 留下了深刻的印象,并被 Linus
邀请作为 Linux 网络代码的管理者。

1994 年,Cox 在第一届国际 Linux 大会上见到了 Linus,并与后者就 Linux 的重要问题进行了深入


的探讨。Linus 认为,Cox 对 Linux 网络代码的管理非常成功,希望他能够管理整个 Linux 的内核,
Cox 欣然应允。

维护整个 Linux 的内核无疑是一项艰巨的任务。Cox 要做的是每天接收大量的来自世界各地的代码,


然后根据自己的经验并结合实际测试进行过滤,把那些自己认为优秀的代码发给 Linus,由 Linus 决定是
否采用。而对于那些不合适的代码,Cox 要返回给作者本人,并指出哪些属于想法很好,但实现的却很
糟糕;哪些结果很好,但代码本身有错误;哪些代码与原有的内核有冲突等。

在这一繁琐的工作过程中,Cox 积累了一整套行之有效的、独特的 Linux


项目管理经验,并经过整理写成了《大教堂、集市和委员会》这一在开源领域
内堪称经典的文章。在这些经验中,Cox 对人的管理和使用的经验最值得称道。

众所周知,Linux 的开发人员分散在世界各地,比如 Linus 来自芬兰,Cox


来自英国等。如何让这些来自不同国度、文化背景各异的志愿者齐心协力地工
作,是 Cox 面临的最大难题。事实证明,Cox 确实很好地做到了人尽其才,不
拘一格。

对于那些为 Linux 写过很多代码的程序员,Cox 在表示感谢的同时,总是能够恰当地使用“激将法


”激励他们向更高的目标前进;对于那些水平不是很高,所写的代码被拒绝的作者,Cox 则总会详细地
指出这些代码为什么被拒绝,可以考虑从哪些方面进行改进。他认为在这方面不要害怕浪费时间,详细
地指出问题所在,积极地与作者进行讨论,耐心地解答作者的问题将往往会事半功倍。一次,为了一段
被 Cox 拒绝的代码,他与作者进行了激烈地、反复地讨论。最后,作者心悦诚服,认识到了自己的代码
针对性太强,不具备一般性,并不是对绝大多数 Linux 用户都有用。这之后,这位作者成功地为 Linux
的内核写了几部分的代码。


oss.linuxpk.com
源 2008 年第 10 期 66
知识学堂
对于那些非常想参与 Linux 内核项目,但水平又不高的作者,Cox 总是一边鼓励他们,一边耐心地
告诉他们从何入手,并尽自己所能来回答他们的各种问题。事实证明,有些人确实通过这种方式成了高
手,并为 Linux 内核做出了很大的贡献。比如,有一位葡萄牙人通过这种方式使自己的水平得到了极大
的提高,后来负责 Linux IPv6 部分工作,并写了 75%的 Linux IPv6 的代码。目前,他已成为美国
Cisco 公司的高级雇员。而对那些没有任何编程经验的志愿者,Cox 也总有办法让他们在网络管理、邮
件列表管理、书写文档等除编程以外的、其它不可缺少的方面发挥作用。

二号人物的魅力

与其它 Linux 业内重要人物 一样,Alan Cox 除了维护


Linux 内核以外,也有自己的工 作。他大学毕业后,先后工作于
Cable Online 公司、3Com 公 司、CymruNet 公司、CERT 公
司等,甚至连微软公司也曾向他 抛出过橄榄枝,但 Cox 没有接受
这一邀请。最后,他来到了 Red Hat 公司做技术支持工作。Red
Hat 给了 Cox 足够的自由,他可 以在家中工作,有足够的时间来
从事自己心爱的 Linux 内核的维 护工作。

除了公司的工作外,Cox 每 周至少做 60 小时的 Linux 内核


的维护工作。因此,有人曾传说 Cox 是个精力极其旺盛的家伙,
根本不睡觉。正是他的这种孜孜 不倦的工作,使得 Linux 的内核
越来越棒,人们也习惯把他所维 护的、尚未公开发布的内核称为
Linux 内核的 AC(Alan Cox)版。

此外,Cox 有着很大的人格魅力,无论是在 Linux 内核的维护工作中,还是在 Red Hat 的技术支持


过程中,他对问题的回答总是能够让提问者满意。他认为,能够使别人快乐才是世界上最大的快乐。

出色的工作加上特有的人格魅力,使 Cox 在 Linux 业内赢得了极高的声誉。业内人士普遍认为,没有 Alan Cox


的杰出的贡献,就不会有 Linux 今日的辉煌。在著名的计算机作家 Nikolai Bezroukov 所著的《开源运动先驱》
一书中,作者认为在 Linux 业内,Alan Cox 的贡献仅次于 Linus Torvalds,是 Linux 业内的二号人物。就连
Linus Torvalds 本人也认为,Linux 能有今天,Alan Cox 功不可没,是他最应该感谢的人!


oss.linuxpk.com
源 2008 年第 10 期 67
经验技巧

Linux 一句话精彩问答

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

1161 如何限制 Shell 命令记录大小


默认情况下,bash 会在文件$HOME/.bash_history 中存放多达 500 条命令记录。有时根据具体的
系统不同,默认记录条数不同。系统中每个用户的主目录下都有一个这样的文件。为了系统的安全,在
此强烈建议用户限制该文件的大小。用户可以编辑/etc/profile 文件,修改其中的选项如下:

HISTFILESIZE=30 或 HISTSIZE=30

这样就将记录的命令条数减少到 30 条

1162 我想将开机时显示的信息保留下来,以检查电脑出了问题的地
方,请问怎么办
可输入下面的命令:

#dmesg > bootmessage

该命令将把开机时显示的信息重定向输出到一个文件 bootmessage 中 。

1163 我想在注销时删除命令记录,请问怎么做
编辑/etc/skel/.bash_logout 文件,增加如下行:

rm -f $HOME/.bash_history

这样,系统中的所有用户在注销时都会删除其命令记录。


oss.linuxpk.com 2008 年第 10 期 68

经验技巧
如果只需要针对某个特定用户,如 root 用户进行设置,则可只在该用户的主目录下修改
$HOME/.bash_logout 文件,增加相同的一行即可 。

1164 编译内核,支持 ntfs 的步骤


1. # cd /usr/src/linux-2.4
2. # make menuconfig

3. 选中 File System 下的 NTFS file system support (read only)为 M :

4. # uname -a
2.4.21-27.0.2.EL
5. # vi Makefile

确保前几行为 :

VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 21
EXTRAVERSION = -27.0.2.EL

6. # make dep
7. # make modules SUBDIRS=fs/ntfs
8. # mkdir /lib/moduels/2.4.21-27.0.2.EL/kernel/fs/ntfs
9. # cp -f fs/ntfs/*.o /lib/moduels/2.4.21-27.0.2.EL/kernel/fs/ntfs/
10. # depmod -a
11. # modprobe ntfs
12. # lsmod

确保有 ntfs 在里面 。

1165 如何使用 ssh 通道技术


本文讨论所有机器均为 Linux 操作系统。

比如说我的机器是 A,中间服务器为 B,目标服务器是 C。

从 A 可以 ssh 到 B,从 B 可以 ssh 到 C,但是 A 不能直接 ssh 到 C。

现在展示利用 ssh 通道技术从 A 直接传输文件到 C。

1. ssh -L1234:C:22 root@B


input B's password
2. scp -P1234 filename root@localhost:
input C's password

1166 使用 rpm 命令时没有任何响应,如何解决


oss.linuxpk.com 2008 年第 10 期 69

经验技巧
rm -rf /var/lib/rpm/__db.*

1167 向登陆到同一台服务器上的所有用户发一条信息
1)输入 wall 并回车 ,

2)输入要发送的消息 ;

3)结束时按“Control-d”键,消息即在用户的控制窗口中显示 。

1168 输入短消息到单个用户
1)输入 write username,当用户名出现在多个终端时,在用户名后可加 tty,以表示在哪个 tty 下的
用户。

2)输入要发送的消息。

3)结束时按“Control-d”键,消息即在用户的控制窗口中显示。

4)对于接收消息方,可以设定是否允许别人送消息给你。

指令格式为:mesg n[y]
%write liux hello! Everybody, I’llcome.
%

用户控制窗口中显示的消息:Message from liux on ttyp1 at 10:00…hello! Everybody,


I’llcome.EOF 。

当使用 CDE 或 OpenWindows 等窗口系统时,每个窗口被看成是一次单独的登录;如果用户登录次


数超过一次则消息直接发送到控制窗口 。

1169 发送文件中的消息到单个用户
如果有一个较长的消息要发送给几个用户,用文件方式:

1)创建要发送的消息文本的文件 filename.

2)输入 write username<filename 回车,用 cat 命令创建包含短消息的文件:


% cat>message hello! Everybody, I’ll come.
% write liux<message write:liux logged in more than once…write to console

% 用户在一个以上窗口登录,消息显示在控制窗口中 Message from liux on ttyp1 at 10:00…


hello! Everybody, I’ll come. EOF


oss.linuxpk.com 2008 年第 10 期 70

经验技巧
1170 向远程机器上的所有用户发送消息
使用 rwall(向所有人远程写)命令同时发送消息到网络中的所有用户。

rwall hostname file

当使用 CDE 或 OpenWindows 等窗口系统时,每个窗口被看成是一次单个的登录。

如果用户登录次数超过一次则消息直接发送到控制窗口 。

1171 向网络中的所有用户发送消息
发送消息到网络中的所有用户 :

1)输入 rwall -n netgroup 并回车 ,

2)输入要发送的消息 ;

3)结束时按“Control-d”键,消息即在系统每个用户的控制窗口中显示,下面是系统管理员发消息
到网络组 Eng 每个用户的例子:
% rwall -n EngSystem will be rebooted at 11:00.(Control-d)
%

用户控制窗口中的消息:Broadcast message from root on console…System will be rebooted


at 11:00.EOF

注意:也可以通过 rwall hostname(主机名)命令到系统的所有用户 。

1172 我需要编译内核,内核源码在哪里?
1、一般在发行版的盘里都有,比如 RedHat,一般在第二、第三张上 :

2.4 内核的叫 kernel-source-2.4.xx-xx.rpm 。

2.6 内核的叫 kernel-devel-2.6.xx-xx.rpm 。

2、去 www.kernel.org 下载一份你喜欢的 .

1173 将 top 的结果输出到文件中


top -d 2 -n 3 -b >test.txt

可以把 top 的结果每隔 2 秒,打印 3 次,这样后面页的进程也能够看见了 .


oss.linuxpk.com 2008 年第 10 期 71

经验技巧
1174 vim 中改变全文大小写的方法
光标放在全文开头 ,

gUG 所有字母变大写 ;

guG 所有字母变小写 ;

g~G 所有字母,大写变小写,小写变大写 .

1175 如何升级安装 ubuntu


以 ubuntu 7.04->7.10 为例:

mount -o loop /media/ubuntu-7.10-alternate-i386.iso /cdrom


gksu "sh /cdrom/cdromupgrade"

如果需要代理:

export http_proxy=http://proxy.server.ip/; gksu "sh /cdrom/cdromupgrade"

1176 文件不均匀切分方法
$dd if=source of=target.1 bs=1M count=10
$dd if=source of=target.2 bs=1M skip=10

source 被分为 target.1 和 target.2 两个文件,其中 target.1 为 source 的前 10M 部分;target.2


为 source 的减去 10M 后的部分。

为 NFS 加油提速
曹江华
网络文件系统(Network File System,简称 NFS)是 Linux 上最常见的网络服务之一。NFS 服务
器可以让计算机通过网络将远端的共享文件挂载到本机的系统中,就像是在使用本地文件一样。如何优
化 NFS 的性能成为被广泛关注的问题,下面介绍一些常用方法。


oss.linuxpk.com 2008 年第 10 期 72

经验技巧

图9

选择高性能的 I/O 设备
随着计算机技术的发展,以硬盘为首的 I/O 设备对计算机的整体性能影响越来越大。无论是通信服务
器,还是数据库服务器及数据仓库等,都需要有很好的磁盘 I/O 吞吐性能,NFS 服务器也不例外。

硬盘数据传输速率分为内部传输率和外部传输率。通常外部传输率也被称为突发数据传输率或接口传
输率,即指从硬盘的缓存向外输出数据的速度,而硬盘的内部传输率要小于外部传输率,所以内部传输
率的高低是评价一个硬盘整体性能的决定性因素。

在高性能网络服务器和工作站领域得到广泛应用的 SCSI 技术已经成为网络服务器的标准接口选择,


目前,其内部传输速率可达 320Mbps。通常在一个 50 个用户的 NFS 网络系统中,使用 10 个基于
RAID5 级别的 10000rpm 的 SCSI 硬盘可以达到较好的效果。

网络带宽是 NFS 性能的另一个瓶颈。通常,应当使用单独的快速百兆以太网连接来发送 NFS 服务器


和客户机之间的报文信息。

优化软件环境
软件方面的性能优化可以从以下几个方面考虑。

清理 NFS 服务器磁盘碎片
随着时间的推移,文件系统都会趋向于碎片化,这些碎片将降低 NFS 的性能。及时整理磁盘碎片,
释放磁盘空间可以帮助系统更好地工作。


oss.linuxpk.com 2008 年第 10 期 73

经验技巧
开启硬盘 DMA
IDE 硬盘基本都支持 DMA(直接内存读取)功能,但是现有的 Linux 发行版本中,默认情况下都没
打开该功能。可以在/etc/rc.d/rc.local 文件中添加如下一行:

/sbin/hdparm -d1 -x66 -c3 -m16 /dev/had

这样以后每次开机,硬盘的 DMA 就会被开启。

尽量选择 UDP 协议
对系统而言,UDP 是负担较轻的通信传输方式。在局域网中,网络质量相对稳定,应当尽量选择
UDP。

优化配置
为了进一步优化 NFS 的性能,需要调整一些相关的参数,比如,读写块大小、MTU 和服务线程数量
等。

调整读写块大小
(1)挂载 NFS 共享目录

首先在客户机建立挂载目录/home/nfs/cao,然后用以下命令来挂载 NFS 服务器上的共享目


录/home/cao:

# mkdir -p /home/nfs/cao
# mount -t nfs 192.168.1.4:/home/cao /home/nfs/cao

挂载完毕后,使用 df 命令进行查看,应该可以看到 NFS 服务器上的/home/cao 已被挂载到/home/


nfs/cao 目录(见图 10)。只要进入/home/nfs/cao 目录,就等于进入了 IP 地址为 192.168.1.4 的
NFS 服务器的/home/cao 目录中。


oss.linuxpk.com 2008 年第 10 期 74

经验技巧

图 10

(2)测试数据读写时间

进入/home/nfs/cao 目录,使用如下命令测试 NFS 的写性能:

#time dd if=/dev/zero of=/home/nfs/cao/nfs.dat bs=16k count=16384

这个命令的意思是在 NFS 服务器的 nfs.dat 文件里写 16384 个 16KB 的块,即一个 256MB 的文件。
通常该测试文件的大小设定为 NFS 服务器内存的 2 倍。正常的输出结果可能如下:

读入了 16384+0 个块

输出了 16384+0 个块
real 4m28.934s
user 0m0.200s
sys 0m5.790s

使用如下命令测试 NFS 的读性能:

#time dd if=/home/nfs/cao/nfs.dat of=/dev/null bs=16k count=16384

执行以上命令,系统会记录客户机读这个 256MB 文件的时间。正常的输出结果可能如下:

读入了 66535+0 个块

输出了 66535+0 个块
real 4m54.812s
user 0m0.420s
sys 0m3.190s


oss.linuxpk.com 2008 年第 10 期 75

经验技巧
删除 nfs.dat 文件,使用如下命令卸载 NFS 服务器的共享目录:

#umount -t nfs 192.168.1.4:/home/cao /home/nfs/cao

然后重复上面的(1)和(2)步骤,记录下测试得到的数据,以计算读写时间的平均值。

(3)修改读写块大小

NFS V2 版本的文件传输尺寸最多只能设定为 8KB,缺省情况是 4KB(4098 字节)。需要进行实际


测试得到一个最佳值。

修改读写块大小前需要卸载 NFS 的共享目录。rsize 和 wsize 分别代表读写块大小,可以通过修


改/etc/fstab 文件来设定这两个参数,在/etc/fstab 文件中加入如下一行:

192.168.1.4: :/home/cao /home/nfs/cao nfs rsize=8192,wsize=8192,timeo=10,intr

重新挂载 NFS 的/home/cao 目录,然后重复(1)和(2)步骤。比较读写块大小修改前后的读写


性能,如果没有明显提高,可以再次修改/etc/fstab 文件,直到得到最佳值。rsize 和 wsize 的值必须是
1024 的倍数,对于 NFS V2 版本来说,8192 是它们的最大值。

设定合适的 MTU
每个网络都存在约定的 MTU(Maximum Transfer Unit,最大传输单元),并且要求所有进入网络
的数据报必须适合该 MTU。如果一个数据报进入了一个 MTU 小于该数据报长度的网络,那么处于网络
边界上的路由器会把该数据报分解为多个小的数据包,这样会影响 NFS 的性能。tracepath 命令可以用
来跟踪 MTU 的路径:

# tracepath 192.168.1.4/2049
1: [LOCALHOST] pmtu 1500
1: 192.168.1.4 (192.168.1.4) 2.824ms reached
Resume: pmtu 1500 hops 1 back 1

192.168.1.4 是 NFS 服务器的 IP 地址,2049 是 UDP 协议的端口号。随后 tracepath 命令会给出


NFS 网络中的 MTU 值。

然后,使用 ifconfig 命令查看客户机上用于连接 NFS 服务器网卡接口的 MTU 值,如果两者相差很多,


可以使用 ifconfig 命令进行修改:

#ifconfig eth0 mtu 1500

对以太网接口来说, MTU 的默认设置是 1500 个字节。

3.增加 NFS 服务器的线程

缺省情况下 NFS 服务器会启动 8 个 nfsd 守护线程,可以使用如下命令察看每个线程的使用情况:


oss.linuxpk.com 2008 年第 10 期 76

经验技巧
#cat /proc/net/rpc/nfsd
rc 0 0 2
fh 0 0 0 0 0
io 0 0
th 8 0 22.000 11.000 45.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
ra 16 0 0 0 0 0 0 0 0 0 0 0
net 2 2 0 0
rpc 2 0 0 0 0
proc2 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
proc3 22 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

在第五行的“th”后的“8”表示有 8 个线程,再后面的数字代表每秒钟每个线程使用的最大百分比。
如果紧接着的三个数字比较大,则可能表示现在挂载的客户机数目比较多,需要增加线程数目。

修改启动文件/etc/rc.d/init.d/nfs 可以增加线程数量。首先,停止 NFS 服务:

#/etc/rc.d/init.d/nfs stop

然后,修改/etc/rc.d/init.d/nfs 文件,将“[ -z "$RPCNFSDCOUNT" ] &&


RPCNFSDCOUNT=8”一行中的 8 替换为适当的数字。

重新启动 NFS 服务:

#/etc/rc.d/init.d/nfs restart

此时察看 NFS 服务器运行的线程数量就会提高到设定的数目。

4.提高可用的 Socket 缓冲区

通常情况下,Linux 使用的 Socket 输入队列使用 64KB 的缓冲区,如果运行 8 个 nfsd 守护进程的


话,每个守护进程(Daemon)就只有 8KB 的缓冲区用于存储输入队列的数据。如果再增加线程,情况
会更糟。这种情况可以适当增加缓冲区大小至 256KB。

首先停止 NFS 服务,然后修改/etc/rc.d/init.d/nfs 配置文件,在“daemon rpc.nfsd


$RPCNFSDCOUNT”一行之前加入如下两行代码:

#echo 262144 > /proc/sys/net/core/rmem_default


#echo 262144 > /proc/sys/net/core/rmem_max

这两行代码的作用是,在 nsfd 守护进程启动前设定缓冲区大小至 256KB。

在“daemon rpc.nfsd $RPCNFSDCOUNTS”一行之后加入如下两行代码:

# echo 65536 > /proc/sys/net/core/rmem_default


# echo 65536 > /proc/sys/net/core/rmem_max

这两行代码的作用是,在 nsfd 守护进程关闭后设定缓冲区大小至缺省值。重新启动 NFS 服务后生效。

5.其它参数


oss.linuxpk.com 2008 年第 10 期 77

经验技巧
挂载 NFS 文件系统时可以选择是硬(Hard)挂载,还是软(Soft)挂载。采用硬挂载,NFS 客户机
会在后台不断地尝试与 NFS 服务器的连接(一般不会给出任何提示信息),直到挂载上为止;采用软挂
载,会在前台尝试与 NFS 服务器的连接,当收到错误信息后终止挂载尝试,软挂载是默认的连接方式。

硬挂载的命令如下:

# mount -t nfs -o hard 192.168.1.4:/home/cao /home/nfs/cao

相应的软挂载只要把命令中的“hard”参数替换为“soft”即可。

到底是使用“hard”还是“soft”,主要取决于访问什么信息。假如是察看 NFS 服务器的视频文件,


用户绝对不会希望由于一些意外的情况(比如网速一下变慢)使系统输出大量的错误信息,如果此时用
“hard”方式的话,系统就会等待,直到能够重新与 NFS 服务器建立连接为止。对于非关键数据,可以
使用“soft”方式,比如,使用 FTP 传输一些数据,这样在远程机器暂时连接不上或关闭时,就不会挂起
会话过程,造成客户机的不响应。

构建安全 rsync
MySQL 中文网
叶金荣
随着安全要求的提高,我们逐渐采用 sftp 或 scp 来取代 ftp。然而,可能由于网络状况等原因,使得
scp/sftp 可能发生中断。为此,不得不很痛苦的重新拷贝文件,不仅麻烦,还严重浪费带宽和时间。在
这里,我们采用 rsync over ssh 的方式,既安全又方便,因为 rsync 支持断点续传。

配置 rsyncd.conf
rsyncd.conf 只需做非常简单的判断,即可直接使用,贴一下我自己的例子:

#/etc/rsyncd.conf

#常规设定
uid = nobody
gid = nobody
use chroot = no
max connections = 5

#设定日志
syslog facility = local5
pid file = /var/run/rsyncd.pid


oss.linuxpk.com 2008 年第 10 期 78

经验技巧
#多种方式设定许可 hosts 列表
hosts allow=192.168.0.1,192.168.0.2,192.168.1.0/255.255.255.0

#设定 rsyncd 目录
[backup]

path = /home/yejr/

#如果同时还允许上传文件,把 read only 设成 false 即可

read only=false

由于采用的是 rsync over ssh,因此无需启动 rsyncd 实例,而是通过 ssh 来 rsync,非常简单。

注意到上面的 read only=false,可能很多人认为 rsync 只能用于下载,不能上传,其实不然,这


么设置一下之后,就可以利用 rsync 上传文件了。

看下面的例子。

使用

下载文件
rsync -P -av --timeout=10 --rsh="ssh -l yejr" 192.168.0.84::backup/yejr/
/home/yejr/

把服务器上的目录 /home/yejr/ 上的所有文件下载到本地目录 /home/yejr/ 下。

在这里,需要注意目录名后面是否带上了目录分解符 /,如果有,那么只处理目录下的文件,如果不
带,则把目录名本身也下载了。

上传文件
rsync -P -av --timeout=10 --rsh="ssh -l yejr" /home/yejr/
192.168.0.84::backup/yejr/

把/home/yejr/目录下的文件上传到服务器 /home/yejr/ 下,即:/home/yejr/*。

上传目录结构
rsync -P -av --timeout=10 --include '*/' --exclude '*' --rsh="ssh -l yejr"
/home/yejr/ 192.168.0.84::backup/yejr/

or


oss.linuxpk.com 2008 年第 10 期 79

经验技巧
rsync -P -av --timeout=10 --include '*/' --exclude '*' --rsh="ssh -l yejr"
192.168.0.84::backup/yejr/ /home/yejr/

有些时候,我们需要先同步一下目录结构而无需上传/下载文件,就采用这种方式。

上面的例子中,我已经采用 ssh key 的方式建立了信任关系,因此无需每次输入密码。

在 ubuntu 中使用下一代输入法 ibus


张召伟
linux 下常见的输入法有 fcitx 和 scim。fcitx,全称“Free Chinese Input Toy for X”,中文名称
为“小企鹅输入法”,支持拼音,五笔字型以及区位、二笔。可以输入 UTF-8、GB 18030 编码中的汉
字。fcitx 小巧好用,兼容性好,fcitx 的配置以及使用较为简单,比较适合于初学者以及习惯 Windows
输入方式的人使用,但 fcitx 只能提供中文输入,且投供的输入法种类稍少,尤其是 fcitx 已经停止开发,
另外 Fcitx 属于 XIM,而 XIM 崩溃之后会导致应用程序和 X 的崩溃,所以若 fcitx 若崩溃可能导致用户数
据的丢失;scim,Smart Common Input Method,是一个在类 Unix 操作系统上支持多国语言的一
个输入法平台,在其上可以使用很多种输入法,支持各种语言的输入,但 scim 最大的问题是其兼容性,
很多情况下导致用户无法正常使用,给用户带来了极大的不便。

因为上面问题的存在,下一代输入法应运而生。ibus(http://code.google.com/p/ibus/) 是下一
代输入法的框架中的其中一个,作者 Shawn.P.Huang 同时也是 scim-python 的作者。其它的两个下一
代输入法框架有 scim2(主页在 http://code.google.com/p/scim2/,由 stardict 的作者胡正领导开
发),imbus(http: //code.google.com/p/imbus/,由 scim 的作者苏哲带领开发),目前,imbus 和
scim2 都没有什么进展。

ibus 的主要特色在于它的 C/S 结构,ibus 输入法引擎都是各自独立的单独的进程,这种方式可以有


效的避免输入法引擎之间的影响,另外,也比较容 易地载入和卸载输入法引擎。

ibus 使用了 dbus 作为进程间通讯的机制,dbus 具有低延迟和低开销的特点,小巧而高效,在


GNOME 和 KDE 中都获得了广泛应用。dbus 的 使用,使 ibus 具有小巧高效的特点。

另外,在图形界面方面,ibus 使用 pygtk,使开发更加容易。

ibus 输入法的安装


oss.linuxpk.com 2008 年第 10 期 80

经验技巧
添加 ibus 的软件源到系统。
编辑/etc/apt/sources.list 文件,在文件的最后添加一行:

deb http://ubuntu.cn99.com/ubuntu-cn/ hardy main restricted universe multiverse

更新软件包列表
$ sudo apt-get update

然后搜索软件包
$ apt-cache search ibus |grep ^ibus
ibus - iBus - Intelligent Input Bus for Linux / Unix OS
ibus-pinyin - ibus-pinyin
ibus-table - IBus-Table

上面已经可以看到 ibus 软件包的信息了,上面的软件包中 ibus-pinyin 是 ibus 的拼音输入法的引擎,


ibus-table 是其它输入法的 引擎,如仓颉第五代,二笔,五笔 86,五笔 98,郑码等。

安装 ibus 软件包
$ sudo apt-get install ibus ibus-table

因为笔者不使用拼音输入法所有只安装了 ibus 和 ibus-table,用拼音输入法的朋友还需要安装


ibus-pinyin 软件包,使用下面的命令 来安装

$ sudo apt-get install ibus ibus-table

安装完成后,设置用户默认使用 ibus 输入法,打开一个终端,在终端中执行下面的命令:

$ im-switch -s ibus

注销当前用户,重新登录。

ibus 的配置
登录后,就可以看到 ibus 的浮动条,因为是安装输入法后第一次,还没有任何输入法引擎,所有您
按 ctrl+空格键来激活和使用输入法时提示还 没有配置输入法引擎,暂时还不能输入中文。所有我们需
要先配置 ibus 输入法的引擎。

右键点击系统托盘中的 ibus 图标,选择“首选项”,弹出 ibus-设置对话框。在“输入法引擎“标签


页,如图 11


oss.linuxpk.com 2008 年第 10 期 81

经验技巧

图 11
选中你想要输入法引擎,将其启 动和预加载选项都加上。然后选择关闭。设置完成后,输入法引擎
就激活并可以使用了,而不必重新启动输入法

ibus 的界面简洁、美观、漂亮,图 12 为 ibus 输入条和状态条。

图 12
关于输入法的使用,笔者只使用二笔输入法,仅从二笔输入法方面试用结果看笔者感到 ibus 的二笔
输入法要比 scim 提供的二笔输入法更加方便,也更加智能化。

以上步骤使用的系统为: ubuntu 810


oss.linuxpk.com 2008 年第 10 期 82

经验技巧

CVS 提高软件开发效率
翟超杰
在实际的程序开发中,可能需要多人频繁地修改同一个程序代码文件。如果交流不畅,势必造成一个
用户更改的内容很快被另一个用户覆盖的状况。此外,在软件的开发过程中会产生各种中间版本或测试
版本,它们也是软件分发过程中必不可少的中间产品。如果没有妥善地处理代码并发版本问题,软件开
发工作量的很大一部分将集中在软件代码版本的管理上,造成软件开发的整体进度滞后。如何高效、便
捷地管理程序代码版本成为软件开发企业必须认真面对的一个突出问题。

一个合理的解决方案
为了在开发团队中使用统一版本的程序代码,笔者所在公司经过实际摸索和经验积累,采用了一个比
较适合自身开发特点的解决方案——使用 CVS 构建并行版本开发系统。

CVS 是 Concurrent Versions System(并发版本系统)的缩写,它基于 Unix 体系中成熟的


SCCS(Source Code Control System)和 RCS(Revision Control System)开发,是一个开放源
码项目。目前,CVS 已是版本控制系统的主流软件。在很多大型项目开发中,由于开发人员分布地域广,
对于版本管理的要求严格,CVS 也可以从容地解决这些项目开发中的软件代码版本控制问题。

CVS 的工作原理
CVS 是一个 C/S 系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文
件同步的目的。CVS 的基本工作思路是,在一台服务器上建立一个仓库,仓库里可以存放多个不同项目
的源程序,由仓库管理员统一管理这些源程序。每个用户在使用仓库之前,首先要把仓库里的项目文件
下载到本地。用户做的任何修改都需要先在客户端进行,确保代码有效后再用 CVS 命令或图形界面提交
到服务器,以避免直接影响服务器上的数据。之后,由 CVS 仓库管理员统一进行代码的版本管理。这样
就可以做到跟踪文件变化、版本控制和冲突控制等功能。

CVS 的特点
◆ 开放源码,网络透明

在开发小组内部,经过授权的用户可以使用任意源代码。由于 CVS 具有网络透明(Network-


transparent)的特点,因此可以将服务器建立在互联网上,任何地域的开发人员都可以同时开发一个项
目,真正实现跨地域的项目开发合作。


oss.linuxpk.com 2008 年第 10 期 83

经验技巧
◆ 灵活方便的版本管理机制

CVS 采用 C/S 方式架构,版本的管理可以直接由管理员从服务器上进行,摆脱了枯燥的命令行操作


方式,在客户端使用直观的图形界面进行管理。

在操作流程上,CVS 也更加人性化。用户可以通过客户端直接检出、更新文件,可以通过图表或时
间流的方式浏览一个文件的变更过程,可以查看任意版本的项目代码,也可以将文件放到不同的生产线
上编译,避免文件的修改对其它程序代码产生负面影响。

◆ 众多开发工具支持

目前 CVS 已经被包括 Visual Studio、Eclipse 等多种软件开发工具支持,甚至很多开发工具直接内


嵌有 CVS 的客户端,只需要进行简单的配置就可以很好地将 CVS 体系引入到项目开发中。

◆ 客户端安装简单、使用方便

目前 CVS 的客户端有多种产品支持,不仅可以使用命令行的方式在客户端进行文件管理,而且很多
客户端都支持图形界面,操作简单易行。

CVS 服务器端的安装与配置
CVS 服务器端一般需要安装在 Linux 操作系统上。安装使用的源程序包可以从 CVS 的官方网站直接
下载,同时可以得到一份十分详细的安装配置说明。按照此说明,可以很容易地实现服务器端软件的安
装与配置。

CVS 客户端的安装与配置
目前正在使用的 CVS 客户端软件产品很多,最常用的是 WinCVS。它借助图形化的界面,使整个版
本控制过程更加方便。

1.WinCVS 的安装

WinCVS 的安装过程十分简单,只需要按照系统提示逐步安装即可。

2.WinCVS 的配置

◆ 环境变量的配置

客户端配置最重要的是 CVSROOT 环境变量的配置。其格式如下:

:pserver:username@hostname(或 IP 地址):CVS 仓库路径

例如,CVS 服务器的主机名为 jsp.tpe,用户名为 java,服务器端仓库路径为/home/cvsroot,那


么 CVSROOT 环境变量如下:


oss.linuxpk.com 2008 年第 10 期 84

经验技巧
java@jsp.tpe:/home/cvsroot

借助这个变量可以在 WinCVS 上与服务器建立联系。在 WinCVS 系统中,选择“Admin”→“Login”


选单,然后选择“general”选项,输入 CVSROOT 环境变量,即可实现配置。

◆ 与服务器建立联系

在进行配置之后,选择“Admin”→“Login”选单,然后选择“确定”,输入管理员分配的口令,即
可与服务器建立联系。

并发版本控制
完成 CVS 服务器端和客户端的软件安装与配置,就架构好了版本控制系统。使用该系统,可以很灵
活地实现开发过程中的版本管理和控制任务。

◆ 增加项目到版本控制中

增加项目可以由 CVS 管理员直接从服务器端使用 CVS 命令进行,也可以在客户端进行。

增加新项目前,需要项目管理员对源代码构建一个总体的目录结构,并将已编制的代码放入相应目录
下,然后由 CVS 管理员在 WinCVS 环境下选择“Remote”→“Import module”选单,将整个项目的总
体框架上传到 CVS 服务器。在实际开发中,开发人员可以与服务器建立连接,获得此项目的主要框架,
然后将自己编译的文件上传到服务器指定的目录下。

◆ 从 CVS 获取新模块

第一次从 CVS 服务器获得模块被称作检出。从库中检出一个模块,会在本地创建构成模块的目录层。


在 WinCVS 中,选择“Create”→“Checkout module”选单进行操作。

◆ 文件的同步

开发过程中,开发人员设计的所有代码文件都在此版本控制系统的管理下。用户在确定了一个文件的
修改后,就可以在 WinCVS 中更新此文件。这一步的主要作用是与服务器上的程序内容同步,并检查是
否存在冲突。所谓冲突,就是在多个设计人员同时修改一个文件,并且同时提交给服务器时,CVS 服务
器无法确定应该按照何种内容更新此文件而产生的状态。

如果 WinCVS 没有显示冲突,它会自动从服务器上下载一份最新版本的文件内容,并与当前已经修
改的内容结合。然后,用户可以将此文件提交到服务器,作为该文件的一个新版本。在提交的同时,
WinCVS 会提示用户可以对文件加上相应的注释,这些注释对用户在使用图表或以其它方式检查各个程
序文件版本时提供帮助。如果产生冲突,则需要设计人员查看代码,手工解决冲突。

◆ 冲突的解决

在进行项目的开发过程中,难免会有同时修改一个文件,并且同时提交到服务器造成冲突的情况。尽


oss.linuxpk.com 2008 年第 10 期 85

经验技巧
管几率很低,但却是版本控制过程中必须着重解决的问题。CVS 对工程具体内容一无所知,所以将解决
冲突留给了开发人员。该系统提供完善的冲突检查机制,并有详细的冲突信息显示。通过检查冲突信息,
开发人员可以与其它相关开发人员沟通,确定代码的最新内容,解决冲突,实现多人共同开发统一的程
序代码。

◆ 分支

版本控制系统的一个特性是能够将修改隔离到一个分离的开发线上,这条线被称为分支。分支是在一
个程序文件已经实现比较成型的功能后,还需要继续进行完善,而又不希望此文件的编译影响其它程序
文件的开发所采取的一种策略。分支策略的采用极大地提高了程序文件修改的灵活性。

CVS 与开发工具的结合
使用 CVS 构建的版本管理体系不仅能使用其自身的客户端软件进行版本控制,还可以和许多著名的
开发软件相结合,在程序调试完成后,直接进行版本同步。

不同的开发工具与 CVS 的兼容方式不同。笔者所在公司采用的主要开发工具是 Eclipse,直接内嵌有


CVS 的客户端软件,因此不再需要其它 CVS 客户端软件。

开始工作前,要保证所有资源与最新的分支状态一致。对于从头开始的新项目,首先要连接服务器,
设定存储哪些资源文件。对于在服务器数据库中已经有记录的项目,首先要通过更新来保证资源状态的
最新。如果本地工作没有需要特别保存的,可以直接把数据库中的最新版本“Check Out As
Project”,或者是“Replace With Latest from Repository”。在本地对文件修改完成后,注意和服务
器数据库保持同步。所有这些操作,与在 WinCVS 客户端的操作基本一致。

应用效果
在没有建立并行版本控制系统前,小规模的软件主要使用传统的手工方式来维护版本统一性。但这种
方式的缺点是需要开发人员不停地填写各种版本信息记录,并且需要手工做好各个阶段的代码备份,不
得不做大量的重复劳动。

在建立并行版本控制系统后,所有的开发项目都纳入到此系统中。版本控制的直接益处则是将开发人
员从烦琐的版本信息记录和程序代码备份中解放出来,极大地降低了工作强度。项目进度管理员可以使
用本系统方便地提取各个时间段、各个版本的源代码。使用此系统得到的各种图表也是项目管理员评估
项目开发阶段成果的重要参考资料。

CVS 只是并发版本控制的一种解决方案。各个单位可以根据自身企业开发的特点来建立自己的版本
系统。随着软件开发技术的不断进步,并发版本控制必将在软件开发中起到越来越重要的作用。


oss.linuxpk.com 2008 年第 10 期 86

经验技巧

独辟蹊径实现远程接入局域网
梁广民
在家庭办公或在外地出差时,常常需要连接到公司内部的局域网中查找资料。本文介绍一种利用
Linux 服务器的两个串口构建拨号服务器的方法,远程用户可以通过拨号连接到局域网,方便地进行信息
传递和资源共享。

笔者的配置环境是 Red Hat 8.0 Linux 操作系统,所需的硬件包括两个外置 Modem(分别连接到


COM1 和 COM2 端口)和两条电话线。

实现步骤
➢ 初始化串口设备

在/etc/inittab 文件中加入如下两行,用来初始化 ttyS0 和 ttyS1 两个串口设备:

s0:345:respawn:/sbin/mgetty -D -x 3 ttyS0
s1:345:respawn:/sbin/mgetty -D -x 3 ttyS1

然后,运行“/sbin/init

q”命令使改动生效。

➢ 指定认证方式

在/etc/ppp 目录下创建文件 ppplogin,内容如下:

#!/bin/sh
/usr/sbin/pppd auth -chap +pap login

该文件指定用户登录时采用 PAP 认证。PAP 和 CHAP 是 PPP 服务的两种身份验证协议。

保存文件后,给文件设置执行的权限:

#chmod a+x /etc/ppp/ppplogin

然后,更改/etc/mgetty+sendfax/login.config 文件,去掉“/AutoPPP/”一行前面的注释,并改
为如下内容:

/AutoPPP/ - - /etc/ppp/ppplogin

➢ 修改 options 文件

修改/etc/ppp/options 文件为如下内容:



oss.linuxpk.com 2008 年第 10 期 87


经验技巧
detach
Modem
Lock
crtscts
asyncmap 0
netmask 255.255.255.0
proxyarp
ms-dns 192.168.11.1

“detach”选项非常重要。如果不指定这个选项,拨号程序就会进入后台,使得 Shell 脚本退出,随之而来


的是串行线路被挂断,导致连接中止。“detach”防止了 tty 设备脱离 PPPD 的控制。

“Modem”选项使得 PPPD 监视 DTR 引线,可以观察到对等点是否已掉线。

“Lock”选项指定在串行设备上使用 UUCP 风格的锁定。

“crtscts”选项用以打开硬件握手信号。

“asyncmap 0”设置了异步字符映射,这个映射指定控制字符不能直接通过连接发送,需要先进行转义。

“netmask 255.255.255.0”设定 PPP 网络接口的网络掩码。

“proxyarp”选项打开了 ARP 代理功能。

“ms-dns 192.168.11.1”指定了局域网内的 DNS 服务器地址,如没有可以不设。

➢ 给拨入用户分配 IP

创建/etc/ppp/options.ttyS0 和/etc/ppp/options.ttyS1 两个文件,内容如下:

# vi options.ttyS0

192.168.11.3:192.168.11.242

# vi options.ttyS1

192.168.11.3:192.168.11.243

其中,“192.168.11.3”是用作拨号服务器的那台 Linux 机器的 IP 地址;“192.168.11.242”和


“192.168.11.243”是分别指定给 COM1 口和 COM2 口拨入用户的 IP 地址。

➢ 口令验证

编辑文件/etc/ppp/pap-secrets,内容如下:

* * "secret" 192.168.11.242
* * "password" 192.168.11.243


oss.linuxpk.com 2008 年第 10 期 88

经验技巧
如上所示,每行代码包含四列,分别代表用户名、服务器地址、口令值和 IP 地址列表。“*”表示可
以与任何内容进行匹配。

注意事项
如果是老版本的 Red Hat,则必须删除/etc/ppp/pap-secrets 文件,否则用户拨进来不能分配 IP
地址。

用户拨入后,如果需要访问局域网内的其(下转第 69 页)(上接第 68 页)它服务器,就必须打开


IP 转发功能:

#echo 1 > /proc/sys/net/ipv4/ip_forward

要想在空闲一段时间后自动解除连接,需要在/etc/ppp/options 中加入如下一行:
➢ idle 600

上述代码中,“600”表示 600 秒,即 10 分钟。

如果在相应目录下找不到/sbin/mgetty 文件和/etc/mgetty+sendfax/login.config 文件,则需要


安装 mgetty 软件包。

Linux 下体验无线网络
萧易
今天终于体验到在 Linux 下使用无线网络来畅游的乐趣了,在兴奋之余记录下自己的足迹,希望对朋
友们会有一点小小的帮助。

还是先来说一下自己的实际情况吧。我的本子是英特尔的 3945 网卡,系统为 Debian,使用的安装


源为 unstable,内核为自己编译的 2.6.24.2。当然了,现在的 unstable 源也早就有了 2.6.24 的内核,
所以也就没有自己编译的必要了。在这里不得不说一下 Debian 的 unstable 源。unstable 说起来是不
稳定源,但是自己一直在使用这个源,从来没有觉得不稳定过。所以对于个人桌面用户来说,还是推荐
unstable 源。

自己早先的无线网卡驱动是使用 Debian 的 m-a 驱动编译工具来编译安装的。个人觉得这个驱动安


装工具还真是相当的方便,可以说是傻瓜的可以,不会叫人觉得有太大的驱动安装的痛苦。但是自由安
装成功了以后,一直没有找到适用的机会。本来我们学校里面无线覆盖范围就小,加之又不稳定,无线
畅游的体验真是无从谈起。


oss.linuxpk.com 2008 年第 10 期 89

经验技巧
后来 Linux 内核升级到了 2.6.24,自己也就想着要升级一下。在这里就不得不抱怨一下 Debian 的
源了,Debian 源中的软件真是保守的可以,就是 unstable 中的源也不会新版本软件或内核即时更新的
地步,当然这也是为了稳定性的考虑。既然源中没有,那就只有自己编译了。当然 Debian 系统中的内
核编译安装也是相当的方便,如此算来 Debian 系统真是相当方便的说啊。下载源码,解包,编译,安
装,一切都顺利搞定。换了新内核,也需要再重新编译安装一下无线网卡的驱动啊。自以为轻车熟路的
使用 m-a 来编译驱动模块,结果最后的结果却是编译不成功。真是怪哉,怎么会这样呢?到网上
Google 一下,原来是自从 2.6.24 开始,内核中已内建了对 3945 无线网卡的支持,无需要自己编译安
装,也不再支持以前版本驱动模块的安装。哈哈,原来是这一回,省去了自己编译安装的麻烦,这真是
一件好事。再仔细看下,说是无需要自己编译安装,只需要载入相应的驱动模块,再安装一个无线工具
就可以了。无线工具也就是 wireless-tools,提供一些相应的无线配置使用的工具。而无线驱动模块也
就是 iwl3945。使用 lsmod 查看一下,发现系统并没有载入。那就只好使用 modprobe 工具手动载入
了。运行命令,结果却说没有相应的驱动模块。郁闷的说啊。怎么会这样呢?

正在不知所措的时候突然想起编译内核的时候似乎并没有选中支持 3945 无线网卡。立马查看一下内


核编译时的配置文件,晕啊,还真是这样。于是选中相应的模块支持,再次编译安装。使用新内核重新
启动后再查看一下,哈哈,可以看到载入的驱动模块了。

驱动模块算是安装成功了,下面我们要安装无线工具:

# apt-get install wireless-tools

然后可以看一下我们的设备情况:

# ifconfig

或是使用 iwconfig 命令。

一般来说我们会看到这样的设备:

eth0:这个是我们的有线网卡啦。

wlan0:这个就是我们的无线网卡。

我们还需配置相应的无线接口:

# vim /etc/network/interfaces

例如下面是我的配置情况:

# wireless wlan0
iface wlan0 inet dhcp
wireless-essid "4F-1"

在这里具体的 wireless-essid 部分可以后来进行编辑,之所这样做,是为了可以使下面的正常运行:


oss.linuxpk.com 2008 年第 10 期 90

经验技巧
# ifconfig wlan0 up

如果没有编辑这个配置文件,会出现没有网络接口的错误。

运行这个命令之后,我们就可以使用 iwlist 命令来搜索附近的无线网络了:

# iwlist wlan0 scan

在搜索到无线网络后,就可以使用 iwconfig 命令进行相应的配置:

# iwconfig wlan0 channel 1 essid "4F-1"

上面是在我这里运行的命令,我们可以根据搜索的结果来更改 channel 与 essid 的参数值,然后将


相应的 essid 参数值写入我们的网络配置文件中的 wireless-essid 部分,保存退出后就可以启动无线网
卡了:

# ifup wlan0

我这里的配置是使用 DHCP,运行这个命令以后就进行连接并分配 IP 地址。如果一切正常我们就可


以无线来体验网络乐趣了。
That's all~~Enjoy it~~

PS:我在安装成功以后好久都没有体验成功无线网络,今天终于试验成功,所以记下这些内容。但
是因为过去的时日已经很长了,所以难免有些地方记忆错误。欢迎朋友们批评指正。:)

Linux 操作系统下运行命令时 CTRL+Z 的作用


命令运行时使用 CTRL+Z,强制当前进程转为后台,并使之停止。

1. 使进程恢复运行(后台)
(1)使用命令 bg
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01

*这里使用 CTRL+Z,此时 serv01 是停止状态*


[1]+ Stopped ./tcpserv01
zuii@zuii-desktop:~/unp/tcpcliserv$ bg

[1]+ ./tcpserv01 & *此时 serv01 运行在后台*


zuii@zuii-desktop:~/unp/tcpcliserv$


oss.linuxpk.com 2008 年第 10 期 91

经验技巧
(2)如果用 CTRL+Z 停止了几个程序呢?
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ jobs
[1]- Running ./tcpserv01 &
[2]+ Stopped ./tcpcli01 127.0.0.1
zuii@zuii-desktop:~/unp/tcpcliserv$ bg %1

bash: bg:任务 1 已转入后台 *后台运行*

2. 使进程恢复至前台运行
Example:
zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04
[1]+ Stopped ./tcpserv04
zuii@zuii-desktop:~/unp/tcpcliserv$ fg
./tcpserv04

总结:
(1) CTRL+Z 停止进程并放入后台

(2) jobs 显示当前暂停的进程

(3) bg %N 使第 N 个任务在后台运行(%前有空格)

(4) fg %N 使第 N 个任务在前台运行

默认 bg,fg 不带%N 时表示对最后一个进程操作!

Linux 服务器下误删除文件的解决方法
Linux 服务器操作已经非常简单,但是难免会有人犯下一些小的错误,比如说误删文件,该文章将告
诉你如何快速解决此问题。

服务器误删了/usr/bin 和/usr/sbin 目录,然后,从别的地方拷贝这两个目录过来,发现可能很多是


链接等非普通文件,可拷贝的时候对链接的处理不知道应加什么参数,所以,一百多兆的东西拷贝了近
一个 G,最后,先给 tar 了一下,再拷贝。


oss.linuxpk.com 2008 年第 10 期 92

经验技巧
这样,服务器基本弄好,建议:

1.不要直接用 root 登入,特别是不熟悉的人。

2.建议需要执行 root 权限命令的使用 sudo,少用 su;

3.可用 visudo 来配置需要执行的 root 权限命令。


eg: xxx ALL=/sbin/mount,/sbin/unmount,/sbin/ifconfig NOPASSWD: ALL

rm 命令不行,但是,还有“后遗症”:

1.登入时,'linux': unknown terminal type;

2.使用 top, clear (知道的)时, 因为 terminal type 问题;

3.vim 也是类似问题,不可操作;已解决,但只能用基本模式;

4.tftp、telnet 服务,已解决。


oss.linuxpk.com 2008 年第 10 期 93

企业应用

Nginx 0.7.x + PHP 5.2.6(FastCGI)搭


建胜过 Apache 十倍的 Web 服务器
张宴
前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web 服务器的第 4 篇文章。本系列文章
作为国内最早详细介绍 Nginx + PHP 安装、配置、使用的资料之一,为推动 Nginx 在国内的发展产生
了积极的作用。这是一篇关于 Nginx 0.7.x 系列版本的文章,安装、配置方式与第 3 篇文章相差不大,
但配置参数有不同。Nginx 0.7.x 系列版本虽然为开发版,但在很多大型网站的生产环境中已经使用。

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,


也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev
为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行
超过两年半了。Igor 将源代码以类 BSD 许可证的形式发布。

Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,


其中包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com 等视频分享网站,Discuz!
官方论坛、水木社区等知名论坛,豆瓣、YUPOO 相册、海内 SNS、迅雷在线等新兴 Web 2.0 网站。

Nginx 的官方中文维基:http://wiki.codemongers.com/NginxChs

在高并发连接的情况下,Nginx 是 Apache 服务器不错的替代品。Nginx 同时也可以作为 7 层负载


均衡服务器来使用。根据我的测试结果,Nginx 0.7.17 + PHP 5.2.6 (FastCGI) 可以承受 3 万以上的
并发连接数,相当于同等环境下 Apache 的 10 倍。

根据我的经验,4GB 内存的服务器+Apache(prefork 模式)一般只能处理 3000 个并发连接,因


为它们将占用 3GB 以上的内存,还得为系统预留 1GB 的内存。我曾经就有两台 Apache 服务器,因为
在配置文件中设置的 MaxClients 为 4000,当 Apache 并发连接数达到 3800 时,导致服务器内存和
Swap 空间用满而崩溃。

而这台 Nginx 0.7.17 + PHP 5.2.6 (FastCGI) 服务器在 3 万并发连接下,开启的 10 个 Nginx 进


程消耗 150M 内存(15M*10=150M),开启的 64 个 php-cgi 进程消耗 1280M 内存
(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到 2GB 内存。如果服务器内存较小,完
全可以只开启 25 个 php-cgi 进程,这样 php-cgi 消耗的总内存数才 500M。

在 3 万并发连接下,访问 Nginx 0.7.17 + PHP 5.2.6 (FastCGI) 服务器的 PHP 程序,仍然速度飞


快。下图为 Nginx 的状态监控页面,显示的活动连接数为 28457(关于 Nginx 的监控页配置,会在本


oss.linuxpk.com 2008 年第 10 期 94

企业应用
文接下来所给出的 Nginx 配置文件中写明):

我生产环境下的两台 Nginx + PHP5(FastCGI)服务器,跑多个一般复杂的纯 PHP 动态程序,单


台 Nginx + PHP5(FastCGI)服务器跑 PHP 动态程序的处理能力已经超过“700 次请求/秒”,相当
于每天可以承受 6000 万(700*60*60*24=60480000)的访问量(更多信息见此),而服务器的系
统负载也不高:

安装步骤:

(系统要求:Linux 2.6+ 内核,本文中的 Linux 操作系统为 CentOS 5.1,另在 RedHat AS4 上


也安装成功)

获取相关开源程序:


oss.linuxpk.com 2008 年第 10 期 95

企业应用
利用 CentOS Linux 系统自带的 yum 命令安装、升级所需的程序库
(RedHat 等其他 Linux 发行版可从安装光盘中找到这些程序库的
RPM 包,进行安装):
sudo -s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel
freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel
glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel

RedHat 等其他 Linux 发行版可从安装光盘中找到这些程序库的 RPM 包(事


先可通过类似“rpm -qa | grep libjpeg”的命令查看所需的 RPM 包
是否存在,通常是“xxx-devel”不存在,需要安装)。RedHat 可以
直接利用 CentOS 的 RPM 包安装,以下是 RPM 包下载网址:
1.RedHat AS4 & CentOS 4

  http://mirror.be10.com/centos/4/os/i386/CentOS/RPMS/

  http://mirror.be10.com/centos/4/os/x86_64/CentOS/RPMS/

2.RedHat AS5 & CentOS 5

  http://mirror.be10.com/centos/5/os/i386/CentOS/

  http://mirror.be10.com/centos/5/os/x86_64/CentOS/

3.RPM 包搜索网站

  http://rpm.pbone.net/

  http://www.rpmfind.net/

下载程序源码包:
本文中提到的所有开源软件为截止到 2008 年 8 月 28 日的最新稳定版。

mkdir -p /data0/software
cd /data0/software
wget http://sysoev.ru/nginx/nginx-0.7.17.tar.gz
wget http://www.php.net/get/php-5.2.6.tar.gz/from/this/mirror
wget http://php-fpm.anight.org/downloads/head/php-5.2.6-fpm-0.5.9.diff.gz


oss.linuxpk.com 2008 年第 10 期 96

企业应用
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.26-
rc.tar.gz/from/http://mirror.x10.com/mirror/mysql/
wget http://blog.s135.com/soft/linux/mysql/mysql-5.1.26-rc.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz
wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?
modtime=1171868460&big_mirror=0"
wget http://mirror.optus.net/sourceforge/m/mc/mcrypt/libmcrypt-2.5.8.tar.gz
wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.7.tar.gz?
modtime=1194463373&big_mirror=0"
wget http://mirror.optus.net/sourceforge/m/mc/mcrypt/mcrypt-2.6.7.tar.gz
wget http://pecl.php.net/get/memcache-2.2.3.tgz
wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.tar.gz?
modtime=1175740843&big_mirror=0"
wget http://mirror.optus.net/sourceforge/m/mh/mhash/mhash-0.9.9.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.tar.gz
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2

安装 PHP 5.2.6(FastCGI 模式)


1 编译安装 PHP 5.2.6 所需的支持库:

tar zxvf libiconv-1.12.tar.gz


cd libiconv-1.12/
./configure --prefix=/usr/local
make
make install
cd ../
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../
tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure
make
make install
cd ../
cp /usr/local/lib/libmcrypt.* /usr/lib
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

tar zxvf mcrypt-2.6.7.tar.gz


cd mcrypt-2.6.7/
./configure
make
make install
cd ../

2 编译安装 MySQL 5.1.26-rc


oss.linuxpk.com 2008 年第 10 期 97

企业应用
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
tar zxvf mysql-5.1.26-rc.tar.gz
cd mysql-5.1.26-rc/
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-
extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-
readline --with-ssl --with-embedded-server --enable-local-infile
make && make install
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
cp support-files/my-medium.cnf /usr/local/webserver/mysql/my.cnf
cd ../

附:以下为附加步骤,如果你想在这台服务器上运行 MySQL 数据库,则执行以下两步。如


果你只是希望让 PHP 支持 MySQL 扩展库,能够连接其他服务器上的 MySQL 数据库,那么,
以下两步无需执行。

3 以 mysql 用户帐号的身份建立数据表:

/usr/local/webserver/mysql/bin/mysql_install_db --defaults-
file=/usr/local/webserver/mysql/my.cnf --basedir=/usr/local/webserver/mysql
--datadir=/usr/local/webserver/mysql/data --user=mysql --pid-file=/usr/local/
webserver/mysql/mysql.pid --skip-locking --port=3306 --socket=/tmp/mysql.sock

4 启动 MySQL(最后的&表示在后台运行)

/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-


file=/usr/local/webserver/mysql/my.cnf &

5 编译安装 PHP(FastCGI 模式)

tar zxvf php-5.2.6.tar.gz


gzip -cd php-5.2.6-fpm-0.5.9.diff.gz | patch -d php-5.2.6 -p1
cd php-5.2.6/
./configure --prefix=/usr/local/webserver/php --with-config-file-
path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql
--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-
dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib
--with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path
--enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-
inline-optimization --with-curl --with-curlwrappers --enable-mbregex
--enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring
--with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl
sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
make
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../

6 编译安装 PHP5 扩展模块

tar zxvf memcache-2.2.3.tgz


cd memcache-2.2.3/
/usr/local/webserver/php/bin/phpize
./configure --with-php-config=/usr/local/webserver/php/bin/php-config
make


oss.linuxpk.com 2008 年第 10 期 98

企业应用
make install
cd ../
tar jxvf eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3/
/usr/local/webserver/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-
config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

7 修改 php.ini 文件

手工修改:查找/usr/local/webserver/php/etc/php.ini 中的 extension_dir = "./"


修改为 extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-
non-zts-20060613/"
并在此行后增加以下几行,然后保存:
extension = "memcache.so"
再查找 output_buffering = Off
修改为 output_buffering = On
自动修改:若嫌手工修改麻烦,可执行以下 shell 命令,自动完成对 php.ini 文件的修改:
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/
php/extensions/no-debug-non-zts-20060613/"\nextension = "memcache.so"\n#'
/usr/local/webserver/php/etc/php.ini
sed -i 's#output_buffering = Off#output_buffering = On#'
/usr/local/webserver/php/etc/php.ini

8 配置 eAccelerator 加速 PHP:

mkdir -p /usr/local/webserver/eaccelerator_cache
vi /usr/local/webserver/php/etc/php.ini

按 shift+g 键跳到配置文件的最末尾,加上以下配置信息:

[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-
zts-20060613/eaccelerator.so"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="300"
eaccelerator.shm_prune_period="120"
eaccelerator.shm_only="0"


oss.linuxpk.com 2008 年第 10 期 99

企业应用
eaccelerator.compress="1"
eaccelerator.compress_level="9"

修改配置文件:

vi /etc/sysctl.conf

输入以下内容:

kernel.shmmax = 134217728

然后执行以下命令使配置生效:

/sbin/sysctl -p

9 创建 www 用户和组,以及供 blog.s135.com 和 www.s135.com 两个虚拟主机使用的目录:

/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /data0/htdocs/blog
chmod +w /data0/htdocs/blog
chown -R www:www /data0/htdocs/blog
mkdir -p /data0/htdocs/www
chmod +w /data0/htdocs/www
chown -R www:www /data0/htdocs/www

10 创建 php-fpm 配置文件(php-fpm 是为 PHP 打的一个 FastCGI 管理补丁,可以平滑变更


php.ini 配置而无需重启 php-cgi):

在/usr/local/webserver/php/etc/目录中创建 php-fpm.conf 文件:

rm -f /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf

输入以下内容(如果您安装 Nginx + PHP 用于程序调试,请将以下的<value


name="display_errors">0</value>改为<value
name="display_errors">1</value>,以便显示 PHP 错误信息,否则,Nginx 会报状态
为 500 的空白错误页):

<?xml version="1.0" ?>


<configuration>

All relative paths in this config are relative to php's install prefix

<section name="global_options">

Pid file


oss.linuxpk.com 2008 年第 10 期 100

企业应用
<value name="pid_file">/usr/local/webserver/php/logs/php-fpm.pid</value>

Error log file

<value name="error_log">/usr/local/webserver/php/logs/php-fpm.log</value>

Log level

<value name="log_level">notice</value>

When this amount of php processes exited with SIGSEGV or SIGBUS ...

<value name="emergency_restart_threshold">10</value>

... in a less than this interval of time, a graceful restart will be


initiated.

Useful to work around accidental curruptions in accelerator's shared


memory.

<value name="emergency_restart_interval">1m</value>

Time limit on waiting child's reaction on signals from master

<value name="process_control_timeout">5s</value>

Set to 'no' to debug fpm

<value name="daemonize">yes</value>

</section>

<workers>

<section name="pool">

Name of pool. Used in logs and stats.

<value name="name">default</value>


oss.linuxpk.com 2008 年第 10 期 101

企业应用
Address to accept fastcgi requests on.

Valid syntax is 'ip.ad.re.ss:port' or just 'port' or


'/path/to/unix/socket'

<value name="listen_address">127.0.0.1:9000</value>

<value name="listen_options">

Set listen(2) backlog

<value name="backlog">-1</value>

Set permissions for unix socket, if one used.

In Linux read/write permissions must be set in order to allow


connections from web server.

Many BSD-derrived systems allow connections regardless of permissions.

<value name="owner"></value>

<value name="group"></value>

<value name="mode">0666</value>

</value>

Additional php.ini defines, specific to this pool of workers.

<value name="php_defines">

<value name="sendmail_path">/usr/sbin/sendmail -t -i</value>

<value name="display_errors">1</value>

</value>

Unix user of processes

<value name="user">www</value>

Unix group of processes

<value name="group">www</value>

Process manager settings


oss.linuxpk.com 2008 年第 10 期 102

企业应用
<value name="pm">

Sets style of controling worker process count.

Valid values are 'static' and 'apache-like'

<value name="style">static</value>

Sets the limit on the number of simultaneous requests that will be


served.

Equivalent to Apache MaxClients directive.

Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi

Used with any pm_style.

<value name="max_children">128</value>

Settings group for 'apache-like' pm style

<value name="apache_like">

Sets the number of server processes created on startup.

Used only when 'apache-like' pm_style is selected

<value name="StartServers">20</value>

Sets the desired minimum number of idle server processes.

Used only when 'apache-like' pm_style is selected

<value name="MinSpareServers">5</value>

Sets the desired maximum number of idle server processes.

Used only when 'apache-like' pm_style is selected

<value name="MaxSpareServers">35</value>

</value>

</value>


oss.linuxpk.com 2008 年第 10 期 103

企业应用

The timeout (in seconds) for serving a single request after which the
worker process will be terminated

Should be used when 'max_execution_time' ini option does not stop script
execution for some reason

'0s' means 'off'

<value name="request_terminate_timeout">0s</value>

The timeout (in seconds) for serving of single request after which a php
backtrace will be dumped to slow.log file

'0s' means 'off'

<value name="request_slowlog_timeout">0s</value>

The log file for slow requests

<value name="slowlog">logs/slow.log</value>

Set open file desc rlimit

<value name="rlimit_files">51200</value>

Set max core size rlimit

<value name="rlimit_core">0</value>

Chroot to this directory at the start, absolute path

<value name="chroot"></value>

Chdir to this directory at the start, absolute path

<value name="chdir"></value>

Redirect workers' stdout and stderr into main error log.

If not set, they will be redirected to /dev/null, according to FastCGI


specs

<value name="catch_workers_output">yes</value>


oss.linuxpk.com 2008 年第 10 期 104

企业应用
How much requests each process should execute before respawn.

Useful to work around memory leaks in 3rd party libraries.

For endless request processing please specify 0

Equivalent to PHP_FCGI_MAX_REQUESTS

<value name="max_requests">10240</value>

Comma separated list of ipv4 addresses of FastCGI clients that allowed to


connect.

Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi


(5.2.2+)

Makes sense only with AF_INET listening socket.

<value name="allowed_clients">127.0.0.1</value>

Pass environment variables like LD_LIBRARY_PATH

All $VARIABLEs are taken from current environment

<value name="environment">

<value name="HOSTNAME">$HOSTNAME</value>

<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>

<value name="TMP">/tmp</value>

<value name="TMPDIR">/tmp</value>

<value name="TEMP">/tmp</value>

<value name="OSTYPE">$OSTYPE</value>

<value name="MACHTYPE">$MACHTYPE</value>

<value name="MALLOC_CHECK_">2</value>

</value>

</section>

</workers>

</configuration>


oss.linuxpk.com 2008 年第 10 期 105

企业应用
11 启动 php-cgi 进程,监听 127.0.0.1 的 9000 端口,进程数为 200(如果服务器内存小于
3GB,可以只开启 64 个进程),用户为 www:

ulimit -SHn 51200


/usr/local/webserver/php/sbin/php-fpm start

注:/usr/local/webserver/php/sbin/php-fpm 还有其他参数,包括:start|stop|quit|
restart|reload|logrotate,修改 php.ini 后不重启 php-cgi,重新加载配置文件使用
reload。

三、安装 Nginx 0.7.17


1. 安装 Nginx 所需的 pcre 库:

tar zxvf pcre-7.7.tar.gz


cd pcre-7.7/
./configure
make && make install
cd ../

2. 安装 Nginx

tar zxvf nginx-0.7.17.tar.gz


cd nginx-0.7.17/
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx
--with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../

3. 创建 Nginx 日志目录

mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs

4. 创建 Nginx 配置文件

1. 在/usr/local/webserver/nginx/conf/目录中创建 nginx.conf 文件:

rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf

输入以下内容:

user www www;


worker_processes 8;

error_log /data1/logs/nginx_error.log crit;


oss.linuxpk.com 2008 年第 10 期 106

企业应用
pid /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by
this process.
worker_rlimit_nofile 51200;

events
{

use epoll;

worker_connections 51200;
}

http
{

include mime.types;

default_type application/octet-stream;

#charset gb2312;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32k;

sendfile on;

tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;


oss.linuxpk.com 2008 年第 10 期 107

企业应用
fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css


application/xml;

gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;

server

listen 80;

server_name blog.s135.com;

index index.html index.htm index.php;

root /data0/htdocs/blog;

#limit_conn crawler 20;

location ~ .*\.(php|php5)?$

#fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;


oss.linuxpk.com 2008 年第 10 期 108

企业应用
include fcgi.conf;

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

expires 30d;

location ~ .*\.(js|css)?$

expires 1h;

log_format access '$remote_addr - $remote_user [$time_local]


"$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" $http_x_forwarded_for';

access_log /data1/logs/access.log access;

server

listen 80;

server_name www.s135.com;

index index.html index.htm index.php;

root /data0/htdocs/www;

location ~ .*\.(php|php5)?$

#fastcgi_pass unix:/tmp/php-cgi.sock;


oss.linuxpk.com 2008 年第 10 期 109

企业应用
fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fcgi.conf;

log_format wwwlogs '$remote_addr - $remote_user [$time_local]


"$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" $http_x_forwarded_for';

access_log /data1/logs/wwwlogs.log wwwlogs;

server

listen 80;

server_name status.blog.s135.com;

location / {

stub_status on;

access_log off;

}
}

2. 在/usr/local/webserver/nginx/conf/目录中创建 fcgi.conf 文件:

vi /usr/local/webserver/nginx/conf/fcgi.conf

输入以下内容:

fastcgi_param GATEWAY_INTERFACE CGI/1.1;


fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param QUERY_STRING $query_string;


fastcgi_param REQUEST_METHOD $request_method;


oss.linuxpk.com 2008 年第 10 期 110

企业应用
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;


fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param REMOTE_ADDR $remote_addr;


fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect


fastcgi_param REDIRECT_STATUS 200;

5. 启动 Nginx

ulimit -SHn 51200


/usr/local/webserver/nginx/sbin/nginx

配置开机自动启动 Nginx + PHP


vi /etc/rc.local

在末尾增加以下内容:

ulimit -SHn 51200


/usr/local/webserver/php/sbin/php-fpm start
/usr/local/webserver/nginx/sbin/nginx

优化 Linux 内核参数
vi /etc/sysctl.conf

在末尾增加以下内容:

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300


oss.linuxpk.com 2008 年第 10 期 111

企业应用
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000

使配置立即生效:

/sbin/sysctl -p

在不停止 Nginx 服务的情况下平滑变更 Nginx 配置


1、修改/usr/local/webserver/nginx/conf/nginx.conf 配置文件后,请执行以下命令检查配置文
件是否正确:

/usr/local/webserver/nginx/sbin/nginx -t

如果屏幕显示以下两行信息,说明配置文件正确:

the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok


the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested
successfully

2、这时,输入以下命令查看 Nginx 主进程号:

ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

屏幕显示的即为 Nginx 主进程号,例如:


6302

这时,执行以下命令即可使修改过的 Nginx 配置文件生效:

kill -HUP 6302

或者无需这么麻烦,找到 Nginx 的 Pid 文件:


kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`

编写每天定时切割 Nginx 日志的脚本


1、创建脚本/usr/local/nginx/sbin/cut_nginx_log.sh

vi /usr/local/nginx/sbin/cut_nginx_log.sh

输入以下内容:

#!/bin/bash
# This script run at 00:00


oss.linuxpk.com 2008 年第 10 期 112

企业应用
# The Nginx logs path
logs_path="/usr/local/webserver/nginx/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/


mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d
"yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`

2、设置 crontab,每天凌晨 00:00 切割 nginx 访问日志

crontab -e

输入以下内容:
00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh

本文若有小的修改,会第一时间在以下网址发布:
http://blog.s135.com/read.php/366.htm

附:文章修改历史

● [2008 年 08 月 29 日] [Version 4.0] 撰写本文

● [2008 年 09 月 03 日] [Version 4.1] 修改了 nginx.conf 文件有关 gzip 压缩的项,


“gzip_http_version 1.1;”改为“gzip_http_version 1.0;”,增加一项“gzip_vary on;”,目的是
为了让 Nginx 前端的 Squid 2.5/2.6 缓存服务器能够缓存经过 gzip 压缩的页面。另外,将 nginx 版本
由 0.7.13 升级到最新的 0.7.14。

● [2008 年 10 月 06 日] [Version 4.2] 增加第七章──“编写每天定时切割 Nginx 日志的脚本”;


升级 Nginx 版本到 0.7.17;升级 PHP FastCGI 补丁到 php-5.2.6-fpm-0.5.9.diff.gz;修改 php-
fpm.conf 配置文件。

张宴,1985 年 5 月生于湖南湘西。1995 年(小学五年级)接触 386 电脑与 DOS


系统,1999 年接触互联网与 HTML 网页制作,2003 年(大学一年级)开始涉足
Linux、Apache、PHP、MySQL 编程,以及校网络中心的多台 Linux 服务器配
置、维护。2007 年毕业后,曾在新浪网等公司任系统工程师、系统架构师,工
作内容涉及:服务器系统架构设计与部署、系统运维与调优、网络故障解决、网
站后端以及接口类 PHP 程序开发、Linux 开源软件二次开发、服务器监控系统开
发。精通 Nginx、Squid、Memcached、MySQL、Apache、Sphinx 等网络服
务应用,以及 NetScaler、F5 BIG-IP 等四/七层负载均衡交换机配置管理。根据
业务需求进行过 Memcached、Squid 的二次开发,以及 MySQL 5.1 的中文全
文索引插件开发。具有 CDN 部署,跨 IDC 机房的数据传输,服务器电信、网通南北分布构架,分类搜索引擎与
准实时索引设计经验;具有互联网海量数据处理、海量访问技术架构能力,拥有最大的门户类 FLV 视频分享网站
──新浪播客架构设计经验。


oss.linuxpk.com 2008 年第 10 期 113

企业应用

Linux 网络中 DHCP 和 DNS 服务快速整合


梁振江
在日常的网络维护,特别是校园网维护中,管理数百台机器的 IP 地址是比较令系统管理员疼的一件
事。现实情况一,校园网的 Internet 的连接采用代理服务器或路由器模式,为保证各工作站能正常访问
Internet,必须在每个客户端添加网关设置;情况二,学校的校园网发布,一般都分为对校内网和对外
网,考虑到校内师生之间计算机访问的方便,需提供校内域名解析(例如我们某学校对内使用
www.mycollege.edu.cn,对外 www.mycollege.com),因此要在每个客户端计算机添加校内 DNS
服务器设置。

一般来说,校园网里都会提供 DHCP 服务和 DNS 服务。DHCP 称为动态主机配置协议。DHCP 服务


允许工作站连接到网络并且自动获取一个 IP 地址。DHCP 在快速发送客户网络配置方面很有用场。当配
置客户系统时,管理员可以选择 DHCP,并不必输入 IP 地址、子网掩码、网关、或 DNS 服务器。客户
从 DHCP 服务器中检索这些信息。DHCP 在管理员想改变大量系统的 IP 地址时也大有用途。与其重新
配置所有系统,管理员只需编辑服务器上的一个 DHCP 配置文件即可获得新 IP 地址集合。如果某机构
的 DNS 服务器改变了,这种改变只需在 DHCP 服务器上而不必在 DHCP 客户上进行。一旦客户的网络
被重新启动(或客户重新引导系统),改变就会生效。 除此之外,如果便携电脑或任何类型的可移计算
机被配置使用 DHCP,只要每个办公室都有一个允许它联网的 DHCP 服务器,它就可以不必重新配置而
在办公室间自由移动。

DNS 服务器主要用来主 IP 地址和主机名机之间的解析。通常的,我们的校园网的 Internet 服务提


供商(ISP),例如电信,会提供 DNS 服务器,我们还可以在校园网中提供自己的 DNS 服务器,作为
解析我们网内主机到 ISP DNS 服务器地址缓存之用。那么我们内网之间的计算机如何互相解析呢?ISP
的 DNS 服务器当然不会有我们内网计算机主机的列表。大多数 DNS 服务器也做不到这点,除非我们动
态的更新 IPS 的 DNS 服务器列表或者使用静态 IP 地址,WINDOWS 使用 NBNS 协议可以做到
(NetBIOS 名称服务器(NBNS = NetBIOS Name Service)协议是 TCP/IP 上的 NetBIOS (NetBT)
协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法。)。 如果我们的
校园网里存在大量的 UNIX/LINUX 主机,这些 UNIX/LINUX 主机之间将是无法互相解析的,因为
UNIX/LINUX 不支持 NBNS 协议,每台 UNIX/LINUX 主机的 IP 地址也是动态分配的。通常的 DNS 服
务器只能解析外部的 URL 地址或静态 IP 地址主机,除非我们动态更新或者使用静态 IP 地址,所以我们
不得不在校园网内架设自己的 DNS 服务器来解决这个问题,使得校园网网内 UNIX/LINUX 主机之间可
以互相解析、能访问内部的 URL,最佳的解决方法是整合 LINUX 服务器的 DHCP 和 DNS 服务,使得两
者能随时保持数据同步,这样就可以解决内网中动态 IP 下的 UNIX/LINUX 主机之间无法相互解析访问
的问题了。

一次性为每个客户机添加网关和 DNS 解析地址并不难。但问题是,提供服务的各服务器地址不能变。


oss.linuxpk.com 2008 年第 10 期 114

企业应用
否则因故要调整网关或校内 DNS 解析地址,工作量可想而知。那能不能把这些所有的服务固化在一台机
器上呢?实际上,我们平时使用的 DHCP(动态主机配置协议)服务本身就有客户机网关配置和 DNS 服
务指向功能。而我们平时只注意到 DHCP 动态地址分配功能,而把其他服务忽视了。

根据以上问题,我们需要这样的解决方法。在校园网中有一台运行正常的基于 LINUX 操作系统的


DHCP 服务器,其地址为 192.168.1.1,各客户机器采用动态分配地址,并且整个网络状态良好。现在
要求以代理模式实现各客户机与 Internet 互联以及提供学校内部 DNS 解析。以我们学校为例,代理服
务器地址为 192.168.1.254,DNS 服务器地址为 192.168.1.1,与 DHCP 相同。为了快速捆绑、整和
这两项服务,我们需要使用一个非常实用的应用程序--Dual DHCP DNS Server。Dual DHCP DNS
Server 是为 SOHO 网及小型局域网所设计的 DHCP/DNS 服务整合程序。具有功能强大、运行方便和系
统资源占用率低的特点。

1、下载及安装

1)到 http://freshmeat.net/redir/dualdhcpdnsserver/60635/url_homepage/dhcp-dns-
server 下载 dualserverV2.1.tar 压缩包,使用

#tar xzvf dualserverV2.1.tar 命令解压缩

2) 在 root 的权限下,通常使用如下命令运行 dualserver


/dualserver –v

Dualserver 的运行有两种模式,Debug 模式和 Daemon 模式,一般我们使用-v 选项即可完成


dualserver 的运行,有详细的过程显示。如果我们想要在 LINUX 系统启动的时候自动运行
Dualserver,可以在/etc/rc.d/rc.local 或者/etc/inittab 文件中添加 Dualserver。

3)运行过程中有如下几点要特别注意的:

◆确保网络中每台主机的计算机名不同名;

◆运行 Dualserver 的服务器端口 53 和端口 67 不能被占用;

◆宽带路由器自带的 DHCP 服务应该停用,如图所示。


oss.linuxpk.com 2008 年第 10 期 115

企业应用

2、服务器端及客户端配置

1) 配置服务器端

Dualserver 安装好后自动获取服务器的 IP、路由、网关地址等参数,基本无需人工进行复杂的配置。


上述所需的设置已经完成。此时的 DHCP 服务器不仅提供动态地址分配服务,而且还捆绑了代理网关设
置和 DNS 服务。Dualserver 默认 IP 租约时间为 3600 秒,IP 地址分配范围默认为 192.168.0.1 -
192.168.0.255,我们只要检查/etc/dualserver.ini 配置文件的各项参数是否和我们网络的参数相符即
可。

2) 配置客户端计算机

Dualserver 支持网络中所有的 windows/linux/unix 操作系统计算机,校园网内的其他客户机,在


具体网络属性设置时,只要把“TCP/IP 协议”设置成“自动获得 IP 地址”就可享受到所有的网络服务,
如图所示。


oss.linuxpk.com 2008 年第 10 期 116

企业应用

配置 OpenLDAP 使用 TLS 通信

马路遥
缺省的情况下,OpenLDAP 服务器和客户端之间使用明文通信,这在一定条件下是不安全的。
OpenLDAP 支持 TLS 加密,这需要制作证书和修改 OpenLDAP 的配置文件。

制作证书
制作证书的步骤如下:

进入/usr/share/ssl/misc 目录,如果此目录下已经存在 demoCA 目录,则应该先将 demoCA 目录


删除。

执行下列命令:


oss.linuxpk.com 2008 年第 10 期 117

企业应用
./CA -newcert

openssl rsa -in newreq.pem -out newkey.pem

第一个命令会询问一系列问题,其中“PEM pass phrase”(密码)和“Common Name”两项是必


需填写的。”Common Name”建议使用主机名称;密码则至少为 4 个字符;其他问题可以留空不填。

第二个命令会询问密码,回答必须和第一个命令相同。

执行完毕两个命令后会生成 newkey.pem 和 newreq.pem。将 newkey.pem 文件重命名为 slapd-


key.pem,并且放置到/etc/openldap/ssl 目录下,注意这个目录需要自己建立,放到其他位置亦可。

使用文本编辑器将 newreq.pem 中的 private key 部分删除,然后放置到/etc/openldap/ssl 目录下。


改名为 slapd-cert.pem。

修改配置文件
进入/usr/share/ssl/misc 目录,如果此目录下已经存在 demoCA 目录,则应该先将 demoCA 目录
删除。

1../CA –newca

这个命令会询问一系列问题,其中“PEM pass phrase”(密码)、“Common Name” 两项是必填


的,”Common Name”建议使用主机名称;密码则至少为 4 个字符,其他问题可以留空不填。

2.openssl req –new –nodes –keyout newreq.pem –out newreq.pem

这里也会问一系列问题,和上一步的回答方法一样。

3../CA –sign

这里要回答第一步时键入的密码。

4.创建/etc/openldap/ssl 目录,使用别的目录亦可。

5.mv demoCA/cacert.pem /etc/openldap/ssl

6. mv newcert.pem /etc/openldap/ssl/servercrt.pem

7. mv newreq.pem /etc/openldap/ssl/serverkey.pem

8. chown ldap:ldap /etc/openldap/ssl/serverkey.pem

9. chmod 600 /etc/openldap/ssl/serverkey.pem

10. 修改 slapd.conf 加入下列三行。

TLSCACertificateFile /etc/openldap/ssl/cacert.pem


oss.linuxpk.com 2008 年第 10 期 118

企业应用
TLSCertificateFile /etc/openldap/ssl/servercrt.pem

TLSCertificateKeyFile /etc/openldap/ssl/serverkey.pem

在客户端的/etc/openldap/ldap.conf 中加入“TLS_CACERT /etc/openldap/ssl/cacert.pem”,注


意此文件时从服务器上生成的。

第 8 步和第 9 步中修改了 serverkey.pem 文件的属主和权限,这是必需的。  

在使用 tls 的情况下,OpenLDAP 服务使用 389 和 636 端口,其中 389 端口仍然提供普通的 ldap 服
务,而 636 端口提供加密的 ldap 服务,即 ldaps 。

在命令行上链接 ldaps 服务器,必须指定-H 参数,如下例:

ldapsearch –x –b ‘dc=linux,dc=org’ –H ldaps://servername:636 其中“:636”的部分可以省


略。


oss.linuxpk.com 2008 年第 10 期 119

嵌入式

Linux:移动创新的真正未来
Benoit Schillings


我们面对事实,多数手机及其应用软件均索然无味。移动运营
商及其手机供应商总是努力使自己的产品在竞争中脱颖而出,
他们多半通过硬件性能来实现上述目的。手机体积变得越来越
小,具有彩色屏幕、摄像头,甚至可以播放音乐和视频。但是在我们本应在进
行网上购物、上网冲浪、或享受互动游戏的移动互联网领域发生了什么呢?手
机不是早已应该成为了我们日常生活中的"魔法杖"吗?

如果你问手机用户他们用手机做什么,大多数人会回答通话和发送短信。这
就是 20 年移动创新的成果。有些主要移动运营商仍未承认失败,而还在商讨要
关注利用 3G 网络可提供更出色的语音质量来和传统固化业务竞争。简直是浪费 奇趣科技首席技术官
Benoit Schillings
大好时机!

最大的疑问是,对移动运营商们投入巨资以增强 3G 带宽的高速分组接入功能,有没有任何令人兴奋
的方案可以使人们更关注于对它的创新利用呢?

当然有,但是手机行业需要快速采取行动以避免重蹈 PC 市场"行业标准"的覆辙。

推动手机市场复苏的时刻已然来临
到底是什么原因让手机创新裹足不前呢?随着手机性能越来越强大,越来越复杂,大量市场的手机生
产商发现他们越来越难以追赶市场需求。导致这一现象的原因更多的是因为历史和商业利益,而非技术
能力。

手机的设计和制造一直以来是个漫长、复杂的过程,涉及复杂的规格和数月的互用性测试。到目前为
止,手机制造商仍不得不进行大部分的软件集成工作。满足不同移动运营商制定的规格和要求已经是相
当繁琐的工作,更不用说将时间花在用户界面(UI)质量和产品差异化等工作上。

定义过程的复杂性限制了手机的发展速度和实验能力,而这些正是决定数据服务发展的重要因素。所
有精力被用来实现基础功能,而不是创造动态环境,进行新功能特性的测试、在终端用户服务发展过程
中实现真正的"自然选择"。

一些手机制造商试图通过制造能够满足所有人的所有需求的多功能设备(即移动通讯世界的"瑞士军


oss.linuxpk.com 2008 年第 10 期 120

嵌入式
刀")来逃避上述问题。然而,这些设备通常无法胜任所有的工作,用户也只是倾向于使用它有限的几项
功能。经验还表明所谓的"瑞士军刀"方法可能让用户更难使用手机的功能。Apple iPod 的成功在于它将
其功能减少到一定范围内并保证可以良好运行 - 事实是使用很简单。

移动运营商总是试图寻找能够为不同客户群量身设计创新性增值服务的快速、低成本的途径。他们需
要新的手机产品,能够充分利用他们投资的新移动网络功能,并且能够轻易的进行客户化配置以满足不
同的目标用户。问题是,自主的单片电路操作系统架构成为了满足上述需求的障碍,而不是解决方案。

大多数手机的开发都是尝试使新应用可被下载的机械装置--一种非常以计算机为中心的世界观。找到
基本体验中的新用功能可能是更好的方法,使用户可自己发现不断增加的新功能。将一系列随意排列的
功能放置于分层菜单下并不是向客户提供各种功能的最简单、最佳方法。用户倾向于原来的使用方法,
因此新功能必须非常便捷、直观,才能为他们所接受,从而改善客户体验。

现在,这是一场软件游戏
Linux 在移动设备中最大的机会是从硬件转向软件的差异,即迅速提供有竞争力价格的手机、提供有
吸引力的服务以及具有独特"视觉和感觉"的手机和用户界面的能力。

一开始,Linux 只被看作在价格方面比较有优势。但是现在,手机业已注意到 Linux 在其它许多方面


的吸引力。

Linux 能够轻易提供所有其它移动操作系统所提供的各种功能。核心技术已经成熟、启动时间大大提
高、电池寿命也比较出色。差异开始被转移到促进竞争的开放性和降低成本等方面。

一些较大的制造商已经看到了开源业务的光芒,并开始朝这个方向努力。但是,他们需要已建立的开
发者社区,即便可能,建立这样的社区也需要一定的时间。建立稳定的平台也需要时间,如果没有一定
水平的实验,无法进行反复的学习和修正过程。Linux 具备大型全球软件开发社区的优势,并有具备大量
综合性经验。此外,Linux 还具备较高的拓展性,从 Linux 到成熟的 Linux 解决方案,从非实时到硬实
时,并为开发人员提供了多样的环境和良好的开发工具。现在,找到良好的、经过测试的、适用于新代
码的 Linux 移动设备是比较容易的事情。

Linux 在智能手机市场已占有显著的市场份额。据 Gartner 市场分析家证实,2004 年到 2005 年间,


智能手机以每年 1000%的速度飞速发展。仅摩托罗拉在中国就已经卖出了近 100 万部 Linux 手机。

Linux 可以胜出
Linux 已经证实了它的能力远远不止仅是运行复杂的、任务艰巨的应用软件。互联网上一些最大型服
务器都在使用 Linux 系统的事实就恰恰证明了这一点。

和多数主要的移动操作系统不同,Linux 的特点是以标准组建架构配备可承载设备驱动器和模块,


oss.linuxpk.com 2008 年第 10 期 121

嵌入式
从而实现从基础硬件的和组件之间相互的提取,这一点对建立复杂软件系统非常重要。这样可确保运用
共享数据库来完成一定范围内的功能传输,例如数字版权管理(DRM)和安全功能。

移动运营商对于 Linux 设备在指定组件方面的自由度的青睐,更胜于基于正确代码的功能及严格的技


术规格。Linux 让移动运营商能够完全根据用户需求设计手机和用户界面,以满足自己在垂直细分市场的
品牌和客户定位。

对于移动设备制造商(如 OEM 和 ODM)来说,Linux 最突出的方面之一是它所提供给他们的对业务


走向的完全控制。 通过完全控制手机产品中的软件,制造商能够自由地和独立地快速开发满足市场需求
的低成本手机产品。拥有基于 Linux 的开源代码,手机制造商无需再依赖主要移动操作系统供应商们自
己的商业目标。

GUI 设计给用户体验带来巨大影响,基于 Linux 的平台能够保证用户界面设计和不同移动设备品牌


化的差异性和连续性。同时,Linux 为手机开发商提供的共同代码,使他们可以用来开发一系列智能手机
和特色手机,从而更好实现开发过程的再利用,并为运营商和终端用户提供更多选择。此外,运营商和
用户还可以通过来自大型全球 Linux 社区和生态系统的第三方应用软件获益。

Linux 还能够降低成本,并缩短上市时间。利用更加灵活的硬件和软件,设备制造商可以更好的控制
物料成本。Linux 能够推动软件栈的商品化,并提供与主要操作系统相比更可预测的软件质量(通过持续
测试和缺陷修复),从而缩短上市时间。

基于 Linux 的移动设备的另外一个优势是它能够让芯片制造商接入不可识的操作系统/中间设备层。
Linux 适用于新型芯片,包括多核芯片,并且能够快速利用这些芯片的新功能。通过 Linux 提供的图形
加速提取功能,芯片制造商能够将芯片的功能拓展到超越核心 CPU 的角色。

值得一提的是,Linux 的发展由于缺乏便于使用的集成中间件和应用软件平台而有所减慢。由于
Linux 市场的分化(开源特性的结果之一),手机制造商不得不从不同供应商处"挑选"软件栈的元件。

这就是为什么对于 OEM 来说,现在开发完整的 Linux 电话与开发基于其它任何操作系统的电话一样


成本高昂、花费时间的原因之一。然而,现在有许多基础平台 -- 包括从核心组件和中间件,到软件栈,
再到 UI 和基本应用软件的各个部分 -- 为开发者提供了稳定的、可预测的平台,让他们能够开发新手机
产品以满足消费者的各种需求。最后,Linux 裂阵的容错功能得到了重视。手机制造商可以通过技术和代
码的真正再利用实现多产品的统一生产。

Linux 有潜力为移动生态系统中的每个参与者带来价值,并能够推动移动市场的快速发展。Linux 融
合了两个领域的优势 - 由功能强大、安全、可靠的平台支持的开源创新、中立性、灵活性和低成本性。


oss.linuxpk.com 2008 年第 10 期 122

嵌入式

抢占科技前沿的嵌入式
Linux 关键应用
张进宏
从嵌入式 Linux 应用开发领域来看,嵌入式 Linux 的关键应用(Killer Apps)主要分布于下列几类
电子产品中:

◆ 通信基础设备;

◆ 掌上设备(包括 PDA、智能电话和便携娱乐设备等);

◆ 无线接入设备(主要指支持 802.11 或蓝牙等无线接入协议的设备);

◆ 数字机顶盒、数字电视和音、视频系统;

◆ 用户端网络服务设备(提供易用的网络服务、防火墙、网关、路由及虚拟专用网等功能)。

第一类产品主要面向通信运营商,用来提供基础级的电信服务。它们是整个网络的核心,是各设备厂
商竞争的主战场。

后四类都是相对小的应用产品,处在网络资源和接入服务的边缘,也就是通常所说的网络外围设备。
这些设备主要针对家庭、小办公集体和个人,因此市场潜力巨大。由于用户的消费需求和消费心理不同,
所以要求这些产品的功能和服务多样化。面对大量的市场需求,设备制造商纷纷推出自己最新开发的应
用成果。虽然没有量产,但如此造势可以压制竞争对手,赢得市场主动。下面笔者就介绍一下嵌入式
Linux 应用开发领域的诸多成果。

通信基础设备
预期 Linux 在未来通信市场上的潜力,HP、IBM、Motorola、Sun 和
NEC 等重量级的通信设备厂商都加入到 Linux 阵营。

NEC 发布了两款面向第 3 代手机的基础设备新产品(见图 13),分别是构


筑核心网络中分组网络的 SGSN 设备(服务 GPRS 支持节点)和 GGSN 设备
(网关 GPRS 支持节点)。这两款新品采用的 OS(操作系统)是美国
MontaVista Software 公司面向通信设备推出的 MontaVista Linux Carrier
Grade Edition。
图 13


oss.linuxpk.com 2008 年第 10 期 123

嵌入式
此前,NEC 公司在这类设备中采用该公司独自开发的 OS。但为了缩短开发周期,他们决定采用
Linux。采用 Linux 后,原来需要数年的开发周期缩短到了大约一年。

NEC 公司认为,2005 年之后第 3 代手机服务将正式推出,并且预计在今后 3 年内累计售出 500 台


这次开发的产品。

与原来使用线路交换机的产品不同,这两款产品使用的是 IP 化设计的路由器。与原来相比,数据包
的处理能力提高了 10 倍,达 1.5Gbps,而设备占用面积仅为原来的 1/5。由于采用了支持 IP 的产品,
所以手机运营商可以更自如地应对因使用动态图像应用软件而引起的流量增大、HSDPA 无线区间的高速
化等问题。另外,SGSN 和 GGSN 作为无线区间和互联网之间的通信设备,除可进行数据包的路由处理
之外,还可进行收费管理、会话管理、终端的位置登录管理和 RADIUS 认证等。

网络外围设备
由于 Linux 在服务内容上的优势,再加上它能满足嵌入式设备的苛刻要求,因此在功能高度紧凑的网
络外围设备领域 Linux 很可能获得巨大成功。这里介绍几款以嵌入式 Linux 作为操作平台的网络外围设
备。

掌上设备
将嵌入式 Linux 应用到 PDA 和其它掌上设备,第一个成功的例子就是 SHARP 公司的 Zaurus,它被
公认为是 Linux 消费电子设备的开路者。此后,业界逐渐出现基于 Linux 开发的 PDA、智能电话和娱乐
产品等。

1.多功能便携播放器

图 14
iRiver Japan 是一家多功能便携音乐播放器厂商。该公司最近推出了采用 Linux 平台的多功能 DivX


oss.linuxpk.com 2008 年第 10 期 124

嵌入式
便携播放器 PMP-120(见图 14)。PMP-120 内置 20GB 硬盘,并配有一个 3.5 英寸的、26 万色高对
比度、分辨率为 320×240 的 TFT 液晶显示屏。除了具备相当普及的 MP3 录音及 FM 调频功能之外,该
产品在音频文件方面还支持 WMA、WAV 和 ASF 等格式的播放;在视频方面可播放 DivX 3.11/4.0/5.x
和 XviD 等 MPEG4 视频编码格式的文件,且色彩表现良好。另外,PMP-120 具有图像浏览功能,可以
显示 JPEG 和 BMP 格式的图像文件,还可以进行图像旋转及 2/4/8 倍的放大显示。PMP-120 可直接通
过 USB 接口连接数码相机和手机,从中读取图像。

iRiver Japan 公司擅长以固件升级形式尽快将用户意见反映到产品中,此次 PMP-100 系列采用的高


自由度平台(Linux)有望给产品带来更明显的特色。

2.无线 LAN 技术拍照手机


Wi-Fi 技术是目前业界的热点。企业和家庭中的 Wi-Fi 网络日益增长,为 WLAN 手机(VoWLAN)
在市场上有所作为搭建了一个很好的平台。如果拥有能够在无线局域网和广域网之间实现自由切换并保
持呼叫的“双模手机”,将使手机用户在企业无线局域网条件下,可以像使用现有企业的内线电话一样
便捷地与公司同事联线,同时还可以将来自无线局域网的话音呼叫切换到广域手机网络上。因此这种双
模手机是很多商业用户的共同期望。

日本的网络运营商 NTT DoCoMo 公司与日本最大的手机制造商 NEC 公司联合开发的、内置


IEEE802.11b 芯片的 FOMA 手机 N900iL 已正式在日本发布。N900iL(见图
15)是第一个同时支持 3G FOMA 和 Wi-Fi 无线局域网络的双网络手机。在双
网络系统之下,N900iL 可以被当作一个标准的 FOMA 3G 手机和一部 VoIP 的
电话使用。

N900iL 是第一款配备 Linux 操作系统的 NTT DoCoMo 手机,它采用的是


MontaVista Software 公司开发的 MontaVista Linux Consumer
Electronics Edition 操作系统。不过,对于 WLAN 手机来说,声音品质的保证
图 15
才是市场接受的关键。因此 NEC 公司在 N900iL 中加入了其自主规格的优先控
制功能,以确保声音品质。

虽然不断有新的产品进入消费市场,但嵌入式 Linux 在掌上设备市场的表现还不尽如人意。尤其


Microsoft 公司的掌上电脑在和 Palm OS 系统的争夺中,其市场份额上已经获得了稳定增长,迫使许多
研发项目被取消,导致部分产品中途流产。因此对嵌入式 Linux 软件的市场现状要有充分准备,今后的
发展有待观察。

下一代机顶盒


oss.linuxpk.com 2008 年第 10 期 125

嵌入式
新一代机顶盒具有比较广泛的功能,包括视频记录、在线点播、E-mail 和网络链接流式媒体存储及
回放等。这里介绍了一些基于嵌入式 Linux 的产品。

1.Nokia 媒体终端 该 LAN 组件(见图 16)采用 Linux 操作系


统,由 64 位嵌入处理器、网络专用处理器、加
Nokia 公司的媒体终端机顶盒增加了基于因
密处理电路及 64MB DRAM 等构成。它备有两个
特网的服务,其主要功能包括数字音视频、数字
以太网外接接口,其中一个为录像及播放专用接
电视、视频点播、有线电视节目、网页浏览、电
口。
子邮件和聊天、游戏和许多基于因特网的软件应
用等。它的嵌入式系统主要由 366MHz Intel
3.冲电气机顶盒(STB)
Celeron 处理器、810 芯片组、32MB 内存和最
小 20GB 的硬盘组成。内部程序应用基于 Linux
的 X-Window 系统和 Mozilla 浏览器,并加入了
Nokia 独有的用户界面技术。

2.东芝新款液晶电视
2004 年 9 月,东芝发布了新款液晶电视 图 17

Beautiful Face(画面尺寸为 32 英寸或 37 英


冲电气公司开发的基于 Linux 的机顶盒
寸)。此次发布的产品共有 4 种机型,其中的顶
StreamingPlayer(见图 17),连接 ADSL 或
级机型 37LZ150 具有通过家用 LAN 将 HDTV 节
FTTH 等宽带线路后可以播放与 DVD 相媲美的高
目录制在硬盘装置中的高清电视网络录像功能。
画质图像。该产品为业内首款支持 Qurter-PEL
通过网络录制数字电视节目需要配备数字著 功能的机顶盒。
作权管理(DRM)功能,为此 37LZ150 在其图
StreamingPlayer 支持 MPEG-4ASP 格式,
像处理接口 Meta Brain 的 LAN 组件中预置了加
用来补偿运动图像的像素精度增加到了过去的两
密功能(加密机制依据的是 128 位 AES 加密标
倍,即使在 1.5Mbps 左右的带宽下也可以播放
准),可将录制下来的 HDTV 信号进行加密后保
高画质动态图像。此外,影像加密采用了冲电气
存在硬盘中,最多可连接 8 个支持 LAN 的硬盘。
公司自主开发的技术,在不影响加密强度的情况
下,大幅缩短了处理时间。

StreamingPlayer 配备 S 视频、复合视频端
子,以及音响 RCA 立体声端子等接口。输入设备
使用遥控器,或者可以选购无线键盘配件。

图 16


oss.linuxpk.com 2008 年第 10 期 126

嵌入式
娱乐消费设备

1.ZapStation 2.HP Digital Entertainment


Center

图 18
ZapMedia 公司的 ZapStation(见图 18)
是一款基于 Linux 的、针对高保真音乐发烧友的 图 19
音/视频娱乐机。它内装有 800MHz 赛扬处理器, HP 公司推出的第一款基于 Linux 2.4 和 X-
配备 128MB RAM 和 30GB 硬盘,运行 Linux Window 系统的娱乐消费设备(见图 19),配
2.4 Kernel。其图形界面基于 XFree86,并且支 备 566MHz Celeron 处理器和 40GB 硬盘,支
持 Java 和用户定制浏览器。 持 USB、以太网及 HPNA 接口。通过内建的
V.90 调制解调器,它能从因特网下载和录制音乐
及影像资料,能读取和拷贝音乐 CD 到硬盘上,
并支持音频和视频的输出。外接显示和音响设备
就能构建一个属于自己的娱乐天地。

网络用户端服务设备
网络用户端服务设备具有功能丰富、易用性强,以及成本低廉等特点,可以满足家庭、办公和工作小
组的信息服务需求。这类设备通常可以作为本地服务器来提供网络连接、打印共享服务、网关、防火墙、
路由、电子邮件服务器和 VPN 等功能。

通过内建 Linux 操作系统和开放源码软件,用户端服务设备的安装和设置都可以采用浏览网页的形式


实现。这方便了非技术性用户的使用,同时省去了软件版权的高额费用,进一步降低了购买和使用成本。
下面介绍几款基于嵌入式 Linux 开发的此类设备。


oss.linuxpk.com 2008 年第 10 期 127

嵌入式
1.Filanet InterJak 产品配备 AMD 公司的 SC520 处理器(集成
128MB RAM 和 16MB Flash)。SnapGear 软
件部分采用了广泛应用的 μClinux 和一些开放源
代码资源。

3.Sun Cobalt Cube

图 20
Filanet InterJak(见图 20)配置有 x86 处
理器、128MB RAM 和大容量硬盘。通过 Linux
和一些开放源代码的软件,比如 Apache、
MySQL 和 Exim Mail Server 等,Filanet
InterJak 实现了一些常用的功能,很适合对设备
要求不高、功能需求单一的入门级用户。

2.SnapGear VPN Routers

图 22
从外形来看,Sun Cobalt Cube(见图
22)就像是一个“蓝精灵”,小巧而且时尚。别
看它个头小,实力可不能低估。它具备因特网服
务器、网关、路由、和 VPN 等功能,并且易于安
装和设置。
图 21
SnapGear VPN Routers(见图 21)是一 Sun Cobalt Cube 配备了 AMD K 6-II 处理
个小巧易用的路由设备,能提供网关、路由、防 器、512MB SDRAM、高速 SCSI 硬盘、
火墙和 VPN 服务等功能。其入门级产品采用 10/100 Mbps 网卡、串行控制器和 USB 接口等
Motorola 公司的 ColdFire 处理器(配备 4MB~ 硬件,而嵌入式 Linux 操作系统和开源软件是系
8MB 的 RAM 和 1MB~2MB 的 Flash);其高阶 统功能实现的重要保障。

无线中继和接入设备
人们随时随地享受信息服务的需求促进了无线通信的发展,也加速了 802.11 和蓝牙等无线通信协议
及相关设备的推出。因此,无线中继和接入设备的市场前景被看好,下面介绍几款此类产品。


oss.linuxpk.com 2008 年第 10 期 128

嵌入式
Axis Bluetooth Hot RISC 处理器(配有 2MB RAM 和 2MB
Spot-9010 Flash),并且拥有串行接口、10/100Mbps 以
Axis Bluetooth Hot 太网卡和蓝牙收发器。其系统运行 μClinux,可
Spot-9010(见图 23)基于 以和具有有蓝牙功能的移动电话、PDA 或其它类
Axis ETRAX 32-bit RISC
型的移动设备等进行短距离无线通信。
图 23 系统级芯片处理器(内含
16MB DRAM 和 2MB
3.Musenki M-1/M-3
Flash),机内装有蓝牙收发器和 10/100Mbps
Musenki M-1/M-3 是最近发布的家用无线
以太网卡。该设备的嵌入式软件采用 Axis
接入设备。它采用 Motorola 公司的 200MHz~
ETRAX μClinux 和 Axis 公司自己研发的、
333MHz MPC8241 处理器,集成 128MB
Linux 下的蓝牙堆栈。易用的网页方式简化了系
SDRAM 和 16MB Flash。其内部采用 Mini PCI
统设备配置和维护。
接口,提供了更大的灵活性。Musenki 在设计中
采用包括 Penguin PPC Kernel 源码、PPCBoot
2.Ericsson BLIP
、μClibc 和 BusyBox 等大量开放源代码方案来
Ericsson BLIP(见图
达到自己独到的运行效果。用户可以根据情况选
24)是一个体积小而功能
择不同版本的 802.11 和蓝牙,但其它功能和操
齐全的无线设备。它采用
作界面同样出色。
32 位的 ARM 7TDMI
图 24

小结
虽然嵌入式 Linux 有很大的市场潜力,但能看到的产品并不是很多。这是因为许多应用设备从开发成
功到投入市场有一定的周期,如果想知道更多关于嵌入式 Linux 设备的最新消息,请关注这个欣欣向荣
的领域。


oss.linuxpk.com 2008 年第 10 期 129

开源小知识

利用开源软件与实现商业目的时
需注意的问题

为 什么开源软件强调“No
warranty”?
纠纷的需要,保障他们发布自由软件的自由性,
而明确的要求原始版权人发布的作品不得提供担
保。但是,对于再分发者,这种无担保的限制已
开源软件的精神在于通过众多开发者愿意贡 经没有了,它明确的同意再分发者可以为用户提
献个人智力作品并能够在法律允许的条件下“安 供一定的担保而得到对价。当然,担保的前提是,
全”的贡献个人的成果,将其以非传统的发布模 担保这必须表明他们是再分发者的身份。
式,从而保障用户最大限度使用软件的自由。如
果程序员开发了软件并将这个软件贡献给了社区
以保证其它用户和开发者可以自由地获得软件,
然而程序员还需要承担“warranty”带来的责任,
为 什么开源软件的商业应用归
根结底还是需要有人提供担
那么就这个合同对程序员(贡献者)是不平等的, 保?
就不能实现因为自由软件提倡的是源代码的公开
因为当软件成为一件商品,用户除了关心是
性。为了在鼓励社区里的人员都奉献自己的源代
否可以获得源代码以外,还关心软件的稳定性等
码的同时,为了给他们解除后顾之忧,避免法律
其他指标。商业应用需要的不仅是一件可用于解
纠纷,所以才在许可证下明确说明了该自由软件
决某个技术问题的创新成果,还需要培训、服务
是不提供任何明示或默视担保的。
等其它满足商业化的因素。开源软件作品与成熟


的软件商品之间的距离和差距必须藉由对其它指
始许可“不担保”,开源软 标的担保得以实现。


件就一直得不到担保吗?
始许可“不担保”,用户怎
再分发者可以对开源软件提供担保。在各许
可协议中,都会发现“不但保”字眼。只有在完 么办?
全理解开源模式规则的情况下,才能澄清“开源
再发布开源软件的开发者通常不关心是否提
软件不能进行担保”的误解。例如,在 GPL 开始
供担保,但软件的最终用户的确十分在意担保的
的定义中,我们可以看到原始版权人
问题。因为担保不仅意味着产品的质量可以获得
(copyright holder )和再分发者(you )这
一定程度的保证,还可以将用户从知识产权侵权
两类人。GPL 只是为了考虑原始版权人避免法律
的风险中彻底解脱出来。由于存在愿意通过担保


oss.linuxpk.com 2008 年第 10 期 130

开源小知识
获得商业利益的再分发者。如果用户希望获得担 式值得借鉴和推广。
保,他只要选择合适的再分发者就可以了。这里
许可人适用特定许可证发布的软件还能不能
的“合适”显然不仅需要考虑软件是否可用,还
撤销许可?
必须考虑这个再分发者是否具备相应的担保能力,
不能撤销。不能撤销许可指的是只要被许可
如提供相应服务的水平如何。
人严格执行许可的前提和条件,许可人就不能以


其它理由撤回许可或另行增加许可的条件,除非
分发人对不享有知识产权的 其愿意承担违约责任。
开源软件收费是否合法? 不能撤销许可并不意味许可一定会长期存在,
只要授权还存在就是合法的。因为通过开源 许可协议是一个附有条件的合同,如果被许可人
软件的授权模式,开发者自愿地放弃了独占性和 违反了条件的约定,许可就将自动终止。例如,
专有性,以合同的方式对使用者和再发布者进行 如果 GPL 下一个软件的再发布者没有按照协议要
了权利的分享,而授权中并没有不可以收费的强 求公开修改内容,那么 GPL 许可就自动不对其开
制条款。用户(再分发者)已经获得了最大程度 放了。如果这个再发布者继续持有软件,则属非
使用软件的自由。只要有人愿意付费,不管是仅 法持有软件行为,就是违反版权法的规定,与盗
仅为了省去自行取得代码的麻烦还是为了获得相 版无异。


应的担保,甚至是出于对再分发者的捐赠,收费
行为和付费行为都没有受到禁止。 经免费接受许可的一方会不


会在日后面临被收费的危
什么开源软件本身可以收
险?
费,但通过单纯对软件进行
虽然开源软件许可不排除收费的可能,但通
收费实现商业目的的模式注定不成 常以免费的方式进行授权。用户有时会产生这样
功? 的疑问:现在免费获得的软件会不会有一天被强
行收费。答案应该是不会。因为在用户获得和使
这是由市场经济的基本特点所决定的。市场
用软件的那一刻,许可人和被许可人已经就这个
上存在各种商品自由竞争,质量和价格通常是消
软件达成了一致意见。如果约定免费授权,那么,
费者进行选择决定性因素。开源软件的代码可以
这个免费的条款是符合合同法、受到合同法保护
自由获得,生产软件的成本普遍降低。由于消费
的。如果在将来的某个时间,许可人决定收回更
者可以自行获取源代码,显然以较高的价格出售
换一种许可方式,例如收费许可,那么许可就必
这些代码(软件)是不现实的。而商业模式要解
须依照合同法的规定承担由此造成的违约责任。
决的是一个如何获得长期、稳定的较高收益的问
由于开源软件的使用范围很广,更改许可方式与
题,通过贩卖开源软件本身是不可能实现这个目
撤销许可的成本通常会不可接受。
标的。但开源软件与其它类型软件的结合趋势十
分明显,开源世界已经产生了其它成熟的商业模


oss.linuxpk.com 2008 年第 10 期 131

开源小知识

开 源软件的商标侵权风险存在
于哪些方面?
于中国企业来说,这或许是一件好事,因为
我们面前的“商标陷阱”又少了一个。然而,
这对于广大的尚处于发展期的中国开源软件
商标侵权的风险指的是对注册商标和非注册 企业也是一个警钟:我们不但要大力打造自
商标的不合理使用,与开源软件相关的商标主要 己的软件品牌,更要致力于保护自己的品牌,
有: 避免其被淡化,最终落得个“一人种树大家
乘凉”的结果。
◆ 所谓的“认证商标”,指以 OSI 组织为代


表的非盈利性组织所拥有的商标;

◆“企业商标”则是指由企业管理、授权使用
用开放源码启动专有软件企
的商标,这和传统商标法意义上的“商品商标”、 业应重点注意哪些事项?
“服务商标”并没有不同;
中小型企业如果不能完全理解将要使用的开
◆“概念商标”,专指那些性质有待确认的、 源码许可证,可遵循以下原则(A)不要把任何
仅为表达一种理念或概念的“商标”,前文中提 开放源码直接混合到自己的代码中;(B)不要
到的 LINUX 便是“概念商标”的典型代表。 为了自己的需要,而修改这些开放源码;(C)
如果可能的话,甚至不要下载和编译开放源码。

我 国企业如何应对开源软件相
关的商标侵权风险?
许多开放源码项目提供二进制代码,很多项目遵
循灵活的 BSD 许可证,而另一些则遵守严格的
GPL 规定,所以,保持自己的专有代码与开放源
● 目前使用 OSI 等证明商标不需要付费, 码的区别是很重要的。当然,根据企业收入模式
但“不付费”的商标并不等于“没有任何权 适当地让自己的代码过渡为开放源码,可能对企
利的商标”。OSI、OPEN SOURCE 都是 业更有利;(D) 挑选合作商的时候,要挑选那
合法的证明商标,企业要想使用这些商标, 些符合自己要求的、有积极用户群的合作者。至
一定要符合商标权利人――即 OSI 组织的规 少有一点可以确定,即使你的项目终结了,你还
定。 拥有源代码。假如你坚持 API 标准,那么转换到
另一个项目上,或寻找一个商业卖主,事情就会
● 无论企业商标出现在源程序包的源程序
相对容易些。
中,还是出现在其运行界面中,都属于权利
人行使自己合法商标权的范畴,我们的软件


企业都应该尊重权利人的权利,否则就会面
临侵权危机。另外就是禁止“反向假冒”, 什么国外用户大量使用开源
即将他人产品上的商标去除或对他人的商标
软件但看似是并不关心知识
进行替换。
产权风险?
● 我们足以判定近期 LINUX 无论在中国
还是其他国家都很难得到商标法的保护,对


oss.linuxpk.com 2008 年第 10 期 132

开源小知识
● 开源软件卓越的技术水平与较小的风险之间权衡的 ● 开源软件深得全世界广大用户和业界的支持,这使
结果; 任何针对开源软件的法律诉讼都难以付诸实施;

● 开发者和再许可人遵守国际规则,通过国际社区和 ● 对用户存在担保机制;
组织增前了开源软件整体可能面临法律障碍; ● 知识产权风险的可控制性;
● 开源软件的 GPL 等许可证已实行多年,大大减少 ● 开源的模式使其风险大大低于专有软件。
了可能产生的专利风险;


oss.linuxpk.com 2008 年第 10 期 133

编读往来

Linuxpk.com 十月十大热门帖

nohup 命令详解

http://bbs.linuxpk.com/thread-35407-1-1.html

跨平台做得一样好的软件

http://bbs.linuxpk.com/thread-35738-1-1.html

ROOT 权限不够,请教各位大虾

http://bbs.linuxpk.com/thread-35640-1-1.html

中科院自动化所自由软件协会每月讲座(大家一起学 VIM)(附讲座资料下载)

http://bbs.linuxpk.com/thread-35598-1-1.html

Linux 下配置 NTP 架设本地时间服务器

http://bbs.linuxpk.com/thread-35661-1-1.html

网站根目录问题

http://bbs.linuxpk.com/thread-35760-1-1.html

使用 VIM 编辑 C 程序

http://bbs.linuxpk.com/thread-35487-1-1.html

软件测试的心理学问题

http://bbs.linuxpk.com/thread-35548-1-1.html

在嵌入式 NAS 上实现打印服务器

http://bbs.linuxpk.com/thread-35559-1-1.html

本站 sns 开通“中国开源校园”

http://bbs.linuxpk.com/thread-35740-1-1.html


oss.linuxpk.com
源 2008 年第 10 期 134
封底