我正在使用 Ubuntu 10.04 LTS,当我输入命令时hostname --fqdn
,我收到消息:hostname: Name or service not known
。
因此,我无法global
成功安装,并且在尝试时出现以下错误:
Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
global
E: Sub-process /usr/bin/dpkg returned an error code (1)
我/etc/nsswitch.conf
的如下。
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
有人知道这意味着什么以及我该如何解决这个问题吗?
答案1
您能提供一下内容吗/etc/nsswitch.conf
?
看起来 /etc/nsswitch.conf 中的“hosts”行的值不正确。它以“files”开头吗?
否则,可以通过编辑 /etc/hosts 并将 FQDN 放在主机名出现的行上来设置 FQDN。假设您有一个主机名“foo”,并且您找到一行:
127.0.0.1 foo
您可以像这样编辑它:
127.0.0.1 foo.localdomain foo
foo.localdomain
将是您的新 FQDN。
答案2
编辑 /etc/hosts 以添加您的 FQDN
有关语法的信息位于此处: http://www.faqs.org/docs/securing/chap9sec95.html
更新:再次阅读您的问题,听起来几乎像是您没有正确设置路径,或者是主机名程序有问题。
执行'哪个主机名'
它应该返回路径“/bin/hostname”
如果有效,再次尝试该命令,例如,
‘/bin/主机名 --fqdn’
答案3
与简单的hostname
命令调用不同,该调用hostname --fqdn
将尝试执行更多操作,这通常会导致一些 DNS 查找。
以以下(成功)调用为例(这是来自 Red Hat 6 框,它具有来自“net-tools”包的“hostname”;较新的机器,例如 RHEL7,具有不同的实现,缺少 --verbose 选项):
# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com
请注意非常有用的--verbose
选项。
简而言之,除了简单之外的任何方法都hostname
可能比你预期的要好。下面是另一个示例:
# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3
最后总结一下:
# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com
请注意,系统的主机名(由 gethostname 返回)可以是非限定主机名,例如只是“myserver”。这就是您要安装的程序使用的原因hostname --fqdn
。
错误信息hostname: Name or service not known
来自解析器函数:这些是系统库的一部分,用于在名称和地址(通常是 DNS 名称和 IP 地址)之间进行转换。
实际上,解析器所做的不仅仅是 DNS(也不仅仅是在主机名和 IP 地址之间进行转换);它的行为部分由文件配置/etc/nsswitch.conf
,通常它将查阅以下内容,通常按以下顺序:
- ‘hosts’(在 Linux 上,指的是 /etc/hosts)
- (有时)nscd(名称服务缓存守护进程)
- ‘dns’
(请注意,您还可以拥有一个缓存 DNS 服务器,例如 dnsmasqd --- 就上述观点而言,这仍然属于“dns”机制)。
值得指出的是,诸如挖,主持人和尊贵的nslookup不要遵循此顺序;它们是显式 DNS 查询工具。这意味着如果您依赖它们(例如在脚本中),您最终可能会得到与常规客户端程序(使用系统解析器)不同的结果。因此,使用盖特恩脚本中的程序,特别是当您有一个正在运行的缓存组件(如 nscd)时。
# getent hosts myserver.example.com
10.1.2.3 myserver.example.com
因此,这里的关键点是:a)如果您已经在 /etc/hosts 中为您自己的机器配置了条目,并且 b)您的 /etc/nsswitch.conf 具有通常的配置 --hosts: files dns
按照这个顺序,那么 c)即使您的环境中没有很好地配置 DNS,也hostname --fqdn
应该可以工作。
在配置良好的 DNS 中,您应该有一个“反向”地址(“PTR 记录”),它提供服务器的“规范”名称,并且该名称也应该能够被查找(IPv4 的“A 记录”)。
简短版本:(适用于 RHEL6 及类似版本)添加--verbose
; 它会指出您缺少什么。对于较新的平台,您可能只需要手动进行反向和正向查找。
希望这能帮助您了解发生了什么。