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

предварительная установка локалей в debian

Я пытаюсь использовать debconf для предварительной установки значений для locales пакет в Debian squeeze, чтобы я мог перенастроить его в неинтерактивном режиме, например, для генерации всех локалей. Я извлекаю правильный выбор из рабочей системы, используя debconf-get-selections, а затем скормить им debconf-set-selections по новой системе.

Он работает для других пакетов, например. sun-java6-bin, не совсем для locales. Я могу установить значения с помощью debconf-set-selections, но если я перенастрою locales с участием dpkg-reconfigure (или переустановите его, например, apt-get install --reinstall locales, если на то пошло), значения сбрасываются, а новые языковые стандарты не создаются.

Симптомы точно такие же, как у ошибка debian # 592216, но эта ошибка официально исправлена ​​в версии 2.9-13 пакета. Squeeze имеет 2.11.3-4, так что либо ошибка все еще существует, либо я что-то делаю не так.

Кто-нибудь испытал то же самое?

заранее спасибо

- М

Мне удалось создать политику cfengine3, похожую на манифест @cosimo, и, похоже, она работает. Меня это устраивает, но я по-прежнему считаю, что ошибка № 592216 еще не решена, поэтому я могу передать еще одну в Debian.

Моя реализация cfengine использует тот факт, что /etc/locale.gen кажется, содержит все возможные локали, но закомментированы.

Вместо того, чтобы переписывать файл с нуля и, возможно, вносить ошибки, я прошу cfengine раскомментировать локали, которые я хочу создать. Если языковой стандарт отсутствует, потому что он не поддерживается или я написал его неправильно, ничего не происходит. Этот подход также упрощает ситуацию, поскольку нет необходимости писать обе локаль и кодировка: вы можете просто написать языковой стандарт и позволить cfengine раскомментировать все связанные кодировки для этого языкового стандарта.

'достаточно:

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 ;
}

Да, у меня возникла та же проблема, и после некоторой борьбы с ней я нашел обходной путь, который использует /etc/locale.gen.

Я опубликовал марионеточный модуль для настройки локалей, которые мы обычно используем на наших серверах, то есть только en_US.UTF-8:

https://github.com/cosimo/puppet-modules/blob/master/locales/manifests/init.pp

Вот он, встроенный:

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"] ]
  }

}

Даже если вы не используете марионетку ;-), вы легко поймете, что происходит. Вы просто создаете /etc/locale.gen файл со списком локалей, которые вы хотите создать, а затем запустите /usr/sbin/locale-gen.

Вот файл списка, который я использую как /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