Techniical-support

CentOS8でMySQL8をインストールすると表示されるValueErrorについて

みなさんこんにちは。
Ryzenの3000番台のXTモデルのベンチが気になる、構築担当の川合です。

今回は、CentOS8系でOS標準のMySQL8をインストールした時に表示されるValueError が気になったので少し調べてみた内容になります。

色々試してみましたが、今のところ解決には至っていません。※バグかもしれませんが、情報が少ないです

概要

dnf コマンドにてMySQL8をインストールすると、表示されるインストール処理で以下のエラー表示が出ます。

ValueError: /var/log/mysql(/.*)? のファイルコンテキストはすでに定義されています

このファイルコンテキストは、selinuxの設定ファイルで定義されています。
※MySQLをインストールする前から定義されている事が確認できました

cat /etc/selinux/targeted/contexts/files/file_contexts |grep "/var/log/mysql"
/var/log/mysql.*        --      system_u:object_r:mysqld_log_t:s0
/var/log/mysql(/.*)?    system_u:object_r:mysqld_log_t:s0

上記のエラーは、以下のコマンドで再現可能です。

semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"

なので、予想としてはパッケージをインストールするときに合わせて上記のコマンドが実行されているものだと思われます。
本来であれば、設定が追加されるだけなのですが既に設定が存在しているためエラーが表示されているものだと推測されます。

色々試してみた

今までこんなエラーは見たことがなかったので、以前の環境はどうだったのか確認してみました。
まずは、CentOS7系でMySQL8系を公式のリポジトリからインストールしてみます。

インストール前

cat /etc/selinux/targeted/contexts/files/file_contexts |grep "/var/log/mysql"
/var/log/mysql.*        --      system_u:object_r:mysqld_log_t:s0

CentOS7系だと設定は1行だけです。これはインストール後も変化はありません。
なぜ1行だけなのかですが、そもそもMySQL公式のリポジトリからインストールするとログファイルは【/var/log/mysqld.log】がデフォルトになります。

ですが、CentOS8のOS標準のMySQL8は【/var/log/mysql/mysqld.log】がデフォルトになっています。
ログ位置が異なるため、【/var/log/mysql】の配下様にファイルコンテキストを追加する処理が走るのではないかと思います。

ちなみに、CentOS8系でMySQL公式のリポジトリを使ってインストールするとエラーは出ませんでした。
既に設定が定義されているので、追加する処理が発生していないものと推測されます。

まとめ

エラー自体は既にある設定と同じ設定を追加しようとして出力されるエラーになるため、実運用としては問題ないとは思います。
ただ、CentOS8系標準のMySQLをセットアップすると毎回エラーが出るので気にはなるという感じでしょうか。

もしバグでファイルコンテキストの追加の処理が走っている?
それとも元々ファイルコンテキストが存在しているのがおかしい?
どちらからのアプローチになるかわかりませんが、バグであればいずれ修正されるのではないかと思います。

今後CentOS8でMySQL8を利用していく中で修正が入ってエラーが出なくなっていれば、新しい記事にしたいと思います。