時事ネタ、かつ暫定的なトラブルシュート
環境
- CiecleCI (version2) でCIを動かしている
発端
とあるタイミングから動いていたCIが突然失敗するようになった、エラーとしては
rake aborted! LoadError: libmariadbclient.so.18: cannot open shared object file: No such file or directory - /home/circleci/rails_app/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/mysql2.so
というようにMySQLになにかしようとしたらclientがないよエラー
原因
Debian GNU/Linux 10 (buster)
からはmysql-clientがなくなった- circleciで配布しているイメージでDebianOSを指定しないタグを使っているとよしなにバージョンアップしている
ということでこの2つの合わせわざが起こした事象の様子
参考ツイート
circleciでdebian based rubyのtagが更新されたっぽくて、stretchからbusterに切り替わったんだけど、パッケージリポジトリ追いついてないっぽくて apt-get install mysql-clientしようとすると失敗します😇
— あいぼう・ラニスター (@aibou) 2019年7月12日
そのため今までstretchでruby buildしてた人がimage cache無効の状態でbuildすると死ぬかも
解決策
- default-mysql-clientを入れる
- その後にbundle installをかけてmysql2のgemで正しく紐付けてもらう
なのでstepとして
- run: name: default mysql client install command: | sudo apt update sudo apt-get install default-mysql-client - run: name: bundle Install command: bundle install --path vendor/bundle
みたいな順番で対処すれば解決
参考サイト
- Circle CI で mysql-client が apt-get install できなくなってCI環境が壊れた話 - ユアマイスター株式会社エンジニアブログ
- Debian -- stretch の redmine-mysql パッケージに関する詳細 - debianのredmineイメージ見ると busterの一つ前のstretchから
default-mysql-client
入れている