天天看點

記一次簡單更新核心(為docker ceph更新 2.6.32-4.1.6)

本人更新的目的是想在centos6.2上運作docker和ceph,docker官方建議核心版本在3.8.0及以上,ceph2.6.32後核心就加入了ceph的檔案系統子產品,但需手動挂上。于是就自己從linux核心官方網站上下載下傳源碼,自己編譯。

編譯安裝新核心,依賴于開發環境和開發庫

如果當初安裝系統是選擇了software workstation,上面的安裝包幾乎都已包含。

去 http://www.kernel.org 首頁,可以看到有stable, longterm等版本,longterm是比stable更穩定的版本,會長時間更新,是以我選擇 3.10.58。

我們在系統原有的核心配置檔案的基礎上建立新的編譯選項,是以複制一份到目前目錄下,命名為.config。接下來繼續配置:

make oldconfig會讀取目前目錄下的.config檔案,在.config檔案裡沒有找到的選項則提示使用者填寫。有的文檔裡介紹使用make memuconfig,它便是根據需要定制子產品,類似界面如下:(我們不需要)

記一次簡單更新核心(為docker ceph更新 2.6.32-4.1.6)

make oldconfig在生成新的.config之前備份為.config.old,并生成新的.config檔案

#make menuconfig 

依次選擇下面選項,ceph必須編譯為子產品m 

file systems-->network file systems--> ceph distributed file system 

儲存并退出 

#make 

#make modules_install 

#make install 

-j後面的數字是線程數,用于加快編譯速度,一般的經驗是,邏輯cpu,就填寫那個數字,例如有8核,則為-j8。(modules部分耗時30多分鐘)

[root@sean linux-3.10.58]# make install

實際運作到這一步時,出現<code>error: modinfo: could not find module vmware_balloon</code>,但是不影響核心安裝,是由于vsphere需要的子產品沒有編譯,要避免這個問題,需要在make之前時修改.config檔案,加入

hypervisor_guest=y

config_vmware_balloon=m

(這一部分比較容易出問題,參考下文異常部分)

安裝完成後,需要修改grub引導順序,讓新安裝的核心作為預設核心。

編輯 grub.conf檔案,

數一下剛剛新安裝的核心在哪個位置,從0開始,然後設定default為那個數字,一般新安裝的核心在第一個位置,是以設定default=0。

重新開機<code>reboot</code>:

記一次簡單更新核心(為docker ceph更新 2.6.32-4.1.6)

更新核心成功!

可以先清除,再重新編譯:

可以忽略,如果你有強迫症的話,嘗試以下辦法:

要在vmware上需要安裝vmware_balloon,可直接修改.config檔案,但如果vi直接加入<code>config_vmware_balloon=m</code>依然是沒有效果的,因為它依賴于<code>hypervisor_guest=y</code>。如果你不知道這層依賴關系,通過<code>make menuconfig</code>後,device drivers -&gt; misc devices 下是找不到vmware balloon driver的。(手動vi .config修改hypervisor_guest後,便可以找到這一項),另外,無論是通過make menuconfig或直接vi .config,最後都要運作<code>sh -c 'yes "" | make oldconfig'</code>一次得到最終的編譯配置選項。

然後,考慮到vmware_balloon可能在這個版本裡已更名為vmw_balloon,通過下面的方法保險起見:

其實,針對安裝docker的核心編譯環境,最明智的選擇是使用sciurus幫我們配置好的.config檔案。

也建議在<code>make bzimage</code>之前,運作腳本check-config.sh檢查目前核心運作docker所缺失的子產品。

當提示缺少其他module時如nf_nat_ipv4時,也可以通過上面的方法解決,然後重新編譯。

繼續閱讀