Debian checkinstall ignore install = no; comment le faire construire, mais PAS installer automatiquement un paquet?


14

Ok, voici une chose qui me laisse perplexe ... J'essaie de construire un package à partir des sources, puis de l'utiliser checkinstallpour générer un package .deb. Notez que je veux simplement créer le package .deb, mais je ne veux PAS l' installer .

Donc, voici un exemple - je suis sur Ubuntu 11.04, et d'abord j'installe son fehpackage à partir des référentiels par défaut; qui a un numéro de version apparemment 1.3.4.dfsg.1-3

Ensuite, j'essaie de construire à feh partir de la source ; obtenu makeà passer, et peut exécuter la nouvelle fehde la ligne de commande; splendide.

Enfin, pour créer un paquet deb, j'utilise la ligne de commande suivante:

sudo checkinstall -D -y \
  --install=no \
  --fstrans=no \
  --reset-uids=yes \
  --pkgname=feh \
  --pkgversion=2.7 \
  --pkgrelease="tar.bz2" \
  --arch=i386 \
  --pkglicense=GPL \
  --maintainer="Debian PhotoTools Maintainers <pkg-phototools-devel@lists.alioth.debian.org>" \
  --pakdir=../.. \
  --requires=libc6,libice6,libsm6,libx11-6,libxaw7,libxext6,libxmu6,libxt6,dpkg,install-info

OK, remarquez que j'y ai utilisé --install=no? Dit même man checkinstall:

--install Bascule l'installation du package créé.

Eh bien, voici ce que cette checkinstallcommande répond:

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.

/usr/bin/checkinstall: eval: line 598: syntax error near unexpected token `newline'
/usr/bin/checkinstall: eval: line 598: `echo Debian PhotoTools Maintainers <pkg-phototools-devel@lists.alioth.debian.org>'

The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: y

Preparing package documentation...OK

*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values: 

0 -  Maintainer: [ root@mypc ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ feh ]
3 -  Version: [ 2.7 ]
4 -  Release: [ tar.bz2 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ feh-2.7 ]
9 -  Alternate source location: [  ]
10 - Requires: [ libc6,libice6,libsm6,libx11-6,libxaw7,libxext6,libxmu6,libxt6,dpkg,install-info ]
11 - Provides: [ feh ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Enter a number to change any of them or press ENTER to continue: 

Installing with make install...

========================= Installation results ===========================
installing manuals to /usr/local/share/man
installing docs to /usr/local/share/doc/feh
installing executables to /usr/local/bin
installing fonts to /usr/local/share/feh/fonts
installing images to /usr/local/share/feh/images
installing examples to /usr/local/share/doc/feh/examples

======================== Installation successful ==========================

NOOOOOOOOOOOOOOOOO !!!!!!!!!!

Je ne voulais PAS que ce fichu paquet s'installe - C'EST POURQUOI J'AI --install=noUTILISÉ POUR CRYIN OUT LOUD !!!

Et puis, apparemment dans une tentative d'être sarcastique, le journal continue:

Copying documentation directory...
./
./TODO
./AUTHORS
./COPYING
./ChangeLog
./README

Copying files to the temporary directory...OK

Stripping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Building Debian package...OK

NOTE: The package will not be installed

Vous devez plaisanter avec cette " REMARQUE: le paquet ne sera pas installé ", n'est-ce pas, monsieur checkinstall? Évidemment que tu l'es; après cela, notez ce que j'obtiens:

$ apt-cache show feh | grep Version
Version: 1.10-1

$ feh --version
feh version 2.7
Compile-time switches: curl xinerama 

$ which feh
/usr/local/bin/feh

Vous ne savez pas d'où cela 1.10-1vient (cela aurait dû être au moins 1.3.4, comme ci-dessus?) - mais c'est sacrément évident que le 2.7 DID est installé, EN dépit de mes instructions de ne pas installer ...

Je peux sûrement essayer de supprimer par la suite:

$ sudo dpkg -r feh
(Reading database ... 202193 files and directories currently installed.)
Removing feh ...
$ sudo dpkg --purge feh
(Reading database ... 202163 files and directories currently installed.)
Removing feh ...
Purging configuration files for feh ...
$ feh --version
feh version 2.7
Compile-time switches: curl xinerama 
$ which feh
/usr/local/bin/feh

... mais ne dpkg --purgefonctionne même pas ( apt-get removene fonctionnerait pas pour commencer, car il s'agit d'un package .deb installé manuellement). Et en plus de dpkg -rne pas donner de version (donc je ne suis pas vraiment sûr de ce qui aurait dû être supprimé) - en fait, il n'a PAS supprimé l'exécutable sanglant?!

Mais quelqu'un peut-il expliquer ce qui se passe ici - et comment arriver checkinstallà générer uniquement un .deb, et PAS l'installer en même temps? Question bonus - comment supprimer TOUS les fichiers, y compris les exécutables /usr/local/bin/, qui ont été installés de cette façon - car apparemment, dpkg -rcela ne fonctionne pas?


Je suis perplexe. Pourquoi voulez-vous installer depuis la source, si vous avez un paquet binaire?
Faheem Mitha

et comment avez-vous corrigé l'erreur concernant --maintainer?
Aquarius Power

J'ai jeté un œil aux sources de checkinstall RE: l'erreur --maintainer. Le problème est le résultat de symboles <et> non cités. La réponse est donc simple: n'utilisez pas de symboles. La réponse plus problématique est qu'il y a un problème sérieux avec checkinstall. La source entière est jonchée de eval echo $1... Elle devrait en fait l'être eval "echo '$1'". Je suppose que je vais essayer de prendre contact avec l'auteur ou quelque chose.
Six

Réponses:


13

Droite; Je pense que j'ai finalement compris ce qui se passe - la ligne clé que j'ai manquée est:

Installing with make install...

Cela signifie que le make installpackage source de 2.7 a été exécuté - probablement pour "voir" où ces fichiers finiront par se retrouver, afin d'écrire ces emplacements dans le nouveau .deb? Mais en tout cas, le nouveau 2.7 .deb n'a en effet pas été installé - et c'est pourquoi il n'a pas pu être supprimé dpkg -r, et l'exécutable persistait même après dpkg -r.

Donc, pour supprimer cette installation après l'exécution checkinstall, il faut en fait appeler à make uninstallpartir du fehdossier source:

$ make uninstall
rm -f /usr/local/share/man/man1/feh.1 /usr/local/share/man/man1/feh-cam.1
rm -f /usr/local/share/man/man1/gen-cam-menu.1
rm -rf /usr/local/share/doc/feh
rm: cannot remove `/usr/local/share/doc/feh/TODO': Permission denied
rm: cannot remove `/usr/local/share/doc/feh/examples/keys': Permission denied
rm: cannot remove `/usr/local/share/doc/feh/examples/themes': Permission denied
rm: cannot remove `/usr/local/share/doc/feh/examples/buttons': Permission denied
rm: cannot remove `/usr/local/share/doc/feh/AUTHORS': Permission denied
rm: cannot remove `/usr/local/share/doc/feh/ChangeLog': Permission denied
rm: cannot remove `/usr/local/share/doc/feh/README': Permission denied
make: *** [uninstall] Error 1

$ sudo make uninstall
rm -f /usr/local/share/man/man1/feh.1 /usr/local/share/man/man1/feh-cam.1
rm -f /usr/local/share/man/man1/gen-cam-menu.1
rm -rf /usr/local/share/doc/feh
rm -f /usr/local/bin/feh /usr/local/bin/feh-cam /usr/local/bin/gen-cam-menu
rm -rf /usr/local/share/feh/fonts
rm -rf /usr/local/share/feh/images

... et enfin je peux essayer le package nouvellement créé:

$ sudo dpkg -i feh_2.7-tar.bz2_i386.deb 
Selecting previously deselected package feh.
(Reading database ... 202165 files and directories currently installed.)
Unpacking feh (from feh_2.7-tar.bz2_i386.deb) ...
Setting up feh (2.7-tar.bz2) ...
Processing triggers for man-db ...

$ feh --version
feh version 2.7
Compile-time switches: curl xinerama 

$ sudo dpkg --purge feh
(Reading database ... 202198 files and directories currently installed.)
Removing feh ...
dpkg: warning: while removing feh, directory '/usr/local/share/doc' not empty so not removed.
Processing triggers for man-db ...

$ feh --version
bash: /usr/local/bin/feh: No such file or directory

# or in new terminal 
$ feh --version
The program 'feh' is currently not installed.  You can install it by typing:
sudo apt-get install feh

Oh bien .... j'espère avoir bien compris comment se passe le processus maintenant, cependant ..


6

Il faut changer fstrans en yes pour s'assurer que checkinstall ne touchera pas le vrai filetree

--fstrans=yes

1
J'ai utilisé ce commutateur en combinaison avec --install=noet les fichiers ont été installés mais dpkgn'ont pas été mis à jour.
Antonios Hadjigeorgalis

4

Vous pouvez installer "deux fois":

  1. Via le package que vous avez créé. Vous pouvez le désactiver en--install=no

  2. Via la marque. Vous pouvez le désactiver en tapant simplement make(sans install)

Exemples:

  • Aucune installation du tout:

    sudo checkinstall --install=no make

  • Une installation via make:

    sudo checkinstall --install=no make install


Je pense que c'est la meilleure réponse.
jgomo3

1
"sudo checkinstall --install = no --fstrans = yes make" a fonctionné pour moi. J'ai mélangé cette réponse avec celle-ci: unix.stackexchange.com/a/170170/156284
Teo

-1

Vous devriez essayer d'utiliser:

sudo checkinstall --install=no make -n install

-1

Utilisation: sudo checkinstall -D make -n install


Veuillez expliquer votre réponse.
vonbrand

1
make -n installn'arrête makepas l'installation des fichiers, mais checkinstalln'interprète pas correctement les résultats. Vous vous retrouvez avec un fichier deb ne contenant pas tous les fichiers dont vous avez besoin. Donc ça ne marche pas.
Tim Tisdall
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.