我安装了 Fedora 26 在 GCC 7 下进行测试。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 图解,第一卷。
如何将完全限定域名设置为主机名?
一个相关问题是主机未向我的 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_;
然后你会看到它hostname_is_valid
被调用时allow_trailing_dot
参数为 false - 因此 systemd 和 hostnamectl 不允许静态主机名中的尾随点。
编辑:嗯,关于这个问题的 systemd 讨论可以找到这里。 AFAIK,这“按预期”工作 - 尾随点是可选的。有赞成的也有反对的,但我不会在这里讨论。
所以 - 你不能通过 systemd hostnamectl 工具来做到这一点,...
但是,您始终可以将尾随点添加到文件中/etc/hostname
,然后它甚至会显示在hostnamectl
.
当然,如果您hostnamectl
在将来的任何时候使用或任何其他工具设置主机名,它都会覆盖该主机名。
答案2
像这样的工具很少使用(打印的)尾随点(即使它被接受)。
要获得完全限定的名称,应使用以下内容打印:
$ hostname -f
asus-f26-x64.example.com
您需要制作/etc/resolv.conf
(或 Fedora 中的同等内容)才能拥有域名行:
domain example.com.
但要明白,FQDN 不可能仅为一标签:
asus-f26-x64
这可能是计算机的名称,一个标签。但是您确实需要一些其他标签(或多个标签,由点限制的文本)才能作为域(例如示例)。由于互联网有自己的列表互联网顶级域名还应补充这一点。因此,FQDN 必须类似于:
asus-f26-x64.company.domain.net.