最近听到了一个“谣言”,就是某些人试图或已经向勇于揭开事件真相的人们施压,谣言说,这罪名是“泄露国家机密”。这个罪名可大了,我可不敢“泄露国家机密”啊,心中一阵惶恐。好不容易压了压惊,发现有些不解,到底人家是说国防科技大学提供下载麒麟操作系统是“泄露国家机密”啊?还是说我分析出了麒麟操作系统采用了大量FreeBSD源代码这件事情是“泄露国家机密”啊?如果是前者,那么还是要理解人家的嘛,毕竟人家民用一下也可以有些外快的;如果是后者,那还真是罪过啊,罪过。孰不知这个公开下载的系统中竟然存在着这样的“国家机密”。所以啊,我不知道我的站点还能存在多久,我也不知道我的人身安全是否受到了威胁。我只知道呢,如果大家觉得我写的文章还有点价值的话,请尽快保留吧,要不然哪天突然发现访问不了了再后悔莫及啊。呵呵。
开个玩笑,各位看官切莫当真。国防科技大学会这么无耻么?麒麟开发组会这么卑鄙么?我看不会吧。“厚德博学、强军兴国”,多好的校训啊,“厚德”是第一位的。况且拥有着章文嵩、杨灿群等这样的开源精英人物,说明这个学校应该还是开明的吧。而且麒麟开发组,他们也就是犯了一点儿小错,改了还是好同志,不至于对我这个无名小卒大动干戈吧。他们更不会愚蠢到用更大的错误来掩盖自己的小错的吧。毕竟地球人都知道,人家CNN和纽约时报也瞪大眼睛盯着呢,日盼夜盼的看中国什么时候搞出个什么丑闻来赚取个头条,如果这大错一犯,人家还不注意啊,到时候又爆出一篇xxxx掩盖事实真相的丑闻,多不好啊。家丑还是不要外扬的好,逼得人家报道不了的记者直接向国外投稿赚取美$,我们不说银子没捞着,自己的脸上也不好看啊。所以说,国防科技大学自然做不出来这么愚蠢的事情,我们还是应该相信他们的。
况且,他们不是说我做的分析是针对简化版而不准确了么,有更强大的完整版的。虽然至今为止也没有说完整版的内核都多了什么功能,我看好像这个简化版的内核也是蛮强大的,似乎863计划中的涉及内核的技术,在这里面包含的也差不多了。也真想知道这个完整版的内核多了什么功能(不是说应用哦,是说内核)。
那位看官你说什么?哦,你问我这拔了毛的鸡是不是变成鸭子了?啊,这个问题比较复杂嘛,达尔文同学告诉我们生物的进化是渐进的,不能拔个毛就把鸡说成是鸭子的。但是呢,我们不能忘记拔了毛的鸡还可以变成烤鸡啊。可别小看这“烤”,这可是很有技术含量的,这一烤啊,就看不出原来的样子了,猛一看呀,还真有可能和烤鸭很像呢。您说呢?
人家这半个月来不给回复,恐怕是在做一些“准备”工作。我相信他们还是有勇气去请FreeBSD的核心开发人员来替他们洗清“冤屈”的。这点大家也要给他们信心和思考的时间嘛。
不过万一有一天我的Blog(或者我Dancefire)真的消失了,或者关于麒麟操作系统的报道(直接的或者间接的)消失了,大家还是多多谅解,还是不要责怪他们的好,就当是由于某种“技术问题”所致吧。我只能为这种“技术问题”向大家提前说声抱歉了。
以上纯属对于无聊的“谣言”多说了几句无聊的话,各位觉得无聊大可不必当真。况且,我们也应该相信政府有关部门会关注此事,并进行调查,给关心中国科技发展的我们一个权威、完整、真实的调查报告。
=----------------------------------------------------------------------------------------------------------------------=
巧用FreeBSD 5.3内核启动做了点手脚的麒麟2.1-01
上回书说到,麒麟开发组在我的分析发布之后不久,就删除了网站上的2.0-14/21的光盘镜像,取而代之的是发布了一个新版本2.1-01。
如上回我所提到的那样,麒麟2.1-01相对于以前版本(2.0-14/21)进行了特殊化处理。主要是做了两件事情,一个是用objdump去掉了符号信息,strip了,而且还有一些额外的小动作,这样“成功的”回避了我那篇相似性分析中所用的分析方法;再一个就是修改了引导程序,所以用直接引导内核的方式已经是不可以用FreeBSD内核启动麒麟了,给大家尝试新版本情况下FreeBSD内核同麒麟内核的兼容性带来了一些障碍。
我之前不理解这种换门的行为有什么意义,有一位网友点醒的好,这叫做“迅雷不及掩耳盗铃”--(形容掩耳盗铃速度之快,呵呵)。
也有些人对我的“换门说”产生了质疑,怀疑是不是麒麟2.1真的在结构上有重大改进才导致的无法启动。那么好吧,今天,我们就来证实麒麟2.1确实是换了一个门而已。
系统引导
系统引导,一般为多级,大多数情况下,从MBR接过引导权后,稍加处理后,会转交给一个比较高级的引导程序,一般由这个引导程序来负责启动内核。在Windows NT/2000中是NT Loader;Linux中可能是Grub;在FreeBSD中是Boot Loader。有很多的引导程序比较高级具有多系统的引导能力,有的还具有传递引导权给下一级引导程序的能力。Grub就是其中之一。
麒麟的引导过程
麒麟为了多系统引导和图形化界面,采用了Grub作为第一级引导程序。在选择了"Kylin"后,Grub将加载第二级引导程序,对于2.0-14/21来说使用的是FreeBSD的Boot Loader,而2.1-01开始,麒麟开发组调整了这个引导程序,虽然大体上还是和FreeBSD的Boot Loader相同,但是修改了一些东西,导致这个Boot Loader属于Kylin 2.1-01专用的Boot Loader,既无法启动FreeBSD,也无法启动Kylin 2.0-14/21。也就所谓的自家人不认自家门了。呵呵。
在这个过程中,Boot Loader相当于一个点火器或者钥匙,只有和内核配套,遵循加载内核的约定,才能够成功的将内核加载起来。但是这个引导程序对于运行中的系统安全性和稳定性影响甚微,所以,修改其引导程序的目的,大家可以发挥想象力了。
证明我所说的换门问题很简单,我们只要将门再换回来就行了。今天我们所做的,就是使用FreeBSD的Boot Loader来帮助加载FreeBSD 5.3的内核,最后成功的挂载各个系统模块,并引导图形界面成功。
需求:
1、一个FreeBSD 5.3的内核。我建议重新编译一个内核(和上回一样,要是上回编译了就不用再编译了),加上Linux兼容等可选模块,这样更贴近麒麟的做法。不过最低要求不需要加很多,只要加上Linux兼容的部分就行,我建议至少加上下面的选项:
options COMPAT_LINUX
options LINPROCFS
device sound
2、一个可以运行的麒麟操作系统,是2.1-01版本。
操作步骤:
1. 将新编译的内核随便起一个名,在这个例子中,我将其命名为freebsd_5.3_sl,并存在home目录中。
2. 在FreeBSD 5.3中做下列准备工作:
mkdir ~/boot
mkdir ~/boot/kernel
cp ~/freebsd_5.3_sl ~/boot/kernel/
cp /boot/loader ~/boot/
echo "load /boot/kernel/freebsd_5.3_sl" > ~/boot/loader.rc
echo "boot" >> ~/boot/loader.rc
cd ~
tar -czvf boot.tar.gz boot
3. 将boot.tar.gz传到Kylin的/root目录下,然后在Kylin中开一个shell,执行:
cd /
tar -zxvf /root/boot.tar.gz
这样,就把FreeBSD的Boot Loader和内核已经放好位置了,并且也已经写好了启动脚本。装好了钥匙也装好了门,一切就绪了。
4. 下面,来开始我们的引导之旅吧。:)reboot 重新引导麒麟操作系统。
5. 在GRUB的引导界面移动光标到Kylin上后按e (如果默认就在Kylin上,就直接按e)
6. 将光标移动到第二行,kernel那行,然后按e
7. 我们会看到如下的行。
修改/boot/booter mute为/boot/loader。呵呵,人家从2.0-18的loader换成了booter就是为了不让我们能够启动FreeBSD,今天我们就给它换回来。
8. 回到这个页面后按b,将引导boot loader
9. 好,现在系统开始真正引导了,但是大家会从随后的几个画面发现,麒麟从2.0-01开始,再也不显示Copyright信息了,不但连加州大学的版本信息不显示,连他自己的版本信息也不显示了。据传闻,这样是为了让界面更加干净。嗯,确实挺“干净”。呵呵。不过谁要是特意的想看Copyright,还是可以从dmesg来看到的。
10. 成功的启动了X Window,进入图形界面的登录窗口。
11. 输入口令登录后,开始加载Gnome各个组件
12. 成功的启动了完整的图形界面,大家可以从uname中看到FreeBSD 5.3-RELEASE。
(其实也可以cat /proc/version的,这回抓图的时候忘了,不好意思,呵呵。)
至此,我们完成了仅仅替换为FreeBSD 5.3的内核和引导内核用的引导程序,就做到了完整系统的启动。虽然还有一些警告信息,但是系统服务基本都是正常启动的。和上回的2.0-14/18一样,麒麟开发组新发布的2.1-01同FreeBSD的“兼容性”依旧很不错啊。