Arch Linux on WSL2 で podman でコンテナを動かす
自分用メモ。
tl;dr
- GitHub - yuk7/ArchWSL: ArchLinux based WSL Distribution. Supports multiple install.
- Arch Linux on WSL2 を入れる。
scoop
使うと楽。
- Arch Linux on WSL2 を入れる。
- Podman - ArchWiki
/etc/sub{u,g}id
の設定が必要。設定する値は<user>:100000:65536
などとすると分かりやすい (コンテナのuid=1000
がホストのuid=101000
になり対応関係が一目瞭然)- 上記設定前に
podman
叩いちゃった場合はpodman system migrate
やpodman system reset
を実行する必要があるみたい
- How to run Podman on Windows with WSL2 | Enable Sysadmin
- Red Hat の記事。最後の方の
/etc/containers
の設定例だけ見れば良い。
- Red Hat の記事。最後の方の
pacman -S shadow
- ArchWSL インストール直後だと
/usr/bin/new{u,g}idmap
に capability (or setuid bit) が設定されていないため、これらのバイナリが含まれるshadow
パッケージを再インストールすることで設定させる 以下になっていればOK。capabilityがセットされていれば setuid bit の設定は不要。
$ getcap /usr/bin/new{u,g}idmap /usr/bin/newgidmap cap_setgid=ep /usr/bin/newuidmap cap_setuid=ep $ ls -l /usr/bin/new{u,g}idmap -rwxr-xr-x 1 root root 41K 9月 7 22:42 /usr/bin/newgidmap -rwxr-xr-x 1 root root 37K 9月 7 22:42 /usr/bin/newuidmap
- ArchWSL インストール直後だと
当時のツイート
wsl2+archlinux+podmanでコンテナ超簡単に起動できて良かった。daemon less なの最高
— 飲酒フィットアドベンチャー (@gifnksm) 2020年12月31日
hello-worldで満足してたら他のイメージはrootlessでまともに動かないことに気づいたけど、subuid/subgid設定 + chmod u+s /usr/sbin/new{u,g}idmap で順調に
— 飲酒フィットアドベンチャー (@gifnksm) 2020年12月31日
動くようになった
shadowインストールしなおしたら workaround 不要になった。archwsl の tar から展開したときに capability が吹っ飛んだっぽい?
— 飲酒フィットアドベンチャー (@gifnksm) 2020年12月31日
飲酒正月気分で殴り書きしてるから今読むと日本語がおかしい。
その他
podmanデフォルトrootlessだしもうdockerじゃなくてpodmanでいいじゃんって気分になっている
— 飲酒フィットアドベンチャー (@gifnksm) 2021年1月1日
dockerの定型起動オプションをdocker-composeの設定に雑にまとめておくのが良かったけどpodman-composeはこの使い方に適してなさそう (単独サービスの立ち上げに対応してない) ので、適当な代替物を探している (シェルスクリプト書けば良いというのはそう)
— 飲酒フィットアドベンチャー (@gifnksm) 2021年1月1日
- podman in podman も余裕やろと思ってやってみたら overlayfs on overlayfs (?) はできないみたいなエラーが出て挫折してしまった。
ググった感じ
/var/lib/containers
あたりを volume にすれば良さそうっぽいが試してない。 - podman をググると docker と違って英語記事ばかり出てくるのは良いことなのかどうなのか。
Red Hat のサブスクリプションがないと読めない記事ばっか出てくるのは辛い。Red Hat Developerに登録 (無料) すれば読めるとのこと。Shion Tanaka さん教えて頂きありがとうございます!Red Hat Developerに登録するとログインが必要なKCSも参照できます。もちろん登録は無料です。また開発用途のサブスクリプションも払い出されるのでRHELも使えます。
— Shion Tanaka (@tnk4on) 2021年1月3日
詳細は下記の記事を参照してご活用ください!https://t.co/04wXPR3Le3 - WSL2 で systemd を動かすかどうかは悩ましいところ。
以下を使えば簡単に systemd を使えるようになるらしいが、今のところ導入していない。
github.com
導入していない理由は以下。
- ホストマシンのシャットダウン時に systemd に対するシャットダウン操作が必要になるなど、WSL2の気軽さが損なわれてしまいそうな気がする。
- systemd の提供する仕組みと Windows の提供する init の仕組みがコンフリクトしたりしないかが心配。ネットワーク周りとか。
- 今のところ systemd なしでも困っていない。動かしたいサービスがあったら podman コンテナで代用できそう。 まあそのうち気が変わるかもしれない。