RIGHT:[[Mac 関係覚え書き]]

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

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

**手順
+%%AdminTools をインストールする(/usr/sbin/systemsetup だけあればいい)%%
+/etc/hosts に IP アドレス,ホスト名を登録する.
+/etc/ethers に MAC アドレス,IP アドレスを登録する.
+/System/Library/StartupItems/SetIPHostname/ を作成する.
+/System/Library/StartupItems/SetIPHostname/ にファイル
SetIPHostname,StartupParameters.plist を作成する.
+/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 &ref(setiphostname.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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS