使用post-inst指令和.desktop文件进行apt-get的奇怪行为

Modified on: Mon, 07 Oct 2019 20:40:02 +0800

我们在本地Apt存储库(reprepro)中有许多手工构建的(使用fpm和jenkins).deb文件。
这些.debs包含一个.desktop文件,该文件将由post-inst脚本中的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. 我们是否有一个包含customthing.deb的格式错误的软件包阻止了将来的重新安装运行?
  3. 可以安全地假设post-inst总是在安装结束时发生,我们可以放心地假设所有文件都会在此时间点之前被提取出来吗?
  4. 我们在做一些非常奇怪的事情吗?
  5. 醇>
作者:,Tom O'Connor

最佳答案

我猜你的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(在chrome的情况下为/opt),然后手动移动。

作者:jmtd

相关问答

添加新评论