我正在尝试使用 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 ;
}