rc.d: Generate machine-id from hostid_save

rc.d/hostid_save saves a UUID generated by rc.d/hostid in /etc/hostid.
Store the same UUID, without hyphens, in /etc/machine-id.  The hypĥens
are removed with a shell function because hostid_save runs before file
systems are mounted so other tools may not be available yet.

This eliminates some duplication between hostid and machine-id and for
virtual machines machine-id now contains the UUID configured in the
hypervisor like it does on Linux.

Reviewed by:	delphij
Discussed with:	bapt
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D38811
This commit is contained in:
Tijl Coosemans 2023-02-15 21:09:51 +01:00
parent 862aab6281
commit ecad3f5c4d
7 changed files with 25 additions and 49 deletions

View file

@ -52,6 +52,9 @@
# xargs -n1 | sort | uniq -d;
# done
# 20230308: machine-id merged into hostid_save
OLD_FILES+=etc/rc.d/machine-id
# 20230306: remove tzsetwall(3)
OLD_FILES+=usr/share/man/man3/tzsetwall.3.gz

View file

@ -59,8 +59,6 @@ distribution:
${_+_}cd ${SRCTOP}/usr.sbin/rmt; ${MAKE} etc-rmt
${INSTALL_SYMLINK} -T "package=runtime" ../var/run/os-release \
${DESTDIR}/etc/os-release
${INSTALL_SYMLINK} -T "package=runtime" ../var/db/machine-id \
${DESTDIR}/etc/machine-id
.if ${MK_UNBOUND} != "no"
if [ ! -e ${DESTDIR}/etc/unbound ]; then \
${INSTALL_SYMLINK} -T "package=unbound" \

View file

@ -138,6 +138,7 @@ hostname="" # Set this!
hostid_enable="YES" # Set host UUID.
hostid_file="/etc/hostid" # File with hostuuid.
hostid_uuidgen_flags="-r" # Flags to uuidgen.
machine_id_file="/etc/machine-id" # File with machine-id.
nisdomainname="NO" # Set to NIS domain if using NIS (or NO).
dhclient_program="/sbin/dhclient" # Path to dhcp client program.
dhclient_flags="" # Extra flags to pass to dhcp client.
@ -696,9 +697,6 @@ harvest_mask="511" # Entropy device harvests all but the very invasive sources.
osrelease_enable="YES" # Update /var/run/os-release on boot (or NO).
osrelease_file="/var/run/os-release" # File to update for os-release.
osrelease_perms="444" # Default permission for os-release file.
machine_id_enable="YES" # Create /var/db/machine-id on boot if missing (or NO).
machine_id_file="/var/db/machine-id" # File to update for machine-id.
machine_id_perms="444" # Default permissions for machine-id file.
dmesg_enable="YES" # Save dmesg(8) to /var/run/dmesg.boot
watchdogd_enable="NO" # Start the software watchdog daemon
watchdogd_flags="" # Flags to watchdogd (if enabled)

View file

@ -49,7 +49,6 @@ CONFS= DAEMON \
local \
localpkg \
lockd \
machine_id \
mixer \
motd \
mountcritlocal \

View file

@ -15,20 +15,32 @@ start_cmd="hostid_save"
stop_cmd=":"
rcvar="hostid_enable"
hostid_machine_id()
{
local IFS
IFS=-
set -- ${current_hostid}
IFS=
current_machine_id=$*
}
hostid_save()
{
current_hostid=`$SYSCTL_N kern.hostuuid`
if [ -r ${hostid_file} ]; then
read saved_hostid < ${hostid_file}
if [ ${saved_hostid} = ${current_hostid} ]; then
exit 0
fi
read saved_hostid 2>/dev/null < ${hostid_file}
if [ "${saved_hostid}" != "${current_hostid}" ]; then
echo "${current_hostid}" > ${hostid_file} ||
warn "could not store hostuuid in ${hostid_file}."
fi
echo ${current_hostid} > ${hostid_file}
if [ $? -ne 0 ]; then
warn "could not store hostuuid in ${hostid_file}."
hostid_machine_id
read saved_machine_id 2>/dev/null < ${machine_id_file}
if [ "${saved_machine_id}" != "${current_machine_id}" ]; then
echo "${current_machine_id}" > ${machine_id_file} ||
warn "could not store hostuuid in ${machine_id_file}."
fi
}

View file

@ -1,34 +0,0 @@
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: machine_id
# REQUIRE: mountcritremote FILESYSTEMS
# BEFORE: LOGIN
. /etc/rc.subr
: ${machine_id_file:=/var/db/machine-id}
: ${machine_id_perms:=444}
name="machine_id"
desc="Update ${machine_id_file}"
rcvar="machine_id_enable"
start_cmd="machine_id_start"
stop_cmd=":"
machine_id_start()
{
if [ ! -f ${machine_id_file} ] ; then
startmsg -n "Creating ${machine_id_file} "
t=$(mktemp -t machine-id)
/bin/uuidgen -r -c -o $t
install -C -o root -g wheel -m ${machine_id_perms} "$t" "${machine_id_file}"
rm -f "$t"
startmsg 'done.'
fi
}
load_rc_config $name
run_rc_command "$1"

View file

@ -76,7 +76,7 @@
* cannot include sys/param.h and should only be updated here.
*/
#undef __FreeBSD_version
#define __FreeBSD_version 1400081
#define __FreeBSD_version 1400082
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,