aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2007-12-05 15:57:17 +0000
committerRoy Marples <roy@marples.name>2007-12-05 15:57:17 +0000
commitb258e0eb52dcb5ff87a847637f532a19d1fbb4aa (patch)
tree4d564f81f673d0456dba78c2a4ab7e785aba0d76
parent07e3d69c52c44fd4953db1c7ef3431b053e3f775 (diff)
Add hostid init script, based on the FreeBSD one.
-rw-r--r--init.d.BSD/hostid91
1 files changed, 91 insertions, 0 deletions
diff --git a/init.d.BSD/hostid b/init.d.BSD/hostid
new file mode 100644
index 00000000..c024772c
--- /dev/null
+++ b/init.d.BSD/hostid
@@ -0,0 +1,91 @@
+#!/sbin/runscript
+# Copyright 1999-2007 Gentoo Foundation
+# Copyright 2007 Roy Marples
+# All rights reserved
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+extra_commands="reset"
+hostid_file=${hostid_file:-/etc/hostid}
+
+depend() {
+ need checkroot
+}
+
+_set() {
+ local id=0
+
+ [ -n "$1" ] && id=$1
+ ebegin "Setting Host UUID: ${id}"
+ sysctl kern.hostuuid="${id}" >/dev/null
+ eend $? || return 1
+
+ if [ -n "$1" ]; then
+ id=$(echo "$1" | md5)
+ id="0x${id%????????????????????????}"
+ fi
+ ebegin "Setting Host ID: ${id}"
+ sysctl kern.hostid="${id}" >/dev/null
+ eend $?
+}
+
+# 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
+}