CheckInstall

ArticleCategory:

System Administration

AuthorImage: [Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto:j.wlodarczak(at)swing.be]

original in de Mario M. Knopf 

de to en Mario M. Knopf 

AboutTheAuthor:[A small biography about the author]

Mario appr�cie de travailler avec Linux, les r�seaux et tout sujet relatif � la s�curit�.

Abstract:[Here you write a little summary]

Checkinstall est un utilitaire qui g�n�re automatiquement des paquets RPM, Debian ou Slackware � partir de sources en tar.gz. Ce qui permet une installation � propre � et la d�sinstallation de quasi n'importe quel code source en tar.gz.

ArticleIllustration:[One image that will end up at the top of the article]

[CheckInstall Title]

ArticleBody:[The main part of the article]

Introduction

Il arrive fr�quemment que des programmes que l'on d�sire tester n'existent qu'au format tar.gz sans �tre disponibles au format RPM ou Debian. Dans un tel cas, vous t�l�chargez le paquet (package) source, vous le d�compactez et le compilez manuellement. Jusque l�, c'est tout bon. Oui, mais que faire si vous voulez supprimer ce programme ?

Le fichier Makefile peut contenir une routine appropri�e pour d�sinstaller le programme mais ce n'est pas syst�matique. Bien s�r, il reste la possibilit� d'installer le programme dans un r�pertoire temporaire et d'inscrire tous les fichiers qui ont �t� cr��s ou modifi�s par l'installation et ce en pr�vision d'une suppression ult�rieure. Mais convenons que cette proc�dure est plut�t p�nible et astreignante surtout si des programmes sont fr�quemment compil�s � partir des sources. CheckInstall [1] �crit par Felipe Eduardo S�nchez D�az Dur�n r�soud ce probl�me.

Il est de r�gle de compiler et d'installer un programme r�pondant au standard GNU Autoconf en utilisant la s�quence bien connue de commandes
./configure && make && make install.
Le script shell configure tente de deviner les valeurs correctes de diff�rentes variables d�pendantes du syst�me, qui seront utilis�es apr�s, au cours de la compilation. Il v�rifie si tous les requis pour une compilation correcte sont rencontr�s et utilise ces valeurs pour g�n�rer un Makefile dans chaque r�pertoire du paquet. En outre, le script configure g�n�re divers autres fichiers. En r�sum�, il s'agit de :

Apr�s que le script configure ait achev� sa t�che avec succ�s, vous tapez la commande make pour compiler le paquet. Ce qui va g�n�rer les binaires ex�cutables. Il y a la possibilit� de lancer, imm�diatement apr�s un make, un self-test avec la commande make check. Mais il s'agit d'une �tape �ventuelle car le paquet doit supporter cette proc�dure suppl�mentaire. Si le make a accompli son oeuvre, vous pouvez alors installer le programme compil� gr�ce � la commande make install - pour des raisons �videntes, vous devez b�n�ficier des droits d'utilisateur privil�gi� pour l'accomplissement de cette �tape. Apr�s que le programme ait �t� install� vous pouvez enlever les binaires et les fichiers objets du r�pertoire qui contient le code source en tapant la commande make clean. Si vous pr�f�rez aussi effacer les fichiers cr��s par le script configure, alors tapez make distclean. Cependant ces deux derni�res �tapes sont, tout comme le make check, optionnelles et sont habituellement utilis�es par le d�veloppeur durant la phase de d�veloppement et de test. Elles peuvent aussi �tre utilis�es par l'utilisateur pour �pargner la capacit� du disque dur ou pour conserver une structure de r�pertoires claire. En outre, make distclean permet de compiler le paquet pour un type d'ordinateur diff�rent.

Des informations plus d�taill�es sur GNU Autoconf sont disponibles dans le manuel en ligne � l'adresse [2]. En plus d'une introduction basique, vous en apprendrez plus sur le � GNU Build System �, en cr�ant vos propres scripts configure , en programmant en M4 et en cr�ant vos propres macros, programmes shell portables et autres.

CheckInstall

Ainsi que nous l'avons d�j� mentionn�, la s�quence de commande pour g�n�rer, � partir de ses sources, un programme r�pondant au standard GNU Autoconf, est :

./configure && make && make install

Arriv� � ce stade, c'est le moment d'utiliser CheckInstall. La commande checkinstall remplace la commande make install . �tant entendu que les deux autres commandes sont maintenues et utilis�es tout comme auparavant. Ainsi, la nouvelle s�quence de commandes, quand on utilise CheckInstall, devient :

./configure && make && checkinstall

Pourtant, l'instruction checkinstall lance bien make install par d�faut et supervise tous les �v�nements en �criture engendr�s par l'installation. A cet effet CheckInstall utilise le programme Installwatch [3], �crit � l'origine par Pancrazio de Mauro. Apr�s que make install se soit achev� avec succ�s, CheckInstall g�n�re un paquet Slackware, Debian ou RPM et l'installe avec le gestionnaire par d�faut de la distribution tout en laissant une copie du paquet dans le r�pertoire source ou dans le r�pertoire de stockage standard. Par ailleurs, il est possible de changer le r�pertoire de stockage par d�faut � travers la variable PAK_DIR au sein du fichier de configuration. La copie ainsi � adress�e � peut �tre install�e, bien s�r en tenant compte de possibles d�pendances, sur d'autres machines du r�seau sans avoir � recompiler � chaque fois les sources du paquet.

CheckInstall ne se limite pas � l'utilisation de make install mais coop�re avec d'autres instructions d'installation. Si, par exemple, le script d'installation est setup.sh, la s�quence de commande sera :

./configure && make && checkinstall setup.sh

Par ailleurs, il est possible de lancer CheckInstall avec diverses options. La commande suivante propose une vue d'ensemble de toutes les options disponibles qui sont r�parties dans les sections Install options, Scripting options, Info display options, Package tuning options, Cleanup options et About CheckInstall:

# checkinstall -h

Si CheckInstall est lanc� avec une de ces options, cette derni�re supplantera celles qui sont reprises dans le fichier de configuration checkinstallrc.

Mais CheckInstall a aussi ses limites. Il ne peut manipuler des programmes li�s (linked) statiquement, parce que Installwatch n'est pas capable de surveiller les fichiers modifi�s durant la proc�dure d'installation. En g�n�ral, il y a deux types de biblioth�ques de programme : des biblioth�ques li�es statiquement ou dynamiquement. Ces biblioth�ques sont int�gr�es dans un programme par une directive include. Les programmes li�s statiquement ont d�j� toutes les fonctions de biblioth�ques n�cessaires et ne doivent pas les charger en m�moire lors de leur ex�cution. En outre, ils sont ind�pendants des biblioth�ques install�es sur le syst�me utilis� car le Linker a imbriqu� la biblioth�que dans le programme ex�cutable au moment de la compilation.

Installation

CheckInstall fait d�j� parti, depuis longtemps, de l'ensemble des logiciels propos�s par les distributions majeures et peut �tre install� avec le gestionnaire de paquet du syst�me. Si �a n'est pas le cas, vous pouvez t�l�charger un fichier � tar-balls � ou un paquet pr�-compil� convenant � diverses distributions, disponible sur le site web du projet [4].

L'installation de CheckInstall est tr�s simple et se d�roule en peu d'�tapes mais pour une installation r�ussie, vous avez paradoxalement besoin de CheckInstall. Apr�s l'instruction incontournable make install, vous tapez checkinstall, qui g�n�re un paquet binaire appropri� venant du programme compil�. Alors vous pouvez installer ce paquet avec votre gestionnaire de paquet et il est aussi possible de d�sinstaller ce paquet proprement. Mais avant que CheckInstall ne cr�e le paquet, vous devez r�pondre � une question sur le gestionnaire de paquet utilis� et v�rifier l'exactitude des champs d'information. Ces derniers appara�tront peu apr�s dans l'en-t�te du paquet.

La proc�dure d'installation de la nouvelle version b�ta checkinstall-1.6.0beta4.tgz est expos�e dans l'encart qui suit. Cela installera CheckInstall, Installwatch et makepak, une version modifi�e de makepkg. Si les changements de la nouvelle version vous int�ressent, jetez un oeil sur la Release Notes [5] et/ou dans le 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
./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

****************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/i386/checkinstall-1.6.0beta4-1.i386.rpm
You can install it in your system anytime using:

        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 #

L'utilisateur d'une distribution bas�e sur Debian installera le paquet avec dpkg -i. Les utilisateurs de Slackware utiliseront installpkg.

En utilisant la fonction query de votre gestionnaire de paquet, en l'occurence ici RPM, vous pouvez v�rifier si le paquet a �t� proprement install� dans la base de donn�es du gestionnaire et voir les champs d'information compl�mentaires de l'en-t�te du paquet.

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

Configuration

Vous pouvez modifier le fichier texte /usr/lib/local/checkinstall/checkinstallrc, suffisamment comment�, en vue de changer le comportement par d�faut de CheckInstall.

Du fait que CheckInstall vous demande quel type de paquet doit �tre engendr�, � chaque utilisation, il est plus judicieux de reprendre cette valeur de mani�re permanente dans la variable INSTYPE. Il est �galement utile de s'attarder sur les variables INSTALL, PAK_DIR et RPM_FLAGS en alternative de DPKG_FLAGS. Avec les deux derni�res variables, vous pouvez d�finir quelques � flags (drapeau) � d'installation optionnels et en modifiant PAK_DIR, vous pouvez d�terminer un autre r�pertoire qui contiendra la copie du paquet. INSTALL vous permet de d�cider entre simplement g�n�rer le paquet ou l'installer.

$ 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

Conclusion

CheckInstall est un outil remarquable qui facilite grandement l'administration d'un syst�me Linux. Particuli�rement si des programmes doivent �tre fr�quemment compil�s depuis leurs sources, CheckInstall vous donne la possibilit� de les enlever proprement sans risque de rendre le syst�me incoh�rent. Par ailleurs, vous pouvez aussi installer ces paquets sur d'autres machines sans avoir � re-compiler le programme � chaque fois, �videmment en prenant en consid�ration de possibles d�pendances de paquet. Cependant, ceci n'est pas un gros probl�me pour les machines identiques.

Links

[1] http://asic-linux.com.mx/~izto/checkinstall/ [Page d'accueil de CheckInstall]
[2] http://www.gnu.org/software/autoconf/manual/autoconf-2.57/autoconf.html [Manuel en ligne de GNU Autoconf]
[3] http://asic-linux.com.mx/~izto/checkinstall/installwatch.html [Installwatch]
[4] http://asic-linux.com.mx/~izto/checkinstall/download.php [T�l�chargement de CheckInstall]
[5] http://asic-linux.com.mx/~izto/checkinstall/docs/RELNOTES [Release Notes]
[6] http://asic-linux.com.mx/~izto/checkinstall/docs/Changelog [Changelog]