Debian checkinstall bỏ qua install = no; Làm thế nào để xây dựng nó, nhưng KHÔNG tự động cài đặt một gói?


14

Ok, đây là một điều khiến tôi bối rối ... Tôi đang cố gắng xây dựng một gói từ nguồn, và sau đó sử dụng checkinstallđể tạo gói .deb. Lưu ý rằng tôi chỉ muốn tạo gói .deb, nhưng tôi KHÔNG muốn cài đặt nó.

Vì vậy, đây là một ví dụ - Tôi đang dùng Ubuntu 11.04 và đầu tiên tôi cài đặt fehgói đó từ kho lưu trữ mặc định; có số phiên bản rõ ràng là 1.3.4.dfsg.1-3

Sau đó, tôi đang cố gắng xây dựng feh từ nguồn ; có makeđể vượt qua, và có thể chạy mới fehtừ dòng lệnh; lộng lẫy.

Cuối cùng, để tạo gói deb, tôi sử dụng dòng lệnh sau:

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, lưu ý rằng tôi đã sử dụng --install=noở đó? Thậm chí man checkinstallnói:

--install Toggle cài đặt gói đã tạo.

Vâng, đây là những gì checkinstalllệnh này trả lời:

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

Tôi KHÔNG muốn gói chết tiệt CÀI ĐẶT - ĐÓ LÀ TẠI SAO TÔI SỬ DỤNG --install=noCHO CRYIN RA MẮT !!!

Và sau đó, rõ ràng là trong một nỗ lực để mỉa mai, nhật ký tiếp tục:

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

Bạn phải đùa với " LƯU Ý: Gói này sẽ không được cài đặt ", phải không, thưa ông checkinstall? Chắc chắn là bạn; sau khi hoàn thành, lưu ý những gì tôi nhận được:

$ 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

Không chắc chắn nó 1.10-1đến từ đâu (ít nhất 1.3.4là như vậy, như trên?) - nhưng rõ ràng là 2.7 DID đã được cài đặt, IN SPITE của hướng dẫn của tôi KHÔNG cài đặt ...

Chắc chắn, tôi có thể cố gắng loại bỏ sau đó:

$ 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

... nhưng thậm chí không dpkg --purgehoạt động ( apt-get removesẽ không hoạt động để bắt đầu, vì đó là gói .deb được cài đặt thủ công). Và bên cạnh việc dpkg -rkhông đưa ra một phiên bản (vì vậy tôi không thực sự chắc chắn đó là cái gì nên được gỡ bỏ) - thực tế nó đã không loại bỏ được bản thực thi đẫm máu?!

Nhưng bất cứ ai cũng có thể giải thích những gì đang diễn ra ở đây - và làm thế nào checkinstallđể chỉ tạo ra một .deb và KHÔNG cài đặt nó cùng một lúc? Câu hỏi bổ sung - làm thế nào để loại bỏ TẤT CẢ các tệp, bao gồm các tệp thực thi /usr/local/bin/, được cài đặt theo cách này - vì rõ ràng là dpkg -rkhông hoạt động?


Tôi hoang mang. Tại sao bạn muốn cài đặt từ nguồn, nếu bạn có gói nhị phân?
Faheem Mitha

và bạn đã sửa lỗi về --maintainer như thế nào?
Sức mạnh Bảo Bình

Tôi đã xem qua các nguồn cài đặt kiểm tra RE: lỗi --maintainer. Vấn đề là kết quả của các ký hiệu <và> không được trích dẫn. Vì vậy, câu trả lời dễ dàng là: không sử dụng biểu tượng. Câu trả lời có vấn đề hơn là có một vấn đề nghiêm trọng với checkinstall. Toàn bộ nguồn được lấp đầy với eval echo $1... Nó thực sự nên được eval "echo '$1'". Tôi đoán tôi sẽ cố gắng liên lạc với tác giả hoặc một cái gì đó.
Sáu

Câu trả lời:


13

Đúng; Tôi nghĩ rằng cuối cùng tôi đã hiểu chuyện gì đang xảy ra - dòng chính tôi đã bỏ lỡ là:

Installing with make install...

Điều này có nghĩa là make installgói nguồn 2.7 đã được chạy - có thể để "xem" nơi các tệp đó cuối cùng sẽ kết thúc, để ghi các vị trí đó vào .deb mới? Nhưng trong mọi trường hợp, 2.7 .deb mới thực sự không được cài đặt - và đó là lý do tại sao nó không thể được gỡ bỏ dpkg -rvà thực thi vẫn còn tồn tại ngay cả sau đó dpkg -r.

Vì vậy, để loại bỏ cài đặt này sau khi chạy checkinstall, người ta thực sự nên gọi make uninstalltừ fehthư mục nguồn:

$ 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

... Và cuối cùng tôi có thể thử gói vừa tạo:

$ 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 .... hy vọng tôi hiểu chính xác quá trình bây giờ, mặc dù ..


6

Người ta nên thay đổi fstrans thành yes để đảm bảo checkinstall sẽ không chạm vào filetree thực

--fstrans=yes

1
Tôi đã sử dụng công tắc này kết hợp với --install=novà các tệp đã được cài đặt nhưng dpkgkhông được cập nhật.
Antonios Hadjigeorgalis

4

Bạn có thể cài đặt "hai lần":

  1. Thông qua các gói mà bạn tạo ra. Bạn có thể tắt nó đi bằng cách--install=no

  2. Thông qua việc thực hiện. Bạn có thể tắt nó đi bằng cách gõ make(không có install)

Ví dụ:

  • Không có cài đặt nào cả:

    sudo checkinstall --install=no make

  • Một cài đặt thông qua make:

    sudo checkinstall --install=no make install


Tôi nghĩ rằng đây là câu trả lời tốt nhất.
jgomo3

1
"sudo checkinstall --install = no --fstrans = yes make" hoạt động với tôi. Tôi đã trộn câu trả lời này với câu trả lời này: unix.stackexchange.com/a/170170/156284
Teo


-1

Sử dụng: sudo checkinstall -D make -n install


Hãy giải thích câu trả lời của bạn.
vonbrand

1
make -n installkhông dừng makethực sự cài đặt các tập tin, nhưng checkinstallkhông diễn giải đúng kết quả. Bạn kết thúc với một tệp deb không chứa tất cả các tệp bạn cần. Vì vậy, điều này không làm việc.
Tim Tonomall
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.