Linux:在系统上设置主机 ID?

Ste*_*ski 7 linux

我有一个许可证服务器。硬件出现故障。

许可证软件取决于由 返回的系统的“hostid” /usr/bin/hostid。hostid 是唯一的“当前主机的数字标识符”。

如果我将软件迁移到另一台主机,“hostid”似乎会改变并且许可软件将失败。请注意,此系统的主机名和 IP 地址将保持不变。

两个问题:

  1. hostid 是如何确定的?它是随机的,是否取决于主机名或 MAC 地址等?

  2. 我可以在新系统上设置 hostid 使其与旧系统的 hostid 匹配吗?

Mat*_*Ife 8

假设您在这里指的是传统的 unix hostid。如果我想将软件绑定到系统,我会使用加密狗或一些更强大的方法来识别被视为主机 ID 的系统是非常随意的,但是..

使用库调用“gethostid”检索hostid。它只是一个通用值,如果未设置,它将基于主机系统的 ipv4 地址。

参见“man 2 gethostid”

在 glibc 实现中,如果 gethostid() 无法打开包含主机 ID 的文件,则它使用 gethostname(2) 获取主机名,将该主机名传递给 gethostbyname_r(3) 以获得主机的 IPv4 地址,并返回一个值通过位处理 IPv4 地址获得。(此值可能不是唯一的。)

您可以通过将文件 /etc/hostid 放入您想要的值(大概与捐赠箱上的“hostid”程序中的内容相同),自己将其设置为您想要的任何内容。

但是要设置它有点技巧......该文件需要hostid的打包二进制表示。

我使用了 python,但你可以做任何事情..(很确定有人知道打印压缩字节的更简单方法)。

from struct import pack
f = open('/etc/hostid', 'w')
f.write(pack('i', 12345))
f.close()
Run Code Online (Sandbox Code Playgroud)

这将以一种方式设置 hostid,gethostid 将返回与捐赠箱和迁移箱相同的值。