Changeset View
Changeset View
Standalone View
Standalone View
contrib/openrc/init.d/hostid.in
- This file was added.
Property | Old Value | New Value |
---|---|---|
svn:eol-style | null | native \ No newline at end of property |
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
svn:mime-type | null | text/plain \ No newline at end of property |
#!@SBINDIR@/openrc-run | |||||
# Copyright (c) 2007-2015 The OpenRC Authors. | |||||
# See the Authors file at the top-level directory of this distribution and | |||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS | |||||
# | |||||
# This file is part of OpenRC. It is subject to the license terms in | |||||
# the LICENSE file found in the top-level directory of this | |||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE | |||||
# This file may not be copied, modified, propagated, or distributed | |||||
# except according to the terms contained in the LICENSE file. | |||||
extra_commands="reset" | |||||
: ${hostid_file:=/etc/hostid} | |||||
depend() | |||||
{ | |||||
use root | |||||
after clock | |||||
before devd net | |||||
keyword -jail -prefix | |||||
} | |||||
_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= x="[0-9a-f]" y="$x$x$x$x" | |||||
if command -v kenv >/dev/null 2>&1; then | |||||
uuid=$(kenv smbios.system.uuid 2>/dev/null) | |||||
fi | |||||
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 | |||||
} |