在 Debian 和 Ubuntu 上是否可以限制必须配置的区域设置?
我知道/var/lib/locales/supported.d/local
并/var/lib/locales/supported.d/en
管理正在配置哪些区域设置,但在事后(即在 )后或多或少缺乏手动修改它,apt-get dist-upgrade
我还没有找到任何方法将其限制为en_US.*
所需的区域设置。
因此,每当软件包language-pack-en
被language-pack-en-base
触及时(从我所看到的来看,它们通常会同步更新),我会得到这样的信息:
Setting up language-pack-en (1:14.04+20150219) ...
Setting up language-pack-en-base (1:14.04+20150219) ...
Generating locales...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8... done
en_GB.UTF-8... done
en_HK.UTF-8... done
en_IE.UTF-8... done
en_IN.UTF-8... done
en_NG.UTF-8... done
en_NZ.UTF-8... done
en_PH.UTF-8... done
en_SG.UTF-8... done
en_US.UTF-8... up-to-date
en_ZA.UTF-8... done
en_ZM.UTF-8... done
en_ZW.UTF-8... done
Generation complete.
不幸的是,一些升级似乎覆盖了上述两个文件,从而重置了我对它们所做的修改。
相反,我们想看到的是:
Setting up language-pack-en (1:14.04+20150219) ...
Setting up language-pack-en-base (1:14.04+20150219) ...
Generating locales...
en_US.UTF-8... up-to-date
Generation complete.
我怎样才能做到这一点?
答案1
与 Debian
你可以做:
dpkg-reconfigure -plow locales
使用Ubuntu
Debian 解决方案不适用于 Ubuntu,可能是因为该locales
软件包来自langpack-locales
源而不是glibc
或eglibc
。但您可以选择language-pack-*
安装哪个包。
为了更精细的配置,您可能需要修改/var/lib/locales/supported.d
目录下的文件(例如,/var/lib/locales/supported.d/en
基于en
- 的语言环境);例如,您可以删除与不需要的区域设置相对应的行。然后跑dpkg-reconfigure locales
。警告: 这些文件不是配置文件,这意味着您的更改可能会在dpkg
软件包升级期间被覆盖。您可以通过告诉dpkg
将覆盖转移到不同的文件来避免这种情况:
cp -a /var/lib/locales/supported.d/en /var/lib/locales/en.upstream
dpkg-divert --local --divert /var/lib/locales/en.upstream --add /var/lib/locales/supported.d/en
上面的转移代码故意将转移的文件放在supported.d
目录之外,因为语言环境系统合并了全部目录中的文件supported.d
。
或者,您可以删除language-pack-*
安装不需要的语言环境的软件包,并指定其他语言环境/var/lib/locales/supported.d/local
(使用相同的格式);看到Ubuntu 关于(重新)生成语言环境的帮助了解更多信息。然而,这些language-pack-*
包不仅编译语言环境,还提供翻译,您可能会错过它们。
答案2
添加@vinc17的答案:为了防止dpkg
覆盖对文件的更改/var/lib/locales/supported.d/en
,只需使用dpkg-divert
,例如这样:
cp -a /var/lib/locales/supported.d/en /var/lib/locales/en.upstream
dpkg-divert --local --divert /var/lib/locales/en.upstream --add /var/lib/locales/supported.d/en
注意:上面的代码故意将转移的文件放在supported.d
目录之外,因为语言环境系统合并了全部目录中的文件supported.d
。
答案3
解决方法。为了防止更改/var/lib/locales/supported.d/
,请使用以下命令在其中设置文件“不可变 (i)” 属性。因此,不要删除文件,而是清空它们。例如(假定 root 权限):
cd /var/lib/locales/supported.d/
rm <code> && touch <code> # <code> has been emptied
lsattr <code> # regular attributes
chattr +i <code> # adding (+) immutable
lsattr <code> # checking attributes
扩展细节这里。