在通过 tftp 提供服务的 user_data 自动安装中,主机名字段是必需的。我使用静态映射的 dhcp 条目将机器与主机名、ip 等进行匹配。
如何让自动安装主机名在 pxe 启动时接受来自 dhcp 的值?
谢谢
答案1
我不相信有任何办法下位性使用 DHCP 提供中的主机名。但是,有很多方法early-commands
可以late-commands
用来做你想做的事情。
我建议的解决方案是使用user-data
类似于此代码片段的自动安装文件。它将从 DHCP 租约文件中读取 DHCP 提议中的主机名,并/etc/hostname
在已安装的系统上进行覆盖。
#cloud-config
autoinstall:
# NO identity section
#identity:
user-data:
users:
- name: ubuntu
passwd: REDACTED
shell: /bin/bash
lock-passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users
late-commands:
- |
bash <<'EOF'
source <(cat /run/systemd/netif/leases/* | grep ^HOSTNAME=)
[[ -n "${HOSTNAME}" ]] && echo "${HOSTNAME}" > /target/etc/hostname
EOF
true
无论您尝试哪种方法,都需要注意以下一些问题。
autoinstall
identity
和部分user-data
不能很好地共存。我倾向于使用user-data
部分而不包含identity
部分。由于配置主机名的唯一方法是 部分,因此identity
必须使用另一种方法来配置主机名(例如late-commands
)。- 如果没有
identity
部分,则下位性改变行为。生成的云初始化配置(在 中/target/etc/cloud/cloud.cfg.d/99-installer.cfg
)会有所不同。不会/target/etc/hosts
生成任何内容,文件将留空。可能还有其他差异。 - 相反,如果有一个
identity
部分,那么提供的hostname
将在多个文件中进行配置。在/target/etc/hosts
并可能在其他文件中。
也可以看看
- Cloud-config-auto 安装(后期命令随机主机名 + 网络配置)
- 如何在 Autoinstall / Cloud-Init 中运行复杂的管道命令?
- Ubuntu Server 20.04 cloud-config 添加用户不执行任何操作
笔记
- 我使用 Ubuntu 22.04 (
subiquity 22.04.2
) 进行了测试。