rcmdnk's blog
Last update

Hostname

普段Macはプライベートネットワーク内で使っていて、 Host名はローカルなホスト名の指定をしてそれを使っているのですが、 他のネットワークでグローバルなIPが割り振られるようなネットワークに接続した時に ホスト名がおかしくなってることに気づいて対処したことについて。

Sponsored Links

Macのローカルホスト名

Mac(OS X 10.9)ではシステム環境設定にある共有の項目に行くと、 コンピューター名という設定項目があって、これを設定すると ローカルのネットワーク内からはこの名前に見える様になります。 ターミナルでhostnameした結果や$HOSTNAMEという環境変数に入っている 値もこの値になります。 (正確にはここに書き込んだ名前.localな形になります。)

ローカルネットワークでない場合のホスト名

このホスト名を.bashrc等の設定で使っている所があって、 その辺でちょっと上手く動かなくなってる部分があって よく見てみたらホスト名が違うものになっていました。 (GNU screenを立ち上げてない時にはプロンプトに、screenを立ち上げてる時も hardstatusやcaptionに表示させてるのでよく見ればすぐに気づくところですが。。。)

具体的にはscreenのセッション情報を保存するソケットディレクトリSCREENDIRに ホスト名を含ませていたので 1screen -rなんかで前に閉じたセッションを探そうとすると、 ネットワークが変わると違う名前を探しにいって前のセッションを復活できない、 と言う事態になって気づきました。

hostnameとかしてみるとそのネットワークの中で自動的に割り振られる 名前になっていて、元のローカル設定とは違ってしまいます。

当然といえば当然ですが、これだと色々面倒なので固定する方法を探してみたところ、 Macでは/etc/hostconfigを使っていて、 デフォルトではこんな感じになっています。

/etc/hostconfig
1
2
3
4
5
6
## This file is going away

AFPSERVER=-NO-
AUTHSERVER=-NO-
TIMESYNC=-NO-
QTSSERVER=-NO-

going awaayとなってますが、取り敢えず、ここにHOSTNAMEの指定をしてあげると それを使うようになるとのことなので、

HOSTNAME=myMac.local

と言った感じの行を加えます。 上の共有から設定していたものと合わせるため .localも必要まで書くことが必要です。

この設定にして再起動すると、どのネットワークにつなげても 手元のhostnameではmyMac.localを返す様になりました。

この辺の話については古いものしか見つからなかったのであれですが、 取り敢えずラップトップとして手元で使う分にはこれで大丈夫そうです。

Mac OS X Server 1.x: NetInfo 設定の復旧

OS X ハッキング! (19) システム環境設定と/etc/hostconfigの関係 マイナビニュース

追記: 2014/12/09

Yosemiteだとhostconfigが完全に無くなったので別の方法が必要です。

Mac 10.10 Yosemiteでのホスト名の設定

追記ここまで

共有からの設定はどこに反映されるのか

上の設定をしていて、共有から設定される物が 実際どこへ反映されるのか気になったのですが、 これは

  • /Library/Preferences/SystemConfiguration/preferences.plist

という設定ファイルに書き込まれます。

また、共有の部分で編集をおすと、 ダイナミック・グローバル・ホスト名を使用 という設定もあり、これを設定するとローカル以外からでも ホスト名で参照できる様にもなります。

OS X Mavericks: ダイナミック・グローバル・ホスト名を使用する

この設定も上のpreferences.plistに書き込まれ、 下みたいな設定になっています。

ダイナミック・グローバル・ホスト名を使用 にチェックしてない場合は DynamicDNSの部分はありません。

/Library/Preferences/SystemConfiguration/preferences.plist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
...
  <key>System</key>
  <dict>
    <key>Network</key>
    <dict>
      <key>DynamicDNS</key>
      <dict>
        <key>HostNames</key>
        <array>
          <dict>
            <key>Domain</key>
            <string>myGlobalDomain</string>
            <key>Enabled</key>
            <true/>
          </dict>
        </array>
      </dict>
      <key>HostNames</key>
      <dict>
        <key>LocalHostName</key>
        <string>myLocalDomain</string>
      </dict>
    </dict>
    <key>System</key>
    <dict>
      <key>ComputerName</key>
      <string>myLocalDomain</string>
      <key>ComputerNameEncoding</key>
      <integer>1</integer>
    </dict>
  </dict>
...
Sponsored Links
Sponsored Links

« sentakuで飛び飛びの複数選択を出来るようにした MacでHomebrewでBashをアップデートする際の注意 »