変で古いプラットフォーム向けのバイナリをビルド
情報科学若手の会春の陣@2024-03-10
tosuke
whoami
tosuke (@t0suk3)
筑波大学情報学群情報科学類4年(→ M1)
型とかプログラミング言語とか
whoami
tosuke (@t0suk3)
筑波大学情報学群情報科学類4年(→ M1)
型とかプログラミング言語とか
サーバ管理遊び
ICTトラコン
EdgeRouter Lite 3
https://pbs.twimg.com/media/FQmHbL1UcAQfiKu.jpg
ネットワークを構成する計算機の1つ
色々入れたい
ビルドに向き合う必要がある
Case 1: mitamae
mruby スクリプトをホストに投げて構成管理する
環境を見て操作できるので色々できそう
libc に依存する必要はない
A. zig cc + Nix
1. ビルド機構に少しパッチを当てて Nix で環境を固定 2. $ zig cc -target mips-linux-musl
OCI で配布
OCI Index を駆使して各環境向けのビルドを作成・配布・取得
シェルスクリプトで落とす
Case 2: BIRD
色々なプロトコルを話すルーティングデーモン
クライアントが libreadline に依存
間接的に libc への依存が発生
Zig?
mips のビルドがあちこち壊れている
mips64 だとビルドに失敗する、古い glibc version を指定すると壊れるなど……
Nix?
クロスコンパイルかつ古い libc 環境を作る必要がある
昔の NixOS を使う必要があり,つらい
A. Earthly
コンテナを使って環境を用意して gcc でビルド
Case 3: Promtail
Go 製だが systemd journal を読むために cgo を使う
journal、読みたいよな?
A. Earthly?
BIRD と同じようにビルドする
x86_64 と aarch64 では zig を使う
ジャーナルは読めなかった
AMD64 only
そんな……
完
知見: ツールチェイン編
Go は変な環境に向けてビルドしてもちゃんと動く(すごい) zig cc は少し変なことをするとコーナーケースを踏みがち 全て統一できるのは便利
x86_64 / aarch64 しかない場合は積極的に使ってみてはいかがかな
知見: ビルド環境編
分離環境におけるビルドは強力
Nix は依存を厳密に指定することによる結果の厳密さが魅力