74 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #!/sbin/runscript
 | |
| # Copyright 2007-2008 Roy Marples
 | |
| # All rights reserved
 | |
| 
 | |
| extra_commands="reset"
 | |
| hostid_file=${hostid_file:-/etc/hostid}
 | |
| 
 | |
| depend() {
 | |
| 	need checkroot
 | |
| 	before devd net
 | |
| }
 | |
| 
 | |
| _set() {
 | |
| 	local id=0
 | |
| 
 | |
| 	if [ -n "$1" ]; then
 | |
| 		id=$(echo "$1" | md5)
 | |
| 		id="0x${id%????????????????????????}"
 | |
| 	fi
 | |
| 	ebegin "Setting Host ID: ${id}"
 | |
| 	sysctl -w kern.hostid="${id}" >/dev/null
 | |
| 	eend $? || return 1
 | |
| 
 | |
| 	if sysctl -n kern.hostuuid >/dev/null 2>&1; then
 | |
| 		[ -n "$1" ] && id=$1
 | |
| 		ebegin "Setting Host UUID: ${id}"
 | |
| 		sysctl kern.hostuuid="${id}" >/dev/null
 | |
| 		eend $? || return 1
 | |
| 	fi
 | |
| 
 | |
| }
 | |
| 
 | |
| # First we check to see if there is a system UUID
 | |
| # If so then we use that and erase the hostid file,
 | |
| # otherwise we generate a random UUID.
 | |
| reset() {
 | |
| 	local uuid=$(kenv smbios.system.uuid 2>/dev/null)
 | |
| 	local x="[0-9a-f]"
 | |
| 	local y="${x}${x}${x}${x}"
 | |
| 	case "${uuid}" in
 | |
| 		${y}${y}-${y}-${y}-${y}-${y}${y}${y});;
 | |
| 		*) uuid=;;
 | |
| 	esac
 | |
| 
 | |
| 	if [ -n "${uuid}" ]; then
 | |
| 		rm -f "${hostid_file}"
 | |
| 	else
 | |
| 		uuid=$(uuidgen)
 | |
| 		if [ -z "${uuid}" ]; then
 | |
| 			eerror "Unable to generate a UUID"
 | |
| 			return 1
 | |
| 		fi
 | |
| 		if ! echo "${uuid}" > "${hostid_file}"; then
 | |
| 			eerror "Failed to store UUID in \`${hostid_file}'"
 | |
| 			return 1
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	_set "${uuid}"
 | |
| }
 | |
| 
 | |
| start()
 | |
| {
 | |
| 	if [ -r "${hostid_file}" ]; then
 | |
| 		_set $(cat "${hostid_file}") 
 | |
| 	else
 | |
| 		reset
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| stop() {
 | |
| 	_set
 | |
| }
 |