MySQL を公式 APT リポジトリからインストールする Chef の cookbook を書きました

  • 投稿日:
  • by
  • カテゴリ:

TL;DR

  • chef-mysql-apt を書きました。
  • 公式 deb で mysql-server の 5.7 をパスワード無しでインストールすると、mysql.user.plugin が auth_socket になるので、ALTER USER で明示的に plugin を変更しないとパスワードを変更できないので気をつけた方がよい。
  • chef の remote_file での checksum の指定は、ダウンロードしたファイルの checksum を確認するものではないので気をつけた方がよい。 (違うとドキュメントに書いてあるけれど)

cookbook を書きました

MySQL を公式 APT リポジトリからインストールする Chef の cookbook、chef-mysql-apt を書いたのですが、非対話型の環境でのインストールという面でいくつかはまったポイントがあったので、それらの情報をまとめます。 cookbook を利用するだけであれば、node を以下のように設定すれば MySQL 5.7 のサーバーをインストールできます。 0d850757e01d8d103dbdc2cc2953f0cf

非対話型環境での mysql-apt-config のインストール

`mysql-apt-config` の deb は、インストール時に debconf で MySQL のバージョンを指定して、その結果にしたがって `/etc/apt/sources.list.d/mysql.list` を生成するという動作をするのですが、非対話型の環境でインストールした場合は未選択の状態となってしまい、どのリポジトリも追加されません。 screen-shot_2015-11-06_17-43-10.png 調べたところ、どうもこういった場合には、`debconf-set-selections` を使うのが定石であるようなので、cookbook では以下のように対応しました。 188fb99508c06767ca4650a70186565d `debconf` からの再設定は本来であれば以下のコマンドでできるような気がするのですが、どうもうまくいかない(応答が無くなってしまう)ので `dpkg -r` して `dpkg -i` しています。 7a823b6254cbc56fbdc3467092972892 をしているということが分かりました。
  • plugin が auth_socket なので、root ユーザーの権限で socket 経由でないと接続できない
  • 単に ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; するだけではパスワードを更新できなくて ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass'; のよう明示的に authentication plugins を更新する必要がある
    • mysql_secure_installation で更新されたように見えてできないのはバグな気がします

ということだったようです。cookbook の方でも authentication plugins を更新するようにして、root のパスワードを初期化できるようになりました。

chef の remote_file での checksum

余談ですが、chef の remove_file には checksum を指定できるのですが、ダウンロードしたファイルのハッシュ値が一致することは確認されません。ドキュメントには「The SHA-256 checksum of the file. Use to prevent a file from being re-downloaded.」とあるので、確かにそれを目的とはしていなさそうではありますが。(でも、変な値を入れておいても再ダウンロードされるわけでもないようで、バグなのか詳細追えていないですが) ユースケース的には remote_file こそ、checksum を確認したいような気がするのですが。

とりあえずこの cookbook では、 remote_file の後に file を使って確認する感じにしています。