Inicializando o sistema linux do chroot: existe uma maneira melhor de fazer isso?

4

Eu quero configurar a entrada do menu do Grub para inicializar no sistema chrooted (debootstrap com chroot instalado para evitar tocar demais no sistema existente).

Atualmente, faço o seguinte para obtê-lo:

  1. Instale o linux-image e amigos dentro do ambiente chrooted

  2. Remasterize manualmente o initramfs para fazer o 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 ao /boot/grub.cfg:

menuentry 'Chrooted debian Squeeze' {
    ...
    linux   /root/squeeze/boot/vmlinuz root=... rw
    initrd  /root/squeeze/boot/initrd-chroot
}

Funciona, mas não é fácil de configurar e precisa de hacking manual toda vez que o initrd deve ser alterado. Como fazer melhor?

    
por Vi. 31.01.2012 / 19:00

2 respostas

3

Eu me deparei com o mesmo problema e terminei escrevendo isto para fazê-lo funcionar sem problemas em diferentes sistemas (debian, ubuntu atualmente) :

Execute o script make_chroot_initrd para criar uma nova imagem initrd ativada pelo chroot a partir da 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 ela pode manipular um parâmetro de inicialização chroot= .

Com o grub2 como bootloader, você pode adicionar uma entrada ao /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 coincidir com os seus)

Instalação em todo o sistema

Uma vez que você está feliz com isso, você pode tornar as mudanças permanentes. (até que o pacote initramfs-tools seja atualizado).
No sistema chrooted:

# 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

A partir de agora, a imagem regular do initrd suportará o arranque por chroot.
Não é necessário usar um initrd.chroot separado, que pode sair de sincronia com ele.

Veja boot_chroot para detalhes.

    
por 06.12.2014 / 15:05
1

Por que você mudou de run-init para chroot? Você não deveria fazer isso. O run-init apaga tudo na raiz do initramfs, depois faz o chroot para $ rootmnt. Você quer manter esse comportamento.

Quanto a como evitar a necessidade de recriar manualmente o initramfs a cada vez, edite a cópia mestra 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 de inicialização para reconhecer um argumento de inicialização para acrescentar algo ao rootmnt e enviar esse patch para inclusão no debian. Então você pode adicionar o argumento ao grub para as entradas que devem ser inicializadas dessa forma.

    
por 31.01.2012 / 19:50