Professional Documents
Culture Documents
卷首语
关于《开源》
2008 年,《开源》创刊了,这个在我们脑中酝酿了五年之久的开源电子杂志终于蹒跚
地走到了大家的面前。
5 年,作为一个时间段,能改变很多的东西,曾经听一个人生规划师讲解过,对于人
生的理想,应该以 5 年作为一个时间段划分,逐步实现。
《开源》这本电子杂志也迈过了设
想之初的 5 年,完成了一次跳跃。而 5 年时间的沉淀,也是希望《开源》这本电子杂志一
经推出,无论面临多大的困难,也要顽强地存活下去。
5 年前,开源在我国刚刚兴起不久,那时对于开源的概念更多的等同于 Linux,而 Linux
更多的作为一些专业人士手中的“玩物”,大家乐此不疲地玩赏着这个新鲜的东西,在小范
围进行着交流、讨论、推广。
5 年的时间过去了,开源已经深入人心,对于开源,人们的理解不只局限于 Linux,而
更多优秀的开源项目(MySQL、Apache)也得到了广泛的应用,开源已经构成了一条完整
的生态链,完全覆盖了从底层的操作系统、中间件,到上层的应用软件、Office、ERP 等
范围,从 IT 环境搭建到 IT 运维,已经提供了更多的开源选择。
Intel、Sun、IBM、Google、Oracle 等厂商不同程度地对开源给予了支持,红帽、红旗
等开源厂商不断的发展壮大起来,甚至曾经开源的死对头微软也开始频繁的与开源接触,
寻求与开源社区、开源项目的合作机会。在这样的一个时机,我们认为《开源》这本电子
杂志是时候该与大家见面了。
我们将《开源》定位在关注开源产业的发展、推动开源项目的进展、促进开源应用水
平的提高,受众群体将从开源产业的决策人员向下覆盖到开源应用的初学者。对于办刊思
路,我们本着开放的思想,希望接纳来自各方的意见,群策群力,同时承诺该电子杂志永
远免费阅读。
《开源》本着实用的原则,目前划分了七个栏目,第一个栏目是产业聚集,其中包括
两块内容,第一是资讯,对于发展得如火如荼的开源领域,一月的时间会发生很多很多的
事件,而这个栏目将对一月的新闻有个采集汇总,而第二块内容则是对一些热点事件的深
度或持续的关注,或者评论,或者报道,使读者能清晰地理清开源领域发展脉络。
第二个栏目是博客文摘,作为 Web 2.0 的代表作,博客已经越来越深入得影响了我们
的生活,博客开放的思想与开源多少有着一脉相承的味道。这个栏目我们将选取一些开源
领域重量级人物的博客,做成文摘的形式,使读者在了解开源动态的前提下,更多地了解
到一些前沿的观点。
开源社区是开源的灵魂,这样的观点得到了大家的公认。第三个栏目就将完全关注开
源社区,其中会有从社区走出的开源项目的一些最新动态的报道,对于一些优秀的开源项
目,也将以科普的形式进行详细的介绍。同时,对于我们开源社区的一些活动,开源社区
的一些新技术,来自开源社区的议论都将在这个栏目呈现给大家。
知识学堂这个栏目主要普及开源的知识、文化,以及一些大家都关注的开源应用。以
讲座和连载的形式让大家都深入的了解开源文化,对于一些长篇的开源应用讲座,也将在
这个栏目进行体现,这类讲座将包括基础的命令讲解到高级的内核解读。
桌面应用将介绍来自桌面的新产品、新工具、新应用,以及各式各样的应用技巧。同
时会对桌面软件进行评测和试用报告,刚刚迈进开源应用大门的初学者能从这里获得足够
的信心,完全地玩转开源的各种应用。
企业级应用则将推出企业级的新产品、新方案,同时对运用开源软件进行 IT 环境搭建
和运维进行指导,介绍能满足于企业级应用的优秀开源项目,对于复杂 IT 环境应用中的各
种问题也将进行讨论,这个栏目的宗旨一句话可以概括:
“自从用了开源企业级软件,我们
明显感觉更省钱了。”
混源新视界则是我们推出的一个战略性的栏目,在开源与商业越来越紧密的今天,混
源应用得到了广泛的发展。目前的 IT 环境,很少有纯开源或者纯闭源的软件,开源与传统
的商业软件更多的是融合在一起,协同工作。对于混源这个概念,微软也有着自己的解释,
那就是异构环境,无论是混源还是异构,毕竟是未来的趋势,趋势性的东西就是值得我们
关注的东西,昨天经典的“LAMP”架构到了今天又延伸出了“WAMP”架构,这都是来
自混源的魔力,而受益的都是最终用户。
七个栏目组成了我们第一期电子杂志,
《开源》这本电子杂志就如同当年那个笨拙的小
企鹅,需要更多的人关注和支持,需要更悉心的照料,它才能存活下来,才能健康的成长
起来。第一期杂志难免有诸多不尽人意的地方,也希望大家将更多的意见反馈给我们,我
们将尽力将这本开源领域惟一的电子杂志办的更好。
目前编辑部正在筹建阶段,希望有兴趣的朋友可以和我们取得联系,我们希望与众多
的开源朋友一起,以开源理想为指导思想,为开源社区、开源领域提供一份永久的免费杂
志。对于七个栏目的划分,我也进行了简单的介绍,有针对这七个栏目的优秀稿件,希望
大家踊跃投稿。
今天,我们出发了,我们不希望收回迈出的步伐,也不希望一步迈进大坑里。一本持
续的、关注开源的、永远免费的电子杂志,这是我们的愿景,也是我们的奋斗目标。
《开源》 版权页
2008 年 1 月 第一期
主办:Linux 宝库
网址:http://www.linuxpk.com
总编:陈杰
副总编:陈绪
编辑部:曹金成
校验排版:邱风
封面设计:红动中国 www.redocn.com
投稿邮箱:opensource@linuxpk.com
声明:杂志部分内容来自开源社区及互联网,目的是加强开源文化交流及开源
应用传播,如有版权问题,敬请联系,我们将在第一时间作出处理。
目录
卷首语:关于《开源》 ························· 1
《开源》版权页 ·························· 3
产业聚焦 ····························· 6
资讯······························································································································································6
Linux手机Rokr E8 闪亮CES················································································································ 6
Sun推基于Xen的虚拟平台 ·················································································································· 6
IBM发布开源邮件搜索工具················································································································ 6
KDE 4.0 正式发布 ······························································································································· 7
奇趣加盟LiMo基金会·························································································································· 7
U盘型Linux防火墙问世 ······················································································································ 8
OpenMoko升级硬件平台····················································································································· 8
Asianux走出新模式 ···································································································································9
博客文摘 ···························· 12
促开源与微软互操作性互动来谋求共赢·······························································································12
2007 年:茁壮成长的Linux····················································································································14
更多选择不等于更多标准 ·······················································································································15
开源盈利模式探讨 ···································································································································17
开源社区 ···························· 19
项目动态····················································································································································19
Ubuntu 8.04 Alpha 3 近日发布······································································································· 19
开源的编辑器Notepad++ 4.7.1 发布 ····························································································· 20
软件包管理器RPM 5.0.0 发布······································································································· 20
phpMyAdmin 2.11.4-rc1 发布 ········································································································ 20
开源模拟器QEMU 0.9.1 发布 ······································································································· 21
PCLinuxOS 2008 MiniMe发布······································································································· 21
图像软件Paint.NET 3.22 Beta2 发布 ····························································································· 21
Python维基系统MoinMoin·····················································································································22
KVM开发者大会归来 ·····························································································································26
开源与SaaS ···············································································································································29
知识学堂 ···························· 34
Linux系统管理员进阶【之一】·············································································································34
用Unix思维思考 ···························································································································· 34
桌面应用 ···························· 49
Linux下软件的安装与卸载·····················································································································50
二进制分发软件包的安装与卸载 ································································································· 51
源代码分发软件包的安装与卸载 ································································································· 52
GRUB引导故障排除································································································································53
Linux下的多媒体软件 ·····························································································································55
Openserver启动盘制作 ···························································································································57
企业应用 ···························· 58
FreeNAS构建企业存储系统 ···················································································································58
构建LVS集群系统 ····································································································································64
LVS三种模式 ································································································································· 65
LVS集群系统环境 ························································································································· 67
混源新世界 ··························· 71
微软与开源的故事 ···································································································································71
探讨“混源应用”发展之道 ···················································································································77
产业聚焦
资讯
Linux手机Rokr E8 闪亮CES
Sun推基于Xen的虚拟平台
IBM发布开源邮件搜索工具
奇趣加盟LiMo基金会
科技软件的已交付的设备已经超过上千万部。
奇趣科技将为 LiMo 软件栈提供战略组件,该软件栈实现了将在线服务与本地移动应
用集成在一起的重大突破。这不仅将加速推出符合 LiMo 标准的设备,还将有助于运营商
们构建新型的创收服务体系构架。
U盘型Linux防火墙问世
OpenMoko升级硬件平台
Asianux走出新模式
陈 杰
Asianux 落地
克都用着大量的开源软件,我在微软总部见到了比尔盖茨,我就问他,微软家门口的企业
都用着开源软件,说明微软也不是不可替代的吧。
”陆首群分享的这个小故事告诉大家,开
源的发展非常的迅速,同时,微软也不是不可取代的。
作为中科红旗软件技术有限公司总裁,贾栋一直致力于推动 Asianux 联盟的发展,同
时他也将出任无锡亚联的董事长兼总裁,在谈到无锡亚联的成立,兴奋之情溢于言表:
“无
锡亚联落户无锡,得到了无锡市委市政府、崇安区委区政府的鼎力支持。公司由中、日、
韩各国最具实力的 Linux 厂
商投资组建,具有强大的技
术和市场基础。我相信,通
过 亚 联开 源合 资 公司 的实
体,加强 Asianux 联盟在开
发、市场、服务上的力量,
让 Asianux 持续滚动发展,
发挥规模效应,让亚洲广大
的企业、政府和个人用户享
受到开放统一平台带来的品
质和价值。”
而作为无锡亚联的一分子,日本 Miracle Linux 公司总裁,无锡亚联开源软件技术有限
公司副董事长 Takeshi Sato 也表示,Asianux 由中、日、韩三家公司联合成立,并定位于亚
太及世界开源市场。三家公司有超过三年合作开发 Asianux 的经验,并成功的由服务器市
场扩展至移动领域。Asianux 公司的成立进一步加强了我们与全球 IHV 及 ISV 们的合作关
系。Asianux 产品能够得到更多全球厂商更广泛的软、硬件产品的支持认证。三家公司联
合成立新的合资公司,也使得三家公司之间的合作更加紧密,我们将为用户提供具有更加
优秀的稳定性、可靠性及可服务性的产品,并广泛满足中小企业市场到关键业务市场的所
有需求。
联盟模式能走多远
在开源领域,产业联盟、企业联盟都已经不是新鲜事了。在中国,开源软件推进联盟
和 Linux 产业战略联盟就不同程度地推进了开源在我国的发展,到了今天,开源软件推进
联盟也在开源领域发挥着越来越重要的作用。但作为以联盟的形式成立合资企业,无锡亚
联可以称得上是第一个吃螃蟹的人。
作为一种新的模式,能持续多久自然是大家关心的话题。Asianux 商业模式为联合开
发、联合品牌和联合服务,致力于在亚太地区通过深入合作建立一个统一 Linux 平台。并
且在技术层面上,吸纳不同企业的长处就行统一的整合,打造出一个集众人之所长的品牌。
贾栋介绍到:
“Asianux 商业模式是大家互惠互利的,大家贡献自己的优势,打造一个知名
的品牌,这对于作为单一的企业是很难办到的。在市场策略方面,因为各国的需求都非常
的大,我们只需要做好自己国内的市场,满足国内的需求就可以了,所以,这样的模式更
多的是合作,而不存在竞争的关系。
”
而除了已经推出的 Asianux Server 以外,Asianux 通过与 Intel 的合作,推出了世界上
第一个针对 Intel MID(移动互联网设备)的产品系列——Asianux Mobile Midinux。它具有
让任何消费者轻松驾驭的界面、丰富的多媒体和互联网应用,并能满足个性化的定制需求。
为介于笔记本和智能手机之间的移动消费类电子设备提供完备的移动操作系统。目前,已
经有包括日立,明基,联想等多家国际一流的硬件厂商开始和 Asianux Mobile 进行合作,
并已经达成了 MID 领域的 Linux 操作系统 OEM 合作和联合研发项目。Asianux Mobile 将
成为继服务器之后的 Asianux 公司的又一个主要增长点。由于亚洲人口众多,经济发展迅
速,消费类电子产品市场巨大,移动操作系统将给 Asianux 公司带来非常可观的软件出口
收入。
Asianux Mobile Midinux 项目的部分研发工作也将放在无锡亚联,将成立全新的团队对
部分功能进行新的研发,对于这个可能成为 Linux 下一个机会的产品,其意义也是重大的,
它可能扭转桌面操作系统一直止步不前的窘境。据悉,MID 设备也将是 Intel 最为主要推
动的一个设备,Intel 高层在最近一段时间的空开场合也不同程度的提到了 MID 设备。
对于此次无锡亚联的成立,英特尔公司开源软件技术中心总监 Ram Peddibhotla 表示,
“多年来,我们同 Asianux 的成员 RedFlag、Miracle Linux、Haansoft 公司一直在紧密合作,
共同研发拓展诸多英特尔公司的技术,包括多核、LessWatts 和虚拟化解决方案等,从而为
用户提供一个稳定可靠、高效节能的计算体验。现在通过 Asianux,我们希望在英特尔多
条产品线上,从移动互联网终端到多核服务器平台继续携手合作,开创未来。”
从联盟到产品再到公司,这是一个全新的模式,Asianux 联盟已经摸着石头过河一路
走出来了,Asianux Server 也从 1.0 版本更新到了 3.0 版本,在亚洲的 Linux 市场上已经取
得了不小的市场份额,而 Asianux Mobile Midinux 的注入,更为 Asianux 联盟增加了新的活
力和增长点,其独特的模式也将为未来的开源企业树立新的标尺。
博客文摘
促开源与微软互操作性互动来谋求共赢
陆首群 BLOG:http://www.lupaworld.com/16128/
开源与微软的互操作性
当今时代呼唤开放标准。开放标准是指通过在应用编程接口(API)、通信协议(Protocol)
以及数据和文档格式(Format)方面使用公开发布的规范,来实现各种异构信息系统之间
的互操作性。
对开源与微软来说,互操作性是他们的共同追求,决不是“一头热”的问题。早在 2005
年,我应开源组织和微软双方关于实现互操作性的共同要求,曾邀请双方专家一起讨论,
企图搞出一个共同的、高效的互操作方案,但终因双方利益不同,讨论无果而终。
开源产品的 API 是公开、透明的,微软产品的 API 是属“暗箱操作”,因此在实现开
源与微软的互操作时,出现了不对称、不公平的局面。
微软要与开源实行互操作,可以很方便地设计转换器(或翻译器)。开源要与微软实行
互操作,在设计转换器时就遇到很大困难,因为开源无从了解微软的 API。过去开源一般
采用逆向设计工程或模拟技术的方法,来搜索、解析微软产品的 API 函数;在取得初步成
功时,微软就站出来说,微软的 API 具有知识产权和很多专利,对开源的“侵权行为”微
软要诉诸法律,且矛头直指开源的用户;这时开源也祭出反制之道,在加强开源社会团结
的基础上,正面应对微软的所谓“诉诸法律”问题:
“互联网是开放标准、开源结构的直接
产物,互联网上大多是开源技术,具有‘左版’版权,只要你微软上网,开源也有反制资
源,用‘右版’版权来保护‘左版’”。从而迫使微软主管知识产权的副总裁 Horacio Gutierez
出来说话:“微软不会进行诉讼,如果我们想这样做,几年前就做了”;微软负责开源平台
和战略平台的主管 Bill Hilf 和 Sam Ramji 更针对微软这样的“法律恫吓”说:
“其实是我们
干了一件错事”。
开放协议层次的互操作
2007 年 10 月 15 日我与微软首席研究与战略官 Craig Mundie 会晤时,他认承:在相持
三年后,微软终于接受欧盟的反垄断处罚。我问他,微软承诺:
“将向同行开源竞争者开放
互操作性的信息”,在向欧盟开放同时是否也向包括中国在内的全世界开放?Mundie 答复
很肯定:同时也向中国开放。
去年 12 月 14 日微软负责协议计划的总监 Ajay Sikka 来京与我会晤时,通报微软执行
美国与欧盟的裁定,他说:在中国也与欧盟一样,要落实微软关于开放互操作性信息的承
诺。我问他:
“微软是否开放 API 源代码?”他说:
“不是”
;他说:
“我们开放全部内外协
议”,
“在这些协议中也包括有关知识产权、机密文档、专利、版权、源代码(参考性许可)
以及授权等”,我说:“欧盟对此满意吗?”,他说:“欧盟官员和参考系:‘文件共享管理
Samba’对此是满意的”。其实,我在以前发表的关于互操作性的系列文章(可参见本博客
网站“我的文章”)中早就指出,实现互操作是分不同层次的,其中包括开放 API 源代码
和开放通信协议等不同层次的互操作;当然开放通信协议层次的互操作不如开放 API 源代
码的互操作效率高(我也向 Ajay Aikka 当面指出,“你们开放协议层次的互操作不是最好
的方式”);但既然欧盟(包括 Samba)“满意”,我也无话可说,总算在互操作方面前进了
一步。
M/N 结盟
2006 年 11 月 2 日,微软与 Novell(M/N)
“结盟”,双方合作开发转换器,实现 Windows
与 Linux(Novell/SuSE),在办公套件方面的兼容性或互操作,这是基于 API 之上实现 Novell
-Open Office(ODF)与微软-Office 2007(.docs 或 XML)的兼容性或互操作,Novell
与微软合作,在“法律”上或在技术上均属于排他性的,他们的“结盟”在国际开源社会
有两种不同反应,一种表示支持,以期实行真正意义上、更高效率的互操作,另一种表示
反对,认为这是微软对开源社会“实施分化瓦解的伎俩”。随后微软分别与 Xandros、Linspire、
日本 Turbolinux 也进行了“M/N 模式”的合作(并曾提议与 Red Hat 合作未获成功),微
软(中国)有关主管也希望我能帮助促进中国有关 Linux 企业与微软实行“M/N 模式”的
合作;我曾了解 Novell 自“M/N 结盟”后的业绩,似乎并未达到其预定目标,我也广泛
征求一些国内同行的意见,认为 M/N 作为一种“合作模式”也可考虑在国内进行试点。
文档系统三个层次的互操作
在我已发表的文章中谈到了各种类型的互操作,现在拟重点谈一下文档系统方面的互
操作。文档系统的互操作分三个层次:
1、关于文档生成,信息处理,基本应用程序的兼容性或互操作
办公套件的兼容性属于这个层次的互操作。办公套件分文档(Word)、电子表格(Excel)
、
幻灯片(PPT)等几个部分,主要是文档。办公套件的兼容性分层为:内容兼容、格式兼
容和版面兼容,涉及文档格式、操作习惯、接口和二次开发接口等。
一般来说,国内中文 Open Office(.SXW ODF)与微软 Office 2003(.doc,支持 XP)
的兼容性(主要是文档格式)为 95%或略差一些,可以实用(二次开发接口的兼容性约 70
%,偏低一些,还不至于影响大局);国外英文 Open Office 与微软 Office 2003 的兼容性大
约为 90%,比中文 Open Office 的兼容性要差些(国外对 Open Office 的使用也比国内差)
;
而微软 Office 2007(.docs 或 XML,支持 Vista)与微软 Office 2003(.doc,支持 XP)也
不完全兼容,
其兼容性大致为 95%或略高一些;为了兼容 Vista 操作系统和微软 Office2007,
微软最新的 Office2003 升级包(Office2003 SP3)将导致很多微软的老版本不兼容,无法访
问新版本(这也可能为开源提供了机遇)。
2、关于文档(信息)的规范、格式的兼容性或互操作
这涉及到 ODF、UOF、OOXML 三个标准的互操作性。①经国内有关单位核查测试,
UOF 与 ODF 具有一致性的条款约占 70%,能互相转换的约占 25%,兼容性约 95%;②微
软与北航合作,设计 UOF/OOXML 转换器,经核查测试,UOF 与 OOXML 一致的条款约
占 60%,可转换的约占 25-30%,兼容性约 85-90%(在演示现场我曾指出,目前这样
的兼容性水平尚低);③ODF 与 OOXML 一致的条款约占 65%,可转换的约占 25-30%,
兼容性约 90-95%。
微软要将 OOXML 提升为国际标准,去年曾在国内外引起一场风波,未获通过,今年
2007 年:茁壮成长的Linux
袁萌 BLOG:http://blog.csdn.net/yuanmeng001
件打印共享相同的端口,工作方式,域认证接口等。99%模仿了微软专有的文件打印共享
协议,相同的工作原理。就像早期 linux 模仿 Unix,仿的太像了,SCO 公司一发威,Linux
为了不涉及版权,去掉了那些专有的程序,而用自己新开发的。速度,稳定性马上就差了
不少。文件和 打印共享是微软的。NFS 是 Sun 的。这两大局域网协议都是有主的。如果
人家追究起来是逃不掉的。如果微软认为“开源软件 Samba 因为模仿了文件打印共 享,
构成侵权,应该从 linux 发行版中去除”,那 linux 可就不方便多了。现在人家没追究,主
要是微软宽宏大量和 Samba 开发团队是非商业公司追究不易”这种说词。
现今,Samba 团队决定:向全球自由软件开发者提供访问微软相关协议文档的便利,
只要他们愿意。
更多选择不等于更多标准
胡才勇 BLOG:http://blog.sina.com.cn/hucaiyong
丹麦哲学家布里丹曾写过一则寓言:有头毛驴,在干枯的草原上极为幸运地找到两堆
草,由于不知道先吃哪一堆好,结果在无限的选择和徘徊中饿死了。这被称为“布里丹效
应”。
这个寓言多年来一直是针对人类的选择而言的,即面对多种选择,人们往往无从选择。
但我现在看它,心境已完全不一样,社会发展到现在,物质生活极为丰富,人的自由度也
大了许多,已经到了可以有更多选择,追求更多选择的时代。以上面的寓言为例,在仅有
的两堆草里选,而且是在此后也不知道哪里还有草的情况下,这不叫选择,更不是我们现
在所说的更多选择。反而更像标准之选,是只能二取一的抉择,非左即右,非生即死。
什么是更多选择呢,我认为应该像大型超市,即使是最普通的商品,超市也会摆满货
架,琳琅满目,比如牛奶,有众多品牌、众多类型的口味和包装,每个人都可以根据自己
的偏好进行选择。但这种选择是建立在统一的牛奶标准之上的,因为标准统一,我们需要
考虑的只是自己的偏好,也可以在众多选择中放任自己的偏好,还可以随时改变自己的偏
好,正是在这种种偏好的满足下,我们才成就了“我们决定自己的口袋,我们决定我们的
购物篮”的“上帝”之感。假设牛奶的标准不一致,我们才真会感到无所适从。可以说,
多个标准往往会让我们无从选择,反而限制了我们选择的自由。我曾举过手机充电器的例
子,每个厂家都有自己的充电器标准,甚至每个型号都有自己的充电器标准,我们又何曾
多了更多选择。
多标准不仅会限制我们的选择,在很多时候,还可能造成极大的危害。因为多标准而
造成的教训有很多,比如:
1904 年的巴尔的摩火灾,因每个城市的水管标准都不同,所以从别的城市赶来救援的
消防队员只能望“火”兴叹,最终 80 个街区被烧为平地。
同样在美国,据说铁路规格不同是美国南部输掉美国南北战争的重要原因之一。
近期的教训也有,因为测量单位英式与公制的区别,美国航空局曾丢失了一个价值 1.25
亿美元的火星轨道飞行器。
在我国,以办公软件为例,多年来,封闭文档格式的存在严重阻碍了各中文办公软件
之间的文档互通,用户几乎是别无选择地被长期锁定在某一软件上。这不仅不利于国产软
件的发展,对于用户本身来说,长期被锁定一家软件会对文档的长期保存带来极大隐患。
正因为如此,制定统一的中文文档格式国家标准 UOF 成为我们共同的诉求。
我一直坚持这样的观点,更多的选择应建立在统一的开放的标准基础之上。以 UOF
为例,UOF 作为统一的开放的中文文档格式,可以真正实现不同办公软件之间文档的兼容
和互换,帮助用户逐渐摆脱对单一产品的依赖,确保文档信息的持久生命力。UOF 独立于
具体的操作系统、独立于具体的办公软件产品,也独立于具体的开发语言和运行环境。依
据该标准,任何厂商都可以开发符合标准的办公软件和应用系统,现有的文档格式可以和
UOF 进行转换,从而实现文档的互通和互操作。这将极大丰富用户对办公软件的选择余地。
但我们也清楚看到,直至目前为止,文档格式标准之争还未终结,多标准有益论的论
调时有出现。这其中的谬误我曾经在众多的场合进行过分析和批判,可以肯定地说,永不
可能出现多种标准的长期并存,多标准最终损害的是用户选择的自由和权利。多个标准等
于没有标准,用户不可能自行选择文档格式标准。不同的文档格式之间不可能精确兼容,
多个标准的最终结果将会让用户无所适从,唯一的结局仍将是微软挟其庞大的用户群独霸
天下。因此切实加强对 UOF 的推广力度,是我们惟一的选择。
在这里,我想到近期的一个新闻热点——蓝光 DVD 和 HDDVD 的对垒。这两种格式
的 DVD 厚度不同,互不兼容,统一的标准一直难以出现,市场和用户都出现观望态势,
两者的推广之路都受到标准不统一的阻碍。目前,这种状况有了突破,华纳兄弟宣布放弃
HDDVD 转而支持蓝光 DVD,使蓝光阵营进一步壮大,舆论一致认为 HDDVD 格式处于劣
势,占据上风的蓝光有望成为新一代 DVD 标准。但也有意见指出,电子市场变化迅猛,
如果标准的市场化不紧跟上,即使成为统一标准,也面临严峻挑战。多年受困于标准之乱
的 DVD 行业,可能已经错过了他们最好的发展时期,借标准一统天下的目标或许能实现,
但天下已经不是从前的天下了,近几年崛起的视频网络的发展已经改变众多消费者的观影
习惯,对于 DVD 的发展可以说是雪上加霜。
与 DVD 标准情况相似,标准推广和市场化的时机极为重要。UOF 出台后,惟有真正
应用起来,推广开去,才能发挥其作用。目前正值微软技术转型,用户的使用习惯经历巨
变,需要重新建立,这将为国产软件的发展创造良好的机遇。可以说,这一机遇的把握与
否将直接关乎国产软件乃至我国信息产业的发展成败。
开源盈利模式探讨
为现实。
我要说的是,用户驱动创新是迄今为止我们所能看到的最毋庸置疑的优势,但是,我
也认为是凭借前两个先决条件才使得第三个收益成为战略优势,它们不仅仅只是一个能够
观察到的现象。
在建立开源业务时,需要避免以下这三个“想法”:
1.认为您需要投资风险资金才能启动开源业务。与将“母乳喂养是最好的方式”作为
喂养健康宝宝的方式的方法相同,我认为当风险投资人在开源公司方面进行投资时,有
95% 的投资人都将产生弊大于利的结果。我认为他们将选择错误的想法,出于错误的理由
进行投资,并将在他们的投资失败后极度抱怨。所以不要试图说服一个尚未了解开源的行
业,而是寻求方法有机地创建您的公司。我估计到目前为止,在糟糕的专有解决方案方面
有意浪费的投资要比所有软件 VC 可以获得的资金多出 10 倍以上,而对于已经证实需要
并愿意付费的客户来说,这也提出了一个值得注意的可以更好运营的机遇。让他们相信您
可以通过开源弥补他们的损失,并最终获得成功!
2.每个事件支持模型。
3.通过开源赚钱的冷嘲热讽使人们选择专用。这是一个不可救药的观点,原因有以下
几点:它让人们相信创建专有软件是正确的;它通过专有软件使人们混合、分层、混杂或
以其他方式影响开源;它混淆视听,使人们迷惑开源是否是一个开发模型,并能够基于价
值主张赚钱。根本没有软件位价值!
我该怎么办?
开源社区
项目动态
开源的编辑器Notepad++ 4.7.1 发布
Notepad++是一款非常有特色的编辑器,作为开源软件可以免费使用,具有以下功能:
内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本,值得一提的是,完美
支持.nfo 文件查看),也支持自定义语言;
可自动检测文件类型,根据关键字显示节点,节点可自由折叠/打开,代码显示得非常
有层次感。这是此软件最具特色的体现之一;
可打开双窗口,在分窗口中又可打开多个子窗口,允许快捷切换全屏显示模式(F11),
支持鼠标滚轮改变文档显示比例,等等;
提供数个特色东东,如邻行互换位置、宏功能等等...现在网上有很多文件编辑器,这
个却是不可多得的一款,不论是日常使用还是手写编程代码,都能让你体会到它独有的优
势和方便。
软件包管理器RPM 5.0.0 发布
phpMyAdmin 2.11.4-rc1 发布
开源模拟器QEMU 0.9.1 发布
Paint.NET 是一个图像和照片处理软件,它由华盛顿州立大学的学生开发和维护并由微
软公司提供项目指导,早期定位于 MS Paint 的免费替代软件,现在逐渐发展为一个功能强
大且易用的的图像和照片处理软件,支持图层,无限制的历史记录,特效,和许多实用工
具,并且开放源代码和完全免费,界面看起来有点像 Photoshop,该软件的开发语言是 C#。
Python维基系统MoinMoin
杨 晶
自 1995 年 3 月 25 日第一个 Wiki 网站诞生以来,Wiki 系统以其简洁的语法规则,方
便的在线编辑和完善的版本管理功能、得到越来越多用户的青睐,已应用到企业内部网站、
社区交流和个人知识管理等领域。Wiki Engine 也由最初的几个发展到上百个,使用各种开
发语言开发。比较有代表性的有 Python 开发的 MoinMoin 和 ZWiki;用 Perl 开发的 TWiki
和 UseModWiki;用 PHP 开发的 MediaWiki 和 PhpWiki;用 Java 开发的 JSPWiki 等。本文
介绍的 MoinMoin 就是用 Python 脚本语言开发,是一套具有模块化设计和高灵活性的 Wiki
系统,以 GPL 协议发布,源代码开放。著名的 Python 社区 http://www.python.org/moin/和
Debian 社区 http://wiki.debian.org/的 Wiki 系统都是使用 MoinMoin 来搭建的,如图 1 所示。
项目起源
发展历史
项目应用
KVM开发者大会归来
在 VMware 上市受人追捧、股价节节攀升的今天,虚拟化已经成为了人们耳熟能详的
词汇,在开源的世界里,虚拟化同样如火如荼的发展着,KVM 虚拟化项目从诞生之日起
就了开源社区人员的欢迎,并且很快的纳入到了 Linux Kernel 计划当中,成为开源虚拟化
的一颗闪亮明星。
KVM 最早由 Avi Kivity 等人开发,并于 2006 年 8 月推向社区,10 月被 Linux 社区接
受。它以其代码简单、易于理解掌握以及不需要重新安装等优点很快受到了业界的欢迎与
及 Linux 项目创始人 Torvalds 的支持,并于 2006 年底被集成进 Linux 2.6.20 版内核,从此
成了为 Linux 的一个组成部分。KVM 的管理者(maintainer)是 Avi Kivity,他也因此成为
Linux 内核核心小组和 Linux 虚拟化小组的主要成员。与此同时 KVM 的开发团队也快速成
长起来,到今天发往 KVM 邮件群里的邮件每天都接近一百封,包括很多原来其他开发社
区里的资深开发者都加入了 KVM 的开发。Intel 和 IBM 等公司也投入了相当的人力到 KVM
的项目的开发中,成为 KVM 开发的主力军。
KVM 开发者社区
了此次会议,包括来自中国大陆的笔者 3 人。虽然人数不是很多,但是主要在开源软件方
面有突出贡献的公司如 Intel、IBM、HP、Novell 和 Red Hat 等都派人来参加了这次会议。
有趣的是 VMWare 也派了几位工程师参加此次会议。
社区开发模式的结晶
来自中国的声音
KVM 社区的发展方向
在两天半的时间中,白天大家聚在会议室听来自世界各地不同国家不同公司的开发者
对 KVM 发展方向和技术的看法。晚上组织方安排了比较轻松自由的鸡尾酒会,通过一种
比较随意的方式让平时只能通过电子邮件交流的开发者们能有面对面的交流的机会。在每
天正式会议结束之后,还有一些称之为 BOF(birds-of-feather)的讨论。如同其名,BOF
是一群与会者可以自由的发表自己的意见和发问的地方,没有国籍、地域、辈分的约束,
每一个人可以畅所欲言,也可以打断别人的发言。
笔者参加了关于泛虚拟化设备总线形式的 BOF 讨论。大部分参与讨论的技术人员都认
为虚拟 PCI 总线够通用,
可以很好的应用在 KVM 泛虚拟化设备中。但是这遭到了来自 S390
开发者的强力反对,主要原因是 S390 系统没有 PCI 总线。来自 Qumarent 的 Dor 不排除虚
拟 PCI 总线,但是也愿意尝试一种更高效的虚拟总线。笔者是虚拟 PCI 总线的始倡导者,
也是坚决拥护者。笔者认为开源社区必须统一虚拟设备的标准,使之成为一个独立于
hypervisor 实现的标准设备。只有这样,Xen 和 KVM 甚或 Vmware 才有可能在未来共用由
第三方开发的虚拟设备驱动程序,而不必使整个开源社区将精力花在无意义的为不同而不
同上,避免对虚拟设备驱动程序的重复开发上。从讨论的结果来看,大多数的人还是认为
虚拟 PCI 总线是一个不错的选择。
另外对于 KVM 的用户模式,是定位在服务器加固(server consolidation)还是面向客
户端(client)使用,不同的公司有不同的定位和看法。Avi 想将 KVM 定位为一种通用的
虚拟化工具,不同的用户模式都可以利用它作进一步的裁剪(customization)。笔者以为对
KVM 的用户模式的不同认知,或多或少会影响 KVM 的发展方向,如对 SMP 的支持,扩
展性的延伸等等。在未来的一年里,笔者认为 KVM 将在 SMP,性能,扩展性,EPT/NPT,
VT-d 和直通设备(pass-through),安全性等方面会有长足的发展。
链接
Avi Kivity
Avi Kiviky 是 KVM 项目的维护人和领导者,
也是 Qumranet 公司的资深软件工程师。Qumranet
(Qumran 是位于发现圣经《死海古卷》洞窟附近的古老聚落)总部和研发中心位于以色列,
Avi 本人也主要在以色列的 Qumran 工作。他曾经参与过 Xen 的开发.在此之前参与过
ScaleMP 项目并发明了 Versatile SMP (vSMP) 架构,Exanet,参与创立了 Avionitek。
开源与SaaS
顾宏军
SaaS 真的那么好么?
的上船容易,下船很麻烦。也许市场上会出现专业的“SaaS 搬家公司”。
运营商风险:刚才提到运营商之间的数据迁移很麻烦的事情,如果您的运营商倒闭了,
客户如何获得原属于自己的数据,客户在取回数据后如何处理,是导入到新运营商处,还
是其它处理将是个大问题。没有配套软件的数据就有一堆无用的数据库文件。
软件定制问题:个人应用,娱乐应用存在相当的共性,而企业应用很多时候,有企业
独有的需求,这种情况下,软件租用运营商几乎是很难为客户提供定制的,因为定制意味
着新版本,定制会对其软件升级更新等带来很大麻烦。
数据安全性:随着企业业务越来越离不开网络,大量的数据都存在与计算机中,而企
业数据多半是机密性的,如果这些数据存放在软件运营商处,尤其国内的诚信等缺失的情
况下,安全性谁来保证。
开源商业模式
Opensource 自从诞生之日起,它的商业模式就不断地在被探索。开源在一般人眼里就
是免费,即使不是免费也是廉价的代名词。 但开源软件的发展需要资本的支持,我们不能
指望开源体系里面每一件东西都是捐来的,于是人们寻找开源的商业模式,这也是开源必
须的发展之路。
开源软件的授
权方式注定了开源
不可能走传统商业
软 件 靠 卖 licence
老路,因为开源软
件版权不是某个人
的,而是属于某个
松散的技术社区或
组织,无论从商业
还是道德的角度想
等同封闭代码软件
一样卖许可都是不
SaaS 商业结构
可能的,或者说是
靠不住的。使得很多的开源软件的商业模式都是将开源软件作为一种附属品,增值品存在。
免费的开源软件与收费的商业版组件捆绑是典型的做法,比如说收费的书籍教程、嵌入式
模式(硬件收费)、混合模式(特有商业模块收费、高级版本收费)等。这些商业模式都是
将开源软件作为其它东西的陪衬而存在的模式。
广义 SaaS
当我们提到"软件即服务"的时候,突然感觉这个词汇天生就是为开源软件而创造的。
开源软件的自身特征也决定了 Software-as-a-service(软件即服务)将是最好的开源商业模
式:免费的开源软件+收费的专业服务,这是真正以开源软件为中心的模式,这些服务包
括培训、实施、定制开发、软件托管等。
广义的 SaaS 的概念既包括在线托管型 SaaS,也应该包括现场实施型 SaaS,只是这种
现场实施服务,不是靠授权收费,而是靠服务收费。红帽的订阅模式,众多开源软件的定
制化、服务销售模式,都是对 SaaS 理念进行的有力的支撑和延伸。
开源 SaaS 模式
自行开发所需特定功能,或聘请专业的开源软件服务公司代为进行,免除了商业软件 SaaS
时,难以迁移到本地,或迁移成本很高的问题。
开源 SaaS 模式大概可分为两大类:
◆开源在线版 SaaS,通过一对多的服务模式,满足客户共通的需求,开源软件公司只需要
维护这一个系统,就能给千万个客户提供服务,公司的维护和开发工作也相对少了,客户
的成本也降低了。
◆开源现场版 SaaS,通过一对一的服务模式,满足客户特有的需求,如现场部署、定制开
发、现场培训等需求,这种服务模式适合不需复制性的客户,相对效率比较低,但可满足
客户灵活性需求。
另外,使用开源软件做 SAAS 模式的时候开发周期大大缩短,优势非常明显。 开源
软件一般都会有相对坚固和强壮的底层架构,源代码开放使得在其基础上开发 WEB 应用
可以更快速,而 Linux、Apache、Mysql 等优秀开源软件可以提供从操作系统、web 服务器、
数据库等全套的 SAAS 基础解决方案。
目前一些用开源软件做出的 SAAS 应用渐渐的出现了,highrisehq.com 这个刚上线就备
受欢迎的 CRM 是基于开源的 Ruby on Rails。可喜的是,国内也出现的开源的 SAAS 应用,
基于开源组合 pyhton/zope/plone 的在线团队项目协作产品 EveryDo。这些都预示着开源软
件相当适合实施 SaaS 模式。
SaaS 的未来
知识学堂
Linux系统管理员进阶【之一】
张育人
用Unix思维思考Linux
Shell
c 字符设备文件
p 命名管道文件
- 普通文件,或者更准确地说不属于以上几种类型的文件
权限要配合属主和属组来理解,r 代表可读,w 代表可写,x 代表可运行。三个字母为
一段,第一段代表属主权利,第二段代表属组权利,第三段代表其它用户权利。如果相应
权利位为“-”,则表示不具有这种权利。
链接分为硬链接和软链接,硬链接和原有文件是存储在同一物理地址的两个不同的名
字;软链接类似于 Windows 中的快捷方式,本身的内容是被指向文件的内容。
文件大小的单位是 KB,注意这里不一定就是真正的大小,因为文件有各种类型,例
如目录的大小大多数是 4096KB。
与 Windows 不同,Linux 文件没有固定扩展名,但是扩展名遵循一定的标准。
Linux 下能够更改这些设置的主要命令有 chown、chgrp、umask 和 setuid,具体用法此
处就不详细介绍了,可以通过“man 命令名”来学习。例如,对于 man 命令的使用方法可
以使用“man man”来学习。
需要注意的是,在 Linux 中需要区分大小写,例如,ls 与 LS 是两个不同的命令。
2.文件资源查找
对于文件资源的寻找最有效的方法就是搜索,find 与 grep 是最主要的两个命令。find 引用
文件属性进行查找,所谓文件属性,就是指文件名、文件权限等类型的属性。grep 根据文
件内容进行查找,能够分析文本内相关的数据,但是它对二进制文件无能为力(二进制文
件是给 CPU 看的)。
3.命令
掌握 Shell 命令是学习 Linux 基础的基础,除去前面提到的命令外,Bash 还有不少内置的
命令,详见表 2。
表 2:Bash 内置命令
命令 说明
alias 设置别名
bg 使一个被挂起的进程在后台继续进行
cd 改变当前工作目录
echo 显示字符串或变量的值
exit 退出 Bash
eval 将命令所带的参数作为一个命令行来执行
export 使变量的值对当前 Bash 的所有子进程都可见
fc 编辑历史命令列表里的命令
fg 使一个被挂起的进程在前台继续进行
help 显示 Bash 内置命令的帮助信息
kill 终止某个进程
pwd 显示当前工作路径
read 从标准输入读取字符串序列
time 显示执行其参数命令所使用的用户和系统累计时间
unalias 删除已经定义的别名
text expr 或[expr] 用于测试一个表达式 expr 的真假
if expr then cmd fi 用于实现单分支结构
if expr then cmd else cmd fi 用于实现双分支结构
case...esac 用于实现多分支结构
for...do...done 用于实现 for 型循环
while...do...done 用于实现当型循环
until...do...done 用于实现直到型循环
break 用于跳出循环结构
continue 用于重新开始下一轮循环
引用这些内置命令不需要 Shell 环境的配合,也就是不需要对命令的所在进行设置。
除了这些内置命令外,还有许多的“外部”命令,这些命令依赖于 Shell 环境。后面
我将讲述 Shell 环境,它们一般处于/bin、/usr/bin/、/sbin 和/usr/sbin 等目录下,可以用 echo
$PATH 查看系统 Shell 环境默认的路径设置,在这些路径下寻找可执行命令,同样“man 命
令名”提供了很好的教学。
4.输入与输出
Shell 的基本任务是处理输入和输出,在很多文档和书籍中提到标准输入和标准输出的
概念,可以认为标准输入就是键盘,标准输出就是屏幕。Bash 可以从标准输入中获得命令,
也可以用其它方式获得输入,例如文件输出同样可以输出到别的地方。这种使用非标准输
入输出(I/O)的方式叫做 I/O 重定向。关于重定向操作的操作符号见表 3。
表 3:I/O 重定向操作符
符号 解释 举例 解释
> 重定向到新的输出 ls > files.txt 列文件清单并将结果存入 files.txt 文件
>> 追加重定向到新的输出 ls >> files.txt 列文件清单,并将结果追加到 files.txt 文件
< 重定向到新的输入 sort < files.txt 将 files.txt 的内容排序
<< 追加重定向到新的输入 sort << files.txt 将 files.txt 的内容排序
| 将输出通过管道传递到输入 ls | sort 列文件清单并排序
重定向有什么作用呢?比如系统需要在某种情况下回复 E-mail,并且它的内容又是固
定的,这时使用重定向可以把固定内容写入一个文件,回复 E-mail 的时候输入采用这个文
件即可。
5.文本过滤
假如需要写一个文件,这个文件是由许多其它文件中的段落或列组成,并且这些段落
和列的内容是不断变化的,这时用拷贝粘贴来手工完成这个任务就显得非常低效。聪明的
方法是使用文本过滤,写一个脚本来形成这个文件。
文本过滤是 Unix/Linux 的一大特色,Linux 的文本过滤几乎可以满足任意的文本过滤
需求。文本过滤主要由 awk 和 sed 来完成,这不是两个简单的命令,而是代表了两种过滤
方式。awk 对于列操作比较有优势,但对于行操作则远不如 sed 方便。关于这部分内容,
# 随后以#开头的行为注释行
/usr/sbin/useradd -s /usr/bin/passwd $1
# 调用增加用户 useradd 这个命令,参数由输入读入,设置登录为更改密码
/usr/sbinedquota -p abc $1
# 调用 edquota 命令设置磁盘限额与 abc 账户设置的一致
# edquota 命令只有在安装了 Quota 软件的情况下才存在
/usr/bin/passwd $1
# 调用 passwd 命令设置这个账户的密码(初始密码)
# 脚本到这里结束
打开文本编辑器,例如 gedit,将这些脚本内容拷贝到其中,保存成/root/myuseradd.sh
脚本文件,用“.sh”后缀表示这是一个 Bash 的脚本,运行命令“chmod a+x myuseradd.sh”
使之能够被执行,然后在同目录下运行“./myuseradd.sh aaa”就可以添加具有上述特征的
账户 aaa 了。
前面我曾介绍过,很多服务器是没有 X 界面的,那么在文本模式下对文件编辑器的掌握就
是编写 Shell 脚本的必要基础。Linux 文本模式下的文本编辑器主要为 vi 和 Emacs,想要了
解它们可参考有关它们的详细文档。
要想成为一个好的系统管理员,Shell 脚本是要掌握的重要技能之一。
8.运行级
运行级是系统启动到何种状态的定义,了解运行级的内容有助于系统管理员解决一些
棘手的系统启动或关闭故障。
系统含有七种运行级别,详见表 4。
表 4:各个运行级别的用途
运行级别 0 启动和停止整个系统
运行级别 1 单用户或管理模式
运行级别 2 多用户模式,部分网络服务被启动
运行级别 3 正常操作运行模式,启动所有的网络服务
运行级别 4 用户定义的模式,可以使用该级别来定制所需要运行的服务
运行级别 5 缺省 X-Window 模式(即 Linux 图形模式)
运行级别 6 重启动
每一个运行级别对应一个运行级别目录/etc/rcN.d,N 是 1~7。运行级别目录中含有一
系列启动服务的脚本。这里的“服务”可以是守护进程、应用程序、服务器、子系统或脚
本进程。在系统启动的过程中,将会启动一个名为 init 的进程(它是系统中所有进程的祖
先)。它所要完成的一部分工作就是看看需要启动哪些服务,应当缺省地进入哪一个运行级
别,通过查看/etc/inittab 配置文件来获得上述信息。事实上,/etc/rcN.d 中都是一些链接,
真正的文件放在/etc/rc.d/init.d 中,系统管理员可以写一些脚本放在这些目录中来判断启动
或关闭故障。
对于 Shell 的重点内容介绍到这里就结束了。虽然 Linux 不仅有 Shell,还有内核与
X-Window,但 Shell 是 Linux 系统管理员每天都要面对的、最亲密的伙伴,系统管理员可
以用 Shell 管理各种应用(注意,这里的应用包括了操作系统服务和应用服务)。
服务
多用户
重读 2.4 内核(1)
贺永利
由于并没有想到要把这一系列的学习笔记做任何文章的形式,所以突然要这样做的时
候,就比较仓促,内容也多有删节.原始内容可以到下面的网址查到:
http://osdev.gro.clinux.org/#Linux-2.4;http://www.linuxforum.net/kernel/2.4
对于正在 coding 的程序员,最终还是要到代码的海洋中冲锋陷阵,这些笔记大多和代码,
具体的细节有非常紧密的关系,从期刊上看起来会比较费力,不过好在可以到上述网址查到
原文. 笔记的整理格式是按照目录/文件的字母顺序来的,或许并不适合顺序阅读,去找原文,
当作资料看好了.这里给个梗概吧.文中多有引用各处的资料,还有网友的研究成果,再次统一
致谢. 如有版权问题,请联系期刊编辑. 文中内容也无法保证完全正确,见谅.
所有文章基于 linux kernel 2.4.0 这个版本,为什么不是 2.6? 因为开始的时候看的 2.4,既
然开始了,就坚持到结束吧.
arch/i386/fault.c
页面异常, swap, address space, shmem, filemap 从文件开始,而不拘泥于文件。此文件内只
有两个函数。
1. __verify_write int __verify_write(const void * addr, unsigned long size)
此函数主要应用于检查用户传递的内存块是否"可写". 可写意味着:
a)内核容许其写,即 vma 的记录;
b)相应的物理页面已经分配,即虚存已经有了对应的映射. 主要使用者是
access_ok (include/asm-i386/uaccess.h).
access_ok 大量应用于和用户空间进行数据交换的时候检查用户传递的内
存是否合法.以避免在内核中产生页面访问异常,被别有用心的程序破坏了"大
好形势".
下面是此函数,以及注释.
/*
* Ugly, ugly, but the goto's result in better assembly..
* 在操作用户传递的内存时检查其有效性,如果容许则预先扩展其堆栈
* 或者为虚拟内存分配物理页面
*/
int __verify_write(const void * addr, unsigned long size)
{
…….
vma = find_vma(current->mm, start);//寻找 vma 满足 start<vma->end
if (!vma)
goto bad_area; //访问非法地址
if (vma->vm_start > start) //访问堆栈空洞,需要扩展用户堆栈
goto check_stack;
good_area:
……
for (;;) {
if (handle_mm_fault(current->mm, vma, start, 1) <= 0)//检查 page table->
goto bad_area; //page dir->page 本身, 有任何没有分配的页面,即刻分配物理
if (!size) //页面
break;
…
}
return 1;
check_stack:
if (!(vma->vm_flags & VM_GROWSDOWN)) //必须是堆栈(或者有 VM_GROWSDOWN
属性)
goto bad_area;
if (expand_stack(vma, start) == 0) //只是扩展其 vma 中的地址范围
goto good_area; //还要给扩展的堆栈分配物理页面
bad_area:
return 0;
}
就这个函数本身,其中的注释已经足以理解其逻辑. 需要着重强调的是:
a) vma
vma 是内核管理虚拟内存的手段,其中记录了进程所拥有的虚拟地址的范围和属性,是处理
内存异常的依据之一. 如果进程所有的虚存较多,vma 还可以组织成平衡树,以加快查找速
entry = pte_mkdirty(entry);
}
entry = pte_mkyoung(entry);
establish_pte(vma, address, pte, entry);
spin_unlock(&mm->page_table_lock);
return 1;
}
这里要强调的是页面的换入. 有以下途经分配/换入页面,从而建立页面映射.
I)第一种情况:根本没有建立,或者已经被断开.换入函数 do_no_page(mm/memory.c), 首先
尝试 vma->vm_ops->nopage,如果 vma 没有提供 nopage 操作就使用 do_anonymous_page 分
配一个空闲页面. (本次分析细节到此结束)
II)第二种情况是被交换到了 swap space 则通过 do_swap_page 从 swap 文件读入内存(或者
从 swap cache 找回).此函数还涉及计 COW, 这里不再讨论. 页面的释放和换出这里页简单
提提,首先定义匿名页面是 page->mapping(address mapping) 为 NULL 的页面.页面换出当然
是 try_to_swap_out 所为 .try_to_swap_out 换出非匿名页的时候是直接断开页面映射.匿名的
clean 页面的映射也是直接断开,因为不需要写入交换文件.如果是 dirty 的匿名页,则分配一
个 swap 页(swap file 中的一个页面)然后将 swap 页的 entry 写入 pte,并置 pte 为页面不在内
存.try_to_swap_out 区别对待这三种页面,和 handle_pte_fault 换入页面的不同操作相对应.
总结一下页面的周转:从 try_to_swap_out 和 handle_pte_fault 看过去, 换出要不就是
swap space,要不就是 page->mapping->a_ops->writepage(见 mm/vmscan.c 函数 page_launder,
应该注意到无论是 swap cache 还是 page cahche 都使用 writepage 换出页面).换入要不就是
swap space,要不就是 vma->vm_ops->nopage(分配干净页面就不算进页面周转了).
下面的问题就是 page->mapping->a_ops->writepage 和 vma->vm_ops->nopage 到底是
什么函数,怎样赋值?
先看 page->mapping->a_ops->writepage,搜索 page->mapping,在函数
do_generic_file_read(mm/filemap.c)中发现 page->mapping 来源于 inode->i_mapping.
do_generic_file_read->__add_to_page_cache 读入一个页面的文件后,将页面加入 page cache,
同时赋予 page->mapping 以 addrspace. 另外在做搜索的过程中应该注意函数
是.data.idt
函数 trap_init 中初始化 14 号异常,即页面异常入口为 page_fault,
set_trap_gate(14,&page_fault); page_falut 定义在 arch/i386/kernel/ entry.s:
ENTRY(page_fault)
pushl $ SYMBOL_NAME(do_page_fault)
jmp error_code
在这里调用页面异常处理函数 do_page_fault(arch/i386/mm/fault.c).
下面分析此函数, 分析在代码中以注释形式出现.
/*
* 页面 faults(故障) 处理入口. 主要任务时确定异常
* 发生的地址和原因,然后把不同的故障传入不同
* 的入口函数.
* error_code:
* bit 0 == 0 means no page found, 1 means protection fault
* bit 1 == 0 means read, 1 means write
* bit 2 == 0 means kernel, 1 means user-mode
* 有三种情况下陷入此函数:
* 1. pmd, pgt, pte 有一个为空, 即未建立映射或已经撤销.
* 2. 页面不在内存, 即,为内核交换到了磁盘.
* 3. 权限不正确.
* 情况 1. 此种页面属于已经撤销的, 此种页面由 page cache (address_space)管理.
* try_to_swap_out 把这种页面的映射断开, 即,把相应的 pte 置成 0 .
* 情况 2. 中的页面属于 swapper_space 管理. try_to_swap_out 不会把这种 pte
* 置 0, 而会换成相应的 swp_entry_t.
* 转交下一级函数处理时, 所有非法操作都在这个函数中 处理掉了
*/
asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
{
…….
/* 确定异常发生的地址*/
__asm__("movl %%cr2,%0":"=r" (address));
tsk = current;
/* demand paging:我们陷入了内核虚拟空间.*/
if (address >= TASK_SIZE)
goto vmalloc_fault; //异常发生于内核空间
….
/* 如果异常发生在中断中或者没有用户 context(环境), we must not take the fault.. */
if (in_interrupt() || !mm)
goto no_context;
down(&mm->mmap_sem);
//下面的主要思路是根据异常发生的地址和 vma 的
//关系,分成几种不同情况进行处理
vma = find_vma(mm, address); // 试着找一个 vma , 其结束地址大于异常点
if (!vma)
goto bad_area; //没有这样的 vma
if (vma->vm_start <= address)
goto good_area; //异常地址在一个 vma 中
//运行到这里表示, 这个地址落到了一个 vma 空洞中
if (!(vma->vm_flags & VM_GROWSDOWN))
goto bad_area; //如果这个空洞上的 vma 不是堆栈, 肯定是越界
if (error_code & 4) {
if (address + 32 < regs->esp)
goto bad_area; //异常点不在 esp 附近时也是一种越界而不是正常的堆栈操作
}
//对于正常的堆栈操作越界,我们应该为用户扩展堆栈
if (expand_stack(vma, address))
goto bad_area; //扩展失败, 转到 bad_area
/*
* 堆栈扩展以后, vma 就正常了,因此流程自然进入 good_area
*/
good_area:
//异常点在正确的 vma 中
//还要根据 vma(代表 OS) 容许的权限, 对异常分类
info.si_code = SEGV_ACCERR;
write = 0;
switch (error_code & 3) {
default: /* 3: write, present */
/* fall through */
case 2: /* write, not present */
if (!(vma->vm_flags & VM_WRITE))
goto bad_area; //vma 不容许写, 是一种非法操作
write++;
break;
case 1: /* read, present */
goto bad_area; // 权限错误, 非法
桌面应用
Ubuntu7.10 使用有感而发
hezi
Linux下软件的安装与卸载
Linux 宝典
在 Windows 下安装软件时,只需运行软件的安装程序(setup、install 等)或者用 zip
等解压缩软件解开即可安装,运行反安装程序(uninstall、unware、
“卸载”等)就能将软
件清除干净,完全图形化的操作界面,简单到只要用鼠标一直点击“下一步”就可以了。
而 Linux 好象就不一样了,很多的初学者都抱怨在 Linux 下安装和卸载软件非常地困难,
没有像使用 Windows 时那么直观。其实在 Linux 下安装和卸载软件也非常简单,同样也有
安装向导或解压安装的方式,不相同的只不过是除了二进制形式的软件分发外,还有许许
多多以源代码形式分发的软件包,下面就来详细地讲一讲这些软件的安装与卸载:
二进制分发软件包的安装与卸载
Linux 软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优
点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编
译的,那它就不能在另外的平台或环境下正确执行。
1、*.rpm 形式的二进制软件包
安装:rpm -ivh *.rpm
卸载:rpm -e packgename
说明:RPM(RedHat Packge Manager)是 RedHat 公司出的软件包管理器,使用它可
以很容易地对 rpm 形式的软件包进行安装、升级、卸载、验证、查询等操作,安装简单,
而卸载时也可以将软件安装在多处目录中的文件删除干净,因此推荐初学者尽可能使用
rpm 形式的软件包。rpm 的参数中-i 是安装,-v 是校验,-h 是用散列符显示安装进度,*.rpm
是软件包的文件名(这里的*.rpm 特指*.src.rpm 以外的以 rpm 为后缀的文件);参数-e 是删
除软件包,packgename 是软件包名,与软件包的文件名有所区别,它往往是文件名中位于
版本号前面的字符串,例如 apache-3.1.12-i386.rpm 和 apache-devel-3.1.12-i386.rpm 是软件
包文件名,它们的软件包名称分别是 apache 和 apache-devel。更多的 rpm 参数请自行参看
手册页:man rpm。
如果你不喜欢在字符界面下安装或卸载这些软件包,完全可以在 X-Window 下使用图
形界面的软件包管理程序,如 glint、xrpm 这样的图形接口,或者是 KDE 的 kpackge 等,
这样对软件包的安装、升级、卸载、验证和查询就可以通过点击鼠标来轻松完成。
2、*.tar.gz/*.tgz、*.bz2 形式的二进制软件包
安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2
卸载:手动删除
说明:*.tar.gz/*.bz2 形式的二进制软件包是用 tar 工具来打包、用 gzip/bzip2 压缩的,
安装时直接解包即可。对于解压后只有单一目录的软件,卸载时用命令“rm -rf 软件目录
名”;如果解压后文件分散在多处目录中,则必须一一手动删除(稍麻烦),想知道解压时
向系统中安装了哪些文件,可以用命令“tar ztvf *.tar.gz”/“tar ytvf *.bz2”获取清单。tar
的参数 z 是调用 gzip 解压,x 是解包,v 是校验,f 是显示结果,y 是调用 bzip2 解压,t 是
列出包的文件清单。更多的参数请参看手册页:man tar。
如果你更喜欢图形界面的操作,可以在 X-Window 下使用 KDE 的 ArK 压缩档案管理
工具。
3、提供安装程序的软件包
这类软件包已经提供了安装脚本或二进制的安装向导程序(setup、install、install.sh
等),只需运行它就可以完成软件的安装;而卸载时也相应地提供了反安装的脚本或程序。
例如 SUN 公司的 StarOffice 办公软件套件就使用名为 setup 的安装程序,而且在软件安装
后提供反安装的功能,目前这种类型的软件包还比较少,因其安装与卸载的方式与 Windows
软件一样,所以就无需多讲了。
源代码分发软件包的安装与卸载
Linux 软件的源代码分发是指提供了该软件所有程序源代码的发布形式,需要用户自
己编译成可执行的二进制代码并进行安装,其优点是配置灵活,可以随意去掉或保留某些
功能/模块,适应多种硬件/操作系统平台及编译环境,缺点是难度较大,一般不适合初学
者使用。
1、*.src.rpm 形式的源代码软件包
安装:rpm -rebuild *.src.rpm
cd /usr/src/dist/RPMS
rpm -ivh *.rpm
卸载:rpm -e packgename
说明:rpm --rebuild *.src.rpm 命令将源代码编译并在/usr/src/dist/RPMS 下生成二进制的 rpm
包,然后再安装该二进制包即可。packgename 如前所述。
2、*.tar.gz/*.tgz、*.bz2 形式的源代码软件包
安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2 先解压
然后进入解压后的目录:
./configure 配置
make 编译
make install 安装
卸载:make uninstall 或 手动删除
说明:建议解压后先阅读说明文件,可以了解安装有哪些需求,有必要时还需改动编译配
置。有些软件包的源代码在编译安装后可以用 make install 命令来进行卸载,如果不提供此
功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,
往往很难把它删除干净,那你应该在编译前进行配置,指定软件将要安装到目标路
径:./configure --prefix=目录名,这样可以使用“rm -rf 软件目录名”命令来进行干净彻底
的卸载。与其它安装方式相比,需要用户自己编译安装是最难的,它适合于使用 Linux 已
有一定经验的人,一般不推荐初学者使用。
关于 Linux 下软件的安装与卸载 lanche 已经讲了这么多,但可能还会有人问怎么知道
一个 tar.gz/bz2 包是二进制文件包呢还是源代码包?如果你用过压缩工具就会明白,压缩包
未必就是软件,它也可能是备份的许多图片,也可能是打包在一起的普通资料,要分辨它
到底是什么最好的办法就是查看包里的文件清单,使用命令 tar ztvf *.tar.gz / tar ytvf *.bz2
或者在 X-Window 下使用图形化的 ArK 压缩档案管理工具都可以,源代码包里的文件往往
会含有种种源代码文件,头文件*.h、c 代码源文件*.c、C++代码源文件*.cc/*.cpp 等;而二
进制包里的文件则会有可执行文件(与软件同名的往往是主执行文件),标志是其所在路径
含有名为 bin 的目录(仅有少数例外)
。原来这么简单呀,还不快点自己试试!
GRUB引导故障排除
李达飞
在工作和教学中,经常发现同事和同学在碰到 Linux 启动直接进入 GRUB 界面但没有
启动选单(只剩下一个“grub>”提示符)的状况,这时就认定系统已经没救,开始重新安
装,甚至包括一些接触 Linux 已久的人也是如此。其实出现此种状况,只要了解 Linux 系
统引导过程中 GRUB 的作用以及工作流程,就非常容易解决。
Linux 系统在启动过程中,首先是固件(PC 上大多是 CMOS/BIOS)的物理检测,诸
如检测系统的显卡、CPU 和硬盘等,可从系统按下电源后看到此检测信息;检测无问题,
将读取硬盘的 MBR(主引导记录)中的自举程序,Linux 中常用的自举程序如 LILO 和
GRUB。自举程序 GRUB 在系统启动期间只有一个作用,就是载入内核;内核在引导期间
有两个主要的作用,一个是驱动系统硬件,另一个将启动系统进程 init;init 进程将读取其
配置文件/etc/inittab 完成后续所有的引导。
所以其实 GRUB 在引导期间只有一个最重要的作用,就是载入系统内核。那么 GRUB
在 引 导 期 间 到 底 是 如 何 执 行 引 导 的 呢 ? 让 我 们 来 看 以 下 的 GRUB 配 置 文 件
/boot/grub/grub.conf(一定要注意/etc/grub.conf 只是此文件的一个软链接)片断示例:
title Thiz Linux Server 7.0
root (hd0,5)
kernel /boot/vmlinuz-2.4.22-3Thiz ro root=LABEL=/
initrd /boot/initrd-2.4.22-3Thiz.img
此段是加载 GRUB 的最重要的设置段,其中“title”段指定了 GRUB 引导界面系统的
标题;“root”段指定了/boot 分区所在的位置;“kernel”段指定了内核所在位置(kernel
/boot/vmlinuz-2.4.22-3),内核加载时权限属性为只读(“ro”),以及指定根分区所在位置
(root=LABEL=/);initrd 指定了 Linux 镜像文件所在位置。
当 Linux 系统中 GRUB 配置文件/boot/grub/grub.conf 内容修改错误或损坏时,系统启
动后会自动进入 GRUB 命令行模式(“grub>”),最常见的原因无外乎两个,一是 GRUB 配
置文件中此三段修改错误;二是 GRUB 配置文件丢失。(还有少数原因,如内核文件或镜
像文件损坏、丢失,/boot 目录误删除等)此时可以使用如下几种方法进行恢复。
存在 GRUB 配置文件备份
sh#
此时就可以在此命令行下执行操作了:
sh#cp /backup/grub.conf.bak /mnt/sysimage/boot/grub/grub.conf
假设备份文件为/backup/grub.conf.bak ,因绝大多数 Linux 光盘修复模式中会将硬盘系
统的“/”分区 chroot 到“/mnt/sysimage”处(在之前的配制中可以看到提示),所以拷贝
的目标为“/mnt/sysimage/boot/grub/grub.conf”而非“/boot/grub/grub.conf”
◆ 退出此模式,重启即可。
内核文件、镜像文件、/boot 目录等文件损害或丢失,也可以使用此种方法修复。
Linux下的多媒体软件
Linux 宝库
Linux 以其强大的服务器功能著称,近年来逐渐流行并进入个人领域,但许多用户并
不了解 Linux 下的软件,以为它只是用在网络服务器上,其实它在多媒体领域也有相当全
面的支持。这里就介绍几款 linux 下的多媒体软件。
GNOME CD Player
Realplayer
RM 格式的影音文件是网上广为流传的电影格式,以其压缩率之大而闻名,幸运的是
linux 下 也 可 以 看 RM 格 式 的 文 件 , 这 就 是 Realplayer for linux 。 下 载 地 址 :
ftp://ftp.suhat.com/pub/Linux/Multimedia/Video/realplayer/rp8_linux20_libc6_i386.cs1.rpm
这是一个 RPM 包的,非常容易安装。如果用的是 Redhat linux,请先点左下角的脚掌,然
后是“Programs/System/GnoRPM”打开 RPM 包管理器,选择 Install(安装),再选择你刚才
下载的文件就会开始安装了。或者也可以在命令行安装:
#rpm -ivh rp8_linux20_libc6_i386.cs1.rpm
安装之后在/usr/lib/目录下会有一个 Realplayer8 目录。并且在/usr/X11R6/目录下会有相
应的启动文件 realplay,以后直接在命令行中输入“realplay&”就可以启动 Realplayer 来
看电影了。
可以在桌面建个快捷方式,这样以后就方便了,这样做:用鼠标右击桌面,选择
“New/Launcher…”,在对话框中填上快捷方式的名字(Name),描述(Comment),执行
的命令(Command),并选择好图标(/usr/lib/Realplayer8/rp7.xpm)就行了。
KSnapshot――linux 下的抓图工具
-0.2.7.tar.gz
另外,能抓图的软件还有一个,它就是能与 photoshop 媲美的图象编辑软件 GIMP 的
一个插件。GIMP 可以在 Redhat linux 的光盘上找到,或是到中国自由软件库下载:
ftp://ftp.freesoft.cei.gov.cn/.mirror2/ftp.redhat.com/contrib/libc6/i386/gimp-1.0.0-6.i386.rpm.
启动 GIMP 后选择“File/Acquire/Screen Shot…”
(各版本 gimp 可能不同,各位自己找一下)
,
它的使用和 KSnapshot 差不多,但有一个好处是抓到的图可能立即在 GIMP 中编辑,方便
多了。
Openserver启动盘制作
Openserver 启动盘制作,方法如下:
如果你的机器不支持光盘启动或其他原因要作启动软盘,方法有三:
(1)在 windows 下用 gzcp:提示符下运行 E:\images\gzcp E:\images\boot\install.img A:。
其中 A:为你的软盘符,E 为你的光盘符。
( 2 ) 在 windows 下 用 floppcp : 提 示 符 下 运 行 E : \images\floppcp d/ A : /f E :
\images\boot\install.img
(3)在 Unix 下:root 注册后,在机器上插入 3.5 寸软盘,并将系统软件光盘放入光驱,
然后敲入下面的命令:
#mount /dev/cd0 /mnt<回车>
#dd if=/mnt/images/boot/N00 of=/dev/rfd0135ds18<回车>
企业应用
FreeNAS构建企业存储系统
凌晓明
FreeNAS 是一个开源的 NAS(Network Attached Storage)服务器系统,该软件基于
FreeBSD、Samba 和 PHP,支持客户端使用 CIFS、NFS 和 FTP 等协议使用存储系统。相对
于 SAN 而言,NAS 存储系统具有更低的构建和管理成本,同时更利于异构环境的文件共
享。专有的 NAS 存储系统价格昂贵,对于对成本相当敏感的中小型企业是较难承受的。
FreeNAS 的出现,使中小企业只需要使用普通的服务器,就可以建立 NAS 存储系统。目
前 FreeNAS 的最新版本为 0.71 版本。
FreeNAS 部署
图1
图2
图3
安装完成后,取出安装光盘,在控制台选择第 5 项重新启动系统。然后需要配置网络
接口,在控制台选择第 1 项,系统会列出可用的网络接口名称,这里为 lnc0。重启系统使
配置生效。然后配置 IP 地址,选择第 2 项,在这里可以配置网络接口的 IP 地址,例如
192.168.0.100,如图 4 所示。
图4
接着需要输入这个 IP 的子网掩码,子网掩码用位数表示,例如如果子网掩码为
255.255.255.0,那么这里就输入 24。设置完成后,就可以通过 Web 界面对 NAS 进行管理。
FreeNAS 的管理
图5
图6
RSYNCD 服务用于同步数据,FreeNAS 可以作为 RSYNC 服务器和客户端使用,这样
可以使用两台 FreeNAS 服务器,其中一台与另外一台通过 RSYNC 服务同步数据实现在线
备份。SSH 服务可以使用户远程登录到 FreeNAS 系统,主要用于管理。
Access 组用来管理用户权限设置等;Status 分组中可以查看系统状态;Diagnostics 分
组可以查看 FreeNAS 系统诊断信息和日志,以帮助用户排查错误。
FreeNAS 应用
2.FTP 服务器
FreeNAS 支持标准的 FTP 协议,客户端可以通过命令行或 CuteFTP 上传和下载文件。
例如在 Windows 的控制台中执行 FTP 命令将 C 盘中的 freenas.iso 文件上传到 FreeNAS 服
务器,使用如下命令:
C:\>ftp
ftp> open 192.168.0.100
Connected to 192.168.0.100.
220---------- Welcome to Pure-FTPd ----------
220 You will be disconnected after 300 minutes of inactivity.
User (192.168.0.100:(none)): ftpuser
331 User ftpuser OK. Password required
Password:
230-User ftpuser has group access to: wheel ftp
230-OK. Current directory is /mnt
230-Welcome to FreeNAS FTP service
230
ftp> cd share1
250 OK. Current directory is /mnt/share1
ftp> put c:\freenas.iso
200 PORT command successful
150 Connecting to port 1500
226-File successfully transferred
226 3.885 seconds (measured here), 6.59 Mbytes per second
ftp: 发送 26939392 字节,用时 56.52Seconds 476.67Kbytes/sec.
3.NFS 服务器
NFS 是 Unix 和 Linux 客户端使用 NAS 存储服务器的主要方式。例如有一个 Linux 服
务器作为 NFS 的客户端,需要在这个 Linux 服务器上建立一个名为 NAS 的目录,用来挂
载 FreeNAS 服务器上的某个 NFS 分区(例如/mnt/share1),使用如下命令:
mkdir /NFS
mount 192.168.0.100:/mnt/share1 /NAS
4.同步备份(数据镜像)服务器
对 RSYNC 服务的支持,可以使 FreeNAS 成为一个易于管理的备份服务器,对数据进
行同步备份。这项功能对于一些经常更新的数据是非常实用的。也可以用两台 FreeNAS 服
务 器 , 其 中 一 台 作 为 另 外 一 台 的 备 份 。 例 如 需 要 对 Linux 服 务 器 192.168.0.2 中 的
/var/www/html 目录进行同步备份,首先需要在这台服务器上安装 RSYNC,安装完成后配
置 rsyncd.conf 文件,如果配置文件不存在,需要重新创建,格式如下所示:
uid=nobody
gid=nobody
max connections=4
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
#auth users=root
secrets file=/etc/rsyncd.pwd
[share2]
path=/var/www/html
ignore errors
read only = yes
list = no
其中 share2 是 FreeNAS 中建立的共享分区的名称,用于共享分区备份文件。然后创建一个
认证文件 rysncd.pwd,格式为 user:password。使用如下命令启动 RSYNC 服务器:
rsync --daemon
服务器配置完成后,将 FreeNAS 服务器配置为 RSYNC 客户端。登录 FreeNAS 管理界
面,选取左侧 Service 组中的“RSYNCD”,然后选取右侧的 Client 选项,复选 Enable,输
入 RSYNC 服务器地址,然后选择同步的时间间隔,完成后单击 Save 按钮保存,与服务器
同步备份的 rsync 客户端就配置完成了,如图 7 所示。
图7
相对于 Linux 的 RSYNC 客户端,FreeNAS 显然更加容易配置。当然,也可以将 FreeNAS
作为 RSYNC 服务器,并用另外一台 FreeNAS 服务器同步备份。RSYNC 是一个功能非常
强大的同步备份工具,如果对这个工具感兴趣,可以在 http://rsync.samba.org 查看相关技术
资料以获得更多的信息。
对于 FreeNAS 发布时间不到一年,没有发布 1.0 版本就受到如此关注的开源软件,这
是非常罕见的,也说明这个系统是非常值得推荐的。尽管还存在权限管理不完善等不足之
处,但有理由相信这个短时间内发展如此迅速的网络存储系统是值得期待的。同时,对于
要求并不严苛的中小企业,FreeNAS 已经可以满足多数存储需求。
构建LVS集群系统
关洪波
集群技术目前主要分为三大类。一类是高可用性集群,指运行于两个或多个节点上服
务,当某个节点出现故障时,仍能继续对外提供服务。高可用性集群的设计思想就是最大
限度地减少服务中断时间。这类集群中比较著名的有 Turbolinux TurboHA、Heartbeat 和
Kimberlite 等。
第二类是负载均衡集群,就是将大量的请求由多台计算机完成,目的是提供和节点个
数成正比的负载能力,这种集群适合提供大访问量的 Web 服务,负载均衡集群往往具有一
定的高可用性特点。
第三类是超级计算集群,按照计算关联程度的不同,又可以分为两种。一种是任务片
方式,将计算任务分成任务片,再把任务片分配给各节点,在各节点上分别计算后再把结
果汇总,生成最终计算结果。另一种是并行计算方式,节点之间在计算过程中大量地交换
数据,可以进行具有强偶合关系的计算。这两种超级计算集群分别适用于不同类型的数据
处理工作。有了超级计算集群软件,企业利用若干台 PC 机就可以完成通常只有超级计算
机才能完成的计算任务。这类软件有 Turbolinux EnFusion 和 SCore 等。
LVS 是 Linux Virtul Server 的简称,是由章文嵩博士主持的著名开放源码项目,一个实
现集群系统的解决方案。LVS 旨在解决高速发展的 Web 商务中日益凸现的问题:如何在有
限资金投入的情况下,最大幅度地提高 Web 站点的潜在服务性能。核心就是通过一组服务
器进行负载均衡,通过前端的负载调度器(Load Balancer),无缝地将网络请求调度到真实
服务器,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务
就像访问一台高性能、高可用的服务器。客户程序不受服务器集群的影响不需作任何修改。
系统的伸缩性通过在服务集群中透明地加入和删除一个节点达到,通过检测节点、服务进
程故障和正确地重置系统达到高可用性。由于负载调度技术是在 Linux 内核中实现的,所
以称之为 Linux 虚拟服务器。
LVS三种模式
图1
如果把 NAT 的过程稍微变化,就可以成为负载均衡的一种方式。其原理就是将从客户
端发来的 IP 包的 IP 头目的地址在 DR 上换成其中一台 Real Server 的 IP 地址,并发至此
Real Server,而 Real Server 则在处理完成后把数据经过 DR 主机发回客户端,DR 在这个时
候再将数据包的原 IP 地址改为 DR 接口上的 IP 地址即可。缺点是无论进来的流量还是出
去流量,都要经 DR 处理,这样对性能就会产生一定的影响。
2.IP 隧道模式
隧道模式类似于 VPN 的方式,使用网络分层的原理,在从客户端发来的数据包基础上,
封装一个新的 IP 头标记(不完整的 IP 头,只有目的 IP 部)发送至 Real Server,Real Server
接收后,先将 DR 数据包还原,然后直接返回给客户端,而不需要再经过 DR,如图 2 所
示。需要注意,由于 Real Server 需要对 DR 发来的数据包进行还原,也就是必须支持 IP
Tunnel 协议。因此,在 Real Server 内核中,必须编译支持 IP Tunnel 选项,对于 Linux 2.6
内核不再需要编译内核,默认已经支持。
图2
3.直接路由模式
直接路由模式比较特别,前两种模式基本上都是工作在网络层,而直接路由模式则是
工作在数据链路层。其原理为 DR 和 Real Server 都使用同一 IP 对外服务,如图 3 所示。但
图3
Heartbeat 介绍
LVS集群系统环境
图4
配置此集群分为 4 种情况:
◆ 配置基于 DR 模式 LVS 集群;
◆ 配置基于隧道模式 LVS 集群;
◆ 配置基于高可用 LVS+Heartbeat;
◆ 充分利用资源将 DRbak 做为 Real Server,此种配置方式可以加强 LVS 的主节点的高安
全性前提下(主节点简称 DR,备份主节点 DRbak)。
本文介绍第 3 种情况:配置 LVS+Heartbeat
1.使用 DR 或/tun 模式
本例使用 tun 模式,Director Server 端脚本文件如下所示:
more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.n
GW=192.168.0.1
. /etc/rc.d/init.d/functions
…………
Real Server 端同样使用上面的配置文件就可以。
2.安装配置 Heartbeat
下载 libnet 1.1.2.1 版本和 Heartbeat 2.0.2 版本,Heartbeat 下载地址为
http://www.linux-ha.org/download/,运行如下命令进行安装:
tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install
修改主配置文件(/etc/ha.d/ha.cf),下面介绍一些主要参数的用法及功能。
◆ logfile /var/log/ha-log:指定 Heartbeat 的日志存放位置。
◆ crm yes:是否支持 ClusterResourceManager(集群资源管理)功能。
◆ bcast eth1:指定心跳方式使用以太广播方式,并且是在 eth1 接口上进行广播。
◆ keepalive 2:指定心跳时间为 2 秒(即每两秒钟在 eth1 上发送一次广播)。
◆ deadtime 30:指定在 30 秒内没有心跳信号,则立即切换服务。
◆ stonith:用以保证共享存储环境中的数据完整性。
其他一些插件可以在/usr/lib/heartbeat 下找到,也可以添加如下一些插件:
#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient
编辑资源文件(/etc/ha.d/haresources)
,修改如下内容:
ns.ghb.com IPaddr::192.168.0.127/24/eth0 httpd
设置 ns.ghb.com 为主节点,集群服务器的 IP 地址为 192.168.0.127,netmask 为
255.255.255.240,该集群的服务器有 httpd 服务。
编辑认证文件(/etc/ha.d/authkeys),选取一种认证方式,并且设置权限为 600:
auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password
使用同样的方法配置节点 2,备份节点 192.168.0.126 上的 Heartbeat 和 Apache 的配置与节
点 1 完全相同,LVS 配置也要相同。
3.整合 LVS
安装完成后进行测试,关闭主节点服务器,另一台自动接管,主节点恢复后自动接管
服务。如果以上测试通过,那么开始与 LVS 整合。
配置 Ldirectord,Ldirectord 的作用是监测 Real Server,当 Real Server 失效时,将其从
Load Balancer 列表中删除,恢复时重新添加,编辑 Ldirectord 配置文件/etc/ha.d/ldirectord.cf,
修改如下内容:
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=192.168.0.100:80
real=192.168.0.127:80 gate
real=192.168.0.128:80 gate
fallback=127.0.0.1:80 gate
…………
在每个 Real Server 的中添加监控页,运行如下命令:
echo "Test Page" >> /var/www/html/test.html
修改 Heartbeat 的资源文件/etc/ha.d/haresources,修改内容如下:
ns.ghb.com 192.168.0.100 tunlvs ldirectord httpd
分别在主节点和备份节点启动 Heartbeat:
/etc/init.d/heartbeat start
关闭主节点,备份节点将自动接管 Director Server 服务,那么以上配置成功。
以上是笔者配置 LVS+ Heartbeat 的过程,本过程还没涉及到共享存储,共享存储在集群的
整套解决方案中占有相当重要的地位,简易实现通过 NFS 也可以实现共享存储,但是在要
求更大、更快时,则需考虑其存储方式,如 SAN 等。
混源新世界
微软与开源的故事
陈杰
春去秋来我们都无法抗拒时间及命运,无论发生了什么,也无论忘怀了什么,岁月的
痕迹让人无法抹杀它的到来,也无法强留住它的过去。在当今如火如荼的开源运动大潮中,
我们依稀的看见一个庞大的身影正蹒跚着向我们走来,仔细分辨,居然是曾经开源软件的
对头,全球软件霸主微软帝国。很多人正为在开源的世界发现微软的身影而好奇甚至争论
不休的时候,我们穿越时空的隧道发现微软迈向开源世界的通道已经很多个年头,从起初
的步履蹒跚到如今的步伐轻盈,微软已经走过了春秋,穿越了丛林,在历经开源成长的种
种之后终于浮现在了人们的眼前。
有人惊叹“微软也开源?”也有人不屑一顾“这只不过是微软战略的一部分。”更有人
振臂高呼“微软大步迈向开源是微软的觉醒,是开源运动取得阶段性胜利的标志。”无论是
对于醉心于商业联盟的支持者还是专注于开源世界的爱好者,微软迈向开源都是个不争的
事实,不管是通过直接开源的形式还是通过合作及共享的模式,微软正日益频繁的参与开
源社区的事务,曾经剑拔弩张的硝烟气息已经渐渐变淡并弥散在空气中,而我们更多的将
看到微软与开源你中有我,我中有你的和谐景象。
对于微软日益走近开源,开源社区保持着谨慎的态度,一方面希望微软介入开源,为
开源事业提供持续的增长动力;另一方面,也担心微软的介入,瓦解了目前开源世界的产业
联盟,甚至直接影响了开源运动的进程。作为世界上最成功的商业公司,微软迈向开源是
有其商业目的,或者是为了其软件不被边缘化,或者是为了与开源厂商合作牟取更大的利
益,或者是认同了开源社区这一先进的开发机制,至少绝对不会只是秉承开源精神的奉献。
对于单方面寻找商业模式的开源厂商,这些厂商也在积极与私有软件厂商展开合作,以便
寻求到最适合自己企业的商业模式,毕竟开源也得盈利。开源与私有软件厂商正在寻求一
种临界地带,都纷纷的往过去的临界点靠拢,未来的软件世界将是由开源与私有共同演绎
的商业世界。
封闭中的启航
坚冰的破碎
向中间靠拢
争论通常导致两种截然不同的观点,没有什么能比“开放源代码”和“商业”软件应
该扮演的角色和可以带来的益处的争论更能说明这个问题。然而,随着时间的推移,要证
实两极化的争论中哪种观点正确越来越困难,因为目前争论的双方都在向一个共同的“中
间”立场靠拢。商业软件开发商正在采用更加开放的策略,开放源代码软件也正在寻求更
多元化的商业模式,过去对立的两边正在不约而同的走向中间地带。
现在很少有软件公司会称自己纯粹是商业性质的,同样也很少有不依靠某种形式的商
业赞助和商业关系维持的纯粹开放源代码软件项目。实际上,已经有研究结论声称,这两
种模式是互补的:“不可能通过削弱专有软件市场来加强开放源代码”,因为专有软件有助
于形成一个创造收入、工作机会和产品创新的商业市场。
最终的融合
在如今日新月异的信息技术市场上,企业和其他组织通常使用不同种类的 IT 网络,而
这些 IT 网络通常来自不同厂商提供的硬件和软件。在这种环境下,从技术上和商业上就对
互操作性提出了要求。互操作性也是政府促进创建一个健康、富含竞争性和创新性的 IT
生态系统和政府软件采购程序背景下的重要目标。
当横跨在开源与商业软件之间的坚冰破碎后,互操作问题也是开源软件与商业软件最
终是否能融合的关键。开源与商业软件的互操作包括几个层面,有操作系统之间的互操作
问题,也就是人们耳熟能详的跨平台;也有同一操作平台下软件的互操作问题,也就是我们
经常提到的兼容问题;还有文档之间的互操作问题,文档必须实现在不同平台、不同办公套
件下的统一标准,才能真正的实现互操作。
陆首群教授表示:“执行开放标准,解决互操作性,已成为当前软件产业发展中的一个
核心问题。各种开源软件与私有商业软件在各自相互之间,在各个层次上都存在互操作性
的问题,包括标准的互操作、架构的互操作、驱动程序的互操作、硬件平台的互操作、网
络的互操作、文档的互操作,以及应用软件与操作系统之间的互操作。开源软件在互操作
的问题上比较有优势,它充分体现开放标准实施的过程,既适合于建立开源架构,也适合
于建立混源架构,且更有利于建立在松耦合条件下面向服务的架构,同时开源软件的社区
协作开发方式,是建立开放标准统一平台的一种创新模式。
”
对于开放源代码更有利于解决不同软件的互操作问题,李科研表达了不同的看法:“其
实我不认为软件开放源代码了,就能很好的解决互操作的问题。我认为解决互操作的根本
问题在于标
准,这包括
开放的标准
和厂商的标
准,只有在
解决互操作
的问题上形
成了统一的
标准,才能
真正解决互
操作的问
题。因为任
何一个人都可以修改开放源代码软件的源代码,即使所有开放源代码软件的产品在其诞生
的那一刻是支持标准化的,但当用户对这些软件产品按照自己的意愿和使用情况进行更改
的时候,就会出现不可兼容和不符合标准化的情况,这种对源代码的更改同时也增加了为
实现和测试互操作性而额外增加的成本。”
解决软件的互操作性已成为当务之急,并已形成当前软件产业发展中的一股技术潮流。
互操作的问题不只是源代码是否开放的问题,更深层次的问题表现在各个层面缺乏统一的
标准,解决互操作的问题需要开源软件与私有软件的共同参与,当然也少不了微软。
对前一段时间,喧嚣尘上的业界如金山公司对微软在其 Office 办公软件套件互操作性
的问题的担忧,据介绍,目前在中国已经有了实质性的合作,比如,微软与北航已经在互
操作性的问题上开展合作,北航已经针对办公套件开发了转换的插件,对双向操作进行了
完整的规划。目前第一阶段,已经完成了单向的功能,用户已经能够在著名的开源项目社
区网站 Sourcforge 上的项目页面进行下载。相信随着开源软件与私有软件的日益融合,标
准的不断完善,互操作的问题将在各个层面全面开花。
有人把这次微软“进入开源世界”看成是“微软冲击波”,使早在 1998 年趋于统一的
两个概念:自由软件(Free Software)和开源软件(Open Source)的争议又起。有人认为:
“微软借机劫持开源一词”,“现在是时候了,让我们回到过去自由软件的时代”。
对此,Linux 基金会执行主席 Jim Zemlin 号召大家要尊重微软,他表示:
“Linux 需要
认识到,微软在某些方面的领导地位。Windows 与 Linux 已经形成两元系统。这种客观事
实的存在,要求我们承认和面对一些关于软件的偏见,而不是一味地否认它。”正如 Jim 所
言,开源与私有软件将长期共存,而真正收益得将是最终的用户。
记者手记
后翻阅资料发现众多的开源项目背后都能看到微软的身影。对此,笔者大为惊讶,微软也
积极参与开源?微软参与开源的目的是什么?开源社区对于微软又是怎样一种态度?这些
问题萦绕在记者脑中。
无独有偶,今年 7 月,微软开源总监 Bill Hilf 宣布微软大踏步的迈向开源,微软从过
去“暗中”支持开源项目到如今“明目张胆”的走进开源世界,是开源世界的变化吸引了
微软这样的软件巨头?曾经对立的关系就这样烟消云散?还是微软参与开源另有噱头?
这些疑问成为了写这篇报道文章的一个初始目的。走进微软的开源世界,发现微软几
年前就不同层次的参与到开源世界中,虽然可能层次不同、模式不同、参与程度也不同,
但是可以看到微软一直在试图从封闭走向开放。所以这篇报道主要梳理了微软参与开源世
界的历程,披露一些不为人所知的微软对众多开源项目的支持,对于微软与开源世界需要
精诚团结,共同解决的互操作问题、混源架构的发展问题,也分别听从了来自微软与开源
社区专家的意见。
微软走向开放是一件振奋人心的事情,无论是对于开源世界还是私有软件的世界。当
微软与开源都纷纷调转自己的航线,当横跨在微软与开源之间的坚冰破碎,当微软与开源
真正解决互操作问题达到互相的融合,我们有理由相信,混源将在未来的 IT 环境中扮演
重要的角色,而真正受益的将是最终用户,未来的 IT 环境将是混源的天下。
微软作为全球软件界的领袖,Windows 是最成功的一种操作系统,今天 Linux 取得了
迅猛发展,已开始形成由 Windows 和 Linux 操作系统构成的两元操作系统平台。同时,众
多著名的开源项目运行在 Windows 的平台之上,面对这样的形势,竞争与合作将是微软与
开源世界今后发展的主旋律,这正如辩证法中对立统一的观点,在合作中展开竞争,在竞争
中寻求合作。
探讨“混源应用”发展之道
混源,是最近两年才出现的新词汇,由“mixed source”翻译过来。是相对于闭源软件
(closed source)和开源软件(open source)而言,它是兼有闭源软件和开源软件的一种混
合体。
提到开源,第一个浮现在脑中就是 Linux,公共的代码和年轻的理想主义者。尽管开
源哲学已经做了很多有意义的工作,但大家都认为它还没完成它真正的内在需求。人们更
希望数据能够被公开而不是代码。代码可以,经常也应该被一次又一次的重写,重构,但
是只有合适的数据才能使系统运转。
随着技术的发展,我们所用的计算设备,互相联系的越来越紧密。举个例子来说,你
的日程安排软件的代码是开源还是的私有的变得越来越不重要;无论你使用微软的 IIS 还
是 Apache,使用.NET 或 X.org 都不重要。真正重要的是这个日程数据是不是符合(例如)
iCalendar 格式。当数据的重要性明确以后,应用软件的来源,它是开源的还是闭源的,都
无关紧要了。这就是混源应用的初衷,最基本的出发点。
“混源应用”听起来复杂,但是在平时的应用中,我们常常有意无意地实施了混源应
用。从客户端的角度来看,混源应用很普遍。如 Firefox、7-Zip 等,都占据了一些份额。
最近出现了模仿 Debian Linux 及其衍生版本的 APT 软件包的升级方式,即 win-get,类似
apt-get,这就是混源应用的一个很不错的尝试。从服务端角度来看,混源应用的环境也是
很广泛的。知道 WAMP 吗?就是 Windows 平台搭配开源的 Apache、MySQL、PHP,其实
就是一种混源应用。微软已经计划在 IIS 7.0 模仿开源 Apache 的特性,通过 FastCGI 原生
支持多种开源开发环境,如 PHP、Python、Ryby on Rails 等等。这就是开源和微软闭源有
趣的结合。
越来越普遍的混源应用已经越来越多地引起人们的注意,关于混源应用的讨论话题也
成为热门,混源相关的问题将各路专家引向了同一个圈子。为此,51CTO.com 建立“开放
应用技术博客圈(http://www.51cto.com/exp/fsource/)”,汇聚了来自开放社区的开源专家,
微软、IBM 和 Oracle 等厂商的技术高手,大家英雄不论出处,共同提供在技术应用方面的
最佳体验,为广大技术人员提供专业的帮助。
混源应用并不是开源和闭源之间不可调合的战争,也不能简单的看作是开源和闭源之
间的妥协。所以,讨论“开源闭源孰优孰劣”的命题,没有意义,因为如今应用的环境,
完全闭源的环境和完全开源的环境很罕见了;对用户来说,如何将我们的软件应用到极致,
这才是我们的工作重点。