Alterando o hostname no boot no Debian Stretch

3

Eu gostaria de configurar uma máquina Debian Stretch para que ela configure seu nome de host na inicialização com base no número de série da máquina. Isso se deve ao fato de que o sistema operacional na máquina que estou configurando será copiado em várias outras máquinas e deve ser capaz de configurar automaticamente seu nome de host (exclusivo) na inicialização.

Eu criei um serviço systemd para fazer isso. O serviço chama um script que verifica o número de série da máquina, determina o nome de host correto para essa máquina e, em seguida, edita os dois arquivos /etc/hosts e /etc/hostname de acordo. Eu configuro o serviço para executar depois que os sistemas de arquivos estão prontos e a antes que a rede esteja configurada. Aqui está:

[Unit]
DefaultDependencies=no
Requires=local-fs.target
After=local-fs.target
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/set-hostname.sh
RemainAfterExit=yes

[Install]
WantedBy=network.target

Quando a máquina inicializa, vejo que os dois arquivos foram editados corretamente. No entanto, o prompt da linha de comando ainda mostra o nome do host antigo (que estava em /etc/hostname antes da reinicialização) e, se eu executar o comando hostnamectl , recebo as seguintes informações:

Static hostname: new_correct_hostname
Transient hostname: old_hostname

onde new_correct_hostname é o gerado pelo meu script e escrito em /etc/hostname e /etc/hosts na inicialização, enquanto old_hostname é aquele que estava nesses arquivos antes reinicializar.

Por que o nome do host temporário não é atualizado corretamente quando a rede é ativada? Existe algum outro serviço que o configure antes que meu script o altere?

    
por user2747949 11.11.2017 / 19:59

1 resposta

1

De acordo com a página man para hostnamectl, o nome do host temporário é lido da configuração de rede e não é usado se o nome de host estático estiver configurado e válido.

Isso sugere que pode haver alguma configuração de rede em cache com o nome do host anterior que define seu nome de host temporário para o antigo. Outras investigações dependerão do método e serviço que você usa para se conectar à rede.

Como alternativa, se quiser ter certeza absoluta de que seu nome de host de tempo de execução está configurado corretamente, você pode informar o kernel do Linux pelo comando /bin/hostname fornecido por hostname package ou inserindo manualmente o novo nome em /proc/sys/kernel/hostname , por exemplo .:

echo myhost > /proc/sys/kernel/hostname

Qualquer shell de login recém-aberto mostrará o nome do host atualizado depois que ele for executado.

    
por 11.11.2017 / 22:03