Workshopがいろいろあってだめになったので、podmanで代替を作ってみた

workshopが0.9.5になってから、WSL2環境に作ったworkshop環境にWindowsからsshできなくなったので、いろいろ試したあと諦めて、代替になりそうなのをpodmanで作った

何があったか

workshop0.9.5でsshのキー処理周りの設定が変わってしまい、特定の秘密鍵で署名されたキーでしかsshでログインできなくなった。

じゃあUbuntuからは?というと、そのへんはworkshopがいい感じに設定をしてくれてるので、Ubunutからはログインできる。
ただし、IPアドレスではなくホスト名指定した場合のみ。しかもWSL2ではそのホスト名を解決するためにはsystemd-resolvedに切り替えないといけないので、非常に面倒。

podmanに切り替え

最初はworkshopのコンテナにvscodiumとmozcを入れてなんとかしようとしていたけど、それはそれで様々なバグを踏んでひどいことになったので、諦めてpodmanでコンテナを作って、そこにsshで入るようにした。

podmanにしたのは、コンテナをrootlessにしたかったからと、使い慣れたDockerと操作があまり変わらないから。

Dockerfile

FROM debian:trixie-slim

RUN apt-get update && \
  apt-get upgrade -y && \
  # 必要なものインストール
  apt-get -y install openssh-server tini curl libatomic1 gcc g++ build-essential && \
  # 作業用ディレクトリ作成
  mkdir /project \

ADD .devcontainer/setup.sh /tmp/setup.sh
RUN sh /tmp/setup.sh

RUN --mount=type=secret,id=sshkey cat /run/secrets/sshkey > /root/.ssh/authorized_keys

EXPOSE 22

CMD ["tini", "-g", "--"]

opensshを始めとしたパッケージをインストールしてから.devcontainer/setup.shを取り込んで環境ごとに必要なパッケージの取得や設定の変更を行い、sshkeyは--secretオプションで渡すようにした。Windowsのssh公開鍵ファイルはUbuntuからでも読めるので、それをpodmanコンテナに渡している。

これを.devcontainerディレクトリに置いて、

podman build -t dev-container -f .devcontainer/Dockerfile . --secret id=sshkey,src={公開鍵ファイルのパス}

でビルドしてあげれば、コンテナの完成。

podman run --name dev-container -d -p 8888:22 -v $(pwd):/project dev-container /usr/sbin/sshd -D

で実行して、Windowsからsshでログインできれば成功。

ついでに

これら処理を行うpythonプログラムをOllama + qwen3.5で作成。コマンドで初期化、ビルド、実行ができるようになった。ついでにポートマッピングやボリュームの追加、デバイスファイルのマッピングを設定するファイルも作ったりした。

ちなみに、Raspberry Pi Pico用環境を作ろうとして/dev/ttyACM0をコンテナにバインドしようとして、すごく面倒なことになった。

TODO

  • 全コンテナが同じタグになるので、dev-container-${ディレクトリ名}にしようか

余談

最初はWorkshopコンテナ環境にVSCodiumとmozcを入れようとして苦戦してたんだけど、最終的になんとか組み上がったものの

と、ちょっとどうしようもないトラブルが続いたため、諦めた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です