The /etc/machine-id file is not a standard part of any BSD. It is a systemd-ism that has begun to leak into softwares that are in Ports. Usually, the absence of this file is benign, because (so far) there are still older non-systemd-specific mechanisms that most such softwares fall back upon.
Softwares look here for a machine ID, a 128-bit number that uniquely identifies this installation of the operating system, consistently across system restarts and (mostly) independent from hardware changes.
One such software is D-Bus. It too has a notion of a machine ID. Historically, on FreeBSD/TrueOS/DragonFly BSD this has been found in the /var/db/dbus/machine-id file. Whilst D-Bus has in recent years been altered to look at /etc/machine-id for preference, it should still fall back to looking at the older file.
The operating system does not come with or create such a file out of the box. But you can of course make one.
- Obtain the and install the nosh toolset and run the
setup-machine-id tool as the superuser. This will make /etc/machine-id, reading an existing ID out of the D-Bus files if it can. (Use version 1.36 of the toolkit or later to avoid a bug here.)You do not need to run this every bootstrap, as once created the /etc/machine-id file just sits there for the lifetime of your system; but if you wire it into your system bootstrap, it will also ensure that you have a /run/machine-id file and a kern.hostuuid kernel variable all containing this same ID. It also uses/updates /etc/hostid.
- Move the D-Bus file into the systemd location and then symbolically link the former to the latter:
mv -i /var/db/dbus/machine-id /etc/ && ln -s /etc/machine-id /var/db/dbus/
Note that making the symbolic link in the other direction breaks any softwares that expect /etc/machine-id to be usable before /var is mounted. Again, these are systemd semantics for this file that you might find creeping into softwares that are in Ports. - Just make one by hand with a new machine ID generated by something like
uuidgen (whose output you will have to massage) or dbus-uuidgen. If you already have D-Bus installed, and a D-Bus machine ID file present, this is an inferior approach as it will result in softwares that (first) look in the systemd location seeing a different machine ID to softwares that (first) look in the D-Bus location.
Yes, strictly speaking this should be /usr/local/etc/machine-id per BSD conventions, but remember that we are talking about softwares that are looking at /etc/machine-id in the first place because they are erroneously systemd-specific. They will not have been patched to look at a non-systemd location for this file, either.
Further reading