トップ «前の日記(2025/01/16 (木) ) 最新 次の日記(2025/01/18 (土) )» 編集 RSS feed

HsbtDiary


2025/01/17 (金) [長年日記]

GitHub に ARM runner が来たので ruby/docker-images に導入した

朝から突然ズキズキー!と不定期に頭痛が発生するという感じだったので、ロキソニンは飲みつつ東京Ruby会議12の前夜祭はお休みして家でたんぽぽワークスというか盆栽ワークスみたいなことをやることにした。

というわけでやっと GA になった GitHub Actions の ARM runner を試しつつ、qemu でヒイヒイ言いながらビルドしている docker image の build ワークフローを書き換えた。

この docker-images はもともと Circle CI で動いていて、GitHub Actions 以外に時間を使いたくないなあと雑に migrate を行って、その後にRubyのリリースと同時にイメージビルドをするような repository_dispatch を追加、という経緯があり以下の3つが主要な workflow だった。

  • Ruby のバージョンを指定すると Ubuntu LTS イメージからイメージを作成する
  • Ruby のバージョンと Ubuntu LTS イメージを指定すると amd64/arm64 の両方で使えるイメージをビルドする
  • master ブランチを元に1日2回 devtools 入りであるとか、debug オプションを付けた master イメージを作成する

午前中にとりあえず1つ目をベースに2つ目にある amd64/arm64 の両方で使えるイメージを作るというのをガチャガチャやっていたけど、色々いじってみると 2つ目をベースにして3つとも1つの workflow にできるんでないか?となってきたのでやってみたらできた。

https://github.com/ruby/docker-images/blob/master/.github/workflows/build.yml

結構ハマったのが docker manifest コマンドで、これは amd64 と arm64 なイメージを仮想的な名前をつけて1つのイメージタグとして扱えるようにする、みたいなもので、具体的には podman run --rm -it ghcr.io/ruby/ruby:master /bin/bash などとやるだけで Apple Silicon な macOS なら aarch64-linux になるし、x86 な Windows なら x86_64-linux になる。大変便利。

で、master ならいいのだが、3.4.1 のイメージを 3.4 とか latest としても呼び出したくて、cp とかないんか?と思い調べたもののないので、いちいち全部 manifest create しないといけなくてややだるかった。さらにこの manifest コマンドを呼ぶと 1 回ずつ docker pull するっぽく、すぐに docker hub の rate limit に引っかかるなどの制限があってなかなか厳しかった。とりあえず毎日定期実行する限りはギリギリ収まったけど、どこかでエコになるようにしないとダメだろうなあ。

tDiary を Rack 3.1 対応した

Rack が 3.1 で 3.0 以上の非互換をガンガン突っ込んでいて、tDiary でも対応しないとなあと放ったらかしにしていたのを、重い腰を上げて真面目に調べて動くようにした。

目立った対応としては rack/files とか rack/server などが消えてしまったので、非常に雑な patch を tDiary の方に入れて対応したのと env から rack.input が無いときは key/value としても入らなくなったので、そのへんを回避するようなコードを入れていた。

2024 年にもなるのに FCGI で動かしている tDiary なのでこういう変更も別に対応するけど、仕事でこういうのをやらんといかん、みたいになったら相当にだるいので、もうちょい何とかならんのかなとは思う。