У нас есть несколько собранных вручную (с fpm и jenkins) .deb файлов в локальном репозитории Apt (prespro). Эти .debs содержат файл .desktop, который будет подхвачен xdg-desktop в сценарии post-inst.
Если мы установим файл deb вручную, в новой системе все будет хорошо.
Если мы устанавливаем новую версию с помощью apt-get install, мы получаем эту ошибку
xdg-desktop-menu: file '/usr/local/share/applications/customthingy.desktop' does not exist
Если я загружаю файл deb с помощью apt-get install -d customthingy и запускаю
dpkg -i /var/cache/apt/archives/customthingy_2-r3_all.deb
Я получаю ту же xdg-desktop
ошибку, что и раньше. Так что это исключает проблему с apt.
Если я перечислю содержимое загруженного деба,
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
Там нет ошибки. Итак .. Вопросы таковы:
- Это ожидаемое поведение или ошибка в apt / dpkg?
- Есть ли у нас неправильно сформированный пакет с customthingy.deb, который мешает запуску повторной установки в будущем?
- Безопасно ли предполагать, что post-inst всегда будет происходить в самом конце установки, и мы можем с уверенностью предположить, что все файлы будут извлечены до этого момента времени?
- Мы делаем что-то странное?
apt
package-management
dpkg
Том О'Коннор
источник
источник
dpkg -D101 -i <package>
(или дажеdpkg -D1101
) какие-либо разные результаты в каждом сценарии? Это может привести к другому порядку исполнения.postinst
?Ответы:
Я предполагаю, что вы
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
, возможно, другие (в зависимости от конкретной целевой версии ОС и т. д.)По крайней мере, в моем случае этого достаточно, чтобы добиться того, что бы выполнялся
xdg-desktop-menu
вручную (программа сразу появляется в моих пользовательских меню)Я все еще в неведении относительно того , почему
google-chrome-stable
и другие ( в основном третья сторона).deb
S корабль рабочего стола файл в где - нибудь другой , чем/usr/share/applications
(/opt
в случае хром) , и затем переместить его руку.источник
postinst
. Это говорит о том, что я угадал правильно. До сих пор не знаю, почему такpostinst
происходит, но, пожалуйста, попробуйте и посмотрите, сможете ли вы изменить порядок вещей, как я описал, чтобы посмотреть, решит ли это ваши проблемы.Error on file "/usr/local/share/applications/silhouettefx-silhouette.desktop": No such file or directory
которая указывает, что это все еще может быть проблемой prerm/usr/share/applications
, вам вообще не нуженpostinst
(или эквивалентныйprerm
фрагмент) - попробуйте это.Именно сценарии postrm / prerm, вызывающие "xdg-desktop-menu --uninstall", являются виновниками, т.е.
Это приведет к удалению файла .desktop непосредственно перед попыткой его использования после вызова xdg-desktop-menu для postinst. Очень хорошо.
Говоря о Google Chrome, они также включают эту строфу в начале своего сценария prerm:
Это неуклюжий подход к решению проблемы, но, похоже, он делает свое дело здесь (и для могучего Гуга тоже).
Павел
источник