🐧
WSL2 でカスタム Linux kernel を使いたい
RCLab です。今回はソースからビルドした Linux kernel を WSL 環境で使えるようになるまでをまとめました。
きっかけ
職場では VirtualBox + Vagrant の環境で開発を進めている筆者ですが、わけあって windows で開発をすることになりました。しかし WSL 上で VirtualBox がうまく動作せず、環境構築が進まなくなってしまいました。VirtualBox をインストールし、その動作を確認するも
~ $ VBoxManage --version
WARNING: The vboxdrv kernel module is not loaded. Either there is no module
available for the current kernel (5.15.167.4-microsoft-standard-WSL2) or it failed to
load. Please recompile the kernel module and install it by
sudo /sbin/vboxconfig
You will not be able to start VMs until this problem is fixed.
7.1.6r167084
~ $
このような WARNING が出てしまい、うまく動作しませんでした。それを解消する方法を調べていたところ、Running Virtualbox+Vagrant inside of WSL2 with nested virtualization という記事を見つけたので、実際にやってみようとなった運びです。
作業開始前の kernel は
~ $ uname -r
5.15.167.4-microsoft-standard-WSL2
~ $
となってます。
作業
-
WSL Linux Kernel を WLS 内で clone
~ $ git clone https://github.com/microsoft/WSL2-Linux-Kernel ~ $ cd WSL2-Linux-Kernel ~/WSL2-Linux-Kernel $
- build 用の config file を複製し、編集する先の記事のように config を編集
~/WSL2-Linux-Kernel $ cp ./Microsoft/config-wsl .config
~/WSL2-Linux-Kernel $ vi .config ~/WSL2-Linux-Kernel $ cat .config | grep -e CONFIG_MODULES= -e CONFIG_MODULE_SIG= -e CONFIG_SECURITY_LOADPIN= -e CONFIG_SECURITY_LOCKDOWN_LSM= CONFIG_MODULES=y CONFIG_MODULE_SIG=n CONFIG_SECURITY_LOADPIN=n CONFIG_SECURITY_LOCKDOWN_LSM=n ~/WSL2-Linux-Kernel $
-
README にあるように、パッケージを install、その後 kernel configuration を行う設定画面が開くので、<Esc><Esc>とキーを弾いて設定から抜ける
~/WSL2-Linux-Kernel $ sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev cpio qemu-utils ~/WSL2-Linux-Kernel $ make menuconfig ~/WSL2-Linux-Kernel $
-
先の記事にあるように build するbuild に成功していれば、 vmlinux が出来上がっているので確認する
~/WSL2-Linux-Kernel $ sudo make -j $(nproc) ~/WSL2-Linux-Kernel $ sudo make -j $(nproc) modules_install
~/WSL2-Linux-Kernel $ ls -la | grep vmlinux ...(sinp)... -rwxr-xr-x 1 root root 380167912 Feb 23 23:29 vmlinux ...(spin)... ~/WSL2-Linux-Kernel $
- WLS がこの kernel を用いるように .wslconfig を編集
windows 側に vmlinux をコピーし、それを kernel として用いるように .swlconfig に記載する~/WSL2-Linux-Kernel $ cp vmlinux /mnc/c/Users/<user_name> ~/WSL2-Linux-Kernel $ cd ~ ~ $ vi /mnc/c/Users/<user_name>/.wslconfig ~ $ cat /mnc/c/Users/<user_name>/.wslconfig [wsl2] kernel=C:\\Users\\<user_name>\\vmlinux ~ $
- WLS を再起動後 WSL にログインし、kernel を確認自分が build したものであるかを確認
~ $ uname -r 6.6.75.1-microsoft-standard-WSL2+ ~ $
ここまでで kernel のビルドは完了です!最後に目的だった VirtualBox がきちんと動きそうかを確認しましょう。
~ $ VBoxManage --version
7.1.6r167084
~ $
WARNING が消えました!
Discussion