👋

mDNSでWSLのLinux側からPodmanを利用する方法: ポッドマンが倒せない(6)

2022/12/26に公開約6,200字

Podmanサーバを本当にサーバーにする

関連記事:
WSLのhostnameでLinux同士をSSH接続する方法
Distrodを使ってWSLでsystemdを動かす

ポッドマンが倒せないシリーズ過去記事

前回npiperelayでリモートPodmanに接続する記事を書いた。
npiperelayで接続する方法も用途を限定すればいけるが、
コマンドがwindowsを経由するので動作の遅さが目立つ。

ところで、以前の記事でmDNSによるLinux→Linuxの接続を実現した。
それもこれもPodmanのLinux→Linux接続を可能にするため。
この手法ならWindows側の実行プログラムを使うことなく自然な接続が出来るはず。

早速やってみよう。

例によってインストールから記述するので適当に読み飛ばしてほしい。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

準備

今回はPodmanをWindowsにインストールしたときに生成されるfedoraインスタンスをサーバーとして用いる
クライアントを Ubuntu, fedoraインスタンスを Podman Serverとすると

クライアントのUbuntu22.04(jammy)を用意
予め必要なパッケージも入れておく。

ubuntu2204.exe
sudo apt update && sudo apt upgrade -y
sudo apt-get install  btrfs-progs crun git golang-go go-md2man iptables libassuan-dev libbtrfs-dev libc6-dev libdevmapper-dev libglib2.0-dev libgpgme-dev libgpg-error-dev libprotobuf-dev libprotobuf-c-dev libseccomp-dev libselinux1-dev libsystemd-dev pkg-config uidmap unzip

Windowsにpodmanをインストール

PodmanおよびPodman Desktopをインストールし、
Podmanを起動しておく。

powershell
winget install -e --id RedHat.Podman
podman machine init
podman machine start
winget install -e --id RedHat.Podman-Desktop
wsl -l -v
  NAME                      STATE           VERSION
  Ubuntu-22.04              Stopped         2
  podman-machine-default    Running         2

コネクションを確認する

PS C:\Users\magic> podman system connection list
Name                    URI                   Identity Default
podman-machine-default       ssh://user@localhost:60660/run/user/1000/podman/podman.sock  C:\Users\doco\.ssh\podman-machine-default  true
podman-machine-default-root  ssh://root@localhost:60660/run/podman/podman.sock            C:\Users\doco\.ssh\podman-machine-default  false

(._.)φ ポート番号は60660

Podmanサーバーを設定

podman-machine-defaultインスタンスを設定する
OSがFedoraなのでちょっと扱いにくいかもしれないが、
aptと同じdnfというコマンドがあるので、
それを使って必要なものをインストールしていく。

powershell
wsl -d podman-machine-default
dnf update -y

wsl.confを設置

ホスト名 podmanhostを設定する。

/etc/wsl.conf
[network]
hostname=podmanhost

avahiをインストール

wsl -d podman-machine-default
dnf install -y avahi

Podmanサーバー再起動

Powershellに戻ってPodmanサーバーを再起動

powershell
wsl -t podman-machine-default; wsl -d podman-machine-default

この時点でhostnameでの名前解決は完了している。

クライアント側にPodmanを設定

Podmanのインストール

Ubuntu側にPodmanをインストール。
Podman4を使うためにリポジトリの登録から。

bash
curl -fsSL https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_22.04/Release.key| gpg --dearmor | sudo tee /etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/devel_kubic_libcontainers_unstable.gpg] https://download.opensuse.org/repositories/devel:kubic:libcontainers:unstable/xUbuntu_$(lsb_release -rs)/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:unstable.list > /dev/null

続いてPodmanのインストール

bash
sudo apt update
sudo apt install -y podman
podman --version
 podman version 4.3.1

リモート接続設定

Podmanサーバーとリモート接続する
SSH経由のためSSHの設定も必要でキー RSAではなく ED25519を使用する。

ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
・・・
|       +.*B..=.. |
|       .+E++.++  |
+----[SHA256]-----+
cat ~/.ssh/id_ed25519.pub | wsl.exe -d podman-machine-default -u user -e tee -a .ssh/authorized_keys

リモートログイン確認

ssh user@podmanhost.local -p 60660
Last failed login: Wed Nov 23 13:38:28 JST 2022 from 172.20.43.74 on ssh:notty
There were 3 failed login attempts since the last successful login.
[user@podmanhost ~]$ exit

(・∀・) SSH接続ヨシ!

次はPodmanの接続設定
上記でWindows上の接続を確認したがそれを参考にポートやPathを設定する
コマンドは podman system connection list

podman system connection add podman --identity ~/.ssh/id_ed25519 ssh://user@podmanhost.local:60660/run/user/1000/podman/podman.sock
podman system connection list
 Name                    URI                   Identity Default
 podman      ssh://user@podmanhost:60660/run/user/1000/podman/podman.sock /home/dozo/.ssh/id_ed25519  true
podman -r images

(・∀・)(・∀・) Podman接続ヨシ!

Podmanにアクセス

さて、長々と書いたがいよいよPodmanを使ってみよう。

bash
podman -r run quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
・・・
Storing signatures
!... Hello Podman World ...!

         .--"--.
       / -     - \
      / (O)   (O) \
   ~~~| -=(,Y,)=- |
    .---. /`  \   |~~
 ~/  o  o \~~~~.----. ~~
  | =(X)= |~  / (O (O) \
   ~~~~~~~  ~| =(Y_)=-  |
  ~~~~    ~~~|   U      |~~

Project:   https://github.com/containers/podman
Website:   https://podman.io
Documents: https://docs.podman.io
Twitter:   @Podman_io

さてPodman Desktopで確認してみよう。

![](https://storage.googleapis.com/zenn-user-upload/8e0339e91d15-20221123.jpg =400px)
Podman Desktop

(^_^)b 同期取れてる!

------------------- ↓ 後書はここから ↓-------------------

ここまでやる必要ある?
といわれるとなんとも言いがたいけど個人的にはこの環境に満足している。
Linux上にPodman Desktopを入れるっていう手もあるから、
そっちの方が手っ取り早いかもしれないが、
多分Fedoraでしか出来ないんじゃないかなと。

Discussion

ログインするとコメントできます