Ok, aqui está uma coisa que me intriga ... Estou tentando criar um pacote a partir do código-fonte e depois usá-lo checkinstall
para 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 feh
pacote 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 make
que passar e pode executar o novo feh
na 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, percebeu que eu usei --install=no
lá? Até man checkinstall
diz:
--install Alterna a instalação do pacote criado.
Bem, é isso que este checkinstall
comando 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 !!!!!!!!!!
Eu não queria que o maldito pacote --install=no
instalasse - é 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-1
veio (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 --purge
funciona ( apt-get remove
para começar, porque não é um pacote .deb instalado manualmente). E além de dpkg -r
nã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 checkinstall
a ú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 -r
não funciona?
fonte
eval echo $1
... Deveria sereval "echo '$1'"
. Acho que vou tentar entrar em contato com o autor ou algo assim.Respostas:
Certo; Eu acho que finalmente entendi o que está acontecendo - a linha principal que eu perdi é:
Isso significa que o
make install
pacote 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ê-lodpkg -r
, e o executável ainda permanecia mesmo depoisdpkg -r
.Portanto, para remover esta instalação após a execução
checkinstall
, você deve realmente chamarmake uninstall
dafeh
pasta de origem:... e, finalmente, posso experimentar o pacote recém-criado:
Oh bem .... espero que eu entendi corretamente como o processo vai agora, embora ..
fonte
Deve-se alterar fstrans para yes para garantir que a instalação de verificação não toque na árvore de arquivos real
fonte
--install=no
e os arquivos foram instalados, masdpkg
não foram atualizados.Você pode instalar "duas vezes":
Através do pacote que você criou. Você pode desligá-lo
--install=no
Através da marca. Você pode desligá-lo simplesmente digitando
make
(seminstall
)Exemplos:
Nenhuma instalação:
sudo checkinstall --install=no make
Uma instalação via make:
sudo checkinstall --install=no make install
fonte
Você deve tentar usar:
fonte
Use: sudo checkinstall -D make -n install
fonte
make -n install
paramake
de realmente instalar os arquivos, mascheckinstall
nã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.