WSLのセットアップ
このページではWSLのセットアップ手順を示します。必要に応じてWindows Subsystem for Linux Installation Guide for Windows 10も合わせて参照してください。
前提条件
Windows 10 Pro Version 2004+
WSLのインストールとWSL 2への切り替え
管理者権限でPowerShellを起動し、以下のコマンドを実行します。
code:enable WSL
PS > dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
code:enable Virtual Machine Platform
PS > dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
コマンドが正常終了したらマシンを再起動します。再起動完了後、WSL 2 を既定のバージョンとして設定します。
code:set default version
PS > wsl --set-default-version 2
code:Lists distributions
PS > wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop-data Running 2
docker-desktop Running 2
Ubuntu LTSのインストール
Microsoft StoreよりUbuntu LTSの最新版を入手します。起動すると初回のみアカウント設定を求められるため指示に従います。
Ubuntu LTSの初回作業
パッケージリストを最新の状態に更新後、最新バージョンにアップグレードします。
$ sudo apt update && sudo apt upgrade
(Optional) マルチバイト文字を取り扱うシェルスクリプトを正常に動作させるため、ロケールをデフォルトのC.UTF-8からen_US.UTF-8に変更します。
$ sudo update-locale LANG=en_US.UTF-8
ref:
LC_ALL=C.UTF-8 は安全か
ロケール(locale)まとめ
ロケール
Server locale C vs en_US.UTF-8
Difference between C.utf8 and en_us.utf8?
シェルスクリプトでマルチバイト文字の文字数を確認する際の注意事項(おまけでJSTなど)
Windows Terminalのインストール
ターミナル操作用にWindows TerminalをMicrosoft Storeから入手します。
Windows Terminalの設定
Windows Terminalを起動し、設定画面を開きます。次に、list内のUbuntuセクションを以下の例のように書き換えます。<user_name>には先ほど作成したアカウント名、Ubuntu-20.04の部分は必要に応じてインストールしたバージョンに書き換えてください。
code:settings.json
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
"copyOnSelect": true,
"profiles":
{
"defaults":
{
// Put settings here that you want to apply to all profiles
"cursorShape": "filledBox",
"fontFace": "Meslo LG S",
"fontSize": 12
},
"list":
[
{
"guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
"hidden": false,
"name": "Ubuntu-20.04",
"commandline": "wsl.exe -d Ubuntu-20.04 -u <user_name>",
"colorScheme": "One Half Dark",
"startingDirectory": "//wsl$/Ubuntu-20.04/home/<user_name>"
},
{
// Make changes here to the powershell.exe profile
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"hidden": false
},
{
// Make changes here to the cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe",
"hidden": false
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": true,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
}
]
},
// Add custom color schemes to this array
"schemes": [],
// Add any keybinding overrides to this array.
// To unbind a default keybinding, set the command to "unbound"
"keybindings": []
}
ref:
What is Windows Terminal?
Windows Terminal (v0.7 ~ v1.0) メモ
WSLの設定
デフォルトではWindows側のファイルシステムが自動でマウントされますが、そのままではパーミッションを制御できないため、メタデータ有効化オプションを指定した/etc/wsl.confを作成します。
$ sudo vim /etc/wsl.conf
code:/etc/wsl.conf
automount
enabled = true
root = /mnt/
options = "metadata,umask=0022"
mountFsTab = true
network
generateHosts = true
generateResolvConf = true # /etc/resolv.conf を自動生成したくない場合は false
interop
enabled = true
appendWindowsPath = false # Windows の PATH を引き継がない
この設定内容を反映させるため、PowerShellを起動し次のコマンドでWSLをrebootします。うまくいかない場合はホストマシンごと再起動してください。
code:reboot
# Version 2004+
PS > wsl --shutdown
# Version 1909+
PS > wsl -t Ubuntu-20.04
ターミナルを起動しなおし、メタデータが有効化された状態でマウントされていることを確認します。
code:mount -l
$ mount -l
rootfs on / type lxfs (rw,noatime)
none on /dev type tmpfs (rw,noatime,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,gid=5,mode=620)
none on /run type tmpfs (rw,nosuid,noexec,noatime,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime)
none on /run/shm type tmpfs (rw,nosuid,nodev,noatime)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,noatime,mode=755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,mode=755)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices)
C:\ on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,umask=22,metadata,case=off)
E:\ on /mnt/e type drvfs (rw,noatime,uid=1000,gid=1000,umask=22,metadata,case=off)
ref:
File Permissions for WSL
WSL でマウントしたファイルシステムでもパーミッションを扱えるようにする
wsl.conf と .wslconfig
WSL その27 - WSLがサポートするファイルシステム(後編)・WSLのファイルシステム
umaskの変更
デフォルトではumaskの設定が0000となっているため、0022となるよう/etc/profileを編集します。/etc/wsl.confにumask=0022を指定している場合は不要です。
$ sudo sh -c 'echo "umask 0022" >> /etc/profile'
(Optional) Install peco
pecoで快適なターミナル環境を手に入れる
(Optional) Setup bash prompt
bash promptにgitのブランチ名を表示させる
参考
WSL (Windows Subsystem for Linux)の基本メモ
Windows10 WSL2にLinux居城を爆誕させる
WSL1 から WSL2 の対応
WSL commands and launch configurations
Rebooting Ubuntu on Windows without rebooting Windows?
Where is the Ubuntu file system root directory in Windows Subsystem for Linux and vice versa?
WSLでWindowsのPATHを引き継がないようにする方法
What is Umask and How To Setup Default umask Under Linux?
bash の初期化ファイル .profile, .bashrc, .bash_profile の使い分けと管理方針
Linux append text to end of file
WSL その27 - WSLがサポートするファイルシステム(後編)・WSLのファイルシステム
#Windows #Linux #WSL