resolvがCAA資源レコードを扱えるようにするパッチが数年放置されてたのでリベースしてテストを付けた. 固定長フィールドを文字列で持つと,ワイヤフォーマットへのエンコード時に壊れたメッセージを作ってしまう可能性があるので避ける.
cdk-lambda-ruby v0.2.0
Rubyで書いたAWS Lambda関数をデプロイするAWS CDK用のライブラリcdk-lambda-rubyを,夏頃でてたRuby 3.2ランタイムに対応させた.cdk-lambda-rubyは,ダウンロードしたgem,gemの展開,ネイティブ拡張のビルドをBundlerの機能を使ってキャッシュするのでcdk synth
が早くなる.
RubyにバンドルされてるBundlerのバージョンが上がっていて,bundle install
時に環境変数で指定していたオプションが自動的に.bundle/config
に書かれなくなった変更の対応が必要だった.あとはCIにSAM CLIを使ったインテグレーションテストを足したりとか.
s3tftpd v0.5.0
s3tftpdのv0.5.0をリリースした.使っているAWS SDK GoをV2にアップデートして,Amazon EKSなどweb identity tokenでAWSクレデンシャルが渡ってくる環境で何も設定をせずに動くようになった.
TFTPというファイル転送プロトコルは,ネットワーク機器のファームウェア更新などに使われている.送信側が1パケット送るごとに受信側からACKが返ってくるのを待つ素朴な作りなので,高々の転送速度しか出ない(既定のブロックサイズは512 Bだから,RTTが5 msなら0.8 Mbpsだ).そういうわけでTFTPサーバはクライアントからできるだけ近いところにあるのが望ましいのだけれど,いろんなところにファイルをコピーするのは面倒だ.だいいちファイルサーバほどオンプレで管理したくないものはない.s3tftpdを使うとクライアントからはTFTPのリクエストを受けて,実際にはAmazon S3からファイルを取ってきたりS3にファイルを書いたりできる.
そういう課題を解決したくて作ったけれど,いまだとMountpoint for Amazon S3とふつうのtftpdを組み合わせれば同じようなことができるはず.設定の簡潔さではまだs3tftpdにも存在意義があるか.
Web identity tokenをうまく扱えないらしいのは,RubyKaigi 2023で使う機材をキッティングしてたときにCisco WLCのファームウェアをアップデートしようとしてた人が見つけてくれたのだけど,s3tftpdをEKSに置いてインターネットVPN越しにファームをダウンロードしようとするものだから永遠に終わらない……と泣いていてそりゃそうだと笑った(WLCのアップデートパッケージは500 MB弱ある).
ちなみに,TFTPはクライアント側がRFC 2348の拡張に対応していれば,サーバとネゴシエーションしてブロックサイズを伸ばすことができる.裏技: サーバ側がクライアントからのACKを待たずに次のパケットを送りつける脱法的な荒業によってダウンロードを加速できることも知られていて,s3tftpdは--anticipate
というオプションで実装している.
中で使っているGoのtftpサーバライブラリにバグがある雰囲気がしているのだけれど,コンカレンシーがなにやらこんがらがっておりデバッグ困難でつらい.もともとは実装がシンプルになるように設計されていたはずのプロトコルを違法に拡張したせいで複雑になっているのであった.
executile v0.1.1
executileのv0.1.1をリリースした.#include
不足でコンパイルできないバグを2年くらい前に修正したのにタグを切り忘れていた.
executileは,systemdからソケットアクティベーションされることを期待してるプログラムをsystemd以外の環境(コンテナとか)で実行するためのヘルパープログラム集にしたいと思って名前をつけた.「集」と言っても今のところinet-listen-socket
というプログラムひとつしかない.これはTCP/UDPソケットをリスンして,チェインされたプログラムにsystemdのsd_listen_fds
規約で渡すだけの機能を持っている.要はinetdとかtcpserverみたいな立ち位置のやつ.
systemdの代わりをするユーティリティが当時は意外と存在しなくて作ったけど,いまはRust製のとかがあるらしい(見たことがあるけど名前を思い出せない)(当時も見つけられなかっただけかもしれない).executileはC/C++の標準ライブラリにしか依存していないので,コンパイルしてコンテナイメージにぽいっと放り込めば動く.また,executile自身もzlibライセンスなので,再頒布にあたって著作権表示のいっさい必要のないバイナリを生成することができるようになっている.RustやGoのプログラムを静的リンクしても,コンテナイメージに入れてバイナリで配布しようとするとそのへんをちゃんとやるのが面倒になってしまうことが多い.