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