2014-03-14 27 views
1

我正在用自己的内核和软件构建自己的基于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中做所有事情,而且我不知道解决方法是否真的有效。我还没有验证过。

回答

0
  • 您是否尝试过在chroot环境中保存命令输出并稍后解压?例如:跟着

    /usr/sbin/chroot [...] bash -c "/usr/bin/dpkg [...] >> /root/chroot.log" 
    

    /usr/sbin/chroot [...] bash -c "/usr/bin/dpkg [...] | tee -a /root/chroot.log" 
    

    通过

    cp $(ROOTFS)/root/chroot.log . 
    
  • 从长远来看,我建议,以避免重复代码和Makefile的混乱,无论是在一个单一的chroot通过一切命令或通过复制脚本。
  • 您应该能够摆脱大部分或全部bash -c/bin/bash调用。这应该更加简化事情。
+0

好吧,我添加了日志到我所有的chroot命令,但没有报告错误。我想我应该尝试脚本方法。 – redhead