Linux

在 ARM / Armbian Jessie 中安裝 sysdig - 在錯誤的核心版本中編譯的模組

  • May 14, 2020

在過去的幾天裡,我已經嘗試了幾次嘗試在我的 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-sunxi

   include/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(或接受其他核心版本)並輸出它們正在為此做正確的工作,但似乎在幕後至少有一部分模組編譯會諮詢相應的核心版本文件以調整版本編譯的模組。

引用自:https://unix.stackexchange.com/questions/273983