セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.20 WSL 2で作るクローズドなメール送受信環境のデモ
2024年06月20日配信
2024年07月12日更新
執筆者:山内 和朗
前回は、Windowsに簡単導入でき、ポータビリティの高い、評価、検証に使えるクローズドなメール送受信環境を、「Windows Subsystem for Lunuxバージョン2(WSL 2)」を利用してこれから作っていくことを表明しました。どう作るかは次回以降にして、今回は先に成果物のデモを見ていただきます。
図1は、前回見ていただいた、クローズドなメール送受信環境の実装イメージです。WSL 2上でインストールし、構成済みのpostfixとdovecotを含むUbuntuのイメージは、このプロジェクトの成果物として「Ubuntu_mailenv.tar」(約1.2GB)というファイル名で保存してあります。このプロジェクトの成果物を導入すると、ローカル環境で「<ユーザー名>@mylab.test」のメール送受信環境が利用可能になります。
図1 WSL 2で実現する、ローカルのクローズドなメール送受信環境
実は、今回見ていただくものは、私個人のローカルのHyper-V環境にある、入れ子になった仮想化(Nested Virtualization)が有効なHyper-V VMで作成したものを、別のHyper-V VMにコピーして行うデモです。トライ&エラーを数日間繰り返して完成した成果物を、Azure上のラボ環境に何かしらの方法でアップロードして利用しようと目論んでいました。ローカル環境で作成したのは、Azure上でトライ&エラーを繰り返した場合のAzureクレジットの消費を気にしてのことです。しかし、いざアップロードしようと思っても、1.2GBほどのサイズになってしまい、私個人(自宅)のインターネット環境ではアップロードに何時間かかるか予想も付きません。Azure上のラボ環境で使用するイメージは、ラボ環境で作るとして、その過程、トライ&エラーではなく、最短ルートの過程を次回以降紹介することにします。
成果物「Ubuntu_mailenv.tar」を導入して、スタンドアロン環境にメール送受信環境を準備するには、以下の要件を満たしている必要があります。
ハードウェア
オペレーティングシステム(WSL 2をサポート)
今回はデモのために、入れ子になった仮想化を有効にした、ゲストOSとしてWindows Server 2022(デスクトップエクスペリエンス)をインストール済みのHyper-V VMを用意しました。
Windows Server 2022のHyper-V VMに管理者(ローカルAdministratorなど)としてログインします。このOS環境は、最新状態に更新されていますが、それ以外、何も設定していません。プロジェクトの成果物「Ubuntu_mailenv.tar」は、Administratorユーザーの「ダウンロード」(C:¥Users¥Administrator¥Downloads)フォルダーにコピー済みです。
PowerShellを開き、次のコマンドラインを実行して、Telnetクライアント(オプション)、WSL 2のコンポーネント(ディストリビューションのインストールなし)をインストールして、OSを再起動します(画面1)。Telnetクライアントは、ポートの動作確認用にインストールするもので、必須ではありません。また、wslコマンド(wsl.exe、WSL 1およびWSL 2のインストールおよび設定ツール兼シェルのランチャー)は、PowerShell(powershell.exe、pwsh.exe)とコマンドプロンプト(cmd.exe)のどちらでも実行できます。
OSの再起動が完了したら、再びログインし、コマンドプロンプト(またはPowerShell)を開いて次のコマンドラインを実行します。この例では、「D:¥WSL¥Ubuntu」にカスタマイズ済みUbuntuをインストールします。<パス>は、Ubuntu_mailenv.tarのある場所(C:¥Users¥Administrator¥Downloads)。
WSL 1やWSL 2は、既定でC:ドライブ上のパス(%LOCALAPPDATA%¥Packages¥・・・)にディストリビューション(VHDXファイル)を格納します(→参考「WSL ディスク領域を管理する方法」≪外部サイト≫)。メール送受信により、ディストリビューションのディスクサイズは増える一方であるため、C:ドライブとは別のパスにインポートすることをお勧めします。WSL 1/2のエクスポート/インポート機能は、C:ドライブにインストールされたディストリビューションを別のドライブに移動するのに使えるテクニックです。
次のコマンドライン(または単にwsl)を実行すると、インポートされたUbuntuが起動します。起動は数秒で完了します。これでもう既に、メールサーバー「mailsv.mylab.test」として動作を開始しました(画面2)。telnetコマンドでlocalhostのSMTPポート(25)、POP3(110)、IMAP(143)にアクセスすると、ポートが開いていることを確認できます(それぞれ、SMTPとPOP3はquitで、IMAPはa logoutで切断できます)。
WSL 2専用のNATネットワークにHyper-Vと共通の仮想スイッチ(スイッチ名: WSL)を介して接続され、プライベートなIPアドレスが動的に割り当てられますが、Windows側からはlocalhost(127.0.0.1)で透過的にアクセス可能です。Windows側からは、NATネットワークで動的に割り当てられたIPアドレス(wsl -e hostname -IでそのIPアドレスを取得可能)を使用してアクセスすることもできます。
画面2 再起動後、WSL 2に「Ubuntu_mailenv.tar」をインポートして開始するだけで、メール送受信環境が利用可能になる
Ubuntu側で次のコマンドラインを実行し、ローカルユーザーを作成すれば、「<ユーザー名>@mylab.test」のメールボックスが準備され、メールの送受信が可能になります(画面3)。