Comportamiento extraño de apt-get con instrucciones post-inst y files .desktop

Tenemos una serie de files .deb construidos a mano (con fpm y jenkins) en un repository Apt local (reprepro). Estos .debs contienen un file .desktop que será recogido por xdg-desktop en una secuencia de commands post-inst.

Si instalamos el file deb a mano, en un nuevo sistema, todo está bien.

Si instalamos una nueva versión con apt-get install, obtendremos este error

xdg-desktop-menu: file '/usr/local/share/applications/customthingy.desktop' does not exist 

Si descargo el file deb con apt-get install -d customthingy y ejecuto

 dpkg -i /var/cache/apt/archives/customthingy_2-r3_all.deb 

Tengo el mismo error xdg-desktop que antes. Así que descarta un problema con apt.

Si list el contenido del deb descargado,

 tom.oconnor@charcoal-black:~$ dpkg --contents /var/cache/apt/archives/customthingy_2-r3_all.deb |grep ".desktop" -rw-r--r-- root/root 201 2011-07-28 20:02 ./usr/local/share/applications/customthingy.desktop 

Puede ver que el file existe.

Sin embargo .. Si purgamos antes de reinstalar,

 tom.oconnor@charcoal-black:~$ sudo apt-get purge customthingy Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED customthingy* 0 upgraded, 0 newly installed, 1 to remove and 84 not upgraded. After this operation, 0B of additional disk space will be used. Do you want to continue [Y/n]? y (Reading database ... 219342 files and directories currently installed.) Removing customthingy ... Purging configuration files for customthingy ... 

Y entonces

 tom.oconnor@charcoal-black:~$ sudo apt-get install customthingy Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed customthingy 0 upgraded, 1 newly installed, 0 to remove and 84 not upgraded. Need to get 0B/4,030B of archives. After this operation, 0B of additional disk space will be used. Selecting previously deselected package customthingy. (Reading database ... 219319 files and directories currently installed.) Unpacking customthingy (from .../customthingy_2-r3_all.deb) ... Setting up customthingy (2-r3) ... 

EDIT: Contenido del script Postinst

 #!/bin/sh # Add an entry to the system menu XDG_DESKTOP_MENU="`which xdg-desktop-menu 2> /dev/null`" if [ ! -x "$XDG_DESKTOP_MENU" ]; then echo "WARNING: Could not find xdg-desktop-menu" >&2 else "$XDG_DESKTOP_MENU" install --mode system /usr/local/share/applications/customthingy.desktop "$XDG_DESKTOP_MENU" forceupdate --mode system fi 

No hay error. Así que .. Las preguntas son las siguientes:

  1. ¿Es este comportamiento esperado, o un error en apt / dpkg?
  2. ¿Tenemos un package malformado con customthingy.deb que está impidiendo que funcione una futura ejecución de reinstallation?
  3. ¿Es seguro asumir que post-inst siempre sucederá al final de la installation, y podemos asumir con security que todos los files se han extraído antes de este punto en el time?
  4. ¿Estamos haciendo algo masivamente raro?

2 Solutions collect form web for “Comportamiento extraño de apt-get con instrucciones post-inst y files .desktop”

Supongo que su postinst está llamando a xdg-desktop-menu para mover el file de escritorio en /usr/share/applications y actualizar la database de escritorio XDG. Esto se hace, por ejemplo, google-chrome-stable , pero no puedo entender por qué (leer)

Si instala el file de escritorio directamente en /usr/share/applications lugar (a través de dpkg, es decir, coloque el file allí a través de dh_install por ejemplo, de modo que la ruta en .deb sea ​​sólo /usr/share/applications ) el número de packages automáticamente "disparará" las actualizaciones: notablemente gnome-menus y desktop-file-utils , pero tal vez otros (dependiendo de la versión exacta del sistema operativo de destino, etc.)

Al less en mi caso, estos son suficientes para lograr lo que ejecuta xdg-desktop-menu a mano haría (el progtwig aparece en mis menus de usuario de inmediato)

Todavía estoy en la oscuridad de por qué google-chrome-stable y otros (principalmente de terceros) .deb s enviar el file de escritorio en otro lugar que no sea /usr/share/applications ( /opt en el caso de cromo) y luego moverlo a mano.

Es los scripts postrm / prerm llamando "xdg-desktop-menu –uninstall" que son el culpable, es decir

 "$XDG_DESKTOP_MENU" uninstall --mode system /usr/local/share/applications/customthingy.desktop 

Esto borrará el file .desktop justo antes de que la invocación postinst de xdg-desktop-menu intente usarlo. Muy agradable.

Hablando de los google-cromo debs, también incluyen esta estrofa en la parte superior de su script prerm:

 action="$1" if [ "$2" = "in-favour" ]; then # Treat conflict remove as an upgrade. action="upgrade" fi # Don't clean-up just for an upgrade.` if [ "$action" = "upgrade" ] ; then exit 0 fi 

Este es un enfoque pesado para arreglar el problema, pero parece estar haciendo el truco aquí (y para el poderoso Goog también).

Pablo

  • ¿Compromiso entre packages de PHP frescos y seguros en serveres de producción?
  • ¿Cómo instalar packages en Linux o Solaris en routes no pnetworkingeterminadas?
  • convención de la versión de packages de debian
  • ¿Es "yum groupinstall" compatible con Red Hat Network?
  • Instalación de packages CentOS en Fedora desde el repository
  • Paquete de fijación en Debian lenny
  • ¿Existen repositorys decentes para CentOS o Fedora?
  • ¿Cómo verificar con precisión si el package está instalado en yum?
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.