6.6. 创建必要的文件和链接

有些程序使用不可更改的路径指向现在还没有到位的程序。为了满足这些程序,创建一些符号链接,在本章中安装对应的软件之后它们会被真正的文件替代:

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 参数在本章的余下部分一直都要使用。

loginagettyinit 程序 (还有其他一些) 使用大量日志文件记录信息,例如谁在什么时候登录过系统。然而,如果日志文件不存在,这些程序就不会写入。初始化日志文件并且给出适当的权限:

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 文件记录当前登录的用户。此文件在引导脚本中动态创建。