- 已编辑
我在github上看到关于Neonio的相关介绍,想实际测试一下,实际系统为Ubuntu20.04
内核为5.13.0-48-generic
首先第一步安装dkms,具体命令如下:
wget http://ports.ubuntu.com/pool/main/d/dkms/dkms_2.8.1-5ubuntu1_all.deb
dpkg -i dkms_2.8.1-5ubuntu1_all.deb
注意:如果直接apt install dkms,则报错
然后安装qbd,具体命令如下:
git clone https://github.com/qingstor/neonio.git
cd neonio/depends/ubuntu/
dpkg -i pitrix-dep-qbd-dkms_2.1.3.rc1_all.deb pitrix-dep-qbd-util-static-2.1.3.rc1.amd64.deb
则会最终报错,相关信息如下:
Preparing to unpack …/dkms_2.8.1-5ubuntu2_all.deb …
Unpacking dkms (2.8.1-5ubuntu2) over (2.8.1-5ubuntu1) …
Setting up dkms (2.8.1-5ubuntu2) …
Setting up pitrix-dep-qbd-dkms (2.1.3.rc1) …
Removing old pitrix-dep-qbd-2.1.3.rc1 DKMS files…
---—————————
Deleting module version: 2.1.3.rc1
completely from the DKMS tree.
---—————————
Done.
Loading new pitrix-dep-qbd-2.1.3.rc1 DKMS files…
Building for 5.13.0-48-generic
Building for architecture x86_64
Building initial module for 5.13.0-48-generic
ERROR: Cannot create report: [Errno 17] File exists: ‘/var/crash/pitrix-dep-qbd-dkms.0.crash’
Error! Bad return status for module build on kernel: 5.13.0-48-generic (x86_64)
Consult /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/make.log for more information.
dpkg: error processing package pitrix-dep-qbd-dkms (–configure):
installed pitrix-dep-qbd-dkms package post-installation script subprocess returned error exit status 10
Processing triggers for man-db (2.9.1-1) …
Errors were encountered while processing:
pitrix-dep-qbd-dkms
E: Sub-process /usr/bin/dpkg returned an error code (1)
然后按照提示查看/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/make.log,相关内容如下:
config.status: creating Makefile
config.status: creating cmd/Makefile
config.status: creating etc/Makefile
config.status: creating etc/neonsan/Makefile
config.status: creating etc/bash_completion.d/Makefile
config.status: creating etc/modprobe.d/Makefile
config.status: creating module/Makefile
config.status: creating module/qbd/Makefile
config.status: creating module/qbd_tcp/Makefile
config.status: creating module/qbd_rdma/Makefile
config.status: creating man/Makefile
config.status: creating systemd/Makefile
config.status: creating systemd/system/Makefile
config.status: creating udev/Makefile
config.status: creating udev/rules.d/Makefile
config.status: creating include/qbd_config.h
config.status: executing depfiles commands
Making all in module
make[1]: Entering directory ‘/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module’
Making all in qbd
make[2]: Entering directory ‘/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd’
make -C /lib/modules/5.13.0-48-generic/build M=/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd modules CONFIG_DEBUG_INFO=y
make[3]: Entering directory ‘/usr/src/linux-headers-5.13.0-48-generic’
CC [M] /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_queue.o
CC [M] /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.o
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd.h:13,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/ratelimit_compat.h:9:20: error: redefinition of ‘ratelimit_state_init’
9 | static inline void ratelimit_state_init(struct ratelimit_state \*rs, | ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
In file included from ./include/linux/sched/user.h:8,
from ./include/linux/cred.h:17, from ./include/linux/sched/signal.h:10, from ./include/linux/rcuwait.h:6, from ./include/linux/percpu-rwsem.h:7, from ./include/linux/fs.h:33, from ./include/linux/huge_mm.h:8, from ./include/linux/mm.h:726, from ./include/linux/bvec.h:14, from ./include/linux/skbuff.h:17, from ./include/net/net_namespace.h:39, from ./include/linux/netdevice.h:37, from ./include/net/sock.h:46, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
./include/linux/ratelimit.h:9:20: note: previous definition of ‘ratelimit_state_init’ was here
9 | static inline void ratelimit_state_init(struct ratelimit_state \*rs, | ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn.h:4,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd.h: In function ‘get_now_nsec’:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd.h:94:18: error: storage size of ‘now’ isn’t known
94 | struct timespec now;
| ^\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd.h:95:2: error: implicit declaration of function ‘getrawmonotonic’ [-Werror=implicit-function-declaration]
95 | getrawmonotonic(&now);
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd.h:94:18: error: unused variable ‘now’ [-Werror=unused-variable]
94 | struct timespec now;
| ^\~\~
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_blk_queue.h:10,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_device.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_client.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn_tcp.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: At top level:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:9:24: error: conflicting types for ‘blk_rq_pos’
9 | static inline sector_t blk_rq_pos(struct request \*req) | ^\~\~\~\~\~\~\~\~\~
In file included from ./include/linux/blk-cgroup.h:23,
from ./include/linux/writeback.h:14, from ./include/linux/memcontrol.h:22, from ./include/net/sock.h:53, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
./include/linux/blkdev.h:982:24: note: previous definition of ‘blk_rq_pos’ was here
982 | static inline sector_t blk_rq_pos(const struct request *rq)
| ^\~\~\~\~\~\~\~\~\~
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_blk_queue.h:10,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_device.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_client.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn_tcp.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: In function ‘blk_rq_pos’:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:11:15: error: ‘struct request’ has no member named ‘sector’; did you mean ‘__sector’?
11 | return (req->sector);
| ^\~\~\~\~\~ | __sector
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: At top level:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:16:28: error: conflicting types for ‘blk_rq_sectors’
16 | static inline unsigned int blk_rq_sectors(struct request *req)
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~
In file included from ./include/linux/blk-cgroup.h:23,
from ./include/linux/writeback.h:14, from ./include/linux/memcontrol.h:22, from ./include/net/sock.h:53, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
./include/linux/blkdev.h:999:28: note: previous definition of ‘blk_rq_sectors’ was here
999 | static inline unsigned int blk_rq_sectors(const struct request *rq)
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_blk_queue.h:10,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_device.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_client.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn_tcp.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: In function ‘blk_rq_sectors’:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:18:15: error: ‘struct request’ has no member named ‘nr_sectors’; did you mean ‘__sector’?
18 | return (req->nr_sectors);
| ^\~\~\~\~\~\~\~\~\~ | __sector
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: In function ‘__blk_queue_max_hw_sectors’:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:43:2: error: implicit declaration of function ‘blk_queue_max_sectors’; did you mean ‘blk_queue_max_hw_sectors’? [-Werror=implicit-function-declaration]
43 | blk_queue_max_sectors(q, max_hw_sectors);
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~ | blk_queue_max_hw_sectors
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: In function ‘__blk_queue_max_segments’:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:56:2: error: implicit declaration of function ‘blk_queue_max_phys_segments’; did you mean ‘blk_queue_max_segments’? [-Werror=implicit-function-declaration]
56 | blk_queue_max_phys_segments(q, max_segments);
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~ | blk_queue_max_segments
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:57:2: error: implicit declaration of function ‘blk_queue_max_hw_segments’; did you mean ‘blk_queue_max_segments’? [-Werror=implicit-function-declaration]
57 | blk_queue_max_hw_segments(q, max_segments);
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~ | blk_queue_max_segments
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h: At top level:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:81:8: error: redefinition of ‘struct req_iterator’
81 | struct req_iterator {
| ^\~\~\~\~\~\~\~\~\~\~\~
In file included from ./include/linux/blk-cgroup.h:23,
from ./include/linux/writeback.h:14, from ./include/linux/memcontrol.h:22, from ./include/net/sock.h:53, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
./include/linux/blkdev.h:870:8: note: originally defined here
870 | struct req_iterator {
| ^\~\~\~\~\~\~\~\~\~\~\~
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_blk_queue.h:10,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_device.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_client.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn_tcp.h:5, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_conn.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:6, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/blkdev_compat.h:93: error: “rq_for_each_segment” redefined [-Werror]
93 | #define rq_for_each_segment(bvl, _rq, _iter) \
|
In file included from ./include/linux/blk-cgroup.h:23,
from ./include/linux/writeback.h:14, from ./include/linux/memcontrol.h:22, from ./include/net/sock.h:53, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
./include/linux/blkdev.h:882: note: this is the location of the previous definition
882 | #define rq_for_each_segment(bvl, _rq, _iter) \
|
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c: In function ‘sht_find’:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:54:54: error: macro “hlist_for_each_entry” passed 4 arguments, but takes just 3
54 | compat_hlist_for_each_entry(shn, phn, pht, hashnode) {
| ^
In file included from ./include/linux/preempt.h:11,
from ./include/linux/percpu.h:6, from ./include/linux/context_tracking_state.h:5, from ./include/linux/hardirq.h:5, from ./include/net/sock.h:38, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:4, from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
./include/linux/list.h:992: note: macro “hlist_for_each_entry” defined here
992 | #define hlist_for_each_entry(pos, head, member) \
|
In file included from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/qbd_hashtable.h:5,
from /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:1:
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/hlist_compat.h:15:62: error: ‘hlist_for_each_entry’ undeclared (first use in this function)
15 | #define compat_hlist_for_each_entry(tpos, pos, head, member) hlist_for_each_entry(tpos, pos, head, member)
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:54:3: note: in expansion of macro ‘compat_hlist_for_each_entry’
54 | compat_hlist_for_each_entry(shn, phn, pht, hashnode) {
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/include/linux/hlist_compat.h:15:62: note: each undeclared identifier is reported only once for each function it appears in
15 | #define compat_hlist_for_each_entry(tpos, pos, head, member) hlist_for_each_entry(tpos, pos, head, member)
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:54:3: note: in expansion of macro ‘compat_hlist_for_each_entry’
54 | compat_hlist_for_each_entry(shn, phn, pht, hashnode) {
| ^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:54:56: error: expected ‘;’ before ‘{’ token
54 | compat_hlist_for_each_entry(shn, phn, pht, hashnode) {
| ^
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:49:28: error: unused variable ‘shn’ [-Werror=unused-variable]
49 | struct sockaddr_hashnode *shn = NULL;
| ^\~\~
/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.c:48:21: error: unused variable ‘phn’ [-Werror=unused-variable]
48 | struct hlist_node *phn;
| ^\~\~
cc1: all warnings being treated as errors
make[4]: *** [scripts/Makefile.build:281: /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd/qbd_hashtable.o] Error 1
make[3]: *** [Makefile:1879: /var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd] Error 2
make[3]: Leaving directory ‘/usr/src/linux-headers-5.13.0-48-generic’
make[2]: *** [Makefile:27: all] Error 2
make[2]: Leaving directory ‘/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module/qbd’
make[1]: *** [Makefile:373: all-recursive] Error 1
make[1]: Leaving directory ‘/var/lib/dkms/pitrix-dep-qbd/2.1.3.rc1/build/module’
make: *** [Makefile:464: all-recursive] Error 1
至此,安装qbd失败,看提示是5.13的内核中编译错误从而退出。而在5.8系列内核中可以成功编译,并在/lib/modules/5.8.0-38-generic/updates/目录下发现dkms目录,其中有qbd.ko qbd_rdma.ko qbd_tcp.ko
因此可以通过命令行modprobe 进行安装,并通过lsmod查看到。
但是此后再利用apt install 安装其他软件,总是出现类似上面的错误,仍然会编译qbd for kernel 5.13
不知道该问题该如何解决?非常感谢。