灵感来自“费BSD KDE。无法启动 d-bus。你可以调用qdbus吗?”:
我正在使用 FreeBSD/TrueOS/DragonFly BSD,并且有一些来自 Ports 的软件,在运行时抱怨/etc/machine-id
文件丢失。我在 中没有看到任何此类文件/etc
。
这个文件是什么?我应该拥有它吗?如果可以的话我该怎么做?
答案1
该/etc/machine-id
文件不是任何 BSD 的标准部分。这是一种 systemd 主义,已经开始渗透到 Ports 中的软件中。通常,缺少此文件是良性的,因为(到目前为止)仍然存在大多数此类软件所依赖的较旧的非 systemd 特定机制。
软件在这里寻找机器ID,一个 128 位数字,唯一标识此操作系统的安装,在系统重新启动时保持一致,并且(大部分)独立于硬件更改。
D-Bus 就是此类软件之一。它也有一个概念机器ID。从历史上看,在 FreeBSD/TrueOS/DragonFly BSD 上,这已在/var/db/dbus/machine-id
文件中找到。虽然 D-Bus 近年来已根据/etc/machine-id
偏好进行了更改,但它应该还是返回查看旧文件。
操作系统不会附带或创建这样的开箱即用的文件。但你当然可以制作一个。
- 获取并安装诺什工具集并
setup-machine-id
以超级用户身份运行该工具。如果可以的话,这将使/etc/machine-id
从 D-Bus 文件中读取现有 ID。 (使用工具包 1.36 或更高版本以避免此处出现错误。)您不需要在每次引导程序时都运行此文件,因为一旦创建,该
/etc/machine-id
文件就在系统的整个生命周期中一直保留在那里;但是如果你将它连接到系统引导程序中,它还将确保你有一个/run/machine-id
文件和一个kern.hostuuid
内核变量都包含相同的 ID。它还使用/更新/etc/hostid
. - 将 D-Bus 文件移至 systemd 位置,然后将前者符号链接到后者:
mv -i /var/db/dbus/机器 ID /etc/ && ln -s /etc/机器 ID /var/db/dbus/
请注意,在另一个方向上创建符号链接会破坏任何在安装/etc/machine-id
之前期望可用的软件。/var
同样,这些是该文件的 systemd 语义,您可能会发现它们已渗透到 Ports 中的软件中。 uuidgen
只需使用类似(您必须处理其输出)或 之类的东西生成的新机器 ID 手工制作一个dbus-uuidgen
。如果您已经安装了 D-Bus,并且存在 D-Bus 机器 ID 文件,那么这是一种较差的方法,因为它将导致(首先)在 systemd 位置查找的软件看到与(首先)的软件不同的机器 ID查看 D-Bus 位置。
是的,严格来说这应该/usr/local/etc/machine-id
符合 BSD 约定,但请记住,我们正在谈论的是正在查看的软件/etc/machine-id
首先因为它们错误地特定于 systemd。它们也不会被修补以查看该文件的非 systemd 位置。
进一步阅读
- 伦纳特·珀特林等人
machine-id
。 systemd 手册页。 Freedesktop.org。 - 乔纳森·德博因·波拉德 (2019)。
machine-id
。 小吃指南。 JdeBP 的软件。 - 乔纳森·德博因·波拉德 (2017)。
/etc/machine-id
。地名词典。 小吃指南。 JdeBP 的软件。 - https://unix.stackexchange.com/a/395460/5132
答案2
在 FreeBDS 12 上没有nosh
软件包。相反,只需运行dbus-uuidgen --ensure
并复制生成的 id: cp /var/lib/dbus/machine-id /etc/machine-id
。然后startkde
启动等离子kde。