CheckInstall-Linux源码安装工具

Checkinstall 是一个能从 tar.gz类的源代码自动生成RPM/Debian或Slackware安装包的程序。这样使你能用几乎全部的 tar.gz 类的源代码生成“干净”的安装或者卸载包。html

 简介 node

  常常出现这样的问题:你很想试用的程序只有 tar.gz的源代码可用(没人提供 rpm 或者 Debian包)。这样,你只好下载回源代码,解压,而后手动编译。到目前为止,一切正常。然而,当你想删掉它的时候呢?编程

  Makefile文件只包括了不多状况下的卸载例程。固然,你能够把程序安装到临时文件夹,而后记下全部由程序生成或修改的文件,最后删除他们。可是若是这个程序要常常从新编译,那样作是很是痛苦的,工做量也是至关大的。 Felipe Eduardo所写的 CheckInstall [1] Sánchez Díaz Durán 就是用来解决这个问题的。 ide

  通常说来,咱们编译安 装一个由GNU Autoconf配置的程序是采用以下的步骤: 学习

./configure && make && make install.测试

  这个 configure 脚本文件是用来“猜”出一系列系统相关的变量,这些变量是在后面的编译过程要用到的。它将检查系统变量值是否知足编译要求,而后使用这些变量在程序包内每一个文件夹下生成 Makefile .此外,configure 脚本还会生成其余文件,他们是:ui

  * 每一个文件夹/子文件夹下的一个或多个Makefile(s)this

  * 一个名叫config.status的脚本 spa

  * 一个文本文件config.log debug

  * 另外一个名叫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来修改保存这个目录。这样生成的安装包安装到其余机器上而无须从新编译——固然,还得考虑软件包的相互依赖性。   

CheckInstall并不仅是使用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)已经在编译时把这些库内置到可执行程序里了。

 

  安装

$ tar xzf checkinstall-1.6.0beta4.tgz

   

  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].
 

$ 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能够达到一样目的。

 使用包管理程序的查询语句,你能够检查安装包中文件是否彻底在程序库中记录了,还能够查看安装包头部的一些额外信息。在此,使用 RPM 做为例子:

??$ rpm -qi checkinstall
 

Name : checkinstall Relocations: (not relocatable)

Version : 1.6.0beta4 Vendor : (none)

Release : 1 Build Date : Mo 06 Dez 2004 17:05:45 CET

Install Date: Di 07 Dez 2004 01:41:49 Build Host : deimos.neo5k.lan

Group : Applications/System Source RPM : checkinstall-1.6.0beta4-1.src.rpm

Size : 264621 License : GPL

Signature : (none)

Packager : checkinstall-1.6.0beta4

Summary : CheckInstall installations tracker, version 1.6.0beta4

Description :

CheckInstall installations tracker, version 1.6.0beta4

CheckInstall keeps track of all the files created or

modified by your installation script (&make install&

&make install_modules&, &setup&, etc), builds a

standard binary package and installs it in your

system giving you the ability to uninstall it with your

distribution's standard package management utilities.

  配置

  你能够经过修改文件/usr/lib/local/checkinstall/checkinstallrcCheckInstall的默认配置。

  尽管CheckInstall每次运行都会询问生成何种类型安装包,明智的办法仍是手工修改/设置INSTYPE变量。看看变量 INSTALL、PAK_DIR和RPM_FLAGS或者DPKG_FLAGS也是值得推荐的。最后两个变量容许你定义一些可选的安装标志,经过修改 PAK_DIR你能够指定安装包的存储目录。而INSTALL让你决定是只生成安装包呢仍是一块儿将这个包立刻安装。

$ cat /usr/lib/local/checkinstall/checkinstallrc

#######################################

# CheckInstall configuration file #

########################################

####################################################################

# These are default settings for CheckInstall, modify them as you #

# need. Remember that command line switches will override them. #

####################################################################

# Debug level

# 0: No debug

# 1: Keep all temp files except the package's files

# 2: Keep the package's files too

DEBUG=0

# Location of the &installwatch& program

INSTALLWATCH_PREFIX=&/usr/local& 

INSTALLWATCH=??${INSTALLWATCH_PREFIX}/bin/installwatch
# Location of the makepkg program. &makepak& is the default, and is
# included with checkinstall. If you want to use Slackware's native &makepkg&

# then set this to &makepkg&
MAKEPKG=/sbin/makepkg
# makepkg optional flags. These are recommended if running a newer Slackware
# version: &-l y -c n&
MAKEPKG_FLAGS=&-l y -c n&
# Is MAKEPKG running interactively? If so, you might want
# to see what it's doing:
SHOW_MAKEPKG=0
# Where will we keep our temp files?
BASE_TMP_DIR=/var/tmp ## Don't set this to /tmp or / !!
# Where to place the installed document files
DOC_DIR=&&
# Default architecture type (Leave it empty to allow auto-guessing)
ARCHITECTURE=&&
# Default package type. Leave it empty to enable asking everytime
# S : Slackware
# R : RPM
# D : Debian
INSTYPE=&R&
# Storage directory for newly created packages
# By default they will be stored at the default
# location defined for the package type
PAK_DIR=&&
# RPM optional flags
RPM_FLAGS=& --force --nodeps --replacepkgs &
# dpkg optional flags
DPKG_FLAGS=&&
## These are boolean. Set them to 1 or 0
# Interactively show the results of the install command (i.e. &make install&)?
# This is useful for interactive installation commands
SHOW_INSTALL=1
# Show Slackware package installation script while it runs? Again, useful if
# it's an interactive script
SHOW_SLACK_INSTALL=0
# Automatic deletion of &doc-pak& upon termination?
DEL_DOCPAK=1
# Automatic deletion of the spec file?
DEL_SPEC=1
# Automatic deletion of &description-pak&?
DEL_DESC=1
# Automatically strip all ELF binaries?
STRIP_ELF=1
# Automatically strip all ELF shared libraries?
# Note: this setting will automatically be set to &0& if STRIP_ELF=0
STRIP_SO_ELF=1
# Automatically search for shared libraries and add them to /etc/ld.so.conf?
# This is experimental and could mess up your dynamic loader configuration.
# Use it only if you know what you are doing.
ADD_SO=0
# Automatically compress all man pages?
COMPRESS_MAN=1
# Set the umask to this value
   

CKUMASK=0022

# Backup files overwritten or modified by your install command?

BACKUP=1

# Write a doinst.sh file that installs your description (Slackware)?

AUTODOINST=1

# Are we going to use filesystem translation?

TRANSLATE=1

# Reset the owner/group of all files to root.root?

RESET_UIDS=0

# Use the new (8.1+) Slackware description file format?

NEW_SLACK=1

# Comma delimited list of files/directories to be ignored

EXCLUDE=&&

# Accept default values for all questions?

ACCEPT_DEFAULT=0

# Use &-U& flag in rpm by default when installing a rpm package

# This tells rpm to (U)pdate the package instead of (i)nstalling it.

RPM_IU=U

# Inspect the file list before creating the package

CK_INSPECT=0

# Review the .spec file before creating a .rpm

REVIEW_SPEC=0

# Review the control file before creating a .deb

REVIEW_CONTROL=0

# Install the package or just create it?

INSTALL=0

  结论

  CheckInstall是一款优秀的软件,它能使得管理Linux更加方便。特别是在源码须要常常重复编译的状况下, CheckInstall可让你丝绝不破坏系统一致性的前提下彻底的卸载程序。另外,你还可使用这些编译好的安装包直接在其余的机器上安装(而无须从新编译!)——固然,你得考虑软件包的相互依赖性,不过,这在同类的机器上通常并非什么问题。

原文:
 

http://tech.16c.cn/Os/Linux/20100813_48978.html

相关文章
相关标签/搜索