[Version complète sur http://forum.debian-fr.org/viewtopic.php?t=4691)
5) Fabrication d’un paquet via checkinstall.
Parfois, la méthode dh_make conduit à modifier le Makefile, on ne comprend plus rien et on a juste envie de faire un paquet et pas les paquets sources. Un petit génie a inventer checkinstall (par encore parfait mais bon)…
Exemple scilab version 4 dont j’avais besoin en urgence (ci dessous de mémoire, c’est reconstitué).
Chargement rapide des sources, configuration classique:
$ cd scilab-4.0
$ ./configure --prefix=/usr
$ make all
bref, du classique.
Là commence checkinstall:
$ su
# checkinstall make install
checkinstall 1.5.3, Copyright 2001 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]:
Preparing package documentation...OK
Installing with "make install"...
========================= Installation results ===========================
Copying documentation directory...
[....]
======================== Installation succesful ==========================
Copying files to the temporary directory...OK
Striping ELF binaries and libraries...OK
Compressing man pages...OK
Building file list...OK
Please write a description for the package.
End your description with an empty line or EOF.
>>
là on tape la description du paquet suivi d’une ligne vide
>> Scilab version 4 du 9 juillet 2006
>>
S’en suit les parties identifiant le paquet. On les remplit en tapant
This package will be built according to these values:
le numéro et en remplissant
0 - Maintainer: [ francois@boisson.pas.de.spam.merci ]
1 - Summary: [ Scilab version 4 du 9 juillet 2006 ]
2 - Name: [ scilab ]
3 - Version: [ 1.0 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ agreg ]
7 - Architecture: [ i386 ]
8 - Source location: [ scilab ]
9 - Alternate source location: [ ]
Enter a number to change any of them or press ENTER to continue:
*****************************************
**** Debian package creation selected ***
*****************************************
Building Debian package...OK
Installing Debian package...
Erasing temporary files...OK
Writing backup package...OK
Deleting temp dir...OK
**********************************************************************
Done. The new package has been installed and saved to
/tmp/scilab/scilab_4.0_i386.deb
You can remove it from your system anytime using:
dpkg -r scilab
**********************************************************************
#
Là on se dit c’est fini, eh ben non. checkinstall ne crée pas les dépendances. On peut les faire on modifiant les dépendances à la main. Pour cela, on utilisera le script suivant:
/usr/local/bin/lsdepend:
#!/bin/sh
find . -type f | xargs ldd 2> /dev/null |
sed -e '1,$s/=.*//' |
sed -e '1,$s/^ */dpkg -S /' | grep -v ":" |
grep "\.so" |
sort -u | sh |
sed -e '1,$s/:.*//' |
sort -u |
sed -e '1,$s/^/dpkg -l | grep "^[a-zA-Z]\\{2\\} * /' | sed -e '1,$s/$/ "/' |sh
On fait donc
$ mkdir gre
$ cd gre
$ dpkg-deb -e ../scilab_4.0_i386.deb
$ dpkg-deb -x ../scilab_4.0_i386.deb .
La troisième commande fabrique un répertoire DEBIAN contenant un seul fichier control contenant
Package: scilab
Priority: extra
Section: agreg
Installed-Size: 104436
Maintainer: francois@boisson.pas.de.spam.merci
Architecture: i386
Version: 4.0-1
Description: Scilab version 4 du 9 juillet 2006
Pas de champ Depends, donc de la pagaille. Pour cela on peut avoir une idée des paquets nécessaires avec le script lsdepend. Celui ci cherche les librairies appelées et donne la liste des paquets nécessaires. Ainsi ici,
$ cd /usr/lib/scilab-4.0/bin/
0$ cd /usr/lib/scilab-4.0/bin/
francois@totoche:/usr/lib/scilab-4.0/bin$ lsdepend
ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries and Timezone
ii libg2c0 3.3.5-13 Runtime library for GNU Fortran 77 applicati
ii libgcc1 3.4.3-12 GCC support library
ii libice6 4.3.0.dfsg.1-1 Inter-Client Exchange library
ii libncurses5 5.4-4 Shared libraries for terminal handling
ii libsm6 4.3.0.dfsg.1-1 X Window System Session Management library
ii libx11-6 4.3.0.dfsg.1-1 X Window System protocol client library
ii libxext6 4.3.0.dfsg.1-1 X Window System miscellaneous extension libr
ii libxmu6 4.3.0.dfsg.1-1 X Window System miscellaneous utility librar
ii libxpm4 4.3.0.dfsg.1-1 X pixmap library
ii libxt6 4.3.0.dfsg.1-1 X Toolkit Intrinsics
ii maple4 1.0-1 Paquet Maple4
ii tcl8.4 8.4.9-1 Tcl (the Tool Command Language) v8.4 - run-t
ii tk8.4 8.4.9-1 Tk toolkit for Tcl and X11, v8.4 - run-time
ii xaw3dg 1.5+E-8 Xaw3d widget set
francois@totoche:/usr/lib/scilab-4.0/bin$
Le paquet maple4 est une hérésie non libre inutile (doublon) qu’on oublie, cela nous donne le champ Depends suivant:
Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4
et le fichier DEBIAN/control suivant
Package: scilab
Priority: extra
Section: agreg
Installed-Size: 104436
Maintainer: francois@boisson.pas.de.spam.merci
Architecture: i386
Depends: libc6, tk8.4, tcl8.4, xaw3dg, libxmu6, libxt6, libxext6, libsm6, libice6, libx11-6, libncurses5, libg2c0, libgcc1, libxpm4
Version: 4.0-1
Description: Scilab version 4 du 9 juillet 2006
On peut éventuellement créer un fichier DEBIAN/postinst et DEBIAN/prerm si on veut éxécuter un script juste après l’installation ou un script avant la désinstallation. Il ne reste plus qu’à refaire le paquet:
$ cd ..
$ dpkg-deb -b gre scilab_4.0_i386.deb
dpkg-deb : construction du paquet « scilab » dans « scilab_4.0_i386.deb ».
francois@totoche:/tmp$
et voilà le beau paquet scilab avec ses dépendances (du moins on l’espère). Bien évidemment, c’est rustique comme méthode mais cela permet de dupliquer une installation facilement et cela constitue une alternative pratique et rapide à la méthode classique sans sombrer dans les méandres d’un debian/rules ne fonctionnant pas…
[Version complète sur http://forum.debian-fr.org/viewtopic.php?t=4691)