aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTijl Coosemans <tijl@FreeBSD.org>2023-02-15 20:09:51 +0000
committerTijl Coosemans <tijl@FreeBSD.org>2023-03-12 08:59:58 +0000
commitd6852eed98ed32ad51120a22aa1ebdf0601917b3 (patch)
treebd6fc61f76005133049bb61ecce7ccffcf204aa5
parentbaf1e9713969fccdaf7481e3568ca89b7237dafd (diff)
downloadsrc-d6852eed98ed32ad51120a22aa1ebdf0601917b3.tar.gz
src-d6852eed98ed32ad51120a22aa1ebdf0601917b3.zip
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 (cherry picked from commit ecad3f5c4d922f93ceba455f8bff1c54e1ed4174)
-rw-r--r--ObsoleteFiles.inc3
-rw-r--r--etc/Makefile2
-rw-r--r--libexec/rc/rc.conf4
-rw-r--r--libexec/rc/rc.d/Makefile1
-rwxr-xr-xlibexec/rc/rc.d/hostid_save28
-rw-r--r--libexec/rc/rc.d/machine_id34
-rw-r--r--sys/sys/param.h2
7 files changed, 25 insertions, 49 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 37f07a708986..e6b2140af29d 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -52,6 +52,9 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20230308: machine-id merged into hostid_save
+OLD_FILES+=etc/rc.d/machine-id
+
# 20230203: loader help files renamed
OLD_FILES+=boot/loader.help
diff --git a/etc/Makefile b/etc/Makefile
index 49a7a12a41b5..104e40b6e345 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -58,8 +58,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" \
diff --git a/libexec/rc/rc.conf b/libexec/rc/rc.conf
index 23f9406da017..af7b6ff6302e 100644
--- a/libexec/rc/rc.conf
+++ b/libexec/rc/rc.conf
@@ -135,6 +135,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.
@@ -703,9 +704,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)
diff --git a/libexec/rc/rc.d/Makefile b/libexec/rc/rc.d/Makefile
index 188eae2e2f5b..40a1a212ca3a 100644
--- a/libexec/rc/rc.d/Makefile
+++ b/libexec/rc/rc.d/Makefile
@@ -51,7 +51,6 @@ CONFS= DAEMON \
local \
localpkg \
lockd \
- machine_id \
mixer \
motd \
mountcritlocal \
diff --git a/libexec/rc/rc.d/hostid_save b/libexec/rc/rc.d/hostid_save
index f535ea2596f2..f737ed7f74cf 100755
--- a/libexec/rc/rc.d/hostid_save
+++ b/libexec/rc/rc.d/hostid_save
@@ -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
}
diff --git a/libexec/rc/rc.d/machine_id b/libexec/rc/rc.d/machine_id
deleted file mode 100644
index 8bf3e41d0603..000000000000
--- a/libexec/rc/rc.d/machine_id
+++ /dev/null
@@ -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"
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 12a407dd0464..564fbfd9c70d 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -60,7 +60,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1302503 /* Master, propagated to newvers */
+#define __FreeBSD_version 1302504 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,