Mac拒绝更改主机名

时间:2011-11-10 23:03:54

标签: macos postfix-mta hostname

我一直试图弄清楚如何在我的Mac上使用postfix而且出现了可怕的错误,我似乎无法修复它。

我认为问题与启动Postfix有关。

基本上,Mac似乎拒绝更改其主机名。在bash中,用户显示为“admin @(null)”,如果我输入'hostname',我也会给“(null)”。

更改“从系统偏好设置共享”中的主机名会导致第二个示例发生变化(例如,“其他用户可以访问此计算机上的共享文件夹,以及管理员所有卷,在afp:// null /或”) lion2“。”)但第一个保持为空。

我甚至尝试过手动设置主机名的/ etc / hostconfig,但没有任何作用。

是否有其他地方的主机名正在尝试设置,但可能已损坏?或者包含无效字符或什么?

这导致Postfix无法正常工作并报告:

后缀:警告:valid_hostname:无效字符40(十进制):( null) 后缀:致命:无法使用我自己的主机名

拜托,我真的希望有人可以帮我解决这个问题。我现在已经好几个小时了。

干杯,

斯科特

4 个答案:

答案 0 :(得分:13)

您是否尝试过scutil

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

           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

答案 1 :(得分:4)

你应该尝试直接运行 / bin / hostname 来设置unix / bsd层的主机名,scutil的值是SystemConfiguration设置,这是unix不知道的更高层。 / p>

sudo scutil --get HostName 返回未设置是完全正常的,即使运行 / bin / hostname 显示主机名也是如此。

设置主机名运行sudo hostname Foo.bar(这与另一个答案给出的代码中的sethostname()BSD调用基本相同)

然后,您可以选择运行sudo scutil --set HostName Foo.bar以使SystemConfiguration设置保持同步

注意: SystemConfiguration中的HostName可以与LocalHostName和ComputerName不同,它也可以与 / bin / hostname 返回的不同,但最好是它们全部同步,所以你也可以这样做: / p>

sudo scutil --set LocalHostName Foo 
sudo scutil --set ComputerName Foo

答案 2 :(得分:2)

所有其他答案和帮助非常感谢,但经过多次调查后,问题似乎在于我的路由器和iMac:路由器不允许iMac更改其主机名客户端或可能向iMac发送一个奇怪的主机名它可以使用。

答案 3 :(得分: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源编译为可运行的二进制文件。

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