2014-03-14 61 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