Apt

帶有安裝後指令和 .desktop 文件的 apt-get 的奇怪行為

  • January 6, 2012

我們在本地 Apt 儲存庫 (reprepro) 中有許多手工建構的(使用 fpm 和 jenkins).deb 文件。這些 .deb 包含一個 .desktop 文件,xdg-desktop 將在 post-inst 腳本中獲取該文件。

如果我們手動安裝 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. 是否可以安全地假設 post-inst 總是在安裝結束時發生,並且我們可以安全地假設所有文件都將在此時間點之前被提取?
  4. 我們在做一些非常奇怪的事情嗎?

我猜您postinst正在呼叫xdg-desktop-menu將桌面文件移入/usr/share/applications並更新 XDG 桌面數據庫。這是由 eg 完成的google-chrome-stable,但我無法理解為什麼(繼續閱讀)

如果您將桌面文件直接安裝到其中/usr/share/applications(通過 dpkg - 即,將文件放在那裡dh_install,例如,使得路徑中的路徑.deb只是/usr/share/applications),許多軟體包將自動“觸發”更新:特別是gnome-menusand desktop-file-utils,但也許其他(取決於精確的目標作業系統版本等)

至少在我的情況下,這些足以實現xdg-desktop-menu手動執行的效果(程序立即顯示在我的使用者菜單中)

我仍然不知道為什麼google-chrome-stable和其他(主要是第 3 方).deb將桌面文件運送到(在 chrome 的情況下)以外的其他地方,然後手動移動它。/usr/share/applications``/opt

引用自:https://serverfault.com/questions/346457