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.