相信使用过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 的时候,也碰到这种问题,尤其是令人恶心的是 MD5 验证失败的问题,查到 checkinstall 的官方 faq ,发现第一条就是这个问题
再看一下,最新版本的官方更新时间是 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 <[email protected]> %{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 就具有如下功能了。
如果使用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)。
转帖请注明:http://blog.csdn.net/ugg/archive/2009/05/26/4217660.aspx