2008-02-27

[转]常用开源协议的详细解析

作者:Charles Huang 来源:javaeye.com 发表时间:2006-04-10

开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的。开源运动同样有自己的游戏规则和道德准则。不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿。

现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种。我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。

这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考。

BSD开源协议

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但“为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

Apache Licence 2.0

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

1. 需要给代码的用户一份Apache Licence

2. 如果你修改了代码,需要再被修改的文件中说明。

3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

GPL

我们很熟悉的Linux就是采用了GPLGPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linuxlinux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须也采用GPL 协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL

LGPLGPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。 LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。

P.S. 随手写写,是因为跟客户交谈的时候发现很多人其实对开源有完全错误的理解,特别是开源协议。很多人认为只要是开源,就意味着随便用,随便改都可以。

dlee补充:

这些知识 Linux Fans 大多比较清楚,因为经常使用开源软件,每天下载源代码,编译、测试、安装是常事。这些问题在各个 Linux 论坛上也早已经是老生常谈,但是有些 Java Fans 以及大多数 M$ 平台的开发人员几乎一无所知。我在这里一般不会谈跟 Java 关系不大的内容。既然 Charlesxp 想谈谈,我也补充一下。

首先,软件有两种分类方法:

商业软件 vs. 免费软件

商业软件:软件是要卖钱的。

免费软件:软件不卖钱,出于兴趣开发,可以随便使用。

开源软件 vs. 私有软件

开源软件:软件的源代码是公开的,可以在遵守某种 license 的条件下加以修改。

私有软件:软件的源代码不公开,用户仅仅只能得到软件的二进制版本。

   从上面的两种区别我们可以看出,开源软件和商业软件不是对等或对立的关系,开源软件同样也可以卖钱。但是给了你源代码,你如果没有一定的功力也未必能看 懂。而且用户常常不具备相应的能力(没有从事过软件开发),仅仅想要使用软件的功能。既然这样,开源对于这类用户还有何意义呢?开源可以保护这类用户免于 陷入厂商设置的锁定陷阱。因为提供了全部源代码,只要用户能找到有能力维护这些代码的人或公司,他就可以持续发展这些代码的功能。这个人或公司不一定是最 初卖软件给他的那一家。用户不会在大部分功能用的好好的,某个关键功能无法使用的时候,买家告诉他,你希望获得的这个功能在我们的下一版本中有,但是你必 须支付我们 10w$ 升级费我们才可以提供。这个就叫做厂商锁定。如果软件不是开源的,用户没有办法做出选择,上了贼船后想下来可就难了。所以开源的商业软件对于保护用户自己的利益是非常重要的。用户可以获得真正的安全,而且更体现了软件的本质就是一种高级的服务。

  那么有人会担心,这样做究竟能不能赚到钱?你能不能赚到钱要看市场和需求有多大。只盯着厂商锁定一种方式来赚钱其实是一种短视的行为。现在国内大部分软件开发商都不重视维护和服务,仅仅靠卖软件本身的 copy license 来赚钱,用户感觉不到自己是上帝,怨声载道。其实用户所需要的还是长期的维护和服务。所以这样的软件如果真能把服务做好,用户是会非常欢迎的。既然经过分析预计会有很大的需求,从长期看,我相信肯定是可以赚到钱的。

  还有一类软件:共享软件。这类软件不是开源的,但是有免费的版本可以使用。如果你用的很爽,良心发现了,可以把钱汇给作者。如果希望作者提供服务,也可以找他谈。国内很有名的 FoxMail 就是这类软件。但是对于用户最有价值的一类软件,其实还是开源的商业软件。

  开源软件卖的是长期的服务,不是软件本身的 copy。不是所有的软件都有可能卖服务,也不是所有的用户都需要服务(这个问题我们以后可以讨论)。但是一个大型企业或者重要的政府机关,假设使用了 JBoss+MySQL 这种组合,长期的服务是非常必要的(至少出了事情可以找到一个替罪羊)。你问这个问题就说明你没有多少企业应用的经验,不知道 IBM 这些公司的商业模式就是建立在 IT 服务的基础之上的。开源软件提供了一个新的组合,对于更好地做好这种服务非常有帮助。实际上,IBM 的解决方案中就包括了大量开源的成果。HP 做的方案也有采用 JBoss 的,为了得到长期的服务,HP JBoss 专门签订了长期合作的协议。

中 国国内由于市场容量的限制,以及用户缺乏信息化的经验,对于软件长期服务的重要性认识不足,因此总是只看到软件本身的售价,给了一些夫妻店竞相压价钻空子 的机会。但是必须承认,这并不是一种良性竞争的状态。最终还是要走到切实为用户做好服务的道路上来的。服务是值钱的,不是免费的。你去路边的理发馆随便理 个发,5 块钱,出来以后仍然蓬头垢面。你去高级发廊做头,500 块,但是你得到了按摩等各种服务(不要联想引申),身心得到了放松,出来以后精神焕发。你只盯着路边的理发馆,但是仍然有别人愿意去高级的发廊。

  当然,真正要做好服务,对于技术等各方面的能力要求是非常高的。这种要求不是随便哪个夫妻店就能够达到的。

robbin补充:

  Richard StallmanGNU创始人和GPL的创造者,Stallman开发的比较著名的GPL软件包括GNU GCCGNU Emacs。其中EmacsStallman独立开发的早期也是卖钱的。Stallman定的Emacs售价为每份150美元。

  因此请记住: 开源软件不等于免费软件。

2008-02-25

Nautilus 总使用旧样式打开的解决办法

参考:http://gnome-hacks.org/hacks.html?id=60

同学的gentoo装了gnome,但是用nautilus浏览文件时总是旧样式,没有sidebar,也没有toolbar。

根据链接里的内容用nautilus --browser后可以用新样式了

而若想每次都这样则修改gconf,把/apps/nautilus/preferences/always_use_browser设为true

2008-02-24

再次遭遇reiserfs文件系统错误

为了重现上次文件系统的问题,也为了找到上次出问题的原因,我又一次捣鼓了休眠的功能。

这次是用菜单休眠的,按理说应该没什么问题,但是由于重启是用我自己编译的内核启动的,而且参数似乎没设对,因此没能自动唤醒,而是正常启动。中间似乎有个关于swap的服务,显示fail,不过当时我没注意。另外值得注意的是,这次启动过程中fsck.reiserfs有些replay的动作。

后来进行了很多操作,按了一些软件包,其中还创建的新的用户和组。没任何异常。但是重启时,我又想起来了那个resume参数,加上以后,也没什么异常,直接关机了。

但是再次重启后,问题重现了。首先是一堆reiserfs的错误,应该是上次开机后进行了大量文件操作的缘故。之后自然shell也进不去了。

***

这一次,问题的原因很明显了,应该就是休眠时文件系统没有同步,然后正常启动后把那些操作都replay了,之后进行的新的操作,然后我又恢复了休眠时的状态,这样造成了文件系统的错乱。

本想着用上次的办法骗来一个shell,但是这次告诉我PAM failure之类的错误,我心想坏了,估计/etc/passwd之类的文件挂了,因为上次开机后中间新建了用户和组。

***

有了上次的经验,我估计不用安装盘没戏了,花了一天下了个Ubuntu 7.10 alternate的CD,然后从ubuntu网站xxx上下了硬盘安装所需要的hd-media文件,vmlinuz和initrd.gz.准备用它恢复。

由于我本身有grub,而且能够正常运行,因此不需要下而外的grub4dos,我把vmlinuz, initrd.gz和CD映像放在移动硬盘里,开机前插上。启动进入grub后,进入shell,输入

kernel (hd1,0)/vmlinuz root=/dev/ram0 ramdisk_size=170000 devfs=mount,dall
initrd (hd1,0)/initrd.gz
boot

于是从移动硬盘启动了,看到选择语言界面后,按Alt+F2换个控制台,按回车就出来个busybox。


不过遗憾的是它虽然支持reiserfs,但是没有reiserfsck,几分钟后我想到了可以把那块磁盘只读挂载,这样也许就不用检查了,果然如此。

之后就可以用那个盘上的reiserfsck来修复了,这次不需要中间super block(应该是上次已经重建过的缘故),只需要--rebuild-tree 和 --check就可以了。另外我用了chroot,但是似乎不用也可以运行reiserfsck。

这次也没花很长时间,但是报的错误比上次多很多,而且有很多关键的文件。我心里一时没了底,但是心里明白,都是安装软件惹得祸,特别是还创建了用户和组,弄不好就。。。

***

本以为一些就像上次一样顺利,但是重启后虽然没有reiserfs的错误,却出来一堆modprobe的错误,之后shell也进不去,仍然是PAM failure。

我再次用hd-media启动,挂载磁盘一看,/lib/modules/ 竟然都没了!不过是意料之外,情理之中。另外我查看了一下/etc/passwd,/etc/group,/etc/shadow等文件,都是莫名其妙的xml文件(后来知道是/etc里的另一个文件,应该是指针交叉了),幸好还有/etcpasswd-,/etc/group-,/etc/shadow-,于是简单恢复了一下,以为没事了。

用另一个内核启动后,虽然没有modprobe的问题,但是仍然有PAM failure,我估计文件系统乱得够呛了,决定重装。

***

首先要备份的当然是~,之后是/usr/local,还有一些/etc/下的配置文件(我后来挑拣出来一些我修改过的备份出来)

另一个要备份的就是已安装的软件,我查到可以用dpkg --get-selections得到列表,于是用hd-media启动,然后chroot,但是运行时告我/var/lib/dpkg/status错误,我一看,压根儿没这个文件,一下没招儿了,肯定是当时装软件时弄的。不过又一想,重装是对的,系统估计也很难恢复了,而且我正好也想重分一下区,换换文件系统。

最后一个备份的就是/var/cache/apt/archieves,这是apt存档留下的deb文件,虽然不全,但是可能能省点带宽,所以也备份了。

***

重装前我还想调整一下分区,有个不常用的FAT分区,我想腾出点空间给linux,于是下了个Partition Magic,另外要注意的调整后是否还能启动,因为现在硬盘上有grub,是在Linux分区上,因此用PM只是把那个FAT分区分割,而没有跟Linux分区合并,否则就不能启动了。

***

参考了wiki.ubuntu.org上关于硬盘安装ubuntu的文章,知道可以把iso放FAT硬盘上,hd-media可以自动识别(伟大!),于是为了快一些就把移动硬盘上的iso挪到了一个FAT硬盘上,重启。

重装时对分区动了些脑筋,有31G的空间,最后的结果如下

12G XFS linux系统
15G XFS /home
1.5G swap
0.5G reiserfs /boot
2G reiserfs 一个最小系统,以及hd-media和ubuntu映像,用于紧急情况

其他就没什么了,等着便是

***

不一会儿装好了,剩下就是把那些文件拷回去,再补上却的软件了。不过考虑到我家网费,还是决定回学校再装软件,所以现在只是把文件拷回去了。但是现在软件,库之类的版本不一,仍然不大敢用,就等着更新软件了。

***

尾声&总结

1.找到了上次问题的原因,以后要慎用休眠,以及自己编译的内核,毕竟ubuntu的内核多了很多东西,或者挂个initrd是否会好些?另外就是正常启动时要让休眠镜像失效
2.分区分区!
3.备份备份!
4.查了查资料,这次换成了XFS,不知会如何
5.ubuntu重装,总的来说,还是很容易的,最好是联着网装,这样直接装最新的,省去了不少时间
6.不要太相信文件系统如何如何安全,我倒不是针对reiserfs,其实它确实挺好的

2008-02-23

gnome下美化qt程序外观

参见http://linuxtoy.org/archives/change-qt-applications-look-and-feel-under-gnome.html

Ubuntu默认情况下qt程序外观不咋好看

安装qtconfig-qt3或qtconfig-qt4(依照实际版本),以及polymer

运行qtconfig,修改GUI style为polymer

这样qt程序的外观会比默认好很多

2008-02-20

Windows XP 强制取消更新

症状:大概是由于某次更新安装失败,每次关机时都提示安装更新,而且数目都一样。平时右下角也没有黄色盾牌的图标。

解决办法:
1.杀wuauclt进程
2.关Automatic Updates服务
3.把c:\WINDOWS\SoftwareDistribution\DataStore改名
3.运行wuauclt /detectnow以恢复更新功能(Automatic Updates服务也会自动开启)

其中第3步应注意备份。
另外对此解法我也不是很肯定,但是在第3步中在c:\windows\SoftwareDistribution里捣鼓一番是肯定没错。

2008-02-19

workrave: 合理控制使用电脑时间

有点像之前说过的eyeguard,只是这个是跨平台的,比较不错。

一点小遗憾是windows下,gtk会自动选择语言,我这里中文显示不正确。于是乎把workrave的中文locale目录删了,呵呵,之后就是英文界面了。不错。

2008-02-17

遭遇reiserfs文件系统错误

第3天,我的ubuntu终于回来了。

在讲故事之前,先交代一下我的系统:

我的电脑双系统,windows xp和ubuntu 7.10
硬盘分了5个区,一个ntfs放windows,两个fat32放windows程序和双系统公共数据,一个reiserfs放ubuntu,最后一个swap
ubuntu有两个内核可以启动,一个是自己编译的2.6.24.2 另一个是ubuntu自己的2.6.22-14-generic

***

事情还要从编译内核说起,那天编译内核是发现有个hibernate的支持,说明里是说可以用echo 'disk' > /sys/power/state来休眠,于是编译好内核并用它启动后便试了试这个功能。

运行这个命令后系统很快就掉电了,没什么异样。

重启后和没休眠没什么两样,这让我有些疑惑,后来想起好像需要在启动是加上resume=<休眠swap分区>的参数,于是修改了/boot/grub/menu.lst,再用那个命令休眠。

但是,谁能想到,从那时起,到我那linux再次正常启动,竟花了3天时间

当时已是深夜,母亲催我入睡。 料我昏昏欲睡之时也不大可能搞好--不把电脑弄的更糟那就是万幸--睡吧,明天再说。

***

第二天白天都串亲戚去了,晚上才开始动手。

再次启动时,突然发现grub选择操作系统的菜单消失了,迎接我的只有一堆提示信息和一个grub>的shell提示符,愣了几秒后我反过神来,凭印象输入引导命令,但是总报错,按help得到了命令列表,其中有个cat,于是cat /boot/grub/menu.lst,但是提示inconsistnet filesystem,于是我大概明白了发生了什么--似乎时休眠时文件系统没有同步好。

按tab命令不全时发现了原来还有/boot/grub/menu.lst~这个自动备份,于是cat看看,记下了命令,先进linux看看吧:

root (hd0,5)
kernel /boot/vmlinux-2.6.24.2 root=/dev/sda6 ro
boot

但是不一会fsck报出一堆错误,还说必须用--rebuild-tree修复,都说reiserfs很稳定,我一直也这么觉得,遇上这么严重的问题,我还是大姑娘上花轿--头一回。

这次仍用上面的命令,只是加上了 resume=/dev/sda7,神奇的是竟然成功唤醒了休眠时的状态。由于grub的问题,我查看了/boot/grub/menu.lst,权限各栏都是问号,用root也不能进行操作(编辑,删除)。我当时只是觉得文件系统出了问题,也没多想,就关机了。后来想想,可能这时候多拷贝出些文件,或者再次休眠才是好注意。

以后启动就一直是失败,resume参数也不灵了。 我意识到问题严重了,开始想办法修复

***

首先想到的当然是用fsck修复,但是既然硬盘不行了,就只能用U盘启动了,我以前只做过dos启动盘,linux启动盘还是没有接触过。只好上网查查了,首先要进去windows,在grub shell里输入

root (hd0,0)
chainloader +1
boot

还好还好,windows完好无损。

几经查找,几番折腾(重启了若干次),我用syslinux和ttylinux做好了一个启动盘,成功进入的一个linux2.6.14,似乎成功在望了,而其实,还差的远。

不知是不是为了省空间,ttylinux不支持reiserfs,mount不认识,fsck.reiserfs也没有。唉,毕竟是个不到6M的系统,人家也不容易。

后来下了个50M的Damn Small Linux,我那32M的U盘已经放不下了,于是用老爸的移动硬盘(杀鸡时如果只有牛刀可以用,也得用啊)又搞了一下,启动后到不错,还有个简易的图形界面,而且竟然还有游戏--虽然linux只是2.4,虽然仍然不认reiserfs。 唉,又白搭。

这时想到了ubuntu的iso(手边没有盘,要是有盘我早弄好了。。。),开始下,但是可怜我们家的网速,要一个半小时才能下完。想到我家这月上网时间所剩不多,放弃了。

现在的问题是没有fsck.reiserfs,也就是reiserfsck,而我现在只有linux分区上才有这个文件。这就是个鸡生蛋蛋生鸡的问题。 突然想到何不从别的地方搞一个?网上搜了半天没有结果,于是让同学给传了一个。 欣喜地(用u盘)重启后发现还要个libuuid库,这哪有? 不想再找同学传了(谁知道还有几个依赖的库?当然。。。也许就这一个),而且又到了深夜,不弄了。

***

第三天,一起床就开始搞。

想了很多办法,试图用U盘上的内核挂上硬盘上linux分区,都失败了。

这时不知怎的有想起linux的recovery模式了,就是加上个single的内核参数。启动后虽说fsck也失败了,但是还是要管理员密码,看来有点门儿!

不过,输入了密码后没有见到root shell,却被告知sulogin terminated,也不知怎么回事。

一定要搞个shell来,我这样想着,想着,突然心生一计,记得以前刚学会sysrq魔术键时在启动时乱按,弄出个busybox的shell来,似乎还是initrd阶段的(后来知道应该是init被中断自动重启),何不试试看呢。

仍用single模式重启,我试着按alt+sysrq+k,但是只是看到进程被杀,就卡在那里了,没有反应,多次重启并在不同地方尝试,仍未成功,直到再次看到give root password for maintainance or type Control-D to continue。我已经知道输了密码后会说sulogin被中止,而此时按alt+sysrq+k也类似。只好按control-d了,这是系统开始关机,依次结束各个服务和进程,之后系统就断电了。

再次重启,我再最后一个地方试alt+sysrq+k,也就是按control-d后的那个阶段,这一次,只见init terminated, repawn之类的提示,啊,终于看到login了,我用普通用户登陆,然后sudo bash,试了一下,/是只读挂载的,太好了!

按照http://www.chinaitpower.com/2005September/2005-09-13/200571.html上的方法,我开始修复:

方法如下

1,dmesg |grep reiserfs |grep partition
查看你的 reiserfs 文件系统是那个版本的(在后面要用到)

2.fsck.reiserfs --check /dev/partition
如果报错不能修复,转3,否则结束。

3.fsck.reiserfs --rebuild-sb /dev/partition
重建 super block

重建时会让你选择文件系统版本,根据刚才得到的版本号选择

4.fsck.reiserfs --rebuild-tree /dev/partition
尝试重建文件系统树

5.fsck.reiserfs --check /dev/partition

我实际操作时,第4步一开始说剩余时间8000多秒,2个多小时啊,吓我一跳(我那个分区用了18G),但是过了几分钟后剩余时间突然变成260秒。整个过程不到10分钟就结束了,而且感觉出问题的地方并不多。万幸万幸。

另外第3步时并没有问我版本号。另外我一开始没看到第5步,第4步成功后就高兴地重启了,但一般启动总报错,是ata模块报的,好像是某某状态错误。最后用single模式进入,中间有fsck的提示,进行了一些操作,大概做了些标记,之后sulogin仍然失败。但是感觉上文件系统已经没问题了,于是再次重启。

这一次,没有任何异样,一堆系统消息后,屏幕一闪,啊,终于看到了熟悉的登陆界面。啊!终于弄好了!

***

现在分析一下问题的起因,应该就是我休眠和恢复没有弄好,导致文件系统没有同步好。至于具体的原理,其实现在也还是不大清楚。只是现在不敢用那条命令进行休眠了。

另外就是再休眠的那个会话里我还在一个FAT分区下了些文件,结果到windows发现那个地方也不正常了,后来全盘扫描了一遍才恢复。

***

总结
1.备份很重要,自动备份的/boot/grub/menu.lst~还是很有用的
2.分区很重要,我很后悔当时没有把/boot, /home等单独分一个区,现在想分也很麻烦
3.最好准备一个应急启动盘,而且至少要支持自己硬盘的文件系统
4.文件系统再稳定也没用,还是应该平时注意保护和保养
5.应该熟记grub命令和kernel参数,关键时刻还是挺有用的
6.那个syssq魔术键我自以为用得还是不错,至少骗来个shell,在最后时刻发挥了决定性的作用。我最好再看看其他魔术键的功能
7.不要轻易尝试危险的东西,如那个休眠的命令。有时,分辨一个东西是否危险的能力更加重要


就写这些了。可能系统还有些后遗症,但是已经无大碍了。能恢复成这样已经万幸了。

制作u盘linux启动盘

前几天电脑坏了,想弄个linux启动盘应急修复一下,最后虽然还是没派上用场,但是至少启动盘弄出来了,在此记录一下。

需要的工具有
syslinux, 可以从http://www.kernel.org/pub/linux/utils/boot/syslinux/下载一个可以启动的linux映像,为了弄在U盘上,我选择了不到6M的ttylinux

由于是linux坏了,以下操作我都是在windows中进行的

1.解压syslinux
2.插入U盘
3.把linux映像解压到u盘,注意是解压不是拷贝
4.运行syslinux -sfma
5.由于ttylinux的映像是isolinux映像,所以应该做一些修改,把U盘里isolinux目录改名为syslinux,再把里面的isolinux.cfg改名为syslinux.cfg

这样就ok了,其中第5步我花了好久才悟出来
另外syslinux压缩包里也有linux版本

2008-02-10

firefox 拼写检查导致崩溃

最近更新了一下,然后firefox就不正常了,gmail里写不了邮件。
看控制台消息,报 /usr/lib/firefox/firefox-bin: symbol lookup error: /usr/lib/firefox/components/libmyspell.so: undefined symbol: _ZN8Hunspell5spellEPKc

之后在https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/107340找到了问题原因,是拼写检查模块libhunspell的问题,解决办法为禁掉firefox的拼写检查(about:config然后设置layout.spellcheckDefault=0),或者把libhunspell降级(我这是1.1.5,据说1.1.4就没问题)

2008-02-07

Motorola手机输入法

我现在用的是Moto的一款不算很新的机型,A768i

在使用过程中我发现它的输入法联想十分体贴,之一是可以根据通讯录的姓名进行联想,这样输入人名快速准确,之二是可以发短信时可以根据历史短信内容进行联想,这样发类似消息时就轻松了很多。

真是十分不错的功能,巧妙而独特,至少我没在其他手机上发现这些功能。

在此称赞一下,期待更多惊喜。