Thursday, August 10, 2006

make rpm landmine & kernel.spec

kernel source 的 Makefile 寫的好是眾所皆知的,但我還是採到地雷了….

首先先說明一般 source 編譯過程,從 http://www.kernel.org/ download source code 下來之後,解開來依序做完下面的事情重開機應該就可以看到他出現在你的 grub 選項裡了:


  • make menuconfig
  • make (這指令會做 make modules && make bzImage)
  • make modules_install
  • make install
  • 完成重開

而如果我要編成 rpm 檔案,可以透過 make rpm 就可以做到,他會使用 scripts/package/mkspec 建出 kernel.spec 的設定檔,陷阱來啦!…這設定檔的header資訊有 version, tarball filename 等,這些資訊如果有更改版本名稱 (.kernelrelease) 或是編譯版本次數 (.version) 都會影響到 header 內容

因此當我已經有 kernel.spec file 之後,在修改上面提到任一檔案的話,再重新做 make rpm並不會檢查 version 資訊更改而重新建出 kernel.spec,因此過程中就會有 error 產生,所以這時就得先刪掉 kernel.spec 再重來一次..@@

為了這問題搞掉我兩個小時的時間….

此外為了讓 NCTUns engine 讀取的 /boot/System.Map-nctuns 可以在安裝 rpm 就自動產生,本來試圖在 kernel.spec 中加入建立 link 的動作,但發現這樣做在編 rpm 都會有找不到檔案的訊息發生,最後不得已只好採用「再多複製一份」的方式,將 System.map-$KERNELRELEASE 複製一份成 System.map-nctuns

HEMiDEMi Technorati Del.icio.us MyShare個人書籤 Yahoo

0 Comments: