2022.03.22
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
wsl2 & Ubuntu の導入
Windows 10 バージョン 2004 以降 (ビルド 19041 以降) または Windows 11
管理者の PowerShell で
wsl --install
もしくは
wsl --install -d Ubuntu
をたたくと、必要なオプション コンポーネントの有効化、最新 Linux カーネルのダウンロード、WSL 2 の既定としての設定、および Linux ディストリビューションのインストールが実行されます。
これは最強すぎる。僕が環境を作ったときはまだこんな All-In-One の便利コマンドがありませんでした。こちら個人的に 0 から試していないです。
以前のバージョン
同じく管理者の PowerShell で
# Linux 用 Windows サブシステムオプション機能の有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestar化
再起動
# 仮想マシン プラットフォームオプション機能の有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
再起動
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージをダウンロードして実行。
Powershell (管理者でなくてよい)で
# WSL 2 に設定
wsl --set-default-version 2
Microsoft Store で Ubuntu 20.04 LTS を入手。
正常に導入できた場合は
wsl -l -v
で
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
が表示される(スターはこのディストリビューションが選択されていることを意味する)。
Ubuntu の設定と docker のインストール
Ubuntu の初回起動
初回の起動はユーザー名とパスワードを設定する必要がある。これは今後の実行ユーザーとなります。僕の場合は dev というユーザーを作りました。
以降 Windows Terminal で Ubuntu を扱います。
Ubuntu の設定
まずは先に wsl.conf を作成します。
sudo vim /etc/wsl.conf
https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config
で詳しく書かれていますが、この中で例としてあげられているサンプル wsl.conf ファイルを少し変えて載せます。
# Automatically mount Windows drive when the distribution is launched
[automount]
# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true
# Sets the directory where fixed drives will be automatically mounted.
root = /mnt/
# DrvFs-specific options can be specified.
options = "metadata,uid=1000,gid=1000,umask=022,fmask=11,case=off"
# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched.
mountFsTab = true
# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1).
[network]
generateHosts = false
generateResolvConf = false
# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
enabled = false
appendWindowsPath = false
# Set the user when launching a distribution with WSL.
[user]
default = dev
# Set a command to run when a new WSL instance launches. This example starts the Docker container service.
[boot]
command = service docker start
windows の c ドライブなどは /mnt/ 配下にマウントされますが、間違って rm 走らせると c ドライブまるまる消えるのでご注意を👿。
最後の command の設定は windows 11 からですので、会社の PC のだとできないです、残念。後で代替の方法を記します。
一度 powershell で wsl –shutdown して再度 Ubuntu 立ち上げます。
今度は /etc/resolv.conf を設定します。
sudo vim /etc/resolv.conf
シンボリックリンクが残っている場合は
sudo rm /etc/resolv.conf
sudo vim /etc/resolv.conf
で以下を保存
nameserver 8.8.8.8
これで Google Public DNS で名前解決できるようになりました。
docker-ce をインストール
まず現状の Ubuntu 内のパッケージを最新状態にする。
sudo apt update
sudo apt upgrade -y
次に https 経由のリポジトリに必要なパッケージをインストール
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
Docker’s official GPG key を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
安定版の docker バージョンを取得
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
docker-ce をインストール
sudo apt install docker-ce docker-ce-cli containerd.io
sudo なしで docker コマンド使えるようにする
sudo usermod -aG docker $USER
docker compose をインストール
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
実行権限を与える
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
docker を Ubuntu 立ち上げ時に起動するようにする
windows 11 の場合は上の wsl.conf の設定だけですみますが、そうでない場合は、~/.bashrc の末尾に
if test $(service docker status | awk '{print $4}') = 'not'; then #停止状態
sudo /usr/sbin/service docker start #起動
fi
を記述すればよい。
あとは作業フォルダーを /home/ 配下に置けば、サイトの表示速度が速くなるはず。
Git の設定
git は Ubuntu にすでにインストールされていますので、config とキーを置いていきます。
config は自分の場合は ~/.ssh/config を自動的に読み込まず、/etc/ssh/ssh_config が読み込まれていましたので、
ssh_config に今までの config の内容を記述します。
ここで注意する必要があるのは、Linux だとキーなどのパスの指定がバックスラッシュではなく普通のスラッシュです。
キーは ~/.ssh 配下に置きました。.ssh の権限を 700 、キーの権限を 400 にします。
vscode の対応
vim で開発するのは大変なので、やはり vscode を使いたい!
Extension の Remote Development もしくは Remote – WSL だけでもいいのでインストール。 Remote Development は Remote -WSL を包含しています。
すると vscode が直接 wsl 内を読むようになります。Git Lens や Git Graph も Install in WSL でリモート状態で使えるようになります。
その他
Ubuntu を少しおしゃれにしたい人は Oh My Posh 入れてもいい。僕は入れてます。
wsl を使ってて少し不便と感じたところ
- Linux の tab の補完機能が powershell ほど使いやすくない
ただサイトの表示速度は体感的に早くなりましたし、docker や git のレスポンスがめちゃくちゃ早い。