Chapter 06無料公開

WSL2スタートアップ

ArkBig
ArkBig
2022.05.14に更新

Windows向けの付録的なWSL2起動バッチについての章です。関係ない人は次のTraefikでのTLSリバースプロキシにどうぞ。

WindowsのWSL2はマシン再起動時にdockerdなどのサービスが自動起動してくれません。
そのため、デーモン起動などのPC開始時に欲しいWSL2関連の機能を、Windows側のタスクスケジューラへ登録します。

本節はarkbig/devbaseリポジトリのwsl2フォルダの説明になります。

https://github.com/arkbig/devbase

スタートアップ登録バッチの説明

WSL2用ファイル
📂 devbase/
└── 📂wsl2/
    ├── 📄.wsl_env.bat(コピーして作る)
    ├── 📄wsl_assign_ip.bat         # WSL2に固定IPアドレス付与
    ├── 📄wsl_dockerd.bat           # dockerd起動
    ├── 📄wsl_env.bat               # 各種バッチファイルの挙動変更
    ├── 📄wsl_port_forwarding.bat   # WSL2へのポートフォワーディング
    ├── 📄wsl_sshd.bat              # sshd起動
    ├── 📄wsl_startup_helper.bat    # タスクスケジューラー登録バッチ
    └── 📄wsl_startup.bat           # ほかのバッチを呼び出す

まず個人設定用にwsl_env.batを.wsl_env.batへコピーします。

cp wsl2/wsl_env.bat wsl2/.wsl_env.bat

wsl_env.batの先頭で、.wsl_env.batがあれば先に処理し、そちらを優先するようにしています。
必要に応じて.wsl_env.batを変更してください。
なおすでに設定されている環境変数があれば、これらファイルより優先されます。

https://github.com/arkbig/devbase/blob/main/wsl2/wsl_env.bat

特に確認が必要なものはDNSMASQ_SERVERWSL2_PORT_FORWARDING_LISTです。

DNSMASQ_SERVERはWSL2で使う代替DNSサーバーを指定します。これはdnsmasqサービスの$DNSMASQ_SERVER環境変数と同じ値になるでしょう。
ちなみに優先DNSサーバーはdnsmasqサービスを使うため、%DNSMASQ_ADDR%に設定されます。

WSL2_PORT_FORWARDING_LISTはWindowsマシン外からWSL2へポートフォワーディングする対象のポート番号を列挙します。
デフォルトでは22番ポート(ssh)を公開して、他マシンからSSHログインできるようにしています。
不要な場合は" "空白(区切り文字)を設定してください。

また各自の環境で実行したいサービスなどあれば、wsl2フォルダにバッチファイルを用意してWSL2_STARTUP_LISTに列挙してください。
逆に不要なものがあれば、削除すれば実行されなくなります。

タスクスケジューラ登録

WSL2からwsl_startup_helper.batをWindows側にコピーして、WSL2側のフォルダをエクスプローラーで開いておきます。

# コピー先は好きな場所
cp wsl2/wsl_startup_helper.bat /mnt/c/Users/$USER/bin/
# .exeの拡張子まで書く
explorer.exe wsl2

このコピーしたwsl_startup_helper.batに、エクスプローラーで開いたフォルダにあるwsl_startup.batのパス(\wsl$\Ubuntu-20.04...\wsl_startup.batみたいなの)を渡して起動するように、タスクスケジューラへ登録します。

  1. スタートメニューから「タスクスケジューラ」を起動
  2. 左の階層からタスクを作成するフォルダを選ぶ(WSL2というフォルダを作ってもいい)
  3. 右の操作から「タスクの作成」を選ぶ
  4. 「全般」タブの設定
    1. 名前「WSL2 startup」など好きなのをどうぞ
    2. 「最上位の特権で実行する」にチェックを入れる
  5. 「トリガー」タブの設定
    1. 「新規」を選ぶ
    2. タスクの開始を「ログオン時」にする
    3. 「特定のユーザー」で自分を選ぶ
    4. 「有効」だけチェックのまま
  6. 「操作」タブの設定
    1. 「新規」を選ぶ
    2. 操作「プログラムの開始」を選ぶ
    3. プログラム/スクリプトの参照から先ほどコピーしたwsl_startup_helper.batを選ぶ
    4. 引数の追加は先ほど表示したエクスプローラーにあるwsl_startup.batをShiftキーを押しながら右クリックでパスのコピーしてペーストする
    5. 開始は空のまま(実行時の作業フォルダを指定したければ設定)
  7. 「条件」タブの設定
    1. 好きにしてください。AC電源中のみ実行にすればノートPCのバッテリーが長持ちするかも?
  8. 「設定」タブの設定
    1. 「タスクを要求時に実行する」にチェックを入れる
    2. 「タスクが失敗した場合の再起動間隔」を1分間にする
    3. 「再起動試行の最大数」を3回くらいにする
    4. 後はお好みで(デフォルトのままでいいでしょう)
  9. 「OK」を押すとタスクが作成されます

試しに作成したタスクを実行して問題がなければ再起動を試してください。

なお、wsl_startup_helper.batはセルフ更新機能を持っています。(たまに失敗する)
git pullなどでWSL2側のwsl_startup_helper.batが更新された場合、自動でWindows側にコピーして新しいファイルで実行できます。
差分があった場合はdiffの表示のあと、更新するか尋ねますのでそのままEnterを押すとコピーします。
もし「n」など「Y」「y」以外の文字を入れた場合はコピーせず、現在のファイルで実行を続行します。