ねじまきまきまき -Random Note-

やったこと忘れないための雑記

WSL2を使ってみる

やりたいこと

サーバーを直接扱うでもいいんだけど、WSL2(LinuxWIndowsサブシステム)があったなぁって思い出したので、そろそろWindows内に環境を作ってみようという感じ。
遊ぶための環境って意味合いもあるけど、Docker Desktopを使用するためにセットアップが必要だったっていうのが大きい。
デフォルトのubuntuを使用する前提。

インストール用ドキュメント

代替はマイクロソフトのドキュメントを見れば問題なくセットアップは完了する。
Windows Subsystem for Linux に関するドキュメント | Microsoft Docs

WSLとWSL2の違い

違いとしてはここを見ればいい。
WSL 1 と WSL 2 の比較 | Microsoft Docs

WSLインストール

書いてある通り、コマンド1個でインストールまで完了する。
WSL のインストール | Microsoft Docs

sudo時にパスワード不要設定

とりあえず更新とかいろいろやっていくことになるけど、そのためにsudoが必要になってくるけど、わざわざパスワードを打ち込むのも面倒なので、sudoersの設定をやってあげることにする。
sudo時のパスワード入力を省略する【ubunutu/CentOS】 - F27P

更新

インストール直後だとWIndowsセットアップ直後みたいに、いろいろ更新作業が必要になる状態になっているので、手動で更新してあげる。
Windowsみたいに自動更新はないので、手動で更新するか、自動更新を仕込む必要がある。
とはいえ、メンドクサイノデ手動で十分だと思う。
Ubuntu のアップデート方法 - Qiita

日本語化

セットアップ直後は言語設定がデフォルトなので日本語では表示してくれない。
そのままでもいいけど、せっかくなので設定してみる。
WSL2のUbuntu 20.04を日本語化する - Qiita

ssh接続

Windows Terminalで使うだけならそこまで重要じゃないけど、Visual Studio CodeとかTeratermといったものでの接続を想定すると、ssh接続を行うのがよい。
そのための設定を行う。
といってもこの辺りはよくあるいつもの流れ。
WSL2のUbuntuにSSH(公開鍵/秘密鍵)で接続する - Qiita

WSLでsystemctlを使用する場合

WSLではMS製のinitが動いているらしく、systemctlでサービスの管理が行えない。
このままだとsshdをいちいち起動してあげないと使えないといったこともあるので、そのあたりが面倒であればwsl.confを使ったり、代替のsystemctlを入れる必要がある。

wsl.confを使用する場合

wsl.confで起動時にサービスを自動起動する設定が行える。
ただしこれは今のところWindows11でしか使用できないため、Windows10でこの設定を行うことは出来ない。
WSL での詳細設定の構成 | Microsoft Docs

systemctlでサービスの管理を行うためにはこれが詳しい。

wsl.confで制御出来ないのでwslコマンドのオプションで起動時にサービス開始するようにすることもできるが、それはそれでめんどくさいこともあるので、systemd代替のサービスを使用することで解決できる。
Windows 10 or 11 (WSL2)のUbuntuでsystemctlを利用する方法(systemdをPID1で動作させる方法) | Snow System

wslコマンドオプションで自動起動させる

wslコマンドでディストリビューションを起動させるようにすればサービスの起動も行える。

wsl --help
Copyright (c) Microsoft Corporation. All rights reserved.

使用法: wsl.exe [Argument] [Options...] [CommandLine]

Linux バイナリを実行するための引数:

    コマンドラインを指定しない場合、既定のシェルが起動され wsl.exe ます。

    --exec、-e <CommandLine>
        既定の Linux シェルを使用せずに、指定したコマンドを実行します。

    --
        残りのコマンドラインをそのまま渡します。

オプション:
    --cd <Directory>
        指定したディレクトリを現在の作業ディレクトリとして設定します。
        ~ が使用されている場合は、Linux ユーザーのホームパスが使用されます。パスが始まる場合
        文字が含まれている場合は、Linux の絶対パスと解釈されます。
        それ以外の場合、この値は Windows の絶対パスである必要があります。

--分布、-d <Distro>
        指定したディストリビューションを実行します。

    --ユーザー、-u <UserName>
        指定されたユーザーとして実行します。

Windows Subsystem for Linux を管理するための引数:

    --ヘルプ
        使用方法に関する情報を表示します。

    --install [Options]
      追加の Windows Subsystem for Linux ディストリビューションをインストールします。
      有効なディストリビューションの一覧を表示するには、'wsl--list--online' を使用してください。

        オプション:
            --distribution, -d [Argument]
                名前を指定して配布をダウンロードしてインストールします。

                引数:
                   有効なディストリビューション名 (大文字と小文字は区別されません)。

                例:
                    wsl --install -d Ubuntu
                    wsl --install --distribution Debian

    --set-default-version <Version>
         新しいディストリビューションの既定のインストールバージョンを変更します。

    --shutdown
        直ちに、すべての実行中の配布および WSL 2
 軽快なユーティリティの仮想マシンを終了します。

    --status
        Linux の Windows Subsystem の状態を示します。

    --update [Options]
        オプションが指定されていない場合、WSL 2 カーネルは更新され
 、最新バージョンになります。

        オプション:
            --rollback
                以前のバージョンの WSL 2 カーネルに戻します。

Windows Subsystem for Linuxのディストリビューションを管理するための引数:

    --export <Distro> <FileName>
        ディストリビューションを tar ファイルにエクスポートします。
ファイル名には、標準出力として - を使用できます。

    --import <Distro> <InstallLocation> <FileName> [Options]
        指定した tar ファイルを新しいディストリビューションとしてインポートします。
ファイル名には標準入力として - を使用できます。

        オプション:
            --version <Version>
                新しいディストリビューションに使用するバージョンを指定します。

    --list, -l [Options]
        ディストリビューションの一覧を表示します。
        オプション:
            --all

                現在実行中のディストリビューションのみを表示します。
            --quiet, -q
                ディストリビューション名のみを表示します。

            --verbose, -v
                すべてのディストリビューションに関する詳細な情報を表示します。

            --online, -o
                'wsl --install' を使用してインストールするために使用できるディストリビューションの一覧を表示します。

    --set-default, -s <Distro>
       ディストリビューションを既定として設定します。

    --set-version <Distro> <Version>
        指定されたディストリビューションのバージョンを変更します。

    --terminate, -t <Distro>
        指定されたディストリビューションを終了します。

    --unregister <Distro>
        ディストリビューションの登録を解除し、ルートファイルシステムを削除します。

これを利用することになる。
以下はディストリビューション名がUbuntuである場合にsshサービスをディストリビューション起動時に起動させる方法。

wsl -d Ubuntu -- sudo service ssh start