選擇一個合適的Linux發行版的重要因素就是是否有足夠豐富的軟件以及軟件的維護是否方便。對於正常情況下的使用,Ubuntu繼承自Debian系的deb已經可以滿足,部分情況下還是無法擺脫需要編譯安裝的情況。對於有點潔癖的管理員,或者需要大規模部署的情況,每台機器的編譯顯然不現實,於是就需要定制deb包。
本文以Ubuntu下的操作為例,同樣適用於Debian。
修改現有deb包
這種情況往往是現有的deb包已經滿足使用,只是需要修改部分文件,例如批量部署apache服務器而不希望每台主機上去修改配置。
- 下載現有的deb包:可以直接從安裝源中找到需要的deb文件,或者通過網易的鏡像站 http://mirrors.163.com/ubuntu/pool/
- 解包:
dpkg -X apache2-common_2.0.55-4ubuntu2.13_i386.deb apache2 #將apache2的包解壓
- 修改配置
cd apache2
這樣,你會看到apache2目錄下的文件結構很眼熟,跟安裝後的文件存放路徑完全一致。你可以根據需要修改對應的文件。
- 提取配置文件
dpkg -e ../dpkg -X apache2-common_2.0.55-4ubuntu2.13_i386.deb
會多出一個DEBIAN目錄,決定了部分安裝參數,同樣也可以定制修改。
- 重新封包
cd ..
dpkg -b apache2 myApache2.deb
- 安裝測試
dpkg -i myApache2.deb
通過deb-source制作deb包
這種方式往往是需要為原有的包進行小幅度優化,例如修改nginx軟件的header識別信息,並適用-O3參數重新編譯。
- 獲取source包
mkdir nginx
cd nginx
apt-get source nginx #等待下載
- 修改代碼
下載完成後會出現一個nginx*的目錄,既是nginx的源碼,如果需要修改,則直接進入該目錄下修改源碼。例如我修改src/core/nginx.h,定制了nginx的頭部信息。
- 修改編譯信息
源碼目錄下,相比直接在nginx官網下載的會增加幾個目錄,其中debian目錄下就是deb包特有的配置。修改方式可以參考上種方式。
debian/rules是一個可執行文件,直接編輯可以修改。例如我直接將頭部的CFLAGS += -O2 變態的修改為 CFLAGS += -O3 -msse3 -mmmx -maccumulate-outgoing-args(沒有經過測試,僅作為示例)
- 准備編譯環境和依賴包
apt-get install dpkg-buildpackage
下載打包工具
apt-get build-dep nginx
很多情況下不能完成編譯就是因為沒有執行這一步
- 重新打包
dpkg-buildpackage -uc -d
完成後上一級目錄將會出現一個或多個deb文件,視情況而定安裝測試。
源碼制作deb
這種方法相對比較少見了,事實上前兩種方法幾乎已經解決了80%的應用,即便沒有對應的Ubuntu包,也可以從豐富的Debian庫中找到合適的deb,這種情況只有少數項目才會需要,例如安裝 支持中文分詞的索引服務器coreseek。
- 下載,解壓源碼
wget http://…
tar ….
這一步沒什麼說的,下載,解壓而已。
- 預編譯
./configure …
make
也沒什麼特殊的,參考官方安裝手冊的操作
- 打包
apt-get install checkinstall #下載打包工具
checkinstall -D -y -install=no -default make install
一定記得要測試一下,相比前兩種方法出錯概率較高。
看到網上很多安裝教程都是編譯安裝的,抱著“沒有必要重新發明輪子”的原則,我還是建議盡量使用deb的方式安裝。同時建議社區盡可能的提供rpm和deb等安裝包,在方便用戶的同時同樣也有利於產品的優化。