- 论坛徽章:
- 0
|
本帖最后由 btw616 于 2014-05-31 14:12 编辑
如何可以让FreeBSD在启动时,像linux的initrd那样,执行过一些脚本后再chroot到一个新的分区,并完成系统的启动呢?
我想使用geli加密root分区,但系统是安装在U盘上的,类似于LiveCD,所以U盘在/dev下对应的设备文件在不同电脑上可能不同,所以考虑使用/dev/diskid/中的设备来挂载root分区。所以需要先启动一个临时的环境,在其中执行自己写的脚本,geli attach /dev/diskid中的设备文件,然后将其挂载,再chroot进去,再正常执行一遍rc的流程。我实现临时环境的做法是,在一个未加密的分区上边放上完整的解压过的kernel.txz与base.txz,然后以single-user的模式启动,启动后自动执行那个解密和挂载最终根分区的脚本。我现在遇到的问题是,我不知道在挂载了那个分区后该如何chroot进去并执行正常的rc流程。
我在网上搜索到的信息只有06年的freebsd-hackers的一些邮件,其中似乎并未最终解决问题。http://lists.freebsd.org/piperma ... ecember/018995.html
这个thread中的patch似乎已经打到FreeBSD主线源码中了:
sbin/init/init.c:- 318 if (kenv(KENV_GET, "init_chroot", kenv_value, sizeof(kenv_value)) > 0) {
- 319 if (chdir(kenv_value) != 0 || chroot(".") != 0)
- 320 warning("Can't chroot to %s: %m", kenv_value);
- 321 }
复制代码 但这个补丁确实比较奇怪,它在init执行之初,就进行了chroot,不是太明白这样做的意义是什么,并不能做到先在这个临时环境中做一些准备,比如解密和挂载目标根分区,然后再chroot进去。 |
|