主启动映像,但使用不同的主机名

问题描述

我有大量的设备可以从TFTP服务器启动,并将它们的文件系统挂载为只读NFS共享。所有这些设备都从相同的自定义raspbian映像启动,这为我们节省了很多空间,因为我们不必为每个设备存储一个映像。

为帮助管理这些设备,我们尝试使用ddns,以便我们可以通过其主机名查找设备。问题在于从/ etc / hostname中读取了主机名,并且由于所有设备共享其映像,因此它们都具有相同的主机名。

我尝试通过从/ proc / cpu_info中读取序列号在启动时手动更改此设置:

  • 服务和init.d脚本都在网络启动之前启动,该脚本手动编辑/ etc / hostname。由于文件是只读的,因此无法正常工作。
  • 将/ etc / hostname文件符号链接到ramdisk,以便其可写。由于某些原因,软符号链接不起作用,并且无法在两个不同的分区之间建立硬链接
  • 编辑systemd-hostname的二进制文件,使其指向其他文件。这导致启动时崩溃。

我希望有一种方法可以在这样的只读系统上设置主机名,但是如果没有,我很乐意听到ddns和主机名的替代名称

解决方法

我将其添加到我的/etc/rc.local文件的底部,然后退出0:

var=` cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2 | cut -c 9-`
hostname $var
dhclient

第一行获取设备的序列号并将其存储在变量中。下一行使用该变量并设置主机名。第三行强制设备重新获取其IP地址,从而使用新的主机名更新DHCP服务器。

不太理想,因为设备抱怨无法解析其主机名,因为/ etc / hosts文件中的内容与上面设置的主机名不同。但目前看来运行良好。

重要更新

稍后再进行讨论以提出一些发现,出于某些原因,调用dhclient有时可能会破坏正在进行的NFS挂载。

实际的解决方案是创建一个在调用主机名命令的网络服务之前启动的服务。