makefile - ¿checkinstall crea deb inútil?
(3)
No estoy seguro de si esto responde exactamente la pregunta, pero esto es lo que obtuve hasta ahora (en ubuntu lúcido, checkinstall 1.6.1):
Traté de construir un proyecto de código abierto, que funcionó perfectamente. Luego intenté 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 falló en la misma Building file list... FAILED!
; y un grep: /var/tmp/tmp.NaoiwTHT6F/newfile: No such file or directory
similar grep: /var/tmp/tmp.NaoiwTHT6F/newfile: No such file or directory
se informó de grep: /var/tmp/tmp.NaoiwTHT6F/newfile: No such file or directory
.
También probé con agregar make
al final del comando checkinstall
anterior, que tampoco hizo mucho.
Finalmente, intenté 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 cambio -d2
es para habilitar 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 verificar enumerando ... Y, de hecho, puedo confirmar que en mi caso no se genera un newfile
(sin embargo, hay newfiles
, newfiles.installwatch
, newfiles-tar
y newfiles.tmp
). De hecho, resulta que checkinstall
es un script bash
, por lo que uno puede confirmar que newfile
solo aparece una vez en él:
$ 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 ahí es donde este proyecto también almacena los ejecutables incorporados.
Aparentemente, cuando make
in checkinstall
continúa construyendo por primera vez, puede capturar los archivos ejecutables recientemente generados; se mostrarán en ${TMP_DIR}/newfile s
; sin embargo, en mi caso, el problema es que los ejecutables terminan bajo el mismo directorio donde se llama a 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
... Debo , de hecho, responder n
; de lo contrario, ¡no recibiría nada incluido! Puedo verificar los contenidos con:
dpkg --contents mytest.deb | less
Sin embargo, entonces el problema es que checkinstall
:
- también incluye archivos
.o
, así como directorios.svn
- cuenta la ruta absoluta como relativa (no "enviará" automáticamente ejecutables para decir,
/usr/bin
, y.so
s a/usr/lib
En resumen: algunos de los enfoques anteriores pueden hacer que uno tenga un .deb
que no está completamente vacío; pero eso no significa que uno tenga solo los archivos necesarios allí, o que sean enrutados a los destinos de instalación habituales ...
Bueno, espero que esto ayude al menos un poco,
¡Aclamaciones!
Tengo un programa de línea de comandos trivialmente simple que, literalmente, consta de una secuencia de comandos python y algunos scripts de shell auxiliar. Me gustaría aprender sobre el empaquetado de este programa, aunque es trivial.
Por lo que reuní, fui a la ruta de configuración / hacer / instalar. Como no tenía nada que configurar ni nada que hacer, simplemente creé un Makefile con nada más que una sección de instalación:
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 bien con sudo make install.
Luego, intento crear un archivo deb usando la instalación de verificación de la siguiente manera:
sudo checkinstall sudo make install
Parece pasar la parte de instalación, ya que informa de que fue exitosa, 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. dpkg -L mi-programa solo produce
/.
y eliminarlo e instalarlo manualmente desde el archivo deb no parece hacer nada, en realidad no coloca ningún archivo en ningún lado.
Entonces, (1) ¿Hay algo mal con mi enfoque? y (2) ¿Cómo puedo solucionar el problema de la instalación de verificación?
Muchas gracias por las respuestas, aunque soy bueno con el código, nunca he sabido nada sobre empaque / distribución.
He tenido problemas similares. Al final seguí este enfoque muy simple, pero bastante 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
.
El doble uso de sudo es el problema.
Con un archivo install.sh me gusta
#! /bin/bash
set -x
touch useless
cp useless /usr/share/useless
mando
sudo checkinstall --pkgname useless -y ./install.sh
funciona 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.