Предпосевные локали в 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
(в этом отношении), значения сбрасываются, а новые локали не генерируются.
Симптомы точно такие же, как в ошибке #592216 в Debian, но эта ошибка официально устранена в версии 2.9-13 пакета. У Squeeze 2.11.3-4, так что либо ошибка все еще есть, либо я делаю что-то не так.
Кто-нибудь испытывал то же самое?
заранее спасибо
- М
2 ответа
Мне удалось создать политику 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
,
Я опубликовал модуль puppet для настройки локалей, которые мы обычно используем на наших серверах, то есть только 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