You are on page 1of 121

封面

卷首语

我们周岁了
又到了岁末年初,在这么一个特定的时期,大多数朋友都在写着对过去一年的工作总结与对新一年
的展望与预期,媒体也不例外。

2008“XX”大盘点、排行榜、编辑选择奖等等是这段时期媒体的关键词汇,一年都过去了,总得将
某领域一年发生的事捋一遍,从概述中发现脉络,既是总结也是展望,当然,开源领域也不例外。

最近,就好些媒体的朋友问询我,在举世瞩目的“08 年”中,开源界发生了哪些应该被记住的事
情。我列举了很多:诺基亚收购 Symbian 并开源肯定算一件、Sun 的开源战略也得算一件、微软与开源
界的互操作合作愈发紧密并第一次基于 LGPL 贡献代码算一件、“番茄花园”与“黑屏”事件也是与开源
息息相关的两件大事、当然 Netbook 的流行、Google 推出的 Chrome 开源浏览器、Sun 收购 MySQL 和
innotek,Intel 收购 Openede Hand……等等都是在这一年中我们曾经关注过的开源事件。

末了,突然想起,我还忘了一件大事,那就是《开源》杂志创刊一周年了。

时间是一个很奇特的元素,当我们一天一天过着的时候觉得停慢,但猛一回头发现,多少岁月依然
流逝。《开源》亦如此,一期接着一期的做着,忙完一期又是一期,但回头一看,已经发行了 12 期了,
已经过去 1 年的时间了。

“坚持”是我们这一年中一路走来的心态与情绪,既包括了对自己的肯定,也涵盖了对他人的鼓励 ,
一群来自于社区,沟通于网络的 ID 组成了《开源》编辑部,正是大家对开源的热忱以及所信仰的理念,
让大家走到了一起,为了这一共同的目的,共同的方向努力着,也坚持着。

《开源》杂志自创刊之日起就收到了来自开源社区广大开源爱好者的广泛关注和支持,下载量每月
递增,形成了一群忠实的读者,也收到了众多朋友的踊跃投稿,为《开源》的发展奠定了基础。随着读
者的增多,以及影响力的扩大,受到了开源产业界的重视,中国开源软件推进联盟陆首群主席担任了杂
志的主席,工程院院士倪光南更是在杂志创刊之际就发来了贺言,当年将开源软件背回中国的宫敏博士
内核专家毛德操教授,袁萌教授、许洪波教授等悉数成为了杂志专家委员会委员,来自业界企业的代表
如中科红旗总裁贾栋、中标软件副总裁曹冬、微软战略平台总监李科研、Intel 中国 Linux 和开源战略
经理陈绪博士、Sun 开源推广中心白剑波主任、EMC 中国实验室主任毛文波博士也相继成为了杂志顾问
委员会委员。这些专家和企业代表的加入,将杂志提升到了更高的高度,同时,也对杂志提出了更高的
要求和更多的期许。

1 年的时光,1 年的历练,《开源》编辑部摸爬滚打过来了,在这也得感谢编辑部的同仁,都是一
群热爱开源的人,都是一群信奉开源理念的人,也都是一群乐于分享与奉献的人,正是这些从未谋面朋
友的努力,使得 12 期《开源》能与广大读者们见面,历史也许记不住你们,但《开源》永远会记住这些
奉献过的人们。


oss.linuxpk.com 源 2009 年第 1 期 2
卷首语
除了编辑部,更应该感谢的是读者,每期杂志发布后,都能收到众多读者的 Email,有问询、有
投稿、有感谢、也有鼓励。正是这些热心的读者,让我们有了坚持下去的动力与决心,让我们觉得自己
是在做一件“有意义”,"值得”的一件事情。

下面是一封读者来信,在我们一周年的纪念日的特殊日子,与大家分享,也作为我们 1 周年回顾的
总结以及新一年的美好开端:

我是一名 Linux 程序员,现在的工作是在 ARM 平台上进行嵌入式 linux 驱动和应用程序的开发,


目前我正利用业余时间开发嵌入式的 X-window、GTK+。一个偶然的机会在同事的电脑上看到《开源》
200809 版,一看就非常入迷,《开源》不仅内容丰富,而且很实用,看完了杂志后可以学到很多软件知
识,而且杂志上的业界新闻也让我更加了解行业上的发展动态,这些都是我平时最想关注的,我也经常
在网上定阅一些电子邮件杂志,但内容非常少,而且有一半是广告,而《开源》杂志的风格和内容完全
不同,让我耳目一新,爱不释手!

祝《开源》杂志越办越好!Move on!

来自:深圳
Mason.Huang


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

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

主编:陈杰
副主编:陈伟
排版:邹洋
封面设计:张亚运
编辑部:高延斌 姚欣宇 顾宏军
校对:戴彬 沈佩琪 王文龙 李彦荣 赵龙

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

内容目录
卷首语
我们周岁了.................................................................................................................................2
产业聚焦
开源软件高端用户应用会议召开.............................................................................................7
Linux 基金会:所有的 Linux 发行版都遵从 IPv6 标准..........................................................8
诺基亚完成对 Symbian 的收购.................................................................................................8
Mozilla 软件扩展下载超过 10 亿次..........................................................................................9
未来 IT 行业将有 40%职位与开源有关...................................................................................9
2008 年开源界 10 件大事........................................................................................................10
IBM Lotus 携手 Ubuntu 以虚拟桌面对抗微软.......................................................................11
08 年 6 大最差预测 Linux 得势 苹果推出新品....................................................................12
08 年 10 大超酷开源软件........................................................................................................13
分析称谷歌 Android 上网本 2009 年诞生..............................................................................18
亚洲 Linux 联盟 Asianux 新增第五位成员.............................................................................20
2020 年前开源软件发展路线图..............................................................................................21
经济危机碰撞开源产业碰出新机遇?...................................................................................22
PHP on Windows,互操作一大步..........................................................................................26
开源通迅
SIP 与 Sun 携手共建 MIIT_CSIP - Sun 开放技术创新实验室 ............................................28
新学堂科技推出基于开源软件的杀手级应用 .....................................................................28
从索取到贡献红旗为社区贡献源代码 .................................................................................28
Novell 助力 PlateSpin 进行重大革新 ....................................................................................29
北京 Gnome 用户组在京成立 ...............................................................................................29
红旗 Linux 帮助网吧降低运营成本 ......................................................................................29
中标软件获两亿元注资 .........................................................................................................29
红旗 2000 再获政府青睐 .......................................................................................................30
金蝶开源中间件 Apusic 成功替换.NET 产品 ......................................................................30
EMC 发布云存储基础架构 Atmos .........................................................................................30
金蝶中间件为“全国政协”保驾护航 .................................................................................30
威盛波兰发布新款 C7-M 核心上网本 .................................................................................30
各地开源社区进行时—深圳 .................................................................................................31
Apusic 中标国家金质工程 .....................................................................................................31
Splashtop 荣获《科技新时代》等三项创新大奖 ................................................................31
中兴通信手机出货量激增 .....................................................................................................31
开源社区
MySQL 社区稳定版 5.0.75 发布.............................................................................................32


oss.linuxpk.com 2009 年第 1 期 5

目录
适合所有 Linux 发行版的包管理器........................................................................................32
openSUSE 11.1 Final 正式版发布...........................................................................................33
Mozilla 移动浏览器“Fennec”Alpha 2 发布...........................................................................35
MagicLinux 2.1 正式版发布....................................................................................................36
Slackware Linux 12.2 发布.......................................................................................................37
领跑的开源软件 Apache..........................................................................................................38
英特尔中国开源技术中心系列专访之二...............................................................................40
何谓“准就业”?不要被忽悠了!.......................................................................................42
特别报道
《开源》新年贺词...................................................................................................................44
贺《开源》周年 黑屏带来契机.............................................................................................45
在金融风暴中,《开源》企业破浪前进 .............................................................................46
写在《开源》杂志创刊一周年之际 .....................................................................................48
《开源》坚定了我们对社区的参与 .....................................................................................49
《开源》之道 .........................................................................................................................51
知识学堂
GNU/Linux 开发第一步...........................................................................................................52
透视 GNOME 项目..................................................................................................................55
经验技巧
Linux 一句话精彩问答 ..........................................................................................................62
tar 命令备份还原 linux 操作系统............................................................................................68
Firefox 启动自动处于脱机工作模式的解决方法..................................................................74
Shell 的五个小应用..................................................................................................................75
给 Iptables 定时........................................................................................................................77
无线网卡在 Linux 下活起来....................................................................................................79
在 Linux 上快速搭建计数器....................................................................................................82
5 分钟打造 U 盘启动的 Ubuntu...............................................................................................85
用 SrvRepor 远程监控 Linux 服务器.......................................................................................87
企业应用
LRP 架构 Linux 路由器防火墙...............................................................................................90
配置 Linux 下的动态 DNS 服务..............................................................................................97
实现 Linux 网络防火墙..........................................................................................................103
嵌入式
开源嵌入式数据库 Berkeley DB...........................................................................................109
开发利器 DevRocket..............................................................................................................117
编读往来
Linuxpk.com 十二月十大热门帖 ........................................................................................120


oss.linuxpk.com 2009 年第 1 期 6

产业聚焦

开源软件高端用户应用会议召开
(中国)、伊迪艾电脑科技(上海)、上海慧广
科技、北京富通东方科技以及 IBM、Intel 等系
统集成商。

中国开源软件推进联盟陆首群主席在作会议
主题报告时指出:为了促进开源软件的高端应用,
我们邀请各位嘉宾光临。“联盟”是第三方,将
为你们“见面”创造条件,为你们进行沟通、交
流、共享、合作来“铺路”、“架桥”,通过这
次会议,促使广大用户能了解开源软件的特点和
发展状况,以及其独特的开发、发行、应用、服
务模式,了解开源软件在欧美发达国家高端市场
的应用,了解开源软件开始进入国内高端市场的
情况;也促使各家开源软件的开发、发行商能进
12 月 12 日 , 中 国 开 源 软 件 推 进 联 盟
一步了解用户需求,加深用户体验,推出满足中
(COPU)召开“开源软件高端用户应用报告会”
国高端应用市场需求的开源软件版本和服务;在
(上午是报告会,下午是圆桌会议—座谈会)。
我们这次邀请的嘉宾中,还有各家系统集成商,
参加会议的有:中国人民银行金融电子化公
你们对于促进开源软件的高端应用,可说是作用
司、中国银监会、中国开发银行、中国工商银行
巨大。中标软件、中科红旗、Red Hat、Sun 作
中国银行、中国建设银行、中国农业银行、交通
了大会发言,介绍他们开发、发行的 Linux 和
银行、中国进出口银行、中国光大银行、中信银
Solaris 操作系统以及其他开源软件版本的特点,
行、华夏银行、长安保险公司、中国移动、中国
介绍了他们的开源软件在高端市场应用的情况;
联通、铁道部、中国计算机用户协会等用户部门
随后长安保险也做了大会发言,谈到 Oracle 的
CSIP、中科红旗、中标软件、北京拓林思、红旗
服务器 UBL(Linux 操作系统)在长安各网点的
2000、北京大学微电子与软件学院、Red Hat
运行情况;下午的圆桌会议讨论比较踊跃;广大
、Novell、Sun、Oracle 等开源软件开发、发
用户、开发发行厂商、系统集成厂商以及跨国公
行厂商和培训单位;太极公司、神州泰岳、中科
司(如各金融、电信用户,IBM、Novell、Sun
软、中兴通讯、华为、科兰、神州数码、安富利
等公司)进行了自由热烈的发言。


oss.linuxpk.com 2009 年第 1 期 7

产业聚焦

Linux 基金会:所有的 Linux 发行版


都遵从 IPv6 标准
据国外媒体报道,Linux 基金会日前宣称,
Linux 所有的重大发行版都满足美国国防信息系
统 局 的 IPv6 (Internet Protocol
Version 6 ) 特别互操作性认证要求。该声明
称,Linux 从 2005 年起就开始提供健全的 IPv6
支持,但是当时该开源平台需要更近一步努力来
满足美国国防部的标准的要求。

该 声 明 还 称 , Linux 基 金 会 的 IPv6
Workgroup 开始分析国防部的要求以及关键领
域的支持。他们开始共同协作并成功的研究出并
分享这个符合国防部标准的技术。

诺基亚完成对 Symbian 的收购

诺基亚近日宣布已经完成了对 Symbian 公司的收购。诺基亚表示,收购要约的所有条件都已满足,


已收购了 99.9%以上的 Symbian 股票。Symbian 是一家开发 Symbian 手机操作系统并提供该系统授权


oss.linuxpk.com 2009 年第 1 期 8

产业聚焦
的公司,Symbian 系统在全球移动设备操作系统市场上占据了垄断地位。今年 6 月 24 日诺基亚宣布成
立 Symbian 基金会,会员包括 AT&T、LG 电子、摩托罗拉、NTT DOCOMO、三星、索尼-爱立信、意法-
恩智浦无线、德仪和沃达丰。

此次完成收购要约为建立该基金会迈出了最重要的一步,完成收购后,Symbian 公司的职员将在明
年 2 月 1 日全部转为诺基亚职员。

Mozilla 软件扩展下载超过 10 亿次
据国外媒体报道,Firefox 以及 Mozilla 一数字,其中绝大多数来自 FireFox,高扩展性
的其他产品的扩展下载量已经超过 10 亿次。 已经使它成为了一个软件平台,甚至一些可以提
供独立功能的软件例如 StumbleUpon 也拥有了
这也许是世界上用户主动下载扩展数量最多
FireFox 版。
的软件,Mozilla 仅用了 3 年半时间就达到了这

未来 IT 行业将有 40%职位与开源有关

12 月 4 日消息,据国外媒体报道,根据最近发布的“2020 年开源软件路线图”称,到 2020 年,云


计算将成为主流,而由于开源技术是云计算的核心技术,未来 40%的 IT 职位将于开源有关。

在法国巴黎召开的“开放世界论坛(Open World Forum)”大会推出了“2020 年开源软件路线图


”,该报告预测了 2020 年 IT 行业情形。该报告称,如果现在人们按照它所提出的建议来做,开源盛世


oss.linuxpk.com 2009 年第 1 期 9

产业聚焦
将会到来。

在这个长达 78 页的报告中,开源专家提出了一些非常明智的建议,其中包括推荐的政府政策,以及
一些教育和企业管理方面的建议。

另外它指出非常有意思的一点,在云计算成为主流的过程中,以开源为基础的实际应用代码将进一
步向用户“隐藏”。这是它在成为主流技术过程不可避免的,不过有人认为这是对开源的一种“削弱”。

2008 年开源界 10 件大事


在即将过去的 2008 年,开源应用得到了长足发展,并且渐成主流。Linux 上网本风靡全球,谷歌
连推 Chrome 开源浏览器和 Android 开源移动平台,诺基亚 100%控股 Symbian 等等...

以下为 2008 年开源市场 10 件大事:

1. Linux 上网本迅速风靡

2. Sun 更新 OpenOffice、Solaris,收购 MySQL

3. 开源操作系统 Ubuntu 8.10 和 Fedora 10 上市

4. 谷歌推出 Chrome 开源浏览器

5. 谷歌推出开源移动平台 Android

6. 诺基亚收购 Symbian 剩余 52%股份

7. 在“Jacobsen 起诉 Katzer”案件中,法庭裁定 ,开源协议是一种著作权协议,违反协议就是


侵权行为。

8. Linux 文件系统 reiserfs 作者汉斯·雷瑟(Hans Reiser)因谋杀妻子被判入狱 15 年。

9. Debian OpenSSL 软件包曝安全漏洞

10. 法官戴尔·基姆鲍尔(Dale Kimball)再次裁定 SCO 不拥有 Unix 知识产权


oss.linuxpk.com 2009 年第 1 期 10

产业聚焦

IBM Lotus 携手 Ubuntu 以虚拟桌面对抗微软

IBM 与 Canonical 近日宣布,将共同搭售 IBM 的 Lotus 桌面应用软件与 Canonical 的 Ubuntu


Linux 操作系统,让企业能拥有更低成本的软件费用。两家公司宣称, Lotus 与 Ubuntu 的组合,将能
比在传统 Windows PC 上使用 Office,节省更多的软件支出。

除了 Ubuntu 和 Lotus 应用软件之外,共同的搭售产品还包括 Virtual Bridges 的桌面虚拟化软


件 VERDE(Virtual Enterprise Remote Desktop Environment,虚拟企业远程桌面环境)。
根据 IBM 表示,针对大型企业的整套 Linux 虚拟桌面方案,每位员工的成本只需要 59 美元。这其中包
含 VERDE 桌面虚拟软件的组态费用 49 美元,以及 Ubuntu Linux 操作系统支持服务 10 美元,至于以
OpenOffice 为基础的 Lotus Symphony 办公室软件,则不需要任何费用。

这三家公司合作搭售的虚拟桌面方案,将让企业只需付出极小的成本,就能使用企业最普遍需要的
办公室软件。这套解决方案可让系统管理者,传送开源的 Linux 与 Lotus 的邮件与协同作业软件,到任


oss.linuxpk.com 2009 年第 1 期 11

产业聚焦
何远程办公室的计算机或工作站。以往,这常常是企业花费最多的软件支出。

根据 IDC 的研究报告显示,面对目前不景气的经济状况,2009 年 IT 部门将面临削减支出的沉重压


力,IT 环境可能会比以往更加复杂。因为企业可能会仰赖更多的约聘人员,也会有更多的行动工作者和
行动装置,因此集中化的虚拟桌面(CVDs; centralized virtual desktops)方案将能解决这个问
题。

IDC 欧洲系统事业部客户端运算顾问 Matthew McCormack 表示,CVD 和桌面虚拟化市场的成熟还


需一段时间,但企业已开始有兴趣导入这些方案。虽然目前的发展仍从技术面的角度,但企业终将发现
许多厂商提供的解决方案,所具备的成熟度已广泛适用于各种企业需求。IDC 也预计 2009 年将是桌面虚
拟化技术发展的一年,2010 年则会开始成为主流应用。

08 年 6 大最差预测
Linux 得势 苹果推出新品
据国外媒体报道,2008 年即将过去,回顾 2007 年底或今年年度人们对 2008 年的展望,会发现很
多预测并未得以实现。以下为 6 大最差预测:

一、Linux 得势
《PC World》曾预测,由于 Windows Vista 表现欠佳, Linux 将迅速占领企业和政府市场。实
际情况是,Windows 的市场份额仍高达 90%,而 Mac OS X 为 9.1%。

二、CNET 五大预测全部落空
CNET 预测的“宽带危机、PC 被淘汰、谷歌垄断 700mhz 频段资源及股价突破 1000 美元、苹果发布
新型产品和宽带电视灭亡”五大趋势全部落空。

三、科技博客网站 ReadWriteWeb 预测,语义 Web 应用将于 2008


年普及,而事实并非如此。

四、《商业周刊》预测,AOL 将与微软、谷歌或雅虎达成某种交

oss.linuxpk.com 2009 年第 1 期 12

产业聚焦
易,目前尚未发生。
知名 IT 分析师约翰·巴特利(John Battelle)预测,雅虎 2008 年将找到适当的战略,重新振作
起来。而今年,雅虎两次裁员,与谷歌和微软的交易全部破产,CEO 杨致远也不得不辞职。

五、媒体将声讨任天堂 Wii
Street.com 网站曾声称,Wii 并不是一款伟大的视频游戏机,2008 年定会遭到媒体声讨。但实际
情况是,Wii 今年的销售势头强劲,还是圣诞节期间的最畅销游戏机。

08 年 10 大超酷开源软件
据国外媒体报道,在即将过去的 2008 年,开源应用得到了长足发展,并且渐成主流。另外,开源软
件已不再局限于 Linux 操作系统,Android 移动平台和 Firefox 浏览器同样成为开源运动的核心。以
下为 08 年 10 大“超酷”开源软件:

OpenOffice.org 3.0 办公套件


oss.linuxpk.com 2009 年第 1 期 13

产业聚焦

IBM Lotus Symphony 办公套件

Firefox 3.0 浏览器


oss.linuxpk.com 2009 年第 1 期 14

产业聚焦

Laconica 开源微型博客平台

Fedora 9 操作系统


oss.linuxpk.com 2009 年第 1 期 15

产业聚焦

Ubuntu 8.10 操作系统

OpenSuSE 11 操作系统


oss.linuxpk.com 2009 年第 1 期 16

产业聚焦

Novell JeOS 操作系统

Ubuntu 8.04 操作系统


oss.linuxpk.com 2009 年第 1 期 17

产业聚焦

谷歌 Android 移动平台

分析称谷歌 Android 上网本 2009 年诞生


2008 年即将结束,一年一度的“国际消费电子
展(CES)”也近在眼前。所以,现在有很多人都在
猜测 2009 年究竟会诞生哪些科技新品。而美国知名
科技博客 GigaOM 却给出了一个看似有些牵强的预测
——2009 年将诞生首款基于 Android 操作系统的
上网本。

上网本(netbook)和 Android 是当今科技界


最为热门的两个产品,但是将它们整合到一起的想法
却似乎有些荒谬。不过 GigaOM 却认为,这完全有可
能在 2009 年成为现实。

之所以做出这一推断,主要原因是通信终端芯片
厂 商 高 通 ( Qualcomm ) 也 是 “ 开 放 手 机 联 盟
(Open Handset Alliance)”的一员。而该组


oss.linuxpk.com 2009 年第 1 期 18

产业聚焦
织正是谷歌为推广 Android 手机而牵头组建的。

尽管上网本从本质上讲还是笔记本电脑,但是“上网”才是它最主要的用途。而且,随着“云计算
”服务和无线宽带技术的成熟,上网本也将以其小巧便携的优势对这两个领域起到推动作用。

但是,如今的上网本仍然存在着几个缺陷:1)上网本通常都缺乏内置的无线广域网(wireless
WAN)连接;2)电池寿命和操作系统都是针对台式机设计的,而非移动设备。

那么如果高通出品 Android 上网本,他们又将如何解决这些问题呢?作为首款 Android 手机,T-


Mobile G1 采用的正是高通的 MSM7201A ARM11 移动处理器,该芯片的时钟频率为 528MHz。

然而高通还配有另外一款双核版的 Snapdragon 芯片组,且时钟频率达到 1.5GHz,并且已经被应


用于其新近发布的一款概念上网本上。

尽管这款上网本目前搭配的是中科红旗出品的 RedFlag Midinux 操作系统,但是将谷歌 Android


操作系统与高通 Snapdragon 芯片组整合到一起并非全无可能。

这种解决方案还能够解决网络连接目前所面临的问题。尽管戴尔、惠普最近纷纷为其上网本增加可
选的无线宽带模块,但是这些模块的价格却较为昂贵,而高通的 Snapdragon 芯片组则具有先天性的优
势,它自设计之初就支持 3G 和 HSPA 网络。而且还内置有 GPS、蓝牙和 Wi-Fi 模块。

除此之外,较之于采用英特尔 Atom 处理器的上网本而言,Snapdragon 芯片组还有另外一个优势,


那就是更加省电。采用高通芯片组的上网本每次充电后的续航时间大概为 5~6 个小时,几乎是当前市面
上常见上网本平均续航时间的两倍。

以上是一些硬件上的优势,那么软件方面 Android 上网本又将有什么上佳表现呢?由于 Android


是谷歌开发的产品,因此他们很显然会为用户提供很好的上网体验。

首先,Android 拥有非常强大的网络浏览器,当然,谷歌还需要对 Chrome 进行一定的改动使其更


加适合上网本使用。

其次,谷歌还特意针对 Android 开设了“Android 市场(Android Marketplace)”以便为用


户提供更多的第三方应用程序。

另外,Android 并不是一款桌面操作系统,因此它能够更好的适应上网本。最有趣的一点在于 ,
Android 目前已经能够支持触摸界面,而高通刚刚推出的上网本也支持触摸屏,这难道仅仅是一个巧合 ?

众所周知,谷歌 Android 平台的野心并不限于手机领域。那么既然有了很好的硬件支持,而且上网


本也将为人们提供一个轻巧便携的网络入口。谷歌又怎么会放弃这样一个机会呢?所以说,“ Android
上网本”并非无稽之谈。


oss.linuxpk.com 2009 年第 1 期 19

产业聚焦

亚洲 Linux 联盟 Asianux 新增第五位成员


12 月 22 日 , 由 北 京 中 科 红 旗 、 韩 国
Haansoft 软件公司、日本 Miracle Linux 公
司 和 越 南 VietSoftware 公 司 联 合 成 立 的
Asianux 公 司 宣 布 , 泰 国 WTEC 公 司 将 加 入
Asianux 公司,成为 Asianux 第 5 位成员。

泰国 WTEC 有限公司成立于 2003 年,专注于


系统集成和 IT 服务领域,目前拥有 400 多家社团
和政府客户。根据 IDC 的数据调查,在 2007 年
泰国最受欢迎的公司名单中,泰国 WTEC 公司位列
第五。WTEC 是泰国科技部组织成立的泰国开源软
件网络项目中的一员,WTEC 公司积极参与各种活
动,共同推进开源文化在泰国的普及。基于他们
的贡献和努力,WTEC 成为泰国开源软件的拥护者
和领导者。

加入 Asianux 联盟后,WTEC 将在泰国发布并推广 Asianux 产品,同时,在自身原有开源软件产品


的基础之上,WTEC 还将通过 Asianux 为企业研发新版本。目前,WTEC 已经具有一系列的开源软件技术,
并基于开源软件发布了很多成功解决方案。

Asianux 联盟具有区别于红帽和 Novell 这些 Linux 厂商的独特合作方式,即联合开发、联合品牌、


联合支持和联合市场,从而建立起整合了亚洲智慧、亚洲资源的标准的 Linux 平台。根据 IDC 报道,
2007 年 Asianux 已经发展成为亚洲第三大 Linux 厂商。大多数亚洲国家正在强力推动当地软件产业和
开源软件技术的发展,Asianux 商业模式也得到众多亚洲国家的认同。

“ 非 常 高 兴 WTEC 能 够 在 继 中 国 、 日 本 、 韩 国 和 越 南 之 后 , 成 为 Asianux 的 第 5 个 成 员 。
”MIRACLE Linux 总裁兼 CEO Takashi Kodama 说,“2008 年泰国软件市场的销售总额是 18000 万
美元,并以每年 15%的速度增长,其中 Linux 市场占据了接近 8%。我相信随着正版化的推进,Linux
市场占有率会不断增长,这要归功于 Asianux 的推广。我非常希望 Asianux 能够在泰国开源软件获得
更多进展。”

越南 VietSoftware 总裁 Dr. Tran Luong Son 说,“泰国 WTEC 作为第 5 位成员加入,对


Asianux 所有的成员来说都是好消息,这意味着 Asianux 未来在亚洲市场版图的扩大,同时认证了四
个联合的合作模式的重要性。Asianux 全体成员的通力合作将给客户更多的信心和更周到的服务。”


oss.linuxpk.com 2009 年第 1 期 20

产业聚焦

2020 年前开源软件发展路线图

据国外媒体报道,近日在法国巴黎召开的“开放世界论坛 (Open World Forum)”大会上,众多开


源软件支持者绘制出了至 2020 年的软件行业发展路线图。

在一篇题为“2020 FLOSS Roadmap”的报告中,开源专家们对 2020 年的自由/开源软件做出了众


多预测,并为开源行业提出了 80 个建议。


oss.linuxpk.com 2009 年第 1 期 21

产业聚焦
他们描绘了一幅开源软件在 2020 年的美好蓝图,到那时候,开源软件将成为软件行业的主流,将大
幅降低地区之间的数字差距。社交网络将使用普及的开放云计算服务,人们在网上不仅仅可以与朋友进
行交互,还可以与政府和企业进行交互。众多公司的 CIO 们将大力支持使用开源软件,并让其运行绿色
数据中心和其它业务模式的核心应用。

不过,该报告的作者表示,要想实现这种美好的愿望,需要实际的行动来支持。投资者、立法者、
教育者和普通的消费者都要完成好自己的角色任务。

他们表示,政府必须支持开放标准和开放服务。这不仅仅是一个意识形态的问题,如果数据需要在
不同的服务和系统之间实现交互,这是必需的。

这就需要一个稳定且中立的法令,来明确规定开放标准和服务如何被制定并使用。他们认为,明确
的法律框架可以帮助避免软件许可的泛滥。

对于投资者,无论是国有还是私有,都应该投资研究和开发战略性开源软件技术,政府和企业应该
建立理论和专业知识的培训计划,以教育新一代软件开发者了解自由/开源软件。

当然,开源软件在未来发展过程中也面临着一些风险,其中最近比较热门的云计算和 Web 服务也带


来了一些风险,它们限制了用户查看源代码的权利,可能造成开源许可问题,而且还可能抑制创新。

该报告的作者主要是来自法国的专家,另外还包括来自比利时、巴西、加拿大、德国和美国等国家
的开源专家。

经济危机碰撞开源产业
碰出新机遇?

伴随着 12 月气温的骤然下降,全球经济环境也迅速迎来了“寒冬”,
衰退已成必然。股票市场的低迷已经影响到所有行业的任何企业,自然每一
个开源厂商、每一个 Linux 项目都或多或少将受到影响。据开源分析师表示,
从短期来看,无论是开源厂商还是商业软件厂商,都将遭受经济危机的伤害 ;
但是从长远来看,开源却又将受益于这次经济衰退,短期的阵痛或有利于其
长期的健康发展,为其带来新的机遇。

Alfresco 是一家在 Linux 基础上开发开源内容管理系统(CMS)的企


业,其副总裁 Matt Asay 近日表示,如果分长期和短期两种情况来看,当


oss.linuxpk.com 2009 年第 1 期 22

产业聚焦
前经济危机给开源软件社区所带来的影响是截然不同的。他表示,从短期来看,在未来数周内,无论是
开源行业还是商业软件领域,所有人将会发现“现实是残酷的”。他还表示,过去几个月已经是他所经
历的最为艰难的岁月。

这无疑是一个坏消息。不过 Asay 同时还表示,好的方面是,从长期来看,开源将大大受益于这次经


济衰退,由于多数公司会采取大幅缩减开支的措施,来应对经济危机,而这对于低成本的开源软件来说,
这无疑是一个机会。

来自分析机构 Gartner 的副总裁 Mark Driver 对此深表赞同,“我认为开源软件在未来将极具吸


引力,因为它的获得成本要低的多。如果我可以不用花钱就能使用它,在当前经济状况下,这无疑是一
件再好不过的事情,对用户来说颇具吸引力。”

对于使用开源软件的企业来说,这当然是一件好事情,但是,对于那些依靠服务和支持来谋生的厂
商来说,所受影响的程度还不能确定。不过,至今为止,经济低迷在这个领域所带来的影响还没有那么
强烈。

举个例子来说,Canonical 靠销售和支持 Ubuntu 来实现收入。由于它的资金来自于创始人 Mark


Shuttleworth 个人,Canonical 受经济衰退的影响并不大;其营销经理 Gerry Carr 表示,该公司
的员工数量目前已经超过 200 人,仅仅在去年就增长了 100 人。Canonical 正在招聘更多的开发者,
并大力补充其商业化团队 ——与 OEM 厂商协作的员工。Canonical 的增长势头非常强劲。

一、价格优势是开源取胜的关键
Asay 提到,Linux 公司通常在价格上比专有软件公司更具优势,当经济下滑的时候,这可能是一件
非常关键的事情。他表示,“尽管现在处于经济寒冬,在刚过去的一周,我们还是签下了三个单子:其
中一个单子竞争对手产品价格是 500 万美元,而我们的产品只有 50 万美元;另外,我们还以 25 万美元
拿下了另一个单子;还有在加拿大的一个单子,来自专有软件公司的产品标价超过了 1 百万美元,而我们
的只有 10 万美元。”

Red Hat 市场战略主管 Joel Berman 也同样认为,在经济艰难时期,Linux 和开源软件是更有吸


引力的选择。“这对我们是一个利好消息,企业将会更多的关注开源...因为这可以让它们把购买软件的
钱省下来,然后将其用于并购其它企业,或者发展新的业务。另外,它们可以在现有的服务器上安装上
Linux 操作系统,给老服务器注入新生命力,充分利用已投资的设备。”

Canonical 的 Carr 先生表示,对于开源所取得的这些成功他并不感到意外。“Linux 在这类市场


中颇具优势;人们希望能够节省在 IT 系统上的投资。成本不是一切,但却非常重要,尤其在经济危机中
更是如此。”

对于 Zimbra 来说,这一点也非常重要。Zimbra 是一个电子邮件和日程软件厂商,直接与微软的专


oss.linuxpk.com 2009 年第 1 期 23

产业聚焦
有软件 Exchange 竞争。去年,Zimbra 的收费邮箱年收入已经从 1200 万美元增长至 2000 多万美元,
其客户数量也从 1 万多暴涨至 3 万多。其营销和产品副总裁 John Robb 表示,“每天我们醒来的时候会
问自己这样一个问题,‘如何我们才能发展的更大?’”

Zimbra 的开发社区的成员数量已经从 12000 个增长至 18000 个。该公司最近开始提供一个邮件托


管解决方案,印度最大的一家公司已经从 IBM 的 Lotus Notes 转向它所提供的解决方案,不过具体销
售信息并未被披露。

二、面临的风险:未来不确定
不过,虽然有以上利好消息,开源软件同样也面临着巨大的风险:客户可能习惯于免费使用软件。
Driver 表示,“我已经看到低迷的经济正在让更多的人开始关注开源,但是如果经济低迷持续的时间过
长,经历一场持续一年或更长时间的真正经济衰退,我担心的一件事情恐怕会发生,普通的 IT 机构或许
会怀疑自己是否还需要一个服务和支持。如果它们面临这种经济状况,而且不知道未来会如何,它们可
能会认为,省去在服务和支持上的投资,可以生存的更长一些。”

Driver 表示,对于开源软件厂商来说,由此带来的危险结果是,“如果使用我们软件的客户不选择
使用服务和支持的时间越长,他们或许认为,其实不需要厂家的支持和服务也不会有什么问题。” 如果
客户具有了这种观点,依靠服务和支持生存的开源厂商就麻烦了。

遭遇这种情况的即使不是全部开源软件厂商,也应该是绝大多数。Asay 表示,在他经历过的每个销
售案例中,客户在做出购买决策之前,可以有很长的时间进行测试评估,据他表示,一个财富 10 强的公
司在其生产过程中使用 Alfresco 的产品已经有一段时间,但是至今还没有给 Alfresco 一毛钱。

在目前经济情形下,这种现象给开源厂商所带来的危险比以往更大,尤其对那些小公司来说更是如
此。正如 Driver 所说的,这已经和开源关系不大,而是一个小厂商如何才能生存下去的问题。

传统的开源厂商都在对如何将用户转化为客户而感到发愁,Driver 表示,在经济低迷时期,实现这
个目标将更困难,因为很多用户通常仅仅希望免费使用开源产品,而不想成为它的客户。

三、更富创新性才能安度经济危机
那么,面临一个可能更加漫长的经济低迷时期,开源软件厂商该如何应对?Asay 的建议是,“所有
人应该考虑盈利问题。当然,还有发展问题,但是盈利应该是第一位的。”

必须想办法卖出尽可能多的软件。另外,将更多的精力放在研发上。如果一个产品足够优秀,它的
销量自然会上涨。这一点对于目前的状况尤其正确,现在开源厂商必须依靠自己的产品质量来反击质疑
的声音。


oss.linuxpk.com 2009 年第 1 期 24

产业聚焦
另外,开源厂商必须让自己有区别于竞争对手的地方,或者说必须有自己的“绝招”。Asay 表示,
“开源厂商必须确保自己的产品或服务有独到之处。功能扩展、附加功能、增强支持的体验、类似软件
即服务(SaaS)的在线服务、托管软件。托管软件是开源行业应该加强投入的一个领域。让客户可以按月
交费,在经济低迷时期或许是一个可以让你成功的方案。”

Driver 则表示,在经济低迷时期,创新、开发和销售比以往任何时候都重要。他认为,对于小厂商
来说,现在是缩衣节食的时候了。调查自己的核心用户,然后充分利用开源的独特之处,例如开放创新,
或许它可以成为一个新业务模式创建的催化剂。云计算、订户标价等模式的流行说明,创新是可以针对
客户的,而不仅限于技术。它们应该创建协作性垂直用户社区,并在这个社区中亮出自己更多观点。
Driver 表示,如果他是一个开源厂商,他希望能够发现新的方法来解放自己的产品,并让社区成员参与
到产品相关工作中来。

Driver 的建议,其实已经被 Red Hat 用来发现新的收入渠道。Berman 表示,“我们最近推出了


一个全球咨询评估服务。我们将走出去了解用户的硬件和软件等情况,看看什么应用可以被转移到开源
平台上。这类服务的需求正在上升;很多人已经开始关注它。我们网站的点击次数正在因此而暴涨。”

Driver 同时指出,开源行业的巨头现在还可以进行一些物美价廉的收购交易。他建议大型开源厂商
可以关注一些“跳楼价”出售的企业,对于那些手中有钱的开源厂商来说,经济低迷时期就是黄金时期。

这个观点也被 Canonical 公司所认同,Carr 表示,“我们认为现在是扩张的一个伟大时机。你可


以招聘到自己需要的人才,广告成本正在下降。我们手里有很多签到 2011 年的合同,为了更好的履行这
些合同,我们还需要招聘更多的人员。”

四、努力把握好现有客户
最后,在当今特殊的宏观环境下,以往的一些建议将变得更加重要。Asay 表示,“把握好现有的客
户,企业所遭遇的最糟糕的事情莫过于客户的离去。客户是它们最稳定的收入来源。把握好现有的客户,
并将更深层次的产品和服务卖给他们。要知道,客户群的建立并非一朝一夕之功,因此需格外珍惜。”

开源公司可以做的最重要的一件事情是,冷静应对当前局势,安然度过困难时期;所有困难终会过
去。用 Asay 的话来结束本文,“不要慌张——如果你的企业一直是认真经营,没有理由自乱阵脚或去
解雇所有的人。”


oss.linuxpk.com 2009 年第 1 期 25

产业聚焦

PHP on Windows,互操作一大步
陈杰

12 月 10 日,微软中国与 PHPChina 联合宣布互操作合作计划。此合作计划旨在满足国内许多 PHP


用户选择使用微软的 Windows 操作系统的需求,以提高 PHP 用户使用体验,以及网站开发与维护的技术
水平。

此次合作计划包括:微软将为 PHPChina 技术人员进行培训、为 PHPChina 社区提供技术资料、参


与 PHPChina 的社区活动、并为其社区成员提供技术支持、以及 PHPChina 和微软近日联合启动的"竞
速 09"PHP on Windows 深度体验等活动。

这是微软中国与国内开源社区比较全面、也是比较深入的一次合作,从合作内容可以看出,不仅包
括了人员培训,技术支持,以及社区参与,还联合社区共同举办了一次深度体验活动,这种全方位、多
角度的参与国内开源社区的行为,对于微软中国来说还是首次的。

PHPChina 创始人耿志军表示:“在我们社区有很多使用微软平台的用户,过去由于缺乏微软的支
持,他们在社区得到的帮助很有限,我们很高兴这次能与微软公司建立合作,在异构环境日趋发展的今
天,我们有必要,并且必须有能力为用户提供更好的服务,为用户提供更加广泛的平台选择。”

作为 Web 解决方案,开源领域有一套黄金组合,那就是"LAMP 架构",L 指的是 Linux 操作系统,A


代表的是 Web Server,也就是 Apache 服务器,M 代表的是数据库软件 MySQL,P 则指的动态网页处
理技术,PHP、Perl 和 Python 等。而在实际的应用中,很多用户选择了 Windows 作为 PHP 应用的平


oss.linuxpk.com 2009 年第 1 期 26

产业聚焦
台,在 Windows 上搭建 Apache+MySQL+PHP 的环境,同样也能达到理想的应用效果和效率,这也是开
源业界人士谈论"混源"架构的典型案例,从"LAMP 架构"到"WAMP 架构",这也是微软认同的"异构"环
境。

进入 2008 年,微软与开源在互操作领域更为广泛并且频繁的接触,在一年一度的 OSCON 大会和稍


后进行的 Linuxworld 大会上,微软均高调强调其互操作理念,以及在互操作领域所进行的努力和贡献 ,
开源业界也逐渐意识到,解决互操作的问题,是一个共赢的举措,能使得开源软件在微软的商业平台上
更好的得到普及和推广,因此,开源世界与微软都加快了互操作的步伐。

OSCON 大会后,微软宣布赞助 Apache 基金会 10 万美金,一跃成为了 Apache 基金会的白金赞助


商。更为难能可贵的是,微软在赞助 Apache 的同时宣布,微软将向 ADOdb 贡献一款补丁,ADOdb 是一
个 PHP 数据访问层,此次发布的补丁将首次基于 LGPL 许可证,也就是说,微软第一次基于开源许可证
LGPL,向开源社区贡献了代码。

可以看出,进入 2008 年后,微软在互操作层面做了很多努力和尝试,尤其针对 PHP 首次基于开源


协议贡献了代码。除了微软的努力外,2008 年,微软发布了 Windows Server 2008,以及 IIS
7.0 , 这 一 平 台 的 发 布 , 使 得 更 多 运 行 PHP 的 用 户 将 平 台 转 为 了 Windows 和 IIS , 因 此 过 去
的"WAMP"架构继续向"WIMP"架构进行迁移,Web 服务器从 Apache 转向了 IIS。

用户的需求,使得微软更加重视 Windows 上运行 PHP 的性能。因此,此次合作也是在如此的大背景


下展开的,是微软与开源世界更为融合的前提下展开的,也是混源架构(异构环境)普遍存在的基础上
展开的。

微软(中国)有限公司平台战略总监李科研就表示:“互操作原则是用户的需求,也是微软的基本
策略。开源软件与微软应该是伙伴的关系,我们在性能在能互补,在平台上能互操作,这能为我们的用
户带来实际的好处。为了实现互操作性,微软积极地寻求合作。此次与 PHPChina 的合作,是微软全球
互操作性战略在中国的延续,也是微软与中国开源社区合作的新起点。”

PHP 开始 On Windows 了,那么,其他的 OpenSource 是否应该考虑 On Windows 了呢?


oss.linuxpk.com 2009 年第 1 期 27

开源通讯

问题,业内人士大多认为,其兼容性以及缺少杀
SIP 与 Sun 携手共建 手级应用等问题是开源软件在探寻商业模式之路

MIIT_CSIP - Sun 开放技 上的软肋。

近日,在 CSIP 陈伟博士等的陪同下,中国

术创新实验室 开源软件推进联盟主席陆首群走访了北京新学堂
网络科技有限公司,公司首席执行官张昀为其讲
2008 年 11 月 19 日,CSIP 副主任邱善勤博
解了新学堂的商业模式。
士和 Sun 公司中国区总经理薛耀焜先生代表双方
新学堂目前开发的是一款基于开源软件和
签署了 MIIT_CSIP - Sun 开放技术创新实验室
SAAS 模式的高效网络学习平台技术,并在短时
谅解备忘录。工业和信息化部软件服务业司软件
间内已实现大幅盈利。它将开源软件和 SAAS 模
处处长孙文龙、CSIP 主任陈伟及 Sun 公司董事
式结合,极大地加快了软件开发速度,大幅降低
会主席 Scott McNealy 先生等双方高层出席并
了软件部署成本,并且具备较好的跨平台特性,
见证了签字仪式。
成功解决了开源软件的兼容问题。可以说,新学
双方将在工业和信息化部的指导下,在绿色 堂已经构成开源软件中的杀手级应用。
IT、中国开源社区运作体系、开源人才培养、开
陆主席对新学堂取得的商业模式突破表示高
源应用及软件互操作等五个领域开展合作,共建
度赞赏,他认为这为开源软件商业模式提供了一
开源生态环境,为行业发展提供支撑。
条可借鉴的道路。
开源技术创新实验室的成立,标志着国家软
件与集成电路公共服务平台在开源公共服务平台
建设上具有了一个良好开端。这一公共服务平台
的建设,将有助于引导企业在生产设计流程中充 从索取到贡献
分利用好国家平台的公共服务资源,缩短产品上
市时间,减少企业面临的设计困难,营造更富活 红旗为社区贡献源代码
力的开源软件环境,培育和打造开源产业链,推 据悉,近日红旗桌面研发部门在 KDE 项目上
广开源理念,并帮助中国工业和信息产业提高技 取得了重大的突破。红旗研发部张强为 KDE 提交
术创新能力。
了关于 Kwin 和 Plasma 的相关 Patch,并得到
了 KDE 社 区 核 心 成 员 Seigo 发 出 的 SVN
commit 帐号的邀请。同时,研发部李耀鹏也为

新学堂科技推出基于开源软 KDE 社 区 提 交 了 关 于 密 码 和 时 区 设 置 相 关 的
Patch,并修复了 KDE 中较为严重的 Bug。
件的杀手级应用
开源软件的商业模式一直是业界高度关注的


oss.linuxpk.com 2009 年第 1 期 28

开源通讯
Novell 助力 PlateSpin 红旗 Linux 帮助网吧

进行重大革新 降低运营成本
12 月 4 日,Novell 宣布对 PlateSpin 工 自 2002 年以来国家相关部门一直在推行软
作负载管理解决方案进行重大革新。利用 件正版化进程。近日,江西省南昌市数百家网吧
Novell 在 协 同 操 作 方 面 的 优 势 , 新 版 实现了软件正版化。据悉,在此次南昌文化局推
PlateSpin 系列产品可使处于混合 IT 环境中的 动的软件正版化工作,主要针对服务器操作系统
客户能够在物理和虚拟基础设施之间剖析、迁移 软件,相关部门参考了工业信息产业部的推荐品
保护并管理服务器工作负载。凭借这些新的增强 牌,分别推荐了红旗 Linux 服务器操作系统和微
功能,PlateSpin 工作负载管理产品是目前市 软的服务器操作系统,南昌市共有近 600 家营业
场 上 唯 一 的 支 持 32 位 和 64 位 Windows 与 网吧出于性价比的考虑选用了红旗 Linux。
Linux 服务器、以及所有领先的系统管理程序的
解决方案。

中标软件获两亿元注资
北京 Gnome 用户组 11 月 19 日,中标软件董事会正式通过股东
方 CEC、CETC 各向中标软件注资一亿元的决议,

在京成立 中标软件将成为我国唯一一家亿元级开源软件操
作系统企业,进一步巩固了公司在基础软件领域
北京 Gnome 用户组,(简称 BeijingGUG, 的位势!
或 BGUG)是一个位于北京的致力于对 Gnome 平
还是 11 月,中标软件相继签约广州市政府
台进行推广、开发及本地化工作的开源社区组织。
信息中心、广州市中医院,广东省英德中医院、
北京 Gnome 用户组于 2008 年 11 月 26 举行第一
中国电信揭阳分公司、西藏公安厅等多个省市级
次会议,筹备北京 Gnome 用户组活动相关事宜。
单位,为这些单位提供整体解决方案。
现暂定于每月的第三个星期三晚 7 点举行例行聚
会,具体地点将在网站上通知 注资后中标软件将继续以“一架式”软件为
(http://www.gnome-cn.org/)。 发展方向,做大做强我国的操作系统产业,通过

BeijingGUG 的主要交流方式是社区论坛。 吸收更多优秀的软件人才、软件技术和软件产品,


更加广泛地参与到各行业的信息化建设中去。


oss.linuxpk.com 2009 年第 1 期 29

开源通讯
Atmos 能通过全球云存储(cloud storage)
红旗 2000 再获政府青睐 环境,协助客户将大量非结构化数据进行自动管
理。凭借其全球集中化管理与自动化信息配置功
日前,红旗 2000 公司应邀赴香港参加了 “
能,可以使 Web 2.0 用户、互联网服务提供商、
第十二届北京-香港经济合作研讨洽谈会”。在
媒体与娱乐公司等安全地构建和实现云端信息管
本届洽谈会的亮点“京港科技与金融服务对接项
理服务。(EMC 吴瑕)
目推介会”上,红旗 2000 公司与香港投资企业
中国数码信息有限公司现场签署投资意向协议,
宣布双方将共同投资组建一家新公司,致力于信
息技术行业发展,共创我国 IT 行业发展的繁荣 金蝶中间件为“全国政
新局面。
协”保驾护航
近日,金蝶中间件有限公司再传捷报,其开
金蝶开源中间件 Apusic 源中间件产品 Apusic 成功中标全国政协办公业
务资源信息系统工程。据介绍,金蝶中间件的旗
成功替换.NET 产品 舰产品 Apusic 应用服务器和消息中间件将作为
金蝶中间件有限公司近日传来喜讯,成功中 基础支撑平台,用于构建综合管理与信息传输服
标湖南省电子政务外网数据交换平台及信用信息 务的基础系统。这是继成功签约国家发改委、国
系统二期。据悉,本项目将采用基于 J2EE 的金 家质检总局、国家信访局、国家监察部等国字头
蝶 Apusic ESB 替换之前基于.NET 的产品。这 客户之后,金蝶中间件再次中标重量级电子政务。
是金蝶中间件继国家质检大通关、宁夏三农数据
交换平台、南京江宁权力阳光等项目之后再次中
标数据交换平台及应用整合的项目。(金蝶中间
件 李军)
威盛波兰发布新款

C7-M 核心上网本
EMC 发布云存储 威盛与波兰厂商 Aristo 合作,推出的新款

基础架构 Atmos 迷 你 上 网 本 “ Aristo Pico 840 Mini-


note”, 现已在波兰上市。其 XP 版零售价约合
2008 年 11 月 12 日, EMC 公司宣布首度推
人民币 2820 元,Ubuntu 版为 2420 元。VIA 和
出 云 存 储 基 础 架 构 ( cloud
Aristo 此 前 还 联 合 推 出 过 Aristo Pico
infrastructure)EMC Atmos,又称 Maui。
640/740 两款类似产品。据悉,新品还在使用
EMC Atmos 是 第 一 套 容 量 高 达 数 千 兆 字 节
C7 系列处理器,并未采用 VIA 的 Nano 平台。
(petabyte,简称 PB)的信息管理解决方案。


oss.linuxpk.com 2009 年第 1 期 30

开源通讯
SUSE Linux Enterprise 领跑 ISV 支持 工程。这是继国家金宏工程、地理空间信息库之
认证 后,以金蝶中间件 Apusic 为代表的开源中间件
正式进入“四库十二金”的第三个金字工程。此
11 月 26 日 , Novell 在 京 宣 布 在 SUSE
次中标对于正蓄势待发的国产基础软件业来说是
Linux Enterprise 最 新 版 本 之 上 已 有 超 过
一个振奋人心的好消息,对基础软件业的发展意
2500 个软件应用程序通过认证,并且平均每个
义深远。
月增加 140 个新的应用程序。与其他最新版本的
商 用 Linux 发 行 版 相 比 , SUSE Linux
Enterprise 9 和 10 具有最多的已认证软件应
用程序。 根据 IDC 研究公司的研究报告,SUSE Splashtop 荣获《科技新时
Linux Enterprise 是发展最快的 Linux 发行
版,同时它也是许多最主要的企业软件厂商的首 代》等三项创新大奖
选 Linux 平台,其中包括 Microsoft 和 SAP 公
美 国 加 州 圣 何 塞 2008 年 11 月 12 日 讯 ,
司。
DeviceVM 宣 布 其 获 奖 产 品 - 即 时 启 动 平 台
Splashtop 获 得 了 全 球 最 大 的 科 学 技 术 杂 志
《科技新时代》颁发的“最佳创新奖”。同时,

各地开源社区进行时—深圳 消费电子协会(CEA)授予 Splashtop 使能技


术产品类的 2009 年创新设计和工程奖。2008
深圳 Linux Unix 用户组(SZLUG)于 11
年 11 月 25 日 — — DeviceVM 公 司 的
月 30 日 下 午 聚 会 , 庆 祝 Fedora 10
Splashtop 产品在北京又获得了 LinuxWorld
"Cambridge" 发布。SZLUG 成立于 2006 年初
China2008 颁发的“开源创新产品奖”。
通过定期的聚会活动,交流使用和开发自由软件
的心得,鼓励和吸引各行各业人员的参与,向社
会传达自由软件的力量,让更多的人接受自由软
件的理念。同时经常与国内和国际其他开源成员 中兴通信手机出货量激增
组织进行聚会交流,紧跟 Linux Unix 最前沿
中兴通信手机(以廉价手机为主)过去多为
的发展步伐。SZLUG 目前拥有 500 位社团成员。
订牌生产,如订别人的牌子:沃达丰、Telus 等。
2004 年出货量为 1100 万部,2007 年为 3106
万部,2008 年计划 5000 万部。预期 2013 年市

Apusic 中标国家金质工程 场份额将进入全球前三名。

10 月 20 日,金蝶中间件成功中标国家金质


oss.linuxpk.com 2009 年第 1 期 31

开源社区

MySQL 社区稳定版 5.0.75 发布


但显然官方并没有停止对 5.0 系列的开发,今
早在 MySQL 的 ftp 服务器上已经放出了新的社
区稳定版 5.0.75 的下载,这是对上一个社区
稳定版 2008-08-07 的 5.0.67 的 bug 修正更
换版本。MySQL 5.0 从 5.0.27 以后,单数版
本为社区版。双数版本号为企业版。如果您还不
想从 5.0 升级到 5.1 的话,可以继续使用 5.0
尽管 MySQL 5.1 已经在发布了 5.1.30 后 GA, 的这个版本。

源码包:ftp://mirror2.dataphone.se/pub/mysql/Downloads/MySQL-5.0/mysql-
5.0.75.tar.gz

改进:http://dev.mysql.com/doc/refman/5.0/en/releasenotes-cs-5-0-75.html

适合所有 Linux 发行版的包管理器


据 linux.com 报道,下一代包管理器 Nix 本共存,因此用户可以自由降级。Nix 将是复杂
将为不同的 Linux 发行版如 Ubuntu、Debian 环境和需要编写支持不同库、编译器和解释程序
、SUSE、Fedora 和 Red Hat,提供一个部署 的开发者的有利的系统管理工具。现有的包管理
二进制或源代码包的简单的分配-独立方法。更 器在软件升级方面都存在缺陷,通过使用 Nix,
有利之处是,Nix 不会干扰现有的包管理器。与 升级将是非常安全的,它不会覆盖之前已安装的
现有包管理器不同的是,Nix 允许软件的不同版 软件,这意味着你可以随时回到旧版。


oss.linuxpk.com 2009 年第 1 期 32

开源社区

openSUSE 11.1 Final 正式版发布

12 月 22 日,由 Novell 公司赞助的社区开源项目 openSUSE,近日宣布推出最新版本的免费开源


Linux 发行版——openSUSE 11.1。新版本可提供给用户带来更丰富的体验,桌面生产力、娱乐应用、
以 及 软 件 和 系 统 管 理 功 能 也 显 著 增 强 。 openSUSE 11.1 也 是 第 一 个 完 全 使 用 openSUSE Build
Service 创建的版本,开发流程更透明,社区贡献率更高。openSUSE 发行版是 Novell 公司屡获殊荣
的 SUSE Linux Enterprise 产品的基础。

openSUSE 平台总监 Andreas Jaeger 表示:“openSUSE 项目新版本的发行有很多值得我们骄傲


的地方。它不仅是 11.0 版的卓越升级,对项目自身来说,同时也是一个巨大飞跃。作为第一个完全使用
openSUSE Build Service 创建的版本,它是本项目的一个重要里程碑。现在我们可以在更加透明的
环境下与所有 openSUSE 贡献者一起工作,这帮助我们在发布 openSUSE 未来版本方面能够取得更大的
成功。对广大用户来说,openSUSE 11.1 易于使用,它拥有极富吸引力的桌面,还自带上千种工具和
应用程序,包括游戏、网络浏览器、即时通讯客户端、多媒体播放工具、生产力工具,安全特性等,并
可轻松连接到无线网络。

“ openSUSE 11.1 完 全 利 用 新 近 发 布 的 openSUSE Build Service 1.0 开 发 。 openSUSE


Build Service 1.0 是一个独特的协作系统,它能够让贡献者在 Linux 软件包或解决方案堆栈上开展


oss.linuxpk.com 2009 年第 1 期 33

开源社区
密切合作,使开发人员更加便捷、快速地为 openSUSE 项目作贡献。

openSUSE 11.1 中的更新包括:

● 新的 Linux 核心 2.6.27.7 增加了一些新设备的支持功能和改良的摄像头支持功能

● 一个无与伦比的远程桌面体验工具 – Nomad

● 更简单的授权,无需终端使用者授权协议(EULA),并去除了此前阻碍 openSUSE 重新分布操作的软件

● 改善了 openSUSE 的系统管理和安装套件——YaST,包括改进的分区、新的打印机模块、和一个新的系统安


检模块

● 一些最新版本的主要应用程序,包括 Firefox* 3 .0.4、OpenOffice.org 3.0、GNOME* 2.24.1、


KDE 4.1.3 + KDE 3.5.10 和 Mono 2.0.1

● GNOME 和 KDE 的最新版本:

① 对 GNOME 的改进包括:升级强大的鹦鹉螺文件管理器、简化管理和编辑照片的 F-Spot


、强化 BansheeTM 和移动设备之间更好的同步通信工具—— Pidgin 即时消息客户端、一个
支持视频聊天的 VoIP 客户端,和支持 YouTube 视频和数字电视的 Totem 电影播放器

②对 KDE 4.1.3 的改进包括:Plasma、海豚文件管理器、KDE-PIM 套件、默认支持的


Kwin 桌面特效、Powerdevil 电源管理器、Marble 与 OpenStreetMap 地图系统集成

● 提高生产力的 OpenOffice 3.0 Novell?版,包括文字处理、演示文稿制作、电子表格制作,并且能够读写


所有的 Microsoft* Office 文件

● 通过改进 zypper/ libzypp 的使用,进一步改善软件管理

openSUSE 社区经理 Joe Brockmeier 表示:“我们发布 openSUSE 11.1 版本的目的不仅是为


所有的流行应用程序提供配套升级和改善总体分发情况,同时也是为了赋予创建过程更高透明度,提高
重新分发能力和社区贡献率。 Novell 对调动整个社区参与到 openSUSE 的开发与构建的过程非常感兴
趣,而刚发行的版本在这方面又向前迈进了一大步。”

获取方式

www.opensuse.org 提 供 openSUSE 11.1 的 免 费 下 载 服 务 。 用 户 也 可 登 录


http://shop.novell.com,以 60 美元的价格获取零售版本,其中包括 90 天的安装支持、主 DVD 盘
中未配备的商业化应用、备受欢迎的“入门指南”,以及为 Linux 新用户提供的印刷手册。


oss.linuxpk.com 2009 年第 1 期 34

开源社区

Mozilla 移动浏览器“Fennec”Alpha 2 发布

Mozilla 将其首款移动设备浏览器的 Alpha 更新到了第二个版本,这一软件同样基于 Gecko 内核,


包含 TraceMonkey 特性,吉祥物为撒哈拉沙漠中的一种狐狸 fennec fox。

Windows/Mac/Linux 系统均可以直接开测。本次更新提升了启动速度,页面打开反应速度和缩放
速度。

下载:http://www.mozilla.org/projects/fennec/1.0a2/releasenotes/


oss.linuxpk.com 2009 年第 1 期 35

开源社区

MagicLinux 2.1 正式版发布

自 2.0 正式版本发布到现在已经过去了近两年的时间了,这两年时经历了许多事情,magic 的开发


也滞后了许多,根据现在的情况,虽然对 2.1 版本的目前状况我并不满意,但继续开发下去似乎也无必
要,因此,决定发布 2.1 的最后一个版本,也就算是正式版了吧。自 2.0 以来,系统做了很多的更新,
但基本架构还是保留了 2.0 的,可以说是 2.0 的一个 bug 修正版。

系统的主要组件如下:

kernel-2.6.25.20/qt3.3.8/kde3.5.10/gcc-3.4.6/glibc-2.3.6/xorg-1.5.2 , 几 乎
都是同一个大版本中的最后一个小版本,包括其它的一些软件,比如 amarok/kaffeine 等。

自 rc3 以来的更新如下:

● 更新内核到 2.6.25.20

● 更新 xorg-server 到 1.5.2,同时更新配套软件包。


oss.linuxpk.com 2009 年第 1 期 36

开源社区
● 更新 kfuseiso,修正中文支持问题。

● 更新 ffmpeg,打开 swscale 支持。

● 更新 fcitx 到 Girldog,修正了一些 bug

● 更新 wine 到 1.1.8,修正部分中文的显示问题

● 更新 konversion

● 更新 cmake

● 更新 hal,修正普通用户挂载需要输入密码的问题。

● 更新 udev,修正 hal 不能挂载移动硬盘的问题。

下载地址:

CD 版本:http://apt.magiclinux.org/iso/MagicLinux-2.1.Houyuan.cd-1.iso

DVD 版本:http://apt.magiclinux.org/iso/MagicLinux-2.1.Houyuan.dvd-1.iso

Slackware Linux 12.2 发布

Slackware Linux 的正式发布由 Patrick Volkerding 负责,这是一套先进的 Linux 操作系统,


它为着易用性和高稳定性双重目标而设计。Slackware 包含最新的流行软件,并按照传统提供简单易用
性、灵活性和强大的功能,它将世界的精华呈现在你的面前。 Linux 是最早由 Linux Torvalds 于
1991 年发起的类似 UNIX 的操作系统,它得益于现在全世界数百万用户和开发人员所作出的贡献。
Slackware Linux 同时向新手和高级用户提供一套先进的系统,可装备使用在从桌面工作站到机房服


oss.linuxpk.com 2009 年第 1 期 37

开源社区
务器的任何场合。可以按需使用各种 web、ftp 和 email 服务器,可以在各种流行的桌面环境中作出选
择。大量的开发工具和编辑器、库文件被包纳进来,以方便那些希望开发或编译额外软件的用户们。

以下为 Slackware 12.2 的主要变化:


● Linux kernel 2.6.27.7
● X server 1.4.2
● Xfce 4.4.3
● KDE 3.5.10

● 添加了 wicd(位于 /extra 中)、libgphoto2、pm-utils 等工具和库。

下载:ftp://slackware.mirrors.tds.net/pub/slackware/slackware-12.2-
iso/slackware-12.2-install-dvd.iso

领跑的开源软件 Apache
中国开源软件推进联盟主席 陆首群

中国开源软件推进联盟主席 陆首群(左)和 Apache 基金会 Justin Erenkrantz 主席(右)


Apache 社区今天到北京来召集国际的和本地的核心开发者、志愿开发者和使用者参加的讨论会,


oss.linuxpk.com 2009 年第 1 期 38

开源社区
Justin Erenkrantz 主席与会,足见 Apache 对这次会议的重视。这次会议的目的是要促进开源软件
Apache 的发展,特别是促进 Apache 在中国的开发和应用。对此,我是全力支持的。

我认为,Apache 有五个特点:

1. Apache 社区是开源世界的优秀社区,它开发开源中间件软件,通常配置 Web 服务器和应用服务


器。Apache 引领开源潮流,也是互联网的支柱。我曾对各种开源软件的不同技术发展阶段进行分类(分
为:最成熟、成熟、成长中、崭露头角、萌芽期等各个阶段), Apache 是“最成熟”的开源软件(之
一)。

2. Apache 社区向社会募集资金建立 Apache 基金会,虽然 Google、微软、雅虎、惠普等都是


Apache 的赞助者,但与别的基金会不同,这些企业“只出钱不干预”。作为决策机构的 Apache 社区理
事会,是由社区 300 位核心开发者自由选举出来的(也可选举赞助商的人员),每个理事的人格是独立
的,不受某一家或若干家企业直接或通过基金会间接的控制和干预,这是 Apache 基金会不同于其他社
区基金会的地方。

3.Apache 是非赢利的开源组织,Apache 的开源许可协议类似于 BSD,也与 MIT 类似,比自由软


件的 GPL 许可协议要宽泛得多。

4.Linux、Apache 等开源软件在互联网上具有很大优势。2005-2006 年,Apache 的 Web 服务器


在互联网上的占有率达 70%以上,近年来虽有所下降,但还是维持在 50%左右;微软的 IIS 服务器占有
率目前已上升到 35%,直逼 Apache。对这个现象,我曾请教过 Apache 理事 J.Aaron Farr 先生,他
说微软兼并的一些互联网网站,其中有些已经死了,但还统计在内;后来微软的专家告诉我,这种现象
很普遍,Apache 也有。Apache 与 IIS 的差距最小到 15%,现在又稍稍拉开,至于未来走势如何 ,
Apache 将采取什么对策,是否能继续保持优势,这次我想听听 Apache 高层的意见。

5.关于 Apache 在中国的应用,我手头有一个统计:在 2005 年,Apache 应用占国内 Web 服务器


市场的 17.65%,在全球 175 个国家和地区中,位居倒数第二;2007 年 9 月统计,中国市场 Apache 应
用占有率提升到 24.22%,中国在全球的位置有很大提高。

下面我想谈一点希望:

当前中国有多少 Apache 的爱好者、志愿开发者和使用者,我们尚无确切的统计数字,在 Apache


展示的未来 70 个开发项目中,有多少中国人参与,我也不甚清楚。我希望通过这次 Apache 来华举办的
讨论会,中国开源软件推进联盟愿与 Apache 社区合作,把人才凝聚起来,把培训工作抓起来,把中国
的 Apache 社区建立起来,扩大 Apache 在中国的应用,促进中国人对 Apache 多做贡献。


oss.linuxpk.com 2009 年第 1 期 39

开源社区

英特尔中国开源技术中心系列专访之二
——虚拟化中国团队

陈杰

Intel 开源技术中心虚拟化团队合影
提到英特尔,一直以来,人们的惯性思维都是一家硬件公司,他们关注的是生成芯片、销售芯片,
而软件来自于不同领域,这和英特尔是毫不相干的事情。事实上,在软件领域,尤其是开源软件领域,
英特尔做出了很多的贡献,很明显的一组数据就是在英特尔中国,专门从事开源软件研发的就有 150 个
工程师左右,这些工程师做的每一件事情都与开源软件有关,并且都回馈与开源社区。《开源》杂志将
做一系列采访,一一介绍来自英特尔开源技术中心的不同团队,介绍他们所涉及的开源项目及从事的工
作。


oss.linuxpk.com 2009 年第 1 期 40

开源社区
《开源》:首先介绍一下你们虚拟化团队的历史,目前负责哪些方面的研究?

虚拟化团队:虚拟化中国团队成立于 2004 年年初,目前有二十多位工程师,活跃于开源虚拟化软件


Xen 和 KVM 中。该团队在 Xen 和 KVM 中加入了基于 Intel 虚拟化技术(VT) 的完全虚拟化支持,使得
操作系统不需要任何修改就可以无缝地运行在虚拟机中。他们还和各个虚拟化软件厂商(如 RedHat、
SUSE, Sun 等)紧密合作,帮助他们将开源虚拟化软件产品化。

《开源》:请简单介绍一下项目的具体情况任何,以及目前的进展情况。

虚拟化团队:这个项目对 Intel,对开源世界的意义,目前的进展情况, 以及在研发上取得了哪些


突破性的成果虚拟化是当今 IT 业界的一个重要发展趋势。在大型数据中心和企业中,虚拟化已经得到了
非常广泛的应用。在将来炙手可热的云计算中,虚拟化也是它的支撑技术之一。最初的虚拟化软件是由
商业软件所一统天下的。随着 Xen 和 KVM 的迅猛发展,已经有多个开源厂商推出了基于开源虚拟化软件
的产品,这给客户提供了更多的选择。事实上,今天开源虚拟化软件产品已经占有了非常重要的地位,
它们的市场份额还在不断扩大。

虚拟化中国团队所取得的一些进展:

在 Xen 中首先创立了基于硬件的完全虚拟化的通用软件架构,这奠定了 Xen 对各类硬件虚拟化


技术(如 AMD SVM 和 Intel VT)支持的基础。

加入了对 Intel 的 CPU 和内存虚拟化技术(VT-x/VT-i)的支持

开发了各种技术来实现高效的 I/O 虚拟化,如利用 VT-d 技术来直接分配设备、SR-IOV 技术等

对多种虚拟机操作系统的支持(如 Windows、Solaris 等)

虚拟机的保存、恢复和动态迁移

Xen 的内存虚拟化算法(影子页表)的主要开发者之一

性能调优

《开源》:从团队成立以内,取得了哪些突破性的成果,并简单介绍一下项目的远景规划。

虚拟化团队:虚拟化中国团队的工程师们在开源社区中非常活跃,他们对于 Xen3.0 的代码贡献在


整个社区中排名第二,仅次于 XenSource(Xen 的商业公司)。他们还积极参与到每年的 Xen 峰会、
KVM 峰会以及沃太华 Linux 峰会(OLS)中向社区来介绍他们的技术成果,也向整个世界展示了中国在虚
拟化技术上的强大技术实力。基于这些贡献,该团队的五名工程师(董耀祖、田坤、蒋运宏、余珂、苏
涤生)被评为 Xen 社区焦点人物(http://www.xen.org/community/spotlight/, 一共 36 名);
张献涛被社区推举为 KVM 安腾架构的维护者。为了促进虚拟化技术在国内进一步普及,该团队撰写了
《系统虚拟化——原理与实现》一书,即将由清华大学出版社出版。他们还积极和国内多所大学合作,


oss.linuxpk.com 2009 年第 1 期 41

开源社区
邀请老师到 Intel 来做访问学者,来共同探讨和提高国内在虚拟化基础研究领域的研究。

目前,基础的虚拟化解决方案逐渐成为成熟产品,基于 VT 的虚拟化解决方案已经在业界得到了广泛
的应用。该团队将继续在深层次的虚拟化问题上进行进一步的研发工作。例如:

在虚拟化中加入高可靠性的支持,使之能够满足关键任务的需求。

在虚拟化中进行有效的电源管理以实现绿色计算。

进一步提高虚拟化的可扩展性和 I/O 虚拟化性能。

何谓“准就业”?不要被忽悠了!
袁萌
近日,“准就业”一词满天飞舞,把一些待业的大学毕业生“忽悠”得晕头转向,全蒙住了。何
谓"准就业”,“准就业”组织者究竟想干什么?本文试图“解析”一下。

首先,什么叫“准就业”?在此,“准”字的含义是,程度上虽然不完全够,但是,可以作为某类
事物看待的意思。因此,“准就业”就是正式就业之“前夕状态”,而不是处在待业和就业之间的“中
间状态”。简单来说,“准就业”应该明确偏向正式就业的一方,否则就不应该叫做“准就业”。

12 月 19 日,有一个新闻发布会,主题是“LUPA 找到了中国当前大学生就业难的解决方案”。先不
说 LUPA 是什么组织,只说说“中国当前大学生就业难的解决方案”,这里的核心问题是,组建一个由
LUPA 牵头的全国性“资源整合中心”(所谓“就业实训基地”),招收有意向进行就业实训的学生,进
行核心职业能力、核心职业技术“双核强化实训”,经过 3~6 个月的实训,合格者可进入“就业岗位”,
并在项目经理人的指导下工作,创造价值并且取得收入(请注意,此时接受实训者还没有进入正式的工
作岗位)。“准就业”阶段结束后,学生将分层次进入国内外 IT 企业、政府、事业单位、民营企业等
(这才算是正式就业)。十分明显的是,实训阶段不是“准就业”(在此阶段,学生到哪里就业都不知
道,根本谈不上“准” 字),本质上,实训阶段只是一个“就业前的预备期”,学生接受“实训”,提
高核心技能,谁来付钱?学生本人也!同时,以解决“中国当前大学生就业难”为由,再伸手向国家要
钱。由此可见,LUPA 的“准就业”解决方案纯粹是一个商业策划方案,完全以赢利为目的。至于“准就
业”阶段结束后,接受实训者如何“分层次”进入“工作岗位”,那还得依靠学生自己本人,“准就业
”组织者并不承担什么责任。

经国家教育部批准,以北京大学软件学院牵头(负责),政府投入巨资,组建了“Linux 技术培训
与推广中心”全国体系,这是一项体现国家意志的重大举措。人才培养是一个非常严肃的问题,不应受
到任何“商业操作”的影响。LUPA 自称:为了打造“准就业”平台,LUPA 首先“整合”了北京大学、


oss.linuxpk.com 2009 年第 1 期 42

开源社区
清华大学和浙江大学等 40 所国家 Linux 技术培训与推广中心,......,作为其学生资源平台。这是谁
授予 LUPA 的“整合”权力?LUPA 不要把自己的位置放错了地方。实际上,从全国“Linux 技术培训与
推广中心”体系培养出来的大学毕业生,本身就有“国家培训”的印记和资格,根本用不着什么“双核
强化实训”的资格证书。

另据媒体报道,“准就业”机制受到海内外专家学者、政府高层的高度关注。在此,我们要问,既
然“准就业”机制是一项“中国大学生就业解决方案”,那么,该上马项目是否(事先)通过认真的审
查和评议?其可行性如何?其可能的效果如何?我希望,“准就业”问题能够引起社会公众、企业老板
舆论媒体和政府官员的足够注意。我认为,一时性的失业,对于大学毕业生本人而言,是反省自己人生
的必要阶段,并不可怕。大学毕业,又是人生的一个转折点,就业竞争是一件好事,是他们必须上的一
课。别的学校具体情况,我也许并不清楚,但是,北京大学的毕业生,一般来说,都是一些佼佼者,无
论学识,还是品德。我不希望,这些佼佼者再去接受什么“双核实训”,沾染那些“铜臭”!


oss.linuxpk.com 2009 年第 1 期 43

特别报道

特别报道


oss.linuxpk.com 2009 年第 1 期 44

特别报道

贺《开源》周年 黑屏带来契机
中国工程院院士 倪光南
今年年初,当我看到陈杰主编的《开源》电子杂志时,我
给他写了一段话:

“很高兴看到了《开源》月刊,虽然不是纸面杂志,但电
子杂志对于我们大多数人和纸面杂志是一样的。中国的开源事
业的环境仍不够好,开源刊物遇到的困难反映了整个开源事业
的状况,以中国目前的经济实力而论,我们在高技术领域,在
信息领域,在软件领域,在开源软件领域,投入是很小的,在
这种情况下,只能依靠大家努力,用最小的投入取得尽可能大
的效益。由于国家贯彻自主创新的战略方针,开源软件的前途
是很光明的,国家的‘核高基’专项就是一个重大的推动。问
题是国家战略的贯彻需要时间,需要克服各种阻力,所以在短
期内,开源软件企业、社区等都需要克服困难,争取发展,然
后就会有大的发展。

希望《开源》月刊愈办愈好”。

在写这段话的一年后,很高兴地看到《开源》月刊确实愈
办愈好了,作为目前中国开源软件领域中仅有的刊物之一,它
中国工程院院士-倪光南
对中国的开源软件是很有贡献的。

不久前发生的“黑屏”事件凸显了中国的信息安全问题,它表明如果软件(尤其是基础软件)不是
自主可控的,信息安全就得不到保障。实际上,国家早就着手部署发展自主可控的基础软件。根据《国
家中长期科学和技术发展规划纲要(2006-2020 年)》,国家确立了“核高基”重大专项,其中包含
了“基础软件产品”,现在已进入实施阶段,这次“黑屏”事件更显示出这个专项的必要性,也将会加
速推动这个专项的实施。

“基础软件产品”包括了操作系统、数据库管理系统、中间件和办公套件等等内容,它们与开源软
件有非常密切的关系。例如专项要发展的操作系统是与开源软件 Linux 兼容、遵循 Linux 开放标准的,
它或是自主开发并与开源软件相结合,或就是基于开源软件发展出来的。“核高基”重大专项所支持的
其它基础软件也与开源软件有类似的密切关系。所以说,国家支持发展自主基础软件也就是支持了开源
软件;而开源软件只要与中国的软件人才结合起来,就可以成为自主可控的软件(或服务)。


oss.linuxpk.com 2009 年第 1 期 45

特别报道
在我国政府采购中,按照《软件政府采购实施办法》(征求意见稿),本国供应商发行的源代码开
放软件视同本国软件予以认定。虽然这个《办法》没有正式公布,但这个原则已得到认可。由此可见,
本国软件与开源软件在很多情况下是相通的;支持国产软件和支持开源软件在很多情况下是一致的。

我们主张在中国信息化(包括软件正版化)中推广国产软件和开源软件,因为这不但能保障信息安
全,而且将对中国的经济和就业产生重大的贡献。反之,如果我们在信息化中推广外国软件,不但达不
到自主可控,而且中国市场带动的只是外国公司,它们对中国的经济和就业的贡献是微不足道的。

“黑屏”事件也促使我们深刻反思中国 IT 人才的教育培训问题。由于历史原因,过去我国教育培训
体系是向微软倾斜的,例如《中小学信息技术教育大纲》规定的教学内容全部依赖微软操作系统和办公
软件;全国计算机等级考试在 2005 年开考的 13 模块中,有 10 个是考微软等外国公司的软件……。相比
之下,其他大国都不是这样。如美国排名靠前的十多所名牌大学中,大多数计算机系都配备 Unix 或
Linux 实验室,许多只有 Unix 或 Linux 实验室,只有极少数只配备 Windows 实验室;俄国信息技术
和通信部长要求到 2009 年俄国所有学校都安装 Linux(Rissian OS)。

我们相信,以“黑屏”事件为契机,开源软件这一世界性的潮流也会在中国迅速高涨起来。一方面,
开源软件将成为推动中国的软件和信息服务业发展的动力;另一方面,中国丰富的人才资源和巨大的内
需市场也都将成为推动开源软件发展的动力。

希望《开源》月刊愈办愈好!

在金融风暴中,《开源》企业破浪前进
中国开源软件推进联盟副秘书长 袁萌 教授
大家公认,媒体是产业发展的催化剂。过去,纸质媒体(也叫
平面媒体)盛行,现今,网络媒体兴起。因此,我们必须关注网络
媒体的发展。网站门户连续播报,消息快速及时;电子期刊定期发
行,内容准确可信,两者互补,不可缺一。本文把《开源》电子期
刊视为一类“开源”(“Open Source”)企业(社会组织)对待。

当前,金融风暴波及全球,许多传统企业垂头丧气,但是,“
开源”企业却在经济困境中继续破浪前进。如此说法,有何根据?
何谓“开源”企业?大家知道,美国红帽(Red Hat)公司是全球
最典型的开源企业(在此,“开源”之引号已经除去)。红帽从创
业一开始,其主打产品就是方便性(Easiness,一种很规范的技术
服务),而不是软件(请见《红帽旋风》一书),也就是说,红帽
中国开源软件推进联盟副秘书长 袁萌
教授

oss.linuxpk.com 2009 年第 1 期 46

特别报道
的经营模式是出售所谓“订阅”服务(“Subscription”),向用户按年度收取”订阅费”,而向红帽
购买这种服务的一般是企业(中小企业居多)。红帽公司现有订阅用户 250 余万,分布在全球,公司年
收入近 10 亿美元,平均而言,每个订阅用户的年度服务费(订阅费)为 300~400 美元。这里请注意的
是,这种订阅服务一般是经由网络进行的(包括借助 SaaS 手段),并不需要派人直接登门服务。

现在,金融风暴席卷全球,出售产品的传统企业,往往因产品出售不畅,停产减员,倒闭关门,不
足见怪。那么,出售服务(这里指订阅模式)的现代企业(以别于传统企业),经营状况如何?原来购
买“订阅”服务的企业,是不是因为要压缩支出,就停止继续订阅呢?这是非常关键的一点。实际上,
在金融风暴中,大多数企业,宁愿砍掉产品购买,也不愿停止订阅服务。以红帽为例,今年第三季度(红
帽财年第三季度止于 10 月 30 日)总收入共计 16,530 万美元,比去年同期增长 22%,其中订阅收入为
13,550 万美元(比去年同期增长 17%),同时,在这一期间,红帽的股市表现高于华尔街的预期。

有一点需要特别说明白,用户订阅红帽的技术服务,到期继续订阅与不订阅(可订可不订),完全
由用户自己决定。即便用户不想再继续订阅,红帽也不收回自己原先给用户安装的软件(比如,企业版
RHEL 5.0,用户可继续自己使用,而不再支付订阅费)。因此,能否留住老客户(使其重新继续订阅),
是红帽必须做好的事情,否则,用户都流失了,红帽“订阅”模式也不能算是成功的。实际上,红帽用
户的更新率(renewal rate,表示继续订阅的比率)在经济风暴中,不但不减,反而有很强的增长势
头 ( 请 见 “ Linux Subscriptions Paying Off for Red Hat” 一 文 , by Sean Michael
Kerner)。这一切充分说明了红帽的“订阅”模式是成功的,经受住了经济衰退的考验。

美国红帽公司,2005 年元旦进入中国,经过市场调查,很快发现中国企业根本不认“订阅”模式,
政府部门就更别提了。全球有 250 万个大、中、小企业购买红帽的订阅服务,为何中国企业不认这种东
西?我们喜欢把“国产”Linux 发行版当成产品出售,不坚持培养用户重视技术服务的意识,这是一种
产业弊端。实际上,服务亦是一种产品,但是,它是一种边提供、边消费而不能存储的产品。现在的实
际情况是,遇到经济低迷,用户削减开支,不愿意继续采购产品,不少软件厂商急眼了,有的只好裁人
关门了事。怎么办呢?

记得,在 2005 年年初,我在《开放系统世界》发表刊首文章,介绍红帽的订阅(模式)的业绩。那


时,我们很想在我国境内推广这种订阅模式,因为,订阅模式在当时是很成功的开源经营模式。后来,
出现了更为先进的 Ubuntu 经营模式(不强制用户订阅,一手交钱,一手交货,而是提供商业技术支持,
由用户自愿购买),由此,期刊开始关注和宣传这种更为宽松的开源经营模式。因此,我们可以客观地
说,《开放系统世界》对我国的开源运动起了很大的推动作用,同时,也宣传了先进的经营模式和经营
理念。2007 年年初,《开放系统世界》因故停刊,后改为《软件世界》的“刊中刊”,继续坚持发行。
2008 年,《软件世界》的“刊中刊”也决定停办,至此,国内出现了宣传国际开源运动的空缺(平面媒
体)。在此关键时刻,《开放系统世界》的原编辑陈杰挺身而出,克服种种实际困难,自办《开源》电
子期刊,继续高举开源旗帜,而且,电子期刊越办越好,发行量(下载量)猛增,有效地填补了这一空
缺。至此(09 年元旦),《开源》电子期刊创办一周年,值得我们大家为之庆贺。


oss.linuxpk.com 2009 年第 1 期 47

特别报道
当前十分紧迫的问题是,全球经济紧缩,波及各个方面,但是,国际开源运动却逆势而动,空前兴
旺,机遇难得。此时,《开源》电子期刊急待加强,发挥出更大的舆论媒体作用,但是,由谁出面来支
持?怎么支持?我想,那些有远见的企业,特别是国内的开源企业(或者有开源意向的企业),给《开
源》电子期刊及时投放一些业务广告不失为一种经营上策和义举。

写在《开源》杂志创刊一周年之际
中国开源软件推进联盟副秘书长
CSIP 中国开源软件中心主任
陈伟博士
回首 2008,这是一个不平静的年头。奥运会的成功举办,
全国上下众志成城抵御自然灾害,共体时艰,成为 2008 中国
的最强音;而“三聚氰胺”事件以及全球性的金融危机也成
为后奥运时期整个社会不得不面对的现实;微软的“黑屏”
事件以及移动互联网设备(MID)的兴起,也将开源软件这个
并不新颖的话题又推向了前台。

自 Richard Stallman 于年 1984 年发起最早的自由软


件计划——GNU,正式开启了自由软件/开源软件在全球发展
的进程。诸多的数据业已表明,经过 20 多年的发展,自由软
件/开源软件已经覆盖了操作系统、网络通信、桌面环境、教
育、办公、安全、文字处理、数据库、中间件、应用和娱乐
软件等几乎所有软件类型。包括美国在内的众多发达国家和
发展中国家以及相应地区纷纷出台相关的规定和政策推动使
用开源软件,自由软件/开源软件正在改变着我们的生活。

信息产业对我国的影响已经足以左右国民经济的发展, 中国开源软件推进联盟副秘书长陈伟博士
由于历史原因,中国 IT 企业在核心系统软件和核心硬件技术
等方面远落后于美国。因此,能够通过参与开源,参与最前沿的技术开发,将会是我国信息产业的重大
机会,也是我国软件产业实现跨越式发展的一次机遇。

开源软件以其开放性、低成本、灵活性、安全性和不完全依赖于软件提供商等五大要素优于传统的
私有商业软件,正向传统非开源软件发出了有力的挑战。今天,开源技术已趋成熟,并发展为一种主流
的技术平台;开源软件正在不断开拓、扩大其市场占领,并开始进入高端应用市场。开源软件的兴起,
日益改变世界软件产业的发展轨迹,也推动着中国软件产业的发展。


oss.linuxpk.com 2009 年第 1 期 48

特别报道
全球性金融危机的影响正在向实体经济领域渗透,预计到 2009 年金融危机对全球经济发展的全面影
响将正式呈现出来,众多的企业面临破产或成本控制的压力。危机与机遇是一个事物的两个方面,当前
的一个共识是金融危机将为开源软件的发展提供一个机遇。因为成本的优势,众多客户在节省成本时,首
先不得不将目光聚焦在开源软件。的确,开源软件为企业在节省 IT 支出方面提供了一个切实可行的解决
方案。

我国信息化的发展进程以及在传统教育领域信息技术教育方面的局限性,形成我国的开源软件发展
先天性贫血,表现在开源人才缺乏、开源社区稀少、开源项目不多、开源认知不足、开源市场空间狭窄
等,究其原因是以人才培养为核心的开源各个环节未能有效地待续性建立。

在诸多爱好者和有志之士的推动下,近年来国内开源领域涌现出一批具有生机与活力的开源软件社
区和一批极具价值的开源刊物。“Linux 宝库”社区和《开源》杂志就是其中的杰出代表。当前普遍认
为走出我国开源尴尬境遇的有效的方法之一就是推动开源软件的应用,以应用促进开源软件配套环节的
建设。开源软件的应用是开源的重要推动力,而应用的关键又在于开源软件应用的传播以及开源社区的
支持,只有让更多的人和企业接触开源软件,使用开源软件,开源软件的优势才能被世人所知,开源软
件才能被社会所接受,开源软件才能与我国的软件产业相结合,将我国软件产业发展的机遇变为现实。

《开源》杂志正在不懈的努力,希望各方能给《开源》杂志以更多的关注和支持,共同推动开源软
件在中国的发展。

《开源》坚定了我们对社区的参与
中科红旗总裁兼 CEO 贾栋
岁末年初,回顾开源,业内似乎缺少举足轻重的事件,但许多细
节又历历在目,言犹在耳,欣慰 Linux 及开源一贯的热情与务实。

作为开源业的电子杂志,红旗一路读阅而来,见证了《开源》日
益进步——每月带来的最前线、最深度的报道。其实,无论是中科红
旗,还是《开源》,都还很小,只是专注做着自己的事。在这个行业
里,也许没有光鲜艳丽的明星,但每个成员都专心致志、怀有崇高向
往,为中国的开源事业默默奉献,其中热情也许很难用文字表达,只
有每个人最清楚。

一周前,许多媒体朋友都注意到,由北京中科红旗、韩国
Haansoft 软 件 公 司 、 日 本 Miracle Linux 公 司 和 越 南
VietSoftware 公司联合成立的 Asianux 公司迎来第 5 位成员,泰 中科红旗总裁兼 CEO 贾栋


oss.linuxpk.com 2009 年第 1 期 49

特别报道
国 WTEC 公司的加入。2008 年对红旗来说是重要的一年,在移动互联网领域取得了巨大的成功。随着
WTEC 的加入,更加巩固了 Asianux 在亚洲开源软件市场的地位。相信不久的将来,更多亚洲国家的组
织将加入 Asianux,共同体会“星星之火,可以燎原”,做强做大开源产业。

与 Asianux 同步的是,国内的 Linux 受众也更加广泛,回顾 2008 年,更多的开源爱好者、大学生


加入各种开源组织,参与各类 Linux 活动,为行业增益良多。其中,作为 Linux 企业的标杆,中科红旗
承办了 Apache 中国会议,组织参加北京 Linux 用户组活动,参加 GNOME 中国活动,举办了第二届全国
大学生的开源软件竞赛,同时在全国 20 所高校开展了开源巡展活动……各式各样的开源活动不一而足,
但是,无论中科红旗自办活动,抑或参与国际 Linux 社区项目,红旗都会有计划的将 Linux 带进校园,
培育更多的开源爱好者和可用之才。

在今年的全国大学生开源软件竞赛上,我见到了来自新疆农业职业技术学院的杨功元老师,作为软
件技术学院的院长,杨老师在软件行业积淀多年,言谈中习惯会提及开发和动手能力。新疆农业职业技
术学院已是连续两届派学生参加开源软件竞赛,不是见到这些莘莘学子,很难想象,在遥远的西北,还
有那么多钟爱 Linux 和开源的人们。结合 Linux 基础培训和实际操作,该院培养一批掌握专业 Linux
技术的人才。不少学生凭借对 Linux 的理解和运用,成功走上工作岗位,其中不乏进入各大软件公司。

杨老师和他的同事,在新疆举办红旗 Linux 和开源软件的讲座,对整个区进行业务培训,不仅受到


新疆信息产业厅的认可,更得到了用户的高度置评。正是基于这种“地毯式”培训,在新疆远程教育网
络建设中,红旗 Linux 操作系统成功地应用在 377 所中小学校的服务器中。帮助新疆本地教育资源与网
络教育资源实现无缝对接,对本地教育资源和网络教育资源(包括文字、图片、视频、音频、文档、课
件等)提供一站式访问,为资源使用者提供多样的教育资源学习支持手段,推动新疆教育事业的长足发
展。

即便如此,红旗一个企业的力量也是有限的,每次看到《开源》杂志、看到更多企业和组织融入社
区,参与社区时,我们的团队都会坚定一些感动,激励我们为社区贡献开源企业的责任和义务。

在全年的 12 期杂志中,《开源》杂志两次以中科红旗为封面素材, 4 月刊的“红旗 Midinux 亮相


IDF 诠释移动互联网新界面”,和 12 月刊的“红旗 Midinux 技术峰会”,为两次活动增色不少。其实,
倒不是说红旗做的多好,而是我们身处 Linux 的最前沿,专心将最实用、最高效的产品带给用户。值新
的一年来临之际,也向《开源》的读者表示感谢,红旗的飘扬离不开你们一贯支持。同时谨祝《开源》
杂志越办越好!


oss.linuxpk.com 2009 年第 1 期 50

特别报道

《开源》之道
——贺《开源》杂志 1 周年

英特尔公司中国 Linux 和开源战略经理 陈绪博士


欣欣然,《开源》杂志迎来了她 1 周年的庆典。

第一次见到陈杰,是在 2007 年 10 月 13 日,中国本土


Linux 内核爱好者的一次技术交流盛会上。他提出要办一本
中国大陆的开源杂志,这正是我一直期待的。当时我只提出了
一个问题:这个杂志你准备办多久,5 年可以吗?答曰:5 年
肯定没问题,只会做得更久,我会把这个当做事业来做。我说,
我支持你。

我还记得杂志专家委员会的第一位专家是倪院士。在 08
年 2 月刊上,倪光南院士对《开源》杂志提出殷殷期望。而今,
英特尔公司中国 Linux 和开源战略经理 陈绪博士
专家委员会和顾问委员已经是高朋满座,聚集了中国开源界的
泰斗和开源企业界的代表。

2008 年,是全球 Linux 和开源事业迅猛发展的一年。《开源》见证了英特尔公司在中国乃至全球 ,


对开源界做出的巨大贡献。

展望 2009 年的开源界,我凝视着两个关键词:“移动”和“金融危机”。 Linux 在移动市场必将


势如破竹,譬如英特尔的 Moblin 社区正突飞猛进;“金融危机”则会直接成为开源的助力:金融业势
将优先采用价格上更具优势的开源产品。

作为英特尔公司在中国的开源窗口,我非常乐于见到《开源》杂志的成功。英特尔中国北京和上海
的开源技术团队,也将一如既往,为中国的开源社区贡献力量,为杂志的内容带来最新的技术气息。


oss.linuxpk.com 2009 年第 1 期 51

知识学堂

GNU/Linux 开发第一步
宋国伟
目 前 , 很 多 朋 友 学 完 了 C 语 言 , 但 并 不 能 在 GNU/Linux 系 统 下 进 行 编 程 开 发 。 究 其 原 因 ,
GNU/Linux 系统还未大面积普及是大碍之一,另外,人们不熟悉 GNU/Linux 系统下的开发工具也是关
键。本文就是以“用例”的形式讲述在 GNU/Linux 系统下如何进行应用软件开发的基础和常识,为将来
在 GNU/Linux 系统中进行大规模或企业级开发铺路。所谓“用例”,就是通过简单的例子来学习,最终
达到能在自己的实际中应用的目的。

本文要求读者熟练 Linux 操作系统的常用操作,掌握 C 语言语法,能理解 Linux 系统的组成原理和


了解 Shell 和 Perl 等脚本语言。

一、平台选择
首先,从事 GNU/Linux(以下简你 Linux)系统下的应用开发,应该有一个合适的操作平台和开发
环境,所以选择和安装 Linux 操作系统成为 Linux 开发者的第一课。目前可供选择的 Linux 操作系统
种类很多,如 Red Hat(最新版名为 Fedora)、SuSE、Mandrake 和中科红旗(Red Flag),还有
开源组织中有名的 Debian 等。虽然版本很多,但它们在底层系统组成上的差别是微乎其微的。我们以
Red Hat 9.0 为开发平台,以后的操作和开发都在这一系统平台上进行。

二、开发系统的组成
Linux 操作系统内核底层的开发工具和辅助工具,有的是直接建立在内核基础上,如 Shell、GCC
和 Make 等;有的是建立在脚本语言的基础之上的,如 Automake、Autoconf 和 Libtool 等。它们是
Linux 操 作系 统外 层的 图形 界面 开发 工具 (GTK+、 QT 等) 和网 络应 用开 发工 具( Perl 、PHP 和
Python 等)的基础和过渡。掌握了底层开发工具,对外层应用开发是有好处的,这样可以加快和优化外
层应用开发,从而达到开发速度和开发质量的和谐统一。

三、慎选 IDE
本文讲述的程序编辑工作多数是用 Linux 系统中常用的 Emacs 和 vi 来做,在终端窗口中进行命令
编译调试。熟悉 Windows 下编程的朋友们会质疑为什么不用 IDE(集成开发环境),是 Linux 下没有
吗?答案当然是否定的。Linux 下有很多 IDE,事实上 Emacs 就是一个非常好的 IDE,其它的还有
CodeForge、ANJUTA 和 Kdeveloper 等。对编程人员来说,IDE 在编译控制的底层隐藏了很多东西,


oss.linuxpk.com 源 2009 年第 1 期 52
知识学堂
如果软件开发者真正了解和掌握了这些东西,对开发出更好的应用程序是大有帮助的。

对于 IDE 可以这么比喻,它好象是飞机上的自动驾驶仪,有了它飞行员会轻松许多,但如果飞行员
没有真正掌握飞机的驾驶技术,在飞行中如果自动驾驶仪失灵的话,坠机是必然的,这样的飞行员是不
能让他驾机的。编程人员也如此,只用 IDE 开发软件是不够的。

四、开始动手
坐谈论道不如起而躬行。下面就从一个简单的 C 语言源文件的编译开始,研究这些内容。

首先是安排好目录。在自己的用户目录下,创建一个总的目录 learn-gnu,然后在此目录下创建第
一个学习目录 learn-1,在此目录下用 Emacs 编辑 hello.c 文件,输入如下内容:

//hello.c
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;

if(argc<=1)
{
printf("The program name is :%s\n", argv[0]);
}
else
{
printf("The program name is :%s\n", argv[0]);
for(i=1; i<argc; i++)
printf("The argument %d is : %s\n", i, argv[i]);
}
}

这段代码试验了命令行参数及其简单的用法,正常情况下在终端中输入下面的命令即可编译:

# gcc hello.c -o hello

编译后输出可执行文件 hello,执行./hello 即可输出下面的语句:

The program name is :./hello

这是 C 语言初学者学到的最简单、最原始、最直接、也是最有效的编译方法,测试方法也是最简单
的。因为所给用例的代码也比较简单,不用太复杂的方法。


oss.linuxpk.com 源 2009 年第 1 期 53
知识学堂
这里没有用很经典的“Hello world”程序,其原因是笔者在辅导一些学生们学习 C 语言课程时,
发现他们对这个程序还不太理解。

有没有更好的办法来编译这个源程序呢?可以编写一个简单的 Makefile 文件,使之自动编译源程


序,生成可执行文件。

用 Emacs 编辑它并和上面的 hello.c 保存到同一文件目录,注意文件名为 Makefile,然后,在


终端中输入 make 命令,此时会出现下面的情况:

# make
# gcc hello.c -o hello

再执行列目录命令,会发现已生成可执行文件 hello:

# ls
hello hello.c Makefile

下面是多个参数的输出结果,相信会对命令行参数有初步的了解。

# ./hello abc def 123


The program name is :./hello
The argument 1 is : abc
The argument 2 is : def
The argument 3 is : 123

Makefile 是 Make 工具默认的配置文件,执行 make 命令时,Make 自动查找 Makefile 文件。用


多个 C 语言源文件来编译时,使用 Make 会让编译过程更加快捷有效。因为 Make 是按源文件的更新时间
判断是否进行编译的,即改动了哪个文件就编译哪个文件,未改动的就不做处理。

这里以一个稍复杂的例子来说明。一个项目由三个 C 语言源文件 a.c、b.c 和 hello.h 构成,其中


a.c 和 b.c 中都包含 hello.h,最终输出的可执行文件为 hello。图 1 为这个 Makefile 文件的内容。

想进一步学习 Make 的使用和 Makefile 文件的编写,可以看一下它的参考文档,网址是 http://


www.gnu.org/manual/make-3.79.1/html_chapter/make_toc.html。

如果源程序再复杂一些,例如多一些源文件和附加一定数量的资源(如图像和文档等),或者涉及
到系统中的其它支持(如需要系统安装有文档处理工具,语法检测工具,某些开发工具的开发库等)时
再 编 写 Makefile 文 件 就 会 变 得 非 常 麻 烦 , 也 非 常 容 易 出 错 。 这 种 情 况 可 以 使 用 Autoconf 、


oss.linuxpk.com 源 2009 年第 1 期 54
知识学堂
Automake 和 Libtool 等工具来完成这一工作,这让 Makefile 有更多的功能,编译更加完备,检测更
加全面,而且还多出了安装、打包发布等更多新功能。

透视 GNOME 项目
李洋
Linux/自由软件项目的编写及维护方式,决定其
发展离不开网络社区成员的贡献。从这个意义上而言,
一个个项目事实上就像一个个开放的大家庭。它们随时
向朋友敞开着大门,吸引着越来越多的参与者。社区的
成员们都在为社区的发展而努力,为项目的不断成长而
欣喜。那么,一个 Linux 项目是怎样从萌芽走向健壮的
呢?它的社区是如何组织及壮大的呢?让我们从最熟悉
的 GNOME 项目说开去。

一、什么是 GNOME 项目
GNOME 是 Linux 及各种主流 Unix 的 GUI 桌面系
统。目前,在 GNOME 上面已经发展了许多自由应用软件,
如文字处理软件 Go、电子表格软件 Gnumeric、日历程序 GNOMEcal、可与 PhotoShop 媲美的图形图
像处理软件 GIMP 等。与 KDE 一样,GNOME 项目为 Linux 在桌面领域的发展及应用起到了至关重要的作
用。

GNOME 不像 KDE 那样有许多自己开发的工具,而是比较倾向于集成现有的 X 应用程序,可以允许用


户选用任何一种窗口管理程序(一般是 WindowMaker 和 Enlightenment)。GNOME 也有自己的办公
软件 GNOME Office,它也是开放源代码的免费软件。GNOME 的应用开发采用同样基于 CORBA 的
Bonobo,类似 Microsoft 的 OLE2。

二、GNOME 桌面环境包括:


oss.linuxpk.com 源 2009 年第 1 期 55
知识学堂

◆ GNOME 桌面 applet、capplet、panel、wm interaction(sm、pager、rootmenu 等)、


desktop(icons,file manager);

◆ GNOME 开 发 平 台 GTK+ 、 GNOME Widgets 、 Component Model 、 FS 、 imaging 、 SM 、


i18n,主要的技术是 bonobo、XML、imaging(包括 Gnome-Print);

◆ GNOME Office AbiWord、Gnumeric、GIMP、Dia、Eye Of GNOME(EOG)、GNOME-


PIM、GNOME-DB。

更加重要的一点是,GNOME 是一个大型的 GNU 自由软件项目,由许多人通过合作创建。在 GNOME 社


区中,大多数人是自愿参与进来的,只在业余时间对项目进行维护;也有一部分人是通过雇佣方式全日
工作的,但只占整个社区很小的一部分。可以说,GNOME 的成功乃至未来都依赖着这些社区贡献者们;
同时,一些商业公司的加入及扶持也对该项目的发展锦上添花。

三、组织形式及加入方式

oss.linuxpk.com 源 2009 年第 1 期 56
知识学堂
GNOME 是由一群志同道合者在网络上维护并协作开发的。参与到社区中的人会发现,所有人在网络
上通过 E-mail and IRC 保持着密切联系,也许跟你进行合作的人正是一位走在技术尖端的开发者。想
一想也会觉得这是一件有趣而令人兴奋的工作。这个社区和其它的自由软件社区一样,随时欢迎有志者
的 加 入 。 想 要 加 入 这 个 社 区 并 不 困 难 , 登 录 到 其 官 方 网 站 http://www.gnome.org , 在
http://developer.gnome.org/documents/joining-gnome/index.html 上有项目的详尽说明
和简介。在了解完项目的大致情况后,即可进行申请。

申请加入社区的第一步,就是要求申请者按照 GNOME 项目的类别来选择感兴趣的领域。事实上,并


不只有懂得编程的人才能加入社区,GNOME 项目的发展需要各方面的人才,例如图形艺术家、文件编写
者、翻译(各种语言,进行本地化工作)、网页设计师、软件测试员、软件打包人员、用户界面设计人
员,以及其它类别的工作人员。只要你在某方面擅长,并乐于为社区服务,社区会尽力发掘你的潜力,
以便为其所用。一般而言,GNOME 项目可供选择的领域有以下几个方面(GNOME 的子项目):

◆ 访问程序。这项工作的目的是为了提高 GNOME 的易访问性,从 Gtk+小窗口到终端的阅读用户都


可实现访问,并提供多种特殊硬件设备的支持。

◆ 文档。这是 GNOME 的一项十分巨大的工作,包括用户文档(如程序 Manual、用户 FAQ、GNOME


介绍)和开发者文档(如 GNOME 技术白皮书、开发者指南、开发者 FAQ 和 API 文档)。同时,除了文档
的撰写外,还有编辑和索引整理等工作。该项工作目前需要大量人员支援。

◆ 图形。GNOME 需要几种不同类别的图形,分别应用在网页、桌面、选单及特殊应用程序中。

◆ 打包。这不仅包括源代码的打包,还包括释放软件包、从 CVS 更新的程序源码,以及为发行和安


装打包。

◆ 质量检验。为了使 GNOME 尽可能地稳定、高效、低 Bug,这项工作必不可少。主要进行程序扩展


性测试,挑出 Bug 并将其报告给 GNOME 错误跟踪数据库。

◆ 声音。在 GNOME 的桌面事件、程序、游戏等中都需要不同类型的声音。目前,GNOME 的声音系统


还仅局限在有限系列中,急需人手来制造出高质量、高表现力的声音。

◆ 翻译。GNOME 要想被世界上更多的用户接受,本地化是亟待完善的工作之一,已被列入 GNOME 未


来发展计划。该工作量是十分巨大的—对于每一种语言,都要进行全面的翻译,包括对话框、选单、每
个应用程序的按钮的字符串,以及用户手册等多种文档。现在我们在使用 Red Hat 9.0 附带的 GNOME
时,还经常会遇到局部汉化的问题,这正说明这项工作的必要性。

◆ 用户界面。该项目简称 GUP,用户界面设计,使 GNOME 更易于使用和接近。

◆ 网页设计和开发。GNOME 网站是社区成员活动频繁的领域,以及外界接触 GNOME 项目的窗口。因


而这项工作也尤为重要。要求开发者懂得 PHP、MySQL、WML 或其它脚本编写知识。


oss.linuxpk.com 源 2009 年第 1 期 57
知识学堂
◆ 程序开发。主要是桌面系统中应用程序的开发。这项工作并不限定参与者一定要在既定的项目中
进行选择—有能力的人完全可以重起炉灶,另辟蹊径,从而体现个人的创造力。如果参与这方面的开发 ,
可以有机会与其他优秀的 GNOME 开发者一起工作、思考,并从他们身上学习更多的经验和知识。

◆ GNOME 平台开发。该平台是一系列的库和工具,应用程序便建立在其上。

◆ 开发者工具开发。开发者本身也需要很多开发工具: GUI-builder(如 Glade)、IDEs、字符


处理工具(gettext)、错误跟踪器、内存编译工具(memprof)、版本修订控制系统(CVS)、构造
工具(autoconf、automake),以及许多其它工具。另外,图片及文档作者、翻译人员也需要一系列
的工具来完善和保障工作质量。

申请者可在上述的工作类别中进行选择。每个类别都是一个独立的子项目,都有相关的负责人及维
护页面。参与者根据兴趣和特长选中类别后,可以进入相关的网页,查看进一步的信息。每个项目的参
与方式可能略微不同,但都需要与相关的项目负责人、联系人沟通,一般而言,很快就能收到答复。

此外,GNOME 社区还专门准备了一个 Todo 数据库(http://www.gnome.org/todo/in-


dex.php3),列出的是目前 GNOME 需要进行的工作任务列表。开发者把认为重要的、自己却没有时间
去完成的工作列在上面。每个项目都有详尽的描述和联系方式。参与者可以通过浏览这个数据库选择感
兴趣和擅长的领域。

当然,对于一个刚刚加入的社区成员而言,可能很难立刻进入角色。在这方面, GNOME 社区也考虑


得十分周全,比如 GNOME 的 Love 项目(http://mail.gnome.org/mailman/listinfo/gnome-
love/),就是帮助刚刚进入社区得成员找到工作任务,并及时获得帮助的一个项目组织。

此外,GNOME 社区的网站上面还列出了“如何开始”、“学会开发”、“向 GNOME 添加应用程序”


等指南。

四、起步及发展历程
目前,世界上有数以千计 的 Linux 及相关自由软件项目
有待发展。一个项目从产生到 成功承受着多方面条件的约束 ,
适当的成长时机和环境、有能 力的组织者和带头人、优秀的
参与者、商业基金资助等环节 缺一不可。GNOME 也不例外。

五、萌芽
1996 年,正值自由软件发 展的年代。一个墨西哥籍青年
Miguel de Icaza 与 他 的 一 个在 Red Hat 公司工作的朋友
Elliot Lee,时常在一起讨论有关自由软件的话题,并为促进自由软件的向前发展做着各种努力。在


oss.linuxpk.com 源 2009 年第 1 期 58
知识学堂
Windows 95 推出之后,这两个人都不约而同地感觉到,相对而言,自由软件体系缺乏很多技术元素,
使得其在很多领域落在后面。

当时 Icaza 正在为 Linux/SGI 项目(由 SGI 公司提供部分基金支持的一个 Linux 项目)工作。他


不时地抽时间在一些自由软件相关工作上,力图缩短 Linux 和专有软件之间的差距。在与一位朋友讨论
时,其认为自由软件桌面程序缺乏 OLE 模式的东西的想法,给了 Icaza 一些启发。他与 Elliot Lee
一起进行了一些初步尝试,比如,使用 libapp 功能库来访问应用程序的公共资源(配置管理、近期使
用的文件记录、mime 句柄等)。虽然这项工作最终并没有真正完成,但却萌发了要生产一整套桌面系统
的想法。

当时,KDE 项目进展得十分顺利,并且功能已经相对完善。Icaza 对此感到十分高兴,并写信给他


们建议把 KDE 的代码纳入 Red Hat 发行版,还曾致信给 Richard Stallman(GNU 组织者),让他了
解有这样一个有趣的项目存在(KDE 当时是基于 GNU GPL 的项目)。但 Icaza 很快得到回信:Qt 是商
业软件,不允许用户修改或发行修改后的拷贝,因而违反了 GPL 的相关条例;而 KDE 对 Qt 的依赖性导
致其中的部分程序是非自由软件。

出于对自由软件的热爱,Icaza 也曾与 Qt 的所有者 Troll Tech 取得联系,希望可以修改 Qt 的相


关许可规则,但是始终没有得到回复。经过一段时间的等待后,他决定自己亲自组织一个 Linux 桌面系
统的项目。

六、诞生
Icaza 从 墨 西 哥 国 立 自 治 大 学 计 算 机 科 学 专 业 物 色 了 两 名 学 生 — — Arturo Espinosa 和
Federico Mena,与他一同从事开发工作,同时他们也在为墨西哥 Linux 用户协会(Linux Users
Group)工作。

在 1997 年的夏季,Icaza 受一个朋友的邀请来到微软,开发基于 SPARC 的 Internet Explorer


for Solaris 系统(因为其技术专长就是 Linux/SPARC)。在微软,他学到了一些关于 ActiveX 和
COM 的知识,并开始对这种技术非常着迷。在那里,他还巧遇了一直以来在 LinuxNet IRC 交流的几个
网友。当他再次返回墨西哥时,便与 Federico 着手设计一套 GUI 控制的基础构架(基于 Unix 系统),
并将其命名为 GNOME。

在最初的尝试中,他们想开发一个 Qt 程序的替代品。如果重新完成一套 API 将很可能导致软件效率


的下降,而且可能会占用很久的时间。GNUstep、Wine 和 LessTif 是当时在代替专有 API 方面比较成
熟的三个软件。Icaza 组织了 LinuxNet 网络和 Linux 频道的许多网友,共同参与到这个项目的开发中
来。

1997 年 8 月,GNOME 项目正式启动。该项目的宣言草稿被送给 Richard Stallman、Elliot


oss.linuxpk.com 源 2009 年第 1 期 59
知识学堂
Lee 等多个关心该项目的朋友处进行修改。当项目的前期准备工作完成后, Icaza 和 Federico 便着手
在 GIMP、Guile 邮件列表、GNU 项目声明邮件列表中分发了项目声明,以此来吸引更多的人加入。

邮件列表发挥了重要作用,来自邮件列表的参与者们做了很多贡献,队伍很快地扩大到了 200 多人。


参与者们使用 CORBA 作为组件结构的基础,并使用 DocBook 来写 GNOME 的文件系统。在这个过程中,
他们经历了尝试和碰壁,终于在技术上摸出了一条路子。

渐渐步入正轨后,初创的几个人注册了 gnome.org 域名,GNOME 的开发重心很快地转移到这个社


区中来。同年 11 月,GNOME 社区聚集了足够的能量,Icaza 和 Federico 推掉了其它项目,全身心地
投入到开发中来。

很快地,在同年的 12 月,他们与 Red Hat 取得合作;1998 年 1 月,共同建立了 Red Hat 高级开


发实验室(Red Hat Advanced Development Labs)。这是为改进 GNOME 而成立的第一开发梯队。

Red Hat 公司的 Marc 和 DrMike 也加入进来,帮助从事相关的开发。之后不久,社区上的成员


Owen、Jonathan、Dave 和 Federico 也都陆续加入进来……

七、转折
◆ 受到 QPL 的影响

1998 年 11 月,Qt 2.0 即将发布之际,该软件公布了一个新的许可协议,以便配合开放源码的定


义。这项声明使得 Harmony(克隆 Qt API 的免费软件)彻底地垮台,同时也使人们的视线从刚起步的
GNOME 身上转移到 KDE 身上。

另一方面,由于发展的时间较短,次年 3 月发布的 GNOME 1.0 这一版本中存在了很多漏洞,为其在


稳定性方面带来了较坏的名声。面对这些情况,GNOME 社区尽可能及时地修补了很多人们反馈的错误,
并不断地发布新的软件包来弥补它们。在包含 GNOME 1.0.xx 版的 Red Hat 5.0 发布时,一并发布了
GNOME 的众多 Bug 补丁程序。在 Red Hat 的该发行版中,也包含了 KDE。

系统的不够稳定及竞争对手给予的强烈压力,使得 GNOME 社区成员们感到了危机。但是,通过不断


地吸取经验教训,他们最终度过了难关。

◆ GNOME 基金会的建立

一个 Linux 项目的发展,需要更多资金及专业人士的支持。同时,也亟待被业界承认。因此 ,
GNOME 基金会的建立不能不说是其一个重要的转折点。

随着 GNOME 的不断完善,很多支持开放源码的公司也加入进来,对 GNOME 用户环境的开发及基于


GNOME 的技术开发进行支持。


oss.linuxpk.com 源 2009 年第 1 期 60
知识学堂
在 2000 年 8 月举行的 Linux World 展会上,GNOME 基金会宣布成立。Sun 公司在其 Solaris 系
统中采用了 GNOME 技术,并在其开放套件 StarOffice 中继承了 GNOME Bonobo 组件架构;HP 公司将
GNOME 应用到 HP-UX 操作系统的用户环境中;IBM 更是将其 SashXB 加速开发环境贡献给了 GNOME。

与此同时,GNOME 还与 Mozilla 集成到一起,并吸收了 OpenOffice 的相关技术。GNOME 项目及


社区因此而受益匪浅。其中,Sun 对于 GNOME 的承认及支持产生了广泛的影响,其开发团队亦参与到
GNOME 相 关 技 术 的 开 发 研 究 中 来 。 在 2000 年 9 月 , Sun 公 司 宣 布 成 立 一 个 可 访 问 实 验 室
(Accesability Lab),帮助增强 GNOME。

我们看到 GNOME 一路走来,从雏形的 1.0 版本,到奠定声誉的 Bongo 版本,再到目前十分成功的


2.x 版本,其社区在不断地壮大,项目性能在不断地完善,为其它 Linux 项目的发展树立了典范。


oss.linuxpk.com 源 2009 年第 1 期 61
经验技巧

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

2041 host 命令的用法


host 能够用来查询域名,它还能得到更多的信息

host -t mx example.com 可以查询出 example.com 的 MX 记录,以及处理 mail 的 host 的名


host -l example.com 会返回所有注册在 example.com 下的域名

host -a example.com 则会显示这个主机的所有域名信息.

2042 立刻让 LINUX 支持 NAT


echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -I POSTROUTING -j MASQUERADE

2043 rh8.0 下 rcp 的用法设置


只对 root 用户生效

1、在双方 root 用户根目录下建立.rhosts 文件,并将双方的 hostname 加进去,在此之前应在


双方的/etc/hosts 文件中加入对方的 IP 和 hostname

2、把 rsh 服务启动起来,redhat 默认是不启动的。方法:用执行 ntsysv 命令,在 rsh 选项前用


空格键选中,确定退出。 然后执行:service xinetd restart 即可。

3、到/etc/pam.d/目录下,把 rsh 文件中的 auth required


/lib/security/pam_securetty.so 一行用“#”封掉即可。


oss.linuxpk.com 2009 年第 1 期 62

经验技巧
2044 在 ethX 设备上,使 LINUX 支持网络广播功能(默认不支持)
ip route add 255.255.255.255 dev ethX

2045 路由设置手册
查看路由信息:

netstat -rn
route -n

手工增加一条路由:

route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

手工删除一条路由:

route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

好了,下面到了重要的了,让系统启动的时候自动启用路由设置。

在 redhat 中添加一条路由,修改文件/etc/sysconfig/static-routes
any net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

在 debian 中添加一条路由,

方法一:修改/etc/network/interfaces

代码:

auto eth0
iface eth0 inet static
address 172.16.3.222
netmask 255.255.0.0
network 172.16.0.0
broadcast 172.16.255.255
gateway 172.16.2.1
up route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
down route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

方法二:在/etc/network/if-up.d 目录下建立一个简单的脚本文件,如 static-route$(记


得以$符号结尾,要不有个 run-parts 会跑出来告诉你一些东西)脚本最简单的就好啦,如:

代码:

#!/bin/bash


oss.linuxpk.com 2009 年第 1 期 63

经验技巧
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1

嘿嘿,你也可以猜到/etc/network/目录下的其他目录的作用了吧。

发觉在 debian 中这个 route 的设置其实只是它的那些配置文件的一个比较简单的应用而已,你完


全可以做更复杂的应用

2046 利用 ssh 复制文件


假如 A、B 都有 SSH 服务,现在在 A 的 SSH 里

1、从 A 复制 B(推过去)

scp -rp /path/filename username@remoteIP:/path

2、从 B 复制到 A(拉过来)

scp -rp username@remoteIP:/path/filename /path

如果其中一个不是 LINUX 系统,可以在 WINDOWS 上用 SecureFX 软件

2047 samba3.0 中文显示问题的解决办法


在 samba 3.0 的配置文件中(/etc/samba/smb.conf)的[global]中加入下面两句:

unix charset=cp936

重启服务

service smb restart

2048 临时修改网卡 MAC 地址的方法


关闭网卡:/sbin/ifconfig eth0 down

然后改地址:/sbin/ifconfig eth0 hw ether 00:AA:BB:CCD:EE

然后启动网卡:/sbin/ifconfig eth0 up

2049 conntrack 表满的处理方法


前段时间配置的 iptables+squid 做的 proxy server,一直工作正常。今天我上控制台上发现

Jun 18 12:43:36 red-hat kernel: ip_conntrack: table full, dropping packet.


Jun 18 12:49:51 red-hat kernel: ip_conntrack: table full, dropping packet.


oss.linuxpk.com 2009 年第 1 期 64

经验技巧
Jun 18 12:50:57 red-hat kernel: ip_conntrack: table full, dropping packet.
Jun 18 12:57:38 red-hat kernel: ip_conntrack: table full, dropping packet.

IP_conntrack 表示连接跟踪数据库(conntrack database),代表 NAT 机器跟踪连接的数目,


连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的 ip- sysctl 函数设置。每一个跟踪
连接表会占用 350 字节的内核存储空间,时间一长就会把默认的空间填满,那么默认空间是多少?我以
redhat 为例在内存为 64MB 的机器上是 4096,内存为 128MB 是 8192,内存为 256MB 是 16376,那么
就能在/proc/sys/net/ipv4/ip_conntrack_max 里查看、设置。

例如:增加到 81920,可以用以下命令:

echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max

那样设置是不会保存的,要重启后保存,可以在/etc/sysctl.conf 中加:

net.ipv4.ip_conntract_max =81920

按照此方法改变后一切正常,要是再满了可以加大该值

2050 Linux 下怎么使用 BT

azureus,http://azureus.sourceforge.net/

2051 Linux 下查看光纤网卡的工作模式


主板上 PCI—X 插槽中插入一块 64 位的光纤网卡,在 LINUX9.0 的环境下,要知道它是否工作在 64
位模式下,可使用# getconf WORD_BIT

2052 在线更新 RHEL 的另类途径


1.安装相应的 APT 包:
Red Hat EL 2.1 - i386
rpm -ihv http://dag.wieers.com/packages/apt/apt-0.5.15cnc6-
3.0.el2.dag.i386.rpm
Red Hat EL 3 - i386
rpm -ihv http://dag.wieers.com/packages/apt/apt-0.5.15cnc6-
3.1.el3.dag.i386.rpm
Red Hat EL 3 - x86_64
rpm -ihv http://dag.wieers.com/packages/apt/apt-0.5.15cnc6-
3.1.el3.dag.x86_64.rpm


oss.linuxpk.com 2009 年第 1 期 65

经验技巧
2.在线更新

apt-get update
apt-get upgrade

2053 SOCKS5 启动后一段时间停止工作。用命令 ps auxw | grep socks5


查看,发现有很多 SOCKS defunct 进程,为什么?
主要是打补丁的问题。如果 socks5-tar.gz 是没打过补丁的版本,必须下一个带补丁的 v1.0-
r11 版本,重新安装、运行问题就可以解决了

2054 在 VMware WorkStation 4.0.5 中安装 Debian 3.0 时,提示找不到


硬盘,需要 SCSI 的驱动。但是我用的是 IDE 硬盘,请问该怎么办?
由于 VMware 将用户划分的硬盘空间虚拟成 SCSI 硬盘,而 Debian 安装盘中没有对应的驱动,而安
装其它 Linux 版本时,有的在一开始会加载 SCSI 驱动,所以没有这个问题。用户可以修改 VMware 的
配置,将其改为模拟 IDE 硬盘就可以了

2055 如何让 Linux 网关后面的 WIN32 下的用户直接点击 FTP 连接下载?


modprobe ip_nat_ftp

2056 请问用户的 IP 是动态的,如何在 squid 中限定在同一时间内同一账户在


线的数量?
例如限制单个用户只能打开 12 个 HTTP 连接,采用下面的方法:

acl all src 0.0.0.0/0.0.0.0


acl limit maxconn 12
acl localnet src 192.168.0.0/24
http_access deny localnet maxconn
http_access allow localnet
http_access deny all


oss.linuxpk.com 2009 年第 1 期 66

经验技巧
2057 如果我用 Squid 代理的代理服务器在 192.168.1.0 这个网段里,例如
它的 IP 是 192.168.1.1,我有一些客户端在 192.168.2.0 这个网段内,怎样
设置才能通过这个代理服务器出去?
如果不用透明代理,直接在浏览器的代理选项里设置就可以了。否则首先是在代理服务器的网卡上
再挂一个 IP 为 192.168.2.1,添加相应的路由,再修改 Squid 的 squid.conf 文件里的监听地址和
端口等,最后在 192.168.2.0 网段的客户端设置其网关为 192.168.2.1,再直接在浏览器的代理选
项里设置一下就可以了

2058 如何使用 netrc 文件进行自动 FTP?


在自己的 home 目录下建立一个权限为 600,后缀名为.netrc 的文件,内容如下:

machine 172.168.15.1 login admin password admin

这样用户以后每次登录 FTP 服务器 172.168.15.1 的时候,系统都会帮用户以用户名 admin、密


码 admin 登录。用户利用这个特征可以实现自动 FTP。例如用户想要每天 6:00 到 172.168.15.1 机器
上面获得/admin 目录下的文件 admin.txt,可以按如下方法做。

建立一个文件 ftp_cmd,内容如下:

cd admin
get amin.txt
bye

然后使用 crontab -e 设置定时任务:

0 6 * * * ftp 172.168.15.1 < ftp_cmd

2059 怎样得到 ipchains 的日志?


用户设置规则的时候必须加入-l 参数才会在/etc/messages 里面做记录。不过建议还是不加的好,
不然用户的/etc/messages 会变得非常大

2060 如何不显示其它用户的消息?
用户可以使用 mesg n 来禁止别人给自己发送信息,其实就是禁止别人往自己的终端上面的写的权
限。当别人试图再使用 write 给自己发送信息时,发送者将会看见提示如下:

write: user has messages disabled on pts/n


oss.linuxpk.com 2009 年第 1 期 67

经验技巧

tar 命令备份还原 linux 操作系统


刘汉长
好多 linux 用户都希望能够把自己配置好的系统做个备份,因为重装,配置一个自己顺手的系统往
往需要耗费大量的时间和精力。在系统出现非常严重的问题,或者想把此系统直接“拿”到其他同样配
置的电脑上去时,如果有一个属于自己的系统备份,只需将其还原,这样可以大大提高我们的效率。前
一阵子成功实现了利用 tar 命令的备份和还原,将自己本上的 ubuntu7.04 克隆到了朋友的一台同样配
置的 T40 上。因此在此浅谈一下 linux 操作系统的备份还原,和操作过程中所遇到的问题以及其原因和
解决方法。为了进一步验证,我又通过此方法在 fedora core7,ubuntu7.04,redhat9 上测试,结
果 都 顺 利 通 过 了 还 原 备 份 。 相 信 在 其 他 版 本 的 linux os 上 也 能 够 发 挥 作 用 。 以 下 是 在 fc7 和
ubuntu7.04 环境上的测试举例。

自己用的是老本小黑 IBM T40,首先列出分区列表:

root@jackie-laptop:/home/jackie# fdisk -l
Disk /dev/sda: 40.0 GB, 40007761920 bytes
240 heads, 63 sectors/track, 5168 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot Start End Blocks Id System


/dev/sda1 * 1 711 5375128+ 7 HPFS/NTFS
/dev/sda2 712 2101 10508400 c W95 FAT32 (LBA)
/dev/sda3 2102 2796 5254200 c W95 FAT32 (LBA)
/dev/sda4 2797 5167 17924760 f W95 Ext'd (LBA)
/dev/sda5 2797 3630 6305008+ 83 Linux
/dev/sda6 3631 4603 7355848+ 83 Linux
/dev/sda7 4604 4742 1050808+ 82 Linux swap / Solaris
/dev/sda8 4743 5167 3212968+ b W95 FAT32 (LBA)

注意:1。由于在 ubuntu7.04 和 fc7 下,自己的 IDE 硬盘被操作系统认成了设备 sd*。

2。sda1,sda2,sda3 这三个主分区分别为 windows 的 C,D,E 盘。sda4 为扩展分区,在扩


展分区内包含四个分区,sda5 为 ubuntu7.04 的根分区,sda6 为 fc7 的根分区,两者的/boot 都在
各自的根分区之内,sda7 为公用的交换分区。sda8 为 linux 和 windows 的公用分区。

一、备份
备份大体分为在其他 linux 操作系统(包括 live cd 和 rescue 模式)上备份和在本 linux 操


oss.linuxpk.com 2009 年第 1 期 68

经验技巧
作系统上备份两种不同的方式。以下来进行一一介绍。

1.在其它 linux 发行版本(自己的 fc7)下备份 ubuntu

首先在 fedora core7 下挂载 ubuntu 分区到/media/ubuntu 目录下


#mount -o iocharset=utf8,rw /dev/sda5 /media/ubuntu

然后备份 ubuntu 的全部内容,备份保存成/home/jackie/ubuntu.tar.gz。


# tar -cvzpf /home/jackie/ubuntu.tar.gz /media/ubuntu

2.在 ubuntu7.04 下直接打包备份

#tar -cvzpf /home/jackie/ubuntu.tar.gz --exclude=/proc --exclude=/lost+found


--exclude=/mnt --exclude=/sys --exclude=/media --exclude=/home/jackie/ubuntu.tar.gz
/

参数解释:

c - 新建一个备份文档

v - 详细模式, tar 程序将在屏幕上实时输出所有信息

p - 保存许可,并应用到所有文件

z - 调用 gzip 压缩,以减小备份文件体积(如果想追求更高的压缩,改用 j 参数,调用 bz2,此


时打包压缩成.tar.bz2 格式)

f - 要打包备份生成的文件名,/home/jackie/ubuntu.tar.gz 是本例子中备份文件名。

--exclude= - 剔除目录

最後一个参数是我们想要打包备份的目录。

注意问题:

1.使用 root 身份执行命令。

2.要有足够的空间存放生成的备份文件,否则还没 tar 完就会报错空间不足。

3.我自己在用 tar 备份结束的最后,出现了这个现象,“tar:由于先前错误的耽搁而存在错误”,


还好这对我们是没有影响的,可以忽略它。也并不是所有的备份过程都会出现此情况。

4.在 ubuntu 操作系统下打包 ubuntu 本身时不要忘记踢出自己本身,否则的话,可能就一直备份


下去了。

二、还原


oss.linuxpk.com 2009 年第 1 期 69

经验技巧
当然系统 A 的备份要在系统 B 上进行还原啦。本例是在 fc7 下还原 ubuntu7.04 的备份。

先挂载备份文件将被释放到的分区(之前最好格式化一下,以确保没有其他数据),本例是原来
ubuntu 所在的分区,当然完全可以是笔记本上的其他分区。
#mount /dev/sda5 /media/ubuntu

之后将备份解压到已挂载的分区。
#tar -xvpzf /home/jackie/ubuntu.tar.gz -C /media/ubuntu

参数解释:

x - 告诉 tar 程序解压缩备份文件

-C - 参数是指定 tar 程序解压缩到的目录

注意问题:

1.如果采用自身备份,剔除/proc,/lost+found,/sys,/mnt,/media 目录的方式打包,还原
后需要手动建立这些目录。

这些目录的相关权限:
dr-xr-xr-x 127 root root 0 2008-12-12 20:04 proc
drwxr-xr-x 2 root root 4096 2007-04-12 17:11 mnt
drwxr-xr-x 10 root root 4096 2008-12-12 12:04 media
drwxr-xr-x 2 root root 16384 2008-06-18 02:36 lost+found
drwxr-xr-x 11 root root 0 2008-12-12 20:04 sys

2.解压后确认被还原的 ubuntu 文件系统/目录处于 sda5 分区根下,而不是被其他文件夹当作子


文件夹。否则在进入 ubuntu7.04 时,由于其/目录不在 sda5 的根上,会出现找不到根目录文件的现象。

3.当自己在 fc7 下还原 ubuntu7.04 之后,列出了 ubuntu 下/dev 的设备文件,在 fc7 下竟然
发现 ubuntu 的/dev 下的设备文件是不完整的,像 sda1,hda1 等等这样的设备文件都不存在,原来这
部分文件在被打包时根本没有打包上,备份的包中根本没有这些文件。赶紧找一下原因,仔细一想,原
来内核使用的 udev 或者 devfs 会在开机时自动建立/dev 下的设备特殊文件。的确是这样的,当我们重
新开机进入 ubuntu 之后,会发现这些文件已经建立好了。

三、后续工作
一、特别注意:

1.如果操作系统的/boot 分区为单独分区,备份时只备份了/目录(当然此时备份的 tar 包中不包


oss.linuxpk.com 2009 年第 1 期 70

经验技巧
含/boot 分区的内容)。将备份恢复到原来的分区后可以正常使用。如将备份恢复到其他分区,需要相
应的调整 grub。

2.如果备份的/分区包含/boot,需要重装 grub 才能进入还原后的系统。

为何要重装 grub 呢?让我们一起了解一下 grub 的工作过程,来解开这个疑问。

GRUB 引导分为 stage1 和 stage2 两个部分。如果安装 GRUB 于 MBR 当中,则 stage1 直接写入了
MBR,这样机器一启动就将控制权交给了 GRUB 的代码。如果 GRUB 安装在 BR 当中,则需要有另外一个
OS loader 读入 BR 当中的 stage1 后才能把控制权交给 GRUB。接下来的步骤是 stage1 找到 stage2
并将控制权交给 stage2。这里有两种方式,一种是直接方式,stage1 根据记载的 stage2 所在硬盘的
位置直接将 stage2 找到;另一种是间接方式,这需要 stage1_5 也就是通常说的 stage1.5,如果使
用 stage1.5,则该文件实际是嵌入到 BR/MBR 之后的若干扇区内的,通过 stage1.5 对文件系统的分
析,通过路径方式找到 stage2。

如果我们备份的 linux 操作系统包含/boot 目录,当备份被还原到硬盘的时候,原来位于引导扇


区的数据就会发生改变。因此会加载 grub 失败。通常开机出现错误,只留下一个有关 grub 的提示。此
时重装 grub 就是一个解决的办法。

下面我们一起来简单看以下重装 grub 的方法。

如开机出现:错误提示为 grub error 22,或者 grub loading stage1.5 grub loading


please wait...等等~~ Error ...可通过以下方法重装 grub 来解决。

1、进入 liveCD 打开终端,或者用 redhat9 等安装盘进入终端,切换为超级用户。再或者制作


dos 启动盘,并且放入 grub4dos 程序,利用其重装 grub。(grub4dos 在网上可以下载到。如何建立
启动盘和进入目录再此就不提了)。

2、输入 grub

3、输入 root(hdx,y)

其中 x 表示第 x+1 块硬盘;y 表示第 y 个分区(扩展分区不算)。这一条命令是指定你的/boot 分


区位置,如果/boot 没有单独分区,那么就是你的/分区。按下 tab 键会出现当前分区表中磁盘格式和
位置信息。如果有多个 linux 版本同时存在的话,要注意你所要重装的 grub 所在的分区。

4、输入 setup(hdx)

如果想将 grub 写入第一快硬盘的 mbr 的话使用“(hd0)”如果想将 grub 写入 linux 根分区的


话,则在逗号后加个数字,如(hd0,4)。

6、出现成功修复的提示后,quit 退出,重启。


oss.linuxpk.com 2009 年第 1 期 71

经验技巧
二、特别注意:

重 装 grub 后 可 能 系 统 还 是 不 能 正 常 启 动 , 此 时 需 要 相 应 的 更 改 grub 启 动 项
或/boot/grub/memu.lst 文件,系统挂载密切相关的/etc/fstab 文件最好也相应的改一下。

因为以上三者中有用 LABEL,UUID 以及 sd*这些字样来表示磁盘分区的语句,有时候将备份还原到


分区,但此分区并不是以前我们备份的那个分区,分区大小、位置已改变等等原因,以前的分区参数可
能与现在的分区参数不同。为此,相应的修改是必须的。

下面让我们一起通过了解 menu.lst 和 fstab 中的 label 和 uuid,来解决还原后可能遇到的有


关系统分区改变而引起的问题。

UUID,全称 Universally Unique Identifier

它是一个 128 位,16 字节的值,并确保在时间和空间上唯一。它把硬件地址、时间以及随机数结


合在一下起来确保其唯一性的。

Ubuntu 现在默认使用 UUID 值表示硬盘分区,例如在笔者的 ubuntu7.04 中,/etc/fstab 下我


们很容易看到 ubuntu 所在分区 sda5 的 UUID 值:
# /dev/sda5
UUID=790879f3-abbd-4048-836a-eb61237a6ea6 / ext3 defaults,errors=remount-
ro 0 1

不仅在 fstab 中,在 GRUB 启动项中也会发现有 UUID 的身影:


kernel /boot/vmlinuz-2.6.20-14-generic root=UUID=790879f3-abbd-4048-836a-
eb61237a6ea6 ro quiet splash locale=zh_CN

与以前使用 sd*相比,使用 UUID 的好处是只要分区大小没有调整,它的 UUID 值就是固定的,也


就是说不管其他分区怎样,也不影响这一分区的挂载。但如果分区改变了,例如有时侯需要调整分区大
小,这样它的 UUID 值也就发生了变化,此时需要在 menu.lst 中和/etc/fstab 中将该分区的 UUID
值修改为当前值或者直接改为 sd*这种形式,否则系统无法启动,分区无法挂载。

对于还原来说,不同的分区拥有不同的 UUID 和标识,如果将 sda5 的备份还原到 sda8 上也必须


调整,这个毋庸置疑。

查询分区 UUID 值可以使用下面的命令:ls -al /dev/disk/by-uuid

结果是如下的形式:
lrwxrwxrwx 1 root root 10 2008-12-11 06:32 790879f3-abbd-4048-836a-
eb61237a6ea6 -> ../../sda5

label 磁盘分区卷标

在有些版本的 linux 中,通常使用 LABEl 表示分区。但有的时候也造成了一定的麻烦。


oss.linuxpk.com 2009 年第 1 期 72

经验技巧
通常在 fstab 里面我们会发现 linux 系统在安装过程中选择挂载的分区用的都是 LABEL=xxxx 的
方式,而我们自己手动添加的则是采用/dev/sd*的方式,比如笔者的 fedora core7 中 fstab 如下:
LABEL=/ / ext3 defaults 1
1
LABEL=HOME /home vfat defaults 0
0
LABEL=SWAP-sda7 swap swap defaults 0 0

在 grub 启 动 项 中 这 样 表 示 : kernel /boot/vmlinuz-2.6.21-1.3194.fc7 ro


root=LABEL=/ rhgb quiet

用 label 方式来挂载的话,如果磁盘分区发生变动使得原来的/dev/sda8(我的/home)变成了/
dev/sda9,那么使用 label 方式来挂载的话对系统不会有任何影响。但是这样做的缺点也很明显:
label 很容易通过一些软件来修改,这样的话反而会造成不稳定因素,不如用 /dev/sd*的方式来得好。

可以通过编辑磁盘分区卷标 LABEL 的方式来解决系统用 LABEL 挂载产生的问题,跟据不同的磁盘


分区类型,分别有 3 个程序可供选用。

Mtools 适用于 FAT32 格式分区;

ntfsprogs 适用于 NTFS 格式分区;

e2label 适用于 ext2 和 ext3 型格式分区。

在此我只拿 ext3 格式为例,mkfs.ext3 是隶属于 e2fsprogs 软件包的,而 e2fsprogs 包中还


有一个程序 e2label,专门用于修改文件系统的 label。

使用起来很简单,执行命令:e2label device newlabel

但更改分区卷标后我们必须卸下此设备,会在重启电脑后发现相应分区卷标已经改变。

三 、还原后的注意小结

还原后,由于分区原因而出现系统问题的解决

如果采用 LABEL 或者 UUID 来表示分区,或改变还原的位置(如 sda5 的备份还原到 sda8 上)。


还原 linux 后可能会出现以下问题。
couldn't find matching filesystem: LABLE=/home [failed]

或 unable to access resume device (LABEL=swap-sda7)

或者 fsck.ext3:unable to resolve LABLE=/

再或 mkrootdev:/ not found mount:error 2 mounting none


oss.linuxpk.com 2009 年第 1 期 73

经验技巧
总 之 是 一 些 因 为 LABEL , UUID , 分 区 改 动 而 引 起 的 /,/boot,/home 等 mounting 不 上 ,
fsck.ext3:unable to resolve 的问题。

方 法 是 更 改 menu.lst 这 个 文 件 , 将 LABEL 改 为 真 正 的 根 分 区 硬 件 设 备 。 如 把 kernel


/boot/vmlinuz ro root=LABEL=/或者 root=UUID=**** 改为 root=/dev/sd*

接下来再更改 fstab 文件,将挂载点改为真正的硬件设备。如把 /etc/fstab 里的 LABLE=/或者


UUID=****修改为/dev/sd*(值根据我们自己的实际情况)

最后总结

首先进行备份,此过程只需遵循以上注意即可。

有必要进行还原操作时,还原备份到分区。

如果开机出现 grub 引导问题,就按照以上方法重装 grub。menu.lst 和 fstab 也需要确认一下是


否与所在的分区对应,如有出入,进行调整。

好了,这里我只大体介绍了一种简单的 linux 操作系统的备份还原方法,希望以上介绍能对读者


们有所启发和帮助。谢谢!

Firefox 启动自动处于脱机工作模式的解决方法
GhosTM55
笔者的同学使用的是 ubuntu 发行版本,最近遇到了一个较为奇怪的问题,症状如下:每次打开
firefox,会自动进入 work

offline 的工作模式,需要在 File 菜单内去除该模式选项才能够正常的浏览网页。相信许多使用


ubuntu 的读者都可能碰到过该问题。

图1

该问题产生的原因是 Firefox 在启动后会视 Network-Manager 的连接状态来进行工作状态的切


oss.linuxpk.com 2009 年第 1 期 74

经验技巧
换,如果用户没有使用 Network-Manager 来进行网络连接(比如说直接通过 pppoe 来连接 adsl),那
么即使当前的确是处于联网状态,由于 Network-Manager 并没有进行网络连接,所以 Firefox 开启
后便启动为脱机模式工作了。

解决方法主要有两种:第一,卸载 Network-Manager,Network-Manager 对于部分用户来说并


不需要,所以,只要卸载了 Network-Manager,一方面可以帮助解决该问题,另一方面还能够节省一
定 的 硬 盘 空 间 ; 第 二 , 修 改 Network-Manager 的 配 置 文 件 /etc/dbus-
1/system.d/NetworkManager.conf,然后进行搜索与替换,将<allow

send_interface="org.freedesktop.NetworkManager"/>替换为<deny

send_interface="org.freedesktop.NetworkManager"/>即可。

心急的读者不仿快去试试吧。

Shell 的五个小应用
张凯
Shell 是 Linux 基础中的基础。用户也许知道类似“ls”、“cp”等这些 Shell 命令的用法,但是
不知尝试过没有 Shell 其它更为有趣、有用的用法呢?现在给大家展示几个。

巧用 watch 命令
在 Linux 中, Shell 命令“watch”的作用是以全屏方式重复地执行指定的命令。用户可以通过它
了解命令的运行情况。例如用户如果想实时观察内存变化,那么可以输入如下命令:

#watch free

这样就可以动态地观察内存中各个指标在某段时间内的变化情况了。

如果用户要观察虚拟内存的变化, 而不想耽误当前终端的操作,那么可以通过打开另外一个终端达
到这个目的。命令如下:

#xterm -e watch -n 1 vmstat &

这样就会弹出一个终端串口显示有关虚拟内存的情况。


oss.linuxpk.com 2009 年第 1 期 75

经验技巧
删除文中空行
在 Linux 下,用户如果想删除文件中的空行,一般使用“grep”,这里给出另外的几种方式:

1.使用“cat”命令,示例如下:

#cat filename|tr -s ‘\n’

2.使用“sed”命令,示例如下:

#sed ‘/^$/d’ filename

3.使用“awk”工具,示例如下:

#awk ‘{if($0!=“”)print}’ filename

捕获终端屏幕
“script”是一个 Shell 内建命令。它的作用是为终端会话制作一个副本,把用户的输入 /输出信
息以文件的形式保存下来。下面以笔者的应用做个例子:

#script
Script started, file is outputfile //输出文件是 outputfile
#ls -l /
……
#exit //用 exit 结束捕获
Script done, file is outputfile //输出的结果放在 outputfile 中
#cat outputfile

……

这里仅举例说明“script”命令的用法,以上是将浏览根目录会话保存在 outputfile 文件中。

开启键盘数字灯
很多 Linux 用户特别希望在系统启动的时候能自动将小键盘上的数字灯打开。虽然是个小的动作,
但是方便了不少。而且对于原来使用 Windows 的用户来说,感觉 Linux 在细节上也到位。下面就是一
段设置小键盘数字灯的脚本:

INITTY=/dev/tty[1-8]
for tty in $INITTY
do
setleds -D +num < $tty


oss.linuxpk.com 2009 年第 1 期 76

经验技巧
done

把它放在/etc/rc.d/rc.local 文件中即可。在字符模式下,可以输入下面的命令完成:

#setleds -D +num/+caps/+scroll

用户输入检测
有时需要对用户的输入作一些必要的检测,如限制输入的长度和类型等。下面举例要求用户必须输
入六个数字,如果输入有非数字字符,或者长度不等于六个,就提示错误信息。脚本源码如下:

#!/bin/csh
while true
do

echo -n “请输入六个数字:”
read num

lengh=${#num} #变量 lengh 存放输入的长度


if [[ $num != [0-9][0-9][0-9][0-9] || $lengh != 6 ]] then

echo “错误! 请重新输入”


continue
else

echo “输入正确!”
exit 0
fi
done

小结

Shell 的用法还远不止这些,Shell 命令、Shell 编程都是 Linux 用户应该掌握的基础知识。用户在熟悉了


Shell 的基本命令和语法结构后,根据需要、善加运用就可让 Shell 焕发无穷魅力,为工作和学习带来无限乐
趣。

给 Iptables 定时
付建民
作 为 网 络 管 理 员 , 需 要 经 常 定 时 对 防 火 墙 的 规 则 进 行 修 改 , 提 高 安 全 系 数 。 在 Linux 中 有


oss.linuxpk.com 2009 年第 1 期 77

经验技巧
Iptables,Iptables 中有一个重要参数 time。利用这个参数,用户可以完成防火墙中需要定时的各
种规则的配置。虽然有时用户也可以利用 cron 来完成相关的功能,但 time 参数的利用会带来更大的便
利。

由于在公开发布的 Linux 内核文件中,有关 Iptables 中的各种参数里并不包含 time 参数,所以


必须通过内核升级的方式打上这个补丁。因此,需要去相关网站下载有关补丁文件,通过升级内核加入该
参数。

此 次 操 作 应 以 root 身 份 登 录 , 进 行 操 作 的 系 统 配 置 为 Debian 3.0 、 kernel-2.2.20 和


iptables-1.2.6a 。 笔 者 下 载 了 iptables-1.2.8.tar.bz2 和 patch-o-matic-
20030912.tar.bz2 两个文件。

装载模块

首先在线对内核进行升级,命令如下:

#apt-get install kernle-image-2.4.21-5-686

升级完成后重启机器,以 root 身份登录。进入下载文件所在目录,解压后开始升级。第一步是要将


Iptables 的补丁文件中的 time 模块写入到 Linux 内核文件中去,以备重新编译内核。

进入 Iptables 补丁文件目录,所需的 time 模块在 base 子目录下。随后用户依照 README 文件中


的示例运行如下命令:

#KERNEL_DIR=/usr/src/linux-2.4 ./runme base

/usr/src/linux-2.4 是本机系统内核文件所在目录,上面的命令运行后会出现一个模块选择界
面。界面有两个区域,一个区域中写出了相关的模块名、功能和语法示例;另一个区域给出各种选项,
例如 Y/ N/ R/.........../ Q/ ?/_ ,其中 N 选项表示选择下一个模块,Y 表示确定,Q 表示退出。

首先确定当前的模块是否是用户需要的,不需要的就按“N”键后回车,继续显示下一模块的相关信
息。time 模块是最后一个,当出现了 time 模块后,将里边的相关语法示例抄录下来,以备应用。随后
按“Y”键表示安装这一模块,最后按“Q”退出。

编译内核

进入内核文件所在目录,输入下面的命令开始编译内核:

#make mrproper

#make xconfig(或#make menuconfig)

#make dep


oss.linuxpk.com 2009 年第 1 期 78

经验技巧
#make bzImage

#make install

接下来输入下面的命令装入模块文件:

#make modules

#make modules_install

然后升级 Iptables。进入解压后的 Iptables 文件目录,输入以下命令:

#make KERNLE_DIR=内核文件所在目录

#make install KERNLE_DIR=内核文件所在目录

#make install-devel

重启后输入下面的命令进行检验:

#iptabls -A INPUT -m time --timestart 8:00 --timestop 12:00 --days sun -


j ACCEPT

如果没有出现错误提示,即可输入下面的命令后会看到 time 的相关记录:

#iptables -L

至此,完成了全部的升级工作,实现了 Iptables 的定时功能,为网络服务中的定时需要带来了便


利。

无线网卡在 Linux 下活起来


孙学全
为了体验无线网络的便捷性,笔者购买了一台笔记本电脑。不过由于其内置的 PCI 无线网卡在
Linux 下一直没有驱动程序,所以形同虚设。

一个偶然的机会,笔者在网上发现了 NdisWrapper 软件项目(http://ndiswrapper.source-


forge.net)。该项目并不编写 Linux 驱动,而是通过一个内核模块来调用 Windows 下的 Ndis 驱动
程序,从而巧妙地解决了这些无线网卡没有 Linux 驱动的问题。该项目目前支持的无线网卡有 Admtek
8211、Atheros AR5004、Broadcom 4301、Broadcom 4309、Broadcom 94306、InProcomm
IPN2120 和 Intel PRO/Wireless Lan 2100。

笔者的网卡为 Intel PRO/Wireless Lan 2100,安装的 Linux 发行版本是 SuSE 9.0


oss.linuxpk.com 2009 年第 1 期 79

经验技巧
Professional,内核版本是 2.4.21-166,采用 0.3 版的 NdisWrapper(该软件目前的版本是 0.4
版,需要 2.6 或 2.4.23 以上的内核支持)。该软件虽然提供了非常详尽的文档,但因为考虑到安装过
程中存在的一些问题,所以在这里给出完整的安装说明。下述命令均以 root 身份执行。

1.到 http://prdownloads.sourceforge.net/ndiswrapper/ndiswrapper-
0.3.tar.gz?download 下载 ndiswrapper-0.3.tar.gz 文件。

2.解压缩该文件,此时会在当前目录下生成 ndiswrapper 目录。命令如下:


# tar zxvf ndiswrapper-0.3.tar.gz

3.进入 ndiswrapper 目录,编辑 driver/Makefile 文件,加入如下语句:


CFLAGS += $(shell [ -f /lib/modules/$(shell uname
-r)/build/include/linux/modversions.h ] && echo -DEXPORT_SYMTAB
-DMODVERSIONS -include /lib/modules/$(shell uname
-r)/build/include/linux/modversions.h )

如果不加入上述语句,在执行“depmod -a”命令时,会出现以下错误:
depmod: *** Unresolved symbols in /lib/modules/2.4.21-166-
default/misc/ndiswrapper.o

4.使用“make”命令编译 ndiswrapper。

5.到 http://www.asus.com/pub/ASUS/nb/M2N/v12056logo_xp.zip 下载 Centrino 无线


网卡的 Windows 驱动程序,通过“unzip”命令解压缩。

6.创建/usr/local/share/ndiswrapper 目录,将.sys 和.inf 文件拷贝到新建目录。命令如


下:
# mkdir /usr/local/share/ndiswrapper
# cp w70n51.sys w70n51.inf /usr/local/share/ndiswrapper

7.查找无线网卡的 Vendor ID 和 Device ID,具体做法如下:

(1)执行“lspci | grep 2100”命令,结果如下,其中 02:02.0 为无线网卡的 PCI ID:


02:02.0 Network controller: Intel Corp. PRO/Wireless LAN 2100 3B Mini PCI
Adapter (rev 04)

( 2 ) 根 据 PCI ID 执 行 “ lspci -n|grep 02:02.0” 命 令 查 找 无 线 网 卡 的 Vendor ID 和


Device ID,结果如下:
02:02.0 Class 0280: 8086:1043 (rev 04)

由上可知,无线网卡对应的 Vendor ID 为 8086,Device ID 为 1043。

8.使用“insmod driver/ndiswrapper.o”命令调用内核模块。

9.调用无线网卡的 Windows 驱动程序,命令如下:


oss.linuxpk.com 2009 年第 1 期 80

经验技巧
# utils/loaddriver <vendor> <device> <sysfile> <inffile>

上面代码中,<vendor> 为无线网卡的 Vendor ID,<device>为 Device ID,<sysfile>为


Windows 驱动程序中 sys 文件的全路径,<inffile>为 inf 文件的全路径。执行下面的命令,如果不
出现错误,无线网卡的灯就已经亮起:
#utils/loaddriver 8086 2043 /usr/local/share/ndiswrapper/w70n51.sys /usr/
local/share/ndiswrapper/w70n51.inf

10.设置无线网络,具体步骤如下:

(1)用“iwconfig”命令来显示无线网卡(eth0、eth1 或 eth2)的信息。在以下的步骤中,用
ethX 表示无线网卡的名称。

(2)设置无线网卡的操作模式为 Managed,命令如下:

# iwconfig ethX mode Managed (下转第 62 页)

(3)如果采用了 WEP 加密,需要设置 WEP 密码,命令如下:


# iwconfig ethX key password

对 40 位和 128 位加密,password 分别为 6 位和 10 位的十六进制数字。

(4)设置 SSID,其中 ESSID 为 Access Point 的 SSID。命令如下:


# iwconfig ethX essid ESSID

(5)创建/etc/sysconfig/network/ifcfg-ethX 文件,使得机器每次启动时,无线网卡都会
自动获得 IP 地址。该文件内容如下:
BOOTPROTO=‘dhcp’
MTU=‘’
REMOTE_IPADDR=‘’
STARTMODE=‘onboot’
UNIQUE=‘’

11.通过下面的命令启动无线网卡:
#ifconfig ethX up

12.最后将上述的配置自动化,使得开机自动启动无线网卡。具体分为以下几个步骤:

(1)使用下面的命令将 ndiswrapper.o 文件拷贝到系统的内核模块目录下:


# cp driver/ndiswrapper.*o /lib/modules/$(uname -r)/misc

(2)使用“depmod -a”命令更新系统的模块信息。

(3)拷贝 loaddriver 文件到某个目录(比如/usr/local/bin)下。命令如下:


oss.linuxpk.com 2009 年第 1 期 81

经验技巧
# cp utils/loaddriver /usr/local/bin

(4)拷贝 inf 和 sys 文件到某个目录(比如/usr/local/share/ndiswrapper)下。命令如下:

# cp bcmwl5.sys bcmwl5.inf /usr/local/share/ndiswrapper

(5)使用下面的命令为无线网卡创建别名:
#alias ethX=ndiswrapper

(6)修改/etc/modprobe.conf 文件,增加如下语句,在开机时自动调用 NdisWrapper:


post-install ethX /usr/local/bin/loaddriver 8086 1043
/usr/local/share/ndiswrapper/*.sys /usr/local/share/ndiswrapper/*.inf

至此,整个设置完成。以后每次进入 Linux 时,无线网卡就会被激活,并自动获得 IP 地址。这样


就可以在 Linux 下使用无线网卡的 Windows 驱动自由地使用 Centrino 笔记本的无线网络了。

在 Linux 上快速搭建计数器
李智强
对外发布网站会有人不断访问,那么怎么来统计访问网站的人数呢?目前有很多方法,例如流量统
计和 IP 统计等。这里介绍的是计数器(Counter)。通过计数器,网站人员能及时掌握浏览网站的人数。
现在互联网上的很多服务器采用的都是 Linux 操作系统,那么如何在 Linux 上快速搭建属于自己的计数
器呢?

安装与配置

在 Linux 平台上有 wwwcount-2.6-3.i386.rpm 软件包,可搭建基本的计数器,而且很简单。该


软件包的安装和配置方法如下:

1.首先下载 wwwcount-2.6-6.i386.rpm。网址是
http://speakeasy.rpmfind.net/linux/RPM/PLD/dists/ra/PLD/i386/PLD/RPMS/wwwcou
nt-2.6-6.i386.html。输入下面的命令:
#rpm -Uvh wwwcount-2.6-6.i386.rpm

此时,系统会自动在/var/lib/wwwcount/data 目录下打开一个 my.dat 文件。用户需要设置


my.dat 文件的权限,并在/var/www/html 中打开一个范例文件 wc-example.html。用户只要察看
wc-example.html 文件的源代码,即可将计数器挂上网站。

2.接着下载 wwwcount2.6.tar.gz 文件。网址是


http://www.muquit.com/muquit/software/Count/Count2.6/Count2.6/download/src/w


oss.linuxpk.com 2009 年第 1 期 82

经验技巧
wwcount2.6.tar.gz。下载完后,就开始安装、设置与使用了。

3.登录 Linux 主机,进入/usr/local/src 目录,对 wwwcount2.6.tar.gz 文件进行解压操作。


命令如下:
# cd /usr/local/src
# tar -zxvf wwwcount2.6.tar.gz

4.接着开始对刚解压的文件进行设置,可以参见下面的过程:

# ./Count-config //开始设定

……

◆ cgi-bin dierctory [/usr/local/etc/httpd/cgi-bin]:


/usr/local/apache/cgi-bin //Apache 默认的 cgi-bin 的目录

……

◆ Base directory [/usr/local/etc/Counter]: /usr/local/Counter // wwwcount


安装的目录
You need to enter the directory of the configuration file.

◆ Config directory [/usr/local/Counter/conf]: //默认按回车键


You will create this file later by running the program “Gen_conf”.

◆ Name of the configuration file [count.cfg]: //默认按回车键


You need to enter the directory of the counter data file.

◆ Data directory [/usr/local/Counter/data]: //默认按回车键


You need to enter the directory of the Log file.

◆ Log directory [/usr/local/Counter/Log]: //默认按回车键

◆ Name of the log file [Count2.6.log]: //默认按回车键


You entered:
++++++++++++++++++++++++++++++
CgiBinDir=/usr/local/apache/cgi-bin

……
++++++++++++++++++++++++++++++

Everything looks ok [y|n]? y //确定以上设置没问题后就按 y

5.接下来输入“./configure”命令,开始一些测试主机情况。


oss.linuxpk.com 2009 年第 1 期 83

经验技巧
6.如 果想 要让 计数 器每 点击 一次 就增 加一 个数 的话 ,在 Makefile 文 件中 找到 “ Makefile
#COUNT_RELOAD= -DCOUNT_RELOAD=1 ”这行(大约在 33 行),将注解“#”符号取消,保存后退出。

7.输入命令“make clean”,然后开始编译可执行文件。

8.接着使用“./Gen-conf”命令设置主机信息,过程如下:

……

Continue [y|n]? y //按下 y 确定

Enter your fully qualified domain name [no default]: game1.com.cn //需要输
入主机名与域名

◆ Enter your IP address [no default]: 221.7.128.164

◆ Does your host have any nickname [y|n]:? y //如果主机有多个名称,那就按 y,


否则按 n

◆ Enter your host's nickname (FQDN) [no default]: www.game1.com.cn //如果


上面按 y,才会出现需要填另一个主机名

◆ Do you want to allow automatic file creation [y|n]? n //通常不希望自动产


生文件

◆ Do you want the program to run in strict mode [y|n]? y

◆ Do you want to ignore access hits from your own host [y|n]? y //用户自
己访问,如果想计入其内,就按 y。

……

9.开始进行安装,过程如下:
# ./Count-install
Your configuration:

……

Continue [y|n]? y //查看上面的设置信息是否正确,正确的话就开始安装

◆ Do you know the user and group id of httpd' child process [y|n]:? y

◆ Enter user id of httpd's child process [no default]:? nobody

◆ Enter group id of httpd's child process [no default]:? nobody //如果用


oss.linuxpk.com 2009 年第 1 期 84

经验技巧
户不清楚,可以在 httpd.conf 文件中查找相关的设置

到此,安装就完成了。

应用

要使用上面搭建的计数器也很简单,只要在网页文件中的任何地方加入下面代码,就可以显示出计
数器图形了:
<img SRC=“http://www.game1.com.cn/cgi-bin/Count.cgi?
dd=A&ft=0&sh=T&pad=Y&df=test.dat”>

其中 test.dat 文件放在/usr/local/Counter/data 目录下,用户可以参照下面对这个文件进


行一些操作:
#cd /usr/local/Counter/data
#echo 1 > test.dat
#chown nobody:nobody test.dat
#chmod 644 test.dat

5 分钟打造 U 盘启动的 Ubuntu


想拥有一个可以随身携带的操作系统?你可以考虑将它安装到 U 盘驱动器上。很早开始在 USB 磁盘上
运行 Linux 发行版已经成为可能的,只是这个制作过程嘛,有点麻烦。为什么?因为那意味着你需要在
命令行中敲一大堆极客们(Geekers)才会用到的命令,并且,如果你不慎敲错了了其中一行,对不起,
请你重头来过。更要命的是,不花费一两个小时,你是没法将它安装到 USB 盘上的。不过,本篇教程将
教你如何在 5 分钟内将 Linux 操作系统安装到 U 盘上,打造你自己的 Linux 魔法棒。这需要使用一个名
叫 UNetbootin 的奇妙软件。

我们已经用本教程成功地将 Ubuntu 8.04.1 LTS 和 BackTrack 3 这两个 Linux 发行版成功地


安装到一个 1GB 的金士顿 DataTraveler 2.0 USB 闪存盘上了。

步骤 1:下载 UNetbootin


oss.linuxpk.com 2009 年第 1 期 85

经验技巧

好了,你要做的只是从这里下载里 Unetbootin 的程序文件,并保存到桌面上,单击右键,选择“


属性(Properties)”。

点 击 “ 权 限 ( Permissions ) ” 选 项 , 选 中 “ 允 许 执 行 ( Allow executing file as


program)”前的选项卡,如图 2。

步骤 2:执行 UNetbootin 并创建你的可携带 Linux 发行版


oss.linuxpk.com 2009 年第 1 期 86

经验技巧

首先,将 USB 磁盘接入到计算机的空插槽中(这一步非常重要,因为如果你运行 UNetbotin 在先


而插入 U 盘再后,你将无法使用它来制作可启动 U 盘)。

双击 UNetbootin 可执行文件,输入你的密码,它就启动了。你现在所需要做的就是选择你喜爱的
Linux 发行版本及其版本号,并开始安装。当然你也可以下载一个 Linux 发行版的 ISO 镜像,这样在
UNetbootin 中会有特别快的制作速度。

在以下示例中,我们使用 BackTrack 3 的 ISO 镜像,整个过程使用了大约 5 分钟。

就是这样,现在重启系统,并从 U 盘引导吧。好好享受你的便携 Linux 操作系统。

用 SrvRepor 远程监控 Linux 服务器


蒋年华
系统管理员不在机房时,如何继续对 Linux 服务器进行监控和管理,如何全面了解 Linux 服务器的

oss.linuxpk.com 开开
源 2009 年第 1 期 87

经验技巧
运行状态,是系统管理员需要面对的问题。实现对 Linux 服务器远程管理和监控的方法很多,这里主要
介绍使用 SrvReport 这款 Linux 专用远程监控软件,对 Linux 服务器进行远程监控管理。

SrvReport 配置方法

SrvReport 是一款功能强大的 Linux 服务器远程监控软件。它能够根据 Linux 系统管理员的设定,


定期把 Linux 服务器运行状况的各种参数通过电子邮件的方式发送到指定的电子信箱中。SrvReport
所发送的记录 Linux 服务器运行状况信息的邮件,不只是简单地采用了 HTML 或 TXT 格式。邮件中的
HTML 文件里采用了柱型条、高亮度对比文字、表格和详细列表记录的方式,对 Linux 服务器运行状况
的各项参数进行了分类记录。使得 Linux 系统管理员通过阅读 HTML 邮件,很容易就能对 Linux 服务器
的情况有一个很全面的了解。

SrvReport 这款开发源码软件的安装和配置相当简单。用户可以从 http://sourceforge.net/


project/showfiles.php?group_id=98398 下载到最新版本的 SrvRepor 压缩包。通过以下命令
解压 SrvRepor 压缩包:
# tar xzfv srvreport-x.xx.tgz

进入 SrvReport/bin 目录,将 srvreport.pl 文件加入到 Linux 系统中的 crontab,以便让


SrvReport 定期运行。在编辑 bin/srvreport.conf.文件时,在“mailAddr:”中填写用户指定接
收 SrvRepor 所产生报告的电子邮件地址。

在编辑 bin/srvreport.conf 文件时,除了要填写指定接受报告的电子邮件信箱之外,还需要根


据实际情况,修改 bin/srvreport.conf 文件中诸如 HTML 报告存储地址、报告图片存储地址和报告
所需要记录的信息项目等几个模块参数。

参考配置

为了方便配置 SrvReport,用户可以从其软件压缩包的/DOC 目录中查看一份名为 EXAMPLE.HTML


的完整的 srvreport.conf 文件的配置清单。以下就是笔者按照“ EXAMPLE.HTML”所配置的一份
srvreport.conf 配置清单,以粗体显示的变量可以根据 Linux 服务器和网络的实际情况进行修改。
## Configuration File for SrvReport

# Receiver of the mail-report(接收 srvreport 报告的电子邮件地址)


MailReport = webmaster@myschool.org

# filename for saving the html-report(保存 HTML 报告的文件名)


# may contain %%YYYY, %MM, %DD, which will be replaced with

# the apropriate values(%YYYY, %MM, %DD 分别表示年、月、日。一般由 srvreport 自


动生成)
FileReport = ../web/html/%%YYYY-%%MM-%%DD.html


oss.linuxpk.com 2009 年第 1 期 88

经验技巧
# path where the images are located(图片文件所保存的路径)
FileReportImgPath = ../../images/

# If you want an up-to-date file, then you should set this to 1(如果你需要
最新的文件报告,可以将 FileReportCreateAlways 和 ReportWithTime 的值设置为 1)
FileReportCreateAlways = 1
ReportWithTime = 1

# This defines the order of the report(定义 srvreport 所要监控的 Linux 服务器
所提供的服务)
order = Traffic CPUUsage WebServer FTPServer FTPLogs Postfix Warnings
LastLogins ChkRootKit

除了修改电子邮件地址和以加粗显示的几项参数之外,配置清单中大多数默认参数都是不需要修改
的。当然,假设用户的 Linux 服务器中没有提供 FTP 服务,那么删除配置清单的[FTPServer]这个模
块即可。


oss.linuxpk.com 2009 年第 1 期 89

企业应用

LRP 架构 Linux 路由器防火墙


王耀
在基于 TCP/IP 协议的网络结构中,路由器/防火墙的重要性不言而喻。作为伴随着互联网成长的操
作 系 统 , Linux 在 架 构 路 由 器 / 防 火 墙 方 面 具 有 天 然 的 优 势 。 LRP 源 自 Linux Router
Project(Linux 路由器计划),其目标是要实现微内核结构的瘦服务器,用于网关/路由器/防火墙。
与发行版 Linux 架构的路由器相比,LRP 路由器显著的优点是系统效率高、硬件成本低。本文以某具体
网络拓扑结构为背景,探讨用 LRP 方案架构路由器/防火墙的过程及其相关问题。

从硬盘启动 LRP

一般而言,LRP 软件仅用一张软盘便可容纳。其最基本的工作方式是由软盘启动,在内存中建立映
像文件系统,并开始工作。系统投入运行后,不再需要该软盘。但实践发现,由于软盘在可靠性、容量
等方面的先天不足,在应用中难免会有软盘损坏或功能受限的情形发生。因此,完全可以用硬盘启动取
代软盘启动。

首 先 从 http://lrp.steinkuehler.net 下 载 LRP 软 件 , 软 件 名 为 dachstein-v1.0.2-


1680.exe。准备两张空白 3 英寸软盘,一张格式化为 1.44MB,另一张则用刚下载的程序制作成
1.68MB 的 LRP 软盘,这就是从软盘启动的 LRP。将新制成的软盘上除 Linux 内核和 ldlinux.sys 以
外 的 其 它 文 件 , 复 制 到 1.44MB 软 盘 中 , 修 改 其 中 的 配 置 文 件 syslinux.cfg , 把 软 盘 引 导 参 数
“boot=/dev/fd0,msdos”改为硬盘引导参数“boot=/dev/hda1,msdos”。

为了能够从硬盘启动,我们需要一个能够支持硬盘的系统内核 linux+IDE.bin,将其从网上下载
后改名为 Linux。此外,还需要一个 Linux 引导加载程序 syslinux.com,可以从上述网站下载,也
可以从 http://www.kernel.org/pub/linux/utils/boot/syslinux 下载最新的版本。另准备
一张 MSDOS 启动盘,将新内核 Linux 和 syslinux.com 复制上去。

现在开始安装 LRP。为每个 LRP 准备一台 PC 机,CPU 至少是 486,内存 12MB 以上。实际选用了


P5/100 和 16MB 内存,一块 IDE 硬盘(容量不必太大,10MB 即可),两块网卡(10/100MB)。用
DOS 启动盘引导机器,执行 fdisk 命令,确保在硬盘上仅有一个 DOS 主分区(标记为 Active)。待重
新引导机器后,执行如下命令:
#format c:
#syslinux -s c:
#copy linux c:\

配置网络接口


oss.linuxpk.com 2009 年第 1 期 90

企业应用
首先考虑网卡驱动程序。LRP 系统已经包含几个常用的网卡驱动程序模块,如 3c509、3c59x 和
eepro100 等,但没有包含 D-Link 530TX(Rev A1/B1/B2)网卡驱动程序。可以从 LRP 网站下载一
个与内核版本对应的 530TX 网卡驱动程序,名为 via-rhine.o,复制到 DOS 软盘上。注意,DOS 文件
名为 8+3 制,长文件名 via-rhine.o 最好先改短,如改成 via.o。在 LRP 机器上,插入软盘,执行如
下命令:
#mount -t msdos /dev/fd0 /mnt
#cp /mnt/via.o /lib/modules/via-rhine.o
#umount /dev/fd0

将网络驱动模块复制到内存映像文件系统的/lib/modules 目录中。注意,每次修改内存映像文件
系统都需要及时备份.lrp 文件,保存所做的变化。键入 lrcfg 命令,选择配置选单的“Back-up
ramdisk”条目,再选“modules”,备份 modules.lrp 即可。接着配置驱动程序,选择配置选单的第
3 项“Package settings”,再选“modules”,编辑/etc/modules 文件(也可以在命令行键入命
令 edit /etc/modules),加入以下两行:
pci-scan
via-rhine

保存退出,并注意备份 etc.lrp。

图 1 校园网拓扑结构简图

图 1 是一张简化的校园网拓扑结构图,其中网关 1、网关 2、伪网桥和防火墙都是 LRP 机器,两个机


oss.linuxpk.com 2009 年第 1 期 91

企业应用
房 通 过 路 由 器 / 网 关 接 入 校 园 网 。 假 定 机 房 1 的 网 络 地 址 为 192.168.1.0/24 , 网 关 为
192.168.1.254;网关 1 出口端地址为 192.168.0.253,默认网关为 192.168.0.254。机房 2 类似。
注意,路由器两边都是静态 IP 地址。在默认设置中,LRP 设定自己是外网的 DHCP 客户,同时又是内网
的 DHCP 服务器。因此,我们需要做一些改变,取消 DHCP 服务。执行如下命令:

#mount -t msdos /dev/hda1 /mnt


#edit /mnt/syslinux.cfg
#umount /dev/hda1

在编辑文件时删除“LRP=”中 dhclient 和 dhcpd 两项。再使用如下命令:

#edit /etc/network..conf

把其中的 EXTERN_DHCP 开关项改为 NO。备份 etc.lrp 后,键入命令:

#shutdown -r now

重新启动机器。

现 在 来 配 置 接 口 参 数 。 选 择 配 置 选 单 的 第 1 项 “ Network settings” , 再 选 “ Network


Configuation”,编辑/etc/network.conf 文件,进行如下配置:

IF_AUTO="eth0 eth1"
eth0_IPADDR=192.168.0.253
eth0_MASKLEN=24
eth0_BROADCAST=192.168.0.255
eth0_DEFAULT_GW=192.168.0.254
eth1_IPADDR=192.168.1.254
eth1_MASKLEN=24
eth1_BROADCAST=192.168.1.255

保存并备份 etc.lrp。执行下面命令:

#/etc/init.d/network reload

使刚配置的接口生效。可以用 ping 命令来测试网络的连通性。

LRP 的工作模式

LRP 的 一 般 工 作 模 式 有 三 种 : 直 接 路 由 方 式 、 过 滤 式 路 由 方 式 和 防 火 墙 方 式 。 只 要
在/etc/network.conf 文件中设置:

IPFWDING_KERNEL=YES
IPFILTER_SWITCH=none

就 构 成 了 直 接 路 由 方 式 ( 网 关 ) 。 前 一 项 相 当 于 做 echo 1 >


oss.linuxpk.com 2009 年第 1 期 92

企业应用
/proc/sys/net/ipv4/ip_forward,允许 IP 包转发。后一项则意味着不做包过滤。这种方式比较
简单,但也带来了问题,机房中的所有 IP 包将不受控制地涌向校园网络,给网络带来额外的负担。解决
的方法就是加上 IP 包过滤,即过滤式路由方式。

同样在/etc/network.conf 文件中设置:

IPFWDING_KERNEL=FILTER_ON
IPFILTER_SWITCH=router

对流经 LRP 路由器的数据包进行有选择地转发。如果要对两个机房的流量集中控制,可以在出口网


关和路由交换机之间增加一个“透明网桥”(不必改变它们原有的路由关系),利用 ARP 代理来传递“
网桥”两端路由设备的 ARP 消息,实现一种透明连接。通过对 LRP 的网络接口设置:

eth0_PROXY_ARP=YES
eth1_PROXY_ARP=YES

相当于

echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp


echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp

就能实现这样的连接。由于这种连接是在网络层(链路层的上一层)实现的一种伪网桥,因此可以
在其上控制流经的数据包。

LRP 的第三种工作模式就是防火墙。设置防火墙方式如下:

IPFWDING_KERNEL=FILTER_ON
IPFILTER_SWITCH=firewall

此外,除了要配置网络接口 eth0 和 eth1 外,还要进一步指出外网接口和内网接口:

EXTERN_IF="eth0"
EXTERN_IP= 221.xxx.xxx.1
INTERN_IF="eth1"
INTERN_NET=192.168.0.0/24
INTERN_IP=192.168.0.254
MASQ_SWITCH=YES


oss.linuxpk.com 2009 年第 1 期 93

企业应用
外部 IP 地址由 ISP 提供,内外接口的 IP 地址要与 ethX_IPADDR 中的地址一致。上面最后一项是
启用 IP 伪装,即 NAT(网络地址转换)。LRP 已经安排好了一组基本的防火墙规则。当然,也可以制定
自己的防火墙规则。

防火墙与 DMZ

DMZ 代表非军事区(Demilitarized Zone),是介于内网和外网之间的一个单独的网段,其上的


服务器用来提供对外服务。DMZ 是 LRP 防火墙的高级应用方式。

在作为防火墙的 LRP 机器上增加一块网卡,用于连接 DMZ。配置网络接口 eth2,启用 DMZ:


IF_AUTO="eth0 eth1 eth2"
eth2_IPADDR=221.xxx.xxx.249
eth2_MASKLEN=29
eth2_BROADCAST=221.xxx.xxx.255
DMZ_SWITCH=YES
DMZ_IF="eth2"
DMZ_NET=221.xxx.xxx.0/29

DMZ 网络使用 ISP 提供的一组公用 IP 地址。开放 DMZ 中的服务器:


DMZ_OPEN_DEST="tcp_${DMZ_NET}_www tcp_${DMZ_NET}_ftp"

允许外部访问 WWW 和 FTP 服务器。利用端口转发技术,LRP 也支持一个独立的内部网段作为 DMZ,


将内部服务器用于对外服务。

远程管理 LRP

配置好的 LRP 机器可以放到机架上,通过 SSH(Secure Shell)实施远程控制。从 LRP 网站下载


三个文件:libz.lrp、sshd.lrp 和 sshkey.lrp,分别是 OpenSSH 的库文件、守护程序和密钥生成
器。将三个文件复制到 DOS 启动盘上,用 DOS 启动盘引导 LRP 机器,将三个文件复制到硬盘。取出软盘,
重启机器,执行如下命令:
#mount -t msdos /dev/hda1 /mnt
#cd /mnt
#lrpkg -i libz


oss.linuxpk.com 2009 年第 1 期 94

企业应用
#lrpkg -i sshd
#lrpkg -i sshkey
#cd /
#makekey
#edit /mnt/syslinux.cfg
#umount /dev/hda1

动态安装三个文件,生成密钥。为保证下次启动时自动安装 SSH,编辑/etc/syslinux.cfg 文件,


在“LRP=”中添加 libz.lrp 和 sshd.lrp 两项。注意,这次需要备份 etc.lrp 和 sshd.lrp。

至 于 SSH 的 客 户 端 , Linux 有 ssh 命 令 可 以 用 。 在 Windows 平 台 上 , 可 以 从


http://www.chiark.greenend.org.uk/~sgtatham/putty 取 得 一 个 支 持 SSH 的 客 户 端 软 件
PuTTY 。 在 PuTTY 配 置 界 面 ( 如 图 2 ) 中 将 IP 地 址 设 为 192.168.0.253 , 协 议 取 SSH ( 端 口 号
22),会话命名为 Router01,单击 Save 按钮保存。单击 Load 按钮选取 Router01 会话,单击 Open
按钮即可进入 PuTTY 终端窗口。

图 2 PuTTY 配置界面

另外,LRP 有一个很小的 Web 服务器。在浏览器中输入 LRP 机器的 IP 地址,就能够以网页方式观


察 LRP 机器的信息,如图 3 所示。


oss.linuxpk.com 2009 年第 1 期 95

企业应用

最后,改动 LRP 机器的 Award CMOS 设置。将“标准 CMOS 设置”中的“ Halt on”选项设为
“All,But Keyboard”(忽略键盘,没有键盘照样启动)。将“电源管理设置”中的“ HDD Power
Down”设为 15min(定时关闭硬盘电源,硬盘不再使用)。拔掉键盘和显示器, LRP 机器就成为名副其
实的 LRP Box,可以摆上机架了。

LRP 还有许多高级应用,如均衡负载、公平队列、带宽控制、策略路由等。这些工作都是建立在
iproute2 和 ipchains 的基础之上。关于这方面的资料,可参见《 Linux Advanced Routing &
Traffic Control》(Linux 的高级路由和流量控制 HOWTO),网址为 http://lartc.org。

我们总会面临保护自己的硬件设备投资这样的问题。LRP 让我们有机会从一个特别的角度来重新审
视软件对于硬件及应用的作用和关系,这就是它的意义所在。


oss.linuxpk.com 2009 年第 1 期 96

企业应用

配置 Linux 下的动态 DNS 服务


王波
在网络管理中,对于 DNS 服务的管理是一项基础性的工作。随着用户规模的扩大,频繁地手工修改
DNS 的区域数据库文件不是一件轻松的工作。关于动态 DNS(DDNS)的研究逐渐引起了人们的关注,不同
的平台都推出了自己的解决方案。本文将详细介绍 Linux 环境下 DDNS 的解决方案,即由 Internet
Software Consortium ( ISC ) 开 发 的 BIND-DNS 和 DHCP(Dynamic Host Configure
Protocol,动态主机配置协议)协同工作,进而共同实现 DDNS 的方法。

在 Linux 下实现动态 DNS 不仅需要 Bind 8 以上的 DNS 软件,还要有 DHCP Server v3.0 以上版
本,因为只有 3.0 以上的版本才完全实现了对 DDNS 的支持。因此,本文的实现环境采用 Slackware
Linux 9.0 作 为 DDNS 服 务 器 , 其 上 同 时 运 行 DNS 和 DHCP 服 务 , 其 中 DNS Server 采 用 Bind
9.2.2,DHCP Server 采用 DHCP Server v3.0pl2。

下面详细介绍 Linux 环境下安全、动态 DNS 的实现方法。

创建密钥

要实现 DNS 的动态更新,首先要考虑的是怎样保证安全地实现 DDNS。由 ISC 给出的方法是创建进


行动态更新的密钥,在进行更新时通过该密钥加以验证。为了实现这一功能,需要以 root 身份运行以下
命令:
root@slack9:/etc# dnssec-keygen -a HMAC-MD5 -b 128 -n USER myddns
Kmyddns.+157+37662

上述 dnssec-keygen 命令的功能就是生成更新密钥,其中参数-a HMAC-MD5 是指密钥的生成算


法采用 HMAC-MD5;参数-b 128 是指密钥的位数为 128 位;参数-n USER myddns 是指密钥的用户为
myddns。

该命令生成的一对密钥文件如下:
-rw------- 1 root root 48 Jan 14 18:26 Kmyddns.+157+37662.key
-rw------- 1 root root 81 Jan 14 18:26 Kmyddns.+157+37662.private

可以查看刚生成的密钥文件内容:
root@slack9:/etc# cat Kmyddns.+157+37662.key
myddns.INKEY02157 4gEF1Mkmn5hrlwYUeGJV3g==
root@slack9:/etc# cat Kmyddns.+157+37662.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)


oss.linuxpk.com 2009 年第 1 期 97

企业应用
Key: 4gEF1Mkmn5hrlwYUeGJV3g==

仔细阅读该密钥文件就会发现,这两个文件中包含的密钥是一样的,该密钥就是 DHCP 对 DNS 进行


安全动态更新时的凭据。后面需要将该密钥分别添加到 DNS 和 DHCP 的配置文件中。

修改 DNS 的主配置文件

密钥生成后就要开始对/etc/named.conf 文件进行编辑修改,主要目的是将密钥信息添加到 DNS


的主配置文件中。本文给出修改后的/etc/named.conf 的一个实例:
options {
directory "/var/named";

//指定区域数据库文件的存放目录
};
zone "." IN {
type hint;
file "caching-example/named.ca";
};
zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};
key myddns {
algorithm HMAC-MD5.SIG-ALG.REG.INT;

//指明生成密钥的算法
secret 4gEF1Mkmn5hrlwYUeGJV3g==;

//指明密钥
};
zone "tcbuu.cn" IN {
type master;
file "tcbuu.cn";


oss.linuxpk.com 2009 年第 1 期 98

企业应用
//正向区域文件名 tcbuu.cn,后文会用到该文件
allow-update { key myddns; };

//指明采用 key myddns 作为密钥的用户可以动态更新该区域“tcbuu.cn”


};
zone "1.22.10.in-addr.arpa" IN {
type master;

file "tcbuu.cn.arpa";//反向区域文件名 tcbuu.cn


allow-update { key myddns; };

//指明采用 key myddns 作为密钥的用户可以动态更新该区域“1.22.10.in-addr.arpa”


};

在/etc/named.conf 中可以定义多个区域,只要在允许动态更新的区域中增加 allow-update {


key myddns; }指令,即可实现动态更新,并且只有拥有 key myddns 实体(在本文的实现中该实体
就是拥有同样密钥的 DHCP 服务器)才能实现对该区域进行安全地动态更新。相比原来只限定 IP 地址的
方法,该方法要安全得多。

至此完成对 DNS 服务器的配置,可以执行#named 运行 DNS 服务。

修改 DHCP 的配置文件

DHCP 的主要功能是为 DHCP 客户动态地分配 IP 地址、掩码、网关等内容。正是由于 DHCP 的动态特


性,在实现 DDNS 时,DHCP 成为首选方案。

给出修改后的/etc/dhcpd.conf 的一个实例:
# dhcpd.conf
# Sample configuration file for ISC dhcpd
# option definitions common to all supported networks...
option domain-name "tcbuu.cn";
option domain-name-servers 10.22.1.123;
default-lease-time 600;
max-lease-time 800;
ddns-update-style interim;

//指明实现动态 DNS 的方法为 interim


subnet 10.22.1.0 netmask 255.255.255.0 {

range 10.22.1.60 10.22.1.69;//地址池


option broadcast-address 10.22.1.255;


oss.linuxpk.com 2009 年第 1 期 99

企业应用
option routers 10.22.1.100;
}

key myddns {//指明密钥生成的算法及密钥


algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret 4gEF1Mkmn5hrlwYUeGJV3g==;
}
zone tcbuu.cn. {
primary 10.22.1.123;

key myddns;//指明更新时采取的密钥 key myddns


}
zone 1.22.10.in-addr.arpa. {
primary 10.22.1.123;

key myddns;//指明更新时采取的密钥 key myddns


}

说明:

1.ddns-update-style interim

由 ISC 开发的 DHCP 服务器目前主要支持 interim 方法来进行 DNS 的动态更新,另外一种称为 ad-


hoc 的方法基本上已经不再采用。因此,实际上,interim 方法是目前 Linux 环境下通过 DHCP 实现安
全 DDNS 更新的惟一方法。

2.key myddns {//指明密钥生成的算法及密钥


algorithm HMAC-MD5.SIG-ALG.REG.INT;
secret 4gEF1Mkmn5hrlwYUeGJV3g==;
}

此段内容与/etc/named.conf 中的完全一样。需要注意的是,在编辑/etc/dhcpd.conf 时,{}


的末尾没有“;”,这是与/etc/named.conf 中不一样的地方。

3.在/etc/dhcpd.conf 中指明的区域名称后面一定要以“.”结尾。因此 zone tcbuu.cn.中的


cn 和 zone 1.22.10.in-addr.arpa.中的 arpa 后面一定要有“.”。

/etc/dhcpd.conf 配置完成,可以执行#dhcpd 将 DHCP 服务运行起来。

测试 DDNS

经过上述服务器的配置,现在可以检测一下 DDNS 的实现过程。

当 DNS 配置成支持动态更新后,在/var/named/目录下会多出两个以.jnl 结尾的二进制格式区域


oss.linuxpk.com 2009 年第 1 期 100

企业应用
文件。这两个文件是当前正在工作的区域文件的运行时文件,所有动态更新的纪录都会最先反映到这两
个文件中,然后经过大约 15 分钟左右才将更新的内容反映到文本形式的区域文件中,即以.jnl 结尾的
区域文件中是最新的内容。

在本文所举实例中,/var/named/目录下的区域文件为:

tcbuu.cn 正向区域文件。

tcbuu.cn.arpa 反向区域文件。

tcbuu.cn.arpa.jnl 临时工作的二进制正向区域文件(新增)。

tcbuu.cn.jnl 临时工作的二进制反向区域文件(新增)。

1.以 Windows 2000 作为 DHCP 客户端测试

( 1 ) 设 客 户 机 的 主 机 名 为 kill-virus , 执 行 ipconfig /all 显 示 所 获 得 的 IP 地 址 为


10.22.1.69。

(2)在客户端执行 nslookup 测试。


C:\Documents and Settings\Administrator>nslookup
Default Server: slack9.tcbuu.cn
Address: 10.22.1.123

> kill-virus.tcbuu.cn//测试客户机 FQDN 在区域文件中是否存在


Server: slack9.tcbuu.cn
Address: 10.22.1.123
Name: kill-virus.tcbuu.cn

Address: 10.22.1.69//测试结果,表明该资源纪录存在

(3)在客户机 kill-virus 上执行 ipconfig /release 释放获得的 IP 地址。

(4)在客户机 kill-virus 上执行 ipconfig /renew 重新获得 IP 地址。

(5)用 nslookup 显示区域数据库中的内容。


C:\Documents and Settings\Administrator>nslookup
Default Server: slack9.tcbuu.cn
Address: 10.22.1.123

> ls tcbuu.cn//显示区域数据库中的资源纪录
[ftp.tcbuu.cn]

tcbuu.cn. NS server = slack9.tcbuu.cn


oss.linuxpk.com 2009 年第 1 期 101

企业应用
D2501 A 10.22.1.60

dellpc A 10.22.1.100

kill-virus A 10.22.1.61 //IP 地址发生变化

slack9 A 10.22.1.123

以上测试说明同一台客户机 kill-virus 通过 DHCP 服务可以先后获得 IP 地址,并与动态 DNS 服


务器建立联系,使该客户机的主机名与获得的 IP 地址一同作为一条纪录动态地更新到正向区域文件中去。
可以采用同样的方法测试反向区域的更新,不再赘述。

2.用 Linux DHCP 客户端测试

在 Linux DHCP 客户端进行测试时,需要执行 dhcpcd 守护进程。如果要进行动态更新,还需要加


上-h 参数。执行的命令格式如下:
#dhcpcd -h MyLinux

其中-h 后面跟的是本机的主机名,用来通过 DHCP 服务注册到 DDNS 服务器的区域文件中,是进行


动态更新必不可少的。

动态更新后的区域数据库文件

通 过 查 看 正 向 区 域 数 据 库 文 件 /var/named/tcbuu.cn 和 反 向 区 域 数 据 库 文
件/var/named/tcbuu.cn,可以了解区域数据库文件到底更新了哪些内容。
#cat /var/named/tcbuu.cn
$ORIGIN .
$TTL 36000 ; 10 hours
tcbuu.cn IN SOA slack9.tcbuu.cn. root.slack9.tcbuu.cn. (
2004011402 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
36000 ; expire (10 hours)
36000 ; minimum (10 hours)
)
NS slack9.tcbuu.cn.
$ORIGIN tcbuu.cn.
dellpc A 10.22.1.100
ftp CNAME slack9
$TTL 300 ; 5 minutes
kill-virus A 10.22.1.61


oss.linuxpk.com 2009 年第 1 期 102

企业应用
TXT "3156e87eb0180675cfb5e3e8ad026e78b3"
$TTL 36000 ; 10 hours
slack9 A 10.22.1.123
www CNAME slack9

以上区域文件的书写格式与更新前相比变化较大,说明该文件已被更新过了。这里还要说明的是,
在动态更新的客户端 kill-virus 的 A 纪录下多了一条同名的 TXT 类型的纪录。TXT 类型纪录是 BIND-
DNS 和 DHCP 专门用来实现 DDNS 的辅助性资源纪录,它的值是哈希标示符字符串,该字符串的值还可以
在/var/state/dhcp/dhcpd.leases 文件中找到。

总的来说,在 Linux 下通过 DHCP 实现安全 DDNS 的过程可分为三步:第一,创建进行安全动态更


新的密钥;第二,修改 DNS 的主配置文件/etc/named.conf,目的是定义采用动态更新的密钥及指定
可以动态更新的区域;第三,修改 DHCP 的配置文件/etc/dhcpd.conf,目的是定义采用动态更新的密
钥及指定动态更新哪些区域。

实现 Linux 网络防火墙
敬茂华
防火墙作为一种网络或系统之间强制实行访问控制的机制,是确保网络安全的重要手段。针对不同
的需求和应用环境,可以量身定制出不同的防火墙系统。防火墙大到可由若干路由器和堡垒主机构成,
也可小到仅仅是网络操作系统上一个防火墙软件包所提供的包过滤功能。

在众多网络防火墙产品中,Linux 操作系统上的防火墙软件特点显著。首先是 Linux 操作系统作为


一个类 Unix 网络操作系统,在系统的稳定性、健壮性及价格的低廉性方面都独具优势。更为重要的是,
Linux 不但本身的源代码完全开放,而且系统包含了建立 Internet 网络环境所需要的所有服务软件包,
如 Apache Web 服务器、DNS 服务器、Mail 服务器、Database 服务器等。同样,基于 Linux 的防火
墙软件不但具有强大的功能,而且大部分都是开放软件。

随着 Internet 的飞速发展,安全问题越来越重要。利用 Linux 构建企业网深受中小企业的青睐,


而利用 Linux 构建企业网的防火墙系统也成为众多中小企业的理想选择。

Linux 内核从 1.1 版本开始,就已经具备包过滤功能。在 2.0 内核中,开始采用 Ipfwadm 来操作


内核的包过滤规则。到 2.2 版本时,Linux 内核采用了 Ipchains 来控制内核的包过滤规则。发展到
2.4.x 时,Ipchains 被一个全新的包过滤管理工具 Iptables 所替代。新发布的 2.6 版内核也在安全
方面进行了改进。因此,无论拥有哪个版本的 Linux 内核,无论选择哪个版本的 Linux 来构建自己的企
业网,都可以利用现有的系统构建出一个理想实用的防火墙。


oss.linuxpk.com 2009 年第 1 期 103

企业应用
防火墙系统可分为包过滤型、应用级网关(也叫代理服务器型防火墙)和电路级网关三种基本类型。
Linux 提供的防火墙软件包内置于 Linux 内核中,是一种基于包过滤型的防火墙实现技术。其中心思想
是根据网络层 IP 包头中的源地址、目的地址及包类型等信息来控制包的流向。更彻底的过滤则是检查包
中的源端口、目的端口以及连接状态等信息。

本文主要介绍 Linux 提供的 IPFW、Ipchains、Iptables 这三种非常实用的防火墙和具体实现。

IPFW 防火墙

IPFW 是比较老的 Linux 内核版本提供的防火墙软件包。该软件包的全称是 Ipfwadm。Ipfwadm 程


序包提供了建立规则的能力,根据这些规则来确定允许什么样的包进出本网络。简单说来,防火墙就是
一对开关,一个开关允许包通过,另一个开关禁止包通过。现代防火墙系统一般都会附加审计跟踪、加
密认证、地址伪装和 VPN 等多种功能。作为一个安全开关,防火墙可定义的安全策略有两个:

(1)一切未被允许的都被禁止;

(2)一切未被禁止的都被允许。

显然,策略 1 的安全性明显高于策略 2,但它是以牺牲灵活性和可访问资源为代价来提高安全性的。


Ipfwadm 系统同样提供 IP 封装,它允许用户使用 Internet 上的一个公共 IP 地址空间。

下面以 Red Hat 系统为例,说明 Linux 系统上 IPFW 防火墙的实现。

在 Red Hat 系统上(在其它系统上一样)安装 Ipfwadm 防火墙,需要以 root 用户登录,然后执


行如下命令:
#rpm -ivh /mnt/cdrom/RedHat/RPMS/ Ipfwadm-2.3.0-5.i386.rpm

在安装好 Ipfwadm 后,就可以交互方式指定 Ipfwadm 的包过滤规则。过滤规则对每一个进入系统


的 IP 包进行检查,从而决定哪些包允许通过防火墙,哪些包则禁止通过。 Ipfwadm 命令的一般格式为:

/sbin/ ipfwadm category commands parameters [options]

Ipchains(IP 链)和 IP 伪装

在更新版本的 Linux 内核中,Ipchains 替代 Ipfwadm,提供了更为严格的包过滤控制机制。


Ipchains 提供完整的防火墙功能,包括包过滤、地址伪装、透明代理。

Linux 2.2 内核中提供的 Ipchains,通过四类防火墙规则列表来提供防火墙规则控制,这些列表


称为防火墙链。它们分别是 IP input 链(IP 输入链)、IP output 链(IP 输出链)、IP forward
链(IP 转发链)和 user defined 链(用户定义链)。一个链实际上就是一个规则表。所谓规则,即
当被检测的包头符合规则的定义时,就按预先的设定对该包进行某种处理。输入链是指对内连接请求的
过滤规则;输出链是对外连接请求的过滤规则;转发链是对内部与外部通信包转发的过滤规则;用户定


oss.linuxpk.com 2009 年第 1 期 104

企业应用
义链是用户自己定义的规则。

当一个数据包进入 Linux 防火墙系统时,Linux 内核使用输入链决定对这个包的操作;如果这个包


不被丢弃,内核则使用转发链来决定是否将这个包转发到某个出口;当这个包到达一个出口被发出前,
内核使用输出链最后确定是丢弃该包还是转发该包。在上面的过程中,如果输入链已经决定处理这个包
则核心需要决定下一步包应该发到什么地方,即进行路由。假如此时该数据包是发到另一台主机的,则
核心就运用转发链;如果没找到匹配的设置,则这个包就需要进入目标值指定的下一条链,此时目标值
有可能是一条用户自定义链,也有可能是一个特定的值。例如:

ACCEPT 允许通过。

DENY 直接丢弃。

REJECT 丢弃并通过 ICMP 回复通知发送者包被丢弃。

MASQ 通知核心将该包伪装,该值只对转发链和用户自定义链起作用。

REDIRECT 通知核心将包改送到一个本地端口,该值只对输入链和用户自定义链起作用,并且只有
UDP 和 TCP 协议才可以使用该值。

RETURE 通知内核将该包跳过所有的规则,直接到达所有链的链尾。

在 Linux 系统 IP 链的转发链上可以配置 IP 伪装。实际上,IP 伪装是一个比包过滤策略更安全的


解决方案,它不仅能够提供一种安全机制,还同时解决了 Internet 中 IP 地址资源不足的问题。IP 伪
装使一台计算机在访问 Internet 时,能够将本台机器的真正 IP 地址伪装成其它地址。如果连接到
Internet 上的一台主机具有 IP 伪装功能,则这台机器不管是通过局域网,还是 PPP 拨号都可以与
Internet 连接。尽管在使用 PPP 时,这样的主机根本没有自己正式的 IP 地址。这说明可以将一台主机
隐藏在一个网关后面来访问 Internet,使得这台主机既实现了对 Internet 的访问,又实现了其访问
对外界的不可见性(即隐藏性)。显然,这种隐藏性使得系统非常安全,因为外界根本意识不到主机的
存在,也就不可能对主机实施存取操作,更不能入侵和破解。通常情况下,使用 IANA 保留的私有地址来
进行伪装。

在防火墙转发链配置 IP 伪装后,内部网络上的主机向 Internet 发送访问 IP 包时,内核将源 IP


地址换成网关的 IP 地址,并记录被伪装的 IP 地址后再转发该 IP 包。当这个包的 Internet 应答包从
Internet 进入网关时,内核执行去除 IP 伪装的操作,即将目的地址替换成内部地址。

通过适当的设置,IP 伪装可以在某个网段、某台主机、某个接口、某个协议甚至是某个协议的某些
端口上实现,非常灵活。IP 伪装可以将内部网络的细节对外部网络屏蔽掉,因此,IP 伪装提供了很好的
安全性。

一般来说,安装相应版本的 Linux 系统时,系统会自动将 Ipchains 安装上。如果系统没有安装


IP 链软件包,可以通过光盘或从网上下载软件包来安装。


oss.linuxpk.com 2009 年第 1 期 105

企业应用
如果是 rpm 包,使用如下命令安装:
#rpm -ivh *.rpm

如果是.tar.gz 包,则先需要将压缩包解压:
#tar xvfz *.tar.gz

然后再到解压后所在目录执行如下命令完成安装:
#./configure
#make
#make install

这样就将 IP 链防火墙成功安装在系统中。成功安装 Ipchains 后,接下来就是启动并配置包过滤规


则。启用 Ipchains 需要完成如下操作:

◆ 手工修改/proc/sys/net/ipv4/ipforward 文件,将其内容置为 1。

◆ 在/etc/rc.d/目录下用 touch 命令建立 rc.ipfwadm 文件。

◆ 在/etc/rc.d 目录下的 rc.local 文件中加上下面这段代码:

if [-f /etc/rc.ipfwadm];then /etc/rc.d/rc.ipfwadm;fi;

这使得以后所有 Ipchains 的配置命令都将在 rc.ipfwadm 文件里修改。

和 IPFW 一样,Ipchains 也是基于配置策略进行包过滤的。使用的策略方式也是两种:

(1)首先允许所有的包都可通过,然后禁止有危险的包;

(2)首先禁止所有的包,然后再根据所需要的服务允许特定的包通过。
Iptables

Iptables 是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格中的规则。实际
上真正来执行这些过滤规则的是 Netfilter 。Netfilter 是 Linux 核心中一个通用架构,它提供一
系列的表(tables),每个表由若干链(chains)组成,而每条链中可以由一条或数条规则(rule)
组成。

相对于 2.2 内核提供的 IP 链来说,2.4 内核提供了更好的灵活性和可扩展性。2.4 内核中的防火墙


并不是 2.2 内核的简单增强,而是一次完全的重新实现,2.4 内核提供的防火墙软件包在结构上发生了
非常大的变化。与 IP 链相比,2.4 内核提供的 Iptables 的检测点变成了 5 个,并在每个检测点上登记
需要处理的函数,登记通过 nf-register-hook()函数保存在全局变量 nf-hook 中来实现。当包到
达此检测点时,实现登记的函数按照事先定义好的优先级别来执行。相对于 2.2 内核提供的 IP 链来说,
Iptables 实现的不仅仅是包过滤功能,而是通过 Netfilter 实现一整套框架结构,在这个框架之上实
现包过滤、NAT 等模块功能,从而提供更好的可扩展性和灵活性。


oss.linuxpk.com 2009 年第 1 期 106

企业应用
系统缺省的表为 filter,该表包含了 INPUT 链(输入链)、FORWARD 链(转发链)和 OUTPUT 链
(输出链)。每一条链中可以定义一条或数条规则,每一条规则都以如下格式定义:条件/处理方式。

当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件。
如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足,则继续检查下一条规则。如
果该数据包不符合该链中任一条规则,系统则会根据该链预先定义的策略(policy)来处理该数据包。

和前面介绍的两个软件包一样,Iptables 及 Netfilter 也是内置在 Linux 内核中,可以将相应


的软件包编译到内核中,从而完成 Iptables 防火墙的安装。Netfilter 框架能够在内核 2.3.5 及以
上版本实现。在将软件包重新编译进内核时,要求选择和 Netfilter 相关的项目。这些项目通常都是位
于“Networking options”子项下。以 2.4.0 内核为例,应该选中的项目有:
[*] Kernel/User netlink socket
[ ] Routing messages
<*> Netlink device emulation
[*] Network packet filtering (replaces ipchains)

在“IP: Netfilter Configuration ---->”选中如下选项:


<M> Connection tracking (required for masq/NAT)
<M> FTP protocol support
<M> IP tables support (required for filtering/masq/NAT)
<M > limit match support
<M> MAC address match support
<M> Netfilter MARK match support
<M> Multiple port match support
<M> TOS match support
<M> Connection state match support
<M> Packet filtering
<M> REJECT target support
<M> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<M> Packet mangling
<M> TOS target support
<M> MARK target support
<M> LOG target support
<M> ipchains (2.2-style) support
<M> ipfwadm (2.0-style) support


oss.linuxpk.com 2009 年第 1 期 107

企业应用
上面最后两个项目可以不选,如果将其选中,则可以在 2.4 内核中使用 Ipchains 或 Ipfwadm。需
要注意的是,Iptables 和 Ipchains/Ipfwadm 是相对立的,在使用 Iptables 时就不能同时使用
Ipchains/Ipfwadm。选择完所需选项后,就可以执行编译操作了。编译成功后,这些模块文件都位于
目录/lib/modules/2.4.0/kernel/net/ipv4/netfilter 中。

编译 2.4.0 新内核时还应该注意,要在“Processor type and features”中选择与所用 CPU


相对应的、正确的 CPU 选项,否则新内核可能无法正常工作。

成功安装 Iptables 后,不能直接使用 Iptables,还必须载入相关模块。使用以下命令载入相关


模块:
#modprobe iptable_tables

modprobe 命令会自动载入指定模块及其相关模块。iptables_filter 模块会在运行时自动载入。

Iptables 实际上是一个操作过滤规则的工具。利用 Iptables 工具,可以对 Netfilter 中的链


和规则进行操作。Iptables 使用与 IP 链基本相同的语法和命令格式。除了对链和规则进行操作外 ,
Iptables 还 提 供 其 它 一 些 操 作 。 如 通 过 --source/--src/-s 指 定 源 地 址 ; 通 过 --
destination/--dst/-s 指定目的地址;通过--protocol/-p 选项指定协议,比如-p tcp;使用--
in-interface/-i 或--out-interface/-o)指定网络接口;指定 IP 碎片等。这里不一一介绍相关
语法。读者可以从 HOWTO 文档获得相关内容。


oss.linuxpk.com 2009 年第 1 期 108

嵌入式

开源嵌入式数据库 Berkeley DB
肖文鹏
像 MySQL 这类基于 C/S 结构的关系型数据库系统虽然代表着目前数据库应用的主流,但却并不能满
足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可
以避免安装庞大的数据库服务器,而且还可以简化数据库应用程序的设计。Berkeley DB 正是基于这样
的思想提出来的。

Berkeley DB 简介

Berkeley DB 是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理
服务。应用它程序员只需要调用一些简单的 API 就可以完成对数据的访问和管理。与常用的数据库管理
系统(如 MySQL 和 Oracle 等)有所不同,在 Berkeley DB 中并没有数据库服务器的概念。应用程序
不需要事先同数据库服务建立起网络连接,而是通过内嵌在程序中的 Berkeley DB 函数库来完成对数
据的保存、查询、修改和删除等操作。

Berkeley DB 为许多编程语言提供了实用的 API 接口,包括 C、C++、Java、Perl、Tcl、


Python 和 PHP 等。所有同数据库相关的操作都由 Berkeley DB 函数库负责统一完成。这样无论是系
统中的多个进程,或者是相同进程中的多个线程,都可以在同一时间调用访问数据库的函数。而底层的
数据加锁、事务日志和存储管理等都在 Berkeley DB 函数库中实现。它们对应用程序来讲是完全透明
的。俗话说:“麻雀虽小五脏俱全。”Berkeley DB 函数库本身虽然只有 300KB 左右,但却能够用来
管理多达 256TB 的数据,并且在许多方面的性能还能够同商业级的数据库系统相抗衡。就拿对数据的并
发操作来说,Berkeley DB 能够很轻松地应付几千个用户同时访问同一个数据库的情况。此外,如果想
在资源受限的嵌入式系统上进行数据库管理,Berkeley DB 可能就是惟一正确的选择了。

Berkeley DB 作为一种嵌入式数据库系统在许多方面有着独特的优势。首先,由于其应用程序和数
据库管理系统运行在相同的进程空间当中,进行数据操作时可以避免繁琐的进程间通信,因此耗费在通
信上的开销自然也就降低到了极低程度。其次,Berkeley DB 使用简单的函数调用接口来完成所有的数
据库操作,而不是在数据库系统中经常用到的 SQL 语言。这样就避免了对结构化查询语言进行解析和处
理所需的开销。

基本概念

Berkeley DB 简化了数据库的操作模式,同时引入了一些新的基本概念,从而使得访问和管理数据
库变得相对简单起来。在使用 Berkeley DB 提供的函数库编写数据库应用程序之前,有必要先了解以
下这些基本概念。


oss.linuxpk.com 2009 年第 1 期 109

嵌入式
关键字和数据

关键字(Key)和数据(Data)是 Berkeley DB 用来进行数据库管理的基础,由这两者构成的


Key/Data 对组成了数据库中的一个基本结构单元,而整个数据库实际上就是由许多这样的结构单元所
构成的。通过使用这种方式,开发人员在使用 Berkeley DB 提供的 API 来访问数据库时,只需提供关
键字就能够访问到相应的数据。

如 果 想 将 第 一 行 中 的 “ sport” 和 “ football” 保 存 到 Berkeley DB 数 据 库 中 , 可 以 调 用


Berkeley DB 函数库提供的数据保存接口。此时“sport”和“football”将分别当成关键字和数据来
看待。之后如果需要从数据库中检索出该数据,可以用“sport”作为关键字进行查询。此时 Berkeley
DB 提供的接口函数会返回与之对应的数据“football”。

关键字和数据在 Berkeley DB 中都是用一个名为 DBT 的简单结构来表示的。实际上两者都可以是


任意长度的二进制数据,而 DBT 的作用主要是保存相应的内存地址及其长度,其结构如下所示:
typedef struct {

void *data;

u_int32_t size;

u_int32_t ulen;

u_int32_t dlen;

u_int32_t doff;

u_int32_t flags;
} DBT;

在使用 Berkeley DB 进行数据管理时,缺省情况下是一个关键字对应于一个数据,但事实上也可


以将数据库配置成一个关键字对应于多个数据。

对象句柄

在 Berkeley DB 函数库定义的大多数函数都遵循同样的调用原则:首先创建某个结构,然后再调
用该结构中的某些方法。从程序设计的角度来讲,这一点同面向对象的设计原则是非常类似的,即先创
建某个对象的一个实例,然后再调用该实例的某些方法。正因如此,Berkeley DB 引入了对象句柄的概
念来表示实例化后的结构,并且将结构中的成员函数称为该句柄的方法。

对象句柄的引入使得程序员能够完全凭借面向对象的思想,来完成对 Berkeley DB 数据库的访问


和操作,即使当前使用的是像 C 这样的结构化语言。例如,对于打开数据库的操作来说,可以调用 DB 的
对象句柄所提供的 open 函数,其原型如下所示:
int DB->open(DB *db, DB_TXN *txnid, const char *file, const char


oss.linuxpk.com 2009 年第 1 期 110

嵌入式
*database, DBTYPE type, u_int32_t flags, int mode);

错误处理

对于任何一个函数库来说,如何对错误进行统一的处理都是需要考虑的问题。Berkeley DB 提供的
所有函数都遵循同样的错误处理原则,即函数成功执行后返回零,否则的话则返回非零值。

对于系统错误(如磁盘空间不足和访问权限不够等),返回的是一个标准的值;而对于非系统错误,
返回的则是一个特定的错误编码。例如,如果在数据库中没有与某个特定关键字所对应的数据,那么在
通过该关键字检索数据时就会出现错误。此时函数的返回值将是 DB_NOTFOUND,表示所请求的关键字并
没有在数据库中出现。所有标准的 errno 值都是大于零的,而由 Berkeley DB 定义的特殊错误编码则
都是小于零的。

要求程序员记住所有的错误代号既不现实也没有什么实际意义,因为 Berkeley DB 提供了相应的


函数来获得错误代号所对应的错误描述。一旦有错误发生,只需首先调用 db_strerror()函数来获得
错误描述信息,然后再调用 DB->err()或 DB->errx()就可以很轻松地输出格式化后的错误信息。

应用统一的编程接口

使用 Berkeley DB 提供的函数来进行数据库的访问和管理并不复杂,在大多数场合下只需按照统
一的接口标准进行调用就可以完成最基本的操作。

打开数据库

打开数据库通常要分两步进行:首先调用 db_create()函数来创建 DB 结构的一个实例,然后再调


用 DB->open()函数来完成真正的打开操作。Berkeley DB 将所有对数据库的操作都封装在名为 DB 的
结构中。db_create()函数的作用就是创建一个该结构,其原型如下所示:
typedef struct__db DB;
int db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags);

将磁盘上保存的文件作为数据库打开是由 DB->open()函数来完成的,其原型如下所示:
int DB->open(DB *db, DB_TXN *txnid, const char *file, const char
*database, DBTYPE type, u_int32_t flags, int mode);

下面这段代码示范了如何创建 DB 对象句柄及如何打开数据库文件:
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
#define DATABASE "demo.db"


oss.linuxpk.com 2009 年第 1 期 111

嵌入式
/* 以下程序代码的程序头同此*/
int main()
{ DB *dbp;
int ret;
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
if ((ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE,
0664)) != 0) {
dbp->err(dbp, ret, "%s", DATABASE);
exit (1);
}
}

代码首先调用 db_create()函数来创建一个 DB 对象句柄。变量 dbp 在调用成功后将成为数据库句


柄,通过它可以完成对底层数据库的配置或访问。接下去调用 DB->open()函数打开数据库文件,参数
“DATABASE”指明对应的磁盘文件名为 demo.db;参数“DB_BTREE”表示数据库底层使用的数据结构
是 B 树;而参数“DB_CREATE”和“0664”则表明当数据库文件不存在时创建一个新的数据库文件,并
且将该文件的属性值设置为 0664。

错误处理是在打开数据库时必须的例行检查,这可以通过调用 DB->err()函数来完成。其中参数
“ret”是在调用 Berkeley DB 函数后返回的错误代码,其余参数则用于显示结构化的错误信息。

添加数据

向 Berkeley DB 数据库中添加数据可以通过调用 DB->put()函数来完成,其原型如下所示:


int DB->put(DB *db, DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);

下面这段代码示范了如何向数据库中添加新的数据:
int main()
{ DB *dbp;
DBT key, data;
int ret;
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}


oss.linuxpk.com 2009 年第 1 期 112

嵌入式
if ((ret = dbp->open(dbp,
NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s", DATABASE);
exit (1);
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "sport";
key.size = sizeof("sport");
data.data = "football";
data.size = sizeof("football");
if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) == 0)
printf("db: %s: key stored.\n", (char *)key.data);
else
dbp->err(dbp, ret, "DB->put");
}

代码首先声明了两个 DBT 结构变量,并分别用字符串“sport”和“football”进行填充。它们随


后作为关键字和数据传递给用来添加数据的 DB->put()函数。DBT 结构几乎会在所有同数据访问相关的
函数中被用到。

在向数据库中添加数据时,如果给定的关键字已经存在,大多数应用会对于已经存在的数据采用覆
盖原则。也就是说,如果数据库中已经保存了一个“sport/basketball”对,再次调用 DB->put()函
数添加一个“sport/football”对,那么先前保存的那些数据将会被覆盖。但 Berkeley DB 允许在
调用 DB->put()函数时指定参数“DB_NOOVERWRITE”,声明不对数据库中已经存在的数据进行覆盖,
其代码如下:
if ((ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) == 0)
printf("db: %s: key stored.\n", (char *)key.data);
else
dbp->err(dbp, ret, "DB->put");

一旦给出“DB_NOOVERWRITE”标记,如果 DB->put()函数在执行过程中发现给出的关键字在数据
库 中 已 经 存 在 了 , 就 无 法 成 功 地 把 该 Key/Data 对 添 加 到 数 据 库 中 , 于 是 将 返 回 错 误 代 号
“DB_KEYEXIST”。

检索数据

从 Berkeley DB 数据库中检索数据可以通过调用 DB->get()函数来完成,其原型如下所示:


oss.linuxpk.com 2009 年第 1 期 113

嵌入式
int DB->get(DB *db, DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);

下面这段代码示范了如何从数据库中检索出所需的数据:
int main()
{ DB *dbp;
DBT key, data;
int ret;
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
if ((ret = dbp->open(dbp,
NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s", DATABASE);
exit (1);
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "sport";
key.size = sizeof("sport");
if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0)
printf("db: %s: key retrieved: data was %s.\n",
(char *)key.data, (char *)data.data);
else
dbp->err(dbp, ret, "DB->get");
}

代码同样声明了两个 DBT 结构变量,并且调用 memset()函数对它们的内容清空。虽然 Berkeley


DB 并不强制要求在进行数据操作之前先清空它们,但出于提高代码质量考虑还是建议先进行清空操作。
在进行数据检索时,对 DB->get()函数的返回值进行处理是必不可少的,因为它携带着检索操作是否成
功完成等信息。下面列出的是 DB->get()函数的返回值:

◆0 函数调用成功,指定的关键字被找到;

◆ DB_NOTFOUND 函数调用成功,但指定的关键字未被找到;

◆大于 0 函数调用失败,可能出现了系统错误。


oss.linuxpk.com 2009 年第 1 期 114

嵌入式

删除数据

从 Berkeley DB 数据库中删除数据可以通过调用 DB->del()函数来完成,其原型如下所示:


int DB->del(DB *db, DB_TXN *txnid, DBT *key, u_int32_t flags);

下面这段代码示范了如何从数据库中删除数据:
int main()
{ DB *dbp;
DBT key;
int ret;
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
if ((ret = dbp->open(dbp,
NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s", DATABASE);
exit (1);
}
memset(&key, 0, sizeof(key));
key.data = "sport";
key.size = sizeof("sport");
if ((ret = dbp->del(dbp, NULL, &key, 0)) == 0)
printf("db: %s: key was deleted.\n", (char *)key.data);
else
dbp->err(dbp, ret, "DB->del");
}

删除数据只需给出相应的关键字,不用指明与之对应的数据。

关闭数据库

对于一次完整的数据库操作过程来说,关闭数据库是不可或缺的一个环节。这是因为 Berkeley DB
需要依赖于系统底层的缓冲机制,也就是说只有在数据库正常关闭的时候,修改后的数据才有可能全部


oss.linuxpk.com 2009 年第 1 期 115

嵌入式
写到磁盘上,同时它所占用的资源也才能真正被全部释放。关闭数据库的操作是通过调用 DB->close()
函数来完成的,其原型如下所示:
int DB->close(DB *db, u_int32_t flags);

下面这段代码示范了如何在需要的时候关闭数据库:
int main()
{ DB *dbp;
DBT key, data;
int ret, t_ret;
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
if ((ret = dbp->open(dbp,
NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s", DATABASE);
goto err;
}
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = "sport";
key.size = sizeof("sport");
if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0)
printf("db: %s: key retrieved: data was %s.\n",
(char *)key.data, (char *)data.data);
else
dbp->err(dbp, ret, "DB->get");
if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
ret = t_ret;
exit(ret);
}

小结

Berkeley DB 这个嵌入式数据库系统使用非常简单。它没有数据库服务器的概念,也不需要复杂的
SQL 语句,所有对数据的操作和管理都可以通过函数调用来完成,非常适合于那些需要对数据进行简单
管理的应用场合。


oss.linuxpk.com 2009 年第 1 期 116

嵌入式

开发利器 DevRocket
晓芳
嵌入式系统是一种特定的计算机系统,它可以提供专用的功能。虽然针对嵌入式系统是否要使用一
种操作系统的传统争论仍在继续,但是操作系统为嵌入式系统提供了基本的服务层,能在很大程度上简
化嵌入式应用程序开发者的工作;并且,在嵌入式设备必须使用因特网协议进行通信的时候,如果不使
用操作系统或核心层是非常难于实现通信的。

不管怎样,Linux 以其无与伦比的优势早已成为嵌入式操作系统中的佼佼者。

最近,业界领先的嵌入式 Linux 解决方案供应商 MontaVista 软件公司发布了该公司下一代嵌入式


操作系统及开发平台的新版本—MontaVista Linux Professional Edition 3.1(“Pro”)。
MontaVista 公司新的嵌入式 Linux 产品增加了新的 Eclipse 工具、对 Windows 宿主平台的支持和其
它一些新功能。这些新功能是非常引人入胜的。

MontaVista Linux Professional Edition 3.1 的主要新功能有:

◆ DevRocket 这是一套基于 Eclipse 技术的集成式图形开发环境;

◆ 除 Linux 和 Solaris 系统外,增加了对 Windows 宿主平台的支持;

◆ 新版本还进行了内核系统组件更新。

上述新功能使得设备制造商能够从新版本增强的开发环境在实时处理和网络技术方面的改进中获益。

一、主要功能
基于 Eclipse 2.1 的 DevRocket 可在 Linux、Windows 和 Solaris 平台上运行,它也可运行
在任何支持 Java 的平台上。它可以用于 Pro 版本支持的 30 个目标处理器体系结构及工具链的不同变化。

二、新点所在
据 MontaVista 公 司 介 绍 , DevRocket 集 成 和 简 化 了 汇 编 、 编 辑 、 调 试 及 修 改 控 制 , 而 且
MontaVista 工具具有与其它厂商的基于 Eclipse 技术工具的互操作性。运用 DevRocket 方便的工程
“向导”,开发者能够配置和建立易于部署的平台映射。对于熟悉 MontaVista 工具的使用者来说,
DevRocket 淘汰了原来的“目标配置系统”,提供了工程向导用于自动配置关键工程任务,例如:


oss.linuxpk.com 2009 年第 1 期 117

嵌入式
◆ 调整应用大小和 de-crufting libraries;

◆ 预连接(Prelinking)应用以增强执行性能;

◆ 跟踪和分析系统事件;

◆ 查找和补救内存漏洞。

此外,一套 C 语言开发工具(CDT)插件提供了核心的 IDE 功能,例如编辑、编译、调试和 CVS 集


成。

MontaVista 公司认为 Eclipse 技术是嵌入式工业领域的基本力量,在非耦合技术方面有与


Linux 不同的影响力。许多公司采用自己的技术开发一个完整的环境,但使用 Eclipse 技术,将会获得
数以万计的用户和其它诸多利益。Eclipse 技术现在是集成开发环境解决方案的工业标准。

Eclipse 技术得到诸多公司及嵌入式开发商的拥护。Timesys、QNX、Rational、Borland、
IBM 和其它一些公司发行了基于 Eclipse 技术的工具。MontaVista 公司的 CEO James Ready 曾经
在 eclipse.org 委员会工作了一年多。

MontaVista 希望顾客使用 DevRocket 建立从内核到中间件和应用在内的所有环境。现在,许多


第三方开发工具都在致力于开发集成 Eclipse 和 DevRocket 的工具。

三、对 Windows 宿主平台的支持


Pro 3.1 版本的另一个新功能是它能在运行 Windows XP 和 Windows 2000 的工作站上开发。
MontaVista 认为该新功能具有重大意义,Windows 宿主机支持 MontaVista 公司完整的网络化交叉
开发模型,包括嵌入式 Linux 文件系统、设备网点和目标映射的建立。

四、其它功能
Pro 3.1 版本由 250 个软件包组成,包括基于宿主和目标的软件包。最新的 GNU 工具链基于 GDB
6.0 和 GCC 3.3。

Pro 3.1 版本使用了 2.4.20 版本的 Linux 内核,同时包括了许多 MontaVista 公司的技术增强,


以及将与 2.6 内核版本一起成为标准的许多组件。在 2.6 版本的 Linux 内核得到更好的测试后,再将其
合并到 MontaVista 公司的产品中。

另外,Pro 3.1 版本新功能中还包括对 IPv6 的增强的支持和对 VLAN 配置的支持。Pro 3.1 版本


还集成了包括高精度 POSIX 计时器、O(1)实时调度表和 Fully Preemptible Kernel 的增强实时能
力。


oss.linuxpk.com 2009 年第 1 期 118

嵌入式
五、大量的目标支持
据 MontaVista 介绍,Pro 3.1 可以支持超过 30 个基于八个处理器体系结构的“平台”。 由于不
同处理器的特殊要求,Pro3.1 有 30 个不同的版本,Pro3.1 能支持 100 个插件板,其中 20 个是 3.1
版新增的。MontaVista Linux Professional Edition 3.1 建立在简单的集成资源代码的基础上,
广泛支持工业领域的诸多目标硬件。Pro 由在每一种支持的系统上进行过完整测试与设置的、二进制代
码的、复杂的嵌入式操作系统组成。完整的字源代码还包括交叉及本机的开发工具,使开发者可以方便
地进行定制。

六、开发与调试
在嵌入式 Linux 开发过程中,选择好的嵌入式 Linux 开发平台和调试工具可以极大地提高嵌入式
Linux 开 发 效 率 。 嵌 入 式 系 统 的 特 点 是 系 统 资 源 小 , 因 此 具 体 目 标 板 的 设 备 驱 动 程 序 ( Device
Driver)需要定制。调试工具是开发 Linux 内核很好的手段。

为了缩短应用产品开发周期,可以选择同应用产品相近的嵌入式 Linux 软件开发平台和带嵌入式


Linux 软件的 OEM 板。它可以帮助用户在应用项目立项前,评估项目的可行性;在应用项目立项后,使
软件开发和硬件开发同步进行。它能极大地缩短应用产品开发周期。


oss.linuxpk.com 2009 年第 1 期 119

编读往来

Linuxpk.com 十二月十大热门帖

百度 Hi 在 Linux 下的使用
http://bbs.linuxpk.com/thread-36649-1-1.html

ubuntu 无法修改分辨率
http://bbs.linuxpk.com/thread-36738-1-1.html

晒 3D 桌面
http://bbs.linuxpk.com/thread-36777-1-1.html

如何修改系统显示语言
http://bbs.linuxpk.com/thread-36565-1-1.html

问一个域名的问题--强烈要求站长来回答
http://bbs.linuxpk.com/thread-36726-1-1.html

我说 PHPer 的水平区分
http://bbs.linuxpk.com/thread-36548-1-1.html

急求:木马源代码
http://bbs.linuxpk.com/thread-36616-1-1.html

Linux 源代码的一个小小问题
http://bbs.linuxpk.com/thread-36544-1-1.html

linux 下哪种版本的 MSN 比较受欢迎


http://bbs.linuxpk.com/thread-36572-1-1.html

硬件很便宜,程序员很昂贵
http://bbs.linuxpk.com/thread-36701-1-1.html


oss.linuxpk.com 源 2009 年第 1 期 120
封底