Temos vários arquivos .deb criados à mão (com fpm e jenkins) em um repositório local do Apt (reprepro). Esses .debs contêm um arquivo .desktop que será capturado pelo xdg-desktop em um script pós-inst.
Se instalarmos o arquivo deb manualmente, em um novo sistema, tudo estará bem.
Se instalarmos uma nova versão com o apt-get install, obteremos este erro
xdg-desktop-menu: file '/usr/local/share/applications/customthingy.desktop' does not exist
Se eu baixar o arquivo deb com o apt-get install -d customthingy, e execute
dpkg -i /var/cache/apt/archives/customthingy_2-r3_all.deb
Eu recebo o mesmo xdg-desktop
erro , como antes. Portanto, isso exclui um problema com o apt.
Se eu listar o conteúdo da deb baixada,
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
Você pode ver o arquivo existe.
No entanto .. Se limparmos 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 ...
E depois
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: Conteúdo do 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
Não há erro. Então .. As perguntas são estas:
- Esse comportamento é esperado ou é um bug no apt / dpkg?
- Temos um pacote malformado com customthingy.deb que impede que uma futura reinstalação funcione?
- É seguro supor que o pós-inst sempre ocorra no final da instalação e podemos assumir com segurança que todos os arquivos foram extraídos antes desse momento?
- Estamos fazendo algo massivamente estranho?
postinst
?
dpkg -D101 -i <package>
(ou mesmodpkg -D1101
) produzir quaisquer resultados diferentes em cada cenário? Pode gerar uma ordem de execução diferente.