制作鏡像包時遇到的模塊加載錯誤的問題


最近遇到一個問題,定制的一個鏡像包,在啟動后,發現有些內核模塊加載是錯誤的,有些是正確的。使用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包,模塊都沒有加載正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM