若需在Docker容器中运行任务,需先从宿主机拷贝内核头文件和内核编译配置文件至容器中:
docker exec 容器名 mkdir -p /lib/modules/$(uname -r) && docker cp -L /lib/modules/$(uname -r)/build 容器名:/lib/modules/$(uname -r) docker exec 容器名 mkdir -p /boot && docker cp -L /boot/config-$(uname -r) 容器名:/boot docker cp -L /proc/config.gz 容器名:/proc/config.gz
其中第二条和第三条命令请根据实际文件情况执行其中一个。
使用zcat /proc/config.gz或cat /boot/config-$(uname -r)查看内核参数设置,拥有eBFP能力的参数配置如下,若内核参数不一致,需重新配置后重新编译内核或重装系统。
1 2 3 4 5 6 |
CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_BPF_JIT=y CONFIG_HAVE_BPF_JIT=y #内核版本为4.1到4.6时 CONFIG_HAVE_EBPF_JIT=y #内核版本为4.7及以上时 CONFIG_BPF_EVENTS=y |
1
|
ll /lib/modules/$(uname -r)/build |
查看build目录是否存在指向文件,存在并指向源码内核文件则满足条件,不存在则不满足任务所需条件。
CentOS系统:
1
|
yum install kernel-headers kernel-headers.aarch64 |
Ubuntu系统可使用:
1
|
sudo apt-get install linux-headers-$(uname -r) |
若依旧没有对应指向文件,可手动链接/usr/src/kernels/$(uname -r)。