OpenVZ 如何知道 VE 的发行版

OpenVZ 如何知道 VE 的发行版

使用 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 配置文件的脚本的指针。

相关内容