我正在用自己的內核和軟件構建自己的基於Debian的Linux。其中一個化妝過程的最後步驟,有在chroot環境工作要做:如何在Makefile中使用chroot?
- 使用dpkg來
- 創建符號鏈接到內核和initrd.img
- 執行LDCONFIG 安裝定製的內核
- 使用普利茅斯
- 更新的initrd.img
雖然安裝的kerne的設置我的自定義主題爲閃屏l成功並且符號鏈接被創建,所有其他命令似乎都不起作用。如果我啓動進入系統,啓動屏幕設置爲默認值,並且initrd.img無法找到硬盤或內核。因此,dpkg安裝過程中的initrd.img更新似乎失敗了。設置主題的普利茅斯腳本也不起作用。
爲了解決這個問題,我手動chroot到系統並執行以下操作:
- 設置使用普利茅斯
- 執行LDCONFIG
- 更新initrd.img中閃現屏幕我的自定義主題
這工作得很好。下一次啓動系統時,會顯示我的啓動畫面,並且所有內容都可以正常啓動。
這裏是我的方法得到這在我的Makefile完成:
cp $(INTEGRATION_KERNEL_IMAGE) $(ROOTFS)/tmp/kernel.deb
cd $(ROOTFS); /usr/bin/sudo /bin/mount -t proc proc proc/; /usr/bin/sudo /bin/mount -t sysfs sys sys/; /usr/bin/sudo /bin/mount -o bind /dev dev/
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/usr/bin/dpkg --force-not-root -i /tmp/kernel.deb"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/ln -nsf vmlinuz-3.2.54-rt75custom /boot/vmlinuz"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/ln -nsf initrd.img-3.2.54-rt75custom /boot/initrd.img"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/sbin/ldconfig"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/bash /usr/sbin/plymouth-set-default-theme my_theme"
/usr/sbin/chroot --userspec=0:0 $(ROOTFS) /usr/bin/env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin HOME=/root bash -c "/bin/bash /usr/sbin/update-initramfs -u"
/usr/bin/sudo /bin/umount $(ROOTFS)/proc; /usr/bin/sudo /bin/umount $(ROOTFS)/sys; /usr/bin/sudo /bin/umount $(ROOTFS)/dev
化妝的輸出沒有提供有關這個主題的任何錯誤。那麼,它可能無法做到這一點,因爲make不知道在chroot環境裏發生了什麼。但是,我怎樣才能找出哪裏出了問題?
一個可能的解決方法是將我上面提到的所有東西都放在shell腳本中,並在chrooted環境中執行。但我更願意在Makefile中做所有事情,而且我不知道解決方法是否真的有效。我還沒有驗證過。
好吧,我添加了日誌到我所有的chroot命令,但沒有報告錯誤。我想我應該嘗試腳本方法。 – redhead