有些程序使用不可更改的路径指向现在还没有到位的程序。为了满足这些程序,创建一些符号链接,在本章中安装对应的软件之后它们会被真正的文件替代:
ln -sv /tools/bin/{bash,cat,echo,pwd,stty} /bin ln -sv /tools/bin/perl /usr/bin ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib ln -sv /tools/lib/libstdc++.so{,.6} /usr/lib sed 's/tools/usr/' /tools/lib/libstdc++.la > /usr/lib/libstdc++.la ln -sv bash /bin/sh
历史上,Linux 在 /etc/mtab
文件中维护着一个被挂载文件系统的列表。现代内核在内部维护这个列表,并通过 /proc
文件系统暴露给用户。为满足那些需要 /etc/mtab
文件的工具,创建下面的符号链接:
ln -sv /proc/self/mounts /etc/mtab
为了让 root
用户能够登录并且要 “root” 这个名字被识别,在
/etc/passwd
和 /etc/group
这两个文件中就要有对应的条目存在。
运行以下命令创建 /etc/passwd
文件:
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
root
用户的实际密码 (这里的 “x” 只用作占位符) 稍后再设置。
运行以下命令创建 /etc/group
文件:
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
mail:x:34:
nogroup:x:99:
EOF
创建的组并不是任何标准的一部分——它们一部分是本章中 Udev 配置的要求,另一部分是一些已有发行版的惯例。Linux 基础标准
(LSB,位于 http://www.linuxbase.org) 只推荐
root
组的 ID 为 0 并且 bin
组的 ID 为 1。所有其他组的名称和 ID
都可以由系统管理员自由选择,因为写得好的程序会使用组的名字而不是 ID。
要移除 “I have no
name!” 这个提示符,启动一个新的 shell。因为在 第
5 章 中已经安装了完整的 Glibc 并且 /etc/passwd
和 /etc/group
这两个文件也创建了,用户和组名称的解析就能够工作了:
exec /tools/bin/bash --login +h
注意使用 +h
参数。此项告知 bash
不要使用内置的路径哈希。没有这个参数,bash
会记住执行过的二进制的路径。要确保新编译的二进制一旦安装就立刻使用, +h
参数在本章的余下部分一直都要使用。
login、agetty 和 init 程序 (还有其他一些) 使用大量日志文件记录信息,例如谁在什么时候登录过系统。然而,如果日志文件不存在,这些程序就不会写入。初始化日志文件并且给出适当的权限:
touch /var/log/{btmp,lastlog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp
/var/log/wtmp
文件记录所有的登入登出。/var/log/lastlog
文件记录每个用户上次登录的时间。/var/log/btmp
文件记录失败的登录尝试。
/run/utmp
文件记录当前登录的用户。此文件在引导脚本中动态创建。