のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

wsl2を使う前にやっておきたいこと(ディストロのバックアップ)

はじめに

転職してから開発環境がMac→Windowsと変更になり、色々と試行錯誤している最中です。 windowsでの開発、となるとwindowsデスクトップアプリケーション等のを除いた一般的なweb/ネイティブアプリケーションの開発はunix環境で行うのが一番ベストなので、 そうなるとwsl2を使うのが一番良い選択肢だと思う。

wsl2はディストロ(≒ディストリビューション)をdocker imageのように使えない

見出しの通りなのだが、例えばdockerでubuntuのイメージを使いまわしたい場合は、docker hubで公式のイメージを引っ張ってくるか、自分でビルドしておいたイメージを利用すればいい。

wsl2も一見同じようなことができそうなのだが、基本的にはできない。(そもそもそのケースならdocker使えよ、という議論はなしでお願いします)

とにかく今回はそういったdockerライクなユースケースに対応するための準備をしておく。

1. 任意のディストロをインストール

詳細は公式docを参照されたいが、以下コマンドでインストール可能なディストリビューションを表示できる。

> wsl --list -o
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux       Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

$ wsl  --install  -d Ubuntu-20.04

今回はUbuntu-20.04を選択する。

2. ディストロをエクスポートする

dockerで言うところのcommitコマンド。

1のようにコマンドでインストールした場合、ディストロは以下ディレクトリにある。

C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\

エクスポートするには--exportコマンドで以下のように実行する。 wsl --export <エクスポートするdistro> <保存名>

バックアップの保存先として、package以下にdistro_backupを作成した。

今回は先程インストールしたUbuntu-20.04を選択したいので以下のよう実行する。

wsl --export Ubuntu-20.04 C:\Users\<username>\AppData\Local\Packages\distro_backup\Ubuntu-20.04.tar

3. ディストロをインポート(複製)する

dockerで言うところのbuildに近いところ、docker:container=linux:distribution みたいな感じ。 importではディストロに対して名前を個別につけることができるので、当初の目的であったディストリビューションの複製が可能になる。

wsl --import <ディストリビューションにつける名前><インポートに利用するdistroのパス> <インストール先> <ファイル名> なお、追加可能なオプションとしてversionがあるが、これはおそらくwslバージョンなので、未指定な場合はset-default-versionで指定しているバージョンになると思われる。(多分)

今回自分はk8s用の環境を分離することが目的だったためubuntu-20.04-k8sという名前で作成する。

$ wsl --import Ubuntu20.04-k8s 'C:\Users\<username>\AppData\Local\Packages\Ubuntu20.04-k8s' 'C:\Users\<username>\AppData\Local\Packages\distro_backup\Ubuntu-20.04.tar'

$ wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-20.04 (既定)
docker-desktop
docker-desktop-data
Ubuntu20.04-k8s

無事追加できた。

ログインは以下でできる。

$ wsl -d Ubuntu20.04-k8s

なおエクスポートに利用したディストリビューションは削除してもok(2でエクスポートしたディストロがあれば複製可能)