original in de Mario M. Knopf
de to en Mario M. Knopf
Mario appr�cie de travailler avec Linux, les r�seaux et tout sujet relatif � la s�curit�.
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.
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.
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.
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
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.
[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]