Ao contrário de editar /etc/hostname, ou onde for relevante?
Deve haver uma boa razão (espero) - em geral, prefiro a maneira "antiga", onde tudo era um arquivo de texto. Não estou tentando ser contencioso - eu realmente gostaria de saber e decidir por mim mesmo se é uma boa razão. Obrigado.
Fundo
hostnamectl
faz parte do systemd e fornece uma API adequada para lidar com a configuração de nomes de host de um servidor de maneira padronizada.Anteriormente, cada distro que não usava o systemd tinha seus próprios métodos para fazer isso, o que gerava muita complexidade desnecessária.
hostnamectl
também reúne muitos dados diferentes em um único local para inicializar:A informação aqui vem de
/etc/*release
,uname -a
, etc. incluindo o nome do host do servidor.E os arquivos?
Aliás, tudo ainda está em arquivos,
hostnamectl
é apenas simplificar a forma como temos que interagir com esses arquivos ou conhecer sua localização.Como prova disso, você pode usar
strace -s 2000 hostnamectl
e ver de quais arquivos ele está puxando:systemd-hostname.service?
Para o observador astuto, você deve notar acima
strace
que nem todos os arquivos estão presentes.hostnamectl
está realmente interagindo com um serviço,systemd-hostnamectl.service
que de fato faz a "interação" com a maioria dos arquivos com os quais a maioria dos administradores estaria familiarizada, como/etc/hostname
.Portanto, quando você executa
hostnamectl
, obtém detalhes do serviço. Este é um serviço sob demanda, então você não verá se está funcionando o tempo todo. Só quandohostnamectl
corre. Você pode vê-lo se executar umwatch
comando e começar a executarhostnamectl
várias vezes:A fonte para isso está aqui: https://github.com/systemd/systemd/blob/master/src/hostname/hostnamed.c e se você olhar através dele, verá as referências a
/etc/hostname
etc.Referências
Ainda é um arquivo de texto, você ainda pode editá-lo e não haverá problema.
O arquivo de texto foi padronizado para
/etc/hostname
.De acordo com o mantenedor, os serviços systemd-hostname, systemd-timedated etc foram muito projetados para GUIs existentes como o GNOME. systemd-hostnamed permite que uma GUI solicite alterações de nome de host sem executar como root (dependendo da política polkit). O Dbus também fornece um método para subscrever alterações, que é adequado às necessidades da GUI. Talvez usado por um total de um aplicativo nesses casos :). Não sei, talvez os relógios usem systemd-timedated para ouvir a reconfiguração do fuso horário?
Pense no hostnamectl como um stub para exercitar o backend da GUI, que pode ou não ser um utilitário CLI útil. systemd-hostnamed não se destina especificamente a adicionar recursos inteiros que não são exercidos pelo código da GUI.
O serviço systemd-hostnamed não se destina a abstrair diferenças entre distribuições. Upstream systemd padronizado em um único arquivo de configuração,
/etc/hostname
, onde anteriormente havia arquivos de configuração diferentes em, por exemplo, distribuições baseadas em Debian vs Redhat.Isso assume que hostnamectl está falando com a implementação padrão de systemd-hostnamed. Mas AFAIK não há distribuição atual que corrija o nome do arquivo usado.
Quero salientar que o carregamento
/etc/hostname
no momento da inicialização é realizado antecipadamente pelo systemd PID 1. Não depende da execução do systemd-hostnamed.Imagino que você possa notar uma diferença inofensiva, se você tiver uma GUI de configurações do sistema aberta e mostrando o nome do host ao mesmo tempo. Se você editar
/etc/hostname
e usarhostname --file /etc/hostname
para aplicar a alteração ao sistema em execução, a exibição da GUI pode não ser atualizada instantaneamente. systemd-hostnamed fornece notificações dbus sobre alterações em todas as versões do nome de host que mantém, portanto, a GUI pode não se preocupar em ouvir as notificações de nome de host do sistema fornecidas em kernels Linux modernos.(Tradicionalmente, é uma má ideia alterar o nome do host em tempo de execução. Isso pode causar problemas com software como X . Estou confiante de que esse problema não é resolvido pelo systemd . Talvez tenha sido resolvido por distribuições que usam systemd) .