ICTトラブルシューティングコンテスト 2023 予選 Writeup #ictsc

オオアオ・・・

問題文を現時点では正確に再確認できないので、雑です。

次の問題について記述します。

  • [nao] Redmine に絵文字を入力できない
  • [kob] Jenkins にアクセスできない

[nao] Redmine に絵文字を入力できない

1. 絵文字を入力できないらしいので、実際に Project の説明などに絵文字をぶち込んでみたところ、本当に RedmineInternal Server Error を吐き出してきます。

2. (問題文に書いてあったような気もしますが) top とかで見てみると Redmine が Docker で動いていそうなので、雑にパスを見つけます。 → /opt/redmine にありました

3. /opt/redmine の中身を見てみると Docker Compose を使っていそうだったので、とりあえず docker compose logs でログを見ます。

4. なんか utf8 がなんだとか言ってるので文字コードが悪いんだろうなぁ、とちょっと思ってみます。4 bytes 文字を扱うには utf8 ではなく utf8mb4 でないといけないので、なんか変換したらいいんだろうなぁ、と思い付きます。

(思い出すシリーズ: EPGStation が Mirakurun の更新で破壊されるやつ)github.com

5. とりあえず /opt/redmine の中にあるファイルにおいて、データベースの文字コードを指定しているっぽいものを軒並み utf8 から utf8mb4 に変えていきます。

6. 5. をやっても直らなかったのでよく調べてみると既存のテーブルの文字コードはそれだけでは変わらないみたいというのが分かります。さらにググるといい感じに文字コードを変換する SQL を生成するためのスクリプトが出てくるのでそのまま使います。

www.redmine.org

zappy.hatenablog.jp7. 絵文字が入りました。よかった〜

[kob] Jenkins にアクセスできない

1. 本当にアクセスできないのか雑に SSH でプロキシして繋ごうとするとアクセスを拒否されます。

2. Kubernetes で動いているらしいので kubectl get pods -A すると Jenkins の本体っぽい pod が CrashLoopBackOff 状態 になっています。

3. kubectl logs でログを見てみると、特にエラーを出さずに即死しています。

4. この辺でなんとなく OOM なんかなぁと思って worker ノードで sudo dmesg を叩くとやはり OOM で㊙️されています。

5. Jenkins の deployment 用 YAML ファイルを覗いてしばらく逆立ちしていると、Jenkins を稼働させる Java の最小メモリ割り当てが 4 GB になっていることに気づきます。なんかデカすぎるかもなぁと思い当たります。

6. worker ノードが持っている RAM 容量を見返すとやはり明らかにでかすぎるので、いい感じに小さくします。

7. kubectl apply を叩いて解決です。よかった〜