セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.21 WSL 2(Ubuntu)に、構成済みメール環境を組み込む(前編)
2024年06月24日配信
2024年08月02日更新
執筆者:山内 和朗
前回は、作成済みのクローズドなメール送受信環境のイメージ「Ubuntu_mailenv.tar」を、Windows Server 2022のWSL 2環境に簡単に導入できるというデモを先に見ていただきました。今回は皆さんが興味を持たれたであろう「Ubuntu_mailenv.tar」の作り方を紹介します。まったく同じように操作すれば出来上がるので、難しいことは何もありません。ただし、vi(またはvim)エディターを使用できることが前提です。vi(vim)の使い方までは説明しません。
最初に、WSL 2上に構築するクローズドなメール送受信環境の実装イメージを、もう一度確認してください。前回は既に完成した「Ubuntu_mailenv.tar」(約1.2GB)を、まっさらなWindows Server 2022環境にインポートし、あっという間にローカルで利用できるメール送受信環境を準備できることをデモで示しました。今回は、図2の紫の点線部分を構築し、構成済みの状態、赤の点線部分をtar形式にエクスポートし、それを成果物とします。Linuxディストリビューションとしては「Ubuntu」(WSL 1およびWSL 2の既定)を使用していますが、別のLinuxディストリビューションで構築することも可能だと思います。
図1 WSL 2で実現する、クローズドなメール送受信環境。紫の点線部分の環境を構築し、赤の点線部分を成果物としてエクスポート
システム要件は前回と同じです。WSL 2を利用可能なWindows 10/11またはWindows Server 2022デスクトップエクスペリエンスの環境を用意してください。
操作を誤ったり、期待通りに動作しなかったりすることに備えて、Hyper-V仮想マシン(VM)など、チェックポイントを作成可能な仮想環境で構築することをお勧めします。Hyper-V VMやAzure VMを利用する場合は、WSL 2をサポートするために、入れ子になった仮想化(Nested Virtualization)が有効になっている必要があります。今回は、Azure上に構築したラボ環境を利用しています。
まず、WSL 2のコンポーネントとUbuntuディストリビューションをインストールします。また、ポートの接続性の確認のために、Telnetクライアントもインストールしておきます。Telnetクライアントは必須ではありませんが、送信メールサーバー、受信メールサーバーとの接続性を確認するのに、あると便利です。
Windows Server 2022デスクトップエクスペリエンスの場合は、Windows PowerShell(powershell.exe)を管理者として開き、次のコマンドラインを実行してください(ローカルのAdministratorアカウントでログインしている場合は、管理者としてウィンドウを開く操作は不要です)。WSL 2のコンポーネントのインストールを完了するには、OSの再起動が必要です(画面1)。
PS C:¥> Install-WindowsFeature -Name Telnet-Client PS C:¥> wsl --install -d Ubuntu PS C:¥> shutdown /r /t 0 |
画面1 Telnetクライアントと、WSL 2(Ubuntu)をインストールする
Windows 10の場合は、Windows PowerShell(powershell.exe)を管理者として開き、次のコマンドラインを実行してください。
PS C:¥> Enable-WindowsOptionalFeature -Online -FeatureName TelnetClient PS C:¥> wsl --install -d Ubuntu PS C:¥> shutdown /r /t 0 |
再起動が完了し、ログインすると、Linuxディストリビューションのダウンロードとインストールが始まり、それが完了するとLinuxディストリビューションが起動します。初回起動時に「Enter new UNIX username:」というプロンプトが表示されるので、お好みのユーザー名(この例ではwsluser)とパスワードを設定してください。パスワードが設定されると、Linuxのシェル(bash)に接続されます(画面2)。
画面2 Linuxで使用するローカルアカウントのユーザー名とパスワードを設定すればLinuxディストリビューションのインストールは完了
WSL 2にはグローバル設定とLinuxディストリビューションごとのローカル設定を行うことが可能です(参考→「WSLでの詳細設定の構成」≪外部サイト≫)。別のコンピューターでも共通のメール送受信環境を維持できるように、ローカル設定のための「/etc/wsl.conf」を作成し、設定します。
Linuxシェルで次のコマンドラインを起動し、vi(またはvim)エディターで/etc/wsl.confを新規作成します。
$ sudo vi /etc/wsl.conf |
/etc/wsl.confには、次のように記述します。
[user] default=wsluser [network] hostname=mailsv [boot] systemd=true |
[user]の指定は、エクスポート/インポート後にrootでログオンされるのを防止します。Linuxディストリビューションのインストール時に指定したユーザー名(この例ではwsluser)を記述してください。[network]ではホスト名(hostname)を指定しています。WSL 2の既定では、Windowsのコンピューター名がLinux側から見える自分のホスト名になります。ホスト名を明示的に指定することで、別のコンピューターにインポートしたときも、このホスト名(この例ではmailsv)が維持されます。[boot]では、WSL 2でsystemdのサポートを有効化するものです。これは、postfixやdovecotのサービスの制御に必要です。
/etc/wsl.confの編集が完了したらファイルを保存し、exitコマンドでLinuxシェルから切断します。/etc/wsl.confの変更を反映するために、Linuxディストリビューションを完全に終了し、再び開始します。Linuxシェルに接続されると、プロンプトが「ユーザー名@指定したホスト名(wsluser@mailsv)」のように変更されているはずです(画面3)。
C:¥> wsl -l -v C:¥> wsl --terminate Ubuntu C:¥> start wsl |
画面3 /etc/wsl.confを作成し、Linuxディストリビューションを再起動して、設定が反映されたことを確認する
今回はここまで。Linuxディストリビューションは明示的に終了する必要はありませんが、いつでもこの状態にロールバックできるよう、標準チェックポイントを作成しておきましょう(Hyper-V VMの場合)。次回、postfixとdovecotのインストールと、最も重要なこれらの環境設定を行います。
WSL 2では、Linux側からは「/mnt/ドライブ文字(/mnt/cなど)」のパスでWindowsのファイルシステムにアクセスすることができ、Windows側からは「¥¥wsl$(またはwsl.localhost)¥ディストリビューション名(¥¥wsl$¥Ubuntuなど)」のUNCパスでLinux側のファイルシステムのルートにアクセスすることができます。この機能を利用すれば、Linux側から設定ファイルをWindows側に呼び出して編集することができます(画面5)。
アクセス許可の関係でWindows側からLinux側のファイルを直接変更(上書き保存)することはできません。一時フォルダー(Linux側の¥¥wsl$¥Ubuntu¥tmpなど)経由で設定ファイルをやり取りするなど工夫してください。ただし、Windows側のメモ帳などで“新規”に作成した設定ファイル(ANSIまたはUTF-8)は、改行文字の違い(WindowsはCRLF、LinuxはLF)が原因で正しく設定として読み込まれない場合もあることに注意してください。
/etc/wsl.confが正にそうなります。次のように操作すれば、適切な形式でwsl.confを新規作成し、Windows側のメモ帳で編集し(Linux側からもWindowsアプリケーションを起動することができます!)、上書き保存して、その内容を/etc/wsl.confに反映することができます。
$ cd /tmp $ echo [user] > ./wsl.conf $ notepad.exe ./wsl.conf $ sudo sh -c "cat /tmp/wsl.conf > /etc/wsl.conf" |
画面4 Windowsのメモ帳を使用してwsl.confを編集し、Linuxの/etc/wsl.confに反映する