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を入れようとして苦戦してたんだけど、最終的になんとか組み上がったものの
- 半角全角キーを押すと、超高速で日本語入力ON/OFFが切り替わる
- chatgpt曰く「キーリリースイベントを取りこぼすバグが有る」とのこと
- マウスカーソルの位置と実際の位置がズレていて操作できない
- chatgpt曰く「WSLgだとずれるバグが有る」とのこと
と、ちょっとどうしようもないトラブルが続いたため、諦めた。