🫠

WSL2でeBPFのhello_world.pyを動かすまで

2023/02/11に公開

はじめに

思い立って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. 参考文献

https://caddi.tech/archives/3880
https://zenn.dev/hidenori3/articles/186861b2d5220b
https://qiita.com/matarillo/items/bcae7e61ada3d1a7f9a4

Discussion