制作软盘上运行的FreeBSD系统
时间:2008-01-16 13:15:06 来源: 作者:
|
制作软盘上运行的FreeBSD系统 =========================== 作者:Matthew(黑夜编码人) <matthew@cnfug.org>; 网站:http://www.cnfug.org/ http://www.arbornet.org/~matthew/ 最后版本:http://www.cnfug.org/journal/2/05.html 测试平台:FreeBSD 4.5 Release (i386) 前言 大家可能见到过很多在软盘上运行的Linux系统,可在软盘上运行的FreeBSD反而比较少,虽然有PICOBSD,然而很多时候PICOBSD并不能满足我们的需要,那么可不可以自己制作一个在软盘上运行的FreeBSD系统呢?答案是肯定的。我在维护着一个Floppy Firewall的Project (http://www.cnfug.org/project/ffw/),它是一个基于FreeBSD和IPFilter的运行在软盘上的防火墙系统,很多网友在使用了Floppy Firewall之后发邮件来询问如何使FreeBSD运行在一张小小的软盘上。但由于前段时间事情太多一直没有时间,今天终于找到时间,所以把制作在软盘上运行的FreeBSD的过程写出来与大家分享,由于时间仓促,文中难免有错误之处,还请大家指教。同时非常欢迎大家访问CNFUG(China FreeBSD User Group, http://www.cnfug.org),它是一个由一些FreeBSD爱好者组织起来的自由组织,目的是为大家提供中文的FreeBSD方面的资源,目前CNFUG定期的向大家发行免费的FreeBSD中文技术期刊(http://www.cnfug.org/journal/)和维护一些Project(http://www.cnfug.org/project/)。 1、FreeBSD的启动过程简介 当BIOS读入MBR之后,MBR中的程序读入硬盘FreeBSD Slice(FreeBSD分区)中的引导程序,引导程序默认情况下会加载/boot/loader,然后loader将加载/kernel,此时kernel开始检测一些硬件和做一些初始化。初始化完成后kernel将mount root device,然后启动系统初始化进程/sbin/init,init将根据/etc/rc中的设置来进行初始化等。 可以看出我们需要解决的部分就是:引导程序 ->; /boot/loader ->; /kernel ->; /sbin/init ->; /etc/rc 在了解了启动过程之后和问题所在之后,我们便可以开始制作软盘上的FreeBSD了。 2、初始化软盘 首先要做的就是要将软盘初始化,包括设置disklabel和创建文件系统(格式化成ufs格式)。
接下来是安装引导程序。
现在软盘已经能够引导了,但因为我们要在它上面放置程序,所以要创建文件系统。
刚才已经做好了引导程序,因为引导程序会加载/boot/loader,所以我们还需要将系统中的/boot/loader复制到软盘中。
根据FreeBSD的启动过程,现在我们已经准备好了引导程序和loader,接下来就要准备内核了。 3、定制内核 软盘的空间有限,所以我们需要定制一个小内核,而不能直接使用系统原来的内核。 由于我们只使用软盘,所以内核中的关于scsi、ata、atapi和raid等这些东西都应该删除,因为我们不需要IPv6所以INET6也应该删除,具体留下些什么要看自己的用途了,这没有什么标准。不过有几样是必须的: options MFS # 内存文件系统支持 options MD_ROOT # 使用MD(内存磁盘)设备做root options UFS # UFS文件系统支持 options UFS_ROOT # UFS ROOT pseudo-device md # MD设备支持 下面是我使用的一个内核配制文件:
上面的内核基本上是一个系统要运行的最小配制了,当然如果你的机器不同具体也不同,大家按自己的情况来定,我的机器配制是: CPU: Pentium III 733Mhz MotherBoard: Via 693A Chipset NIC: Realtek 8139c 当配制好之后就是编译内核了,建议大家使用config的方式来编译,注意,最后不要使用make install,否则你原来的内核会被替换。
编译完成后就会成生kernel这个文件,这时它的体积还是比较大,不过现在不用管它,后面将会介绍如何处理它。 4、编译系统程序 现在就要准备系统所需要的基本程序了,首先最基本的是init和sh,init是所有进程的父进程,它负责进行一些初始化工作,它将是kernel引导完成后要运行的第一个用户进程,而sh用于解释/etc/rc中的命令。 在UNIX中大部程序都使用了共享库,这有利减少磁盘空间的占用,这对于使用硬盘是非常有用的,然而对于软盘就不太适用了,因为单一个大部分程序都要使用的库libc.so就有500多K,加上其它的库软盘根本就装不下。 我们可以发现,大部分时候一个程序只是用到了库中的某个函数,但同样也要加载整个库,所以我们可以使用静态编译来使程序只包含它使用的那部分函数,这样可以减少程序的大小。 不过这样问题同样存在,如果只有少数程序这到没有什么,一旦程序很多时,那么空间问题同样存在。如果会C语言的朋友都知道,其实每一个程序中有很大一部分函数是相同的,比如printf,这个函数在大部分程序中都会用到,如果每个程序都包含一段printf的代码,那么如果有100个程序的话,就会包含100个这样的代码,然而这些代码都是相同的,实际上有99个都是浪费了空间,那么可不可以让一些程序在静态编译的情况下也能够共享一些函数呢?要知道答案,往下接着看。 幸好,PICOBSD为我们提供了这样的一个机制,使得程序即不用加载标准库也可以利用其它程序中的相同函数,这就是crunch(crunch好像是世界顶级黑客高手John Draper的网名,不知道这与他有没有关系。^_^)。 crunch是将所有需要的软件编译在一个文件中即crunch,然后当中的程序通过symbol link的方式link到它上面,这样便可以使用相应的程序(类似于linux中的busybox),同时又节约了空间。PICOBSD为我们提供了一个自己定制crunch的机会,在FreeBSD4.5 Release(注:4.8 Release中的crunch无法定制,至少我没有找到,所以建议大家使用4.5)中,crunch的配制文件是/usr/src/release/picobsd/custom/crunch1/crunch.conf,编辑它以选择你需要哪些软件,下面以一个例子来说明它的用法:
当编辑好crunch.conf之后,你就可以开始编译crunch了:
这时会生成一个名为crunch1的程序,我们要的就是它了。 5、建立内存磁盘 大家可以看到crunch1加上我们刚才编译的内核和loader程序,已经超出了软盘的容量,同时为了加速程序的运行我们需要使用MD(内存磁盘)来解决这个问题,MD将作为系统的根文件系统和用来存放系统程序。对于内存磁盘的大小一般不易太大,因为这样会占用过多的内存,下面我们就以建立一个3M的内存磁盘为例说明如何建立内存磁盘:
接下来要做的就是建立目录结构,具体建立哪些目录这要视需要决定,本例中需要建立如下目录:
然后将crunch1复制到/mnt/sbin中,再将刚才编译进crunch1中的那些命令分别做上symbol link:
6、编写启动脚本 因为我们的系统只是为了测试在软盘上运行FreeBSD,因而这里的启动脚本非常简单只是让系统可以工作,没有做其它的工作,其内容如下:
7、建立设备文件 现在需要建立一些基本的设备文件,我们使用/dev/MAKEDEV来完成这些操作:
8、最后工作 到目前为止,我们的启动部分,Kernel和内存磁盘都已经准备好了,下面就开始整合它们了。 因为init启动的时候会查找login class中的daemon这个类别,如果没有则会出现错误提示,为了使init不报错,我们还需要复制/etc/login.conf到/mnt/etc中: bsd# cp /etc/login.conf /mnt/etc/login.conf 因为loader支持直接加载gzip压缩格式的文件,这为我们节约磁空提供了方便,同时也解决了我们空间不够的问题,现在压缩kernel和内存磁盘bsd:
然后编辑loader的配制文件:
输入:
存盘退出,将kernel.gz和bsd.gz复制到软盘中:
现在用你的这张软盘就可以启动你的机器,如果一切正常的话,你将看到"Hello, it's my Floppy BSD"的提示,并且看到可爱的shell符"#"了,是不是很有满足感呢?:) 到此为止一个基本的BSD系统已经完成了,如果你想继续扩展Floppy BSD的功能,那就按照上面的方法自己做吧! 同时我在CNFUG(China FreeBSD User Group, http://www.cnfug.org)维护着一个Floppy Firewall(http://www.cnfug.org/project/ffw/)的Project,就是利用这种方法制作的一个在软盘上运行的防火墙系统,你可以用来做参考。 按照本文的步骤,我制作了一个例子,大家可以到这里下载:http://www.cnfug.org/tmp/flp-bsd.bin 使用方法请参照Floppy Firewall的使用方法(http://www.cnfug.org/project/ffw/)。 这几天太累了,我现在得去睡觉了。 参考资料: PICOBSD Project ihweb 回复于:2003-06-06 10:38:56 绝对原创!! jxbbs 回复于:2003-06-06 13:32:56 在U盘上能用吗? 黑夜编码人 回复于:2003-06-06 13:39:19 引用:原帖由 "jxbbs"]在U盘上能用吗? 发表: 启动问题没有解决,我试了很多次,每次都提示invalid silce! 看来是认不到分区格式? ilex 回复于:2003-06-06 14:16:09 太高深,绝对精华! qjlemon 回复于:2003-06-06 14:50:21 请教一下编码人大侠, :shock: 那个防火墙是基于picobsd做的吗?我看那里面的文件不象这篇文章讲的,而是把那些命令都做到单个的kernel文件里去了! 黑夜编码人 回复于:2003-06-06 15:04:49 引用:原帖由 "qjlemon"]请教一下编码人大侠, :shock: 那个防火墙是基于picobsd做的吗?我看那里面的文件不象这篇文章讲的,而是把那些命令都做到单个的kernel文件里去了! 发表: Floppy Firewall不是完全基于PICOBSD做的,只是使用了PicoBSD的crunch程序。 qjlemon 回复于:2003-06-06 15:12:26 引用:原帖由 "黑夜编码人" 发表: Floppy Firewall不是基于PICOBSD做的,只是使用了PicoBSD的crunch程序。 那个把普通的程序和内核做成一个文件的技术可真酷! :) binzai 回复于:2003-06-06 16:00:26 不错,加"味精" ihweb 回复于:2003-06-06 16:38:57 引用:原帖由 "binzai"]不错,加"味精" 发表: 上菜咯!!! :lol: :lol: :lol: :lol: qjlemon 回复于:2003-06-06 16:44:34 不会是用那个什么crunch把kernel也编译在里面的吧??? hello_unix 回复于:2003-06-06 22:04:00 高,应该顶顶顶!!! 红袖添香 回复于:2003-06-06 23:52:42 ... 精华! 夜码辛苦了! hdcola 回复于:2003-06-07 20:36:36 呵呵,我们已经解决了运行于光盘上,现在又解决了运行于软盘上,呵呵,bsd就要无处不在了 :) jxbbs 回复于:2003-06-07 20:49:09 引用:原帖由 "hdcola"]呵呵,我们已经解决了运行于光盘上,现在又解决了运行于软盘上,呵呵,bsd就要无处不在了 :) 发表: 最好在U盘上能用 zyme 回复于:2003-06-07 21:11:32 会有的, www.cnfug.org binzai 回复于:2003-06-08 11:30:17 我想问各位一个问题:在FB4.5中来配置net,用系统默认的基本配置,制作出来的软盘可以启动也可以正常用可就是出现两处cp错误 Mountion root from ufs:/dev/md0c cp:root:No such file or directory cp:etc:No such file or directory Reading /etc from /dev/fd0c...... cp:root:No such file or directory 以root登陆后,可以发现有bin、etc、mnt1、sbin、tmp、cbrom、fd、mnt2、stand、usr、dev、home、proc、start_floppy、var、dos、mnt、root、tftpboot、wd目录,root、start_floppy、fd等有几个目录都是空的,谁可以帮我去掉启动时的cp错误 pxlh 回复于:2003-06-09 07:30:52 由于我的笔记本电脑上只有CARDBUS网卡,,, 希望能加入CARDBUS网卡支持,听说只有在FB5。X中才有这方面的支持。 4。X sunt 回复于:2003-06-09 09:14:06 牛啊 yanyp 回复于:2003-06-14 18:19:08 我用过www.bbiagent.com/net 下的floppy firewall(基于linux与java(jvm)) 不过是共享software,要用全部的功能还要交钱 这下我自己可作一个了 THANKS,Matthew Macolex 回复于:2004-12-30 15:20:08 好厉害! 顶! 叶大马猴 回复于:2004-12-30 23:13:29 U盘...继续... 基本上可以用32Mb或64Mb的定制. |
原文链接:http://bbs.chinaunix.net/viewthread.php?tid=85257 转载请注明作者名及原文出处 |










文章评论
共有 位网友发表了评论 查看完整内容