iovisor / kubectl-trace

Schedule bpftrace programs on your kubernetes cluster using the kubectl
MIT License
2.04k stars 165 forks source link

Kernel headers not found in `/usr/src` #176

Open fandahao17 opened 2 years ago

fandahao17 commented 2 years ago

On some distributions (e.g., my CentOS 7) /lib/modules/$(uname -r)/build is a symlink to the real kernel header directory in /usr/src/kernels/$(uname -r).

root@bpftrace-pod:/# ls -al /lib/modules/5.4.146
total 4636
drwxr-xr-x   4 root root    4096 Oct 28 13:00 .
drwxr-xr-x. 10 root root     255 Oct 28 11:20 ..
lrwxrwxrwx   1 root root      24 Oct 28 13:00 build -> /usr/src/kernels/5.4.146
... (Omiited to save space)

Thus, #77 mounted /usr/src in the pod template to include the kernel headers. #103 later mounted the whole /usr/ to avoid potentially creating /usr/src on the host. /usr is mounted as /usr-host in the guest pod and a symlink is created in the pod from /usr/src to /usr-host/src, so bpftrace can still find the kernel headers through the symlink.

However, in #104 this symlink seems to be removed, leaving /usr/src/ empty.

root@bpftrace-pod:/# ls -al /usr/src
total 0
drwxr-xr-x 2 root root  6 Apr 15  2020 .
drwxr-xr-x 1 root root 25 Jun  9 07:27 ..

Consequently, bpftrace is not able to find the kernel headers, which causes /bpftrace/include/clang_workarounds.h:14:10: fatal error: 'linux/types.h' file not found. This repo has multiple issues regarding this error.

I guess re-linking /usr/src to /usr-host could fix this problem.

rajeeshckr commented 1 year ago

I am facing the same problem.

image