Terminé tratando con un software destinado a ser implementado usando dpkg. El paquete .deb funciona bien en el entorno de prueba pero falla en la preparación. Ambos ejecutan la misma versión de Ubuntu, pero no estoy 100% seguro del resto de las configuraciones. ¿Cómo depurar más este problema dpkg?
La instalación falla así:
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
Respuestas:
El script .preinst del paquete falla por alguna razón.
Para averiguar por qué, examine el guión en
/var/lib/dpkg/info/PACKAGENAME.preinst
Si desea ver exactamente en qué línea está fallando el script, edite el script .preinst y agregue
set -x
inmediatamente después de la#!
línea. Esto activa el rastreo de ejecución en el script.NOTA: Esto supone que el script .preinst es un script de shell (posix sh o bash). Casi todos los scripts .preinst (y .postinst, .prerm y .postrm) son scripts de shell, pero no tienen que serlo, podrían ser ejecutables. por ejemplo, en mi máquina de escritorio principal con 9104 paquetes instalados, 14 son scripts perl, 1 es un ejecutable compilado (preinst de bash, no puede suponer que ya hay un shell en funcionamiento instalado), y el resto son scripts de shell ... 9041 son scripts de shell POSIX, 63 son scripts de bash. Si el .preinst es perl o python u otra cosa, tendrá que descubrir cómo habilitar la depuración o el modo de seguimiento de ejecución o similar en ese idioma.
Entonces corre
dpkg --configure --pending
.Esto hará que dpkg intente configurar el paquete medio instalado. NO lo reinstale con
dpkg -i
, ya que sobrescribirá su script .preinst editado con la versión en el paquete .deb.Esto puede darle suficiente información para solucionar el problema. Puede ser algo simple, como un código de salida inesperado o no detectado de un programa (la mayoría de los scripts .preinst, etc. tienen
set -e
, para que terminen en el primer error), o suponiendo que ya existe un directorio (y esto puede deberse a una dependencia no declarada en el archivo debian / control del paquete, es decir, debería depender de foo pero no lo hace. Simplemente instale foo de todos modos)Una vez que se solucione,
dpkg --configure --pending
vuelva a ejecutarlo y el paquete debe instalarse correctamente.Si el script .preinst tiene errores, hay una posibilidad razonable de que los scripts .postinst (y / o .prerm y .postrm) también lo estén. Es posible que también necesite repararlos.
No olvide enviar un informe de error a quien creó el paquete para que pueda solucionarlo.
fuente
Su software empaquetado incluye un "script de preinstalación" (preinst) que falla. Este es un script de shell incrustado dentro del archivo .deb. Puedes extraerlo con:
Luego puedes mirar
out-dir/preinst
y ver si puedes descubrir por qué está fallando.Si desea modificar ese script y reconstruir el
.deb
(quizás para agregar un código de depuración), intentefuente
Deberá extraer el archivo y ver por qué el
preinst
script sale con código1
.No estoy seguro de si hubo una discusión sobre UNIX.SE relacionada con cómo hacer esto, pero puede consultar esta pregunta desde AskUbuntu para tener una idea sobre cómo extraerla.
Después de esto, deberá ejecutar manualmente el
preinst
script para ver por qué falla la instalación del paquete.fuente
Si desea editar el paquete directamente, intente esto:
Fuente: http://ubuntuforums.org/showthread.php?t=636724
fuente
control
archivo (y reconstruir el paquete), no elpreinst
script por el problema del OP.