WSLを使ってメーリングリストを作成(番外編)

 実験環境で動作確認した後、本番環境で動かそうとしたところ、次々とトラブルに見舞わされた。

  1. Lightsailで動いていたインスタンスが、Windows Server 2016であった。
    WSLが対応していない。
  2. LightsailのインスタンスをWindows Server 2019にしたが、WSLが古くて、WSLバージョン2が動作しない。
  3. 旧バージョンのwsl.exeは仕様が違って、バックアップ、リストアができないらしい。

Lightsailインスタンスのバージョンアップ

・元サーバーの更新
OS,squid,win-acme,xampp,wordpressなどすべてのモジュールを最新にする。
1度目は、OSのバージョンアップに合わせて、各モジュールが更新されていたので、変動パラメーターが多すぎて問題の原因が絞り込めなかった。
また、xamppはPHP7.4系とした。8系は変更が多くて問題点が絞り込めず、ダウンロード数の多い7系にした。

・移行準備
タスクスケジューラーに追加したタスクをエクスポートしておく

・インスタンスの設定
新しいバージョンのインスタンスを作成する
静的IPを作成して新しいインスタンスにアタッチする
Lightsailコンソールのファイアウォールを忘れずに。ファイアウォールはインスタンスごとに設定する
ローカルIPのアドレスで相互に共有フォルダーC$をマウントしておく
\172.26.xx.xx\C$

・OSの設定
7-Zip、sskuraエディター、WinMergeのインストール
WinMwegeの最新版は2.16.18だったが、フォルダー展開時にカーソルが先頭に移動する不具合があるため2.16.16をインストールした。
システム環境変数
PATHに C:\xampp\ImageMagick\bin を追加
WORDPRESS_BACKUPを環境に合わせて作成

・squidのインストール
前と同じくサービスでは稼働させず、タスクスケジューラーで起動時に実行させる
以下のコマンドで、キャッシュ用のフォルダーを作成させる必要がある。
cd C:\Squid\var\cache\squid ; C:\squid\bin\squid.exe -z -F

・xampp
PHPバージョンが7.4.xのを選んでインストールする。
htdoc以下は、元サーバーからコピーする。
mysqlはdata以下をそのままコピーした。

・wordpress
そのままコピーして動作した

・win-acme
サーバー移行手段が、ホームページにMigrationとして記述がある。
https://www.win-acme.com/manual/migration
暗号化されている設定ファイルを元サーバーで復号化し、新サーバーでサーバーの暗号化機能を使って暗号化すればいいらしい。

サーバー証明書を移転する方法
単純にコピーするだけでは、以下のエラーが出て、Orders下のファイルが削除されてしまう。
[EROR] Unable to decrypt configuration value, may have been written by a different machine.
メインメニューで、O ;More options…、M: Enctypt/decrypt configurationを選ぶと、以下のメッセージが表示されるのでそれに従って移行作業を行う。

1.古いマシンで、EncryptConfig設定をfalseに設定する
C:\xampp\tools\win-acme\settings.json のEncryptConfigをtrueからfalseにする

2.win-acmeの設定ファイルを復号化する
win-acme.exeのメインメニューから、o m と入力し、yを入力する
この時、without encryptionとなっていることを確認する
Current EncryptConfig setting: False
Save all renewal files without encryption? (y/n) - yes 

3.データファイルを新しいマシンにコピーする
%ProgramData%\win-acme\ および settings.jsonを含むwin-acmeのフォルダーをコピーする
 謎だったSecret.jsonというファイルが作成されているので、一緒にコピーしておく 

4.新しいマシンで、EncryptConfig設定をtrueに設定する C:\xampp\tools\win-acme\settings.json のEncryptConfigをfalseからtrueにする 

5.win-acmeの設定ファイルを暗号化する
win-acme.exeのメインメニューから、o m と入力し、yを入力する
 この時、with encryptionとなっていることを確認する
 Current EncryptConfig setting: True Save all renewal files with encryption? (y/n) - yes

6.サーバー証明書の更新を行う
win-acmeでの証明書更新予定がこの日からにリセットされる。そのため、証明書の期限までに更新されないことがあるので、必ず更新を行う

WSLのインストール

参考にしたページ

ttps://docs.microsoft.com/en-us/windows/wsl/install-manual

サーバーマネージャーで機能-Windows Subsystem for Linuxを有効にする

管理者権限でPowerShellを開き、以下を実行する

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Windowsを再起動する

以下から、WSLの更新プログラムをダウンロードして実行する
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

ディストリビューションをダウンロードする
 以下のリンクの下の方にあるDownloading distributionsのところにあるリンクからUbuntuののディストリビューションファイルをダウンロードする。
https://docs.microsoft.com/en-us/windows/wsl/install-manual

ダウンロードしたCanonicalGroupLimited.UbuntuonWindows_2004.2021.825.0.AppxBundleを
そのまま7-Zipで開く。開けないときは拡張子をzipに変えてから開く。

その中にある以下のファイルをC;\WSLに展開する。

Ubuntu_2004.2021.825.0_x64.appx

C:\WSL\Ubuntu\Ubuntu.exeを実行する。

インストールが始まり、しばらくするとユーザー名を聞いてくる。

・アンインストール

wslconfig.exe でディストリビューションUbuntuを削除する
WSLの更新プログラムをプログラムと機能からアンインストールする
管理者権限でPowerShellを開き、以下を実行する

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

サーバーマネージャーではWindows Subsystem for Linuxを無効にできないみたい
C:\WSL\Ubuntuを削除する
 削除できないフォルダーが残ったら、DOSデバイスパス指定で削除する

・Ubuntu設定

viで画面が真っ黒になった。

ターミナルタイプが環境変数TERMに設定されている
 $ env TERM=xterm-256color 
デフォルトのansiに変えておくように.bash_aliasesに追加しておく
   export TERM=ansi

・バックアップ/リストア

wsl.exeには機能が存在しないらしい。

C:\WSL\Ubuntuを丸ごとバックアップ、削除してコピーすれば行けるかもしれない。行けないかもしれない。

戻すときは、welconfig.exe でディストリビューションUbuntuを削除するしてからやるといいかもしれない。

動作

まだ長時間動かしたわけではないが、バックアップやリストアができないだけで、mailmanの動作自体には問題が無く、メーリングリストが運用できているようだ。