如果我们阅读 grub 信息页,那么无需手动键入参数即可轻松加载内核。 根据标题为“配置”的部分,所有用于启动的命令都可以放在一个名为menu.lst的文件中,并放置在/boot/grub目录下。
![]() | 请务必正确键入menu.lst文件名,小数点后是小写字母 L,而不是数字 1。 |
为了自动化系统启动,我们将需要一个 init 守护进程。 我们知道这一点是因为 Bootdisk-HOWTO 和 From-Powerup-To-BASH-Prompt-HOWTO 都提到了 init 作为内核加载后启动的第一个程序。 后面的 HOWTO 还详细介绍了/etc/inittab文件和启动脚本的组织结构。 这可能很有帮助,因为到目前为止我们使用的蓝图 FHS 没有对 init 脚本提出任何建议。
我们还需要找到 shutdown 命令,以实现优雅关闭功能的第二个目标。
在 Ibiblio 上搜索 Linux 软件地图,关键字为“init”,会得到大量结果。 然而,从阅读 From-Powerup-To-BASH-Prompt-HOWTO 中我们得知,大多数 Linux 系统使用 System V 风格的 init 守护进程。 使用额外的关键词“System V”缩小搜索范围会得到更好的结果。 sysvinit 软件包包含 init、shutdown、halt 和 reboot,这正是我们所需要的一切。 LSM 条目中列出的版本看起来相当旧,但是有一个主站点 URL,可能会链接到最新版本。
init 的 manpage 提到了一个名为/dev/initctl的 FIFO,这是 init 与 sysvinit 软件包中的其他程序通信所必需的。 我们将必须创建此文件,init 才能正常运行。
使用 GRUB 配置文件比手动指定引导加载程序命令稍微复杂一些。 配置文件中需要指定菜单、默认选择和超时等功能的指令,以及熟悉的内核加载命令。 GRUB 的信息页提供了许多必要的信息。 我们或许还可以使用开发系统上的 GRUB 配置文件作为模板。 然而,不同供应商之间对于文件的名称和位置存在一些不一致。 无论开发系统上的路径是什么,它在袖珍 Linux 系统上都应该是/boot/grub/menu.lst。
许多流行的 GNU/Linux 发行版都使用 System V 风格的 init 脚本。 由于我们正在使用“sysvinit”守护进程,因此使用 System V 风格的脚本也是有意义的。 以下文档都以某种方式涉及 System V 风格的 init 脚本,并将作为为本项目构建脚本时的参考
Debian 策略手册 -- 在线访问地址:http://www.debian.org/doc/debian-policy。
Linux 标准库规范 -- 可从 http://www.linuxbase.org/spec/index.shtml 以多种格式下载。
Essential System Administration, 3rd Edition by Aeleen Frisch -- 可在图书馆、书店或直接从 O'Reilly Publishing 购买,网址为 http://www.oreilly.com/。
在浏览过上述参考文献中的一两篇后,我们应该对 System V 风格的系统初始化过程的工作原理有一个很好的了解。 我们也应该知道为袖珍 Linux 项目创建 System V 风格的 init 脚本需要什么。 以下是需要完成的简要列表
创建一个inittab文件,用于调用一个rc脚本,并带有一个数字参数,给出运行级别。
编写一个rc脚本,该脚本使用运行级别参数来执行适当的“K”和“S”脚本。
修改先前构建的local_fs脚本,使其接受start和stop参数。
为以下命令创建新脚本shutdown和reboot.
设置/etc/rcN.d目录以及指向/etc/init.d.
与往常一样,BASH(1) 手册页和高级 BASH 脚本编程指南对于编写和理解 shell 脚本非常有帮助。