Хорошо, вот одна вещь, которая озадачивает меня ... Я пытаюсь собрать пакет из исходного кода, а затем использовать 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
, не работает?
источник
eval echo $1
... Так и должно бытьeval "echo '$1'"
. Я думаю, я попытаюсь связаться с автором или что-то.Ответы:
Правильно; Я думаю, что я наконец понял, что происходит - ключевая линия, которую я пропустил:
Это означает, что
make install
исходный пакет 2.7 был запущен - возможно, чтобы «увидеть», где эти файлы в конечном итоге окажутся, чтобы записать эти места в новый .deb? Но в любом случае новый 2.7 .deb действительно не был установлен - и именно поэтому его нельзя было удалить с помощьюdpkg -r
, а исполняемый файл все еще задерживался даже послеdpkg -r
.Таким образом, чтобы удалить эту установку после запуска
checkinstall
, нужно на самом деле позвонитьmake uninstall
изfeh
исходной папки:... и, наконец, я могу попробовать только что созданный пакет:
Ну да ладно .... надеюсь, я правильно понял, как сейчас идет процесс, хотя ..
источник
Нужно изменить fstrans на yes, чтобы checkinstall не касался реального файлового дерева
источник
--install=no
и файлы были установлены, ноdpkg
не были обновлены.Вы можете установить «дважды»:
Через пакет, который вы создали. Вы можете выключить его
--install=no
Через марку. Вы можете отключить его, просто набрав
make
(безinstall
)Примеры:
Никакой установки вообще:
sudo checkinstall --install=no make
Установка через make:
sudo checkinstall --install=no make install
источник
Вы должны попытаться использовать:
источник
Использование: sudo checkinstall -D make -n install
источник
make -n install
действительно останавливаетmake
фактическую установку файлов, ноcheckinstall
не правильно интерпретирует результаты. В итоге вы получите файл deb, содержащий не все нужные вам файлы. Итак, это не работает.