如何在运行 Ubuntu 的 WSL2 上填充 /usr/src 和 /lib/modules?

如何在运行 Ubuntu 的 WSL2 上填充 /usr/src 和 /lib/modules?
mark@L-R910LPKW:~$ uname -r
5.15.90.1-microsoft-standard-WSL2
mark@L-R910LPKW:~$

我希望能够跑步特雷西来自 docker 容器,但它不适用于 WSL2:

mark@L-R910LPKW:~$ sudo docker run --name tracee --rm --privileged --pid=host -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro -v /tmp/tracee:/tmp/tracee aquasec/tracee:0.4.0 --trace comm=ls
2023/05/16 00:37:43 missing kernel source code compilation dependency
mark@L-R910LPKW:~$

我明白这是因为/usr/src(和/lib/modules?)在我的机器上是空的。

鉴于它不是真正的 Linux 机器,而是 WSL2,我该如何填充它们?

答案1

使用发行版的linux-headers包在这里不起作用,因为发行版的内核不是 WSL2 中使用的内核。相反,微软有一个他们发布的自定义内核,并且其中的所有内容都经过编译,因此不需要 initramfs(这意味着它启动速度更快)。于是,/lib/modules故意空了。使用发行版标头将导致生成的二进制文件根本无法加载到您的内核中,因为它适用于不同的版本。

以前WSL2内核根本不支持模块,但是现在已经改变了,根据存储库。有一些与该存储库相关的有关如何构建内核的文档,但 Microsoft 似乎没有为此提供任何可以使用的预构建标头。但是,您可以将存储库克隆到适当的子目录下,/usr/src并使用文档在其中构建内核和/或任何必要的模块。

相关内容