使用不同内核版本的 Ubuntu iso 定制,挂在 initramfs 上

使用不同内核版本的 Ubuntu iso 定制,挂在 initramfs 上

我正在尝试基于 ubuntu Bionic Beaver 构建定制的 ubuntu iso:

129292a182136a35e1f89c586dbac2e2  ubuntu-18.04-desktop-amd64.iso

我遵循了本教程:https://help.ubuntu.com/community/LiveCDCustomization 我 chroot 到解压的 squashfs 并安装了一些我想要的 debian 数据包,从 下载了一个新内核http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.3/,然后启动了mkinitramfs -o /initrd.gz 4.15.3-041503-generic命令。

然后我使用以下命令重建 iso:

sudo rm -f iso/casper/vmlinuz iso/casper/initrd.lz
sudo cp squashfs/boot/vmlinuz-4.15.3-041503-generic iso/casper/vmlinuz 
sudo cp squashfs/initrd.gz iso/casper/initrd.lz
sudo chmod a+w iso/casper/filesystem.manifest
sudo chroot squashfs dpkg-query -W --showformat='${Package} ${Version}\n' > iso/casper/filesystem.manifest
sudo chmod go-w iso/casper/filesystem.manifest
sudo rm iso/casper/filesystem.squashfs
cd squashfs
sudo mksquashfs . ../iso/casper/filesystem.squashfs -info
cd ..
cd iso
sudo bash -c "find . -path ./isolinux -prune -o -type f -not -name md5sum.txt -print0 | xargs -0 md5sum | tee md5sum.txt"
cd ..
sudo mkisofs -r -V "my_custom_iso" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o custom-livecd.iso iso 
sudo isohybrid custom-livecd.iso

我尝试在新创建的 iso 上启动 virtualbox,它似乎可以工作,因为我可以看到 ubuntu 加载的启动画面,但它挂在 initramfs shell 上: 初始化内存文件系统

答案1

这是该消息的代码

 # Confirm the final format was valid.
    if [ "${UNIONFS}" != "unionfs-fuse" ]; then
        modprobe "${MP_QUIET}" -b "${UNIONFS}" || true
        if cut -f2 /proc/filesystems | grep -q "^${UNIONFS}\$"; then
            :
        else
            panic "/cow format specified as ${UNIONFS} and no support found"
        fi
    fi
  • 第一个 IF 始终为真。
  • 第二个 IF:如果在 /proc/filesystems 错误通知中找不到 union-fs。
  • 基本上你缺少一个覆盖
  • 似乎是一个漏洞在 Casper 1.34+ 中

使固定

  • 编辑/shared/livecd/work/rootfs/etc/initramfs-tools/modules
  • 添加overlay.ko
  • 跑步update-initramfs -u -k $(uname -r)

相关内容