更新目前使用的核心模組的完整過程是什麼?

更新目前使用的核心模組的完整過程是什麼?

我有一個帶有自訂 ZFS 核心模組的伺服器 18.04(0.8.x 與提供的 0.7.x)。

當我更新核心時,我必須定期重新編譯 ZFS 核心模組,否則該模組將被自動停用。

上次我不得不擺弄一段時間才能完成,所以這次我想提前知道所涉及的正確步驟。

我認為

  1. 更新內核和內核原始碼
  2. 下載模組原始碼並編譯模組
  3. 刪除先前的 kmod 軟體包並安裝新的軟體包

但是,由於需要核心模組來存取目前已掛載的一些檔案系統,下一步是什麼?只需重新啟動即可安裝新模組?

我有時還需要啟用自動導入服務,請參閱https://unix.stackexchange.com/questions/338260/zfs-mounting-only-one-of-my-pools-on-boot

答案1

如果為目前執行的核心更新模組,則需要停止使用該模組(即:umount所有檔案系統),rmmod zfs讓新模組可用,然後modprobe zfs再次載入它。重新啟動通常更容易,但如果需要,您可以在其他地方找到範例來幫助在系統運行時完成此操作。

  1. # # Stop using the module
  2. # rmmod zfs
  3. # modprobe zfs

如果您希望在每次更新核心時自動編譯並安裝模組的更新,您可能會對資料管理系統。有一個偉大的DKMS 包裝指南其中詳細討論了這一點。

這個想法是,您有一個模組,或者您希望在每次核心更新時應用對核心的一些更改。當apt更新所使用的核心時,您可以自動編譯和安裝模組。您可以透過 VirtualBox 以及一些工具找到很好的範例NVIDIA DKMS 驅動程式

另一個展示如何設定的好例子是帕賈克的 bcwc_pcie。編譯bcwc_pciefacetimehd模組並使其可供新核心使用的過程是有記錄的

設定 DKMS(核心更新時自動編譯)

這假設您已經遵循 Debian/Ubuntu deb 軟體包步驟。您需要驗證dkms.conf模組名稱facetimehd和版本號碼0.1是否正確,並更新或調整使用和的dkms.conf說明。-m-v

  • 安裝需要的套件:# apt install debhelper dkms
  • 如果安裝了舊包,請刪除:# dpkg -r bcwc-pcie
  • 建立一個工作目錄:# mkdir /usr/src/facetimehd-0.1
  • 更改為 git repo 目錄:$ cd bcwc_pcie
  • 將文件複製到:# cp -r * /usr/src/facetimehd-0.1/
  • 更改為該目錄:# cd /usr/src/facetimehd-0.1/
  • 刪除所有先前的 deb 和備份:# rm backup-*tgz bcwc-pcie_*deb
  • 清除以前的編譯:# make clean
  • 向 DKMS 註冊新模組:# dkms add -m facetimehd -v 0.1
  • 建構模組:# dkms build -m facetimehd -v 0.1
  • 建構 Debian 原始碼包:# dkms mkdsc -m facetimehd -v 0.1 --source-only
  • 建置 Debian 二進位套件:# dkms mkdeb -m facetimehd -v 0.1 --source-only
  • 將 deb 複製到本地:# cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
  • 刪除本機建置檔:# rm -r /var/lib/dkms/facetimehd/
  • 安裝新的 deb 套件:# dpkg -i /root/facetimehd-dkms_0.1_all.deb

如果您遇到任何問題,請閱讀此有關製作 DKMS 套件的指南: http://www.xkyle.com/building-linux-packages-for-kernel-drivers/


此範例中唯一缺少的部分bcwc_pcie是此程式碼庫未更新,而您正在編譯的模組程式碼可能會隨著時間的推移而變化。如果您能找到一個最新的下載,與您嘗試編譯的來源的特定版本。

dkms.conf我們可以看看DKMS 社群文檔

$ cat dkms.conf 
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes

您還可以添加選項以在構建或安裝之前或之後調用腳本,提供額外的(條件)make 命令、補丁命令等。這些選項和更多選項在 man dkms 的 dkms.conf 部分中進行了描述。

手冊頁

PRE_BUILD= 執行建置之前要執行的腳本的名稱。此路徑應相對於源的根目錄給出。

您可以建立一個目錄來包含下載並解壓縮的腳本最新版本的ZFS為構建做準備。這將有助於自動化該流程。您可以使用git或下載並提取latest原始程式碼。以下是如何確定 ZFS 的最新下載 URL 的範例:

$ curl -s https://api.github.com/repos/zfsonlinux/zfs/releases/latest | jq '.assets[].browser_download_url' | tr -d '"' | grep -E 'tar.gz$'
https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz

您提到了服務被禁用的併發症systemd。設定您自己的 ZFSdkms設定是否可以解決此問題?您安裝的軟體包是否依賴zfs-dkms會導致衝突的實際軟體包?至少,您可以連接POST_INSTALL並運行systemctl enable以啟用任何已停用的服務。


話雖這麼說,ZFS 是一個非常流行的檔案系統,並且應該已經有一個可用的 DKMS 套件。看來這是真的,而且zfs-dkms可用於宇宙。您可以查看該軟體包的具體信息,看看該軟體包是否已經可用,zfs-dkms是否適合您。

相關內容