Mac отказывается менять имя хоста

Я пытался понять, как использовать postfix на моем Mac, и что-то пошло не так, и я не могу это исправить.

Я считаю, что проблема связана с запуском Postfix.

По сути, Mac, похоже, отказывается менять свое имя хоста. В bash пользователь отображается как «admin @ (null)», если я набираю «hostname», мне также дается «(null)».

Изменение имени хоста в разделе «Общий доступ из системных настроек» приводит к изменению второго примера (где, например, говорится: «Другие пользователи могут получить доступ к общим папкам на этом компьютере, а администраторы — ко всем томам по адресу afp://null/ или «lion2». "), но первый остается нулевым.

Я даже пытался /etc/hostconfig вручную установить имя хоста, но ничего не работает.

Есть ли где-то еще имя хоста, которое пытается установить, но, возможно, оно повреждено? Или содержит недопустимый символ или что-то в этом роде?

Это приводит к тому, что Postfix не работает и сообщает:

постфикс: предупреждение: действительное_имя_хоста: недопустимый символ 40 (десятичный): (нулевой) постфикс: фатальный: невозможно использовать собственное имя хоста

Пожалуйста, я очень надеюсь, что кто-то может помочь мне исправить это. Я уже несколько часов пытаюсь.

Ваше здоровье,

Скотт


person twistedpixel    schedule 10.11.2011    source источник
comment
Это может быть полезно -- хотя, поскольку в нем упоминается база данных Netinfo, он также может быть устаревшим на пять лет.   -  person sarnold    schedule 11.11.2011
comment
Спасибо, sarnold, но я уже проверил это, и, к сожалению, это не проблема (или не решение!)   -  person twistedpixel    schedule 11.11.2011


Ответы (4)


Вы пробовали scutil?

sudo scutil --get pref покажет текущее значение, а sudo scutil --set pref 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
person SSteve    schedule 10.11.2011
comment
Мне интересно, почему HostName не установлено. это потому, что система использует любой из двух предыдущих, чтобы назвать это динамически? - person twistedpixel; 11.11.2011
comment
Я недостаточно знаю о HostName, чтобы иметь полезный ответ на этот вопрос. Но это показывает, что установка имени в Системных настройках -> Общий доступ не влияет на HostName. - person SSteve; 11.11.2011
comment
Хорошо, спасибо за вашу помощь в любом случае, я рад, что это в значительной степени отсортировано, и Postfix снова работает! - person twistedpixel; 11.11.2011
comment
HostName — это то, что устанавливает unix, ComputerName/LocalHostName — это то, что устанавливает структура SystemConfiguration, например: /bin/hostname должно отражать первое, а SystemPreferences — более позднее. - person valexa; 14.02.2012
comment
После команды set у меня осталась одна морковка (>), и я не знаю, куда идти дальше. Кроме quit, но тогда вроде не сохраняет. - person Steve Robbins; 13.04.2013
comment
Знак вставки (он имеет форму морковки, но имеет другое название) означает, что вы не закончили свою команду Unix, и она ищет дополнительные данные. Что именно вы печатаете? - person SSteve; 13.04.2013

Вы должны были попробовать запустить /bin/hostname напрямую, чтобы установить имя хоста на уровне unix/bsd, значения из scutil являются настройками SystemConfiguration, которые являются более высоким уровнем, на который unix не обращает внимания.

Совершенно нормально, что sudo scutil --get HostName возвращает значение not set, даже если запуск /bin/hostname показывает вам имя хоста.

Чтобы установить имя хоста, запустите sudo hostname Foo.bar (это в основном идентично вызову sethostname() BSD в коде, указанном в другом ответе)

При желании вы можете запустить sudo scutil --set HostName Foo.bar, чтобы синхронизировать настройки SystemConfiguration.

ПРИМЕЧАНИЕ. Имя хоста в SystemConfiguration может отличаться от LocalHostName и ComputerName , оно также может отличаться от того, что возвращает /bin/hostname, но лучше, чтобы все они были синхронизированы, поэтому вы также можете :

sudo scutil --set LocalHostName Foo 
sudo scutil --set ComputerName Foo
person valexa    schedule 14.02.2012

Все остальные ответы и помощь были высоко оценены, однако после долгих исследований проблема, похоже, связана с моим маршрутизатором и iMac: маршрутизатор не позволяет iMac изменять свое имя хоста на стороне клиента ИЛИ, возможно, отправляет странное имя хоста на iMac для его использования. .

person twistedpixel    schedule 11.11.2011
comment
Кажется, с этим связана общая проблема с OSX. У меня дома есть несколько машин, в том числе одна с Ubuntu - ни на одной из них нет проблем с настройкой имени хоста, только Mac путается. Сброс роутера, кажется, помогает. - person Manish Patel; 27.10.2013

Если вы запустите эту крошечную программу перед запуском постфикса, она сработает?

#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 в исполняемые двоичные файлы с правилами по умолчанию.

Если компилятор еще не установлен, возможно, у кого-то есть идея получше.

person sarnold    schedule 10.11.2011
comment
Это С? Я не знаю C :( Я пытался запустить его как файл C, но это дало мне синтаксические ошибки. - person twistedpixel; 11.11.2011
comment
Если вы сохраните этот файл как test.m, вы сможете скомпилировать его с помощью команды gcc -Wall test.m -o test. Затем запустите его, набрав ./test. - person SSteve; 11.11.2011
comment
У меня еще не установлен brew на этом Mac, поэтому у меня нет make. @SSteve: у меня нет gcc!! Что?!?! О, подождите, разве Apple не заменила его на lldl или что-то в этом роде? - person twistedpixel; 11.11.2011
comment
Я не верю в это - я отследил проблему до своего маршрутизатора, но не знаю, как ее исправить. Кажется, DHCP маршрутизатора каким-то образом отправляет ему недопустимое имя хоста. Любая идея, где я мог бы посмотреть, чтобы остановить его от этого? Не знаю, как это произошло, поскольку несколько недель назад он работал нормально, и я не помню, чтобы я менял какие-либо настройки на маршрутизаторе. - person twistedpixel; 11.11.2011
comment
Вы получаете gcc при установке Xcode. В те дни, когда вы получали свою OS X на дисках, она была включена. - person SSteve; 11.11.2011
comment
У меня Xcode. Хотя перед тем, как отправить сообщение в Overflow, я переустановил Lion, так что, возможно, это все испортило. - person twistedpixel; 11.11.2011
comment
Некоторые маршрутизаторы упрощают установку статических IP-адресов через DHCP, а иногда они также устанавливают имя хоста. Не знаю, где это находится у вас, но Tomato помещает его в Basic/ Статический DHCP. - person sarnold; 11.11.2011
comment
Этот роутер отстой. Это бесплатно от интернет-провайдера, и в нем нет никаких настроек для именования через DHCP, кроме изменения имени для каждой записи, но это кажется ненужным, поскольку оно все равно правильно отображает имя хоста. Я думаю, возможно, он отправляет его на iMac в дурацком наборе символов или что-то в этом роде? В любом случае отключение кабеля Ethernet от iMac приводит к мгновенному изменению имени хоста на iMac на указанное имя. Ergo: дерьмовое программное обеспечение маршрутизатора. Спасибо за вашу помощь! - person twistedpixel; 11.11.2011
comment
Очевидно, вы можете убедить OS X игнорировать имена хостов, предоставленные DHCP — добавьте запись HOSTNAME в /etc/hostname и убедитесь, что это не -AUTO-. - person sarnold; 11.11.2011
comment
Вы имеете ввиду /etc/hostconfig? Если да, то я уже пытался это сделать, но мне это не очень нравилось, потому что это было похоже на переопределение, а не на правильное решение проблемы, понимаете? Поскольку из-за этого имя хоста правильно отображалось в Терминале, но по-прежнему отказывалось обновляться из системных настроек или команды «имя хоста» (или даже scutil), я предпочитаю делать все на 100%, чтобы обходной путь не привел к проблемам в будущем. Я думаю, иногда вам просто нужно найти обходной путь. - person twistedpixel; 11.11.2011
comment
Я знаю, что вы имеете в виду под правильным решением проблем, но если ваш маршрутизатор выдает глупые имена, ваш DHCP-клиент должен знать, когда их игнорировать. Если /etc/hostconfig — это лучший способ, который Apple предоставила для указания вашему DHCP-клиенту игнорировать глупые имена хостов, так оно и есть. :( - person sarnold; 12.11.2011