7.3. 构建

7.3.1. 验证 getty 和 login 是否存在

bash# ls ~/staging/sbin/getty
bash# ls ~/staging/bin/login

7.3.2. 修改 inittab 以启用多用户模式

修改~/staging/etc/inittab通过更改默认运行级别并添加 getty 条目,如下所示。

# /etc/inittab - init daemon configuration file
#
# Default runlevel
id:2:initdefault:
#
# System initialization
si:S:sysinit:/etc/init.d/rc S
#
# Runlevel scripts
r0:0:wait:/etc/init.d/rc 0
r1:1:respawn:/bin/sh
r2:2:wait:/etc/init.d/rc 2
r3:3:wait:/etc/init.d/rc 3
r4:4:wait:/etc/init.d/rc 4
r5:5:wait:/etc/init.d/rc 5
r6:6:wait:/etc/init.d/rc 6
#
# Spawn virtual terminals
1:235:respawn:/sbin/getty 38400 tty1 linux
2:235:respawn:/sbin/getty 38400 tty2 linux
3:235:respawn:/sbin/getty 38400 tty3 linux
4:235:respawn:/sbin/getty 38400 tty4 linux
5:235:respawn:/sbin/getty 38400 tty5 linux
6:2345:respawn:/sbin/getty 38400 tty6 linux
#
# end of /etc/inittab

7.3.3. 创建 tty 设备

bash# cd ~/staging/dev
bash# mknod ~/staging/dev/tty0 c 4 0
bash# mknod ~/staging/dev/tty1 c 4 1
bash# mknod ~/staging/dev/tty2 c 4 2
bash# mknod ~/staging/dev/tty3 c 4 3
bash# mknod ~/staging/dev/tty4 c 4 4
bash# mknod ~/staging/dev/tty5 c 4 5
bash# mknod ~/staging/dev/tty6 c 4 6
bash# mknod ~/staging/dev/tty c 5 0

7.3.4. 在 /etc 中创建支持文件

7.3.4.1. /etc/issue

创建文件~/staging/etc/issue使用以下示例或设计自定义消息。

Connected to \l at \b bps.

请确保 "\l" 是小写字母 L,而不是数字 1。

7.3.4.2. /etc/passwd

使用文本编辑器创建一个符合 Linux 标准库 (LSB) 文档的最小 passwd 文件。 将文件保存为~/staging/etc/passwd

root::0:0:Super User:/root:/bin/sh
bin:x:1:1:Legacy UID:/bin:/bin/false
daemon:x:2:2:Legacy UID:/sbin:/bin/false

7.3.4.3. /etc/group

使用文本编辑器创建一个符合 LSB 的 group 文件,并将其保存为~/staging/etc/group

root::0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon

7.3.4.4. /etc/nsswitch.conf

创建以下文件并将其保存为~/staging/etc/nsswitch.conf

passwd: files
group:  files

7.3.5. 复制所需的库

bash# cp /lib/libnss_files.so.2 ~/staging/lib
bash# strip --strip-unneeded ~/staging/lib/*

7.3.6. 设置目录和文件权限

在以下目录下的所有文件和目录上设置最小权限~/staging。 所有内容都归 root 用户和 root 组所有。权限对于所有者是读写,对于组是只读。 统一权限的例外情况会根据具体情况处理。

bash# cd ~/staging
bash# chown -R 0:0 ~/staging/*
bash# chmod -R 640 ~/staging/*

在所有目录上设置执行权限。(注意大写字母 "X")

bash# chmod -R +X ~/staging/*

以下目录中的文件/bin对所有人都是读取和执行权限,但su是一个例外。

bash# chmod 755 ~/staging/bin/*
bash# chmod 4750 ~/staging/bin/su

以下目录中的文件/dev具有各种权限。 磁盘设备应仅对管理员可访问。 其他文件如/dev/null应授予所有人完全权限。

bash# chmod 660 ~/staging/dev/fd0 dev/ram0
bash# chmod 666 ~/staging/dev/null
bash# chmod 622 ~/staging/dev/console
bash# chmod 600 ~/staging/dev/initctl
bash# chmod 622 ~/staging/dev/tty
bash# chmod 622 ~/staging/dev/tty?

以下passwdgroup文件必须是全局可读的。

bash# chmod 644 ~/staging/etc/passwd
bash# chmod 644 ~/staging/etc/group

以下目录中的脚本/etc/init.d对管理员是读取和执行权限。

bash# chmod 750 ~/staging/etc/init.d/*

库需要对所有人具有读取和执行权限。

bash# chmod 755 ~/staging/lib/*

只有 root 应该有权访问/root目录。

bash# chmod 700 ~/staging/root

使以下目录中的文件/sbin对管理员是读取和执行权限。

bash# chmod 750 ~/staging/sbin/*

Temp 应该是所有人都可读写的,并设置粘滞位。

bash# chmod 1777 ~/staging/tmp

7.3.7. 创建根磁盘映像

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=~/phase6-image bs=1k count=4096
bash# gzip -9 ~/phase6-image

7.3.8. 将映像复制到软盘

将标记为 "root disk" 的软盘插入驱动器 fd0。

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