Mac拒绝更改主机名

7
我一直在试图在我的Mac上使用Postfix,但出了些问题,似乎无法修复。
我认为问题与启动Postfix有关。
基本上,Mac似乎拒绝更改其主机名。在bash中,用户显示为“admin@(null)”,如果我键入'hostname',也会给出“(null)”。
从“系统偏好设置”中的共享更改主机名将导致第二个示例更改(例如,“其他用户可以访问此计算机上的共享文件夹,管理员可以在afp://null/或“lion2”上访问所有卷。”)但是第一个仍然为空。
我甚至尝试过手动在/etc/hostconfig中设置主机名,但仍然不起作用。
是否还有其他地方试图设置主机名但可能已损坏?或包含无效字符之类的内容?
这导致Postfix无法工作并报告: postfix:警告:valid_hostname:无效字符40(decimal):(null) postfix:致命错误:无法使用自己的主机名 请,我真的希望有人能帮助我解决这个问题。我已经试了几个小时了。
谢谢, Scott

这可能会有所帮助--尽管它提到了Netinfo数据库,但它可能已经过时五年了。 - sarnold
谢谢,sarnold,但我已经检查过了,不幸的是这不是问题(或者说,不是解决方案!) - twistedpixel
4个回答

13

你尝试过使用scutil吗?

sudo scutil --get pref会显示当前值,sudo scutil --set pref name将把值设置为namepref可以是以下之一:

           ComputerName   The user-friendly name for the system.

           LocalHostName  The local (Bonjour) host name.

           HostName       The name associated with hostname(1) and gethostname(3).

这是我在我的电脑上得到的结果:

$ sudo scutil --get ComputerName
SteveBook2
$ sudo scutil --get LocalHostName
SteveBook2
$ sudo scutil --get HostName
HostName: not set

我在想为什么HostName没有设置。这是因为系统使用之前的两个中的任何一个来动态命名吗? - twistedpixel
我对HostName的了解不足以给出有用的答案。但是它确实表明在“系统偏好设置”->“共享”中设置名称对HostName没有影响。 - SSteve
好的,无论如何感谢您的帮助,我很高兴这个问题基本上已经解决了,Postfix又可以工作了! - twistedpixel
HostName 是 Unix 设置的,而 ComputerName/LocalHostName 是 SystemConfiguration 框架设置的,例如:/bin/hostname 应该反映前者,而 SystemPreferences 反映后者。 - valexa
设置命令后,我只剩下一个箭头 (>),不确定该怎么做。除了 quit,但好像不会保存。 - Steve Robbins
单个插入符号(它的形状像胡萝卜但有不同的名称)意味着您尚未完成Unix命令并正在寻找更多输入。您到底在输入什么? - SSteve

3
您可以尝试直接运行/bin/hostname来在Unix/BSD层面上设置主机名,而scutil返回的值是SystemConfiguration设置,这是一个更高层次的设置,Unix不知道它。
即使在运行/bin/hostname时显示了主机名,在运行sudo scutil --get HostName时返回未设置也是完全正常的。
要设置主机名,请运行sudo hostname Foo.bar(这与另一个答案中给出的代码中的sethostname()BSD调用基本相同)
您还可以选择运行sudo scutil --set HostName Foo.bar以保持SystemConfiguration设置同步
注意: SystemConfiguration中的HostName可能与LocalHostName和ComputerName不同,也可能与/bin/hostname返回的不同,但最好让它们保持同步,因此您还可以执行:
sudo scutil --set LocalHostName Foo 
sudo scutil --set ComputerName Foo

2

其他所有答案和帮助都非常感激,但是经过调查,问题似乎出在我的路由器和iMac上:路由器不允许iMac在客户端更改其主机名,或者可能会向iMac发送一个奇怪的主机名供其使用。


似乎在OSX上存在一个普遍问题。我在家里有几台机器,包括一台运行Ubuntu的机器 - 它们都没有设置主机名的问题,只有Mac会感到困惑。重置路由器似乎对它有帮助。 - Manish Patel

1
如果在启动 postfix 之前运行这个小程序,它能工作吗?
#include <unistd.h>

int main(int argc, char* argv[]) {
    char host[] = "newhostname";
    sethostname(host, sizeof(host));
    return 0;
}

我不敢假设您的旧主机名还有什么其他依赖项 - 运行此操作后,请对所有服务进行测试。

详细信息请参见:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/gethostname.3.html

更新

要编译和运行此小程序,请将其内容保存到文件中(/tmp/newhostname.c即可),然后运行:

cd /tmp
make newhostname
sudo ./newhostname

我认为您的make(1)至少知道如何使用默认规则从C源代码编译可运行的二进制文件。

如果编译器尚未安装,也许其他人会有更好的想法。


那是C语言吗?我不会C :( 我尝试将它作为C文件运行,但是它给了我语法错误。 - twistedpixel
我不敢相信 - 我已经追踪到问题出在我的路由器上,但我不确定该如何解决。似乎路由器的DHCP以某种方式发送了一个无效的主机名。你有任何想法在哪里停止它这样做吗?我不确定为什么会发生这种情况,因为几周前它还正常工作,我也不记得在路由器上更改任何设置... - twistedpixel
安装Xcode时会获得gcc。在过去,当您从光盘上安装OS X时,它已经包含在内了。 - SSteve
1
你可以通过向/etc/hostname添加一个HOSTNAME条目并确保它不是“-AUTO-”来说服OS X忽略DHCP提供的主机名。 - sarnold
我知道你所说的正确解决问题的方法,但如果你的路由器分配了愚蠢的名称,那么就需要你的DHCP客户端知道何时忽略它们。如果/etc/hostconfig是苹果提供的告诉你的DHCP客户端忽略愚蠢主机名的最佳方式,那就只能这样了。:( - sarnold
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接