Perilaku aneh apt-get dengan instruksi post-inst, dan file .desktop

8

Kami memiliki sejumlah file .deb buatan tangan (dengan fpm dan jenkins) dalam repositori Apt lokal (reprepro). Deb. Ini berisi file .desktop yang akan diambil oleh xdg-desktop dalam skrip post-inst.

Jika kita menginstal file deb dengan tangan, pada sistem baru, semuanya baik-baik saja.

Jika kami memasang versi baru dengan apt-get install, kami mendapatkan kesalahan ini

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

Jika saya mengunduh file deb dengan apt-get install -d customthingy, dan jalankan

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

Saya mendapatkan xdg-desktopkesalahan yang sama seperti sebelumnya. Sehingga mengesampingkan masalah dengan apt.

Jika saya daftar isi deb yang diunduh,

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

Anda dapat melihat file tersebut ada.

Namun .. Jika kita membersihkan sebelum menginstal ulang,

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

Lalu

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

EDIT: Isi skrip 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

Tidak ada kesalahan. Jadi .. Pertanyaannya adalah ini:

  1. Apakah perilaku yang diharapkan ini, atau bug di apt / dpkg?
  2. Apakah kita memiliki paket cacat dengan customthingy.deb yang mencegah menjalankan instalasi ulang di masa depan?
  3. Apakah aman untuk mengasumsikan bahwa post-inst akan selalu terjadi pada akhir instalasi, dan kita dapat dengan aman berasumsi bahwa semua file akan diekstraksi sebelum titik waktu ini?
  4. Apakah kita melakukan sesuatu yang sangat aneh?
Tom O'Connor
sumber
1
Jadi perbedaan krusial adalah antara menginstal salinan baru dan memutakhirkan yang sudah ada. Apakah dpkg -D101 -i <package>(atau bahkan dpkg -D1101) menghasilkan hasil yang berbeda dalam setiap skenario? Mungkin memunculkan urutan eksekusi yang berbeda.
SmallClanger
Apakah Anda dapat memberikan salinan Anda postinst?
jmtd
@ jmtd lihat hasil edit terbaru.
Tom O'Connor

Jawaban:

4

Saya menduga postinstpanggilan Anda xdg-desktop-menuuntuk memindahkan file desktop ke /usr/share/applicationsdan memperbarui database desktop XDG. Ini dilakukan oleh eg google-chrome-stable, tetapi saya tidak dapat mengerti mengapa (baca terus)

Jika Anda menginstal file desktop langsung ke /usr/share/applicationsgantinya (melalui dpkg - yaitu, letakkan file di sana melalui dh_installmisalnya, sehingga jalan di .debadil /usr/share/applications), sejumlah paket akan secara otomatis 'memicu' pembaruan: terutama gnome-menusdan desktop-file-utils, tapi mungkin lainnya (tergantung pada versi OS target yang tepat, dll.)

Setidaknya dalam kasus saya, ini sudah cukup untuk mencapai apa yang akan dijalankan xdg-desktop-menudengan tangan (program segera muncul di menu pengguna saya)

Aku masih dalam kegelapan mengapa google-chrome-stabledan lainnya (terutama pihak ke-3) .debmengirim file desktop ke tempat lain selain /usr/share/applications( /optdalam kasus chrome) dan kemudian memindahkannya dengan tangan.

jmtd
sumber
Saya memposting ini sebelum edit terakhir (pada saat penulisan) yang disediakan postinst. Itu sepertinya menyarankan saya menebak dengan benar. Masih tidak tahu mengapa postinsttidak seperti itu, tapi tolong coba dan lihat apakah Anda dapat mengatur ulang hal-hal seperti yang saya jelaskan, untuk melihat apakah itu menyelesaikan masalah Anda.
jmtd
Saya memodifikasi skrip postinst untuk menggunakan desktop-file-install .. dan malah mendapatkan kesalahan ini. Ini Error on file "/usr/local/share/applications/silhouettefx-silhouette.desktop": No such file or directorymenunjukkan bahwa ini mungkin masih merupakan masalah prerm
Tom O'Connor
1
Jika Anda memasukkan file desktop ke dalamnya /usr/share/applications, Anda tidak perlu postinstsama sekali (atau prermcuplikan yang setara ) - silakan coba itu.
jmtd
Oh well, kenapa tidak.
Tom O'Connor
1
Saya senang Anda disortir, sorakan untuk karunia :-)
jmtd
2

Script postrm / prerm yang memanggil "xdg-desktop-menu --uninstall 'yang menjadi penyebabnya, yaitu

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

Itu akan menghapus file .desktop tepat sebelum permohonan xdg-desktop-menu mencoba untuk menggunakannya. Sangat bagus.

Berbicara tentang utang google-chrome, mereka juga menyertakan bait ini di bagian atas skrip prerm mereka:

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

Ini adalah pendekatan yang sulit untuk memperbaiki masalah tetapi tampaknya melakukan trik di sini (dan juga untuk Goog yang perkasa).

Paul

Paul Nendick
sumber
Urgh. Saya sangat berharap sekarang ada alasan yang baik untuk melakukannya dengan cara ini, kludges terus mendapatkan lebih mengerikan :-)
jmtd
Anda sangat benar - saya baru saja mencoba cara Anda yang dijelaskan di atas dan itu jauh lebih baik. Seseorang harus memilah kromium peeps: D
Paul Nendick