Fedora 26 和完全限定域名?

Fedora 26 和完全限定域名?

我安装了 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.

相关内容