Como renomear um host Linux sem precisar reinicializar para que a renomeação entre em vigor?

26

Procurei uma resposta para esta pergunta no serverfault e não consegui encontrá-la. Eu sei que é possível, mas não consigo me lembrar de como fazê-lo. Como faço para alterar o nome de host de um host Linux e fazer com que essa alteração entre em vigor sem uma reinicialização?

Estou usando o Ubuntu 16 e o ​​Ubuntu 18.

Uma grande característica do Ubuntu são os utilitários gráficos de área de trabalho e sistema gráfico. No entanto, como estamos executando o Ubuntu em nosso ambiente de produção, optamos por não usar a área de trabalho ou utilitários gráficos para que esses recursos não consumam os recursos necessários em nosso ambiente de produção.

Eu sei que para renomear o host, edito os arquivos:

  • /etc/hostname
  • /etc/hosts

No /etc/hostnameprimeiro, apenas substitui o nome do host atual (que em breve será o antigo nome do host) pelo novo nome do host.

O Ubuntu no /etc/hostsarquivo tem a linha:

127.0.1.1 your-hostname your-hostname

Ele atua como inicialização enquanto o host está inicializando e se estabelecendo na sua rede. Antes de alterar o nome do host, your-hostnameé o atual (que será o antigo nome do host) e, como parte da alteração do nome do host, um substitui esse nome pelo novo nome.

Estou familiarizado com a execução das duas etapas acima e a reinicialização do host. Mas muitas vezes, como em um servidor de produção, alguém gostaria de executar essa renomeação, mas não reiniciar o host.

Como posso alterar o nome do host em um host e fazer com que essa alteração entre em vigor sem reiniciar o host?

Peter Jirak Eldritch
fonte
1
Não existe "Ubuntu 16" e "Ubuntu 18", pode haver grandes diferenças entre 16.04 e 16.10 quanto entre 16.10 e 17.04.
pipe

Respostas:

49

Você pode alterar a idéia do nome do host do kernel em um sistema baseado em systemd usando a hostnamectlferramenta Por exemplo:

hostnamectl set-hostname whatever

Você pode visualizar a ideia atual do sistema do nome do host com:

hostnamectl             # equivalent to hostnamectl status

Lembre-se de que isso não altera a idéia de nome de host de um processo em execução. Esse processo precisaria verificar o nome do host novamente para ser atualizado, e quase nenhum processo o faz. Assim, esse processo precisaria ser reiniciado. Para que todo processo comece a usar o novo nome do host, eles devem ser reiniciados. Geralmente é mais fácil reiniciar o sistema do que reiniciar todos os serviços individualmente.

Michael Hampton
fonte
1
Preciso reiniciar a rede no meu servidor se não desejar reiniciá-lo após a renomeação? Descobri o seguinte: sudo /etc/init.d/network restart Além disso, reiniciar a rede no meu servidor por meio desse comando significa que você deve reiniciar qualquer processo em execução que precise saber o nome do servidor. Concordou que reiniciar o host resolveria isso. Dito isto, há momentos em que realmente quero renomear um host, mas realmente não quero reiniciá-lo. Alguma opinião sobre sudo /etc/init.d/network restarte sua utilidade para que o novo nome de host entre em vigor sem reiniciar?
Peter Jirak Eldritch 26/03
3
@PeterJirak: Completamente inútil. Se esses programas (que precisam saber o nome do host) não se preocuparam em verificar as atualizações do nome do host antes, não o incomodam agora. Informar o sistema para reconfigurar endereços IP em eth0 não afetará isso nem um pouco.
grawity 26/03
@PeterJirak O que você quer dizer com "fazer com que o novo nome de host entre em vigor"? Como discutido anteriormente, ele entra em vigor imediatamente e qualquer processo recém-iniciado estará ciente disso. Também não entendo por que você está perguntando sobre reiniciar a rede? O que isso tem a ver com o nome do host?
Michael Hampton
5
É um equívoco comum que a totalidade da "rede" seja um serviço do espaço do usuário que possa ser reiniciado, apenas porque existe um script /etc/init.d chamado assim.
grawity 26/03
2
@PeterJirak Como observação lateral, a execução de serviços /etc/init.dé o caminho errado nos sistemas systemd. Ele existe apenas para compatibilidade com versões anteriores do antigo sistema V.
rexkogitans 27/03
22

Você pode alterar o nome do host no kernel usando:

hostname NEWNAME

No Linux, isso é praticamente igual a um dos seguintes:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

Isso não depende do systemd (ao contrário do hostnamectl, que requer systemd-hostnamed) ou de qualquer outra ferramenta não-padrão, e geralmente (principalmente nos sistemas shellscript-init) é como o nome do host inicial foi definido em primeiro lugar.

A maioria dos programas e serviços não usa o nome do host; os poucos que fazem (por exemplo, Postfix ou serviços usando o Kerberos) podem ser reiniciados um por um.

(Alguns programas armazenam em cache o nome do host até a reinicialização, outros o consultam toda vez que precisam. Os programas também podem pesquisar (2) / proc / sys / kernel / hostname para receber notificações de alterações, mas poucos o fazem.)

gravidade
fonte
2
Lembre-se de que esses métodos não são persistentes e não sobreviverão a uma reinicialização.
Michael Hampton
3
Felizmente, o OP já cobriu a persistência na própria pergunta.
grawity 27/03
1
O postfix pode ter o nome do host codificado em um ou dois lugares /etc/postfix/main.cfe /etc/mailname, portanto, eles precisarão ser editados também.
Mark Plotnick 27/03