Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

インポートしたWSL2ディストリビューションの既定ユーザーを指定する

こんにちは、MLBお兄さんこと松村です。
WBC の日本チームのロースターが発表されましたね。期待はやはりヌートバー選手


WSL2 にはディストリビューションのインポートとエクスポートの機能があります。
構成済みディストリビューションの移行や再利用、バックアップするときに便利です。

learn.microsoft.com

しかしエクスポート済みのディストリビューションをインポートして利用する際に、rootユーザーで起動するような挙動をします。

# Ubuntu 22.04 をエクスポートする
$ wsl -l -v
  NAME               STATE           VERSION
* Ubuntu-22.04       Stopped         2

$ wsl --shutdown Ubuntu-22.04

$ wsl --export Ubuntu-22.04 /f/wsl/Ubuntu-22.04.tar
エクスポートが進行中です。これには数分かかる場合があります。
この操作を正しく終了しました。

# Ubuntu-22.04.tar をインポートする
$ wsl --import Ubuntu-22.04-v2 /c/users/yuta/wsl/Ubuntu-22.04-v2 /f/wsl/Ubuntu-22.04.tar --version 2
インポート中です。この処理には数分かかることがあります。
この操作を正しく終了しました。

$ wsl -l -v
  NAME               STATE           VERSION
* Ubuntu-22.04       Stopped         2
  Ubuntu-22.04-v2    Stopped         2

# インポートした Ubuntu-22.04 を起動すると root ユーザーになる
$ wsl -d Ubuntu-22.04-v2
Welcome to Ubuntu 22.04.1 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@matdesktop:/mnt/c/Users/yuta#

root@matdesktop:/mnt/c/Users/yuta# whoami
root

ベースとなった Ubuntu-22.04 では yuta というユーザーを作成しています。
そのためインポートした Ubuntu-22.04-v2 においても yuta というユーザーで使えるようにしたいと思います。

方法1:Windows Terminal で既定ユーザーを指定する

Windows Terminal にはインポートしたディストリビューションも自動的にプロファイル登録されます。
そのプロファイルの wsl コマンドにユーザーを指定することができます。( --user オプション)
このように設定することで、Ubuntu-22.04-v2 を指定のユーザーで使用することができます。

C:\WINDOWS\system32\wsl.exe -d Ubuntu-22.04-v2 --user yuta

しかしこの方法の欠点として、WSL2 から VS Code を起動した時のユーザーが root のままとなってしまいます。
これでは Windows Terminal と VS Code のユーザーが異なり、ファイルパーミッション等に支障が出てしまいます。
(実際に Git ファイルのパーミッションがおかしくなり、コミットすらできなくなってしまいました)

方法2:WSL2 の構成ファイルで既定ユーザーを指定する

WSL2 には構成ファイル wsl.conf があり、WSL2 で使用するディストリビューションの構成を定義することができます。
wsl.conf の [user] セクションに既定のユーザーを指定することができます。

learn.microsoft.com

インポートしたディストリビューション内で wsl.conf を作成し、ディストリビューションの再起動を行うことで、次回からは指定したユーザーで使用することができます。

$ wsl -d Ubuntu-22.04-v2
root@matdesktop:/mnt/c/Users/yuta#

root@matdesktop:/mnt/c/Users/yuta# cat /etc/wsl.conf
cat: /etc/wsl.conf: No such file or directory

root@matdesktop:/mnt/c/Users/yuta# echo -e "[user]\ndefault=yuta" | sh -c 'cat - > /etc/wsl.conf'

root@matdesktop:/mnt/c/Users/yuta# cat /etc/wsl.conf
[user]
default=yuta

root@matdesktop:/mnt/c/Users/yuta# exit
logout

$ wsl --shutdown Ubuntu-22.04-v2

$ wsl -d Ubuntu-22.04-v2
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

yuta@matdesktop:/mnt/c/Users/yuta$
yuta@matdesktop:/mnt/c/Users/yuta$ whoami
yuta

この方法であれば WSL2 から VS Code を起動した際も、同じユーザーとなります。


オレオレイメージを作成し Devcontainer を活用する日々なので、ユーザーはきちんと揃えておきたいものです。

www.alterbooth.com

cloudpointer.tech

www.alterbooth.com