🫠
WSL2でeBPFのhello_world.pyを動かすまで
はじめに
思い立ってWSL2でeBPF動かしてみたくなったのでその備忘録です
0. 環境
$ uname -r
5.15.79.1-microsoft-standard-WSL2
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
1. bccのインストール
eBPFプログラムをコンパイルするためにbccをインストールします
2023/02/19: sudo apt-get installにdwarvesを追加
$ sudo apt-get install bpfcc-tools dwarves
2. Linuxカーネルヘッダーのインストール
WSLにはデフォルトでLinuxカーネルヘッダーが存在しないので、github からコードを落としてきてビルドする必要があります。
$ git clone https://github.com/microsoft/WSL2-Linux-Kernel
$ cd WSL2-Linux-Kernel
# バージョンはuname -rの結果と合わせる
$ git checkout -b linux-msft-wsl-5.15.79.1 refs/tags/linux-msft-wsl-5.15.79.1
$ vi Microsoft/config-wsl
# Microsoft/config-wslにビルドオプションが記述されているので以下の値を設定
# 2023/02/19 CONFIG_DEBUG_INFO_BTF=nからCONFIG_DEBUG_INFO_BTF=yに変更
CONFIG_DEBUG_INFO_BTF=y
CONFIG_IKHEADERS=y
CONFIG_XDP_SOCKETS=y
# ビルド (8は適当にCPU数で設定)
$ export LOCALVERSION=
$ make -j8 KCONFIG_CONFIG=./Microsoft/config-wsl
# インストール
$ sudo make modules_install
# 確認
$ ls /lib/modules
5.15.79.1-microsoft-standard-WSL2
3. サンプルプログラムの実行
bccのリポジトリにサンプルプログラムがあるので実行します
$ cd ..
$ git clone https://github.com/iovisor/bcc
$ cd bcc/examples
$ sudo python3 hello_world.py
# 以下のような出力が確認できたら多分成功
b' python3-2471 [011] d...1 8581.517825: bpf_trace_printk: Hello, World!'
4. まとめ
これでWSL2でも快適なeBPF生活が送れますね!
また追ってeBPFの記事を書いていきたいと思います。
5. 参考文献
Discussion