制作镜像包时遇到的模块加载错误的问题
最近遇到一個(gè)問題,定制的一個(gè)鏡像包,在啟動(dòng)后,發(fā)現(xiàn)有些內(nèi)核模塊加載是錯(cuò)誤的,有些是正確的。使用modinfo去查詢,可以看到加載的為內(nèi)核版本中的模塊(非自己定制的模塊),而有些自己新增的模塊沒有加載成功。
這個(gè)問題也折騰了一兩天的時(shí)間,最開始時(shí)排查做包日志,發(fā)現(xiàn)在安裝rpm包時(shí),%post后面的depmod都沒有生效,報(bào)了如下錯(cuò)誤:
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為什么會(huì)報(bào)這個(gè)錯(cuò)誤呢?
/lib/modules/3.10.0.28_20.x86_64這個(gè)路徑,3.10.0.28_20為當(dāng)前做包環(huán)境的內(nèi)核版本,鏡像包中的內(nèi)核版本為3.10.0.28_21,在做鏡像時(shí)有執(zhí)行chroot操作,所以在鏡像的當(dāng)前目錄中是沒有/lib/modules/3.10.0.28_20.x86_64這個(gè)目錄的。看來depmod執(zhí)行時(shí)并不能很聰明的知道已經(jīng)做過chroot操作。
因?yàn)楂@取的都為做包環(huán)境中的內(nèi)核版本,而非鏡像包中的內(nèi)核版本。這樣,即使每個(gè)rpm包都執(zhí)行了depmod,但是在鏡像包中卻沒有生成正確的modules.dep,即模塊依賴關(guān)系是錯(cuò)誤的,所以用modinfo查詢也是錯(cuò)的。
經(jīng)過仔細(xì)排查,將幾個(gè)版本的做包日志打出來,發(fā)現(xiàn)每次出現(xiàn)加載錯(cuò)誤的模塊有略微差異,好像在某個(gè)包之前安裝的包模塊加載都正確,在某個(gè)包之后安裝的包模塊加載就是錯(cuò)誤的。后來經(jīng)過排查分析比對(duì),鎖定在了AXX包,果然,這個(gè)包里有如下操作:
echo "/lib/modules/%{kern_devel_ver}/extra/xx.ko" | /sbin/weak-modules --add-module --no-initramfs而這個(gè)操作也會(huì)更新modules.dep。在安裝了這個(gè)包后,鏡像包中的modules.dep就發(fā)生了更新,在這個(gè)包之前安裝的包,其模塊都生成了正確的關(guān)系列表。而在這個(gè)包之后,再?zèng)]哪個(gè)包在安裝后會(huì)更新moduels.dep的,所以在這個(gè)包之后安裝的rpm包,模塊都沒有加載正確。
轉(zhuǎn)載于:https://www.cnblogs.com/xingmuxin/p/9132225.html
總結(jié)
以上是生活随笔為你收集整理的制作镜像包时遇到的模块加载错误的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《终极算法--机器学习和人工智能如何重塑
- 下一篇: js正则表达式匹配span标签