內核熱補丁

出自 Arch Linux 中文维基

內核熱補丁 (Kernel Live Patching, KLP) 允許在不重啟整個作業系統的前提下進行內核的快速修復。從 4.0 版本開始,這個功能被加入內核 [1][2][3],用戶可以配置他們的的內核來啟用這項功能。通常來講,內核熱補丁通過以下的步驟實現:

  1. 獲取正在運行的原始碼樹
  2. 準備針對內核的補丁
  3. 使用一些工具(隨後)來修正並應用補丁

在內核熱補丁被官方支持前,一些項目提供了熱補丁工具。如甲骨文的 ksplice,SuSE 的 #kGraft,和紅帽的 #kpatch。他們用不同的方法實現了內核熱補丁。而內核加入的最基礎的功能是從 kGraft 和 kpatch 派生出來的。

kpatch[編輯 | 編輯原始碼]

安裝[編輯 | 編輯原始碼]

kpatchAUR 安裝 一個適當的內核,和 kpatch-gitAUR 對應的用戶界面工具。

你也可以通過啟用CONFIG_LIVEPATCH, CONFIG_DEBUG_INFO, 和 CONFIG_KALLSYMS,來手動編譯支持kpatch的內核。

注意: 安裝特定的內核後需要更新 啟動加載器

使用方法[編輯 | 編輯原始碼]

兩個包都安裝好、並重啟後,你可以執行

$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y
$ cd $ROOTDIR

假設你已經完成了一些修改,並在工作目錄下生成了一個some.patch補丁 (是執行makepkg -o後針對您自己的原始碼樹的補丁,而不是針對x.y版本的原始內核補丁)。啟動kpatch實用工具:

$ kpatch-build -s $(pwd) -v $(pwd)/vmlinux some.patch

這個命令涉及原始的和修改後的內核的編譯,因此可能會多花一些時間。編譯結束後,同目錄下會出現一個kpatch-some.ko模塊。現在,

# insmod kpatch-some.ko

就可以為內核打上補丁了。

更多信息,請查閱手冊頁或GitHub存儲庫

kGraft[編輯 | 編輯原始碼]

KGraft沒有在Arch linux環境下經過測試。

參考[編輯 | 編輯原始碼]