我正在用自己的内核和软件构建自己的基于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