使用 OpenVZ,您可以使用 从主机节点 (HN) 分配 VE 的主机名(以及其他内容)vzctl set CTID --hostname myhost --save
。然后将其设置在 中/etc/vz/conf/CTID.conf
。在 VE 启动期间,/etc/vz/dists
将查阅 中的发行版特定文件,其中包含指向 中的文件的指针/etc/vz/dists/scripts
。这些是用于编辑 VE 配置文件的发行版特定脚本,例如,如果 VE 使用 Debian 或 Ubuntu,则主机名将写入/etc/hostname
。例如,IP 地址也是如此。
我现在的问题是:OpenVZ 如何知道/etc/vz/dists
要使用哪个文件?它是否以某种方式从模板名称中得出发行版名称?
答案1
查看 vzctl 的源代码后,我搞清楚了它的工作原理。它实际上是从模板名称中派生出名称的。启动 VE 时,某个时候会调用一个方法lib/dist.c
:
static int get_dist_conf_name(char *dist_name, char *dir, char *file, int len)
{
char buf[256];
char *ep;
if (dist_name != NULL) {
snprintf(buf, sizeof(buf), "%s", dist_name);
ep = buf + strlen(buf);
do {
snprintf(file, len, "%s/%s.conf", dir, buf);
if (stat_file(file))
return 0;
while (ep > buf && *ep != '-') --ep;
*ep = 0;
} while (ep > buf);
[...]
}
每次查找匹配项时,它都会从名称末尾删除破折号分隔的部分。我查看的模板是arch-2010.05-x86_64-minimal
,因此它首先尝试arch-2010.05-x86_64-minimal.conf
,然后arch-2010.05-x86_64.conf
,然后arch-2010.05.conf
,直到最终找到一个名为的文件arch.conf
,其中包含用于更新 Arch 配置文件的脚本的指针。