Checkinstall 是一個能從 tar.gz類的源代碼自動生成RPM/Debian或Slackware安裝包的程序.這樣使你能用幾乎所有的 tar.gz 類的源代碼生成「乾淨」的安裝或者卸載包.
簡介
經常出現這樣的問題:你很想試用的程序只有 tar.gz的源代碼可用(沒人提供 rpm 或者 Debian包).這樣,你只好下載回源代碼,解壓,然後手動編譯.到目前為止,一切正常.然而,當你想刪掉它的時候呢?
Makefile文件只包括了很少情況下的卸載常式.當然,你可以把程序安裝到臨時文件夾,然後記下所有由程序生成或修改的文件,最后刪除他們.但是如果這個程序要經常重新編譯,那樣做是非常痛苦的,工作量也是相當大的. Felipe Eduardo所寫的 CheckInstall [1] Sánchez Díaz Durán 就是用來解決這個問題的.
一般說來,我們編譯安 裝一個由GNU Autoconf配置的程序是採用如下的步驟:
./configure && make && make install.
這個 configure 腳本文件是用來「猜」出一系列系統相關的變數,這些變數是在後面的編譯過程要用到的.它將檢查系統變數值是否滿足編譯要求,然後使用這些變數在程序包內每個文件夾下生成 Makefile .此外,configure 腳本還會生成其他文件,他們是:
·每個文件夾/子文件夾下的一個或多個Makefile(s)
·一個名叫config.status的腳本
·一個文本文件config.log
·另一個名叫config.cache的腳本(可選的)
·帶有系統特殊定義的C頭文件(*.h)(可選項)
configure腳本文件成功運行之後, 你會輸入make來編譯程序,得到你需要的可執行文件.你也可能在make之後馬上使用make check來運行測試.但是這只是可選的步驟,
這需要這個程序包的支持.如果 make成功的完成了,你可以使用make install來安裝這個程序了——很明顯,完成這步你需要一些相關許可權.程序安裝好了,你可以在源代碼的文件夾下輸入make clean來清除這些生成的可執行文件和目標文件.如果你還想刪除由configure生成的文件,那麼輸入 then typemake distclean.后兩步同make check一樣(是可選的),它們通常是開發者在開發和測試階段所使用,也可以被一般使用者用來節省硬碟空間或者保持文件夾的結構簡潔明快.另外make distclean是的我們在不同類型的電腦上編譯程序成為可能.
關於GNU Autoconf的詳細資料可以在在線文檔[2]上找到.在基本介紹之外,你可以通過寫你自己的configure腳本、用M4編程和創建自己的宏等方式來學習更多有關GNU Build System的知識.
CheckInstall
前面提到,我們採用GNU Autoconf通過一系列如下指令來編譯程序:
./configure && make && make install
現在該是換一種方式的時候了,你可以使用CheckInstall.它採用自己的指令checkinstall來代替make install.其他兩個指令保留下來跟以前一樣,因此,現在這個指令序列使用 CheckInstall變成了:
./configure && make && checkinstall
指令checkinstall不僅默認運行了make install,
還監測所有安裝過程中的寫操作.為此,CheckInstall使用了Pancrazio de Mauro 所寫的程序Installwatch [3].在make install成功完成之後,CheckInstall會產生一個Slackware-, Debian- 或RPM- 安裝包,然後按照軟體包的默認配置安裝程序,並在當前目錄(或標準安裝包存儲目錄)留下一個生成的安裝包.而外,你可以通過修改變數PAK_DIR來修改保存這個目錄.這樣生成的安裝包安裝到其他機器上而無須重新編譯——當然,還得考慮軟體包的相互依賴性.
heckInstall並不只是使用make install,它還可以與其他安裝指令相協調.例如,如果安裝指令為setup.sh,那麼安裝指令序列變成:
./configure && make && checkinstall setup.sh
我們還可以讓CheckInstall帶著很多參數運行.如下命令會顯示所有可用的子參數,這些子參數大致分為:安裝選項(Install options), 腳本處理選項(Scripting options), 信息顯示選項(Info display options),安裝包選項(Package tuning options),清除選項(Cleanup options)和關於CheckInstall(About CheckInstall)等.
# checkinstall -h
如果CheckInstall帶著這些參數運行,他會使用這些參數值來代替配置文件checkinstallrc中相應的值.
CheckInstall也有自己的局限之處.它不能處理靜態連接的程序,
這樣Installwatch就不能監測到安裝過程中修改過文件了.總體說來,有兩類連接庫:動態的和靜態的.這些連接庫通過include-指令整合到程序中.靜態連接過的程序已經包含了所有需要的庫文件,運行時也就不需要再將這些庫載入內存中.這種程序與安裝在系統中的連接庫無關,
所謂的連接器(Linker)已經在編譯時把這些庫內置到可執行程序里了.
安裝
CheckInstall已經在大一些的發行版的「程序池」(software pools)中存在很長的時間了,可以通過發行版各自提供的安裝方式安裝.你也可以在主頁[4]上下載各種預編譯好的安裝包或者合適的源碼包.
CheckInstall的安裝非常簡單,只需要很少的步驟——但要成功的安裝CheckInstall你似乎需要 CheckInstall.在必要的make install之後,你輸入checkinstall,就會從編譯好的程序生成合適的二進位安裝包.現在,你可以使用你的安裝包管理程序來「乾淨的」安裝或者卸載了.在CheckInstall創建安裝包之前,你還得必須回答一個關於程序安裝包管理器的問題,並且還要檢查相關信息的正確性.這些信息將會出現在稍後生成的安裝包的頭部.
下面將展示安裝checkinstall-1.6.0beta4.tgz的全過程.這會安裝上CheckInstall、Installwatch和makepak,其中makepak是makepkg的修改版.如果你對新版本的改進感興趣,請參看Release Notes [5] 和/或 Changelog [6].
?$ tar xzf checkinstall-1.6.0beta4.tgz
?$ cd checkinstall-1.6.0beta4
checkinstall-1.6.0beta4 ?$ make
[...]
checkinstall-1.6.0beta4 ?$ su
Password:
checkinstall-1.6.0beta4 # make install
[...]
checkinstall-1.6.0beta4 # checkinstall
checkinstall 1.6.0beta4, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.
Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]? R
*************************************
*** RPM package creation selected ***
*************************************
This package will be built according to these values:
1 - Summary: [ CheckInstall installations tracker, version 1.6.0beta4 ]
2 - Name: [ checkinstall ]
3 - Version: [ 1.6.0beta4 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Applications/System ]
7 - Architecture: [ i386 ]
8 - Source location: [ checkinstall-1.6.0beta4 ]
9 - Alternate source location: [ ]
10 - Provides: [ checkinstall ]
11 - Requires: [ ]
Enter a number to change any of them or press ENTER to continue:
Installing with make install...
========================= Installation results =========================
[...]
========================= Installation successful ======================
Copying documentation directory...
./
./NLS_SUPPORT
./README
./FAQ
./TODO
./CREDITS
./INSTALL
./Changelog
./BUGS
./installwatch-0.7.0beta4/
./installwatch-0.7.0beta4/README
./installwatch-0.7.0beta4/TODO/usr/src/redhat/RPMS/i386/checkinstall-1.6.0beta4-1.i386.rpm
./installwatch-0.7.0beta4/VERSION
./installwatch-0.7.0beta4/INSTALL
./installwatch-0.7.0beta4/CHANGELOG
./installwatch-0.7.0beta4/BUGS
./installwatch-0.7.0beta4/COPYING
./RELNOTES
./COPYING
Copying files to the temporary directory...OK
Striping ELF binaries and libraries...OK
Compressing man pages...OK
Building file list...OK
Building RPM package...OK
NOTE: The package will not be installed
Erasing temporary files...OK
Writing backup package...OK
Deleting temp dir...OK
****************************************************************
完成.
新的安裝包保存在 /usr/src/redhat/RPMS/i386/checkinstall-1.6.0beta4-1.i386.rpm
你可以在系統中隨時安裝它:
rpm -i checkinstall-1.6.0beta4-1.i386.rpm
****************************************************************
checkinstall-1.6.0beta4 # cd /usr/src/redhat/RPMS/i386/
i386 # rpm -i checkinstall-1.6.0beta4-1.i386.rpm
i386 #
Debian 的用戶可以使用dpkg -i來安裝. Slackware用戶用 installpkg可以達到同樣目的.
使用包管理程序的查詢語句,你可以檢查安裝包中文件是否完全在程序庫中記錄了,還可以查看安裝包頭部的一些額外信息.在此