新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
DNSをGoogleのものに変更
WSL2のDNSはWindows本体側の設定に依存するようになっている。ただ、よく名前解決でエラーを起こすためGoogleのDNSサーバー(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