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говорит:

--install Переключить установку созданного пакета.

Ну, вот что 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, не работает?

sdaau
источник
Я озадачен Почему вы хотите установить из исходного кода, если у вас есть бинарный пакет?
Фахим Митха
и как вы исправили ошибку о --maintainer?
Водолей Power
Я посмотрел на источники checkinstall 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

Ну да ладно .... надеюсь, я правильно понял, как сейчас идет процесс, хотя ..

sdaau
источник
6

Нужно изменить fstrans на yes, чтобы checkinstall не касался реального файлового дерева

--fstrans=yes
Ростислав Кандиларов
источник
1
Я использовал этот переключатель в сочетании с --install=noи файлы были установлены, но dpkgне были обновлены.
Антониос Хаджигеоргалис
4

Вы можете установить «дважды»:

  1. Через пакет, который вы создали. Вы можете выключить его--install=no

  2. Через марку. Вы можете отключить его, просто набрав make(без install)

Примеры:

  • Никакой установки вообще:

    sudo checkinstall --install=no make

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

    sudo checkinstall --install=no make install

musbach
источник
Я думаю, что это лучший ответ.
jgomo3
1
"sudo checkinstall --install = no --fstrans = yes make" работал для меня. Я смешал этот ответ с этим: unix.stackexchange.com/a/170170/156284
Тео
-1

Вы должны попытаться использовать:

sudo checkinstall --install=no make -n install
user53858
источник
-1

Использование: sudo checkinstall -D make -n install

Мартин
источник
Пожалуйста, объясните свой ответ.
vonbrand
1
make -n installдействительно останавливает makeфактическую установку файлов, но checkinstallне правильно интерпретирует результаты. В итоге вы получите файл deb, содержащий не все нужные вам файлы. Итак, это не работает.
Тим Тисдалл