WSL奮鬥記

前言

因為qemu update後原來的WSL Kernel缺乏TC的module support, 然後我就踏上了自己compile linux kernel的不歸路…

故事

其實故事就如同前言所述(那還要講什麼廢話?)
幾點細節補充如下

  • 我的WSL是跑在公司的Windows上, 然後我的Local Administrator權限又被收回,然後又因不是RD單位所以基本上取得無望,無法透過wsl --update來update WSL version
  • 然而就算我可以用wsl --update我看了Github上的WSL-Kernel SRC內預設的config裡也沒有TC, QoS的kernel support…(那我上面那點…對..就是單純抱怨沒有權限而已…)
  • WSL的Kernel沒有動態載入module的功能(也就是說modporbe這個指令在WSL沒屌用…)所以沒辦法用動態載入的方式把TC/QoS載入

所以..大叔我就只能自己config/compile kernel來滿足自己的需求

技術細節

我還是放在我的Wiki裡面好了,有興趣的可以去看

心得

很久很久以前我曾在使用Gentoo的時候config/compile過linux kernel(沒辦法用Gentoo怎麼能不自己動手??),但是後來我就再也沒有動過自己動手的主意了(就跟很久很久以前我還會勤勞到自己去config/compile FreeBSD Kernel一樣現在都改用generic)

這次的實作老實說看起來很難實際上還好…
只是要習慣WSL在用的kernel基本上只有要用跟不用的,要用的全數要buildin不能build成module,這點基本上跟早期的FreeBSD Kernel是一樣的,邏輯上跟現在Linux的主流kernel的使用方式是不一樣的

而且這樣的概念下難度會在除了特殊目的確認一定要有的function(例如本次目的的TC/QoS以及我很常用的wireguard support之類的)以外,哪些module是WSL必要的這部份很難自己記起來,所以看得到所有的建議都是使用

zcat /proc/config.gz > .config

或是

cat /proc/config.gz | gunzip > .config

把目前正常在跑得WSL Kernel config弄出來成default再用add on的方式去加上所需的就好,這樣的作法把整個需要花腦的部份都簡化了

最後..一切正常的WSL用起來還是很爽的, 尤其是當我們人在公司當薪水小偷的時候面對不能弄掉的公司的Windows時, WSL就是我們打工仔的救贖…