症状
在CentOS、RockyLinux等RHEL系Linux系统中使用yum
或dnf
命令进行包管理时,出现以下提示:
Failed to set locale, defaulting to C.UTF-8
软件包的安装升级等操作可以正常进行。
原因及解决
该问题是系统无法调用“en_US.UTF8”语言包导致的。用locale -a
命令查看系统已安装的语言包。如果没有“en_US.UTF8”则需要额外安装。(语言包缺失有可能因为安装系统时语言选择了中文导致的。笔者的列表中有一串“zh_”开头的语言包)
用以下命令安装需要的语言包(这里以dnf
安装为例):
dnf install glibc-langpack-en
安装完成后再次用locale -a
查看列表,“en_US.UTF8”出现在了列表中,包管理时的提示也不会再出现了。
后话
该语言包缺失一般影响不大,但偶尔会出现意想不到的问题,比如新版的ansible会无法运行,出现内容为“ERROR: Ansible requires the locale encoding to be UTF-8”的错误提示。
至于网上常见的方法:
echo "export LC_ALL=en_US.UTF-8" >> /etc/profile
source /etc/profile
生效的前提是语言包本身存在。因此还是得先安装了语言包才行。笔者亲测,语言包安装完毕后并不需要执行此命令。