带有后指令的apt-get和.desktop文件的奇怪行为


8

我们在本地Apt存储库(reprepro)中有许多手工构建(带有fpm和jenkins)的.deb文件。这些.deb包含一个.desktop文件,该文件将由xdg-desktop在安装后脚本中拾取。

如果我们手动在新系统上安装deb文件,则一切正常。

如果我们使用apt-get install安装新版本,则会出现此错误

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

如果我使用apt-get install -d customthingy下载deb文件,然后运行

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

我得到xdg-desktop和以前一样的错误。这样就排除了apt的问题。

如果我列出了下载的deb的内容,

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

您可以看到该文件存在。

但是..如果在重新安装之前清除,

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 ...

然后

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) ...

编辑: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

没有错 所以..问题是这些:

  1. 这是预期的行为,还是apt / dpkg中的错误?
  2. 我们是否具有customthingy.deb的格式错误的软件包,导致以后无法进行重新安装?
  3. 是否可以安全地假定后插入总是在安装结束时发生,并且我们可以安全地假定所有文件都将在此时间点之前被提取出来?
  4. 我们正在做一些奇怪的事情吗?

1
因此,关键的区别在于安装新副本和升级现有副本之间。在每种情况下dpkg -D101 -i <package>(或什至dpkg -D1101)是否产生任何不同的结果?它可能会抛出不同的执行顺序。
SmallClanger 2012年

您能提供您的副本postinst吗?
2012年

@jmtd查看最新编辑。
汤姆·奥康纳

Answers:


4

我猜您postinst正在打电话xdg-desktop-menu将桌面文件移入/usr/share/applications并更新XDG桌面数据库。这是通过例如来完成的google-chrome-stable,但是我无法理解为什么(继续读)

如果直接安装在桌面文件导入到/usr/share/applications替代(通过dpkg的-那就是,那里的文件通过dh_install例如,使得在路径.deb就是/usr/share/applications),许多包就会自动“触发”的更新:特别是gnome-menusdesktop-file-utils,但也许其他(取决于精确的目标操作系统版本等)

至少就我而言,这些足以实现xdg-desktop-menu手动运行(程序立即显示在我的用户菜单中)

我仍然在黑暗中,为什么google-chrome-stable和其他(主要是第三方).deb的船在桌面文件到某处其他/usr/share/applications/opt在Chrome的情况下),然后通过手移动。


我在提供的最新编辑(在撰写本文时)之前发布了此内容postinst。这似乎表明我猜对了。仍然不知道为什么这样postinst做,但是请尝试看看是否可以按照我的描述重新安排工作,看它是否可以解决您的问题。
2012年

我修改了postinst脚本以使用desktop-file-install ..并收到此错误,Error on file "/usr/local/share/applications/silhouettefx-silhouette.desktop": No such file or directory这表明它仍然可能是准问题
Tom O'Connor

1
如果将桌面文件放入/usr/share/applications,则根本不需要postinst(或等效的prerm代码段)-请尝试这样做。
2012年

哦,为什么不呢。
汤姆·奥康纳

1
我很高兴您能接受排序,为悬赏而欢呼:-)
jmtd 2012年

2

罪魁祸首是调用“ xdg-desktop-menu --uninstall”的postrm / prerm脚本,即

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

这将在xdg-desktop-menu的postinst调用尝试使用它之前删除.desktop文件。非常好。

说到google-chrome deb,它们在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

这是解决问题的一种严厉方法,但似乎可以解决问题(对于强大的Goog来说)。

保罗


嗯 我真的希望现在有这样一个很好的理由,让
丑陋的人

您是对的-我刚刚尝试了上述方法,效果更好。有人应该弄清铬的窥视现象:D
Paul Nendick 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.