initramfs "HostOnly" no Fedora 19

No Fedora 19, foi implementado o modo "HostOnly" no Dracut, o gerador de initramfs:

http://fedoraproject.org/wiki/Features/DracutHostOnly

Até o Fedora 18, os initramfs (arquivos *.img em /boot) criados eram genéricos, contendo módulos para hardware variado. Com "HostOnly", passam a ser criados especificamente para o hardware em uso, tornado-se bem menores (ex. de 17 MiB para 7 MiB). Ao mesmo tempo, um initramfs genérico "Rescue" é criado uma vez durante a instalação, para casos de emergência, como troca de hardware.

O novo recurso é problemático, contudo, para o cenário de aplicar uma mesma imagem em várias máquinas com hardware diferente.

Para voltar para um initramfs genérico, fazemos o seguinte antes da criação da imagem:

# yum -y install dracut-nohostonly dracut-norescue
# rm -f /boot/*rescue*
# dracut -f --regenerate-all
# grub2-mkconfig -o /boot/grub2/grub.cfg

A partir do Fedora 20, os pacotes mudaram:

# yum -y remove dracut-config-rescue
# yum -y install dracut-config-generic
# rm -f /boot/*rescue*
# dracut -f --regenerate-all
# grub2-mkconfig -o /boot/grub2/grub.cfg

No F20, ainda são postas opções de boot que configuram a fonte no console (quando iniciar em modo texto) e a língua. Tal comportamento é resquício de versões anteriores da distribuição, ver RHBZ#1010454 e RHBZ#1074113. O systemd aplica essas configurações e as opções de boot têm prioridade frente ao que foi definido nos arquivos. No modo "Generic" (antes "No-HostOnly"), o Dracut não copia para o initramfs os arquivos /etc/locale.conf e /etc/vconsole.conf. Quando os bugs forem consertados, a fonte, língua e layout de teclado não serão configurados no initramfs. Levando em conta que o modo "HostOnly" é o padrão, subentende-se que quem for usar o initramfs genérico saiba o que está fazendo. A solução para ter os arquivos no initramfs é simples:

/etc/dracut.conf.d/console.conf

install_items+=" /etc/vconsole.conf /etc/locale.conf "

Desabilitar a entrada "Rescue" é opcional, porém eu não vejo utilidade nela e mando-a embora.

Uma segunda alternativa, se você quiser manter o recurso ativo nas máquinas alvo, seria, antes de criar a imagem, rodar:

# dracut -f --no-hostonly

Assim, o initramfs do atual kernel em uso será substituído (temporariamente até uma próxima atualização) por um genérico.

Ainda sobre o assunto, no modo "HostOnly", o Dracut copia /etc/machine-id para o initramfs caso exista, enquanto que, no modo "No-HostOnly", sempre coloca um arquivo vazio. O Journal precisa de um machine-id para funcionar. No initramfs, pode ser temporário, pois um definitivo apenas é necessário na hora em que o diretório raiz é montado (e daí para frente demais sistemas de arquivos de /etc/fstab) para escrever em /var.

No post anterior, faltou comentar uma possibilidade, que é haver um /etc/machine-id vazio e sem permissão de escrita. Neste ambiente, machine_id_setup() cria um bind mount sobre o arquivo com um machine-id volátil novo (ou importado de /var/lib/dbus/machine-id — obsoleto e não mais usado em distribuições novas), que é exatamente o que ocorre no initramfs.

Comentários