I want to set up Grub menu entry to boot into chrooted system (installed chrooted debootstrap to avoid touching existing system too much).
Currently I do the following to attain it:
-
Install linux-image and friends inside chrooted environment
-
Manually remaster initramfs to chroot into the system instead of usual behaviour:
rootmnt=$rootmnt/root/squeeze
...
#exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
exec chroot ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console
3.. Add entry to /boot/grub.cfg:
menuentry 'Chrooted debian Squeeze' {
...
linux /root/squeeze/boot/vmlinuz root=... rw
initrd /root/squeeze/boot/initrd-chroot
}
It works but not easy to set up and needs manual hacking every time initrd should be changed. How to do it better?
Best Answer
I came across the same issue and ended up writing this to make it work painlessly across different systems (debian, ubuntu currently):
Run
make_chroot_initrd
script to create a new chroot-enabled initrd image from the existing one:The new image will be exactly the same, except now it can handle a
chroot=
boot parameter.With grub2 as bootloader you can add an entry to
/boot/grub/grub.cfg
:(or perhaps better
/etc/grub.d/40_custom
)(change files/partitions to match yours)
System-wide install
Once you're happy with it you can make the changes permanent
(until initramfs-tools package gets upgraded).
In the chrooted system:
From now on regular initrd image will support chroot booting.
No need to use a separate initrd.chroot which may get out of sync with it then.
See boot_chroot for details.