Como o OpenVZ conhece a distribuição de um VE?

1

Com o OpenVZ, você atribui o nome do host do VE (entre outras coisas) a partir do nó do host (HN) usando vzctl set CTID --hostname myhost --save . Em seguida, define isso em /etc/vz/conf/CTID.conf . Durante a inicialização do VE, um arquivo específico da distribuição em /etc/vz/dists é consultado contendo ponteiros para arquivos em /etc/vz/dists/scripts . Esses scripts são específicos da distribuição para editar os arquivos de configuração do VE, por exemplo, se o VE usar o Debian ou o Ubuntu, o nome do host é gravado em /etc/hostname . O mesmo acontece com o endereço IP, por exemplo.

Minha pergunta agora é: Como o OpenVZ sabe qual arquivo em /etc/vz/dists usar? De alguma forma, deriva o nome da distribuição a partir do nome do modelo?

    
por ahans 05.11.2011 / 23:31

1 resposta

2

Olhando para a origem do vzctl, descobri como isso funciona. Na verdade, ele deriva o nome do nome do modelo. Ao iniciar o VE, em algum momento, um método em lib/dist.c é chamado:

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);
      [...]
}

Lá, ele remove as partes delimitadas pelo traço do final do nome, sempre procurando uma correspondência. O modelo que eu estava olhando é arch-2010.05-x86_64-minimal , então aqui ele tenta primeiro arch-2010.05-x86_64-minimal.conf , então arch-2010.05-x86_64.conf , então arch-2010.05.conf , até finalmente encontrar um arquivo chamado arch.conf contendo os ponteiros dos scripts para atualizar a configuração do Arch arquivos.

    
por 06.11.2011 / 12:20