Debian checkinstall ignoriert install = no; Wie kann ich ein Paket erstellen, aber NICHT automatisch installieren lassen?


13

Ok, hier ist eine Sache, die mich verwirrt ... Ich versuche, ein Paket aus dem Quellcode zu erstellen und dann checkinstallein .deb-Paket zu generieren. Beachten Sie, dass ich nur das DEB-Paket erstellen möchte, es aber NICHT installieren möchte .

Hier ist ein Beispiel: Ich arbeite unter Ubuntu 11.04 und installiere zuerst das fehPaket aus den Standard-Repositorys. die Versionsnummer ist offenbar 1.3.4.dfsg.1-3

Dann versuche ich, feh von der Quelle zu bauen ; Ich muss makeüberholen und kann das Neue fehvon der Kommandozeile aus ausführen . herrlich.

Zum Erstellen eines Deb-Pakets verwende ich nun die folgende Befehlszeile:

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, merke, dass ich dort benutzt habe --install=no? Sogar man checkinstallsagt:

--install Schaltet die Installation des erstellten Pakets um.

Nun, darauf checkinstallantwortet dieser Befehl:

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

Ich wollte nicht, dass das verdammte Paket installiert wird - das ist der Grund, --install=nowarum ich es benutzt habe, um laut zu schreien !!!

Und dann, anscheinend in dem Versuch, sarkastisch zu sein, wird das Protokoll fortgesetzt:

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

Sie machen wohl Witze mit diesem " HINWEIS: Das Paket wird nicht installiert ", oder, Mr. checkinstall? Sicher bist du das; nachdem dies erledigt ist, notiere was ich bekomme:

$ 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

Ich 1.10-1bin mir nicht sicher, woher das kommt (sollte es zumindest 1.3.4wie oben sein?) - aber es ist verdammt offensichtlich, dass die 2.7 DID trotz meiner Anweisung, NICHT zu installieren, installiert wurde ...

Sicher kann ich versuchen, danach zu entfernen:

$ 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

... aber nicht einmal dpkg --purgefunktioniert ( apt-get removewürde zunächst nicht funktionieren, da es sich um ein manuell installiertes .deb-Paket handelt). Und abgesehen dpkg -rdavon, dass ich keine Version angegeben habe (also bin ich mir nicht sicher, was eigentlich hätte entfernt werden sollen) - hat es die verdammte ausführbare Datei tatsächlich NICHT entfernt ?!

Aber kann jemand erklären, was hier vor sich geht - und wie man checkinstalles schafft , nur eine .deb-Datei zu generieren und NICHT gleichzeitig zu installieren? Bonusfrage - Wie entferne ich ALLE Dateien, einschließlich der ausführbaren Dateien in /usr/local/bin/, die auf diese Weise installiert wurden - da dies anscheinend dpkg -rnicht funktioniert?


Ich bin verwirrt. Warum möchten Sie von der Quelle installieren, wenn Sie ein Binärpaket haben?
Faheem Mitha

und wie haben Sie den Fehler bei --maintainer behoben?
Aquarius Power

Ich habe mir die Checkinstall-Quellen angesehen. RE: the --maintainer error. Das Problem ist das Ergebnis von nicht zitierten <und> Symbolen. Die einfache Antwort lautet also: Verwenden Sie keine Symbole. Die problematischere Antwort ist, dass es ein ernstes Problem mit checkinstall gibt. Die gesamte Quelle ist übersät mit eval echo $1... Eigentlich sollte es so sein eval "echo '$1'". Ich werde versuchen, mit dem Autor in Kontakt zu treten oder so.
Sechs

Antworten:


12

Richtig; Ich glaube, ich habe endlich verstanden, was passiert - die Schlüsselzeile, die ich verpasst habe, ist:

Installing with make install...

Dies bedeutet, dass das make install2.7-Quellpaket ausgeführt wurde - wahrscheinlich, um zu "sehen", wo diese Dateien letztendlich landen werden, um diese Speicherorte in die neue .deb-Datei zu schreiben. Aber auf jeden Fall wurde die neue 2.7 .deb nicht installiert - und deshalb konnte sie auch nicht mit entfernt werden dpkg -r, und die ausführbare Datei verweilte auch danach noch dpkg -r.

Um diese Installation nach dem Ausführen zu entfernen checkinstall, sollte man eigentlich make uninstallaus dem fehQuellordner aufrufen :

$ 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

... und dann kann ich endlich das neu erstellte Paket ausprobieren:

$ 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

Na ja ... hoffe ich habe richtig verstanden, wie der Prozess jetzt abläuft.


5

Man sollte fstrans auf yes ändern , um sicherzustellen, dass checkinstall den echten Dateibaum nicht berührt

--fstrans=yes

1
Ich habe diesen Schalter in Kombination mit verwendet --install=nound die Dateien wurden installiert, aber dpkgnicht aktualisiert.
Antonios Hadjigeorgalis

4

Sie können "zweimal" installieren:

  1. Über das von Ihnen erstellte Paket. Sie können es mit ausschalten--install=no

  2. Über die Marke. Sie können es ausschalten, indem Sie einfach make(ohne install)

Beispiele:

  • Überhaupt keine Installation:

    sudo checkinstall --install=no make

  • Eine Installation über make:

    sudo checkinstall --install=no make install


Ich denke das ist die beste Antwort.
jgomo3

1
"sudo checkinstall --install = no --fstrans = yes make" hat bei mir funktioniert. Ich mischte diese Antwort mit dieser: unix.stackexchange.com/a/170170/156284
Teo

-1

Sie sollten versuchen, Folgendes zu verwenden:

sudo checkinstall --install=no make -n install

-1

Verwenden Sie: sudo checkinstall -D make -n install


Bitte erläutern Sie Ihre Antwort.
Vonbrand

1
make -n installbeendet zwar die makeeigentliche Installation der Dateien, checkinstallinterpretiert die Ergebnisse jedoch nicht richtig. Sie erhalten eine Deb-Datei, die nicht alle benötigten Dateien enthält. Das funktioniert also nicht.
Tim Tisdall
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.