Debian checkinstall ละเว้นการติดตั้ง = no; จะสร้างได้อย่างไร แต่ไม่ติดตั้งแพคเกจใหม่โดยอัตโนมัติ?


14

ตกลงนี่คือสิ่งหนึ่งที่ไขปริศนาฉัน ... ฉันกำลังพยายามสร้างแพ็คเกจจากซอร์สโค้ดแล้วใช้checkinstallเพื่อสร้างแพ็คเกจ. deb โปรดทราบว่าฉันต้องการเพียงแค่สร้างแพคเกจ .deb แต่ฉันไม่ต้องการที่จะติดตั้งมัน

ต่อไปนี้เป็นตัวอย่าง - ฉันใช้ Ubuntu 11.04 และก่อนอื่นฉันติดตั้งfehแพคเกจจากที่เก็บเริ่มต้น ซึ่งมีหมายเลขรุ่นที่เห็นได้ชัดคือ1.3.4.dfsg.1-3

จากนั้นฉันก็พยายามที่จะสร้างfeh จากแหล่งที่มา ; ได้makeผ่านไปแล้วและสามารถเรียกใช้ใหม่fehจากบรรทัดคำสั่ง; โอ่โถง

ในที่สุดเมื่อต้องการสร้างแพ็คเกจ deb ฉันใช้บรรทัดคำสั่งต่อไปนี้:

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

ตกลงสังเกตว่าฉันเคยใช้ที่--install=noนั่น? แม้man checkinstallพูดว่า:

- ติดตั้งสลับการติดตั้งแพคเกจที่สร้างขึ้น

นี่คือสิ่งที่checkinstallคำสั่งนี้ตอบ:

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

ฉันไม่ต้องการให้แพคเกจแช่งติดตั้ง - นั่นคือเหตุผลที่ฉันใช้--install=noCRYIN OUT ดัง ๆ !

และจากนั้นในความพยายามที่จะประชดประชันบันทึกจะดำเนินต่อไป:

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

คุณต้องล้อเล่นกับ " หมายเหตุ: แพคเกจนี้จะไม่ถูกติดตั้ง " checkinstallใช่ไหมคุณ? แน่นอนว่าคุณ; หลังจากเสร็จแล้วให้สังเกตสิ่งที่ฉันได้รับ:

$ 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

ไม่แน่ใจว่า1.10-1มาจากไหน (ควรมีอย่างน้อย1.3.4ตามข้างบน?) - แต่มันชัดเจนว่าแชท 2.7 DID ได้รับการติดตั้งแม้คำแนะนำของฉันจะไม่ติดตั้ง ...

แน่นอนฉันสามารถลองลบภายหลัง:

$ 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

... แต่ไม่สามารถใช้dpkg --purgeงานได้ ( apt-get removeจะไม่สามารถเริ่มต้นได้เนื่องจากเป็นแพ็คเกจ. deb ที่ติดตั้งด้วยตนเอง) และนอกจากจะdpkg -rไม่ให้รุ่น (ดังนั้นฉันไม่แน่ใจจริงๆว่ามันควรจะถูกลบออก) - ในความเป็นจริงไม่ได้ลบเลือดที่ปฏิบัติการได้หรือไม่!

แต่ทุกคนสามารถอธิบายสิ่งที่เกิดขึ้นที่นี่ - และวิธีการที่จะได้รับcheckinstallไปเพียงสร้าง .deb และไม่ติดตั้งได้ในเวลาเดียวกันได้หรือไม่ คำถามโบนัส - จะลบไฟล์ทั้งหมดรวมถึงไฟล์/usr/local/bin/ที่ติดตั้งด้วยวิธีdpkg -rนี้ได้อย่างไรเนื่องจากเห็นได้ชัดว่าใช้งานไม่ได้?


ฉันงง ทำไมคุณต้องการติดตั้งจากแหล่งถ้าคุณมีแพคเกจไบนารี?
Faheem Mitha

และคุณแก้ไขข้อผิดพลาดเกี่ยวกับ --maintainer ได้อย่างไร
กุมภ์อำนาจ

ฉันลองดูที่แหล่งข้อมูลการติดตั้ง RE: ข้อผิดพลาด --maintainer ปัญหานี้เป็นผลลัพธ์ของสัญลักษณ์ <และ> ที่ไม่ได้ระบุ ดังนั้นคำตอบง่ายๆคืออย่าใช้สัญลักษณ์ คำตอบที่เป็นปัญหามากขึ้นคือมีปัญหาร้ายแรงกับ checkinstall แหล่งที่มาทั้งหมดจะถูกเกลื่อนไปด้วยeval echo $1... eval "echo '$1'"อันที่จริงมันควรจะเป็น ฉันเดาว่าฉันจะพยายามติดต่อกับผู้แต่งหรืออะไรซักอย่าง
หก

คำตอบ:


13

ขวา; ฉันคิดว่าในที่สุดฉันก็เข้าใจสิ่งที่เกิดขึ้น - กุญแจที่ฉันพลาดคือ:

Installing with make install...

ซึ่งหมายความว่าmake installแพคเกจ 2.7 ของซอร์สถูกรัน - อาจเป็นเพื่อ "ดู" ที่ซึ่งไฟล์เหล่านั้นจะสิ้นสุดในที่สุดเพื่อที่จะเขียนตำแหน่งเหล่านั้นใน. deb ใหม่ แต่ในกรณีใด ๆ 2.7 .deb ใหม่ไม่ได้รับการติดตั้ง - และนั่นคือเหตุผลว่าทำไมมันถึงไม่สามารถลบออกได้dpkg -rและไฟล์ปฏิบัติการก็ยังคงทำงานdpkg -rอยู่

ดังนั้นเมื่อต้องการลบการติดตั้งนี้หลังจากใช้งานcheckinstallจริง ๆ แล้วควรเรียกmake uninstallจากfehโฟลเดอร์ต้นทาง:

$ 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

... และในที่สุดฉันก็สามารถลองแพ็คเกจที่สร้างขึ้นใหม่ได้:

$ 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

โอ้ดี .... ฉันหวังว่าฉันจะเข้าใจอย่างถูกต้องว่ากระบวนการจะไปได้อย่างไร ..


6

หนึ่งควรเปลี่ยนfstransเป็นใช่เพื่อให้แน่ใจว่าการติดตั้งจะไม่ได้สัมผัสกับไฟล์จริง

--fstrans=yes

1
ฉันใช้สวิตช์นี้ร่วมกับ--install=noและติดตั้งไฟล์แล้ว แต่dpkgไม่ได้รับการอัพเดต
Antonios Hadjigeorgalis

4

คุณสามารถติดตั้ง "สองครั้ง":

  1. ผ่านแพ็คเกจที่คุณสร้าง คุณสามารถปิดได้โดย--install=no

  2. ผ่านการทำ คุณสามารถปิดได้โดยพิมพ์make(โดยไม่มีinstall)

ตัวอย่าง:

  • ไม่มีการติดตั้งเลย:

    sudo checkinstall --install=no make

  • การติดตั้งผ่านทาง make:

    sudo checkinstall --install=no make install


ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุด
jgomo3

1
"sudo checkinstall --install = no --fstrans = ใช่ make" ใช้ได้สำหรับฉัน ฉันผสมคำตอบนี้กับอันนี้: unix.stackexchange.com/a/170170/156284
Teo


-1

ใช้: sudo checkinstall -D make -n install


กรุณาอธิบายคำตอบของคุณ
vonbrand

1
make -n installไม่หยุดการmakeติดตั้งไฟล์จริง ๆ แต่checkinstallไม่ได้แปลผลลัพธ์อย่างถูกต้อง คุณจะพบไฟล์ deb ที่ไม่มีไฟล์ทั้งหมดที่คุณต้องการ ดังนั้นนี่ใช้ไม่ได้
Tim Tisdall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.