在 Debian 中预先设置区域设置

在 Debian 中预先设置区域设置

我正在尝试使用 debconf 为 Debian squeeze 中的软件包预先设定值locales,以便我可以非交互地重新配置它,例如,生成所有语言环境。我使用 从工作系统中提取正确的选择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,因此要么该错误仍然存​​在,要么我做错了什么。

有谁经历过同样的事情吗?

提前致谢

--M

答案1

是的,我遇到过同样的问题,经过一段时间的努力,我找到了一种使用 的解决方法/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"] ]
  }

}

即使您不使用 puppet ;-),您也可以轻松了解正在发生的事情。您只需创建/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

答案2

我设法创建了类似于 @cosimo 的清单的 cfengine3 策略,它似乎有效。我对此很满意,但我仍然认为错误 #592216 尚未解决,因此我可能会向 Debian 提交另一个错误。

/etc/locale.gen我的 cfengine 实现利用了似乎包含所有可能的语言环境但被注释掉的事实。

我要求 cfengine 取消注释我想要生成的语言环境,而不是从头开始重写文件,这样可能会引入错误。如果语言环境不存在,可能是因为不支持,或者我拼错了,什么也不会发生。这种方法还简化了事情,因为没有必要同时编写语言环境字符集:您只需写下语言环境,然后让 cfengine 取消注释该语言环境的所有相关字符集。

'nuff 说:

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

相关内容