Se você olhar para o código-fonte hostnamectl
aqui , verá que hostnamectl
usará a função set_hostname
para executar a ação.
Um comentário dessa seção diz o seguinte (ênfase minha):
Now that we set the pretty hostname, let's clean up the parameter and use that as static hostname. If the hostname was already valid as static hostname, this will only chop off the trailing dot if there is one. If it was not valid, then it will be made fully valid by truncating, dropping multiple dots, and dropping weird chars. Note that we clean the name up only if we also are supposed to set the pretty name. If the pretty name is not being set we assume the user knows what he does and pass the name as-is.
De fato, se você verificar o method_set_static_hostname
aqui , onde tenta definir o hostname estático, a parte relevante é assim:
if (!hostname_is_valid(name, false))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid static hostname '%s'", name);
A assinatura da função hostname_is_valid
é esta:
bool hostname_is_valid(const char *s, bool allow_trailing_dot) _pure_;
Você verá então que hostname_is_valid
é chamado com o allow_trailing_dot
arugment como false - assim, systemd e hostnamectl não permitem o ponto final no hostname estático.
EDIT: Bem, a discussão sobre este assunto pode ser encontrada aqui . AFAIK, isso funciona "como pretendido" - o ponto final é opcional. Há argumentos a favor e contra, mas não vou entrar nisso aqui.
Então - você não pode fazer isso através da ferramenta hostetectl do systemd, ...
No entanto, você pode adicionar o ponto final ao arquivo /etc/hostname
e, em seguida, ele será exibido na saída de hostnamectl
.
Claro, se você usar hostnamectl
ou qualquer outra ferramenta para definir o nome do host em algum ponto no futuro, ele irá sobrescrever isso.