Linode Lish bash警告:setlocale: LC_ALL:无法更改语言环境(en_US.UTF-8)

29

参照Linode的教程通过SSH复制磁盘

ssh root@xx.xx.xxx.xx "dd if=/dev/sdX " | dd of=/PathToLocalLocation/server.img

其中 xx.xx.xxx.xx 是你的服务器 IP,sdX - X 代表你的驱动器分配的字母,同时你必须说明 image 的名称 = server.img

我在本地电脑上遇到了这个问题:

bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

我进行了漫长的搜索,但没有任何结果适用于Lish,也不是完整的解决方案。

无论我做什么,都无法在Lish命令行上设置locales... 所有答案都是关于本地或服务器上的命令行,而不是关于Rescue模式... 有什么想法吗?


1
尝试使用LC_ALL=C,它应该在任何地方都有效。它有效地禁用了任何Unicode支持和各种其他区域设置依赖行为,但对于这个特定的用例来说,时光倒流回到上个千年可能是可以接受的。 - tripleee
无法工作...得到了相同的错误 bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) - Jadeye
然后更改没有生效。您需要确保在运行命令的 shell 中设置并导出变量。从您的问题中无法确定错误是本地还是远程的,但是 ssh 通常被配置为将本地语言环境设置传输到远程端。 - tripleee
问题出在远程服务器上,因为Lish挂载了基于Finnix的救援分区,并且没有安装语言环境,因此通过ssh发送LC_ALL=C也无法解决。这个修复方法来自于linode指南,可以解决这个问题。 - Jadeye
5个回答

42

在尝试了不同的答案后,我想出了这个解决方法(在服务器进入rescue-mode时使用Lish):

echo "LC_ALL=en_US.UTF-8" >> /etc/environment
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
locale-gen en_US.UTF-8

上一个命令的执行结果如下所示:

locale-gen: 命令未找到

以下是你需要进行的操作(仍在Lish终端):

apt-get clean && apt-get update
apt-get install locales
locale-gen en_US.UTF-8
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete

一切就绪,复制服务器磁盘到本地机器。


1
对于我的情况,我需要执行 "sudo locale-gen en_US.UTF-8"。 - oraclesoon
在Debian 11上,尝试以root身份运行。 - undefined
我也在使用Debian。但是似乎locale -a命令返回的是小写的en_US utf-8(所以不是UTF-8而是utf-8)。我在/etc/locale.conf文件中手动更改了这个设置。并且导出了:export LC_ALL="en_US.utf-8"。现在最终dpkg-reconfigure locales成功了。 - undefined

30

对于任何在Debian11上遇到此问题的人 - 但早期版本也应该适用 - 以及类似的发行版,例如Ubuntu。该错误表明您的本地化设置未生成。

解决方法:

 sudo dpkg-reconfigure locales

选择所需的语言环境 - 或全部选择。 接下来,您将被要求是否希望设置默认系统语言环境。 选择所需选项 - 例如en_US.UTF-8,并使用TAB键到OK并按Enter键。

全部完成。


1
在Ubuntu 22.04上运行良好。 - glenn jackman
2
由于某些原因,树莓派OS Lite安装会导致相同的错误;如此处建议的那样成功修复(无需添加到/etc/文件中)。 - avarvit
这个方案和@Jadeye的答案结合使用,在基于Debian 11的OpenMediaVault 6.0.24上运行良好。 - RichVel
1
只需在WSL2 Windows上工作。 - CircleOnCircles

5

为了解决此警告,请遵循以下步骤:

使用您首选的编辑器打开etc文件夹中的环境文件。

vi /etc/environment

按下 i 键进入编辑模式,将以下行添加到文件中。

LANG=en_US.utf-8
LC_ALL=en_US.utf-8

按下 Esc 键并输入 :wq 来 "写入/保存" 文件并退出编辑器。 运行 source /etc/environment

现在警告已修复,应该从终端中消失了。


2

你可能没有安装某个包。在一些 Docker 容器中,这个包可能会缺失。至少,这是我遇到的一个问题。

glibc-langpack-en

1

我不是100%确定,但你可能只是在本地计算机上缺少en_US.UTF-8语言环境,你可以尝试使用sudo locale-gen en_US.UTF-8(在本地计算机上)生成它。


1
在我的chroot环境中确实是这种情况。locale -a只显示了C和POSIX。我已经取消了/etc/locale.gen中的en_US.UTF-8 UTF-8的注释,并运行了locale-gen。现在locale -a也显示了en_US.utf8。谢谢你的回答! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接