Debian checkinstall mengabaikan install = no; bagaimana cara membuatnya, tetapi TIDAK menginstal secara otomatis suatu paket?

14

Oke, ini satu hal yang membingungkan saya ... Saya mencoba membuat paket dari sumber, dan kemudian gunakan checkinstalluntuk menghasilkan paket .deb. Perhatikan bahwa saya hanya ingin membuat paket .deb, tetapi saya TIDAK ingin menginstalnya .

Jadi, inilah contohnya - Saya menggunakan Ubuntu 11.04, dan pertama saya menginstal fehpaketnya dari repositori default; yang memiliki nomor versi tampaknya menjadi 1.3.4.dfsg.1-3

Lalu saya mencoba membangun feh dari sumber ; harus makelulus, dan dapat menjalankan yang baru fehdari baris perintah; megah.

Akhirnya, untuk membuat paket deb, saya menggunakan baris perintah berikut:

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, perhatikan bahwa saya pernah menggunakannya di --install=nosana? Bahkan man checkinstallmengatakan:

--instal Beralih penginstalan paket yang dibuat.

Nah, inilah yang checkinstalldijawab oleh perintah ini :

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

Saya TIDAK ingin paket sialan INSTALL - ITULAH MENGAPA SAYA DIGUNAKAN --install=noUNTUK CRYIN OUT LOUD !!!

Dan kemudian, tampaknya dalam upaya untuk menjadi sarkastik, log berlanjut:

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

Anda pasti bercanda dengan " CATATAN: Paket ini tidak akan diinstal ", benar, Pak checkinstall? Tentu Anda; setelah ini selesai, perhatikan apa yang saya dapatkan:

$ 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

Tidak yakin dari mana 1.10-1datangnya (seharusnya setidaknya 1.3.4, seperti di atas?) - tetapi sangat jelas bahwa 2,7 DID bisa diinstal, DI LUAR instruksi saya BUKAN untuk menginstal ...

Tentunya, saya dapat mencoba menghapus setelah itu:

$ 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

... tetapi bahkan tidak dpkg --purgeberfungsi ( apt-get removetidak akan bekerja sejak awal, karena ini adalah paket .deb yang diinstal secara manual). Dan selain dpkg -rtidak memberikan versi (jadi saya tidak benar-benar yakin apa yang seharusnya dihapus) - itu sebenarnya TIDAK menghapus executable berdarah ?!

Tapi bisa ada yang menjelaskan apa yang terjadi di sini - dan bagaimana untuk mendapatkan checkinstallke hanya menghasilkan .deb, dan tidak menginstalnya pada saat yang sama? Pertanyaan bonus - cara menghapus SEMUA file, termasuk file yang dapat dieksekusi /usr/local/bin/, yang diinstal dengan cara ini - karena tampaknya dpkg -rtidak berfungsi?

sdaau
sumber
Saya bingung. Mengapa Anda ingin menginstal dari sumber, jika Anda memiliki paket biner?
Faheem Mitha
dan bagaimana Anda memperbaiki kesalahan tentang --maintainer?
Aquarius Power
Saya melihat sumber checkinstall RE: the --maintainer error. Masalahnya adalah hasil dari simbol <dan> yang tidak dikutip. Jadi jawaban yang mudah adalah: jangan gunakan simbol. Jawaban yang lebih bermasalah adalah bahwa ada masalah serius dengan checkinstall. Seluruh sumber dikotori dengan eval echo $1... Itu seharusnya benar-benar eval "echo '$1'". Saya kira saya akan mencoba untuk menghubungi penulis atau sesuatu.
Enam

Jawaban:

13

Baik; Saya pikir saya akhirnya mengerti apa yang terjadi - garis kunci yang saya lewatkan adalah:

Installing with make install...

Ini berarti bahwa make installdari paket sumber 2.7 dijalankan - mungkin untuk "melihat" di mana file-file itu akhirnya akan berakhir, sehingga untuk menulis lokasi-lokasi tersebut di .deb yang baru? Tetapi bagaimanapun juga, file 2.7 .deb yang baru memang tidak dapat diinstal - dan itulah mengapa tidak dapat dihapus dengan dpkg -r, dan file executable masih bertahan bahkan setelahnya dpkg -r.

Jadi untuk menghapus instalasi ini setelah menjalankan checkinstall, seseorang harus benar-benar memanggil make uninstalldari fehfolder sumber:

$ 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

... dan akhirnya saya dapat mencoba paket yang baru dibuat:

$ 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 well .... saya harap saya mengerti dengan benar bagaimana prosesnya sekarang, meskipun ..

sdaau
sumber
6

Orang harus mengubah fstrans ke yes untuk memastikan checkinstall tidak akan menyentuh filetree yang sebenarnya

--fstrans=yes
Rostislav Kandilarov
sumber
1
Saya menggunakan switch ini bersama --install=no-sama dengan dan file-file telah diinstal tetapi dpkgtidak diperbarui.
Antonios Hadjigeorgalis
4

Anda dapat menginstal "dua kali":

  1. Melalui paket yang Anda buat. Anda dapat mematikannya dengan--install=no

  2. Melalui merek. Anda dapat mematikannya hanya dengan mengetik make(tanpa install)

Contoh:

  • Tidak ada instalasi sama sekali:

    sudo checkinstall --install=no make

  • Instalasi melalui make:

    sudo checkinstall --install=no make install

Musbach
sumber
Saya pikir ini adalah jawaban terbaik.
jgomo3
1
"sudo checkinstall --install = no --fstrans = yes make" bekerja untuk saya. Saya mencampur jawaban ini dengan yang ini: unix.stackexchange.com/a/170170/156284
Teo
-1

Anda harus mencoba menggunakan:

sudo checkinstall --install=no make -n install
pengguna53858
sumber
-1

Gunakan: sudo checkinstall -D make -n install

Martin
sumber
Tolong jelaskan jawaban Anda.
vonbrand
1
make -n installmemang berhenti makebenar-benar menginstal file, tetapi checkinstalltidak benar menafsirkan hasil. Anda berakhir dengan file deb yang tidak mengandung semua file yang Anda butuhkan. Jadi, ini tidak berhasil.
Tim Tisdall