2011-05-17 17 views
8

Tengo un programa de línea de comandos trivialmente simple que, literalmente, consiste en un script de python y algunos scripts de shell auxiliares. Me gustaría aprender sobre el empaquetado de este programa, aunque es trivial.checkinstall crea deb inútil?

Por lo que reuní, fui a la ruta de configuración/hacer/instalar. Como yo no tengo nada que configurar, ni nada que hacer, me sencillo creado un Makefile con nada más que una sección de instalar:

install: 
     cp ./myProgram /usr/bin/my-program 
     chown root:root /usr/bin/my-program 
     chmod 777 /usr/bin/my-program 
     cp -r ./ProgramResources /usr/lib/my-program 
     chown -hR root:root /usr/lib/my-program 
     chmod -R 777 /usr/lib/my-program 

En este punto, mi programa se instala y funciona muy bien con sudo make install.

Entonces, trato de hacer un archivo deb usando checkinstall de la siguiente manera:

sudo checkinstall sudo make install 

parece que se está más allá de la parte de instalación, ya que informa de que sea un éxito, pero luego falla:

======================== Installation successful ========================== 
cp: cannot stat `//var/tmp/tmp.jKCmESc0v7/newfiles.tmp': No such file or directory 

Copying files to the temporary directory...OK 

Stripping ELF binaries and libraries...OK 

Compressing man pages...OK 

Building file list... FAILED! 

Building Debian package...OK 

Installing Debian package...OK 

Erasing temporary files...OK 

Deleting temp dir...OK 


********************************************************************** 

Done. The new package has been installed and saved to 

... 

El programa está instalado, pero hasta donde puedo decir, este archivo .deb recién hecho no hace nada. rendimientos dpkg -L-mi programa sólo se

/. 

y manualmente quitarlo e instalar desde el archivo deb no parece hacer nada - en realidad no poner todos los archivos en cualquier lugar.

Entonces, (1) ¿Hay algún problema con mi enfoque? y (2) ¿Cómo puedo solucionar el problema de la instalación de comprobación?

Muchas gracias por las respuestas, aunque soy bueno con el código, nunca he sabido nada sobre empaquetado/distribución.

Respuesta

3

no estoy seguro de si esto responde exactamente a la pregunta, pero aquí es lo que tengo hasta ahora (en Ubuntu lúcido, checkinstall 1.6.1):

Traté de construir un proyecto de código abierto, que construyó esta bien Luego probé empaquetarlo para Debian:

checkinstall -D --install=no --pkgname=$PKGNAME --pkgversion=0.0.1 --pkgrelease="svn-001" [email protected] --strip=no --stripso=no --addso=yes

Esto básicamente fallaron al mismo Building file list... FAILED!; y se informó un grep: /var/tmp/tmp.NaoiwTHT6F/newfile: No such file or directory similar.

También traté de agregar make al final del comando checkinstall anterior, que tampoco hizo mucho.

Por último, he intentado esto:

make clean
checkinstall -D --install=no --pkgname=$PKGNAME --pkgversion=0.0.1 --pkgrelease="svn-001" [email protected] --strip=no --stripso=no --addso=yes -d2 make

El interruptor -d2 es permitir la depuración; y ... make volverá a ejecutar una vez más.

El -d2 imprimirá el directorio temporal:

debug: The temporary directory is: [ /var/tmp/tmp.NaoiwTHT6F ]
, por lo que se puede comprobar haciendo una lista de ... Y, de hecho, puedo confirmar que un newfile no se genera allí en mi caso (sin embargo, hay newfiles, newfiles.installwatch, newfiles-tar y newfiles.tmp).De hecho, resulta checkinstall es un script bash, y así se puede confirmar que newfile sólo aparece una vez en ella:

$ grep 'newfile ' `which checkinstall` 
    grep '^/home' ${TMP_DIR}/newfile > /${TMP_DIR}/unwanted 

Además, la depuración señalará estos archivos/directorios:

debug: INSTW_EXCLUDE=/dev,/path/to/myproject-build,/proc,/tmp,/var/tmp, 
debug: INSTW_ROOTPATH=/var/tmp/tmp.NaoiwTHT6F 
debug: INSTW_LOGFILE=/var/tmp/tmp.NaoiwTHT6F/newfiles.tmp 
debug: INSTW_DBGFILE=/var/tmp/tmp.NaoiwTHT6F/dbgfile 

Tenga en cuenta que, de forma predeterminada, se excluye la ruta a mi carpeta de compilación, /path/to/myproject-build, ¡y es aquí donde este proyecto también almacena los ejecutables incorporados!

 

Al parecer, cuando make dentro checkinstall ocurre en la construcción, por primera vez, puede capturar nuevamente generada archivos ejecutables - que se enumeran en ${TMP_DIR}/newfiles; sin embargo, en mi caso, el problema es que los ejecutables terminan bajo el mismo directorio donde se llama al checkinstall; por lo tanto, en este diálogo:

Some of the files created by the installation are inside the build 
directory: /path/to/myproject-build 

You probably don't want them to be included in the package, 
especially if they are inside your home directory. 
Do you want me to list them? [n]: y 
Should I exclude them from the package? (Saying yes is a good idea) [y]: n 

... Me imprescindible, de hecho, contesto n - de lo contrario me gustaría conseguir nada incluido! entonces puedo comprobar el contenido con:

dpkg --contents mytest.deb | less 

Sin embargo, el problema es que checkinstall:

  • también incluye .o archivos, así como .svn directorios
  • recuento de la ruta absoluta como relativo (no "enviará" automáticamente ejecutables para decir, /usr/bin y .so s a /usr/lib

 

En pocas palabras - algunos de los enfoques anteriormente puede conseguir uno para tener un .deb que no está completamente vacío; pero eso no significa que uno solo tiene los archivos necesarios allí, o que se enrutarían a los destinos de instalación habituales ...

Bueno, espero que esto ayude al menos un poco,
¡Salud!

1

He tenido problemas similares. Al final seguí this muy simple, pero bastante enfoque manual.

Coloque los archivos que desea empaquetar en debian/usr/bin, por ejemplo. No es necesario completar los pasos habituales de configure, make, make install.

5

El doble uso de sudo es el problema.

Con la instalación de un archivo.sh como

#! /bin/bash 
set -x 
touch useless 
cp useless /usr/share/useless 

comando

sudo checkinstall --pkgname useless -y ./install.sh 

obras mientras

sudo checkinstall --pkgname useless -y sudo ./install.sh 
             ^^^^ 

muestra

cp: cannot stat ‘//var/tmp/tmp.Au4ympTNlT/newfiles.tmp’: No such file or directory 

y produce un paquete vacío.

Cuestiones relacionadas