在 ARM / Armbian Jessie 中安裝 sysdig - 在錯誤的核心版本中編譯的模組
在過去的幾天裡,我已經嘗試了幾次嘗試在我的 Lamobo R1 中的 Armbian 5.0/Debian Jessie 8.0 中安裝和執行 sysdig。
安裝後:
apt-get install -t jessie-backports sysdig sysdig-dkms dkms
執行時出現以下錯誤:
# sysdig Unable to load the driver error opening device /dev/sysdig0. Make sure you have root credentials and that the sysdig-probe module is loaded.
在幾天前的第一次嘗試中,我注意到該模組沒有被放置
/lib/modules/4.4.1-sunxi/updates/dkms/sysdig-probe.ko
並評論了 asm-offsets.h 中的包含/var/lib/dkms/sysdig/0.5.1/build/main.c
。我還必須
make scripts
在核心目錄中執行/usr/src/linux-headers-4.4.1-sunxi
。在此之後,我執行
/usr/lib/dkms/dkms_autoinstaller start
並編譯了模組。但是,執行時錯誤是相同的。執行 insmod 說:
#insmod /lib/modules/4.4.1-sunxi/updates/dkms/sysdig-probe.ko insmod: ERROR: could not insert module /lib/modules/4.4.1-sunxi/updates/dkms/sysdig-probe.ko: Invalid module format
執行 modinfo:
modinfo /lib/modules/4.4.1-sunxi/updates/dkms/sysdig-probe.ko
輸出:
filename: /lib/modules/4.4.1-sunxi/updates/dkms/sysdig-probe.ko author: sysdig inc license: GPL depends: vermagic: 4.4.1 SMP mod_unload ARMv7 p2v8 parm: max_consumers:Maximum number of consumers that can simultaneously open the devices (uint) parm: verbose:Enable verbose logging (bool)
所以很明顯該模組使用了錯誤的核心版本。
現在即使在安裝時,它也會說:
#apt-get install -t jessie-backports sysdig sysdig-dkms dkms Reading package lists... Done Building dependency tree Reading state information... Done sysdig is already the newest version. The following NEW packages will be installed: dkms sysdig-dkms 0 upgraded, 2 newly installed, 0 to remove and 9 not upgraded. Need to get 0 B/137 kB of archives. After this operation, 821 kB of additional disk space will be used. Do you want to continue? [Y/n] Selecting previously unselected package dkms. (Reading database ... 72251 files and directories currently installed.) Preparing to unpack .../dkms_2.2.0.3-2_all.deb ... Unpacking dkms (2.2.0.3-2) ... Selecting previously unselected package sysdig-dkms. Preparing to unpack .../sysdig-dkms_0.5.1-1~bpo8+1_all.deb ... Unpacking sysdig-dkms (0.5.1-1~bpo8+1) ... Processing triggers for man-db (2.7.0.2-5) ... Setting up dkms (2.2.0.3-2) ... Setting up sysdig-dkms (0.5.1-1~bpo8+1) ... Loading new sysdig-0.5.1 DKMS files... First Installation: checking all kernels... Building only for 4.4.1-sunxi Building initial module for 4.4.1-sunxi Done. sysdig-probe: Running module version sanity check. - Original module - No original module exists within this kernel - Installation - Installing to /lib/modules/4.4.1-sunxi/updates/dkms/ depmod.... DKMS: install completed.
同樣,sysdig-probe.ko,儘管有正在編譯為 4.4.1-sunxi 的消息,但正在為 4.4.1 核心而不是 4.4.1-sunxi 編譯。
我的
uname -r
輸出:4.4.1-sunxi。我既沒有安裝 4.4.1 核心,也沒有安裝 4.4.1 原始碼。root@ruir:/usr/src# ls -la total 16 drwxr-xr-x 4 root root 4096 Apr 3 11:06 . drwxr-xr-x 11 root root 4096 Oct 23 21:04 .. drwxr-xr-x 25 root root 4096 Mar 30 21:29 linux-headers-4.4.1-sunxi drwxr-xr-x 2 root root 4096 Apr 3 11:06 sysdig-0.5.1
所以我的問題是,我可以更改 Linux 中的任何文件/配置項以使其編譯為 4.4.1-sunxi 而不是 4.4.1?
我不得不
/lib/modules/4.4.1-sunxi/build
將以下出現的 4.4.1 更改為 4.4.1-sunxiinclude/generated/utsrelease.h:#define UTS_RELEASE "4.4.1" include/config/auto.conf.cmd:ifneq "$(KERNELVERSION)" "4.4.1" include/config/kernel.release:4.4.1
在此之後,我能夠
sysdig-probe.ko
使用正確的版本安裝 sysdig/compile。所以看起來雖然一些腳本確實
uname -r
(或接受其他核心版本)並輸出它們正在為此做正確的工作,但似乎在幕後至少有一部分模組編譯會諮詢相應的核心版本文件以調整版本編譯的模組。