preseeding locales in debian

2

Estou tentando usar o debconf para pré-configurar os valores para o pacote locales no Debian squeeze, para que eu possa reconfigurá-lo de forma não interativa para, por exemplo, gerar todos os códigos do idioma. Eu extraio a seleção certa de um sistema de trabalho usando debconf-get-selections e, em seguida, os alimente para debconf-set-selections no novo sistema.

Ele está trabalhando para outros pacotes, por exemplo, sun-java6-bin , não exatamente para locales . Eu sou capaz de definir os valores com debconf-set-selections , mas se eu reconfigurar locales com dpkg-reconfigure (ou reinstalá-lo com, por exemplo, apt-get install --reinstall locales , para esse assunto), os valores são redefinidos e os novos locales não são gerado.

Os sintomas são exatamente os mesmos que no erro debian # 592216 , mas esse bug é oficialmente resolvido na versão 2.9-13 do pacote. Squeeze tem 2.11.3-4, então o bug ainda está lá, ou estou fazendo algo errado.

Alguém já experimentou a mesma coisa?

Obrigado antecipadamente

- M

    
por bronto 08.01.2013 / 16:33

2 respostas

1

Sim, experimentei o mesmo problema e, depois de lutar por algum tempo, encontrei uma solução alternativa que usa /etc/locale.gen .

Publiquei um módulo de fantoches para configurar as localidades que normalmente usamos em nossos servidores, ou seja, apenas en_US.UTF-8 :

link

Aqui está, sublinhado:

class locales {

  package { "locales": 
    ensure => "latest",
  }

  file { "/etc/locale.gen":
    source => [
      "puppet:///locales/locale.gen.$fqdn",
      "puppet:///locales/locale.gen"
    ],
    owner => "root",
    group => "root",
    mode => 644,
    require => Package["locales"],
  }

  exec { "/usr/sbin/locale-gen":
    subscribe => File["/etc/locale.gen"],
    refreshonly => true,
    require => [ Package["locales"], File["/etc/locale.gen"] ]
  }

}

Mesmo que você não use fantoches ;-), você pode entender facilmente o que está acontecendo. Você acabou de criar o arquivo /etc/locale.gen com a lista de localidades que deseja gerar e, em seguida, executar o /usr/sbin/locale-gen .

Aqui está o arquivo da lista que eu uso como /etc/locale.gen :

# This file lists locales that you wish to have built. You can find a list
# of valid supported locales at /usr/share/i18n/SUPPORTED, and you can add
# user defined locales to /usr/local/share/i18n/SUPPORTED. If you change
# this file, you need to rerun locale-gen.

en_US.UTF-8 UTF-8
    
por 08.01.2013 / 19:50
1

Consegui criar uma política cfengine3 semelhante ao manifesto do @ cosimo e parece funcionar. Eu estou bem com isso, mas eu ainda acredito que o bug # 592216 não está resolvido ainda, então eu posso enviar outro para o Debian.

Minha implementação de cfengine aproveita o fato de que /etc/locale.gen parece conter todas as localidades possíveis, mas comentou.

Em vez de reescrever o arquivo desde o início e, possivelmente, introduzir erros, peço ao cfengine para remover o comentário das localidades que desejo gerar. Se a localidade não estiver lá, seja porque não é suportada ou se digitada incorretamente, nada acontece. Essa abordagem também simplifica as coisas, já que não é necessário escrever o código de idioma e o conjunto de caracteres: basta escrever o código do idioma e deixar o cfengine descomentar todos os conjuntos de caracteres relacionados para esse código de idioma.

'nuff disse:

body common control
{
      inputs => { "cfengine_stdlib.cf" } ;
      bundlesequence => {"test"} ;
}

bundle agent test
{
  vars:
      "locales"
    slist => { "da_DK.UTF-8", "de_DE.UTF-8", "en_US.UTF-8",
           "es_ES.UTF-8", "fr_FR.UTF-8", "it_IT.UTF-8",
           "nl_NL.UTF-8", "ru_RU.UTF-8", "sv_SE.UTF-8",
           "tr_TR.UTF-8", "id_ID.UTF-8", "nb_NO.UTF-8",
           "pl_PL.UTF-8", "vi_VN.TCVN"  },
    comment => "locales to generate" ;

  files:
      "/etc/locale.gen"
    edit_line => enable_locales(@(test.locales)),
    classes   => if_repaired("regenerate_locales"),
    comment   => "Enable locales, trigger locale-gen if needed" ;

  commands:
    regenerate_locales::
      "/usr/sbin/locale-gen"
    comment => "Regenerate locales when needed" ;

  reports:
    regenerate_locales::
      "Locales regenerated" ;
}


bundle edit_line enable_locales(locales)
{
  replace_patterns:
      "^#\s+($(locales).*)$"
    replace_with => uncomment ;
}
    
por 09.01.2013 / 12:54