
Quero configurar a entrada do menu Grub para inicializar no sistema chroot (instalado o debootstrap chroot para evitar tocar demais no sistema existente).
Atualmente eu faço o seguinte para alcançá-lo:
Instale linux-image e amigos dentro do ambiente chroot
Remasterize manualmente o initramfs para fazer chroot no sistema em vez do comportamento normal:
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. Adicione entrada a /boot/grub.cfg:
menuentry 'Chrooted debian Squeeze' {
...
linux /root/squeeze/boot/vmlinuz root=... rw
initrd /root/squeeze/boot/initrd-chroot
}
Ele funciona, mas não é fácil de configurar e precisa de hackeamento manual sempre que o initrd deve ser alterado. Como fazer melhor?
Responder1
Me deparei com o mesmo problema e acabeiescrevendo issopara fazê-lo funcionar sem problemas em diferentes sistemas (debian, ubuntu atualmente):
Execute make_chroot_initrd
o script para criar uma nova imagem initrd habilitada para chroot a partir da imagem existente:
# ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot
A nova imagem será exatamente a mesma, exceto que agora pode manipular um chroot=
parâmetro de inicialização.
Com o grub2 como bootloader você pode adicionar uma entrada para /boot/grub/grub.cfg
:
(ou talvez melhor /etc/grub.d/40_custom
)
menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
insmod ext2 # or whatever you're using ...
set root='(hd0,7)' # partition containing the chroot
set chroot='/chroot/trusty' # chroot path
linux $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
initrd $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}
(altere arquivos/partições para corresponder aos seus)
Instalação em todo o sistema
Quando estiver satisfeito com isso, você poderá tornar as alterações permanentes
(até que o pacote initramfs-tools seja atualizado).
No sistema chroot:
# cd /usr/share/initramfs-tools
# cp -pdrv . ../initramfs-tools.orig # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u
De agora em diante, a imagem initrd regular suportará a inicialização do chroot.
Não há necessidade de usar um initrd.chroot separado, que pode ficar fora de sincronia com ele.
Verboot_chrootpara detalhes.
Responder2
Por que você mudou de run-init para chroot? Você não deveria fazer isso. run-init exclui tudo na raiz do initramfs e depois faz chroot para $rootmnt. Você quer manter esse comportamento.
Quanto a como evitar a necessidade de reconstruir manualmente seu initramfs todas as vezes, edite a cópia mestre do script de inicialização em /usr/share/initramfs-tools. Isso deve funcionar pelo menos até você atualizar o pacote initramfs-tools.
Uma solução permanente seria corrigir o script init para reconhecer um argumento de inicialização para anexar algo ao rootmnt e enviar esse patch para inclusão no debian. Então você pode adicionar o argumento ao grub para entradas que devem ser inicializadas dessa forma.