O Debian checkinstall ignora install = no; como fazê-lo, mas NÃO instalar automaticamente um pacote?


14

Ok, aqui está uma coisa que me intriga ... Estou tentando criar um pacote a partir do código-fonte e depois usá-lo checkinstallpara gerar um pacote .deb. Observe que eu quero apenas criar o pacote .deb, mas NÃO quero instalá- lo.

Então, aqui está um exemplo - estou no Ubuntu 11.04 e primeiro instalo o fehpacote a partir dos repositórios padrão; que tem um número de versão aparentemente sendo 1.3.4.dfsg.1-3

Então eu estou tentando construir a feh partir da fonte ; tem makeque passar e pode executar o novo fehna 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 <pkg-phototools-devel@lists.alioth.debian.org>" \
  --pakdir=../.. \
  --requires=libc6,libice6,libsm6,libx11-6,libxaw7,libxext6,libxmu6,libxt6,dpkg,install-info

OK, percebeu que eu usei --install=nolá? Até man checkinstalldiz:

--install Alterna a instalação do pacote criado.

Bem, é isso que este checkinstallcomando 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 <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 !!!!!!!!!!

Eu não queria que o maldito pacote --install=noinstalasse - é por isso que eu usei para chorar alto !!!

E então, aparentemente, na 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, observe o que 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 isso 1.10-1veio (deveria ter sido pelo menos 1.3.4, como acima?) - mas é óbvio que o 2.7 DID foi instalado, apesar das minhas instruções para NÃO instalar ...

Certamente, eu 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 dpkg --purgefunciona ( apt-get removepara começar, porque não é um pacote .deb instalado manualmente). E além de dpkg -rnão dar uma versão (por isso não tenho certeza do que deveria ter sido removido) - na verdade NÃO removeu o maldito executável ?!

Mas alguém pode explicar o que está acontecendo aqui - e como obter checkinstalla única gerar um .deb, e não instalá-lo, ao mesmo tempo? Pergunta de bônus - como remover TODOS os arquivos, incluindo executáveis /usr/local/bin/, que foram instalados dessa maneira - já que aparentemente dpkg -rnão funciona?


Estou confuso. Por que você deseja instalar a partir da fonte, se você tem um pacote binário?
— Faheem Mitha

e como você corrigiu o erro sobre --maintainer?
— Poder de Aquário

Dei uma olhada nas fontes de checkinstall RE: o erro --maintainer. O problema é o resultado de símbolos <e> não citados. Portanto, a resposta mais fácil é: não use símbolos. A resposta mais problemática é que há um problema sério com o checkinstall. A fonte inteira está cheia de eval echo $1... Deveria ser eval "echo '$1'". Acho que vou tentar entrar em contato com o autor ou algo assim.
— 6

Respostas:


13

Certo; Eu acho que finalmente entendi o que está acontecendo - a linha principal que eu perdi é:

Installing with make install...

Isso significa que o make installpacote de origem 2.7 foi executado - provavelmente para "ver" onde esses arquivos acabarão, de modo a escrever esses locais no novo .deb? Mas, de qualquer forma, o novo 2.7 .deb não foi instalado - e é por isso que não foi possível removê-lo dpkg -r, e o executável ainda permanecia mesmo depois dpkg -r.

Portanto, para remover esta instalação após a execução checkinstall, você deve realmente chamar make uninstallda fehpasta de origem:

$ 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

Oh bem .... espero que eu entendi corretamente como o processo vai agora, embora ..


6

Deve-se alterar fstrans para yes para garantir que a instalação de verificação não toque na árvore de arquivos real

--fstrans=yes

1
Eu usei essa opção em combinação com --install=noe os arquivos foram instalados, mas dpkgnão foram atualizados.
— Antonios Hadjigeorgalis

4

Você pode instalar "duas vezes":

  1. Através do pacote que você criou. Você pode desligá-lo--install=no

  2. Através da marca. Você pode desligá-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


Eu acho que essa é a melhor resposta.
— Jgomo3 07/05

1
"sudo checkinstall --install = no --fstrans = yes make" funcionou para mim. Eu misturei esta resposta com esta: unix.stackexchange.com/a/170170/156284
— Teo

-1

Você deve tentar usar:

sudo checkinstall --install=no make -n install

-1

Use: sudo checkinstall -D make -n install


Por favor, explique sua resposta.
— vonbrand

1
make -n installpara makede realmente instalar os arquivos, mas checkinstallnão interpreta adequadamente os resultados. Você acaba com um arquivo deb que não contém todos os arquivos necessários. Então, isso não funciona.
— Tim Tisdall
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.