【发布时间】:2012-04-26 12:31:34
【问题描述】:
在GNU/Linux 中为i386 架构获取唯一机器ID 的最佳实践方法是什么?
除了mac地址还有什么好办法吗?
【问题讨论】:
标签: linux unique gnu uniqueidentifier
在GNU/Linux 中为i386 架构获取唯一机器ID 的最佳实践方法是什么?
除了mac地址还有什么好办法吗?
【问题讨论】:
标签: linux unique gnu uniqueidentifier
根据您的内核,DMI 信息可以通过 sysfs 获得。 试试这些:
# cat /sys/class/dmi/id/board_serial
xxxxxxxxxxxxxxx
# cat /sys/class/dmi/id/product_uuid
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
或使用工具
# dmidecode -s baseboard-serial-number
...
# dmidecode -s system-uuid
...
【讨论】:
/sys/class/dmi/id/board_serial 的可用性时,我发现0pointer.de/blog/projects/ids.html
/var/lib/dbus/machine-id。
/sys/class/dmi/id/product_uuid 这样的东西。
在具有 systemd 的现代机器上:机器 ID 由 systemd-machine-id-setup 创建。机器 ID 的位置记录在 freedesktop machine-id 和 man machine-id 中,机器 ID 具有更标准化的格式 - see RFC4122。只是:
cat /etc/machine-id
【讨论】:
您可以使用 lshal。这需要先安装 hal(apt-get install hal 或 yum install hal)。这样你就可以在没有root权限的情况下访问dmidecode的所有信息。
非根等效于
# dmidecode | grep -i uuid
将会
$ lshal |grep -i system.hardware.uuid
以及根据您的需要提供的类似信息。
【讨论】:
lshal在所述系统上可用,这意味着安装了hal,这意味着安装了dbus。因此它只是cat /var/lib/dbus/machine-id
计算您自己的 sysid 的一种简单且可移植的方法可能是将 uname()、gethostid() 和一些 inode (如 /home 或您的应用程序 homedir(通过 stat() 获得)等)序列化为字符串并对其进行哈希处理。
【讨论】: