17:15:32 # Life 手元の開発環境をPodmanベースに移行してみた。 Dockerの代替でデーモン必要ないときいて使ってみることにしたのだが、まぁよい。 lxcとpbuilderを使っていた用途を順番に置き換えている。 使い方としてはビルド時にだけインスタンスを起動して終了したら捨てる感じ。 たとえばBookwormのClangが使いたい場合はDockerfileとして用意しているのは
FROM debian:bookworm RUN apt-get clean && apt-get update && apt-get dist-upgrade -yq && apt-get install -yq \ clang \ make \ && apt-get clean
そしてスクリプトをPodmanを実行するように変更。カレントディレ クトリをバインドマウントして起動するのがポイント。一般ユーザ 権限で実行するとデフォルトでuser namespace で実行してくれて 中ではRootなのが外側では自分のユーザ権限に見えるように。それ がよい。ビルドは外側のカレントディレクトリに反映して、終了したらインスタンスが終了。
$ podman build . -t project-name $ podman run -it --rm -v $(pwd):$(pwd):rw -w $(pwd) project-name \ bash -c "make clean && make -j$(($(nproc) * 2)) -k"
EmacsのショートカットでMakeを実行するようにしているので Makefileのデフォルトのターゲットをpodman実行するようにしてし まった。
invoke-podman: docker-built-stamp podman run -it --rm -v $(shell pwd):$(shell pwd):rw -w $(shell pwd) cxx20 \ bash -c "make -j$(shell nproc) -k all" docker-built-stamp: Dockerfile podman build . -t cxx20 touch docker-built-stamp .PHONY: invoke-podman
Renameの挙動がおかしいとかいろいろあるんだけどまぁ満足。 Overlayfsの挙動が気に食わないのでCOWベースのファイルシステム使ってほしいところだが。