De onde o systemd determina o nome do host temporário?

6

No RHEL 7.2, systemd é inicializado e determina o nome do host do host. Se /etc/hostname estiver indisponível (ou seja, removida), e /etc/machine-info não puder ser usado e o kernel não estiver configurado com essa informação (ou seja, sysctl kernel.hostname ), systemd atribuirá um nome de host "transitório" para o host. A questão é: de onde isso determina isso?

O host foi originalmente nomeado assim. Eu então clonei o host (é uma VM) e limpei todas as referências a esse nome. Mas então, durante o processo de inicialização, muito cedo, fica definido dessa maneira.

Se eu inicializar em rescuemode , posso ver que ele define o nome do host muito cedo:

[    0.456076] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +AC
L +XZ)
[    0.456664] systemd[1]: Detected virtualization 'kvm'.
[    0.456955] systemd[1]: Running in initial RAM disk.
[    0.458496] systemd[1]: Set hostname to <badhostname.example.com>.
[    0.475394] systemd[1]: Expecting device dev-mapper-vgroot\x2dlvroot.device...

No prompt de comando, ele é definido como um nome de host "transitório":

# hostnamectl status
Transient hostname: badhostname.mydomain.com
...

Pode ser que não seja systemd : eu até recebo esse problema quando uso init=/bin/bash , mas o systemd está em execução na imagem initrd.

  • Não está definido em grub ou qualquer coisa.
  • Não é definido pelo DHCP, pois a rede está desativada durante a inicialização.
  • Não está em nenhum lugar no sistema de arquivos:

    # find / \( -path /sys -prune -o -path /proc -prune -o -path /run -prune \) -o -type f -exec grep -ilrF "${HOSTNAME}" {} +
    <some .git files>
    <history files of non-root user>
    

De alguma forma, o kernel ou o systemd está determinando o nome do host antigo e o usando como um transiente, e eu estou com uma perda completa de como! . Eu fiz um find ... -exec grep sem resultados, exceto /var/log/dmesg . Eu estou dizendo a você, systemd assombrou meu anfitrião!

EDIT 2: A única vez que eu não entendi é se eu inicializo no initramfs de resgate fornecido. Aparentemente, o initramfs gerado contém segredos sujos!

    
por Otheus 20.05.2016 / 23:03

1 resposta

5

Graças aos insights de Don Crissti e ao processo de eliminação, conclui-se que o culpado é a imagem do initramfs. De alguma forma, dracut quando cria a imagem decide incluir uma versão em cache do nome do host (!?!).

Reconstruir o initrd / initram fs é coberto aqui mas em resumo (já que você, caro leitor, pode não ter acesso) , faça

dracut -f -v
    
por 21.05.2016 / 00:38

Tags