RAVLiveHD 制做方法和改进简述

这篇文章主要是在时空论坛与climbing、pt等讨论的内容现在整理一下帖出来。红色部分是刚刚加上的内容。
原贴地址:http://www.znpc.net/bbs/viewthread.php?tid=3489&extra=page%3D2
首先是climbing要求给出hack过程如下便是:

Miniroot文件就是initrd了,是协助内核完成初始化工作的。而RISING那文30M的文件是最终的根文件系统,而这个文件系统是由initrd里的脚本来挂载的,这是所以LiveCD的逻辑结构,所以没感觉有什么不规范的,完全可以用GRUB4DOS加载,不用任何Hack工作。我所作的工作就是对一个linux系统的优化和设置。
miniroot 可以在linux里用 sudo mount -o loop miniroot /mnt 挂载修改。
至于rising这个最终根文件系统,要多说一点,目前的LiveCD的最终根文件系统主要有knoppix的Cloop格式,还有ubuntu的squashfs格式,这两种文件系统都是经过压缩且只读的,且Cloop是对某种格式的块文件进行压缩,而squashfs本身就是一个压缩过的块文件,所以个人认为集成度更高更灵活。Rising这个文件格式用的是前者(Cloop),且瑞星引导杀毒光盘可以说就是Knoppix3.3的精简版,然后加了个瑞星杀毒软件linux版作成的。

squashfs相关知识请去时空论坛问PT吧,他比较专注搞squashfs。

cloop格式挂载方式有些复杂,Debain、knoppix和ubuntu6.10里可直接挂载,其他系统里都要重新编译Cloop的内核驱动(包括ubuntu7.04,系统自带的cloop.ko不能用)。
在ubuntu6.10下挂载过程如下:
在linux的/lib/目录里搜cloop.ko文件
然后 insmod /lib/……/cloop.ko file=/……/RISING
然后mount /dev/cloop0 /mnt 就可以在/mnt目录里看到RISING这个文件系统里的内容了。

对miniroot的修改影响的是Linux的初始化过程。RISING这个文件不能修改,前面已经提到过,这个文件是只读的,所以要把/mnt里的文件 包抱属性全部CP出来:cp -a /mnt/* ~/Desktop/tmp
然后对tmp中的文件进行修改,再封装回去(须要系统里装有cloop-utils)。
封装过程正如前面所说,cloop是对另一种块文件的压缩,所以要先将~/Desktop/tmp/ 下的所有文件封装为ISO格式:mkisofs –r –l –o rising.iso ~/Desktop/tmp/
然后再压缩为cloop格式:create_compressed_fs rising.iso rising.fs
这个rising.fs 就是目标文件了,将他重命名为rising就可以用了

这便是所有的制做过程。
cloop的使用请看此链接:
http://www.knoppix.net/wiki/Cloop

更详细的制做过程是很繁琐的,所以很难写,这里只大概介绍一下主要技术细节

Climbing是个热终于pxe启动的人士,所以想到要装这个RAVLinuxHD进行改造使其可以从网络启动。主要难点在于从网络上下载了vmlinuz和miniroot后,控制权就给了内核,但rising这个大文件还没有被下载,无法被挂载,所以想到将rising这个大文件放到本地硬盘上,这又违背了无盘的原则,在内核中加入pxe又无从下手,所以最终解决方案为,把miniroot和rising这个文件合并,这里有两种合法:

1.把rising直接放到miniroot中的某个目录中,然后修改linuxrc这个脚本使其从指定位置直接挂载rising文件。这要重新制做miniroot,使其能装的下这个rising文件,下面给出方法。
2.DD命令做一个60M 的block文件并格试化一下,如ext2.fs,mount到某处,如:/mnt/minirt。把原Miniroot里的内容CP到/mnt/minirt,再把RISING那个文件挂上,把里边的内容全部“复制”到/mnt/minirt/RISING里。然后再对linuxrc作一此修改去掉查找挂载rising文件的语句,就是如此了。

采取以上任何方法后还须做最后一步工作:
在menu.lst里须加上ramdisk_size=XXXX使内核调整分配给initrd的内存空间,使其能容纳我们这个比较大的initrd文件。否则会报 image too big。
到此就实现用pxe启动RAVlinux了。Pxe相关知识自己去找吧,可以去时空论坛找一些老帖子看,切记在那里严重鄙视那此不看老帖就提问的人。想毕您应该知道怎么做了。

个人认为方法2在性能方面更有优势,少了insmod,少了mount,更少了cp时从Cloop里解压的过程。虽说在内存里,速度比较快,但内核的工作周期被延长了很多。更具灵活性的方法是,不用linuxrc,真接把miniroot用RISING里的内容替代,把linuxrc里CP的工作手动干了,速度更快,这需要一些测试,有兴趣可以搞一下!

Ok这里就把所有主要内容提出来了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据