常常出現這樣的問題:很想試用的程序只有源代碼(好比 tar.gz )可用,沒人提供 RPM 或者Debian 包。你只好下載源代碼,解壓,而後手動編譯。到目前爲止,一切正常。然而,當你想刪除它的時候呢?php
Makefile 文件只包括了不多狀況下的卸載例程。固然,你能夠把程序安裝到臨時文件夾,而後記下全部由程序生成或修改的文件,最後刪除他們。可是若是這個程序要常常從新編譯,這樣作是很是痛苦的,工做量也至關大。Felipe Eduardo 所寫的 CheckInstall 就是用來解決這個問題的。html
通常說來,咱們編譯安裝一個由 GNU Autoconf 配置的程序是採用以下的步驟:linux
./configure && make && make install
這個 configure 腳本文件是用來「猜」出一系列系統相關的變量,這些變量是在後面的編譯過程要用到的。它將檢查系統變量值是否知足編譯要求,而後使用這些變量在程序包內每一個文件夾下生成 Makefile。此外,configure 腳本還會生成其它文件:工具
Configure 腳本文件成功運行以後, 你會輸入 make 來編譯程序,獲得你須要的可執行文件。若是 make 成功的完成,你可使用 make install 來安裝這個程序。學習
上節咱們採用 GNU Autoconf 來編譯程序,如今該是換一種方式的時候了。你可使用CheckInstall 工具。它採用本身的指令 checkinstall 來代替 make install。其餘兩個指令保留下來跟之前同樣,所以,如今這個指令序列使用 CheckInstall 變成:網站
./configure && make && checkinstall
指令 checkinstall 不只默認運行了 make install,並且還監測全部安裝過程當中的寫操做。爲此,CheckInstall 使用了 Pancrazio de Mauro 所寫的程序 Installwatch。在 make install 成功完成以後,CheckInstall 會產生一個 Slackware-,Debian- 或RPM- 安裝包,而後按照軟件包的默認配置來安裝程序,並在當前目錄(或標準安裝包存儲目錄)留下一個生成的安裝包。你能夠經過修改變量 PAK_DIR 來修改這個保存目錄。ui
CheckInstall 並不僅是使用 make install,它還能夠與其餘安裝指令相協調。例如,若是安裝指令爲 setup.sh,那麼安裝指令序列變成:code
./configure && make && checkinstall setup.sh
咱們還可讓 CheckInstall 帶着不少參數運行。htm
這些子參數大體分爲:ip
若是 CheckInstall 帶着這些參數運行,它會使用這些參數值來代替配置文件 checkinstallrc 中相應的值。
CheckInstall 也有本身的侷限之處。它不能處理靜態鏈接的程序,由於這樣 Installwatch 就不能監測到安裝過程當中修改過文件了。整體說來,有兩類鏈接庫:動態的和靜態的。這些鏈接庫經過 include 指令整合到程序中。靜態鏈接過的程序已經包含了全部須要的庫文件,運行時也就不須要再將這些庫載入內存中。這種程序與安裝在系統中的鏈接庫無關,由於所謂的鏈接器(Linker)已經在編譯時把這些庫內置到可執行程序裏了。
咱們能夠在 CheckInstall 的主頁上下載各類預編譯好的安裝包或者合適的源碼包。下面將展現安裝最新的源代碼 checkinstall-1.6.1.tgz 的全過程。這會安裝上 CheckInstall、Installwatch和 makepak,其中 makepak 是 makepkg 的修改版。若是你對新版本的改進感興趣,請參看Release Notes 和 Changelog。
# tar xzf checkinstall-1.6.1.tgz # cd checkinstall-1.6.1 checkinstall-1.6.1# make checkinstall-1.6.1# make install checkinstall-1.6.1# checkinstall
checkinstall-1.6.1 的 rpm 包已經生成,咱們用 rpm 來安裝它。
checkinstall-1.6.1# cd /usr/src/redhat/RPMS/i386/ i386# rpm -i checkinstall-1.6.1.rpm
checkinstall-1.6.1 安裝完畢。使用包管理程序的查詢語句,你能夠檢查安裝包中文件是否徹底在程序庫中記錄了,還能夠查看安裝包頭部的一些額外信息。
你能夠經過修改配置文件 /usr/local/lib/checkinstall/checkinstallrc 來改變 CheckInstall 的默認配置。
文件值得注意的變量有 INSTYPE,INSTALL 和 PAK_DIR。
INSTYPE 變量決定生成何種類型安裝包。
PAK_DIR 變量決定安裝包的存儲目錄。
INSTALL 變量決定是隻生成安裝包仍是一塊兒將這個包立刻安裝。
0-只生成安裝包
1-不只生成安裝包,還將包當即安裝
上兩節咱們把 Checkinstall 安裝配置完成,這節以 squid-2.6.STABLE12.tar.bz2 爲例,說明用checkinstall 製做編譯成 squid-2.6.STABLE12-1.i386.rpm 包的具體方法。
# tar jxvf squid-2.6.STABLE12.tar.bz2 # cd squid-2.6.STABLE12 squid-2.6.STABLE12# ./configure --prefix=/usr/local/squid --sysconfdir=/etc \ --enable-arp-acl --enable-linux-netfilter -enable-err-language="Simplify_Chinese" \ --enable-storeio=ufs --enable-default-err-language="Simplify_Chinese" \ --enable-auth="basic" --enable-baisc-auth-helpers="NCSA" --enable-underscore squid-2.6.STABLE12# make squid-2.6.STABLE12# checkinstall
生成 rpm 包期間會出現一些選項,選擇默認的便可。
squid-2.6.STABLE12# cd /usr/src/redhat/RPMS/i386/ i386# rpm -ivh squid-2.6.STABLE12-1.i386.rpm
CheckInstall 是一款優秀的源碼安裝軟件,它使得 Linux 軟件管理更加方便。特別是在源碼須要常常重複編譯的狀況下,CheckInstall 可讓你絲絕不破壞系統一致性的前提下徹底的卸載程序。並且,你還可使用這些編譯好的安裝包直接在其餘的機器上安裝無須再從新編譯。
src:http://www.ibm.com/developerworks/cn/linux/l-cn-checkinstall/