9

(эта проблема ушла для меня с обновлением 10.7.1 - /etc /hosts теперь работает как всегда для меня)

Я обновил свой Mac до Lion, и теперь я замечаю, что с /etc /hosts обращаются в последнюю очередь, даже после DNS. Это очень раздражает, так как у меня есть много имен хостов, которые я использую для разработки.

Где настроен порядок разрешения имен? Я могу проверить это с помощью dscacheutil, поэтому вот что говорит мне машина Snow Leopard:

pilif@tali ~ % dscacheutil -configuration
DirectoryService Cache search policy:
    /Local/Default
    /BSD/local

Settings:
AAAA Queries  - Disabled (link-local IPv6 addresses)
Default TTL   - 3600
Policy Flags  - 0

И вот что Лев говорит мне

pilif@kosmos ~ % dscacheutil -configuration
DirectoryService Cache search policy:
    /Local/Default

Unable to get details from the cache node
Unable to get cache configuration information

Помимо этих двух ошибок, я бы предположил, что /BSD /Local - это то, что заставляет его читать /etc /hosts ранее.

У кого-нибудь есть идеи, где хранится эта "политика поиска в кэше" и как ее вернуть обратно?

Я знаю, что могу создавать записи с именами хостов, используя dcsl, но мне бы очень хотелось сохранить мой /etc /hosts, который я использую на разных машинах.

Обновление: порядок разрешения, по-видимому, можно настроить в каталоге Utility. К сожалению, при этой установке Directroy Utility больше не отображает файлы BSD на вкладке «Службы».

Эта особенность ушла от Льва? Или эта установка шланговая?

6 ответов6

5

Я решил проблему (и, таким образом, опубликовал в качестве ответа вместо изменения вопроса):

Файлы BSD действительно не перечислены ни в утилите каталогов, ни в dscacheutil, но, по крайней мере, /etc /hosts все еще читается, но есть проблема в том, что несколько имен хостов на IP-адрес больше не поддерживаются или по крайней мере, они не работают правильно банкомат.

Когда ваш старый /etc /hosts мог выглядеть так

127.0.0.1 localhost foo foobar

Это приведет к ~ 10 секундам ожидания для разрешения любого из этих имен хостов.

Но если вы используете

127.0.0.1 localhost
127.0.0.1 foo
127.0.0.1 foobar

Разрешение будет мгновенным.

Ответ RedGrittyBrick также действителен, но я специально хочу продолжать использовать файл hosts для изменения локального каталога, так как он используется несколькими моими машинами разработки.

Чтобы ответить на остальные мои вопросы тоже (теперь мне все ясно):

  • Порядок разрешения кэша, который вы настраиваете в утилите каталогов, где вы можете указать, какие из включенных каталогов вы хотите посмотреть, в каком порядке.
  • Для настройки каталогов также используйте утилиту каталогов
  • Утилита каталогов запускается в меню "Системные настройки"> "Учетные записи"> "Параметры входа в систему"> "Присоединиться к каталогу"> "Утилита каталогов".
  • В Lion "каталог" BSD Files больше не доступен, хотя справочный файл по-прежнему ссылается на него.
  • Как я уже сказал, /etc /hosts все еще читается, но есть ошибка, которую я описал выше.
3

Дело в том, что Lion по-разному обрабатывает домен .local, поскольку он зарезервирован для некоторых функций многоадресной DNS (используется Bonjour). Единственный способ решить эту проблему - использовать другой домен верхнего уровня для хостов разработки (например, .dev). Это хорошо работает для меня, надеюсь, это будет полезно для других!

2

Существует ряд проблем с сервером Apache, который поставляется с OSX Lion.

  1. Многие модули загружены по умолчанию.
    Откройте /etc/apache2/httpd.conf и просмотрите список включенных модулей (все они включены по умолчанию). Вы, вероятно, можете отключить многие из них, поставив # перед строкой.

    Это те, которые я выключил:

#LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
#LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
#LoadModule authn_dbd_module libexec/apache2/mod_authn_dbd.so
#LoadModule authn_default_module libexec/apache2/mod_authn_default.so
#LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
#LoadModule authz_user_module libexec/apache2/mod_authz_user.so
#LoadModule authz_dbm_module libexec/apache2/mod_authz_dbm.so
#LoadModule authz_owner_module libexec/apache2/mod_authz_owner.so
#LoadModule authz_default_module libexec/apache2/mod_authz_default.so
#LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
#LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so
#LoadModule dbd_module libexec/apache2/mod_dbd.so
#LoadModule mime_magic_module libexec/apache2/mod_mime_magic.so
#LoadModule unique_id_module libexec/apache2/mod_unique_id.so
#LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
#LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
#LoadModule proxy_scgi_module libexec/apache2/mod_proxy_scgi.so
#LoadModule proxy_ajp_module libexec/apache2/mod_proxy_ajp.so
#LoadModule dav_module libexec/apache2/mod_dav.so
#LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
#LoadModule bonjour_module libexec/apache2/mod_bonjour.so
#LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so
  1. Файл hosts не идеален.
    Теперь откройте файл hosts, расположенный в /etc/hosts . Здесь вы увидите эту строку (и некоторые комментарии):

127.0.0.1 macbook-pro-van-bart.local

(другое имя компьютера с курса). Добавьте следующую строку (измените имя компьютера):

fe80::1%lo0 macbook-pro-van-bart.local
  1. Посмотрите на ваш конфиг apache
    Убедитесь, что ваши vhosts не полагаются на IP-адреса. Измените их так:

NameVirtualHost 127.0.0.1:80

становится:

NameVirtualHost *:80

1

Как я ожидаю, вы знаете, традиционный Unix способ справиться с этим - использовать hostresorder или директиву order в /etc/resolv.conf . OS X читает (или может быть настроен для) чтения и использования этих файлов, но OS X имеет отдельную систему, управляемую через сетевые настройки, которая, как я полагаю, перезаписывает эти файлы конфигурации при загрузке.

http://hints.macworld.com/article.php?story=20070223050607406

http://docs.info.apple.com/article.html?path=ServerAdmin/10.6/en/od4939886e.html

https://discussions.apple.com/thread/2493759

http://blog.daemon.com.au/go/blog-post/managing-the-host-file-on-leopard

Это не отвечает на ваш вопрос, но информация и ссылки могут помочь найти его. Я бы поставил это в комментарии, если бы мог сжать это, чтобы соответствовать.

1

Можно обойти эту проблему, используя dnsmasq в качестве локального DNS и добавляя туда записи, или используя dnsmasq для использования /etc/hosts .

Для установки порядка DNS-сервера можно использовать скрипт:

Filename: setdsn
-------------------------------------------------
#!/bin/bash

# Script is used to set the Nameserver Lookup under Max OS X 10.4 with the Console
# Script by Stephan Oeste

if [ $# -lt 2 ] ; then
echo "Use: $0 [2.Nameserver]"
echo "Example Use: $0 example.tld 1.2.3.4 1.2.3.5"
exit 1
fi

PSID=$( (scutil | grep PrimaryService | sed -e 's/.*PrimaryService : //')<< EOF
open
get State:/Network/Global/IPv4
d.show
quit
EOF
)

scutil << EOF
open
d.init
d.add ServerAddresses * $2 $3
d.add DomainName $1
set State:/Network/Service/$PSID/DNS
quit
EOF
-------------------------------------------------

Создайте файл:

chmod +x setdns

А затем используйте ist с (Пример): setdns domain.com 12.23.34.45
(Опубликовано emzy на http://hints.macworld.com/article.php?story=20050621051643993)

Если вы хотите, чтобы скрипт автоматически загружался при изменении сети, вы должны создать .plist, поместить его в /Library/LaunchDaemons и использовать:

sudo launchctl load -w /LibraryLaunchDaemons/name.your.plist
1

Я столкнулся с этой проблемой в Snow Leopard при попытке настроить прозрачный сервер обновления программного обеспечения. Теперь я работаю над Львом. Сам сервер обновлений программного обеспечения находится на полпути между хаком и клуджем, но эта проблема была решена довольно элегантно. Вот что я знаю:

  • /etc/hosts существует в Lion и, как и последние версии OS X, настроена на чтение после DNS.
  • /etc/resolv.conf существует в Lion, но является символической ссылкой на /var/run/resolv.conf.
  • /var/run/resolv.conf переписывается при каждом обновлении конфигурации сети. Это может быть связано с перезагрузками, продлением аренды DHCP и т.д.

Я создал следующий скрипт. / USR / местные / hostsBind:

mv /var/run/resolv.conf /var/run/resolv.conf.new
echo order hosts, bind > /var/run/resolv.conf
cat /var/run/resolv.conf.new >> /var/run/resolv.conf

это создает резервную копию текущего основного файла resolv.conf, создает новый с желаемым порядком хостов перед BIND и объединяет предыдущий файл до конца.

Я вызываю этот сценарий, просматривая основной файл resolv.conf со следующим запущенным заданием в /Library/LaunchDaemons/com.domain.hostsBind.plist (вы можете изменить com.domain на что-то, что имеет смысл для вас):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.domain.hostsBind</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/hostsBind</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

Это работает для нашей организации с сервером обновления программного обеспечения Lion.

Последнее, что следует отметить, это прекрасно работает и со Snow Leopard, если вы измените путь для resolv.conf на /etc/resolv.conf. Лев просто бросил кривая шариковой ссылки в /var /run / вместо / etc /.

-b

PS: источник для скрипта: http://forums.macrumors.com/showthread.php?p=6742920

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .