La instalación de comprobación de Debian ignora install = no; ¿Cómo construirlo, pero NO instalar automáticamente un paquete?


14

Ok, aquí hay una cosa que me desconcierta ... Estoy tratando de construir un paquete desde la fuente, y luego lo uso checkinstallpara generar un paquete .deb. Tenga en cuenta que solo quiero crear el paquete .deb, pero NO quiero instalarlo .

Entonces, aquí hay un ejemplo: estoy en Ubuntu 11.04, y primero instalo su fehpaquete desde los repositorios predeterminados; que aparentemente tiene un número de versión 1.3.4.dfsg.1-3

Entonces estoy tratando de construir feh desde la fuente ; tiene makeque pasar, y puede ejecutar el nuevo fehdesde la línea de comandos; espléndido.

Ahora, finalmente, para crear un paquete deb, uso la siguiente línea de comando:

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, ¿te das cuenta de que he usado --install=noallí? Incluso man checkinstalldice:

--instalar Alternar la instalación del paquete creado.

Bueno, esto es lo que checkinstallresponde este comando:

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 !!!!!!!!!!

¡NO quería que el maldito paquete se INSTALA, ES POR ESO QUE --install=noLO UTILIZÉ PARA CRYIN OUT LOUD!

Y luego, aparentemente en un intento de ser sarcástico, el registro continúa:

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

Debe estar bromeando con esta " NOTA: El paquete no se instalará ", ¿verdad, Sr. checkinstall? Seguro que eres; Una vez hecho esto, tenga en cuenta lo que obtengo:

$ 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

No estoy seguro de dónde 1.10-1vino (¿debería haber sido al menos 1.3.4, como se indicó anteriormente?), Pero es obvio que se instaló el 2.7, A pesar de mis instrucciones de NO instalar ...

Seguramente, puedo intentar eliminar después:

$ 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

... pero ni siquiera dpkg --purgefunciona ( apt-get removepara empezar no funcionaría, ya que es un paquete .deb instalado manualmente). Y además de dpkg -rno dar una versión (así que no estoy realmente seguro de qué es lo que debería haberse eliminado), ¿de hecho NO eliminó el ejecutable sangriento?

Pero ¿alguien puede explicar lo que está pasando aquí - y cómo llegar checkinstalla la única generar un .deb, y lo instale al mismo tiempo? Pregunta adicional: ¿cómo eliminar TODOS los archivos, incluidos los ejecutables /usr/local/bin/, que se instalaron de esta manera, ya que aparentemente dpkg -rno funciona?


Estoy confundido. ¿Por qué quieres instalar desde la fuente si tienes un paquete binario?
Faheem Mitha

y cómo solucionó el error sobre --maintainer?
Acuario Power

Eché un vistazo a las fuentes de instalación de verificación RE: el error --maintainer. El problema es el resultado de símbolos <y> sin comillas. Entonces la respuesta fácil es: no use símbolos. La respuesta más problemática es que hay un problema grave con checkinstall. Toda la fuente está llena de eval echo $1... En realidad debería estarlo eval "echo '$1'". Creo que intentaré ponerme en contacto con el autor o algo así.
Seis

Respuestas:


13

Derecho; Creo que finalmente entendí lo que está sucediendo, la línea clave que me perdí es:

Installing with make install...

Esto significa que make installse ejecutó el paquete de origen 2.7, probablemente para "ver" dónde terminarán esos archivos, a fin de escribir esas ubicaciones en el nuevo .deb? Pero en cualquier caso, el nuevo 2.7 .deb de hecho no se instaló, y es por eso que no se pudo eliminar dpkg -r, y el ejecutable aún persistía incluso después dpkg -r.

Entonces, para eliminar esta instalación después de la ejecución checkinstall, uno debería llamar make uninstalldesde la fehcarpeta de origen:

$ 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

... y finalmente puedo probar el paquete recién creado:

$ 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 bueno ... espero haber entendido correctamente cómo va el proceso ahora, sin embargo ...


6

Uno debe cambiar fstrans a yes para asegurarse de que checkinstall no toque el archivo real

--fstrans=yes

1
Usé este interruptor en combinación con --install=noy los archivos se instalaron pero dpkgno se actualizaron.
Antonios Hadjigeorgalis

4

Puede instalar "dos veces":

  1. A través del paquete que creó. Puedes apagarlo--install=no

  2. A través de la marca. Puede apagarlo simplemente escribiendo make(sin install)

Ejemplos:

  • Sin instalación en absoluto:

    sudo checkinstall --install=no make

  • Una instalación a través de make:

    sudo checkinstall --install=no make install


Creo que esta es la mejor respuesta.
jgomo3

1
"sudo checkinstall --install = no --fstrans = yes make" funcionó para mí. Mezclé
Teo

-1

Deberías intentar usar:

sudo checkinstall --install=no make -n install

-1

Uso: sudo checkinstall -D make -n install


Por favor explique su respuesta.
vonbrand

1
make -n installno deja makede instalar realmente los archivos, pero checkinstallno interpreta correctamente los resultados. Terminas con un archivo deb que no contiene todos los archivos que necesitas. Entonces, esto no funciona.
Tim Tisdall
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.