向內核應用補丁的正確方法?

向內核應用補丁的正確方法?

我正在按照位於的說明進行操作這裡設定我的伺服器。它指出我必須應用已下載到電腦上的補丁。我的問題是,文章說使用以下指令:

/usr/src/linux # patch -p1 < file.diff //note I replace file.diff w/ routes-2.6.36.16.diff

這將返回:

-bash: /usr/src/linux: No such file or directory

我繼續假設/linux #應該替換為實際的 Linux 核心版本/目錄。我已經使用以下命令嘗試過:

/usr/src/linux-headers-2.6.35.22 patch -p1 < file.diff

這返回相同的。當我查看 /usr/src 的內容時,我只有兩個目錄linux-headers-2.6.35.22,並且linux-headers-2.6.35.22-generic-pae我需要有關向核心應用補丁的正確方法的指導。

編輯

如果我執行/usr/src/linux-headers-2.6.35.22/ patch -p1 file.diff我得到-bash: /usr/src/linux-headers-2.6.35.22: is a directory.我需要知道如何找到需要在這裡修補的特定文件...

答案1

您需要下載原始碼。你可以透過 apt-src 來做到這一點,但我(個人)會從以下位置獲取最新的內核.org,解壓縮它,修補它(只需使用像桌面這樣的本地路徑,它根本不需要隱藏在 /usr/src 中!)並按照“老式的方式”編譯它的說明。

請注意,某些補丁僅適用於某些版本的核心(這包括單點發行版),因此請確保您的補丁適用於來源版本,然後再浪費 20-30 分鐘進行編譯。

但您的具體問題是您需要位於要套用補丁的目錄中。在你的情況下:

cd /usr/src/linux-headers-2.6.35.22/
patch -p1 < /path/to/file.diff

顯然更改補丁的路徑(或將其貼在同一目錄中)。如果來源檔案由 root 使用者擁有,請sudo在 patch 命令上新增前綴或sudo su在執行此操作時執行以成為 root 使用者。

答案2

為了避免挫折感,您通常應該以 Ubuntu 方式執行此類操作。使用官方包的完整說明可以在這裡找到:

https://help.ubuntu.com/community/Kernel/Compile

它提供了用於啟動和運行自訂核心的依賴項清單和逐步命令。

透過遵循該過程,您最終將獲得一個包含自訂核心的可卸載軟體包,這意味著您將來可以根據需要切換回官方核心。

答案3

您所遵循的說明將向您顯示命令列提示符/usr/src/linux #,這不是您作為命令的一部分鍵入的內容。鍵入將套用補丁的命令從此處開始patch並從此處繼續。

相關內容