Откуда systemd определяет временное имя хоста?

Откуда systemd определяет временное имя хоста?

В RHEL 7.2 systemdзапускается и определяет имя хоста хоста. Если /etc/hostnameнедоступен (т. е. удален), и /etc/machine-infoнедоступен, и ядро ​​не настроено с этой информацией (т. е. sysctl' s kernel.hostname), systemdназначает хосту "временное" имя хоста. Вопрос в том: откуда он это определяет?

Первоначально хост был назван именно так. Затем я клонировал хост (это виртуальная машина) и стер все ссылки на это имя. Но затем во время процесса загрузки, очень рано, он устанавливается именно так.

Если я загружу его, rescuemodeто увижу, что имя хоста задается очень рано:

[    0.456076] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +AC
L +XZ)
[    0.456664] systemd[1]: Detected virtualization 'kvm'.
[    0.456955] systemd[1]: Running in initial RAM disk.
[    0.458496] systemd[1]: Set hostname to <badhostname.example.com>.
[    0.475394] systemd[1]: Expecting device dev-mapper-vgroot\x2dlvroot.device...

В командной строке оно задается как «временное» имя хоста:

# hostnamectl status
Transient hostname: badhostname.mydomain.com
...

Возможно, это не так systemd: у меня даже возникает эта проблема при использовании init=/bin/bash, но systemd работает внутри образа initrd.

  • Это не установлено в grub или чем-то подобном.
  • Он не устанавливается DHCP, поскольку сетевые функции отключены при загрузке.
  • Его нет нигде в файловой системе:

    # find / \( -path /sys -prune -o -path /proc -prune -o -path /run -prune \) -o -type f -exec grep -ilrF "${HOSTNAME}" {} +
    <some .git files>
    <history files of non-root user>
    

Каким-то образом ядро ​​или systemd определяет старое имя хоста и использует его как временное, и я в полной растерянности относительно того, как это сделать! . Я сделал это, find ... -exec grepно никаких результатов, кроме /var/log/dmesg. Я говорю вам, systemd преследует мой хост!

EDIT 2: Единственный раз, когда я не получаю его, это если я загружаюсь в предоставленный спасательный initramfs. Видимо, сгенерированный initramfs хранит грязные секреты!

решение1

Благодаря инсайтам Дона Криссти и методу исключения, сделан вывод, что виновником является образ initramfs. Каким-то образом dracutпри построении образа он решает включить кэшированную версию имени хоста (!?!).

Пересборка initrd/initram fs рассматриваетсяздесьно короче говоря (поскольку у вас, дорогой читатель, может не быть доступа), сделайте

dracut -f -v

Связанный контент