Debian checkinstall ignora install = no; come farlo compilare, ma NON installare automaticamente un pacchetto?


14

Ok, ecco una cosa che mi confonde ... Sto provando a creare un pacchetto dal sorgente, e poi lo uso checkinstallper generare un pacchetto .deb. Nota che voglio solo creare il pacchetto .deb, ma NON voglio installarlo .

Quindi, ecco un esempio: sono su Ubuntu 11.04 e prima installo il suo fehpacchetto dai repository predefiniti; che ha un numero di versione apparentemente 1.3.4.dfsg.1-3

Quindi sto provando a costruire feh dalla fonte ; ottenuto makea passare, e in grado di eseguire il nuovo fehdalla riga di comando; splendida.

Ora finalmente, per creare un pacchetto deb, utilizzo la seguente riga di 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, noti che l'ho usato --install=nolì? Anche man checkinstalldice:

--install Attiva o disattiva l'installazione del pacchetto creato.

Bene, questo è ciò che questo checkinstallcomando risponde:

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

NON volevo che il maledetto pacchetto fosse INSTALLATO - QUELLO È IL PERCHE 'CHE HO UTILIZZATO --install=noPER CRYIN OUT LOUD !!!

E poi, apparentemente nel tentativo di essere sarcastico, il registro 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

Stai scherzando con questo " NOTA: il pacchetto non verrà installato ", giusto, signor checkinstall? Sicuro che lo sei; dopo questo, nota cosa ottengo:

$ 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

Non sono sicuro da dove 1.10-1provenga (avrebbe dovuto essere almeno 1.3.4, come sopra?) - ma è dannatamente ovvio che il DID 2.7 viene installato, nonostante le mie istruzioni NON installare ...

Sicuramente, posso provare a rimuovere in seguito:

$ 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

... ma nemmeno dpkg --purgefunziona ( apt-get removenon funzionerebbe per cominciare, dato che è un pacchetto .deb installato manualmente). E oltre a dpkg -rnon dare una versione (quindi non sono davvero sicuro di cosa avrebbe dovuto essere rimosso) - in realtà NON ha rimosso il maledetto eseguibile ?!

Ma qualcuno può spiegare cosa sta succedendo qui - e come arrivare checkinstalla generare solo un .deb e NON installarlo allo stesso tempo? Domanda bonus - come rimuovere TUTTI i file, inclusi gli eseguibili /usr/local/bin/, che sono stati installati in questo modo - dal momento che apparentemente dpkg -rnon funziona?


Sono perplesso. Perché vuoi installare dal sorgente, se hai un pacchetto binario?
Faheem Mitha,

e come hai corretto l'errore su --maintainer?
Aquarius Power il

Ho dato un'occhiata alle fonti di checkinstall RE: l'errore --maintainer. Il problema è il risultato di simboli <e> non quotati. Quindi la risposta semplice è: non usare simboli. La risposta più problematica è che c'è un problema serio con checkinstall. L'intera fonte è disseminata di eval echo $1... In realtà dovrebbe essere eval "echo '$1'". Immagino che proverò a mettermi in contatto con l'autore o qualcosa del genere.
Sei

Risposte:


13

Giusto; Penso di aver finalmente capito cosa sta succedendo - la linea chiave che mi mancava è:

Installing with make install...

Ciò significa che è make installstato eseguito il pacchetto sorgente 2.7 - probabilmente per "vedere" dove finiranno quei file, in modo da scrivere quelle posizioni nel nuovo .deb? Ma in ogni caso, il nuovo 2.7 .deb non è stato effettivamente installato - ed è per questo che non è stato possibile rimuoverlo dpkg -r, e l'eseguibile è rimasto persistente anche dopo dpkg -r.

Quindi per rimuovere questa installazione dopo l'esecuzione checkinstall, si dovrebbe effettivamente chiamare make uninstalldalla fehcartella di origine:

$ 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 poi finalmente posso provare il pacchetto appena creato:

$ 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

Vabbè .... spero di aver capito bene come va il processo adesso, però ...


6

Si dovrebbe cambiare fstrans in yes per assicurarsi che checkinstall non tocchi il vero filetree

--fstrans=yes

1
Ho usato questo interruttore in combinazione con --install=noe i file sono stati installati ma dpkgnon sono stati aggiornati.
Antonios Hadjigeorgalis,

4

Puoi installare "due volte":

  1. Tramite il pacchetto che hai creato. Puoi spegnerlo da--install=no

  2. Via la marca. Puoi spegnerlo semplicemente digitando make(senza install)

Esempi:

  • Nessuna installazione:

    sudo checkinstall --install=no make

  • Un'installazione tramite make:

    sudo checkinstall --install=no make install


Penso che questa sia la risposta migliore.
jgomo3,

1
"sudo checkinstall --install = no --fstrans = yes make" ha funzionato per me. Ho mescolato questa risposta con questa: unix.stackexchange.com/a/170170/156284
Teo

-1

Dovresti provare a usare:

sudo checkinstall --install=no make -n install

-1

Usa: sudo checkinstall -D make -n install


Per favore, spiega la tua risposta.
vonbrand,

1
make -n installsmette makedi installare effettivamente i file, ma checkinstallnon interpreta correttamente i risultati. Si finisce con un file deb che non contiene tutti i file necessari. Quindi, questo non funziona.
Tim Tisdall,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.