起動時に,自分の MAC アドレスから /etc/ethers を参照して 自分が本来つけるべき IP アドレスを得る. 次に,得られた IP アドレスから,/etc/hosts を参照して ホスト名を得る.
以上で得られた IP アドレスと現在の IP アドレスが同じであれば, 何もせずに終了し, 異なれば,preferences.plist を修正して再起動する.
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"
{ Description = "Set IP address and Computer name"; Provides = ("SetIPHostname"); Requires = ("NetworkExtensions"); OrderPreference = ("None"); }
/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