2006年11月30日 星期四

Ubuntu与游戏

一个在各种领域被普遍应用的操作系统,如果没有游戏,那么略显沉闷了。
如果驱动安装得当,在Linux下玩大型的3D游戏完全没有问题。譬如quake,doom等。

在友人的Hiweed上玩了玩quake4和doom3,感觉很爽。如果要玩魔兽等Windows下的游戏,可以在wine中跑。据说和Windows中的感觉没有任何区别,我不会玩魔兽,没有试。

另外找到一份小游戏的列表,其中大部分Ubuntu Edgy源中就有。列出于此,以供玩乐。
可惜我的笔记本比较郁闷,暂时无法使用ATI官方驱动或开源的ATI驱动。无缘3D游戏。
不过有篇安装ATI显卡驱动的文章,实在值得推荐。
Ubuntu_Edgy_Installation_Guide
另外还有一些不错的文章,均在官方的维基。
http://wiki.ubuntu.org.cn/

打飞机 (类似雷电)
chromium
网络对战
tremulous
免费网游 (源里没有)
planeshift
类百战天虫
wormux
赛车
torcs
trigger
台球
billard-gl
虚拟城市
lincity-ng
围棋
gnugo
qgo
cgoban3(java web start)
cgoban
一个射击游戏 (类似魂斗罗)
abuse
滑雪
planetpenguin-racer
桌球
pinball
两架飞机对战
airstrike
超级企鹅 (类似超级玛莉)
supertux
数学
tuxmath
卡丁车
supertuxkart
弹球
lbreakout2
tecnoballz
泡泡龙
frozen-bubble
monkey-bubble
3D角色扮演游戏
egoboo

标签:

2006年11月22日 星期三

爱情是什么

这个女人叫陈自瑶。

每次看这张照片,均会暗生欲念。
爱情,究竟是瞬间迸发的热情,还是日久天长的缠绵?
倘若人为禽兽,大约会自在一些罢。

标签:

2006年11月20日 星期一

食色,性也。



食色,性也。这话是告子说的,不是孟子。

标签:

2006年11月19日 星期日

自由

升级到Edgy后,转眼已经过去一周。觉得有些事情,不得不提。

我的笔记本,华硕W3Z。显卡ATI Radeon Xpress 200M。CPU为AMD Turion64。这样的本子,很苦。因为它无法安装ATI官方提供的驱动,也无法安装开源的ATI驱动。我经过无数次尝试,不断听取网上其他人的说法。 看了我可以用Google搜索到的几乎所有中英文的文章。最后终于证明了这件事。

关于此事,有两种说法:
1. 安装旧版的一个库。但提供的链接不可用,我无法下载这个库,也无从尝试这个方法了。
2. 在BIOS中设置显示模式为UMA+SidePort(使用显存并映射内存),128M显存。HP有几个和我类似的机型,他们和我遇到了同样的困惑,但最 终修改BIOS设置后解决了问题。但我使用的华硕笔记本,BIOS设置中的项目少得可怜。根本没有这么详细的设置项。本想用一些软件直接刷显卡BIOS, 后来觉得风险太大,放弃了。

于是,尽管我的Ubuntu2D显示效果很好,但无法获得3D加速。其他大部分硬件可以使用,不过调制解调器和红外线没有被支持。还有如PCMCIA和火线,我也没有试过。

Edgy的确没有Dapper稳定。之所以武断得说出这样的结论,是由于多次无端的崩溃。
升级后,gaim崩溃。重新安装gaim后,旧问题解决,新问题来临。关闭gaim时它常常崩溃。
Anjuta的几个插件,一用必崩。只好不用这几个插件,避开它们。
FireFox还算争气,可惜偶尔也会崩溃。这是在Dapper中从未遇到的。
令我不解的是,gedit也曾经崩溃。致使我正在写的文章丢失。从此写几行字便赶紧保存一次。
Totem和mplayer有时也会崩溃。不过这不是新问题,用dapper的时候它们偶尔也会如此。
今天Nautilus也无端崩溃了一次,令我十分不悦。我想,怎么能如此草率呢?

尽管如此,我并无怨言。几乎每次程序崩溃,我都会去report bug。只希望,自由软件,不要因自由而丧失质量。只希望,Linux可以承载我对自由的信念和渴望。
今天因为到处找显卡驱动,在MSN上遇见一个旧时的友人。他对我讲了很多Linux的坏话,很多是有真凭实据的事情。无心争辩,大家各有所好。其实开源模式本身的优点和缺点,我们心知肚明。只是个人取向不同罢了。我想要的,其实无非二字。说起来令人颇为感动的那两个字。前些天在Edgy发布会上,Ubuntu创始人在回答问题时半开玩笑地喊出的那两个字。

── 自由!!

标签:

2006年11月17日 星期五

最牛的分区软件

我一直以为,在不破坏数据的前提下,最牛的磁盘分区软件应是Norton Partition Magic(原PQMagic)。今天才知道,应该忘记它了。

由于工作需要,常常要到Windows下做事情。而作为Linux用户,我平日并不使用Windows。于是为了协调二者,我的笔记本上安装了双系统。Windows XP和Ubuntu Linux。很久没到Windows下逛逛了,恰好昨晚有事要办,便去了一趟。大约是离别的时间有些久了,竟觉得无所适从。夜晚的时光,周遭安宁。机器运作的声音,清晰可辨。忽然发现,系统不停地捣鼓我的硬盘。幽兰的硬盘指示灯,不住地闪烁。硬盘孜孜作响,仿佛是格式化的声音。而我只开了一个普通网页,而且这个网页已经下载完成。难道遭受了恶意攻击?大吃一惊,马上拔掉网线,检查系统。结果发现完好无损。想想觉得蹊跷,终于恍然大悟。原来Windows XP在它空闲的时候,就会无端地损坏我的硬盘。顿时心生怨恨,重启系统到Ubuntu,不再理睬它了。

安装Ubuntu的时候,由于当时并不知道以后要以身相许。所以一时疏忽,分给Ubuntu的硬盘空间就小了。随着文件的增加,/分区的空间逐渐开始显得紧张。本来想重新分区重装系统,然而毕竟比较麻烦。于是想到使用Norton Partition Magic在不丢失数据的前提下调整一下。可惜这个软件在处理ext3分区时,会出现错误,无法继续。好在并没有损坏数据,也算万幸。

不甘心,于是在Ubuntu上安装了gparted,ntfsprogs,e2fsprogs。
详情见: http://gparted.sourceforge.net/features.php
试图将Windows的NTFS分区的空间分给Ubuntu一些。然而必须首先卸载分区,然后才可以做移动或改变大小等操作。但是操作系统运行在/上,所以它无法卸载。经友人提示,想起Ubuntu的LiveCD上有gparted,ntfsprogs,e2fsprogs等工具。于是用LiveCD引导机器,然后操作。无奈/分区虽可调整大小,却无法向前移动。

一筹莫展之时,想到一张可引导的光盘上有个图形分区软件,它便是Acronis Disk Director Suite。
拖动鼠标,将NTFS分区缩小。将swap分区往前移动,留出后面的空间,移动/分区。Acronis提示,如果这个分区是可引导的,按么该操作将取消引导标志。需要用系统盘引导系统,然后用启动管理器修复。继续。Acronis处理ext3分区没有问题,而且速度很快。/分区有近4G的数据,整个过程却只用了几分钟。重启后,我没有用光盘引导。因为我的grub装到MBR上,我怀疑即使/分区失去了引导标志,也可以起来。果然如此。但为了恢复到原本默认的状态,还是打开gparted,将/分区的引导标志勾上。

有了Acronis,便不用再担心需因分区不合理而重装系统了。大善。

标签:

2006年11月16日 星期四

封锁背后的商机

前段时间去ATI的网站下载驱动时,发现ATI居然被AMD收购了。大惊。 这么大的厂子都被收购了?今天看到龙芯2E的新闻,据说发展很快,前景很好,令我很是高兴。我还认识计算所的人,没想到他们这么猛。每天早上都看行业资讯,总是有些事出乎我的意料。所以忍不住要说些废话。

晚上与友人谈到创业的事情,对方激情澎湃,然而我令他大失所望。其实早有这样的愿望,渴望不必受制于人,自己赚钱谋生。不过总是觉得种种条件尚不成熟。倘做商业软件,连Sun这样的公司都在开源,微软都要和Linux合作,IBM更不必说。西方的形势,已经逐渐趋向软件免费而服务与支持收费的境地。我们又有什么前途。针对性强的行业软件倒是依然可以赚钱,可这样的市场,究竟有多少人在争夺。如果经营一个小公司,怎能做得。即便想做个首屈一指的P2P流媒体软件,如PPLive,然后靠广告赚钱。然而一个软件做到这样流行,又谈何容易。

Ubuntu创始人的发家之路,倒是颇有意思。用自由软件,赚自己的钱。靠服务,支持,提供完善的解决方案来赚钱,很有意思。然而曾经使他真正致富的,是美国限制加密产品出口的政策。他趁机而上,而美国的企业却不能和他竞争。

原来封锁的背后,竟也充满商机。

这令我想到pkblogsinblogs,以及所有这样的代理网站,和代理软件。他们在政府的封锁政策下,为人们提供了言论自由的途径,为自己提供了赚钱的途径。我一直使用pkblogs访问被封锁的blogspot域名。在博客的下方,有一个很窄的可关闭的半透明广告条。在不影响用户体验的前提下,美观而适当地展示了一条用户相关的广告链接。Google一直是这样的广告策略,所以我一直以为这个广告是Google添加的。直到今天,使用inblogs代理访问Google的博客后,发现并没有这个广告。这才知道,原来这个广告是pkblogs在代理访问的时候添加进去的。如此巧妙地赚钱,令我感叹。相比之下,GoodWaiter虽然可以代理访问各种被封锁的网站,但生财之道,却是如此的粗鲁和野蛮。看其网页,连标题都没有,满目广告,不注意的时候几乎找不到要使用的功能。这大约便是境界的问题吧。

标签:

2006年11月15日 星期三

今夜无人入睡

今夜无人入睡,是意大利作曲家普契尼的歌剧《图兰朵》中广为传唱的一段咏叹调。我万分喜欢。
这几日的经历,若要写一篇回忆录,不知何以命题。想我仓皇升级,错误百出,以致几日来未曾睡过一个好觉。妞妞为了照顾我的生活,催促我早睡,亦费尽心机。并且一直与我共同关注升级进度。不能早睡,却要早起为我做饭,颇是劳累。我家可谓多夜无人早睡。考虑至此,感慨之下,觉得不妨以此歌剧选段命名,方显我升级规模之大,熬夜之久。虽与剧情毫无瓜葛,也便如此罢了。

Ubuntu版本由Dapper升级至Edgy,众人响应热烈。论坛中,报告bug的人居多。众说纷纭,有的人认为此版本发布过于仓促,以致变化不大,bug较多。也有人认为软件总是会有bug,之所以在有的系统上出现种种问题,大约和个人环境有关。为了体验为数不多的新特性,冲到开源软件测试的第一线,我将众人所说的bug一一记下,然后用Edgy的LiveCD在我的笔记本上摸索了一番。结果尚算顺利,并没有发现他们遇到的问题。这一事件助长了我的升级气焰,使得早已酝酿于心的系统升级,在周五的晚上,轰轰烈烈地展开了。

http://wiki.ubuntu.org.cn/EdgyReleaseNotes
根据官方Wiki中的说法,升级有两种办法。
1. 运行gksu "update-manager -c",参数-c将检查系统的新版本,然后提示升级。
2. 如果没有图形界面,则两次运行apt-get dist-upgrade来升级。第一次会升级除upstart外的所有组件,第二次运行会升级upstart,整个升级完成。
我使用第一种方法,因为它更加直观一些。

运行gksu "update-manager -c",然后update-manager跳了出来告知我有新的发行版本可用。点击升级,开始下载升级程序。升级程序下载完成后自动运行,开始系统升级。我使用cn99的源,其间它提示我当前的源并非官方源,于是自动禁用,使用官方的源(archive.ubuntu.com/ubuntu/)开始升级。这使我大吃苦头。

整个升级需要下载五百多兆的文件,几乎是一张CD的容量。而升级程序自动使用的是国外官方的源,在我家平均下载速度每秒不足10K。这使整个升级过程无比漫长,大约持续了一天一夜。其间我半夜多次从睡梦中醒来,查看升级进度。白天则盯着进度条上的速度,快了几K便兴奋地叫好,慢了几K便垂头丧气。
而这一切,其实本可以不这么苦的。如果我使用国内官方的源,就可以获得每秒100K左右的下载速度。
整个升级过程不可取消,没有暂停。我曾把机器直接休眠,然后唤醒后继续升级。可支持断点续传。

国内官方的源,是cn.archive.ubuntu.com/ubuntu/,ping了一下,发现原来是mirror.lupaworld.com。我一般都是从这个镜像上下载Ubuntu的ISO,速度不错。
如果下次还升级,首先把源修改为这个。以免软件自动使用国外的源。

升级中,提示需要覆盖/etc/login.defs。直接选择替换,软件会自动备份旧的配置文件。
提示其他配置文件将被替换,均直接选择替换。
在我的升级中出现了严重错误。
无法安装损坏了依赖关系的Samba,升级失败。并且因此不能安装或卸载任何软件。
包管理器提示使用sudo apt-get install -f 修复。尝试允许,依然无法修复。
总是提示samba:pre-removal脚本返回了错误号102。
寻错误信息而去,发现是/etc/rcX.d下一些链接的故障所致。
到/etc/rc2.d和/etc/rc3.d目录中查看,发现果然是链接损坏了。这个问题我曾经遇到过。
分别在这两个目录中执行
sudo ln -s ../init.d/samba K09samba -f
修复了链接K09samba后,再次执行sudo apt-get install -f,成功。

由于升级已经失败中断,所以在继续升级前趁机修改源为国内官方的源。
此时恰好update-manager再次提示升级,点击版本升级,继续未完成的升级过程。
这次下载速度较快,并且比较顺利。但该源中似乎有几个文件丢失了,在剩下最后几个文件的时候,无法获得它们。因此升级再次中断。我又改为国外官方的源archive.ubuntu.com/ubuntu/,这才下载完最后几个文件。

升级完成后,系统依然健在,并未崩溃或出现不能正常开关机等问题。
很多软件升级到新版。
譬如Eclipse3.2,Anjuta2.02,WireShark(曾用名Ethereal),Gnome2.16.1,Gaim2.0.0beta3.1,FireFox2.0等等。
系统菜单中种种名称的翻译更加精准了,并且出现新的功能。
譬如密钥环管理器,更加易用的联网设置,功能更丰富的软件源设置等等。
新的splash还算美观,但开关机的声音实在不敢恭维。
另外在我机器上启动速度似乎并没有太大的变化,upstart不过如此。不过FireFox2.0启动很快。
论坛中人们遇到的种种问题,在我这里也都没有出现。看来非常幸运。只是有些软件被无情地干掉了。

Anjuta和Eclipse的图标变为空白的,无法启动。提示找不到文件。
Totem-xine被替换成了Totem-gstreamer,很多媒体文件播放不了。
Gaim只要接受文件传输或设置个人头像就会崩溃。
大约还有一些小的问题,我忘却了。
于是重新安装Totem-xine及相应插件。重新安装Gaim及相应插件。重新安装Eclipse和Anjuta。

系统一切正常,然而Eclipse终于被我弄坏,Anjuta不断崩溃。
Eclipse的问题是人为原因造成的,即使铲除配置文件并重新安装也不能启动了。
经朋友推荐,最终使用NetBeans取代了它。从此彻底忘掉Eclipse。
Anjuta2.02是一个全新的插件式设计。安装时顺便把推荐和建议的软件包也都装上。否则一些功能会无法使用。然而令人遗憾的是很多插件bug重重。
在我的系统中,只要使用File Manager,API Help,Scintilla Editor这三个插件中的任何一个,Anjuta都会立刻崩溃。于是只好在插件设置中禁用了他们。Anjuta勉强可以使用。

由于我曾经升级过内核,所以内核可能没有变化。然而Edgy使用了新的generic内核,而不是386或686的内核。于是我安装了generic的内核以及相应头文件包,删除了原有的386内核。
Dapper的内核不支持我的ACPI,于是我曾经用acpi=off的参数启动内核。如今Edgy的内核没有这个问题了,于是手动去掉了acpi=off。

值得一提的是新的Gaim多了很多好的插件,比如快捷键,闪烁的图标,丰富的提示声音,动态提示框等等。使用很方便。可惜这个版本的Gaim在它被关闭的时候常常会崩溃。

总体来说,Edgy还算令我满意。此次升级,便记录于此。作为一种见证。

标签:

2006年11月10日 星期五

Evince的困扰

Evince为Ubuntu自带的PDF阅读器。用它查看某些中文PDF时,遭遇乱码。
在Synaptic中搜索PDF,试图找到其他更好的PDF阅读器。于是发现XPDF。
安装它以及所需的一些软件包(xpdf-common,xpdf-reader,xpdf-utils),并且额外安装xpdf-chinese-simplified。
再试,发现XPDF界面竟然如此简单,并且用它来查看先前在Evince中乱码的PDF文件,却乱得更厉害了。
很偶然的机会,我心有不甘,又一次用Evince开打曾经乱码的PDF。
令人惊喜的是,我前后打开的是同一个文件,它却不再乱码了。显示效果很好。

反复试验,得出一个滑稽的结论:
使用Evince打开无内嵌字体的中文PDF文件发生乱码时,安装XPDF及其中文包可以解决问题。

其实在Linux下阅读PDF,可使用Adobe Reader,源中有最新版本7.x,最好的PDF浏览软件。

标签:

2006年11月9日 星期四

狗蛋的私房端口

今日公司成立N周年,下午去参加庆祝酒会。由于下午不用上班,我一激动便没有心情干活了,开始鼓弄狗蛋。
看了别人博客上对GoogleTalk加密问题的分析,颇受益。我一向窥探欲也是很强,对私密的事情很感兴趣。
于是掏出Ethereal,在网络上猛嗅了几口,捉了几只Jabber的数据包,解剖分析。

GoogleTalk验证用户名和口令时当然是加密的。但默认情况下消息不加密。
正常情况人们使用GoogleTalk时,均是连接服务器的5222端口,不加密。但据说为了兼容某些jabber客户端,GoogleTalk的服务器支持5223端口,该端口支持加密。于是有人提出通过Gaim连接这个端口来使消息加密。如果在Windows中使用GoogleTalk官方的客户端,可以使用本机加密代理的方法连接加密的端口,譬如使用stunnel,实现消息的加密。

然而可惜的是,我上班时网络环境不佳。大概有人肆无忌惮使用P2P软件或其他人为原因,导致网速起伏很大。快的时候下载东西平均速度1M/s以上,慢的时候连一些门户网站都很难访问。并且由于大家出于试验,调试程序,或其他目的,常常在网络上监视和控制流量。在这种险恶的网络环境中,我依然可以缓慢地通过GoogleTalk客户端登录。但是在Linux中,Tapioca或Gaim却无法登录到GoogleTalk服务(同样的设置,在家可以)。于是我一度很苦闷,只好常常在Gmail中使用Web的talk功能。直到今天想起一个GoogleTalk未公开的端口。

GoogleTalk的私房端口,并不是我发现的。那是很久以前,我在一个人的博客上看到的。连接GoogleTalk服务器的5224端口,可以更加快速地访问GoogleTalk服务(大约是因为用的人少)。并且这个端口也支持加密传输消息。于是我马上尝试,配置Gaim,连接成功。摸出Ethereal再嗅,消息也加密了。大喜,贴图展示。

标签:

种种可笑的无奈

喜欢Windows系统编程的人,几乎无人不知Sysinternals。而今,不再有这个网站了。作者带着他众多的著名软件,和他的公司Winternals,兴高采烈地投靠了微软。从此,人和软件,都是微软的了。也不在有Sysinternals和Winternals。访问那个网站,会定向到微软的一个页面。对此我起先颇有些遗憾,而如今的看法却有不同。倘是我,苦心经营一个公司,有一日,一个软件产业的巨头愿意重金收购我的公司,并给我良好的条件让我在他们那里工作,我肯定也兴高采烈地去了。只不过我可能更喜欢自由和率性一些,不喜欢官僚主义风气的机构,希望做事可以恣意而为。

近日偶感迷惘,晚间出去的时候路过麦当劳,便去吃个冰激凌。每每看到麦当劳玻璃墙上牛肉汉堡的海报,我都觉得那是两片被油浸湿了的面包夹着一泡鲜活的屎。于是不仅毫无食欲,而且倍感恶心。不知道外国人怎么吃得下这种东西的,并且有个美女还常常为此在广告上喋喋不休。大约饮食文化的差异便在于此吧。正如日本奇妙的大和民族有吃屎的习俗一样,很多意识形态是我们中国人所不能理解的。

歌华宽带不希望每户有超过两台计算机同时上网,于是它有一些限制。我猜测大约是通过记录MAC地址来捣鬼的。其实这比起一些宽带提供商只允许一户有一台机器上网的行径,已经算得光明磊落了。于是每日晚间携笔记本在家上网都是通过我的台式机作为网关。恰好今天妞妞不用台式机,为了减少噪音并节约电力,我直接把网线插到交换机上上网。这才知道,原来即使在我们的小区局域网内,网络安全的威胁也是无处不在。只看见Firestarter的图标频频变红,未经授权的访问竟如此繁多。Web服务,Web代理服务,甚至MS SQLServer,VNC,以及各种UDP的访问,络绎不绝。令我又一次坚定了那个信念,接入不可信的网络之前先做好基本的安全措施。即便是没有多大风险的个人桌面计算机,也至少应当配置好一个iptables或其他任何有效的策略。

下面讲一则笑话。在IT行业,我们常常可以听到一些学术界或产业界无比可笑的腔调。于是我也想写一篇严谨的学术论文。

关键词:
网络应用,企业级,框架,部署,整合,联动
正文部分:
今天我用Java语言编写了一个著名的ping程序。Ping是一种广泛的,历史悠久的网络应用。但请注意,这绝非一个传统意义上普通的ping。首先,传统的ping程序大多是用C或者C++来调用操作系统的原始套接字实现的,过程非常简单。而我的ping是用Java编写的。众所周知,在1.5版本之前,Java并不能收发ICMP数据,仅仅可以在传输层之上做做文章。所以我的ping采用了Java最前沿的技术。其次,我的ping并非一个标准版的ping,而是一个企业级的ping。所谓企业级ping,是指可以以分布式的方式部署ping应用。可以将很多不同版本和功能的ping程序整合为一套企业级的ping,实现多个ping分布式执行并实现ping之间的联动。事实上我的ping已经不仅仅是一个程序,而是一个框架,一个标准。可以协调不同ping并发工作的企业级的Framework。

其实,没有见过这种腔调的人,大概不能体会这其中的龌龊。那么以上段落便不作笑话,当作科技吧。

标签:

2006年11月7日 星期二

不升级的升级

鉴于Edgy广受争议的稳定性以及其不具有太多吸引力的变化,我决定不冒险升级。然而Edgy使用了新版本的内核和新的Init。 我想这也许可以解决我的ACPI问题,并且加快我的系统启动速度。于是希望在版本不升级的情况下升级这几个软件包。

修改源,将/etc/apt/sources.lst中的单词dapper全部改为Edgy。在此之前我事先到我用的源(cn99)上看过,确定Edgy的源已经可以用。
sudo apt-get update
接着升级管理器发现了系统的变化,于是它提示我需要更新。不予理会。

带开Synaptic,它比使用apt命令更加直观,虽然它后台使用的也是apt。搜索linux,找到新的内核包,安装。本想把新的init也装上,然而依赖关系告诉我upstart需要对系统中很多软件包升级。改动太大,这违背了我尽可能保持最小改动的初衷,所以放弃升级它。想试试新的usplash,但同样由于需要的改动过大而放弃了。

修改grub的配置文件,/boot/grub/menu.lst,新内核自动根据旧内核的配置设置了它的参数,这令我感到无比智能。我原来是需要acpi=off或acpi=ht这样的内核参数才能引导的,现在把这个参数去掉。因为我事先尝试过用Edgy的LiveCD引导我的笔记本,没有任何问题,支持我的ACPI。这说明Edgy使用的新内核对华硕的ACPI支持良好。

重启,使用不带acpi=off参数的新内核引导。一切顺利,从此,我的ACPI终于可以使用了。
大喜。删除旧内核。将源改回dapper。再更新一下软件列表。sudo apt-get update
完成

标签:

2006年11月5日 星期日

Ubuntu Edgy

前段时间,Ubuntu 6.10 Edgy发布了。
我去参加了Edgy在北京的发布会。Ubuntu的创始人Mark Shuttleworth到场演说。
约了几个友人同去捧场,虽然人满为患,但Mark这个人还算有些魅力,近两小时我都没有困。我感兴趣的问题,人们都问了。譬如他是怎么发财的,怎么利用开源软件赚钱,怎么去的太空旅行等等。回答基本上令我满意。

对于Edgy,我多次想从Dapper升级上去,但看了论坛中人们的反应,最后作罢。不敢说这个版本发布得有些草率,但至少似乎没有Dapper稳定。另外虽然新增了一些特性,譬如重写了init,推出upstart。据说启动速度因此快了不少。新的splash很漂亮,虽然我以为隐藏启动细节信息可能未必是件好事。至于一些软件的升级,我倒是觉得可有可无。于是似乎没有足够的理由冒险升级。毕竟Dapper是长期支持的版本,并且我很习惯它了。

Edgy的启动画面


我的桌面Ubuntu 6.06 Dapper

标签:

按住它

先放一段介绍。
执行sudo apt-cache show anjuta,将结果中的描述信息抄下:
A GNOME development IDE, for C/C++
This IDE for C/C++ and GNOME/Gtk+ applications has features that enable easy
debugging and management of code. It also integrates with glade and CVS.

Anjuta,我读做“按住它”。这听起来滑稽可笑,似乎充满暴力和戏弄的色彩。
在Linux 中,本可以用vim+ctags+cscope来方便地编写代码,然而我似乎觉得也应当有一个IDE。IDE这个东西并不是最高效的,因为它常常有着复杂 的界面和繁琐的功能,并且执行速度较慢,不够灵活。然而有些时候,IDE也有它显而易见的好处。譬如,功能集成化,可视化,丰富的快捷键,动态提示, Makefile自动生成等便利条件。所以我觉得即便是Linux,倘若有图形,还是需要一个IDE的。

KDevelop据说是Linux中的VC。然而我比较迷信Gnome,所以没有心情使用KDE的工具。Eclipse+CDT可以玩C和C++,但用了 一下,发现似乎没有函数动态提示。并且似乎不能自动为工程生成Configure。这对以源码方式发布程序不是很方便。虽然可以用autoconf和 automake自行搞定,但这似乎不爽。其他还有众多IDE环境,我无心一一尝试,于是决定就用Anjuta。

sudo apt-get install anjuta

Anjuta据说用GTK写的,建立工程后,未能自动生成Makefile。错误提示说需要安装glib,令我奇怪。我早已安装了 libglib2.0, libgtk2.0等包,为何这般?于是复制错误信息,Google之。有人云,需要安装libglib2.0-dev和libgtk2.0-dev。恍 然大悟,安装,成功。颇爽。

它并不漂亮,不像Eclipse那么美观。但它不是用Java写的,所以它跑得比较快。并且它不至于像DDD那么丑。虽然在操作上觉得还不是很便利,但尚觉得满意。

标签:

Makefile纪事

在繁琐的事务或流程中,图表的表达能力是自然语言望尘莫及的。看了两个讲述Makefile自动生成的文章,冗长的赘述令我心烦。偶然见一图,觉得一目了然,省却千篇文字。大喜。贴到这里,以供借鉴。
另附两篇文章的链接:
文章一
文章二
他们讲述的是旧版本的Automake,新版本略有一些变化,我试图用最简化和优化的方式说清楚此事,并且补上新版本的一些情况。

在Linux中,人们经常以源码形式发布程序。
这样做的原因之一是为了开源。另外的原因是为了便于在不同的平台和环境下能够更好地运行程序。
为了使程序适应不同的平台和环境,具有更好的兼容性,需要在相应的平台上编译程序。
这就要求有一个通用的,规范的,方便的编译程序的方法。
Automake提供了一个便利的解决方案。

程序一般均由make管理和生成,而make需要一个配置文件,叫做Makefile。
可以手工编写Makefile,但如果项目较大,那么这样做会很繁琐,且不易于维护。
手工编写的Makefile可能没有遵循GNU Makefile的惯例,致使Makefile的通用性差。
另外IDE环境需要一个Makefile自动生成的途径,以方便用户创建和处理工程。
基于以上考虑,可以使用Automake和Autoconf来自动生成一些脚本和配置文件。
把这些脚本和配置文件同程序的源代码一同发布。
当用户使用程序时,首先执行脚本(configure)自动生成适用于用户环境的Makefile,然后用make编译和安装程序。
这样,即使平台和环境有差异,人们也可以正常地使用程序。

举例说明:

Ubuntu6.06,automake1.9.

保证系统中已经安装了所需软件包:
gcc
g++
make
automake(目前Dapper的源中最新版是1.9)
autoconf
m4(Unix的一种宏处理器)
libtool(产生动态库需要这个包)
perl(aclocal是用perl编写的,所以需要安装perl)

1. 创建一个目录,于其下放入要编译的所有源文件。例如foo.c和main.c。

2. 创建一个名为Makefile.am的文件,该文件用于生成Makefile.in(用于生成Makefile的配置文件)。写入以下内容:
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = foo
foo_SOURCES = foo.c main.c
如果没有设置AUTOMAKE_OPTIONS = foreign,
那么需要在当前目录中建立README,NEWS,AUTHORS,ChangeLog这几个文件。后两行设置了要生成的程序的名字以及所需要的源码等信息。

3. 到该目录中,执行autoscan来扫描目录中的所有源文件。
生成两个文件,configure.scan和autoscan.log(日志文件,可以删除)。执行autoscan时提示错误,但如果已经成功生成所需文件,那么忽略之。

4. 将configure.scan改名为configure.in或configure.ac(.ac为新版的格式,建议改为.in以和旧版兼容)。 mv configure.scan configure.in

5. 编辑configure.in,其中为一系列m4的宏。我常常去掉宏 AC_CONFIG_HEADER([config.h]),这样以后会省一些事。修改AC_INIT宏,对应写入程序名,版本,和作者联系地址。如AC_INIT(foo, 1.0, foo@gmail.com)。当然这个宏也可以不修改。在AC_INIT和AC_OUTPUT之间的任意位置添加一行AM_INIT_AUTOMAKE(foo, 1.0),用以指定生成程序的名字和版本。如果没有执行步骤2,则不会自动生成宏AC_CONFIG_FILES([Makefile]),需要手工添加。如果执行了步骤2,则该宏会自动生成。

6. 执行aclocal。
它将根据configure.in生成文件aclocal.m4和目录autom4te.cache(缓存目录,最后可以删除之)。aclocal.m4中包含了automake所需的一些宏。若未生成该文件,说明configure.in有问题。可以尝试执行automake来查看提示的错误信息,根据提示再次修改configure.in,直到正确为止。

[7]. 如果在步骤5的configure.in中去掉了宏 AC_CONFIG_HEADER([config.h]),则不再需要这一步。如果没有去掉则需要执行autoheader,它将根据configure.in生成文件config.h.in。

8. 执行automake --add-missing,生成Makefile.in。另外这一步还生成了三个符号链接(install-sh,missing,depcomp),分别指向automake目录中的三个可执行脚本。

9. 执行autoconf。
它将根据aclocal.m4和configure.in生成可执行的脚本configure。

到此,全部工作完成。将以下配置文件和脚本与程序的源码一同发布。(示例中有两个源码文件foo.c和main.c)
configure.in
configure
Makefile.am
Makefile.in
aclocal.m4
三个符号链接所指向的三个脚本install-sh,missing,depcomp也需要一起发布。
虽然在我有限的尝试中,没有发布missing脚本也没问题,但觉得还是发布了为好。

注意: 如果在configure.in中保留了宏 AC_CONFIG_HEADER([config.h]),则需要将config.h.in也一同发布。否则无法正常使用。觉得比较麻烦,所以我一般去掉那个宏,然后省略步骤7。

在用户编译程序时,到程序源码目录中执行脚本configure来生成Makefile,然后用make编译和安装。
./configure
make
如果需要安装,则继续运行:
make install

标签:

Ubuntu历险记

初识ubuntu之时,感慨其制作之精湛,细节之华美。沿袭了Debian强悍的软件包管理机制,而在桌面应用中似乎比Debian更加合理,更加便利,更加人性化。于是我迷上了它,把笔记本上的Debian删除,欢天喜地迎来了我最爱的Linux发行版本ubuntu。

访问ubuntu中文网站http://www.ubuntu.com.cn
若有任何疑惑,在http://wiki.ubuntu.org.cn中,可以找到大部分的答案。

在下载页面选择最快的镜像。
这里有三种大的选择:
Desktop CD,Server install CD,Alternate install CD。

第一类是LiveCD,即操作系统可以运行在光盘上而无需安装。
可以下载它先体验一下ubuntu,并看看硬件支持是否合适。
如需安装,双击桌面的install图标即可。可以一边上网,一边聊天,一边装系统。

第二类针对服务器应用,不安装图形界面。

第三类为传统的系统安装盘,以供不能或不愿使用LiveCD的用户安装使用。
它既提供了桌面版安装,也提供了服务器安装。以及其他一些功能。

用LiveCD体验了一下Ubuntu,安装的时候还是下载了Alternate install CD。
我认为字符界面的安装过程更灵活高效一些。
所谓历险,就这么无声无息地开始了。

首先遇到的问题是,无论LiveCD还是AlternateCD,均无法引导我的笔记本。
我找来了Hiweed,中国人做的一个ubuntu的中文加强版。
它同样无法引导,但它却给了我启发。于是我尝试不同的内核参数。
终于用acpi=off参数引导成功。
在光盘引导起来,出现菜单时,按了F6,就可以修改参数。加个acpi=off就好了。

系统安装

用光盘引导时,选择语言为中文,这样以后系统默认语言便是中文。
安装系统之时,我为Ubuntu分了三个区,分别为/,/home,和swap分区。
/分了5G空间,考虑到内存比较大,用swap较少,仅分了768M。
其余空间都分给/home,好存放一些资料。
安装过程中最好保持网络畅通以便自动下载安装中文包。
系统安装后,很幸运,我的声卡显卡甚至SD读卡器驱动都没有问题。

安装Grub时,我的Windows系统被自动识别并添加到了启动列表中。
两个Windows分区也被自动挂载上来。
很方便,无须手工干预。但我喜欢隐藏grub的菜单,所以编辑了一下。
sudo vi /boot/grub/menu.lst
将hiddenmenu前的注释#去掉,使这项生效。并且将timeout值改小了一些。

系统安装完成后,运行配置编辑器:
gconf-editor
在/apps/nautilus/desktop/ 分支下可以修改桌面图标和名称。
我将常用的图标显示(在相应项目前打勾),无须显示的去掉。

使用附件中的菜单编辑器调整了菜单中的项目,
显示常用的,隐藏不用的。也可以为它们改名字。
调整桌面和菜单到自己最合适的地方,换个喜欢的桌面。

软件安装

修改源:

Update:新版本推出后,将下面所有URL的发行版本名字改为相应的就可以了。
例如目前最新版是edgy,则将以下文字中所有的dapper改为edgy就可以使用。
另外最好在保留官方中国源的同时,添加cn99的源。以免cn99的源出问题时影响使用。

为了使用国内很多中文软件,并且有更快的速度。首先修改源。
手工备份一下配置文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
修改配置文件:
sudo gedit /etc/apt/sources.list
或者也可以通过系统管理菜单中的图形工具来修改软件源。
可以用官方中国的源,再加上cn99的源(它速度快,比官方包含了更多软件)。
http://wiki.ubuntu.org.cn
系统管理->安装配置 中的建议修改源。
我使用cn.99的源,软件很齐全,用我家的歌华宽带下载速度一般为110K/秒。

## cn99 sources list
deb http://ubuntu.cn99.com/ubuntu/ dapper main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ dapper main restricted universe multiverse

为了安装其他几个需要的软件,参考了Hiweed使用的源,于是又添加了这几个:
## Tapioca VoIP , Support Gtalk
deb http://extindt01.indt.org/VoIP/apt dapper main
## wine
deb http://wine.budgetdedicated.com/apt dapper main
## ntfs-3g
deb http://flomertens.keo.in/ubuntu/ dapper main

更新一下软件列表:
sudo apt-get update
或者到系统管理菜单中打开新立德软件包管理器,点更新。
如果用图形工具修改源,那么会自动更新,无须手工干预。

安装所需各种软件:

sudo apt-get install 软件名
或者到系统管理菜单中打开新立德软件包管理器逐一搜索所需软件并安装。
建议使用新立德,可以更加方便地列出软件以相关插件,推荐安装的包等等。
在安装软件时将所需插件一并安装。

这些软件会被自动下载安装,并保持统一的自动更新。
在Ubuntu中,如果软件在源中,那么便不需要软件本身有自动升级功能。
也不需要用户在软件出新版本后手工卸载旧版,下载安装新版。
因为系统会统一升级所有用户已安装了的源中的软件,并保持它们是最新版本。
很多常用的软件系统已经自带了,我根据需要又添加了以下软件。

网络:

下载管理器 d4x,kget (两者各有千秋,建议都装。)
邮件客户端 Thunderbird
QQ客户端 Eva,LumaQQ
Gtalk客户端 Tapioca Gtalk (不需要语音的话,用Gaim即可。)
MSN客户端 kmess (个人感觉用Gaim上MSN更好)
其他即时通讯 Gaim
BT客户端 BitStormLite
电驴客户端 aMule
FTP客户端 gFTP

附件:
刻录软件 GnomeBaker
离线字典 StarDict (词典很多,按需要安装。)
读CHM xCHM,kchmviewer

多媒体:
音频播放 Beep Media Player
媒体播放 Mplayer,Totem-xine,w32codec

办公:
PDF工具 acroread (Adobe Acrobat Reader的Linux版本)

图像:
制图软件 Dia (比OpenOffice Drawing更适合画流程图)

中文输入法:
fcitx (有人喜欢scim-bridge)

系统工具:
杀毒软件 Avast
模拟器 VMware Player

系统管理:
个人防火墙 FireStarter
服务管理器 BUM

其他:
压缩软件 p7zip,rar,unrar
Win共享 Samba,SMBFS
NTFS读写 NTFS-3g
Win环境 Wine


说明:

1. 安装播放器的时候,需要安装一些常用的解码器。
一般这些软件包都应该装上:
beep-media-player,totem-xine,w32codecs,libxine-extracodecs,mplayer,banshee(这个包有人建议装,但我没有装)

2. 安装StarDict的时候,如果装了过多的词库,不仅占用了更多空间,并且使屏幕取词时有很多不必要的词典。
一般安装这些软件包就够了:
stardict,stardict-common,stardict-cdict-gb,stardict-cedict-gb
stardict-langdao-ce-gb,stardict-langdao-ec-gb

3. 安装配置fcitx

在安装中文输入法之前,如果需要输入中文,可以使用在线中文输入法:
http://www.hoolulu.com/ime/py.php

安装fcitx后,需要做些配置,并让fcitx 进入桌面自动运行。
在 /etc/X11/xinit/xinput.d/目录中编辑文件zh_CN,如果没有就建一个。
sudo gedit /etc/X11/xinit/xinput.d/zh_CN
把里面的内容改为如下:
XIM=fcitx
XIM_PROGRAM=/usr/bin/fcitx
XIM_ARGS=""
XMODIFIERS="@im=fcitx"
GTK_IM_MODULE=XIM
QT_IM_MODULE=XIM
DEPENDS="fcitx"

在/etc/X11/Xsession.d/目录中编辑文件95xinput,如果没有就建一个。
sudo gedit /etc/X11/Xsession.d/95xinput
把里面的内容改为如下:
export LC_CTYPE=zh_CN.UTF-8
export XMODIFIERS=@im=fcitx
export XIM=fcitx
export XIM_PROGRAM=fcitx
fcitx

编辑fcitx的配置文件,使输入法工具条在不需要的时候自动隐藏:
gedit ~/.fcitx/config
修改[界面]字段中
是否自动隐藏输入条=1

运行fcitx:
fcitx

如果启动fcitx时依然有问题,比如提示需要设置XMODIFIERS,则:
sudo gedit ~/.bashrc
在里面加两行,如下:
export LC_CTYPE="zh_CN"
export XMODIFIERS="@im=fcitx"

4. LumaQQ需要自己到http://lumaqq.linuxsir.org/main/下载。
解压到任意目录,例如/opt/LumaQQ。
也可以改改权限:
sudo chown -R root:root /opt/LumaQQ/
sudo chmod -R 755 /opt/LumaQQ/

为LumaQQ建立一个快捷方式:
sudo gedit /usr/share/applications/LumaQQ.desktop
添加以下内容
[Desktop Entry]
Name=LumaQQ
Comment=QQ Client
Exec=/opt/LumaQQ/lumaqq
Icon=/opt/LumaQQ/QQ.png
Terminal=false
Type=Application
Categories=Application;Network;
这样,就可以在应用程序的Internet菜单中打开LumaQQ了。

如果下载的LumaQQ是不带JRE版本,还需要自己安装sun-java5-jdk或sun-java5-jre。
并且做以下配置:
sudo update-alternatives --config java
选择刚才安装的JRE为默认JRE:
/usr/lib/jvm/java-1.5.0-sun/jre/bin/java
必要时修改/etc/profile或用户目录的配置文件(比如~/.bashrc)
添加:
# for JRE
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.06
export JAVA_HOME

5. 如果安装了Java,则配置Java中文字体。
wget http://paste.ubuntu.org.cn/d323
sudo mv /etc/java-1.5.0-sun/fontconfig.properties /etc/java-1.5.0-sun/fontconfig.properties.old
sudo mv d323 /etc/java-1.5.0-sun/fontconfig.properties
sudo chown root:root /etc/java-1.5.0-sun/fontconfig.properties

也可以安装浏览器Java插件sun-java5-plugin。

6. 安装Firefox,Thunderbird,OpenOffice的中文语言包。

打开系统管理的语言支持一项,提示需要安装更多的中文包。
安装后,FireFox便成了中文。
我搜索并安装了Thunderbird和OpenOffice的中文语言包。
这样我的软件都是中文的了。

另外,为了更方便地使用FireFox的标签页浏览功能,安装扩展Tab Mix Plus
为了更好的管理下载,安装扩展FlashGot
为了让FireFox能播放Flash,需要到Adobe官方网站安装最新的Flash插件。
为了播放在线的媒体文件,保证Totem和Mplayer的mozilla插件已经安装。
还需要安装MediaWrap扩展。
更多其他扩展:
https://addons.mozilla.org/firefox

7. 很多人说文泉驿字体好看,我也安装了它(xfonts-wqy)。
但当我在首选项的菜单中设置了字体后,觉得它很丑。以后谁说它好看,我就跟谁急。

8. 有人推荐安装后将内核由默认的386升级为686,这是一种误导。
至少是一个不全面和不负责的说法。
比如我的CPU是AMD64位的,并非Intel。就算升级,我似乎也应当升级为K7的内核。
然而我只能用默认的386内核。因为无论我升级为686还是k7,我均无法正常关机。

9. 有人推荐ATI显卡用户安装开源的ATI驱动以打开显卡3D加速,这害了我。
使我的X-window不能启动。
于是我只好在启动X-window时按Ctrl+Alt+F1,进入控制台。
使用apt-get remove删除了那个软件包,然后重新配置显卡:
sudo dpkg-reconfigure xserver-xorg
所有选项按照自动检测的结果。
sudo killall gdm
gdm

其实可以不必重新配置,只要将/etc/X11目录下的原始配置文件回复即可:
sudo rm /etc/X11/xorg.conf
sudo cp /etc/X11/xorg.conf.original-0 xorg.conf
sudo killall gdm
gdm

10. 有人建议配置alsa混音,可以按照官方文档FAQ中的说法来配置。
位于http://wiki.ubuntu.org.cn中的常见问答。
我觉得并无必要,所以没有配置。

11. 安装杀毒软件

访问http://www.avast.com/eng/download-avast-for-linux-edition.html
下载Deb格式的软件包。如wget -c http://files.avast.com/files/linux/avast4workstation_1.0.6-2_i386.deb

安装 dpkg -i avast4workstation_1.0.6-2_i386.deb
添加菜单项sudo gedit /usr/share/applications/avast.desktop
写入以下内容
[Desktop Entry]
Name=avast
Comment=avast
Exec=/usr/bin/avastgui
Icon=/usr/lib/avast4workstation/share/avast/icons/avast-appicon.png
Terminal=false
Type=Application
Categories=Application;System;
这样,在应用程序的系统工具菜单中就可以启动avastgui。

访问http://www.avast.com/i_kat_207.php?lang=ENG免费注册一个序列号。
可以使用一年,到期以后可以继续免费注册。
运行图形界面的avastgui或命令行的avast,输入序列号即可。

图形界面包括了杀毒软件的所有功能。
如果在没有图形的情况下,可以使用命令avast -update来升级杀毒软件。
也可用命令行的avast来杀毒。

12. 配置防火墙自启动

安装FireStarter后,运行配置向导。
安装配置完成后,它会作为系统服务自动在后台运行。
虽然后台运行了防火墙,但我希望可以随时看到防火墙的状态。
如果希望登录后便自动启动其图形配置程序,可以参照以下方法。
官方文档中提到一种方法,但在ubuntu中有些问题,行不通。
我改善了一下。

sudo vi /etc/sudoers
添加username ALL= NOPASSWD: /usr/sbin/firestarter
其中username为自己的用户名。
由于该文件为只读文件,因此用wq!这样的命令来强制保存并退出。

写一个脚本
sudo gedit /usr/local/bin/firestarter.sh
写入以下内容
#!/bin/bash
xhost +local:
sudo firestarter --start-hidden
保存并退出,添加可执行权限。
sudo chmod +x /usr/local/bin/firestarter.sh

如果使用的是Gnome,那么在系统首选项菜单中打开会话设置。
在启动项目的标签页中添加一项,写入firestarter.sh
这样就可以了。
至于KDE,可以参照官方那个说法。

12. 安装配置Samba

前面提到的软件列表中,包含了samba和smbfs。
在系统管理菜单中打开共享文件夹设置。
如果没有安装samba,会提示用户安装。
设置一个要共享的目录。

当我安装完 samba后,提示有一个错误。没有理会它。
执行了一下sudo apt-get remove,就不在提示我了。
配置的Samba的时候提示说/var/run下没有Samba目录。
于是我给它创建了一个。便不在提示。

为Samba添加一个账户,譬如名为share。
sudo useradd share
修改该用户在samba中使用的口令
sudo smbpasswd -a share
输入要设置的密码。

新建文件 /etc/samba/smbusers,
sudo gedit /etc/samba/smbusers
写入以下内容,保存并退出。
share = "network username"

备份并编辑/etc/samba/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf
找到 ; security = user,去掉前面的注释分号,即改为security = user。
再添加一行username map = /etc/samba/smbusers

修改文件末尾的几行。
如果在先前设置共享文件夹时,创建了一个共享,名为Linux。
那么这里应当有貌似[Linux]的字段。依次类推。
然后修改这个字段下面的设置。
添加一行,设置刚才创建的用户为samba共享所用的账户。
valid users = share
也可再添加如下两行。
force user = nobody
force group = nogroup

如果今后共享的文件夹中出现乱码,
则在该配置文件的[global]字段添加以下几行。
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936

保存并退出。
测试samba是否可以正常工作
sudo testparm
我这里显示了一个警告,我不予理会。
启动samba的服务
sudo /etc/init.d/samba start

如果需要设置共享的目录可写,则
sudo chmod a+w 要共享的目录名
并修改samba配置,可以在共享文件夹设置中设置。
也可以在Samba配置文件中的相应字段修改。
例如共享名为Linux,则在[Linux]字段下。
将writable = no,改为
writable = yes

如需开机自动启动Samba服务,则在系统管理菜单中的服务里设置。
如手动启动服务,则运行
sudo /etc/init.d/samba start
关闭则这样运行
sudo /etc/init.d/samba stop
重启则这般运行
sudo /etc/init.d/samba restart

Samba服务启动后,则可以通过Windows访问Ubuntu的共享了。
如果从Ubuntu访问Windows共享,则在位置菜单中选择连接到服务器。
在服务器类型中选择Windows共享,然后在服务器框中填写对方IP地址。
点击连接。注意只填写服务器IP即可,其他内容最好不要填。

所谓历险记,便是如此。
在我安装配置各个软件之时,遇到了种种问题,受到了种种误导。
最终解决的办法,皆记录到这里,以作备忘,或为初识ubuntu之向导。

标签:

在Debian中编译内核

VMware中,Debian Sarge,内核版本2.6.8-2。试图重新编译内核。

上网搜罗相关文章,中英文俱有。但我需要的,是严谨而细致的手册。

到LinuxSir的Debian板块,打开这两篇文档作为参考:
1.http://debian.linuxsir.org/book/reference/lyoo/ch-kernel.html
2.http://debian.linuxsir.org/book/faq/etony/ch-kernel.zh-cn.html
第一个相对详细,第二个日期更新一些。
适当重视文档的写作时间,例如倘是2002年的,那时效性可能差一些。

开始,按照Debian方式。这是一种简化和优化了的方式。
所谓Debian方式,就是以Debian的软件包管理方法来处理问题。
所以使用kernel-package中的工具make-kpkg来编译内核。
最终产生一个deb包,然后使用软件包管理工具dpkg来安装或卸载。

先前曾安装过Debian安装盘中的内核源码,以及kernel-package包。
到/usr/src下,可看到名为kernel-source-2.6.8.tar.bz2的压缩包。
到/usr/share/kernel-package下,可看到一篇名为README的文档。
它包含了编译内核所需的大部分内容,并且解说细致,条理清晰。

从该Readme文档以及那篇FAQ(前面提到的第二个链接)中,
可以知道编译内核首先需要安装哪些软件包。
除了系统必备的一些,其它的软件包,逐一搜索检查。
如果没有,则用Debian安装盘全部装好。

从该README文档中可以得知具体步骤和要执行的命令。
到/usr/src下,解压缩源码包,配置,编译。

在我编译之前,从README文档中得知,initrd并非必须。
如果有它,即使启动时内核镜像所在文件系统的驱动作为内核模块存在也可以。
如果没有它,那么该文件系统驱动必须被直接编译到内核中而非内核模块中。

如果需要initrd,则应当先为内核源码打cramfs补丁,再开始编译内核。
当然除了打cramfs补丁外,还有一种办法,见相关文档。
但是,既然完全可以不要initrd,那为什么要它?
所以我在编译内核时没有加--initrd参数,
并且也不打算之后使用mkinitrd等工具来生成它。

整个过程执行了这样的命令:
cd /usr/src
tar -jxvf kernel-source-2.6.8.tar.bz2
cd kernel-source-2.6.8
本来还想从/boot目录中找个当前的配置文件作为我的默认配置。
但我后来忘记做这个了。
make gconfig
尝试了make xconfig,觉得还是gconfig更好一些。

修改完成并保存后,当前目录下多了一个隐藏文件.config。
我多次反复用make gconfig修改了它。
其间我到slackware的FTP上找了一个config文件作参考。

之后执行了这些命令:
make-kpkg clean
make-kpkg --revision=custom.1.0 kernel_image
由于我用root用户登录的,所以我不需要文档中提到的fakeroot之类。
cd ..
这里发现产生了一个kernel-image-2.6.8_custom.1.0_i386.deb。
dpkg -i kernel-image-2.6.8_custom.1.0_i386.deb
从安装过程的提示信息中,可以看出:
新编译好的内核和模块都被自动安装到恰当的位置了。
相关配置文件也修改好了。
自动搜索到了grub,并且自动修改了grub的配置文件。

打开grub的配置文件,发现新内核的配置项已添加到现有内核配置之后。
我大喜,重新启动计算机,选择新的内核。
启动失败,提示
kernel panic:VFS:Unable to mount root fs on unknown-block ...

我的确已经将ext2和ext3都直接编译到内核里了。
不知为何。
想过妥协,弄个initrd出来,估计应该可以启动。但没有那样做。
我选择了继续摸索,绝不使用initrd!

Update: 多次尝试,终于发现问题所在,虽然将文件系统驱动直接编译进了内核,但硬盘是SCSI的,我却没有选上一些SCSI所需的驱动。新内核成功运行。

顺便说一句,过程可以散漫,态度不可不严谨。

标签:

2006年11月3日 星期五

开通Blogger的博客

Donews博客频繁出现问题,令人忍无可忍。于是搬到Google的Blogger。尽管blogspot依然常常被封堵,但好在pkblogs可以代理访问。以前的杂碎慢慢折腾过来罢。不切实际的文字,就抛弃了,留在donews看门罢。
本来想关闭博客不再使用,然而体味一番,觉得这种顾影自怜式的创作还是有些趣味的。
毕竟,一个崭新的,可用的环境,还是值得期待的。