Acabei lidando com um software destinado a ser implantado usando o dpkg. O pacote .deb funciona bem no ambiente de teste, mas falha na preparação. Ambos estão executando a mesma versão do Ubuntu, mas não tenho 100% de certeza do resto das configurações. Como depurar ainda mais esse problema do dpkg?
A instalação falha assim:
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
Respostas:
O script .preinst do pacote está falhando por algum motivo.
Para descobrir o porquê, examine o script em
/var/lib/dpkg/info/PACKAGENAME.preinst
Se você deseja ver exatamente em qual linha o script está falhando, edite o script .preinst e adicione
set -x
imediatamente após a#!
linha. Isso ativa o rastreamento de execução no script.NOTA: Isso pressupõe que o script .preinst seja um shell (posix sh ou bash). Quase todos os scripts .preinst (e .postinst, .prerm e .postrm) são shell scripts, mas não precisam ser, podem ser executáveis. por exemplo, na minha máquina desktop principal com 9104 pacotes instalados, 14 são scripts perl, 1 é um executável compilado (preinst do bash - ele não pode assumir que já existe um shell em funcionamento) e todo o resto são scripts de shell ... 9041 são scripts de shell POSIX, 63 são scripts de bash. Se o .preinst for perl, python ou qualquer outra coisa, você precisará descobrir como habilitar o modo de rastreamento de depuração ou de execução ou similar nessa linguagem.
Então corra
dpkg --configure --pending
.Isso fará com que o dpkg tente configurar o pacote semi-instalado. NÃO o reinstale com
dpkg -i
, que substituirá o script .preinst editado pela versão no pacote .deb.Isso pode fornecer informações suficientes para corrigir o problema. Pode ser algo simples como um código de saída inesperado ou não capturado de um programa (a maioria dos scripts .preinst etc tem
set -e
, para fazê-los terminar no primeiro erro), ou assumindo que um diretório já existe (e isso pode ser devido a uma dependência não declarada no arquivo debian / control do pacote - ou seja, ele deve depender do foo, mas não. basta instalar o foo de qualquer maneira)Depois de corrigido, execute
dpkg --configure --pending
novamente, e o pacote deve estar instalado corretamente.Se o script .preinst estiver com erros, há uma chance razoável de que os scripts .postinst (e / ou .prerm e .postrm) também estejam. Pode ser necessário corrigi-los também.
Não se esqueça de enviar um relatório de bug para quem criou o pacote para que ele possa corrigi-lo.
fonte
Seu software empacotado inclui um "script de pré-instalação" (pré-instalação) que está falhando. Este é um script de shell incorporado ao arquivo .deb. Você pode extraí-lo com:
Então você pode olhar
out-dir/preinst
e ver se consegue descobrir por que está falhando.Se você deseja modificar esse script e reconstruir o
.deb
(talvez para adicionar algum código de depuração), tentefonte
Você precisará extrair o arquivo e ver por que o
preinst
script sai com o código1
.Não tenho certeza se houve uma discussão no UNIX.SE relacionada a como fazer isso, mas você pode dar uma olhada nesta pergunta no AskUbuntu para ter uma idéia de como extrair.
Após isso, você precisará executar manualmente o
preinst
script para ver por que a instalação do pacote falha.fonte
Se você deseja editar o pacote diretamente, tente o seguinte:
Fonte: http://ubuntuforums.org/showthread.php?t=636724
fonte
control
arquivo (e reconstruir o pacote), não opreinst
script pelo problema do OP.