百度空间 | 百度首页 
 
查看文章
 
简单制作FreeBSD6.2的live CD的过程
2008-01-03 18:05

动机:制作live CD,无非是便于制作系统的安装盘,至于是什么系统,就看公司开发的是什么产品了:)

过程简单描述:在主机A上安装FreeBSD系统,并安装一些软件;根据主机A的系统环境,制作live CD的ISO文件;用这个ISO文件,可以制成光盘;在主机B上运行这张光盘,启动光盘上的系统后,运行脚本命令,将系统COPY到主机B上;主机B有了和主机A一样的运行环境(也可以不一样,看脚本怎么写了)。

实验环境:虚拟机

实现步骤:

1.在主机A上安装新的FreeBSD系统

        不赘述,随需要定制,但是必须要安装mkisofs,可以在PORTS中找到。

2.拷贝live CD文件系统

       在根目录下,建立目录livecd,将文件系统拷贝到livecd目录下。显然,不能拷贝自身到livecd,需要在livecd目录下建立一个文本文件,里面记录不要拷贝的文件(目录)。如下:

#vi /livecd/exclued_files

-------------------------------------------------------------------

/livecd

-------------------------------------------------------------------

执行命令#tar -X /livecd/exclude_files -cf - -C / /livecd | tar xpf - -C /livecd

3.修改livecd目录的内容

       删除dev内容,#rm /livecd/dev/*,因为这些内容在系统启动时会根据devfs自动生成;

       备份var,#mv /livecd/var /livecd/var.copy , #mkdir /livecd/var,该var目录将挂载内存设备,制造可写入环境;

        清除fstab内容,#> /livecd/etc/fstab,这样,当livecd启动加载完内核后,需要手工输入挂载根分区的位置,简便的方法是在fstab中加入一行:“/dev/acd0   /   cd9660   r   0   0”(不含引号);

        去掉开机选项画面:#vi /livecd/boot/loader.rc,注释掉最后一行,并新增一行:“boot”(不含引号)。

4.制作livecd的写入环境

       首先备份文件#cp /livecd/etc/rc /livecd/mkbsd/rc.copy,mkbsd目录保存livecd的备份文件和安装时的执行脚本。

       #vi /livecd/etc/rc-->在export HOME PATH后面加上几句话,利用mfs可写的特征,可以根据自己情况改变参数,挂载的是内存设备。

---------------------------------------------------------------------------------

/sbin/mdmfs -s 2m md /tmp

/sbin/mdmfs -s 32m md /var

cp -R /var.copy/* /var

---------------------------------------------------------------------------------

到现在为止,livecd做成的光盘基本可以启动了,以下部分是为了将livecd内容拷贝到主机B上做的工作。

5.制作磁盘分区的脚本

    比如,我打算这样分区:#cat /mkbsd/savedlabel

-----------------------------------------------------------------------------------

# /dev/da0s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
a:    4G       16       4.2BSD                       # /
b:    500M     *        swap                          # swap
c:    *             *          unused                       # "raw" part, don't edit
d:    *            *        4.2BSD                       # /home

-----------------------------------------------------------------------------------

以上这个文件用于分区使用,那么相应产生的fstab文件就应该是这样的,#cat /mkbsd/fstab.copy

-----------------------------------------------------------------------------------

# Device                Mountpoint      FStype Options         Dump    Pass#
/dev/da0s1b             none               swap    sw                 0       0
/dev/da0s1a             /                        ufs      rw                  1       1
/dev/da0s1d             /home               ufs      rw                 2       2
-----------------------------------------------------------------------------------

安装系统时需要把这个文件拷贝成fstab。

    现在说一下分区脚本的内容,#cat /mkbsd/fdsk.sh

-----------------------------------------------------------------------------------

#!/bin/sh

fdsk()
{
        echo "Starting format disk..."
        SAVEDLABEL="/mkbsd/savedlabel"              //假设了安装的磁盘类型是SCSI
        dd if=/dev/zero of=/dev/da0 bs=1k count=32 //清除原磁盘空间上的分区表
        fdisk -BI /dev/da0                                          //创建主分区
        bsdlabel -Bw /dev/da0s1                               //写入磁盘启动标志
        bsdlabel -R /dev/da0s1 ${SAVEDLABEL}       //根据配置分区
        newfs /dev/da0s1a                                        //格式化
        newfs /dev/da0s1d
        bsdlabel /dev/da0s1
}
fdsk

-----------------------------------------------------------------------------------

以上是假设磁盘类型是SCSI,如果是IDE的磁盘,就应该将da0换成ad0了。

6.拷贝文件系统的脚本

    #cat /mkbsd/copyfs.sh

----------------------------------------------------------------------------------

#!/bin/sh

copyfs()
{
echo "Starting copy file system..."
MKBSD="/mkbsd"
EXCLD_FILES="${MKBSD}/excludetar"
MNT_ROOT="${MKBSD}/mnt/a"
MNT_HOME="${MKBSD}/mnt/d"
mount /dev/da0s1a ${MNT_ROOT}
mount /dev/da0s1d ${MNT_HOME}
tar -X ${EXCLD_FILES} -cf - -C / . | tar -xpf - -C ${MNT_ROOT}
mkdir "${MNT_ROOT}/home"
tar -zcf - -C /home . | tar -xpf - -C ${MNT_HOME}
mv "${MNT_ROOT}/var.copy" "${MNT_ROOT}/var"
rm -f "${MNT_ROOT}/etc/rc" && cp "${MKBSD}/rc.copy" "${MNT_ROOT}/etc/rc"
rm -f "${MNT_ROOT}/etc/fstab" && cp "${MKBSD}/fstab.copy" "${MNT_ROOT}/etc/fstab"
umount ${MNT_ROOT}
umount ${MNT_HOME}
}
copyfs

----------------------------------------------------------------------------------

以上脚本内容很简单,无非是将磁盘的分区挂载到运行光盘的MNT分区上,然后将光盘上的文件系统分别拷贝到各个分区上,最后在将准备好的var.copy和fstab.copy等文件覆盖过来。就这么简单。/mkbsd/excludetar文件的内容如下:

----------------------------------------------------------------------------------

/mkbsd

----------------------------------------------------------------------------------

7.制作ISO文件

     现在回到主机A上的文件系统上来,

#cd /livecd

#mkisofs -R -no-emul-boot -b boot/cdboot -o /home/livecd.iso

这样,光盘的ISO文件就做好了,保存在了/home下。

8.使用livecd

     在主机B上,插入livecd光盘,系统启动后会执行光盘上的文件系统,这与一般的livecd没什么区别。进入mkbsd目录,依次执行fdsk.sh,copyfs.sh脚本后,取出光盘,重新启动主机B,这样就会看到一个新FreeBSD系统装好了。

9.结尾

    时间较久,凭记忆写的,可能缺少点啥,也可能顺序上有些问题。不过大概就这些关键步骤。网上也有些类似文章,不过最早参考一篇国外的文章Building a CD Bootable Firewall(zz)。也有人说可能ps等命令不好用,解决办法是#rm /dev/null 。


类别:unix类 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu