O checkinstall do Debian ignora install = no; como fazer isso, mas não instala automaticamente um pacote?

12

Ok, aqui está uma coisa que me intriga ... Estou tentando criar um pacote a partir do código-fonte e, em seguida, usar checkinstall para gerar um pacote .deb. Note que eu quero apenas criar o pacote .deb, mas eu não quero instalá-lo .

Então, aqui está um exemplo - eu estou no Ubuntu 11.04, e primeiro eu instalei o pacote feh dos repositórios padrão; que tem um número de versão aparentemente 1.3.4.dfsg.1-3

Então, estou tentando criar feh da origem ; obteve make para passar e pode executar o novo feh a partir da linha de comando; esplêndido.

Agora, finalmente, para criar um pacote deb, eu uso a seguinte linha 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 <[email protected]>" \
  --pakdir=../.. \
  --requires=libc6,libice6,libsm6,libx11-6,libxaw7,libxext6,libxmu6,libxt6,dpkg,install-info

OK, observe que usei --install=no aqui? Até man checkinstall diz:

--install Toggle installation of the created package.

Bem, é isso que este comando checkinstall responde:

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 <[email protected]>'

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

NÃO queria que o maldito pacote fosse INSTALADO - É POR ISSO QUE EU UTILIZE --install=no PARA CRYIN OUT LOUD !!!

E então, aparentemente, em uma tentativa de ser sarcástico, o log continua:

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

Você deve estar brincando com este " NOTA: O pacote não será instalado ", certo, Sr. checkinstall ? Com certeza você é; depois disso, anote o que eu recebo:

$ 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

Não tenho certeza de onde veio o 1.10-1 (deveria ter sido pelo menos 1.3.4 , conforme acima?) - mas é óbvio que o 2.7 DID foi instalado, IN SPITE de minha instrução NÃO é necessário instalar. .

Com certeza, posso tentar remover depois:

$ 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

... mas nem mesmo dpkg --purge works ( apt-get remove não funcionaria para começar, já que é um pacote .deb instalado manualmente). E além de dpkg -r não dar uma versão (então eu não tenho certeza do que é que deveria ter sido removido) - na verdade ele NÃO removeu o executável sangrento!

Mas alguém pode explicar o que está acontecendo aqui - e como obter checkinstall para somente gerar um .deb e NÃO instalá-lo ao mesmo tempo? Pergunta bônus - como remover TODOS os arquivos, incluindo executáveis em /usr/local/bin/ , que foram instalados dessa forma - já que aparentemente dpkg -r não funciona?

    
por sdaau 05.11.2012 / 10:18

5 respostas

12

certo; Acho que finalmente entendi o que está acontecendo - a principal frase que senti falta é:

Installing with make install...

Isso significa que o make install do pacote de código-fonte 2.7 foi executado - provavelmente para "ver" onde esses arquivos acabarão sendo finalizados, para gravar esses locais no novo .deb? Mas em qualquer caso, o novo 2.7 .deb realmente não foi instalado - e é por isso que ele não pôde ser removido com dpkg -r , e o executável ainda permanecia mesmo após dpkg -r .

Portanto, para remover essa instalação depois de executar checkinstall , você deve realmente chamar make uninstall da pasta feh 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

... e, finalmente, posso experimentar o pacote recém-criado:

$ 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

Ah, bem ... espero ter entendido corretamente como o processo vai agora, embora ...

    
por 05.11.2012 / 10:43
5

Deve-se mudar fstrans para sim para garantir que o checkinstall não irá tocar no arquivo real

--fstrans=yes
    
por 26.11.2014 / 23:32
4

Você pode instalar "duas vezes":

  1. Por meio do pacote que você criou. Você pode desativá-lo por --install=no

  2. Através da marca. Você pode desativá-lo simplesmente digitando make (sem install )

Exemplos:

  • Nenhuma instalação:

    sudo checkinstall --install=no make

  • Uma instalação via make:

    sudo checkinstall --install=no make install

por 16.08.2015 / 13:50
-1

Você deve tentar usar:

sudo checkinstall --install=no make -n install
    
por 05.12.2013 / 12:32
-1

Uso: sudo checkinstall -D make -n install

    
por 25.01.2014 / 16:25