科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件教你制作可以随身携带的FreeBSD系统 (3)

教你制作可以随身携带的FreeBSD系统 (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

现在就要准备系统所需要的基本程序了,首先最基本的是init和sh,init是所有进程的父进程,它负责进行一些初始化工作,它将是kernel引导完成后要运行的第一个用户进程

作者:赛迪网技术社区 来源:赛迪网技术社区 2007年10月22日

关键字: 系统 FreeBSD 制作 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

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,编辑它以选择你需要哪些软件,下面以一个例子来说明它的用法。

# $FreeBSD: src/release/picobsd/router/crunch.conf, 

  v 1.1.2.2 2001/02/20 02:53:35 luigi Exp $ 

  # 

  # NOTE: the string "/usr/src" will be automatically replaced with the 

  # correct value set in 'build' script - you should change it there 

  # Default build options 

  buildopts -DNOPAM -DRELEASE_CRUNCH -DNOSECURE -DNOCRYPT -DNONETGRAPH -DNOIPSEC 

  # other sources 

  srcdirs /usr/src/bin 

  srcdirs /usr/src/sbin/i386 

  srcdirs /usr/src/sbin 

  srcdirs /usr/src/usr.bin 

  srcdirs /usr/src/usr.sbin 

  srcdirs /usr/src/gnu/usr.bin 

  srcdirs /usr/src/gnu/usr.sbin 

  srcdirs /usr/src/libexec 

  # sources for ns & vm 

  srcdirs /usr/src/release/picobsd/tinyware

以下为你所需要在crunch包含的程序列表,以空格分隔。   

  progs dmesg ping ifconfig route hostname 

  progs cp rm ls cat test mkdir less 

  progs uname sysctl 

  progs init sh reboot

ln是表示建立一个别名,如ln less more,表示当执行more的时候实际上是执行less,ln less more。以下是指定编译时需要的库:   

  libs -lncurses -lmytinfo -lipx 

  libs -lz -lpcap -lalias 

  libs -ledit -lutil -lmd -lcrypt -lmp -lgmp -lm -lkvm 

  libs -lgnuregex -ltelnet

当编辑好crunch.conf之后,你就可以开始编译crunch了:

bsd# make

这时会生成一个名为crunch1的程序,我们要的就是它了。

5、建立内存磁盘

大家可以看到crunch1加上我们刚才编译的内核和loader程序,已经超出了软盘的容量,同时为了加速程序的运行我们需要使用MD(内存磁盘)来解决这个问题,MD将作为系统的根文件系统和用来存放系统程序。对于内存磁盘的大小一般不易太大,因为这样会占用过多的内存,下面我们就以建立一个3M的内存磁盘为例说明如何建立内存磁盘:   

  bsd# cd /root 

  bsd# dd if=/dev/zero of=bsd bs=1k count=3072 # 生成一个3M的文件,用来做MD 

  bsd# vnconfig -c -s labels vn0c bsd 

   # 使用bsd来创建一个vn设置,以便在其中存放程序 

  bsd# disklabel -w -r vn0c auto # 建立disklabel 

  bsd# disklabel -B vn0c # 安装启动代码 

  bsd# newfs vn0c # 创建UFS文件系统

bsd# mount /dev/vn0c /mnt # 将vn0c即bsd mount到/mnt。接下来要做的就是建立目录结构,具体建立哪些目录这要视需要决定,本例中需要建立如下目录:   

  bsd# mkdir /mnt/etc 

  bsd# mkdir /mnt/sbin 

  bsd# mkdir /mnt/bin 

  bsd# mkdir /mnt/dev

然后将crunch1复制到/mnt/sbin中,再将刚才编译进crunch1中的那些命令分别做上symbol link:  

  

  bsd# cp /usr/src/release/picobsd/custom/crunch1/crunch1 /mnt/sbin 

  bsd# cd /mnt/sbin 

  bsd# ln -s ./crunch1 init # init必须在/mnt/sbin目录中 

  bsd# ln -s ./crunch1 reboot 

  bsd# ln -s ./crunch1 sysctl 

  bsd# ln -s ./crunch1 ifconfig 

  bsd# ln -s ./crunch1 route 

  bsd# ln -s ./crunch1 ping 

  bsd# ln -s ./crunch1 dmesg 

  bsd# cd /mnt/bin 

  bsd# ln -s ../sbin/crunch1 sh # sh必须在/mnt/bin目录中 

  bsd# ln -s ../sbin/crunch1 hostname 

  bsd# ln -s ../sbin/crunch1 cp 

  bsd# ln -s ../sbin/crunch1 rm 

  bsd# ln -s ../sbin/crunch1 ls 
    bsd# ln -s ../sbin/crunch1 cat 

  bsd# ln -s ../sbin/crunch1 test 

  bsd# ln -s ../sbin/crunch1 mkdir 

  bsd# ln -s ../sbin/crunch1 less 

  bsd# ln -s ../sbin/crunch1 uname 

  bsd# ln -s ../sbin/crunch1 more

6、编写启动脚本

因为我们的系统只是为了测试在软盘上运行FreeBSD,因而这里的启动脚本非常简单只是让系统可以工作,没有做其它的工作。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章