いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

WSL2とVSCodeで欲しい環境を好きなだけ作る

概要

最近は、docker とかで環境構築したりするのがデフォルトになっているかもしれませんが、WSL2とVSCodeの組み合わせもとても便利なので、個人的にはよく利用しています。

WSL関連の記事を見ていると、大抵ストアからUbuntuをインストールしたりして利用するパターンが多いと思いますが、予め rootfs のイメージを用意しておいて wsl にインポートすることも出来ます。(逆にエクスポートも可能です)

このやり方だと、何個も仮想マシンをサクサク入れることができるので、とても楽です。

以下、自分用のメモですが、いつもやっているやり方です。

今回入れるのは、Ubuntu 21.04 のクラウドイメージを使います。サイズも 450MB くらいなので結構軽い。

イメージはここからダウンロード可能です。

cloud-images.ubuntu.com

ファイル名に wsl.rootfs と付いているものが、WSL向けのイメージとなっています。

WSLにて現在実行しているものを一覧出力

以下のコマンドで表示できます。

> wsl -l -v

WSLにて特定のイメージをインポートする

wsl コマンドで、インポートするには以下のようにコマンドを実行します。

> wsl --import 名前 <イメージファイルが配置される場所> <イメージファイルのパス>

例えば、名前を myenv で、イメージファイルの配置場所を c:\data\wsl\myenv 、イメージファイルのパスが c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz だとすると以下のようになります。

> wsl --import myenv c:\data\wsl\myenv c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

作った仮想マシンを停止したい場合

以下のように wsl コマンドを実行すると停止されます。

> wsl -t 名前

作った仮想マシンを削除したい場合

以下のように wsl コマンドを実行すると削除されます。

> wsl --unregister 名前

作った仮想マシンをエクスポートしたい場合

以下のように wsl コマンドを実行するとエクスポートされます。

> wsl --export エクスポートする仮想マシンの名前 <エクスポート先のパス (拡張子は tar で)>

エクスポートしたファイルは、wsl --import で普通にインポート可能です。

なので、基本設定したファイルをエクスポートしておくと、いつでもインポート可能になります。

WSLが利用するメモリ量を制限したい場合

devlights.hatenablog.com

一般ユーザの作成

上記のやり方で仮想マシンを作ると、root ユーザでログインすることになります。

自分のテスト環境なので構わないという方はそのまま利用すればいいとおもいますが、やっぱり一般ユーザがいいって方は以下でユーザを作成しておきましょう。

# useradd -m -s $(which bash) new-user-name
# passwd new-user-name
# usermod -G sudo new-user-name

デフォルトでは、今いるWindowsのディレクトリが初期パスとして起動します。

それが嫌な場合は、以下を .bashrc とかに追加してもいいかもしれません。

# echo 'cd ~' >> /home/new-user-name/.bashrc

で、一旦仮想マシンからログアウトして、以下のようにユーザを指定して入ります。

# exit

> wsl -d xxx-env -u new-user-name

仮想マシンに特定のユーザでログインする

デフォルトではユーザを指定しないと root でログインすることになります。

ユーザを指定する場合は以下のようにします。

> wsl -d xxx-env -u user-name

デフォルトユーザを変更したい場合は以下を参照ください。

devlights.hatenablog.com

ロケールを調整する

必要であれば、ロケールを日本語にします。

# 今のロケールを確認
$ locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

ロケールがデフォルトでは C.UTF-8 になっています。これを ja_JP.UTF8 にするには以下のようにします。

$ sudo apt -y install language-pack-ja
$ sudo apt -y install manpages-ja manpages-ja-dev
$ sudo update-locale LANG=ja_JP.UTF8

manpageはオマケです。この後、一回WSL2から出て、イメージを再起動しておきます。

$ exit
> wsl -t xxxx
> wsl -d xxxx

ロケールが変わったかどうかを確認

$ locale
LANG=ja_JP.UTF8
LANGUAGE=
LC_CTYPE="ja_JP.UTF8"
LC_NUMERIC="ja_JP.UTF8"
LC_TIME="ja_JP.UTF8"
LC_COLLATE="ja_JP.UTF8"
LC_MONETARY="ja_JP.UTF8"
LC_MESSAGES="ja_JP.UTF8"
LC_PAPER="ja_JP.UTF8"
LC_NAME="ja_JP.UTF8"
LC_ADDRESS="ja_JP.UTF8"
LC_TELEPHONE="ja_JP.UTF8"
LC_MEASUREMENT="ja_JP.UTF8"
LC_IDENTIFICATION="ja_JP.UTF8"
LC_ALL=

C言語の環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import c-env c:\data\wsl\c-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d c-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

必要なものをインストール

$ apt install -y gcc gdb make cmake valgrind zip unzip

これで、コンパイラなどはインストールされたので、後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

Pythonの環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import python-env c:\data\wsl\python-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d python-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

python3 は最初から入っているので、それを venv して利用する感じで。

$ python3
Python 3.9.4 (default, Apr  4 2021, 19:38:44) 
[GCC 10.2.1 20210401] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Ubuntuなので、pipとvenvを別途インストール

$ apt install python3-pip python3-venv make zip unzip

これで、必要なものはインストールされたので、後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

Goの環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import golang-env c:\data\wsl\golang-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d golang-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

GoのSDKをインストール

$ apt install golang make zip unzip

これで、コンパイラなどはインストールされたので、後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

dotnetの環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import dotnet-env c:\data\wsl\dotnet-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d dotnet-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

dotnetのSDKをインストール

$ wget https://packages.microsoft.com/config/ubuntu/20.10/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 dotnet-sdk-5.0
$ sudo apt install -y make zip unzip

これで、コンパイラなどはインストールされたので、後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

Java の環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import java-env c:\data\wsl\java-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d java-env

一般ユーザの作成とデフォルトユーザの変更

$ useradd -m -s $(which bash) new-user
$ passwd new-user
$ usermod -G sudo new-user
$ cat << EOF > /etc/wsl.conf
[user]
default=new-user
EOF

一旦、仮想マシンを停止し、作った一般ユーザで入り直し。

$ exit

> wsl -t java-env
> wsl -d java-env

パッケージの状態を最新に更新

$ sudo apt update -q;  sudo apt upgrade -yq

OpenJDKをインストール

$ sudo apt install -y zip unzip make
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install java 11.0.11.hs-adpt

これで、コンパイラなどはインストールされたので、後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

JavaでSpring Bootの環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import springboot-env c:\data\wsl\springboot-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d springboot-env

一般ユーザの作成とデフォルトユーザの変更

$ useradd -m -s $(which bash) new-user
$ passwd new-user
$ usermod -G sudo new-user
$ cat << EOF > /etc/wsl.conf
[user]
default=new-user
EOF

一旦、仮想マシンを停止し、作った一般ユーザで入り直し。

$ exit

> wsl -t springboot-env
> wsl -d springboot-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

Spring BootのSDKをインストール

$ apt install -y zip unzip make
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install java 11.0.11.hs-adpt
$ sdk install springboot
$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring

これで、コンパイラなどはインストールされたので、後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

Flutterの環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import flutter-env c:\data\wsl\flutter-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d flutter-env

一般ユーザの作成とデフォルトユーザの変更

$ useradd -m -s $(which bash) new-user
$ passwd new-user
$ usermod -G sudo new-user
$ cat << EOF > /etc/wsl.conf
[user]
default=new-user
EOF

一旦、仮想マシンを停止し、作った一般ユーザで入り直し。

$ exit

> wsl -t flutter-env
> wsl -d flutter-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

Flutter の動作に必要なパッケージをインストール

$ apt install -y zip unzip libglu1-mesa make

Flutter の SDK をインストール

$ cd /usr/local
$ git clone https://github.com/flutter/flutter.git -b stable
$ cd bin
$ ln -s /usr/local/flutter/bin/dart dart
$ ln -s /usr/local/flutter/bin/flutter flutter

dartとflutterがちゃんと動くか確認

$ dart version
$ flutter version

Flutter を更新

$ flutter upgrade
$ flutter doctor

flutter doctor すると、デバイスが何も無い状態だけど、web-server では起動して遊べるので、個人的にはこれでオケ。

flutter config で android と ios は無効にしておく

flutter config --enable-web
flutter config --no-enable-android
flutter config --no-enable-ios

これで準備はオッケイ。後は

$ flutter create app
$ cd app
$ flutter run -d web-server

とすれば起動する。

後は VSCode 側で遊ぶ。

$ code .

これで、VSCode がこの仮想マシンに接続した状態で起動するので、後は好きにできる。

補足

WSL2の環境でAndroid SDKもセットアップするやり方を書いてくださってる記事がありました。感謝。

qiita.com

PowerShell (pwsh) の環境を作る

最初にインポートして、綺麗な空の環境を用意

> wsl --import pwsh-env c:\data\wsl\pwsh-env c:\data\rootfs\hirsute-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インポートが終わったら、起動

> wsl -d pwsh-env

パッケージの状態を最新に更新

$ apt update -q; apt upgrade -yq

一般ユーザの作成

$ useradd -m -s $(which bash) new-user-name
$ passwd new-user-name
$ usermod -G sudo new-user-name

一旦ログアウトして、一般ユーザで入り直し。

$ exit

> wsl -d pwsh-env -u new-user-name

PowerShell のインストール

$ sudo apt-get update
$ sudo apt-get install -y wget apt-transport-https software-properties-common
$ wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt-get update
$ sudo add-apt-repository universe
$ sudo apt-get install -y powershell
$ sudo apt install -y make zip unzip

$ rm packages-microsoft-prod.deb

$ pwsh

PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/xxx>

参考資料

devlights.hatenablog.com

https://cloud-images.ubuntu.com/hirsute/current/cloud-images.ubuntu.com

cloud.centos.org

cdimage.debian.org

docs.microsoft.com

spring.pleiades.io

docs.microsoft.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com