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/

相关文章
相关标签/搜索