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가 내 호스트를 도청하고 있습니다!
편집 2: 내가 그것을 얻지 못하는 유일한 경우는 제공된 복구 initramfs로 부팅하는 경우입니다. 분명히 생성된 initramfs에는 더러운 비밀이 포함되어 있습니다!
답변1
Don Crissti의 통찰력과 제거 과정을 통해 범인은 initramfs 이미지라는 결론을 얻었습니다. 어떻게든 dracut
이미지를 빌드할 때 호스트 이름(!?!)의 캐시된 버전을 포함하기로 결정합니다.
initrd/initram fs 재구축을 다룹니다.여기그러나 간단히 말해서(친애하는 독자 여러분은 액세스 권한이 없을 수 있으므로) 다음을 수행하십시오.
dracut -f -v