Назад | Перейти на главную страницу

Как OpenVZ узнает о дистрибутиве VE

С OpenVZ вы назначаете имя хоста VE (среди прочего) от хост-узла (HN), используя 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 использовать? Он каким-то образом выводит имя дистрибутива из имени шаблона?

Посмотрев на исходники 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.