与其直接将文件复制到 ramdisk,不如设置一个暂存区来简化操作。暂存区将为我们提供工作空间,而无需担心 ramdisk 的空间限制。它还将提供一种保存工作的方法,并使在项目后续阶段增强 rootdisk 变得更加容易。
暂存过程将如下所示
按照 FHS 中的定义创建目录结构。
从第 2 阶段的 root 磁盘复制文件。
从源代码构建新软件包。
将文件安装到正确的 FHS 目录中。
剥离二进制文件以节省空间。
检查库依赖项。
将整个目录结构复制到 ramdisk。
压缩 ramdisk 并将其写入软盘。
bash# mkdir ~/staging bash# cd ~/staging bash# mkdir bin boot dev etc home lib mnt opt proc root sbin tmp usr var bash# mkdir var/log var/run |
bash# dd if=~/phase2-image.gz | gunzip -c > /dev/ram7 bash# mount /dev/ram7 /mnt bash# cp -dpR /mnt/* ~/staging bash# umount /dev/ram7 bash# rmdir ~/staging/lost+found |
从 ftp://ftp.gnu.org/gnu/coreutils/ 下载最新版本的 coreutils
bash# cd /usr/src/coreutils-5.2.1 bash# export CC="gcc -mcpu=i386" bash# ./configure --host=i386-pc-linux-gnu bash# make bash# cd src bash# cp cat chgrp chmod chown cp date dd df ~/staging/bin bash# cp hostname ln ls mkdir mkfifo mknod ~/staging/bin bash# cp mv rm rmdir stty su sync uname ~/staging/bin |
通过在一些新的二进制文件上使用 ldd 来检查库要求。
bash# ldd ~/staging/bin/cat bash# ldd ~/staging/bin/ls bash# ldd ~/staging/bin/su bash# ls ~/staging/lib |
注意所需的库与暂存区中存在的库之间的差异(分别由 ldd 命令和 ls 命令显示),然后将任何缺少的库复制到暂存区。
bash# cp /lib/librt.so.1 ~/staging/lib bash# cp /lib/libpthread.so.0 ~/staging/lib bash# cp /lib/libcrypt.so.1 ~/staging/lib |
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=~/phase3-image bs=1k count=4096 bash# gzip -9 ~/phase3-image |
![]() | 创建压缩的 root 磁盘镜像的过程在剩余的章节中变化很小。编写一个小的脚本来处理此功能可以节省大量时间。 |