openGauss
开源数据库
openGauss社区官网
开源社区
OS兼容性weak-modules脚本修改方法
2023-12-27openGauss
问题现象
安装umdk-urma-kmod和umdk-urma-compat-ib-kmod依赖时,虽然安装成功,但是提示内核4.19.90-2012.5.0.0054.oe1.x86_64中的模块ubcore.ko与内核4.19.90-2109.1.0.0108.oe1.x86_64的符号不兼容,在使用modinfo和modprobe查看和加载ko文件时,无法找到ko文件。
安装umdk-urma-kmod依赖:
[root@localhost dlock]# rpm -ivh umdk-urma-kmod-1.3.0-206.3.0.B130.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:umdk-urma-kmod-1.3.0-206.3.0.B130################################# [100%] /var/tmp/rpm-tmp.wSpThz: line 2: fg: no job control Module ubcore.ko from kernel 4.19.90-2012.5.0.0054.oe1.x86_64 is not compatible with kernel 4.19.90-2109.1.0.0108.oe1.x86_64 in symbols: memcpy_s memset_s Module uburma.ko from kernel 4.19.90-2012.5.0.0054.oe1.x86_64 is not compatible with kernel 4.19.90-2109.1.0.0108.oe1.x86_64 in symbols: snprintf_s
安装umdk-urma-compat-ib-kmod依赖:
[root@localhost dlock]# rpm -ivh umdk-urma-compat-ib-kmod-1.3.0-206.3.0.B130.x86_64.rpm Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:umdk-urma-compat-ib-kmod-1.3.0-20################################# [100%] Module uboib.ko from kernel 4.19.90-2012.5.0.0054.oe1.x86_64 is not compatible with kernel 4.19.90-2109.1.0.0108.oe1.x86_64 in symbols: ib_destroy_cq_user ib_register_client ib_set_client_data ib_destroy_qp_user rdma_query_gid ib_query_port ib_unregister_client memcpy_s __ib_create_cq ib_dealloc_pd_user backport_dependency_symbol ib_query_qp strcpy_s __ib_alloc_pd memset_s ib_create_qp Created symlink /etc/systemd/system/multi-user.target.wants/uboib-module.service → /usr/lib/systemd/system/uboib-module.service.
问题原因
uboib依赖于OFED,而OFED是系统安装后单独安装的,其符号是在“/lib/modules/当前内核版本/extra“下的,在安装RPM依赖时,weak-modules脚本运行中找不到其符号,使用系统默认的符号去和ubcore等对应,判断兼容性出错。
表 1 操作系统兼容性信息
urma内核版本和系统版本不匹配。
使用rpm -ql umdk-urma-kmod命令查看urma编译使用的内核小版本。
/etc/modules-load.d/ubcore.conf /etc/modules-load.d/uburma.conf /lib/modules/4.19.90-2012.5.0.0054.oe1.x86_64/extra/urma /lib/modules/4.19.90-2012.5.0.0054.oe1.x86_64/extra/urma/ubcore.ko /lib/modules/4.19.90-2012.5.0.0054.oe1.x86_64/extra/urma/uburma.ko /usr/include/umdk /usr/src/ubcore/Module.symvers
使用uname -r查看系统小版本。
4.19.90-2109.1.0.0108.oe1.x86_64
查询得知,urma编译使用的内核小版本和实际的系统小版本不匹配。
没有正确获取到实际使用的ko文件进行兼容性判断,导致误判成不兼容。
weak-modules脚本判断是否兼容流程:
- 获取当前系统内核编译时的符号表,这里记为S-kernel。
- 获取“/lib/modules/$module_krel/extra“中额外ko文件的符号表,这里记为S-extra。
- 将前两步的符号表合并为S-all。
- 获取待检查的ko文件的符号表,这里记为S-target。
- 检查S-target中的所有符号是否能在S-all中找到匹配。
- 如果S-target中的所有符号都能在S-all中找到,那么兼容性就判断为可兼容,则在“/lib/modules/$(uname -r)/weak-updates/“中创建原ko文件的符号链接。
- 如果S-target中有符号不能在S-all中找到,那么兼容性将判断为不兼容,将会直接报错。处理方法请参见解决方法。
预防措施和规范建议
在安装RPM包之前,先检查urma编译使用的内核小版本和实际的系统小版本,版本匹配后再进行安装操作。
如果不匹配,亦可参见解决方法处理。
解决方法
将当前已RPM安装的ko文件加入S-all中进行符号依赖的判断。
登录服务器,打开weak-modules脚本文件。
vi /sbin/weak-modules
在图片白色位置新增对应脚本。
脚本如下:
if type "nm" > /dev/null; then find -L /lib/modules/$krel -name '*.ko' \ | xargs nm \ | sed -nre 's:^[0]*([0-9a-f]{8}) A __crc_(.*):0x\1 \2:p' else for ko in `find -L /lib/modules/$krel -name '*.ko'` do modprobe --show-exports $ko 2>/dev/null done fi >> $tmpdir/symvers-$krel
保存之后重新执行安装操作。