[systemd-devel] systemd-hostnamed/hostnamectl and transient hostname change
Stef Walter
stef at thewalter.net
Thu Apr 30 09:30:48 UTC 2020
On 30.04.20 10:43, Zbigniew Jędrzejewski-Szmek wrote:
> On Mon, Apr 27, 2020 at 12:00:36PM +0200, Thomas HUMMEL wrote:
>> On 4/27/20 11:51 AM, Mantas Mikulėnas wrote:
>>
>> Hello, thanks for your answer.
>>
>>> On Mon, Apr 20, 2020 at 6:17 PM Thomas HUMMEL
>>> <thomas.hummel at pasteur.fr <mailto:thomas.hummel at pasteur.fr>>
>>> wrote:
>>>
>>> 1. why does the transient hostname change while I stated --static only
>>> while running hostnamectl ?
>>>
>>> 2. why does the change take some time to appear on dbus ?
>>>
>>>
>>
>>> Hostnamed does not implement receiving hostname change
>>> notifications from the kernel, so it always reports you the same
>>> hostname that it has seen on startup.
>>
>> That was my understanding as well.
>
> Lennart opened a PR to remove the caching:
> https://github.com/systemd/systemd/pull/15624.
>
>>> You're only seeing changes because hostnamed /exits when idle/ --
>>> the next time you're actually talking to a brand new instance of
>>> hostnamed, which has seen the new hostname.
>>
>> But this does not explain why the transient hostname is changed as I
>> only changed the static one, does it ? Unless this new instance sets
>> it from the static one when it starts ? I mean something has to call
>> sethostname(2) to set the transient to the new static one, right ?
>
> The documentation is wrong. The code in hostnamed sets the kernel
> hostname when setting the static one. This was changed in
> https://github.com/systemd/systemd/commit/c779a44222:
>
> commit c779a44222161155c039a7fd2fd304c006590ac7
> Author: Stef Walter <stef at thewalter.net>
> Date: Wed Feb 12 09:46:31 2014 +0100
>
> hostnamed: Fix the way that static and transient host names interact
>
> It is almost always incorrect to allow DHCP or other sources of
> transient host names to override an explicitly configured static host
> name.
>
> This commit changes things so that if a static host name is set, this
> will override the transient host name (eg: provided via DHCP). Transient
> host names can still be used to provide host names for machines that have
> not been explicitly configured with a static host name.
>
> The exception to this rule is if the static host name is set to
> "localhost". In those cases we act as if no
> static host name has been explicitly set.
>
> We need to reconcile the code and the docs. I'd go for updating the docs
> to match the code, because this is a long-standing behaviour and people
> haven't been complaining about it. (I'm assuming you're not unhappy, just
> confused by the unexpected results...). Opinions?
I'd support that. Obviously I should have included a docs patch in my
pull request :S
Stef
More information about the systemd-devel
mailing list