ローカルのAptリポジトリ(reprepro)には、多数の手作り(fpmおよびjenkinsを使用)の.debファイルがあります。これらの.debsには、post-instスクリプトでxdg-desktopによって取得される.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
エラーはありません。だから..質問はこれらです:
あなたのpostinst
がxdg-desktop-menu
を呼び出して、デスクトップファイルを/usr/share/applications
に移動し、XDGデスクトップデータベースを更新していると思います。これは、例えばによって行われます。 google-chrome-stable
、しかし私は理由を理解することはできません(続きを読む)
代わりにデスクトップファイルを/usr/share/applications
に直接インストールする場合(dpkgを介して—つまり、ファイルをdh_install
を介してそこに配置し、.deb
のパスが/usr/share/applications
になるようにする)、多くのパッケージが自動的に更新を「トリガー」します。 gnome-menus
とdesktop-file-utils
ですが、おそらく他のものです(正確なターゲットOSバージョンなどによって異なります)
少なくとも私の場合、これらはxdg-desktop-menu
を手動で実行することを達成するのに十分です(プログラムはすぐに私のユーザーメニューに表示されます)
google-chrome-stable
と他の(主にサードパーティの).deb
sがデスクトップファイルを/usr/share/applications
(Chromeの/opt
)以外の場所otherに出荷する理由についてはまだ暗闇の中にいますケース)そしてそれを手で動かします。
原因となっているのは、「xdg-desktop-menu--uninstall」を呼び出すpostrm/prermスクリプトです。
"$XDG_DESKTOP_MENU" uninstall --mode system /usr/local/share/applications/customthingy.desktop
これにより、xdg-desktop-menuのpostinst呼び出しが.desktopファイルを使用しようとする直前に.desktopファイルが削除されます。非常に素晴らしい。
Google-chrome debsと言えば、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
これは問題を解決するための手間のかかるアプローチですが、ここで(そして強力なグーグルにとっても)トリックを行っているようです。
ポール