- 論壇徽章:
- 0
|
本帖最后由 btw616 于 2014-05-31 14:12 編輯
如何可以讓FreeBSD在啟動(dòng)時(shí),像linux的initrd那樣,執(zhí)行過一些腳本后再chroot到一個(gè)新的分區(qū),并完成系統(tǒng)的啟動(dòng)呢?
我想使用geli加密root分區(qū),但系統(tǒng)是安裝在U盤上的,類似于LiveCD,所以U盤在/dev下對(duì)應(yīng)的設(shè)備文件在不同電腦上可能不同,所以考慮使用/dev/diskid/中的設(shè)備來掛載root分區(qū)。所以需要先啟動(dòng)一個(gè)臨時(shí)的環(huán)境,在其中執(zhí)行自己寫的腳本,geli attach /dev/diskid中的設(shè)備文件,然后將其掛載,再chroot進(jìn)去,再正常執(zhí)行一遍rc的流程。我實(shí)現(xiàn)臨時(shí)環(huán)境的做法是,在一個(gè)未加密的分區(qū)上邊放上完整的解壓過的kernel.txz與base.txz,然后以single-user的模式啟動(dòng),啟動(dòng)后自動(dòng)執(zhí)行那個(gè)解密和掛載最終根分區(qū)的腳本。我現(xiàn)在遇到的問題是,我不知道在掛載了那個(gè)分區(qū)后該如何chroot進(jìn)去并執(zhí)行正常的rc流程。
我在網(wǎng)上搜索到的信息只有06年的freebsd-hackers的一些郵件,其中似乎并未最終解決問題。http://lists.freebsd.org/piperma ... ecember/018995.html
這個(gè)thread中的patch似乎已經(jīng)打到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 }
復(fù)制代碼 但這個(gè)補(bǔ)丁確實(shí)比較奇怪,它在init執(zhí)行之初,就進(jìn)行了chroot,不是太明白這樣做的意義是什么,并不能做到先在這個(gè)臨時(shí)環(huán)境中做一些準(zhǔn)備,比如解密和掛載目標(biāo)根分區(qū),然后再chroot進(jìn)去。 |
|