2021年10月3日 (日曜日)

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ベースのファイルシステム使ってほしいところだが。

Junichi Uekawa