Windows Subsystem for Linux(WSL2)

コンピュータ
コンピュータ

Windows Subsystem for Linux は Windows 上で Linux を動かせる Windows サブシステムです。
現在、WSL1 と WSL2 が存在ます。ここでは WSL2 の説明になります。

Windows Subsystem for Linux に関するドキュメント
Linux 用 Windows サブシステムに関するドキュメントの概要。

インストール

  1. Windows の機能の有効化または無効化の下記をチェック。

    「Linux 用 Windows サブシステム」
    「仮想マシン プラットフォーム」


  2. 再起動します。

  3. WSL2 Linux カーネル更新プログラムパッケージをダウンロードしてインストールします。
    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  4. バージョン設定
    PowerShell から下記コマンド実行

    PS> wsl --set-default-version 2
  5. Microsoft Store から「Linux」で検索するとさまざまな Linux が表示されます。

    ディストリビューション一覧

    Ubuntu 16.04 LTS
    Ubuntu 18.04 LTS
    Ubuntu 20.04 LTS
    openSUSE Leap 15.1
    SUSE Linux Enterprise Server 12 SP5
    SUSE Linux Enterprise Server 15 SP1
    Kali Linux
    Debian GNU/Linux
    WSL のための Fedora リミックス
    Pengwin
    Pengwin Enterprise
    Alpine WSL


    この中から好きなディストリビューションを選択しインストールします。

    winget の場合※Debian

    PS> winget install Debian.Debian
  6. インストール後起動し、ユーザ名・パスワードを設定します。

    起動はスタートメニューもしくはコマンドプロンプトや PowerShell から実行できます。

    PS> debian

    ※終了はexit

  7. バージョンの確認
    PowerShell から下記コマンド実行

    PS> wsl -l -v
     NAME      STATE           VERSION
    * Debian    Running         2

設定例

wslconf

WSL の起動設定を wslconf で行います。

sudo vi /etc/wsl.conf

[automount]
options = "metadata,umask=22,fmask=11"

Linux 側から Windows のファイルを参照するとパーミッションが 777 になってしまうので、wslconf の設定で変更します。

その他設定は以下を詳細してください。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config

変更後は WSL を再起動します。
PowerShell から停止コマンドを実行します。

PS> wsl -t Debian

日本語設定

sudo sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen
sudo locale-gen
sudo update-locale LANG=ja_JP.UTF-8
export LANG=ja_JP.UTF-8

パッケージアップグレード

sudo apt update
sudo apt upgrade -y

基本パッケージインストール

sudo apt install -y bash-completion curl dnsutils git jq locales nfs-client rsync ssh tree unzip vim wget zip fonts-ipafont

Node.js

sudo apt install -y nodejs npm
sudo npm install n -g
sudo n stable
sudo apt purge -y nodejs npm
exec $SHELL -l
node -v

SSH

Windows 側をリンク。

mkdir /mnt/c/Users/ユーザ名/.ssh
ln -s /mnt/c/Users/ユーザ名/.ssh ~/.ssh

鍵作成

ssh-keygen -t rsa -b 4096 -C ""

SSH Config

mkdir ~/.ssh/conf.d

vi ~/.ssh/config

# VS CODE Wildcards don't supported
Include ~/.ssh/conf.d/**/config

Host *
    IdentitiesOnly yes
    TCPKeepAlive yes
    ServerAliveInterval 60
    ServerAliveCountMax 10
chmod 600 ~/.ssh/config

ssh-agent

wget https://github.com/rupor-github/wsl-ssh-agent/releases/download/v1.5.2/wsl-ssh-agent.zip
unzip wsl-ssh-agent.zip -d wsl-ssh-agent
mv wsl-ssh-agent /mnt/c/
rm wsl-ssh-agent.zip

ssh-agent 起動

管理者権限で PowerShell を起動。

PS> Set-Service ssh-agent -StartupType Automatic
PS> Start-Service ssh-agent

Windows ショートカット作成

C:\wsl-ssh-agent\wsl-ssh-agent-gui.exe -socket C:\wsl-ssh-agent\ssh-agent.sock

ショートカット登録
Windows 実行で登録します。

shell:startup

WSL2の場合
https://github.com/rupor-github/wsl-ssh-agent#wsl-2-compatibility

sudo apt install socat

vi ~/.bashrc

export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
    rm -f $SSH_AUTH_SOCK
    ( setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/wsl-ssh-agent/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork & ) >/dev/null 2>&1
fi
chmod 755 /mnt/c/wsl-ssh-agent/npiperelay.exe

Bash 設定

vi ~/.bashrc

alias ls='ls -F --color=auto'
alias ll='ls -AlF --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

alias explorer='explorer.exe'
alias cdw='cd $USERPROFILE'

vi ~/.profile

USERPROFILE_RAW="$(/mnt/c/Windows/System32/cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null)"
export USERPROFILE="$(wslpath $USERPROFILE_RAW)"

反映

source ~/.bashrc
source ~/.profile

Git

git config --global user.name "name"
git config --global user.email name@email
git config --global credential.helper store
git config --global core.filemode false

その他

ファイルアクセス

Windows の C ドライブは、WSL1 の/mnt/cにマウントされています。
※WSL2 から Windows へのアクセスは異常に遅いです。

Windows からは\\wsl$\からアクセスできます。

コメント

タイトルとURLをコピーしました