新PCが来たのでWSL2の環境を整えてみた

新しいPCを買ったのでWSL2の環境を1から構築してみた

自宅のPCを新調して環境構築を1から行ったので、まずは仮想環境から構築

作業の前に

  • Windows updateは最新にしておく
  • BIOSの設定で仮想化が有効になっているかを確認する(たいていCPU関連の設定周りにある)
  • JSONファイルをエディタに紐付ける

インストール作業

Windowsターミナル

Windows Storeからインストールする

WSL2 Linuxカーネルのインストール

下記URLからインストールする

WSL 2 Linux カーネルの更新 | Microsoft Docs

Windowsの機能の有効化

Windowsキー」→「設定」→「アプリ」→「プログラムと機能」→「Windowsの機能の有効化または無効化」

再起動を促されるので再起動しておく

WSLの有効化

Power Shellの実行

Power Shellを右クリックし、管理者として実行する

WSLの有効化

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

仮想マシンプラットフォームのオプションコンポーネントを有効化

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

WSLのデフォルトバージョンを2に指定する

wsl --set-default-version 2

Linuxディストリビューションのインストール

Windows Storeからのインストール

Windows SotreからUbuntuの好きなバージョンを入れる。インストールするのはバージョン名が指定されているものを選ぶこと(ダウンロードタイミングでバージョンが変わるため)

起動

Windows StoreでUbuntuのページに起動ボタンが出てくるので起動する。起動が完了するとユーザー名とパスワードの指定があるので、sudo権限のためのパスワードを指定する

エラーパターン

その1

WslRegisterDistribution failed with error: 0x80370102

上記エラーの場合、BIOS内部で仮想化が有効化されていない場合に発生する

BIOSの設定はPCごとに違うので説明書を読んで確認すること

その2

WslRegisterDistribution failed with error: 0x800701bc

上記の場合、Linuxカーネルの再インストールで治ることがある

Windowsターミナル

起動

ターミナルを起動し、タブの右端にあるプラスボタンの右隣にある下三角メニューからUbuntuを選べば起動できる

ターミナル起動時にUbuntuが起動されるように変更

下三角メニューから設定を開き、defaultProfileをさらに下にあるUbuntuの設定guidに変更する

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{******}" // ここを対象のguidに変更する,
}

WSLを開いたときのカレントディレクトリを指定するため、最終行にcommandlineを追加する

            {
                "guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
                "hidden": false,
                "name": "Ubuntu-20.04",
                "source": "Windows.Terminal.Wsl",
                "commandline": "wsl.exe ~ -d Ubuntu-20.04" // これを追加
            },

Ubuntu初期設定

リポジトリを日本に変更

sudo sed -i 's/\/\/archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list
sudo sed -i 's/\/\/us.archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list
sudo sed -i 's/\/\/fr.archive.ubuntu.com/\/\/jp.archive.ubuntu.com/g' /etc/apt/sources.list

DNSGoogleのものに変更

WSL2のDNSWindows本体側の設定に依存するようになっている。ただ、よく名前解決でエラーを起こすためGoogleDNSサーバー(8.8.8.8)を利用するように設定を変更する

1. resolv.confの生成をオフにする

# sudo vi /etc/wsl.conf
[network]
generateResolvConf = false

2. WSL2仮想マシンの再起動

Ubuntuのプロンプトをすべて終了し、Powershellで以下のコマンドの実行

wsl --shutdown

3. resolv.confの作成

rm /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf

4. WSL2仮想マシンの再起動とテスト

Ubuntuのプロンプトをすべて終了し、Powershellで以下のコマンドの実行

wsl --shutdown

その後、Ubuntuにアクセスしpingで名前解決ができることを確認できたら完了

OS更新と再起動

sudo apt update
sudo apt -yV upgrade

日本語ロケールに設定

sudo apt install language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8

# 一度WSL2を閉じて開き直し、以下を試す
echo $LANG
date

manコマンドの日本語化

sudo apt install manpages-ja manpages-ja-dev

プログラミングに必要なライブラリのインストール

sudo apt -yV install build-essential python3-dev python3-pip
sudo apt -yV install git wget p7zip-full

systemctlが動かない問題への対処

1. .Net

# リポジトリの追加
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

# 更新
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-3.1

2. Genieのインストール

# リポジトリの追加
curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash

# Genieをインストール
sudo apt install -y systemd-genie

# 動作確認(エラーが出なければOK)
genie -s

# systemdが動くことを確認
sudo systemctl stop getty@tty1
sudo systemctl disable getty@tty1
sudo systemctl status getty@tty1

rbenvでRubyインストール

apt install curl libssl-dev libreadline-dev zlib1g-dev

# rbenvをGitHubからcloneする
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

# ~/.rbenv/bin にパスを通す
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

# rbenvをセットアップ
~/.rbenv/bin/rbenv init

# セットアップを自動で行うために.bashrcに追記
echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# bashrcを再読み込み
source ~/.bashrc

# ruby-buildのインストール
mkdir -p "$(rbenv root)"/plugins
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

# rbenv-doctorで問題がないかを確認する
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash

# rubyをインストールする
rbenv install -l
rbenv install 2.7.2
rbenv global 2.7.2
ruby -v