В итоге я столкнулся с программным обеспечением, предназначенным для развертывания с использованием dpkg. Пакет .deb отлично работает в тестовой среде, но не проходит при постановке. Оба работают под управлением одной и той же версии Ubuntu, но я не уверен на 100% в остальных конфигурациях. Как отладить эту проблему dpkg дальше?
Установка терпит неудачу как это:
sudo dpkg -i --debug=7337 package.deb
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
(Reading database ... 201812 files and directories currently installed.)
Unpacking myProprietarySoftware (from package.deb) ...
D000001: process_archive oldversionstatus=not installed
D000002: fork/exec /var/lib/dpkg/tmp.ci/preinst ( install )
dpkg: error processing package.deb (--install):
subprocess new pre-installation script returned error exit status 1
D000002: maintainer_script_new nonexistent postrm `/var/lib/dpkg/tmp.ci/postrm'
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
D000010: ensure_pathname_nonexisting running rm -rf
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/reassemble.deb'
Errors were encountered while processing:
package.deb
Ответы:
Сценарий .preinst пакета по какой-то причине не работает.
Чтобы узнать почему, изучите сценарий в
/var/lib/dpkg/info/PACKAGENAME.preinst
Если вы хотите точно определить, в какой строке скрипта происходит сбой, отредактируйте скрипт .preinst и добавьте его
set -x
сразу после#!
строки. Это включает трассировку выполнения в скрипте.ПРИМЕЧАНИЕ. Предполагается, что сценарий .preinst является сценарием оболочки (posix sh или bash). Почти все сценарии .preinst (и .postinst, .prerm и .postrm) являются сценариями оболочки, но они необязательно должны быть исполняемыми. например, на моей основной настольной машине с установленными пакетами 9104, 14 являются сценариями perl, 1 - это скомпилированный исполняемый файл (preinst bash - он не может предполагать, что уже установлена работающая оболочка), а все остальные являются сценариями оболочки ... 9041 - это сценарии оболочки POSIX, 63 - сценарии bash. Если .preinst - это perl или python или что-то еще, вам придется выяснить, как включить режим отладки или трассировки выполнения или аналогичный в этом языке.
Тогда беги
dpkg --configure --pending
.Это заставит dpkg попытаться настроить наполовину установленный пакет. НЕ переустанавливайте его
dpkg -i
, это отменит ваш отредактированный скрипт .preinst версией из пакета .deb.Это может дать вам достаточно информации для решения проблемы. Это может быть что-то простое, например неожиданный или неперехваченный код выхода из программы (большинство сценариев .preinst и т. Д., Позволяющие
set -e
завершить их при первой ошибке), или предположение, что каталог уже существует (и это может быть из-за необъявленной зависимости). в файле debian / control пакета - т.е. он должен зависеть от foo, но не зависит. просто установите foo в любом случае)Как только это исправлено, запустите
dpkg --configure --pending
снова, и пакет должен быть правильно установлен.Если скрипт .preinst содержит ошибки, есть достаточный шанс, что скрипты .postinst (и / или .prerm и .postrm) тоже будут. Возможно, вам придется их исправить.
Не забудьте отправить отчет об ошибке любому, кто сделал пакет, чтобы он мог его исправить.
источник
В комплект поставки программного обеспечения входит «сценарий предварительной установки» (preinst), который не работает. Это shell-скрипт, встроенный в файл .deb. Вы можете извлечь его с помощью:
Тогда вы можете посмотреть
out-dir/preinst
и понять, можете ли вы понять, почему это не удается.Если вы хотите изменить этот скрипт и перестроить
.deb
(возможно, добавить некоторый код отладки), попробуйтеисточник
Вам нужно будет извлечь файл и посмотреть, почему
preinst
скрипт завершает работу с кодом1
.Не уверен, что обсуждался вопрос о том, как это сделать, в UNIX.SE, но вы можете взглянуть на этот вопрос из AskUbuntu, чтобы получить представление о том, как его извлечь.
После этого вам нужно будет вручную запустить
preinst
скрипт, чтобы увидеть, почему установка пакета не удалась.источник
Если вы хотите редактировать пакет напрямую, попробуйте это:
Источник: http://ubuntuforums.org/showthread.php?t=636724
источник
control
файла (и перестройки пакета), а неpreinst
сценария в соответствии с проблемой OP.