WSL

WSL(2)でOSを手動で無限に追加(インポート)する方法

はじめに

WSLはMicrosoft Storeからインストールするのがベストな方法ですが、環境を変えたい、別にしたいなど様々シーンがあると思いますので紹介したいと思います。
ここで紹介するのは以下のOSです。

  • Ubuntu
  • CentOS
  • Alpine

Ubuntu

rootfs(xxxxxx-server-cloudimg-amd64-wsl.rootfs.tar.gz)をダウンロードします。
wslと名前が付いているものです。

Ubuntu 16.04 LTS (Xenial)
https://cloud-images.ubuntu.com/xenial/current/

Ubuntu 18.04 LTS (Bionic)
https://cloud-images.ubuntu.com/bionic/current/

Ubuntu 19.10 (Eoan)
https://cloud-images.ubuntu.com/eoan/current/

Ubuntu 20.04 LTS (Focal)
https://cloud-images.ubuntu.com/focal/current/

例として、Ubuntu20.04をWSLに追加していきます。
追加したいrootfsをダウンロードします。

C:\WSL\focal-server-cloudimg-amd64-wsl.rootfs.tar.gz

次にインストールされるフォルダを追加します。
実際追加しなくても大丈夫です。

ubuntu2004-1

WSLのイメージなどは通常下記に保存されるようなので適当にフォルダを追加します。

C:\Users\[ユーザー名]\AppData\Local\Packages\ubuntu2004-1

PowerShellを開きます。
以下のコマンドでインポートします。
--version 2を付けるとWSL2でインポートされます。

wsl --import <DistributionName> <InstallLocation> <FileName> --version 2

インポートします。

wsl --import ubuntu2004-1 C:\Users\jun\AppData\Local\Packages\ubuntu2004-1 C:\WSL\focal-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2

インストールしたフォルダにext4.vhdxという仮想ディスクが追加できています。

問題なくインポートされていることが確認できます。

PS C:\Users\jun> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
  CentOS8         Stopped         2
  ubuntu2004-1    Stopped         2

実際に起動してみます。

PS C:\Users\jun> wsl -d ubuntu2004-1
Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.19.104-microsoft-standard x86_64)

ついでに2つ目のUbuntuを追加してみます。
ubuntu2004-2というフォルダを追加してインストールします。

wsl --import ubuntu2004-2 C:\Users\jun\AppData\Local\Packages\ubuntu2004-2 C:\WSL\focal-server-cloudimg-amd64-wsl.rootfs.tar.gz --version 2 

追加されています。

PS C:\Users\jun> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
  ubuntu2004-2    Stopped         2
  CentOS8         Stopped         2
  ubuntu2004-1    Stopped         2

これで無尽蔵に増やせることが確認できます。

Windows Terminalでも認識することも確認できます。

登録解除方法

wsl --unregister ubuntu2004-1

これで色々なことがやりやすくなると思います。

CentOS

CentOSは以下のプロジェクトで配布されているイメージがあります。
https://github.com/yuk7/CentWSL

Zipで配布されているので解凍します。
tarに解凍する必要はありません、tar.gzのままで大丈夫です。

インポートします。

wsl --import CentOS8 C:\Users\jun\AppData\Local\Packages\CentOS8 C:\WSL\CentOS8\rootfs.tar.gz --version 2

登録できていることも確認できます。

PS C:\Users\jun> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
  CentOS8         Running         2

Alpine

下記のサイズからalpine-minirootfsをダウンロードします。
http://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/

インポートします。

wsl --import alpine C:\Users\jun\AppData\Local\Packages\alpine C:\WSL\alpine-minirootfs-3.12.0-x86_64.tar.gz --version 2

登録できていることも確認できます。

PS C:\Users\jun> wsl -l -v
  NAME             STATE           VERSION
* Ubuntu-18.04     Stopped         2
  alpine           Stopped         2
  CentOS8          Stopped         2

ついでにホームディレクトリを変更したい場合は下記を参考
https://level69.net/archives/27578

まとめ

WSL2がリリースされて更に使う機会が増えると思います。Windows側との連携も様々増えてくるでしょう。
例えばDockerも動くようになったし、開発環境を構築後にバックアップして展開するなどもできるようになるでしょう。
Hyper-v、VMwareで環境を構築するまでは、、、もっとライトに環境を作りたい人にはとても便利だとおもいます。

それぞれ下記の情報を参考にしています。

Installing Ubuntu on WSL via rootfs
https://wiki.ubuntu.com/WSL

wsl2上で無料でCentOS8を動かそう
https://www.geekfeed.co.jp/geekblog/install_CentOS8_on_wsl2_for_free

-WSL
-,