Mac 関係覚え書き

起動時にホスト名を設定する.

動き

起動時に,自分の MAC アドレスから /etc/ethers を参照して 自分が本来つけるべき IP アドレスを得る. 次に,得られた IP アドレスから,/etc/hosts を参照して ホスト名を得る.

以上で得られた IP アドレスと現在の IP アドレスが同じであれば, 何もせずに終了し, 異なれば,preferences.plist を修正して再起動する.

手順

  1. AdminTools をインストールする(/usr/sbin/systemsetup だけあればいい)
  2. /etc/hosts に IP アドレス,ホスト名を登録する.
  3. /etc/ethers に MAC アドレス,IP アドレスを登録する.
  4. /System/Library/StartupItems/SetIPHostname/ を作成する.
  5. /System/Library/StartupItems/SetIPHostname/ にファイル SetIPHostname,StartupParameters.plist を作成する.
  6. /etc/setiphostname.shを作成する

/System/Library/StartupItems/SetIPHostname/SetIPHostname

SetIPHostname より /etc/setiphostname.sh を呼び出す

#!/bin/sh

##
# SetIPHostname (c)
##

. /etc/rc.common

StartService ()
{
  CheckForNetwork
  # if [ "${NETWORKUP}" = "-NO-" ]; then exit; fi
  /etc/setiphostname.sh
  if [ -f /var/run/syslog.pid ]; then
    kill -HUP `cat /var/run/syslog.pid`
  fi
  return 0
}

StopService ()
{
  return 0
}

RestartService ()
{
  return 0
}

RunService "$1"

/System/Library/StartupItems/SetIPHostname/StartupParameters.plist

{
 Description = "Set IP address and Computer name";
 Provides        = ("SetIPHostname");
 Requires        = ("NetworkExtensions");
 OrderPreference = ("None");
}

/etc/setiphostname.sh filesetiphostname.sh

/etc/hosts から MAC アドレスを IP,ホスト名を取得, /Library/Preferences/SystemConfiguration/preferences.plist を書き換える.

#! /bin/sh

#echo "Set to LocalHostName"
PREF=/Library/Preferences/SystemConfiguration/preferences.plist
HOSTS=/etc/hosts
IP=`ifconfig en0 |grep inet |grep netmask |awk -F" " '{print $2}'`
#IP=`cat /etc/lastip`
ETHER=`ifconfig en0 |grep ether |awk -F" " '{print $2}'`

MY_IP=`grep -i ${ETHER} /etc/ethers |awk -F" " '{print $2}'`

if [ -f /etc/LAST_IP ]
then
LAST_IP=`cat /etc/LAST_IP`
els
LAST_IP=""
fi

#if [ "${MY_IP}" = "" -o "{$IP}" = "" ]
if [ "${MY_IP}" = "" -o "${MY_IP}" = "${LAST_IP}" ]
then
       exit 0
fi
HOSTNAME=`grep ${MY_IP} ${HOSTS} |awk -F" " '{print $2}'`

# DEBUG
#echo "HOSTNAME MY_IP ETHER IP" > /var/tmp/tnk.txt
#echo "${HOSTNAME} ${MY_IP} ${ETHER} ${IP}" >> /var/tmp/tnk.txt

if [ "${MY_IP}" != "${IP}" ]
then

/usr/sbin/scutil --set ComputerName ${HOSTNAME}
/usr/sbin/scutil --set LocalHostName ${HOSTNAME}

/bin/ed ${PREF} <<EOF >/dev/null
1
/<key>Addresses<\/key>/
++c
<string>${MY_IP}</string>
.

w
q
EOF

echo ${MY_IP} > /etc/LAST_IP

/sbin/reboot

fi

添付ファイル: filesetiphostname.sh 395件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-02-03 (木) 17:05:06