우리 팀은 systemd를 사용하는 임베디드 장치용 맞춤형 베어본 Linux 배포판을 사용합니다.
시스템은 항목이 systemd(네트워크 서비스 포함)로 이동될 때까지 SystemV 초기화 스크립트에 의존했습니다.
재부팅하거나 시작할 때 systemd는 /etc/hostname의 정적 호스트 이름을 무시하고 대신 임시 호스트 이름을 "localhost"와 동일하게 설정한다는 것을 확인했습니다.
이것이 우리가 출시할 때 보는 것입니다.
[ 2.662439] systemd[1]: No hostname configured.
[ 2.667050] systemd[1]: Set hostname to <localhost>.
그러나 /etc/hostname은 올바르게 설정되어 있으며, hostnamectl을 사용하여 문제 없이 호스트 이름(영구 또는 임시)을 설정할 수 있습니다.
시스템이 재부팅될 때만 systemd는 /etc/hostname을 무시하고 임시 호스트 이름을 localhost로 설정합니다.
~에 따르면systemd/호스트 이름 문서, systemd는 정적 호스트 이름을 읽어야 합니다.
systemd(1) 및 관련 도구는 다음을 통해 호스트 이름을 얻습니다.
- 커널 명령줄 매개변수 systemd.hostname=이 유효한 호스트 이름을 지정하는 경우 systemd(1)는 이를 사용하여
초기 부팅 중에 호스트 이름을 설정합니다. kernel-command-line(7)을 참조하세요.- 그렇지 않으면 위에서 설명한 대로 /etc/hostname에 지정된 "정적" 호스트 이름이 사용됩니다.
- 그렇지 않으면 예를 들어 DHCP 임대 정보를 기반으로 임시 호스트 이름을 런타임에 설정할 수 있습니다.
systemd-hostnamed.service(8)를 참조하세요. NetworkManager와
systemd-networkd.service(8) 모두 이를 허용합니다.
systemd-hostnamed.service(8) 는 정적 호스트 이름에 더 높은 우선순위를 부여하므로
임시 호스트 이름은 정적 호스트 이름이 구성되지 않은 경우에만 사용됩니다.- 그렇지 않으면 컴파일 시 구성된 대체 호스트 이름("localhost")이 사용됩니다.
그러나 컴파일 시 구성된 호스트 이름("localhost")으로 대체됩니다.
왜 이런 일이 발생하는지, 어디를 봐야 하는지 아시나요?
임시 호스트 이름은 다른 모든 서비스가 작동하기 전에 설정됩니다.
감사해요.
답변1
내 자신의 질문에 답하기 위해. @ Marcus-Müller가 지적했듯이 initrd에 의해 systemd가 실행되고 있거나 오히려 initramfs 및 /etc/가 아직 마운트되지 않았습니다.
이것이 우리의 경우에 일어난 일입니다.