• 安装部署
  • 想安装测试Neonio,结果安装qbd的时候报错

我在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

不知道该问题该如何解决?非常感谢。