窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

isucon12の予選問題をdocker composeでlocalで練習したい!

そろそろ ISUCON13 も本番が近づいてきたので、練習をしてみよう!ってことで、手元で動かせそうな問題ないかなーと調べていました。

isucon.net

ほほう、4と7の予選が手元でシュッとDockerで起動出来るのか、なるほどー……… 流石に5年以上も前となると、言語ランタイムが古かったり、ミドルウェアが古かったりで、考え方は同じでも実際にコードに起こすみたいなところで練習してもとなるところが出てきます。

となるとなんとしてでも最近のやつを動かしたいなとなり、とりあえずで isucon12 のコードを眺めてみました。

GitHub - isucon/isucon12-qualify

ざっと眺めてみると、移植作業のための docker compose ファイルや、実行するための Makefile などが見つかります。 これらを有効活用して出来ないかといくつか手直しをしたら動いたので、共有します。

github.com

変更点としては

  • apt で mysql-client が入らなかったので、default-mysql-client に変更
  • docker-composeで起動したアプリケーションのネットワーク設定がhostだったため、serveしているwebページなどにアクセス出来なかった
    • ネットワーク設定を変更してアクセスできるように
  • 上記変更に伴ったnginxからのネットワーク設定の変更

これで一旦動作したので、これを使ってコードの書き換えの練習や、設定ファイルの管理の仕方とかをいい感じ手順化して本番頑張ります。


今年も個人スポンサーになりました、わいわい楽しむぞ!

ISUCON13 個人スポンサー : ISUCON公式Blog

CircleCIでplaywrightのdependenciesのinstallが止まってしまった

業務ではCircleCIを使っていて、今日困ったことがあったのでメモ。

環境

  • CircleCI
    • image: ubuntu-2204:current(2023.07.2)
  • playwright: 1.38.1

流れ

UIのテストにPlaywrightを使っているのだが、今朝からCIが通らなくなった。 コードの変更はUIに関係ないのになぜだろうとログを見てみると、

                ┌────┤ Daemons using outdated libraries ├─────┐
                │                                             │
                │                                             │
                │ Which services should be restarted?         │
                │                                             │
                │    [*] make: *** [Makefile:67: playwright/setup] Terminated
                │                                             │
Too long with no output (exceeded 10m0s): context deadline exceeded
                │          <Ok>              <Cancel>         │
                │                                             │
                └─────────────────────────────────────────────┘

テストの実行前の環境構築の段階で、なにかの入力待ちで止まってしまっているようだった。 これはPlaywrightで使用するブラウザのインストールと、その依存ライブラリのインストールの時のものだった。

playwright.dev

出てきている文字列で検索すると、以下のようなページが見つかった。

rohhie.net

どうも、Ubuntu 21.x 移行からneedrestartというパッケージがインストールされるようになり、パッケージを更新した際に、再起動が必要なデーモンを教えてくれるようになったらしい。

今までも同様の手順でPlaywrightのセットアップをしていて出ていなかったのはパッケージの更新がなかったからだろうか…

CIで止まってしまうと困るし、またPlaywrightのinstall-depsコマンドにはオプションを渡す手段が存在しないため、needrestartを黙らせる手段を今回は取った。

github.com

一旦再起動が必要なものだけリストするように変更し、re-runで動作することを確認できた。