5.3. 构建

5.3.1. 从 e2fsprogs 安装实用程序

http://sourceforge.net/projects/e2fsprogs/ 下载 e2fsprogs 源代码包

bash# cd /usr/src/e2fsprogs-1.35
bash# export CC="gcc -mcpu=i386"
bash# ./configure --host=i386-pc-linux-gnu
bash# make
bash# cd e2fsck
bash# cp e2fsck.shared ~/staging/sbin/e2fsck
bash# ln -s e2fsck ~/staging/sbin/fsck.ext2
bash# cd ../misc
bash# cp fsck mke2fs ~/staging/sbin
bash# ln -s mke2fs ~/staging/sbin/mkfs.ext2

5.3.2. 从 util-linux 安装实用程序

ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/ 获取最新的 util-linux 源代码

bash# cd /usr/src/util-linux-2.12h

使用文本编辑器进行以下更改,修改MCONFIG:

bash# ./configure
bash# make
bash# cp disk-utils/mkfs ~/staging/sbin
bash# cp fdisk/fdisk ~/staging/sbin
bash# cp login-utils/agetty ~/staging/sbin
bash# ln -s agetty ~/staging/sbin/getty
bash# cp login-utils/login ~/staging/bin
bash# cp misc-utils/kill ~/staging/bin
bash# cp mount/mount ~/staging/bin
bash# cp mount/umount ~/staging/bin
bash# cp mount/swapon ~/staging/sbin
bash# cp sys-utils/dmesg ~/staging/bin

5.3.3. 检查库依赖

bash# ldd ~/staging/bin/* | more
bash# ldd ~/staging/sbin/* | more
bash# ls ~/staging/lib

通过 ldd 命令显示的所有依赖项都是暂存区中已存在的库,因此无需复制任何新内容。

5.3.4. 剥离二进制文件以节省空间

bash# strip ~/staging/bin/*
bash# strip ~/staging/sbin/*

5.3.5. 创建额外的设备文件

bash# mknod ~/staging/dev/ram0 b 1 0
bash# mknod ~/staging/dev/fd0 b 2 0
bash# mknod ~/staging/dev/null c 1 3

5.3.6. 创建 fstab 和 mtab 文件

bash# cd ~/staging/etc

使用像 vi、emacs 或 pico 这样的编辑器创建以下文件并将其保存为~/staging/etc/fstab.

proc        /proc   proc   defaults   0   0
/dev/ram0   /       ext2   defaults   1   1

创建一个空的 mtab 文件。

bash# echo -n >mtab

5.3.7. 编写脚本以检查和挂载本地文件系统

使用编辑器创建以下 shell 脚本并将其保存为~/staging/etc/init.d/local_fs:

#!/bin/sh
#
# local_fs - check and mount local filesystems
#
PATH=/sbin:/bin ; export PATH

fsck -ATCp
if [ $? -gt 1 ]; then
  echo "Filesystem errors still exist!  Manual intervention required."
  /bin/sh
else
  echo "Remounting / as read-write."
  mount -n -o remount,rw /
  echo -n >/etc/mtab
  mount -f -o remount,rw /
  echo "Mounting local filesystems."
  mount -a -t nonfs,nosmbfs
fi
#
# end of local_fs

设置脚本的执行权限。

bash# chmod +x local_fs

5.3.8. 创建压缩的根磁盘镜像

bash# cd /
bash# dd if=/dev/zero of=/dev/ram7 bs=1k count=4096
bash# mke2fs -m0 /dev/ram7 4096
bash# mount /dev/ram7 /mnt
bash# cp -dpR ~/staging/* /mnt
bash# umount /dev/ram7
bash# dd if=/dev/ram7 of=~/phase4-image bs=1k count=4096
bash# gzip -9 ~/phase4-image

5.3.9. 将根磁盘镜像写入软盘

将标有 “root disk” 的软盘插入驱动器 fd0。

bash# dd if=~/phase4-image.gz of=/dev/fd0 bs=1k