diff options
author | Tijl Coosemans <tijl@FreeBSD.org> | 2023-02-15 20:09:51 +0000 |
---|---|---|
committer | Tijl Coosemans <tijl@FreeBSD.org> | 2023-03-12 08:59:58 +0000 |
commit | d6852eed98ed32ad51120a22aa1ebdf0601917b3 (patch) | |
tree | bd6fc61f76005133049bb61ecce7ccffcf204aa5 | |
parent | baf1e9713969fccdaf7481e3568ca89b7237dafd (diff) | |
download | src-d6852eed98ed.tar.gz src-d6852eed98ed.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.inc | 3 | ||||
-rw-r--r-- | etc/Makefile | 2 | ||||
-rw-r--r-- | libexec/rc/rc.conf | 4 | ||||
-rw-r--r-- | libexec/rc/rc.d/Makefile | 1 | ||||
-rwxr-xr-x | libexec/rc/rc.d/hostid_save | 28 | ||||
-rw-r--r-- | libexec/rc/rc.d/machine_id | 34 | ||||
-rw-r--r-- | sys/sys/param.h | 2 |
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, |