最近遇到一个问题,定制的一个镜像包,在启动后,发现有些内核模块加载是错误的,有些是正确的。使用modinfo去查询,可以看到加载的为内核版本中的模块(非自己定制的模块),而有些自己新增的模块没有加载成功。

这个问题也折腾了一两天的时间,最开始时排查做包日志,发现在安装rpm包时,%post后面的depmod都没有生效,报了如下错误:

Installing : openvswitch-kmod-2.7.x86_64                                                                                                                             40/340
depmod: ERROR: could not open directory /lib/modules/3.10.0.28_20.x86_64: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
warning: %post(openvswitch-kmod-2.7.x86_64) scriptlet failed, exit status 1
Non-fatal POSTIN scriptlet failure in rpm package openvswitch-kmod-2.7.x86_64

为什么会报这个错误呢?

/lib/modules/3.10.0.28_20.x86_64

这个路径,3.10.0.28_20为当前做包环境的内核版本,镜像包中的内核版本为3.10.0.28_21,在做镜像时有执行chroot操作,所以在镜像的当前目录中是没有/lib/modules/3.10.0.28_20.x86_64这个目录的。看来depmod执行时并不能很聪明的知道已经做过chroot操作。

因为获取的都为做包环境中的内核版本,而非镜像包中的内核版本。这样,即使每个rpm包都执行了depmod,但是在镜像包中却没有生成正确的modules.dep,即模块依赖关系是错误的,所以用modinfo查询也是错的。

经过仔细排查,将几个版本的做包日志打出来,发现每次出现加载错误的模块有略微差异,好像在某个包之前安装的包模块加载都正确,在某个包之后安装的包模块加载就是错误的。后来经过排查分析比对,锁定在了AXX包,果然,这个包里有如下操作:

echo "/lib/modules/%{kern_devel_ver}/extra/xx.ko" | /sbin/weak-modules --add-module --no-initramfs

而这个操作也会更新modules.dep。在安装了这个包后,镜像包中的modules.dep就发生了更新,在这个包之前安装的包,其模块都生成了正确的关系列表。而在这个包之后,再没哪个包在安装后会更新moduels.dep的,所以在这个包之后安装的rpm包,模块都没有加载正确。

转载于:https://www.cnblogs.com/xingmuxin/p/9132225.html

制作镜像包时遇到的模块加载错误的问题相关推荐

  1. max2104打开时提醒注册插件出错_启动3dmax时出现插件程序集加载错误怎么办?

    原因: 3ds Max 安装已损坏或者与安装的 .NET Framework 或 Windows 程序防火墙和权限冲突. 解决方案: 发生此一般性错误的原因可能有多种:Windows 更新或升级,甚至 ...

  2. Node.js(一、Node.js基础、模块加载机制、包等)

    Node.js(一.Node.js基础.模块加载机制.包等) 1.Node.js基础 1.1.Node是什么 1.2.Node环境安装失败解决方法 1.2.1.Node环境搭建 1.2.2.错误代码2 ...

  3. 在python中模块可以封装_python 制作python包,封装成可用模块教程

    首先编写py程序: printtest.py def test(): print('print test') 将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup ...

  4. 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题

    ** 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题 **打开dll文件时模块加载失败,电脑提示请确保二进制存储在指定的路径中,或 ...

  5. linux模块加载和模块卸载时出现的问题

    在编写驱动程序的时候有时候会出现这种情况,模块加载之后不能卸载或卸载之后不能在加载,cat /proc/devices 后发现设备还占用着设备号,这种情况下,再次加载驱动模块肯定不会成功,必须重新启动 ...

  6. 模块加载过程代码分析1

    一.概述 模块是作为ELF对象文件存放在文件系统中的,并通过执行insmod程序链接到内核中.对于每个模块,系统都要分配一个包含以下数据结构的内存区. 一个module对象,表示模块名的一个以null ...

  7. Node.js模块以及模块加载机制

    2019独角兽企业重金招聘Python工程师标准>>> Node.js中的模块 在Node.js中,以模块为单位划分功能,通过一个完整的模块加载机制使得开发人员可以将应用程序划分为多 ...

  8. Skywalking-13:Skywalking模块加载机制

    模块加载机制 基本概述 Module 是 Skywalking 在 OAP 提供的一种管理功能特性的机制.通过 Module 机制,可以方便的定义模块,并且可以提供多种实现,在配置文件中任意选择实现. ...

  9. python redis模块_大数据入门4 | Redis安装及python中的redis模块加载

    引:前面学习了中文分词.HMM.jieba...这些有很多内容需要总结,但是时间太紧,一下写不完.所以前面的就先放一边,届时复习时再写吧. 今天把刚学的遇到的问题总结一下. 实践部分遇到的问题: 1. ...

最新文章

  1. python编程试题单词倒排_Python 单词字母顺序不变且全部倒排
  2. andorid 自定义seekbar
  3. php评星,jQuery+PHP星级评分实现方法
  4. springboot全局常量_Spring-Boot配置属性和环境变量的加载顺序
  5. 树莓派python爬虫 股票_Python树莓派 爬虫心得
  6. OpenCasCade在一个窗体中的两个picture控件中 分别显示
  7. 使用PyCharm官方中文语言包汉化PyCharm
  8. Linux内核配置和编译过程详解
  9. 控制台 钢铁雄心2_钢铁雄心4控制台 (2)
  10. MATLAB代码:基于分时电价条件下家庭能量管理策略研究
  11. 修改Android手机的分辨率和屏幕密度
  12. 获取微信公众号文章封面图的方法
  13. [TransactionInterceptor] [ERROR] Applicationexception overridden by rollback exception
  14. 自然科学期刊能发表计算机论文吗,福建交通科技杂志发表论文能评职称吗
  15. 彻底删除aws亚马逊服务器使之不再计费
  16. 【LEACH协议】基于matlab实现无线传感器网络LEACH与DEEC协议
  17. 奈奎斯特与香农定理_奈奎斯特定理和香农定理解析
  18. PHP上传ZIP压缩包并解压
  19. Resilience4j简介
  20. 7-14 电话聊天狂人 (25 分)

热门文章

  1. python制作安装包(setup.py)
  2. 将pcre、zlib等包编译进nginx里去(转)
  3. ASP对很长的文章做分页输出
  4. (教学思路 c#之类一)声明类和对象、定义类成员及其引用
  5. Web 前端框架分类解读
  6. koa --- restful规范及其栗子
  7. Spring中Bean的定义继承
  8. 递归函数(九):最小不动点定理
  9. codeforces C. Diverse Permutation(构造)
  10. mysql存储引擎优化参数