В 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