(この問題は10.7.1アップデートで解消されました-/ etc/hostsは今ではいつものように機能します)
MacをLionにアップデートしましたが、DNSの後でも、/ etc/hostsが最後に参照されていることに気付きました。開発に使用するホスト名がたくさんあるので、これは非常に面倒です。
名前解決の順序はどこで構成されていますか? dscacheutilを使用して確認できるので、SnowLeopardマシンからの指示は次のとおりです。
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
2つのエラーは別として、/ BSD/Localが/ etc/hostsを以前に読み取らせる原因であると思います。
この「キャッシュ検索ポリシー」が保存されている場所と、それを元に戻す方法を知っている人はいますか?
Dcslを使用してホスト名エントリを作成できることは知っていますが、さまざまなマシンで使用する/ etc/hostsを保持したいと思います。
更新:解決順序は、ディレクトリユーティリティで設定できるようです。残念ながら、このインストールのDirectroy Utilityは、BSDファイルを[サービス]タブに表示しなくなりました。
この機能はLionから削除されましたか?それとも、このインストールはホースで固定されていますか?
私は問題を解決しました(したがって、質問を修正する代わりに回答として投稿します):
BSDファイルは実際にはディレクトリユーティリティにもdscacheutilにもリストされていませんが、少なくとも/ etc/hostsはまだ読み取られていますが、IPアドレスごとに複数のホスト名がサポートされていないように見えるという問題があります。少なくとも、ATMは正しく機能しません。
古い/ 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が.local TLDを異なる方法で処理することです。これは、一部のマルチキャストDNS機能(Bonjourで使用)用に予約されているためです。この問題を解決するために私が見つけた唯一の方法は、開発ホストに別のTLD(つまり、.dev)を使用することです。それは私にとってはうまくいきます、それが他の人に役立つことを願っています!
ご存知のとおり、これを処理する従来のUnixの方法は、/etc/resolv.conf
でhostresorder
またはorder
ディレクティブを使用することです。 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
これはあなたの質問に答えませんが、情報とリンクはそれを見つけるのに役立つかもしれません。収まるように凝縮できれば、コメントに入れておきたいと思います。
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=2005062105164399 )
ネットワークの変更時にスクリプトを自動的にロードする場合は、.plistを作成し、それを/Library/LaunchDaemons
に配置して、次を使用する必要があります。
Sudo launchctl load -w /LibraryLaunchDaemons/name.your.plist
OSXLionに同梱されているApacheサーバーには多くの問題があります。
多くのモジュールがデフォルトでロードされます。/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
/etc/hosts
にあるhostsファイルを開きます。ここにこの行(およびいくつかのコメント)が表示されます:127.0.0.1 macbook-pro-van-bart.local
(コース外の他のコンピューター名)。次の行を追加します(コンピューター名を変更します)。
fe80::1%lo0 macbook-pro-van-bart.local
vhosts
がIPに依存していないことを確認してください。次のように変更します。NameVirtualHost 127.0.0.1:80
になる:
NameVirtualHost *:80
透過的なソフトウェアアップデートサーバーをセットアップしようとしたときに、SnowLeopardでこの問題が発生しました。今はLionでも動作するようになりました。 Software Update Server自体は、ハッキングとクラッジの中間にありますが、この問題はかなりエレガントに解決されました。これが私が知っていることです:
次のスクリプトを作成しました。/usr/local/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の前にホストの目的の順序で新しいファイルを作成し、前のファイルを最後まで連結します。
このスクリプトを呼び出すには、/ Library/LaunchDaemons/com.domain.hostsBind.plistにある次の起動済みジョブでメインのresolv.confファイルを監視します(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 SoftwareUpdateサーバーを使用して組織で機能しています。
最後に注意すべきことは、resolv.confのパスを/etc/resolv.confに変更した場合、これはSnowLeopardでも問題なく機能することです。 Lionは、シンボリックリンクのカーブボールを/ etc /ではなく/ var/run /に投げました。
-b
追伸:スクリプトのソース: http://forums.macrumors.com/showthread.php?p=674292