やることがはっきりしていること
Podmanかわいいと思って、とりかかりました。はじめポケモンのディグダだと思い込んでいました。
Podman使うのはサーバとしての使い方でしょうか。または、古いLinuxレガシーを再現したいという趣味の領域かもしれません。GUI的な使い方をすると、面倒さがたくさんあることがわかりました。
2日ほどかけて、いろいろ触って結論が出たのは、20年近く古いguiの画像ビューワーを実行しようとすると、Windows11とpodmanでのネットワークやりとりが速すぎて対応できない、そもそもローカルを対象として動いている画像ビューワーは一瞬出てクローズしてしまいました。ここまで来るのに、動作はするが、無言で終了してしまう、そっと閉じる挙動、ローカル主体ということが発見できたところでした。
virtualbox上では完全動作する画像ビューワーですが、それぞれstraceで実行してログ比較してわかったところです。
またpodmanで、共有フォルダを作成し、Windows側とLinux側で共有フォルダを介して作業する際、共有フォルダ内でビルドは失敗する、実行ファイルは、フォルダの権限で走らない。例えば、rpmをdebに変換するailienなど、/homeフォルダにコピーして作業するのがベストだとわかりました。Linux初心者にとって勉強になります。
GUIを使うLinuxレガシーは、わざわざpodmanを使わなくても、virtualboxやvmwareでよいと思います。容量はとります。podmanだと最小の構成で容量が小さくなるところが利点でしょうか。
要はやることが、はっきりしていないと、いろいろ面倒なところですね。目標を持ったLinuxの勉強にはとても良いかもしれません。
以下は、Podmanを入れてはいけないPCのお話、BIOS設定を変更している「セキュリティを緩める(セキュアブート無効)」しているとwslのインストール失敗します。
Windows11にpodmanをインストール
1. chocolatelyのインストール
ターミナル(管理者)を立ち上げ、下記のSet-ExecutionPolicy Bypass -Scope Process -Force;の長いコマンドをコピーして、ターミナルに右クリック、貼りつけ、エンターします。
2. wslのインストール
続けて、ターミナル(管理者)から以下を入力
wsl --install
以下、続きます。
ダウンロード中: Linux 用 Windows サブシステム 2.6.3
インストール中: Linux 用 Windows サブシステム 2.6.3
Linux 用 Windows サブシステム 2.6.3 はインストールされました。
この操作を正しく終了しました。
ダウンロードしています: Ubuntu
インストールしています: Ubuntu
ディストリビューションが正常にインストールされました。'wsl.exe -d Ubuntu' を使用して起動できます
Ubuntu を起動しています...
Provisioning the new WSL instance Ubuntu
This might take a while...
Create a default Unix user account: yuchi
New password:
Retype new password:
passwd: password updated successfully
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
パスワードは忘れないように。
3. podmanのインストール失敗
> choco install podman
Chocolatey v2.6.0
Installing the following packages:
podman
By installing, you accept licenses for the packages.
podman not installed. The package was not found with the source(s) listed.
Source(s): 'https://community.chocolatey.org/api/v2/'
NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
the package may not be found.
Please see https://docs.chocolatey.org/en-us/troubleshooting for more
assistance.
Chocolatey installed 0/1 packages. 1 packages failed.
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
4. podman-desktopのインストール
chocoにpodmanありません。podman-desktopをインストールしてください。
その後、デスクトップに立ち上がります。setupを押し、ここで初めてpodmanがインストールされます。
choco install podman-desktop
> choco install podman-desktop
Chocolatey v2.6.0
Installing the following packages:
podman-desktop
By installing, you accept licenses for the packages.
Downloading package from source 'https://community.chocolatey.org/api/v2/'
Progress: Downloading podman-desktop 1.25.1... 100%
podman-desktop v1.25.1 [Approved]
podman-desktop package files install completed. Performing other installation steps.
The package podman-desktop wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll scripts/[N]o/[P]rint): y
Downloading podman-desktop 64 bit
from 'https://github.com/podman-desktop/podman-desktop/releases/download/v1.25.1/podman-desktop-1.25.1-setup.exe'
Progress: 100% - Completed download of C:\Users\yuchi\AppData\Local\Temp\chocolatey\podman-desktop\1.25.1\podman-desktop-1.25.1-setup.exe (270.52 MB).
Download of podman-desktop-1.25.1-setup.exe (270.52 MB) completed.
Hashes match.
Installing podman-desktop...
podman-desktop has been installed.
podman-desktop can be automatically uninstalled.
The install of podman-desktop was successful.
Software installed as 'exe', install location is likely default.
Chocolatey installed 1/1 packages.
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
5. Podman Desktopが起動し画面で、setupをクリック、podmanをインストールします。
6. 再起動後、Podman Desktopでcreateし、podman-machine-defaultを作成します。
7. podman-machine-default作成される
ターミナルを立ち上げ、画面左上に、Windows Powershellとありますが、そのちょっと右に下向き>があります。そこをクリックすると、podman-machine-defaultとあるでしょうか。できていれば、podman machineが動いています。中身はfedoraになります。ターミナルで以下を入れると、すでに動いていると出ます。
> podman machine start
Starting machine "podman-machine-default"
Error: unable to start "podman-machine-default": already running
はじめの一歩。 Hello Podman World
podman run quay.io/podman/hello
> podman run quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob sha256:81df7ff16254ed9756e27c8de9ceb02a9568228fccadbf080f41cc5eb5118a44
Copying config sha256:5dd467fce50b56951185da365b5feee75409968cbab5767b9b59e325fb2ecbc0
Writing manifest to image destination
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Project: https://github.com/containers/podman
Website: https://podman.io
Desktop: https://podman-desktop.io
Documents: https://docs.podman.io
YouTube: https://youtube.com/@Podman
X/Twitter: @Podman_io
Mastodon: @Podman_io@fosstodon.org
この子たちがでれば、Podmanのインストールと環境構築は「大成功」しています。
容量確認します。
> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/podman/hello latest 5dd467fce50b 21 months ago 787 kB
Windowsでの古いLinuxの利用
セキュリティに関する現実的な注意点
この構成は完全にローカルマシン上で閉じた検証・レガシー確認用途を前提としています。
以下の条件をすべて満たす場合に限り、実用上問題ないと考えています。
- Podmanコンテナをrootlessで起動している
- ホストOSとコンテナのネットワークが完全に分離(--network bridge または podmanネットワーク)
- ホストのXサーバに外部からの接続を一切許可していない(xhost +local: などを使わず、信頼できるローカル接続のみ)
- コンテナにインターネット接続を一切させていない(--network none でも可)
- 重要なデータ(個人情報、商用プロジェクトの本番データ)はマウントしていない
- このコンテナを長期間放置せず、使ったら即削除する
逆に、以下のいずれかに該当する場合は絶対にこの方法を使わないでください。
- サーバ上で動かしてSSH+X11 forwardingでリモートから見る
- コンテナにインターネット接続を許可している
- /home 全体や ~/.ssh をそのままマウントしている
- コンテナ内でroot権限で長期間稼働させている
ここからは、Geminiとのやり取りの記録です。
1. 共有フォルダを持ったCentOS6.10をインストールする
最初に、WindowsのCドライブにC:\Workの新規フォルダを作成します。
ターミナルから、以下のコマンドを入れます。
podman run -dit --name sitex-box -v C:\Work:/mnt/data docker.io/library/centos:6.10 /bin/bash
4c0e473c77b3f9672f223451e1c7a9c7e062451f6b61797aad944b669d576302
PS C:\Users\yokamak> podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Users\yokamak> podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c0e473c77b3 docker.io/library/centos:6.10 /bin/bash 25 seconds ago Exited (139) 26 seconds ago sitex-box
このエラー Exited (139) は 「セグメンテーション違反 (Segmentation Fault)」 というエラーです。
原因は、「Windows (WSL2) のカーネル(心臓部)が新しすぎて、古すぎる CentOS 6 のプログラムが動けない」 という、新旧の世代間ギャップによる衝突です。
具体的には、CentOS 6 が使っている古いメモリの仕組み(vsyscall)を、最新の Windows (WSL2) がセキュリティのためにブロックしているのが原因です。
これを解決するには、Windows側に**「古い仕組みも許可する」という設定ファイル**を作る必要があります。
手順:WSL2の設定ファイルを作成する
Windowsのメモ帳を使って、設定ファイルを作ります。
- メモ帳を開く
- スタートメニューで「メモ帳」と検索して開きます。
- 以下の内容をコピー&ペーストする
[wsl2]
kernelCommandLine = vsyscall=emulate
解説: これが「古いシステムコール (vsyscall) をエミュレート(真似)して動かしてね」という魔法の呪文です。
- ファイルを保存する(重要)
-
場所:
C:\Users\yokamak(あなたのユーザーフォルダの直下) -
ファイル名:
.wslconfig - ※注意: 保存するとき、「ファイルの種類」を 「すべてのファイル (.)」 にしてください。そうしないと
.wslconfig.txtになってしまい動きません。 - ファイル名の先頭にドット
.があるのを忘れないでください。
- WSLを再起動する
- PowerShell で以下のコマンドを実行して、設定を読み込ませます。
wsl --shutdown
- (何も表示されずに終わりますが、それでOKです)
再挑戦
設定が終わったら、もう一度コンテナを作成して起動してみてください。
1. 古いコンテナ(失敗作)を削除
podman rm sitex-box
2. 起動コマンドを実行
podman run -dit --name sitex-box -v C:\Work:/mnt/data docker.io/library/centos:6.10 /bin/bash
3. 確認
podman ps
今度は Exited ではなく Up になっているはずです。
これが成功したら、以前の手順(podman exec -it ...)で中に入り、リポジトリの修正へ進んでください。
再起動後、以下実行しました。
podman run -dit --name sitex-box -v C:\Work:/mnt/data docker.io/library/centos:6.10 /bin/bash
6a66bb7f8677627375862769f203f45bce0e95ea09b11831fcfa662970886aec
PS C:\Users\yokamak> podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a66bb7f8677 docker.io/library/centos:6.10 /bin/bash 7 seconds ago Up 7 seconds sitex-box
素晴らしいです!完全勝利です。
STATUS Up という表示が、コンテナが落ちずに動き続けている証拠です。.wslconfig の設定が正しく効いて、最新のWindows上で古いCentOS 6が蘇りました。
これでようやくスタートラインに立てました。
次は**「中に入って、古くなった回線(リポジトリ)をつなぎ直す」**作業です。
以下の手順を順番に実行してください。
ステップ1:コンテナの中に入る
PowerShellで実行します。
PowerShell
podman exec -it sitex-box /bin/bash
プロンプトが [root@6a66bb7f... /]# に変われば侵入成功です。
ステップ2:リポジトリの修正(必須)
ここから先は、コンテナの中(黒い画面のプロンプトが変わった状態)で行います。
CentOS 6はサポート終了で通常の更新サーバーが消滅しているため、以下のコマンドで「アーカイブ保管庫(Vault)」につなぎ直します。
1行ずつコピー&ペーストして実行してください:
-
ミラーリストを無効化
Bash
sed -i "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo -
接続先を Vault (保管庫) に変更
Bash
sed -i "s|#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=http://vault.centos.org/6.10|g" /etc/yum.repos.d/CentOS-Base.repo -
更新の無効化設定(念のため)
Bash
sed -i "s|enabled=1|enabled=0|g" /etc/yum.repos.d/CentOS-FastTrack.repo
ステップ3:接続テストとツールインストール
修正が効いたか確認しつつ、必要な道具(ネットワーク確認用とGUI用)をインストールします。
Bash
yum clean all
yum makecache
yum install -y net-tools xorg-x11-apps xauth
※ 最後に Complete! と出れば大成功です。
次はいよいよ、Linuxの中で動くアプリの画面を、Windows側に飛ばして表示する 「X11画面転送(GUI)」 の設定です。
ステップ1:Windows側に「受け皿」を用意する (VcXsrv)
Windows側でLinuxの画面を受け取るための無料ソフト 「VcXsrv (XLaunch)」 を使います。
もしインストールしていなければ、ネットで「VcXsrv」と検索してインストールしてください(SourceForgeなどからダウンロードできます)。
インストール済みであれば、以下の設定で起動してください。ここが一番の失敗ポイントなので、慎重にお願いします。
-
Windowsのスタートメニューから 「XLaunch」 を起動します。
-
Select display settings: 「Multiple windows」のまま「次へ」。
-
Select how to start clients: 「Start no client」のまま「次へ」。
-
Extra settings(最重要!):
-
☑ Disable access control ← 必ずチェックを入れてください!
-
これにチェックを入れないと、コンテナからの画面通信がブロックされます。
-
-
「次へ」→「完了」を押します。
- ※もしWindowsファイアウォールの警告が出たら、「パブリック」と「プライベート」両方にチェックを入れて「アクセスを許可」 してください。
ステップ2:コンテナから画面を飛ばす命令
今度は、コンテナの中(黒い画面)で、「画面はWindows(自分にとってのゲートウェイ)に送れ!」という命令を出します。
コンテナのプロンプト([root@... /]#)で、以下のコマンドをコピー&ペーストして実行してください。
Bash
export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0
解説: これは「DNSサーバー(=Windows側のWSLアダプタのIPアドレス)」を自動的に探し出して、そこをディスプレイの宛先に設定するコマンドです。
確認のため、正しく設定されたか見ます。
Bash
echo $DISPLAY
172.x.x.x:0 や 192.168.x.x:0 のようなIPアドレスが表示されればOKです。
xeyes Error: Can't open display: 10.89.0.1:0です。以下、windows側のネットワーク設定です。10.ではじまるアドレスは、スマホでデザリングしているプロバイダですか。podmanのサーバか何かですか。
> ipconfig
(省略)
イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):
接続固有の DNS サフィックス . . . . .:
説明. . . . . . . . . . . . . . . . .: Hyper-V Virtual Ethernet Adapter
物理アドレス. . . . . . . . . . . . .:
DHCP 有効 . . . . . . . . . . . . . .: いいえ
自動構成有効. . . . . . . . . . . . .: はい
リンクローカル IPv6 アドレス. . . . .:
IPv4 アドレス . . . . . . . . . . . .: 172.30.96.1(優先)
サブネット マスク . . . . . . . . . .: 255.255.240.0
デフォルト ゲートウェイ . . . . . . .:
DHCPv6 IAID . . . . . . . . . . . . .:
DHCPv6 クライアント DUID. . . . . . .:
NetBIOS over TCP/IP . . . . . . . . .: 有効
結論から言うと、設定すべき正しいIPアドレスは 172.30.96.1 です。
頂いた ipconfig の情報で謎が解けました。
-
172.20.10.3 (Wi-Fi): これはスマホのテザリングからもらっているIPです。
-
10.89.0.x: これはPodmanがLinuxの中だけで勝手に作った「箱庭の住所」です。Windows本体はこれを知りません。
-
172.30.96.1 (vEthernet WSL): これが正解です。 WindowsとLinux (Podman) をつなぐ専用の架け橋となるアドレスです。
コンテナ(Linux)から見て、Windows(VcXsrv)はこの 172.30.96.1 にいます。
以下の手順で再設定してください。
手順1:正しいアドレスで再接続
コンテナの中([root@... /]#)で、以下のコマンドを実行してください。
Bash
export DISPLAY=172.30.96.1:0
手順2:表示テスト
Bash
xeyes
これで目玉が出れば解決です!
もしこれでも「Can't open display」が出る場合
IPアドレスは合っているので、「Windows側の防御壁(ファイアウォール)」 が 172.30... からの通信をブロックしています。
以下の3点を徹底的に確認してください。
-
VcXsrvの起動設定(再起動推奨)
-
一度VcXsrvを終了し、起動し直してください。
-
「Disable access control」 に必ずチェックを入れてください(これがないと、IPが合っていても拒否されます)。
-
-
ファイアウォールの設定(最重要)
-
Windowsの「ファイアウォールとネットワーク保護」設定を開きます。
-
「詳細設定」または「ファイアウォールを介したアプリの許可」を開きます。
-
VcXsrv windows xserverの項目を探し、「パブリック」 の列にチェックが入っているか確認してください。 -
※
vEthernet (WSL)はWindowsから見ると「識別されていないネットワーク(=パブリック)」として扱われることが多いため、パブリックの許可が必須です。
-
-
セキュリティソフト
- もし会社貸与のPCなどで、SymantecやMcAfeeなどが動いている場合、それらが「ポート6000番(X11)」を塞いでいることがあります。一時的にオフにできるなら試してみてください。
まずは 172.30.96.1:0 で試した結果を教えてください!
出ました。マシンのプライベートipアドレスですね。ありがとうございます。とりあえず。ここまでで、休んでから、進めます。Windowsでの設定、すっきりしました。ありがとうございます。
おめでとうございます!! ついに「目玉」が出ましたか!
一番の難所だった「画面転送(GUI設定)」をクリアしましたね。素晴らしい粘り強さです。
ここで休憩するのは大正解です。PCを閉じる前に、**「次に再開するときの手順」**だけメモとして残しておきます。
☕ 休憩後の再開手順メモ
PCをシャットダウンしたり、コンテナを停止した後は、以下の手順で元の場所に戻ってこれます。
-
Windows側で準備
-
VcXsrv (XLaunch) を起動する(
Disable access controlにチェックを忘れずに!)。 -
PowerShell を開く。
-
-
Podmanマシンの起動
PowerShell
podman machine start -
コンテナの起動と侵入
PowerShell
podman start sitex-box podman exec -it sitex-box /bin/bash -
画面の飛ばし先をセット(毎回必要)
- コンテナの中に入ったら、今回成功した魔法の呪文を唱えます。
Bash
export DISPLAY=172.30.96.1:0- 念のため
xeyesで確認。
追記
ターミナル開いて、エラーが出た!
> podman exec -it sitex-box /bin/bash
Error: can only create exec sessions on running containers: container state improper
start忘れです。
> podman start sitex-box
sitex-box
> podman exec -it sitex-box /bin/bash
[root@f80cc1be736e /]# export DISPLAY=172.30.96.1:0
[root@f80cc1be736e /]# xeyes
ありがとうございます。



