Debian checkinstall ignoruje install = no; jak go zbudować, ale NIE automatycznie instaluje pakietu?


14

Ok, jedna rzecz mnie zastanawia ... Próbuję zbudować pakiet ze źródła, a następnie użyć go checkinstalldo wygenerowania pakietu .deb. Zauważ, że chcę po prostu utworzyć pakiet .deb, ale NIE chcę go instalować .

Oto przykład - korzystam z Ubuntu 11.04 i najpierw instaluję fehpakiet z domyślnych repozytoriów; który ma numer wersji podobno 1.3.4.dfsg.1-3

Potem próbuję zbudować feh ze źródła ; mam makedo przekazania, i można uruchomić nowy fehz linii poleceń; wspaniały.

Wreszcie, aby utworzyć pakiet deb, używam następującego wiersza polecenia:

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, zauważyłeś, że już --install=notam byłem ? man checkinstallMówi nawet :

--install Przełącz instalację utworzonego pakietu.

Oto checkinstallodpowiedź na to polecenie:

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

NIEEEEEEEEEEEEEEEEEE !!!!!!!!!!

NIE chciałem, aby ta cholerna paczka ZAINSTALOWAŁA - TO DLACZEGO WYKORZYSTALIŁEM --install=noPOKRYĆ GŁOS !!!

A potem, najwyraźniej próbując być sarkastycznym, dziennik kontynuuje:

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

Pewnie żartujesz z tego „ UWAGA: Pakiet nie zostanie zainstalowany ”, prawda, panie checkinstall? Pewnie, że jesteś; po zakończeniu zanotuj, co otrzymuję:

$ 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

Nie jestem pewien, skąd to się 1.10-1wzięło (powinno być przynajmniej 1.3.4tak jak powyżej?) - ale to cholernie oczywiste, że zainstalowano wersję 2.7 DID, pomimo mojej instrukcji NIE instalować ...

Z pewnością mogę później spróbować usunąć:

$ 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

... ale nawet nie dpkg --purgedziała ( apt-get removena początku nie działa, ponieważ jest to ręcznie zainstalowany pakiet .deb). A poza tym, że dpkg -rnie podałem wersji (więc nie jestem do końca pewien, co powinien był zostać usunięty) - w rzeczywistości NIE usunął cholernego pliku wykonywalnego?!

Ale może ktoś wyjaśnić, co dzieje się tutaj - i jak dostać checkinstallsię tylko wygenerować .deb, a nie zainstalować go w tym samym czasie? Dodatkowe pytanie - jak usunąć WSZYSTKIE pliki, w tym pliki wykonywalne /usr/local/bin/, które zostały zainstalowane w ten sposób - skoro najwyraźniej dpkg -rnie działa?


Jestem zdziwiony. Dlaczego chcesz instalować ze źródła, jeśli masz pakiet binarny?
Faheem Mitha,

i jak naprawiłeś błąd związany z --mainainer?
Wodnik Moc

Przyjrzałem się źródłom checkinstall RE: błąd --maintainer. Problem jest wynikiem niecytowanych symboli <i>. Prosta odpowiedź brzmi: nie używaj symboli. Bardziej problematyczną odpowiedzią jest to, że istnieje poważny problem z checkinstall. Całe źródło jest pełne eval echo $1… Powinno być eval "echo '$1'". Myślę, że postaram się skontaktować z autorem lub czymś takim.
Sześć

Odpowiedzi:


13

Dobrze; Myślę, że w końcu zrozumiałem, co się dzieje - kluczową kwestią, którą przegapiłem, jest:

Installing with make install...

Oznacza to, że make installpakiet źródłowy 2.7 został uruchomiony - prawdopodobnie w celu „zobaczenia”, gdzie ostatecznie te pliki się znajdą, aby zapisać te lokalizacje w nowym .deb? Ale w każdym razie nowy 2.7 .eb rzeczywiście nie został zainstalowany - i dlatego nie można go było usunąć dpkg -r, a plik wykonywalny wciąż pozostawał w tyle dpkg -r.

Tak aby usunąć tę instalację po uruchomieniu checkinstall, należy faktycznie zadzwonić make uninstallz fehfolderu źródłowego:

$ 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

... i wreszcie mogę wypróbować nowo utworzony pakiet:

$ 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

No cóż ... mam nadzieję, że dobrze zrozumiałem, jak przebiega teraz ten proces ...


6

Należy zmienić fstrans na yes, aby checkinstall nie dotknął prawdziwego pliku

--fstrans=yes

1
Użyłem tego przełącznika w połączeniu z --install=noi pliki zostały zainstalowane, ale dpkgnie zostały zaktualizowane.
Antonios Hadjigeorgalis,

4

Możesz zainstalować „dwa razy”:

  1. Za pośrednictwem pakietu, który utworzyłeś. Możesz to wyłączyć--install=no

  2. Poprzez markę. Możesz go wyłączyć, po prostu wpisując make(bez install)

Przykłady:

  • Brak instalacji:

    sudo checkinstall --install=no make

  • Instalacja przez markę:

    sudo checkinstall --install=no make install


Myślę, że to najlepsza odpowiedź.
jgomo3

1
„sudo checkinstall --install = no --fstrans = yes make” działało dla mnie. Zmieszałem tę odpowiedź z tą jedną: unix.stackexchange.com/a/170170/156284
Teo


-1

Użyj: sudo checkinstall -D make -n install


Proszę wyjaśnić swoją odpowiedź.
vonbrand

1
make -n installprzestaje makeinstalować pliki, ale checkinstallnie interpretuje poprawnie wyników. Ostatecznie plik deb nie zawiera wszystkich potrzebnych plików. To nie działa.
Tim Tisdall
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.