OLVMとen_US.UTF-8

みなさん、こんにちは！
今回は番外編として、OLVMをスタンドアロン方式でインストールする際に必要となるen_US.UTF-8について、詳しく記載いたします。
第1回：[Oracle KVMとOLVMについて](https://qiita.com/ReQ_HY/items/bc6cb0d909bfa0fcdae6)
第2回：[Oracle KVM 要件と構築について](https://qiita.com/ReQ_HY/items/b7f8ea4fde65f4dc7a34)
第3回：[OLVM構築 - セルフホステッドエンジン方式](https://qiita.com/ReQ_HY/items/82ad79dc48c7253c53fa)
第4回：[OLVM構築 - スタンドアロン方式](https://qiita.com/ReQ_HY/items/ebba85d163a5dba62790)
※まだご覧になられていない場合、ぜひご覧ください！

## 環境
今回説明するにあたり使用したOSやOLVM(ovirt)のバージョンを以下に示します。
| 製品 | バージョン |
|:-|:-|
| Oracle Linux(KVM,OLVM共通)  | 8.8  |
|  Oracle Linux Virtulaization Manager/ovirt | 4.4.10.7-1.0.25.el8  |

## 概要
今回の記事の内容をざっくり説明すると、以下の4点となります。
1. **en_US.UTF-8** はどこで使われるのか
2. セルフホステッドエンジン方式とスタンドアロン方式では何が違うのか
3. OLVM(WebUI)で表示される言語はどうなるのか
4. OLVMインストール以外でも何か使用されたり設定が必要なのか

### 1.en_US.UTF-8はどこで使われるのか
前回の[OLVM構築 - スタンドアロン方式]()でも記載させて頂きましたが、
OLVM用のOSに **en_US.UTF-8** が存在していないと、OLVMインストール時に以下の様なエラーが出力されて失敗してしまいます。
```ruby:qiita.rb
..
..
[ INFO ] Creating PostgreSQL 'engine' database
[ ERROR ] Failed to execute stage 'Misc configuration': ロケール名"en_US.UTF-8"は不正です
..
..
```
"<font color="red">**システムにen_US.UTF-8が認識できない、存在していない**</font>"というエラー内容となっています。
上記を踏まえて **en_US.UTF-8** はOLVMインストールを行う時に何に使用されているのか、またOracle公式に記載されているのか等を説明いたします。

まず初めに、 **en_US.UTF-8** の要件についてはOracle公式の要件一覧には<font color="red">**記載されていません**</font>。
ただし、OLVMの元となっているovirtインストールガイドには以下の様に記載があります。
[Installing oVirt as a standalone Manager with local databases](https://www.ovirt.org/documentation/installing_ovirt_as_a_standalone_manager_with_local_databases/index.html)
〇 **Appendix A: Preparing a Local Manually Configured PostgreSQL Database** 
engine-setupおよびengine-backup --mode=restoreコマンドは、システムロケールが異なる場合でも、en_US.UTF8ロケールでのシステムエラーメッセージのみをサポートします。

そして、OLVMインストール時にどこで使用されているかというと、oVirtインストールドキュメント内の手順にも記載されているように **Postgresqlデータベース"engine"を作成** する際に **en_US.UTF-8** が使用されています。
具体的には以下の様なコマンドでOLVMインストール時にDBを作成します。

（コマンド例）
```ruby:qiita.rb
postgres=# create database database_name owner user_name template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';
```
その為、OLVMインストール時に **en_US.UTF-8** が必要となっています。

### 2.セルフホステッドエンジン方式とスタンドアロン方式の違い
次にOLVM構築方式の違いでどのように変わるのかについて説明をいたします。

 **・セルフホステッドエンジン：仮想マシンとしてデプロイ** 
 **・スタンドアロン：OSをインストール後に、OLVMをOSへインストール** 

OLVM構築という点で両者では上記の様な違いがあります。

スタンドアロン方式では、日本ではOSインストール時において言語を日本語でインストールすることが多いかと思います。
その場合、OSロケールが **LANG=ja_JP.UTF-8** として設定されるため追加で **en_US.UTF-8** が必要となってしまいます。

言語を英語でインストールした場合は **en_US.UTF-8** がインストールされて且つOSロケールへ設定されるため
言語パッケージのインストールは不要となります。

セルフホステッドエンジン方式ではどうなっているのかというと、OSロケールは **en_US.UTF-8** で設定されてデプロイされ、データベースも構築されるため、仮想基盤となるOracle KVMでの設定は不要となっています。

最後にそれぞれのPostgresqlデータベースを以下に示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/e177450d-82eb-bcfd-f678-beb1716eb539.png)

### 3.OLVM(WebUI)での表示言語
OSロケールやDBを **en_US.UTF-8** にしてしまった時、OLVM(WebUI)の言語はどうなるのかが気になってしまう所かと思います。

結論、WebUIの表示言語については<font color="red">**全く関係ありません。**</font>

Oracle公式サイトには以下の記載があります。
[3.インストールおよび構成 - 管理ポータルへのログイン - ログイン](https://docs.oracle.com/cd/F30061_01/getstart/getstarted-manager-install.html#loggingIn.d12e3086)
管理ポータル(WebUI)は、複数の言語で表示できます。 デフォルトの言語は、Webブラウザのロケールに基づきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956386/5062a6e5-e0c1-04ed-b1a0-4f1e56843989.png)

### 4.その他追加設定の要否
<font color="red">**結論、設定が必要となる項目があります。**</font>

先程記載させて頂いた、ovirt側のインストールサマリの注意事項となります。

 **・engine-setup** および **engine-backup --mode=restore** コマンドは、システムロケールが異なる場合でも、 **en_US.UTF8** ロケールでのシステムエラーメッセージのみをサポートします。
・postgresql.confファイルのロケール設定はen_US.UTF8に設定されていなければなりません。

OLVMインストール以外にもOLVMのリストアを行う場合にpostgresql.confで **en_US.UTF-8** が設定されている必要があります。
※OLVMのリストアについての詳細は記載いたしません。

設定されていないと以下の様にOLVMリストアを行う際にエラーとなります。
```ruby:qiita.rb
FATAL : lc_messages is set to an unsupported value in postgresql.conf. Please set it to en_US.UTF-8 and restart postgresql.
```
上記は **lc_messagesをen_US.UTF-8で設定してpostgresqlを再起動** してくださいというエラー内容となります。

具体的に修正すべき設定ファイルおよび設定項目を以下に示します。
[ファイル]
/var/lib/pgsql/data/postgresql.conf
[項目]
lc_messages = 'en_US.UTF-8'

PostgreSQLの設定項目についての詳細は以下をご確認ください。
[PostgreSQL 15.4文書 - 24.1. ロケールのサポート](https://www.postgresql.jp/document/15/html/locale.html)

## 最後に
OLVMと **en_US.UTF-8** の関係性については以上となります。
弊社では日頃よりOracle KVMやOLVMの検証を自社環境で行っており、その経験を活かしてお客様へのOracle KVM、OLVMの導入を対応させて頂いております。
なにかお困りごとがあれば、ぜひお気軽にご相談ください！