Debian checkinstall ігнорує install = 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каже:

--встановити Toggle встановлення створеного пакету.

Ну, ось на що 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=noДЛЯ КРИЙНУ ЗАРАЗУ !!!

І тоді, очевидно, намагаючись бути саркастичним, журнал продовжує:

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. Випуск є результатом нецитованих <і> символів. Тож проста відповідь: не використовуйте символи. Більш проблемною відповіддю є те, що існує серйозна проблема з перевіркою. Все джерело завалене 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

Ну добре .... сподіваюся, я правильно зрозумів, як зараз йде процес ..



4

Ви можете встановити "двічі":

  1. Через створений вами пакет. Ви можете вимкнути його--install=no

  2. Через марку. Ви можете вимкнути його, просто ввівши make(без install)

Приклади:

  • Встановлення взагалі немає:

    sudo checkinstall --install=no make

  • Установка через make:

    sudo checkinstall --install=no make install


Я думаю, що це найкраща відповідь.
jgomo3

1
"sudo checkinstall --install = ні --fstrans = так make" працював на мене. Я змішав цю відповідь з цією: unix.stackexchange.com/a/170170/156284
Тео


-1

Використання: sudo checkinstall -D make -n install


Будь ласка, поясніть свою відповідь.
фонбранд

1
make -n installнасправді не перестає makeвстановлювати файли, але checkinstallне інтерпретує належним чином результати. У вас виходить деб-файл, який не містить усіх необхідних файлів. Отже, це не працює.
Тім Тісдалл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.