打造自己的checkinstall
相信使用過rpmbuild 打包的讀者,對整個打包過程都記憶猶新,這個過程對於一個新手來說是異常複雜的。不僅要需要學習spec 格式文件的規 範,還要把文件先打包成tar ,然後再把tar 文件拷貝的到指定的目錄過程去,最後執行rpmbuild 命令。中間任何一步出錯,都要從頭再來。經過多次 往返,才能打成一個rpm 包。這一切複雜的過程,迫使你不等不找一種更簡單的打包方式。
checkinstall ,是一個能從 tar.gz 類的源代碼自動生成 RPM /Debian 或Slackware 安裝包的程序。通過 CheckInstall ,你就能用幾乎所有的 tar.gz 類的源代碼來生成“幹淨”的安裝或者卸載包。
checkinstall 的使用非常方便,可以從checkinstall-1.6.1-1.i386.rpm 獲取checkinstall 的rpm 包,直接部署到我們的機器上,但是我們要打造自己的checkinstall ,所以我們最好下載源代碼來,獲取源代碼 。
通過源代碼安裝checkinstall 的過程如下
# 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 打包,首先要確保你的項目中包含有Makefile 文件,我們在包含有Makefile 的目錄內執行
sudo checkinstall
指令 checkinstall 不僅默認運行了 make install ,而且還監測所有安裝過程中的寫操作。在 make install 成功完成之後,CheckInstall 會產生一個 Slackware- ,Debian- 或RPM- 安裝包,並在當前目錄(或標準安裝包存儲目錄)留下一個生成的安裝包。你可以通過修改變量 PAK_DIR 來修改這個保存目錄。
更詳細的過程可以參考《Linux 的源碼安裝工具 CheckInstall 》
Checkinstall 的打包過程相對於rpmbuild 已經很簡單了,至少我們不用寫spec 文件,我們不用tar 文件,也不用拷貝來拷貝去。但是,具體應用中,還是有很多不爽的地方
- checkinstall 中有太多的交換命令,我能不能去掉?
- checkinstall 獲得項目名稱和版本號,以及依賴關係,都不是我想要的,每次打包時,修改這些信息很麻煩,能不能想spec 文件那樣, 把Name ,Version ,Summary ,Packager 等信息寫到一個文件內,checkinstall 從這個文件內讀取?
- 我們的項目需求,一次性需要打多個包,比如我要打一個數據庫包,打一個應用包,checkinstall 可以實現嗎?
- 等等,好像是用checkinstall 打的包安裝的時候有問題,提示
-
error: unpacking of archive failed on file /bin/basename;4877040f: cpio: MD5 sum mismatch
- 這是一個 bug ,安裝的時候需要指定 --nomd5 ,這豈不是很麻煩?
- 在部署我的 rpm 包前,我希望執行一段 shell 命令,做些初始化工作。安裝完成後,再執行一段 shell 命令,做些清理工作。可是 checkinstall 不支持?難道我隻能用 spec 嘛?
- 在 spec 文件中,我可以在 %changelog 詳細描述,我每次打包時的日誌,而現在似乎我不能這樣,怎麼辦?
筆者在使用 checkinstall 的時候,也碰到這種問題,尤其是令人惡心的是 MD5 驗證失敗的問題,查到 checkinstall 的官方 faq ,發現第一條就是這個問題
I use checkinstall 1.6.1 and the rpm I create report a faild MD5 verification when installed and/or the package has unrelated files inside.
This is a known bug in version 1.6.1 and will be fixed in the next release. As a workaround you can use the --inspect, --review-spec and/or --review-control command line options and edit out the files to be included in the package.
再看一下,最新版本的官方更新時間是 November 1st, 2006 ,很明顯,指望官方修改這個 bug 已經不可能了。看來隻能操刀子自己從頭修改吧。
經過修改後的 checkinstall_cn ,不但解決了 MD5 驗證失敗的問題,還增加了支持一種新的文件格式。參考我的 rar 中的 example.citb 文件
# 包的名稱
Name: test
# 包的版本信息
Version: 1.0.0
Release: 1
# 依賴包
Requires: php , httpd
# 創建者
Packager: ugg
# 摘要信息
Summary: by ugg test
# 版權
copyright: hehexiao
PEARPATH=/usr/lib/php/pear/tbs/apps/customhtml
HTDOCSPATH=/var/www/htdocs/apps/customhtml
# 安裝腳本開始命令 , 以下部分可以從和 Makefile 中的內容相同即可
install:
mkdir -p $(PEARPATH)
mkdir -p $(HTDOCSPATH)
cp -r ../../src/htdocs/*.php $(PEARPATH)/customhtml
cp -r ../../src/pear/*.php $($HTDOCSPATH)/customhtml
# 以下 shell 命令,要以 TAB 開始每一行
pre:
# 每行命令以 TAB 開始
# sudo apachectl restart
# 安裝包後執行命令,同 rpm 中的 %post 功能,
post:
# 每行命令以 TAB 開始
# sudo apachectl restart
# 打包日誌,同 rpm 中的 %changelog
changelog:
# 每行日誌以 TAB 開始
* Wed May 20 2009 changjing.xu <guangzhao@taobao.com> %{Version}
- this is test
如上所示,通過上麵這個配置文件,我們可以在這個配置文件中寫要打包的Name ,Version 等信息,還可以寫包的pre ,post ,changelog ,而我們打rpm 包隻需執行
Sudo checkinstall –citb=example.citb
並且筆者還對checkinstall 的文件進行配置,減少了打包過程中的交互。可能還有一個需求沒有滿足就是,就是如何打多個包?
其實這個功能也做了,參考包內的mmt_create ,有了mmt_create 之後,我就不在直接使用checkinstall 進行打包了,而是
mmt_create –citb checkinstall.citb
mmt_create –citb *.citb
mmt_create –citb checkinstall.citb example.citb
使用mmt_create 後,經過打造的checkinstall 就具有如下功能了。
- 打包命令簡單,所需要操作就是指定要打包的citb 文件。
- 目錄隨意,citb 可以放置在任意目錄內。
- 打包後的文件,放在和citb 同級目錄內。
- 相對於spec ,更簡單的citb 格式文件編寫。隻要您會寫shell ,就會寫citb 文件。
- 支持多個citb 文件同時打包
- 支持spec 格式文件打包
- 支持自更新
- 支持32-64 係統(已經經過測試)
如果使用checkinstall_cn
獲取到checkinstall_cn 後,解包到你的目錄,然後
如果使用checkinstall_cn
獲取到checkinstall_cn後,解包到你的目錄,然後
# cd checkinstall-1.6.1
checkinstall-1.6.1# make
checkinstall-1.6.1# make install
checkinstall-1.6.1# checkinstall
如果要使用mmt_create,可以在經過上述步驟後把mmt_create拷貝到/usr/local/bin/目錄內,但是我的推薦方法是
1:先打checkinstall_cn包
Sudo checkinstall –citb=checkinstall.citb
2:安裝checkinstall_cn包
Sudo rpm –ivh checkinstall-1.7.1-1.i386.rpm
3:使用mmt_create
哈哈,現在你就可以是使用mmt_create打rpm包了。
下載checkinstll_cn
有任何問題或者建議,請聯係我,CSDN ID: 逸學堂(ugg)。
轉帖請注明:https://blog.csdn.net/ugg/archive/2009/05/26/4217660.aspx
最後更新:2017-04-02 00:06:46