【Ubuntu】localesパッケージのアップグレードでLocaleがおかしくなったので直す。

普段どおり apt upgrade コマンドで locales パッケージをアップグレードしたら、どうもロケール設定がおかしくなってしまった。

ターミナルログインすると、

bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)

「ロケールを en_US.UTF-8 に変更できない」というメッセージが表示されます。なので、

$ localectl list-locales

でインストールされているロケールを確認してみると…

C.UTF-8
ja_JP.UTF-8

…と出力されて、つまり en_US.UTF-8 が無い、ということですね。アップグレード前には確実に存在していたものが無くなっている。

ひとまずパッケージの再設定を試みます。

$ sudo dpkg-reconfigure locales

対話型のダイアログが表示される筈。ここで en_US.UTF-8 にチェックを入れて処理を続行してみると、つらつらとメッセージが表示された後に、

Generating locales (this might take a while)...
(中略)
    en_US.UTF-8.../usr/sbin/locale-gen: line 177: 4781 Killed

…となって、ロケールが生成されません。

うむ、困った。手順自体は間違っていない筈なのに。

散々検索した結果、

locale-gen の line 177 で発生するエラーはメモリ不足が原因。

と解説しているページを発見。

この不具合が生じたうちのマシンも、リンク先で言及されているような、メモリ最小構成の弱小Ubuntuサーバです。メモリ不足が原因であることが濃厚。

ということで、メモリ確保に走ります。一旦止めても大丈夫なサービスを片っ端から止めてみる。

$ sudo systemctl stop xxxxx

それから、再び sudo dpkg-reconfigure locales を実行。

Generating locales (this might take a while)...
(中略)
    en_US.UTF-8... done
(中略)
Generation complete.

無事にロケールの生成に成功。

作業が終わったら、先程止めたサービスを起動するのを忘れずに。

$ sudo systemctl start xxxxx

ということで。

【2022.05.17 追記】

サービスを停止する代わりに、スワップファイルを有効にしてメモリ不足に対処する方法もあります。詳しくはこちら:Vultrの非力なサーバにSwapファイルを設定する。

カテゴリ: