atualiza o grub2 sem acesso ao hardware (por exemplo, em um chroot)?

4

Estou escrevendo um script que usa uma imagem KVM master, converte-a em VDI, faz algumas alterações nela e oferece-o para download.

Eu preciso atualizar os parâmetros de inicialização do kernel para algumas das imagens recém-criadas. Normalmente, um edite a configuração GRUB_CMDLINE_LINUX_DEFAULT em / etc / default / grub e, em seguida, execute update-grub. Do Claro, eu só posso fazer isso em um chroot, que falha: '/ usr / sbin / grub-probe: erro: não é possível encontrar um dispositivo para / (é / dev montado?) '

Vincular a montagem / dev do sistema em execução no chroot permite que o grub de atualização seja executado, mas resulta em um grub.cfg quebrado (dispositivo raiz errado da perspectiva da imagem).

Se eu usar apenas o sed para adicionar os parâmetros do kernel que eu preciso, ele terá a inicialização da imagem, mas As execuções subseqüentes do update-grub (de dentro da imagem que está sendo executada) causarão problemas.

Então, minha solução atual é:

  1. edite os parâmetros em / etc / default / grub
  2. vincular mount / dev ao chroot
  3. execute update-grub no chroot
  4. use sed para corrigir nós de dispositivo errôneos em /boot/grub/grub.cfg

Por favor, me diga que há uma maneira melhor.

    
por wryfi 22.06.2012 / 17:17

2 respostas

1

A resposta correta é montar / dev no chroot e usar um arquivo $ CHROOT / boot / grub / device.map para dizer ao grub que (hd0) (da perspectiva da imagem) é realmente o arquivo de loopback que você ve "particionado" (e depois montado em seu chroot com kpartx et c).

# generate grub configs and install it to the generated blockdev
chroot $MR update-grub 2> /dev/null
chroot $MR grub-mkconfig -o /boot/grub/grub.cfg 2> /dev/null
cat > $MR/boot/grub/device.map <<EOF
(hd0)   ${LOOPDEV}
EOF
chroot $MR grub-install ${LOOPDEV} 2> /dev/null

Depois que você terminar de instalar o grub no "mbr" do loopdev, você deve rm o arquivo device.map porque ele não será exato a partir da perspectiva da imagem uma vez que ele seja inicializado.

Eu tenho um script que constrói imagens qcow2 completas para o ubuntu 13.10 x64 picante aqui:

link

Boa sorte.

    
por 04.02.2014 / 11:43
1

Observe que esta resposta supõe que seu disco esteja particionado.

A resposta do

sneak funciona para o Debian wheezy que roda o grub 1.99, mas não para o grub2. Você vai querer usar o UUID (como recomendado pelo devs do grub) para dispositivos de referência / partições.
Aqui está o problema: o kpartx (a ferramenta usada para mapear as partições), não cria links simbólicos em /dev/disk/by-uuid , que o grub usa para verificar se pode usar o UUID detectado ao gerar a configuração, então ele volta para o caminho do dispositivo. Para corrigir, basta ligar simbolicamente o dispositivo ( ln -s /dev/sdX /dev/disk/by-uuid/$(blkid -s UUID -o value /dev/sdX) ).

Espero que isso ajude, se não você, então talvez alguém que se depara com essa questão do jeito que eu fiz, porque o homem descobrir isso levou algum tempo.

    
por 09.04.2015 / 20:54