Linux 的源碼安裝工具 CheckInstall

引言

常常出現這樣的問題:很想試用的程序只有源代碼(好比 tar.gz )可用,沒人提供 RPM 或者Debian 包。你只好下載源代碼,解壓,而後手動編譯。到目前爲止,一切正常。然而,當你想刪除它的時候呢?php

Makefile 文件只包括了不多狀況下的卸載例程。固然,你能夠把程序安裝到臨時文件夾,而後記下全部由程序生成或修改的文件,最後刪除他們。可是若是這個程序要常常從新編譯,這樣作是很是痛苦的,工做量也至關大。Felipe Eduardo 所寫的 CheckInstall 就是用來解決這個問題的。html

 

用 GNU Autoconf 安裝程序

通常說來,咱們編譯安裝一個由 GNU Autoconf 配置的程序是採用以下的步驟:linux

./configure && make && make install

這個 configure 腳本文件是用來「猜」出一系列系統相關的變量,這些變量是在後面的編譯過程要用到的。它將檢查系統變量值是否知足編譯要求,而後使用這些變量在程序包內每一個文件夾下生成 Makefile。此外,configure 腳本還會生成其它文件:工具

  • 每一個文件夾/子文件夾下的一個或多個 Makefile(s)
  • 一個名叫 config.status 的腳本
  • 一個文本文件 config.log

Configure 腳本文件成功運行以後, 你會輸入 make 來編譯程序,獲得你須要的可執行文件。若是 make 成功的完成,你可使用 make install 來安裝這個程序。學習

 

用 CheckInstall 安裝程序

上節咱們採用 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

圖 1. 運行命令「checkinstall –h」顯示全部可用的子參數
運行命令「checkinstall –h」

 

這些子參數大體分爲:ip

  • 安裝選項(Install options)
  • 腳本處理選項(Scripting options)
  • 信息顯示選項(Info display options)
  • 安裝包選項(Package tuning options)
  • 清除選項(Cleanup options)
  • 關於 CheckInstall (About CheckInstall)。

若是 CheckInstall 帶着這些參數運行,它會使用這些參數值來代替配置文件 checkinstallrc 中相應的值。

CheckInstall 也有本身的侷限之處。它不能處理靜態鏈接的程序,由於這樣 Installwatch 就不能監測到安裝過程當中修改過文件了。整體說來,有兩類鏈接庫:動態的和靜態的。這些鏈接庫經過 include 指令整合到程序中。靜態鏈接過的程序已經包含了全部須要的庫文件,運行時也就不須要再將這些庫載入內存中。這種程序與安裝在系統中的鏈接庫無關,由於所謂的鏈接器(Linker)已經在編譯時把這些庫內置到可執行程序裏了。

 

CheckInstall 的安裝

咱們能夠在 CheckInstall 的主頁上下載各類預編譯好的安裝包或者合適的源碼包。下面將展現安裝最新的源代碼 checkinstall-1.6.1.tgz 的全過程。這會安裝上 CheckInstall、Installwatch和 makepak,其中 makepak 是 makepkg 的修改版。若是你對新版本的改進感興趣,請參看Release Notes 和 Changelog。

清單 1. 生成 checkinstall 的 rpm 安裝包
# 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
圖 2. 運行命令「checkinstall」生成 rpm 包的圖示過程
運行命令「checkinstall」生成 rpm 包的圖示過程
圖 2.1. 過程一
過程一
圖 2.2. 過程二
過程二
圖 2.3. 過程三
過程三

checkinstall-1.6.1 的 rpm 包已經生成,咱們用 rpm 來安裝它。

清單 2. 用生成的 rpm 包安裝 checkinstall
checkinstall-1.6.1# cd /usr/src/redhat/RPMS/i386/
i386# rpm -i checkinstall-1.6.1.rpm

checkinstall-1.6.1 安裝完畢。使用包管理程序的查詢語句,你能夠檢查安裝包中文件是否徹底在程序庫中記錄了,還能夠查看安裝包頭部的一些額外信息。

圖 3. 檢查 checkinstall 的 RPM 包
檢查 checkinstall 的 RPM 包
 

CheckInstall 的配置

你能夠經過修改配置文件 /usr/local/lib/checkinstall/checkinstallrc 來改變 CheckInstall 的默認配置。

文件值得注意的變量有 INSTYPE,INSTALL 和 PAK_DIR。

INSTYPE 變量決定生成何種類型安裝包。

圖 4. 查看變量 INSTYPE
查看變量 INSTYPE

PAK_DIR 變量決定安裝包的存儲目錄。

圖 5. 查看變量 PAK_DIR
查看變量 PAK_DIR

INSTALL 變量決定是隻生成安裝包仍是一塊兒將這個包立刻安裝。

0-只生成安裝包

1-不只生成安裝包,還將包當即安裝

圖 6. 查看變量 INSTALL
查看變量 INSTALL
 

用 CheckInstall 製做 RPM 包實例

上兩節咱們把 Checkinstall 安裝配置完成,這節以 squid-2.6.STABLE12.tar.bz2 爲例,說明用checkinstall 製做編譯成 squid-2.6.STABLE12-1.i386.rpm 包的具體方法。

清單 3. 生成 squid-2.6.STABLE12 的 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 包期間會出現一些選項,選擇默認的便可。

圖 7. 運行命令「checkinstall」生成 rpm 包的圖示過程
運行命令「checkinstall」生成 rpm 包的圖示過程
圖 7.1. 過程一
過程一
圖 7.2. 過程二
過程二
圖 7.3. 過程三
過程三
圖 7.4. 過程四
過程四
清單 4. 用生成的 rpm 包安裝 squid-2.6.STABLE12
squid-2.6.STABLE12# cd /usr/src/redhat/RPMS/i386/
i386# rpm -ivh squid-2.6.STABLE12-1.i386.rpm
圖 8. 檢查 squid-2.6.STABLE12 的 RPM 包
檢查 squid-2.6.STABLE12 的 RPM 包
 

結束

CheckInstall 是一款優秀的源碼安裝軟件,它使得 Linux 軟件管理更加方便。特別是在源碼須要常常重複編譯的狀況下,CheckInstall 可讓你絲絕不破壞系統一致性的前提下徹底的卸載程序。並且,你還可使用這些編譯好的安裝包直接在其餘的機器上安裝無須再從新編譯。

參考資料

 

src:http://www.ibm.com/developerworks/cn/linux/l-cn-checkinstall/

相關文章
相關標籤/搜索