테스트를 위해 GCC 7 아래에 Fedora 26을 설치했습니다. F26은 64비트 VirtualBox VM에 설치됩니다. 설치 후 시스템을 구성하기 위해 다음 명령을 실행한 후 재부팅했습니다.
localhost:~$ sudo hostnamectl set-chassis desktop
localhost:~$ sudo hostnamectl set-deployment production
localhost:~$ sudo hostnamectl set-hostname --static --transient --pretty asus-f26-x64.
로그인 후 호스트 이름은 다음과 같습니다.
asus-f26-x64:~$ hostname
asus-f26-x64
정규화된 도메인 이름이 무시되는 것 같습니다. 정규화된 도메인 이름은 .
점( )으로 끝나며 DNS 트리의 최상위를 나타냅니다. 스티븐의 글도 보세요TCP/IP 그림, 1권.
정규화된 도메인 이름을 호스트 이름으로 설정하는 방법은 무엇입니까?
관련된 문제는 호스트가 내 DHCP 서버에 이름을 등록하지 않는다는 것입니다. 호스트 이름을 보내는 옵션이 표시되지 않습니다.hostnameclt
매뉴얼 페이지.
컴퓨터에는 DHCP 서버의 이름이 필요하지 않지만 FQDN이 제대로 처리되지 않기 때문에 호스트에서는 이를 인식하지 못하기 때문에 DHCP 이름 문제가 FQDN 문제와 관련이 있는 것으로 추측됩니다.
컴퓨터에 호스트 이름을 보내도록 지시하려면 어떻게 해야 합니까?
다음은 에서 온 것입니다 hostnamectl status
. 점이 예쁜 이름에 대한 일종의 장식으로 해석되어 FQDN으로 인식되지 않기 때문에 상황이 약간 나쁩니다.
$ hostnamectl status
Static hostname: asus-f26-x64
Pretty hostname: asus-f26-x64.
Icon name: computer-desktop
Chassis: desktop
Deployment: production
Machine ID: 3d914cf11226f83093acc
Boot ID: 21fb5dabfd6a0c24ba8f2
Virtualization: oracle
Operating System: Fedora 26 (Workstation Edition)
CPE OS Name: cpe:/o:fedoraproject:fedora:26
Kernel: Linux 4.11.9-300.fc26.x86_64
Architecture: x86-64
답변1
hostnamectl
소스코드를 보면여기hostnamectl
, 이 set_hostname
기능이 이 작업을 수행하는 데 사용되는 것을 볼 수 있습니다 .
해당 섹션에 대한 의견은 다음과 같습니다(강조).
이제 좋은 호스트 이름이 설정되었으므로 매개변수를 정리하고 이를 정적 호스트 이름으로 사용하겠습니다. 이는 호스트 이름이 이미 정적 호스트 이름으로 유효한 경우에만 작동합니다.후행 지점을 잘라냅니다.그렇다면. 작동하지 않으면 자르고 여러 점을 제거하고 이상한 문자를 제거하여 완전히 유효하게 만듭니다. 예쁜 이름도 설정해야 하는 경우에만 이름을 정리합니다. 예쁜 이름이 설정되지 않은 경우 사용자가 자신이 하는 일을 알고 있다고 가정하고 이름을 그대로 전달합니다.
사실 확인해 보면method_set_static_hostname
여기, 정적 호스트 이름을 설정하려고 시도하는 경우 관련 부분은 다음과 같습니다.
if (!hostname_is_valid(name, false))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid static hostname '%s'", name);
이 함수의 함수 서명은 hostname_is_valid
다음과 같습니다.
bool hostname_is_valid(const char *s, bool allow_trailing_dot) _pure_;
그런 다음 false 인수로 hostname_is_valid
호출되는 것을 볼 수 있습니다 . 따라서 systemd 및 hostnamectl은 정적 호스트 이름에 후행 점을 허용하지 않습니다.allow_trailing_dot
편집: 글쎄, 이 문제에 대한 체계적인 토론을 찾을 수 있습니다여기. AFAIK, 이것은 "예상대로" 작동합니다. 후행 점은 선택 사항입니다. 장점과 단점이 있지만 여기서는 다루지 않겠습니다.
따라서 systemd hostnamectl 도구를 통해서는 이 작업을 수행할 수 없습니다.
그러나 언제든지 파일에 후행 점을 추가할 수 /etc/hostname
있으며 hostnamectl
.
물론 hostnamectl
나중에 언제든지 다른 도구를 사용하여 호스트 이름을 설정하면 해당 호스트 이름을 덮어쓰게 됩니다.
답변2
이와 같은 도구는 (인쇄된) 후행 점을 거의 사용하지 않습니다(허용되는 경우에도).
완전한 이름을 얻으려면 다음과 같이 인쇄되어야 합니다.
$ hostname -f
asus-f26-x64.example.com
/etc/resolv.conf
도메인 이름 줄을 가지려면 다음을 만들어야 합니다 (또는 Fedora에서 이와 동등한 것).
domain example.com.
그러나 FQDN은 단순히 FQDN이 될 수 없다는 점을 이해하십시오.하나상표:
asus-f26-x64
이는 컴퓨터 이름, 레이블일 수 있습니다. 하지만 도메인이 되려면 다른 라벨(또는 라벨, 점으로 묶인 텍스트)이 필요합니다(예:). 인터넷에는 자체 목록이 있으므로인터넷 최상위 도메인 이름이것도 추가해야 합니다. 따라서 FQDN은 다음과 같아야 합니다.
asus-f26-x64.company.domain.net.