2012-02-03

[Linux]Ubuntu 10.04 LTS 重編 Kernel 戰記

前言

首先,要來稱讚的是 Ubuntu 這個 Linux Distribution 的出現。因為 Ububtu 的出現,所以在 Linux 上面終於有一個比較容易維運的 Distribution,不過,當然也有可能是我笨,所以學不會 ReaHat 系統要怎麼做才不會把事情越便越複雜。
不過呢,大家都知道:「Linux 的 Kernel 的預設值,往往是給正常人使用是綽綽有餘的。」可是呢?本公司有一件很討厭的地方就是:「使用者眾,所以動不動 1 台 Proxy 不夠用,多台 Proxy 分配不平均」,套具孫逸仙的話就是:「不是患貧,而是患不均」(OS:「不過你確定不是患貧也患不均嗎?」)
所以管理的前人呢,就引入的 Linux Virtual Server + keepalived,來造就 HA 的 Server Load Balancer。不過呢,因為預設 IPVS 的同時連線數只能承載 4096,所以必須要來乖乖重新 Compile Kernel。
由於本公司內部 Ubuntu Mirror Site 不 Mirror Source Package,所以,不適用透過 apt-get 安裝 source 的方式,不過,貼心的 Ubuntu 還是有考慮到這點,不 Mirror Source Package 還是可以安裝 Kernel Source 而且重新編譯 Kernel 的。

操作步驟

  1. 安裝 Ubuntu 10.04.3-LTS
  2. 更新 apt 資料庫,同時更新現有套件:
     $ sudo apt-get update
     $ sudo apt-get upgrade
    
  3. 安裝前置相關 Binary Package:
     $ sudo apt-get install fakeroot kernel-wedge build-essential makedumpfile \
            kernel-package
     $ sudo apt-get install libncurses5 libncurses5-dev libelf-dev binutils-dev
    
  4. 安裝 Kernel Package
     $ sudo apt-get install linux-source
  5. 解壓縮 Kernel Package
     $ cd /usr/src/
     $ sudo tar jxf /usr/src/linux-source-<version-number-here>.tar.bz2
     $ cd linux-source-<version-number-here>
     $ 
    
  6. 修改 Config 並重新編譯 Kernel
     $ sudo cp -vi /boot/config-`uname -r` .config
     $ sudo vim .config
     <修改CONFIG_IP_VS_TAB_BITS 從 12->16 >
     $ diff .config.old .config 
    731c731
    < CONFIG_IP_VS_TAB_BITS=12
    ---
    > CONFIG_IP_VS_TAB_BITS=16
     $ sudo fakeroot make-kpkg --initrd --append-to-version=-some-string-here \
            kernel-image kernel-headers
    < 編譯過程省略 >
    
  7. 安裝 Kernel Package
     $ sudo mkdir -p /etc/kernel/postrm.d/
     $ sudo cp /usr/share/kernel-package/examples/etc/kernel/postrm.d/initramfs \
            /etc/kernel/postrm.d/initramfs
     $ cd /usr/src
     $ sudo dpkg -i linux-image-<version-number-here>-some-string-here_<version-number-here>.Custom_amd64.deb
     $ sudo dpkg -i linux-headers-<version-number-here>-some-string-here_<version-number-here>.Custom_amd64.deb
     $ cd /boot
     $ sudo mkinitramfs -k -o initrd.img-<version-number-here>-some-string-here <version-number-here>-some-string-here
     $ sudo update-grub2
    
  8. 重新開機,安裝 LVS+ keepalived 套件
     $ sudo apt-get install keepalived
     <檢查是否有達成目標>
     $ sudo ipvsadm -L
    IP Virtual Server version 1.2.1 (size=65536)
     <以下省略>
    

以上參考自:Ubuntu 官網上的Kernel Compile文件,不過呢,因為可能組合情形太多,所以常常會搞不清楚要看那一段,所以之前重裝了N次,最後終於成功了,把結果記錄一下………