WSLのディストロをMicrosoft Storeなしで追加する

Posted by 雅楽斎 on Thursday, April 27, 2023

TOC

Microsoft Storeを使わずにWSLで同じディストロを複数使う

WSLはMicrosoft Storeから落としたイメージをexportしてimportしたら別のイメージとして使えるよ的な情報はたくさんありますが、吊るしの状態でやろうとしたら今使ってる環境はゼロに戻さないといけない訳で、そもそもWSLのイメージってMicrosoft Storeにないものもあったよなと思ってやってみました。

WSLで同一のディストロを準備するのに必要なもの

  • WSL用のルートファイルシステム
  • 初期設定としていくつか実行するコマンド
  • HDDイメージファイルを格納する場所

Microsoft Storeを経由せずにWSLのディストロを追加するメリットとデメリット

メリット

  • Microsoft Storeのよくわからない進捗にイライラしなくてよい
  • 別でダウンロードしたものを使える(使い回せる)ので、通信量の削減を期待できる
  • Microsoft Storeにないディストロを使える
  • 普段使っている環境とは別の環境を作れる
  • WSL1とWSL2で使い分け等ができる

デメリット

  • パッケージはそれぞれで最新にしないとセキュリティを担保できない
  • 特にWSL2の場合、RAMをそれぞれで確保することになるため、使えるRAMが少なくなる
  • Microsoft Storeからインストールした後に自動実行されるいくつかのコマンドを自分で実行する必要がある
  • Microsoft Storeでアプデがあった場合に同じ環境にならない可能性がある(そもそもMicrosoft Storeでのアプデが何をしているのか不明)
  • Wslttyで登録したアイコンから起動できない(mintty.exeを探しています・・・となる)

ルートファイルシステムをダウンロードする

今回はUbuntu 22.04で試してみます。Ubuntuではクラウド向けにデイリービルドを提供しており、22.04の最新のルートファイルシステムはここにあります。

https://cloud-images.ubuntu.com/wsl/jammy/20230424/

5世代分しか残さないようなので、現在の最新を持ってきたい場合は

https://cloud-images.ubuntu.com/wsl/jammy/current/

からダウンロードするのがしきたりです。ubuntu-jammy-wsl-amd64-wsl.rootfs.tar.gzをダウンロード。

https://cloud-images.ubuntu.com/wsl/jammy/current/ubuntu-jammy-wsl-amd64-wsl.rootfs.tar.gz

同じLTSでもまだサポート中の20.04の場合はこちら。というより20.04→22.04でディレクトリ構成が変わりました。

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

ダウンロードしたtar.gzはホームディレクトリにWslImageというディレクトリを作って移動します。

複数のPCで同じ作業をする場合はこのルートファイルシステムをコピーすれば大丈夫です。

WSLイメージとしてインポートする

WSLにインポートするのに必要なものを準備します。

  • ルートファイルシステム→ダウンロードしたファイルをホームディレクトリのWslImageに格納
  • インストール先→ホームディレクトリにWslDistroというディレクトリを作り、その中にUbuntu-22.04manualというディレクトリを作ります

コマンドプロンプトor PowerShellで以下のコマンドを実行します。wsl --importの説明でtarを取り込むと書いてありますが、tar.gzのままで大丈夫です。(gunzipする必要はありません)

>wsl --import Ubuntu-22.04manual C:\Users\hogehoge\WslDistro\Ubuntu-22.04manual C:\Users\hogehoge\WslImage\ubuntu-jammy-wsl-amd64-wsl.rootfs.tar.gz
インポート中です。この処理には数分かかることがあります。
この操作を正しく終了しました。
>wsl -l -v
  NAME                  STATE           VERSION
* Ubuntu-22.04          Running         2
  Ubuntu-22.04manual    Stopped         2

Microsoft StoreからUbuntuをインストールした状態と同じにする

追加したUbuntu-22.04manualはWindowsターミナルから起動できるので、起動します。

起動すると

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.79.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

This message is shown once a day. To disable it please create the
/root/.hushlogin file.
root@DESKTOP-HKJE9NK:~#

こんな感じなので、色々してMicrosoft Storeからインストールした状態と同じにします。

# adduser --shell /bin/bash hogehoge
Adding user `hogehoge' ...
Adding new group `hogehoge' (1000) ...
Adding new user `hogehoge' (1000) with group `hogehoge' ...
Creating home directory `/home/hogehoge' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for hogehoge
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
# usermod -G adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev hogehoge

シェル起動時のデフォルトユーザーを作成したhogehogeにしたいので、PowerShellでレジストリを弄ります。1行目が関数定義、2行目がディストロとデフォルトユーザー名を指定しての実行ですね。

> Function WSL-SetDefaultUser ($distro, $user) { Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq $distro | Set-ItemProperty -Name DefaultUid -Value ((wsl -d $distro -u $user -e id -u) | Out-String); };
> WSL-SetDefaultUser Ubuntu-22.04manual hogehoge

これで、Windowsターミナルから起動したときの表示が変わります。

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/hogehoge/.hushlogin file.
hogehoge@DESKTOP-HKJE9NK:~$

あとはいつも通りaptでパッケージ更新をして使えば問題ありません。

追加したWSLイメージの削除

コマンドプロンプトor PowerShellでイメージを指定して削除します。

>wsl -l -v
  NAME                  STATE           VERSION
* Ubuntu-22.04          Stopped         2
  Ubuntu-22.04manual    Stopped         2
>wsl --unregister Ubuntu-22.04manual

参考リンク

WSLでVM環境のコピー(exportとimport) - zaki work log

WSL2 Ubuntu の手動インストール [Ground Sunlight]

スポンサーリンク


comments powered by Disqus