WSL2 メモ

WSL2に関するメモ

[!NOTE] 改訂版があります。

インストール

WSL2のインストール

参考: WSL2をインストールしてみた

Virtualboxとの共存

参考: Vagrant + Virtualbox 6.1.16 と WSL2 を同時に動かしたメモ

セットアップ

アップデート

sudo apt update
sudo apt upgrade 

日本語化

# 日本語ランゲージパック
sudo apt -y install language-pack-ja
# ロケールの設定
sudo update-locale LANG=ja_JP.UTF8
# 日本語manページのインストール
sudo apt -y install manpages-ja manpages-ja-dev

BEEPを消す

鬱陶しいのでBEEPを消しておく。
参考: Bash on Windowsでビープ音を消す方法

[!NOTE] WindowsTerminalの場合、settings.jsonに各プロファイルの設定に 以下の設定を追加すればbash、vim、その他一括して変更できる。

 "bellStyle" : "visual",

デフォルトshをbashに変更

cd /bin
sudo ln -sf bash sh

ツール類インストール

sudo apt install net-tools

作業ディレクトリの作成

sudo mkdir /proj /work
sudo chown `whoami`:`whoami` /proj /work

pyenvのインストール

参考:pyenvのインストール

nodenvのインストール

参考:nodenvのインストール

.bashrcの設定

# プロンプトの設定
PS1="\[\e[36m\]$WSL_DISTRO_NAME\[\e[0m\]:\w\$ "

# キーバインドの設定
bind '"\C-n": history-search-forward'
bind '"\C-p": history-search-backward'

# ディレクトリスタックの表示改善
function pushd() {
    command pushd $* > /dev/null
        command dirs -v
}
function popd() {
    command popd $* > /dev/null
        command dirs -v
}
function dirs() {
    command dirs -v
}

# 表示色変更
export LS_COLORS='di=01;32:ln=01;36:ex=01;31:'
export GREP_COLORS='mt=01;31:ml=:cx=:fn=01;32:ln=32:bn=32:se=36'

# lessのオプション
export LESS="-iMR"

# for pyenv
export PYENV_ROOT=/proj/.pyenv    #環境に合わせて修正してね
if [ -e $PYENV_ROOT ]; then
    export PATH=$PYENV_ROOT/bin:$PATH
    # 仮想環境名をプロンプトに表示しない場合は以下を有効化
    export VIRTUAL_ENV_DISABLE_PROMPT=1
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    export PYTHON_CONFIGURE_OPTS="\
     --enable-shared\
    "
fi

# for nodenv
export NODENV_ROOT=/proj/.nodenv    # 環境に合わせて修正してね
if [ -e $NODENV_ROOT ]; then
    export PATH=$NODENV_ROOT/bin:$PATH
    eval "$(nodenv init -)"
fi

# DISPLAY変数が未定義(MobaXterm使用でない)ならDISPLAYを設定する
if [ -v $DISPLAY ]; then
    export DISPLAY=192.168.78.200:0.0
fi
echo DISPLAY="$DISPLAY"

起動時の初期ディレクトリをホームディレクトリにするための設定

起動時の初期ディレクトリがホームディレクトリにならないので(SSHの場合は大丈夫なはず)、以下の方法で指定する。

Windows TerminalのSetting.jsonでの設定

Windows Terminal + WSLでターミナル起動時のディレクトリをホームディレクトリにする

wt.exeのコマンドラインで指定する場合

settings.jsonで設定してない場合や設定とは別のディレクトリを指定する場合は-dオプションで指定する。
ホームディレクトリを指定する場合は以下。

C:\Users\<<ユーザ名>>\AppData\Local\Microsoft\WindowsApps\wt.exe -p "«環境登録名»" -d "\\wsl$\«仮想環境名»\home\<<ユーザ名>>"

※ -p で指定するのは仮想環境名ではなく、WindowsTerminal に登録した環境名(ドロップダウンリストに表示される名前)。 -d で指定するのは仮想環境名。同一でない場合は間違えないように注意。

wsl コマンドで起動する場合

使用中のターミナルを使って起動する場合はwslコマンドで起動する。

c:\WINDOWS\system32\wsl.exe ~ -d "仮想環境名"

※ wsl コマンドのパラメータに ~ を追加

PATHにWindowsのPATHを引き継がせない設定

仮想マシン起動語、PATHにWindows環境のPATHが引き継がれる。
便利な半面、コマンド名補完でサーチに行くと かなりの時間をくってしまい 不便。
Windowsのコマンドを仮想マシン上から起動することはあまりない(私の場合)ので、、
Windows環境のPATHを引き継がせないようにする。

設定方法は /etc/wsl.conf に 以下の設定を追加する。

[interop]
appendWindowsPath = false

参考: WSL2でWindowsのPATH設定が引き継がれるのを解除する

GUIアプリを使用する

参考: WSL2でGUIアプリを起動

WSL2上のサーバプログラムへのアクセス

参考:Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能

向き 可否
HOST → WSL2 localhost でアクセスできる
WSL2 → HOST localhost でアクセスできない。
IPアドレス指定ならアクセスできる。

仮想マシンの複製

手順

仮想マシンは元になる仮想マシンをエクスポートして、別のディレクトリにインポートすれば複製できる。

仮想マシン一覧の確認

wsl --list --verbose

対象の仮想マシンが停止していることを確認。
停止してない場合はそれぞれのターミナルを終了するか、以下のコマンドで。
ターミナルを終了してから実際に仮想マシンが停止するまで少し時間がかかる(数十秒くらい?)。

wsl --terminate «対象の仮想環境名»

エクスポート

wsl --export «エクスポート元仮想環境名» «エクスポートファイル名».tar

wsl --export Ubuntu-20.04 F:\WSL_VMs\_Backup\Ubuntu-20.04.tar

インポート

wsl --import «新しい仮想環境名» «インストール先ディレクトリ» «エクスポートファイル名».tar

※ インストール先ディレクトリは自動で作成される

例:

wsl --import Ubuntu-20.04-1 ./Ubuntu-20.04-1 .\_Backup\Ubuntu-20.04.tar

削除

不要になった仮想環境は削除する。

wsl --unregister «削除する仮想環境名»
wsl --unregister Ubuntu-20.04-2

参考

インポートした環境のデフォルトユーザを変更する

インポートした環境では、デフォルトユーザがrootになっているため、自分に変更しておく。
方法は2つ。 /etc/wsl.confのほうがお手軽かな? エクスポート元で書いておけば逐一書かなくてもいいし。
両方設定した場合は/etc/wsl.confの設定が優先される(らしい)。

参考:WSLでCentOS/Fedoraを利用する - roy-n-roy メモ

なんかのときに使うかも

試してないけど、メモっておく。

PS: XXXX> diskpart                                                 ← コマンド起動

Microsoft DiskPart バージョン 10.0.19041.964

Copyright (C) Microsoft Corporation.
コンピューター: XXXXXX

DISKPART> select vdisk file="f:\WSL_VMs\openvino_2021_3\ext4.vhdx" ← 圧縮したいvhdxファイル

DiskPart により、仮想ディスク ファイルが選択されました。

DISKPART> detail vdisk                                             ← 縮小前の状態確認

デバイスの種類 ID: 0 (不明)
ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
状態: 追加済み
仮想サイズ:  256 GB
物理サイズ:   20 GB
ファイル名: f:\WSL_VMs\openvino_2021_3\ext4.vhdx
子: いいえ
親ファイル名:
関連付けられたディスク番号: 見つかりません。

DISKPART> compact vdisk                                            ← 縮小の実行

  100% 完了しました                       ← ちょっと時間がかかる

DiskPart により、仮想ディスク ファイルは正常に圧縮されました。

DISKPART> detail vdisk                                             ← 縮小前の状態確認

デバイスの種類 ID: 0 (不明)
ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
状態: 追加済み
仮想サイズ:  256 GB
物理サイズ:   12 GB                      ← 小さくなった
ファイル名: f:\WSL_VMs\openvino_2021_3\ext4.vhdx
子: いいえ
親ファイル名:
関連付けられたディスク番号: 見つかりません。

DISKPART>exit                                                      ← 終了