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-desktop
kesalahan 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:
- Apakah perilaku yang diharapkan ini, atau bug di apt / dpkg?
- Apakah kita memiliki paket cacat dengan customthingy.deb yang mencegah menjalankan instalasi ulang di masa depan?
- 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?
- Apakah kita melakukan sesuatu yang sangat aneh?
sumber
dpkg -D101 -i <package>
(atau bahkandpkg -D1101
) menghasilkan hasil yang berbeda dalam setiap skenario? Mungkin memunculkan urutan eksekusi yang berbeda.postinst
?Jawaban:
Saya menduga
postinst
panggilan Andaxdg-desktop-menu
untuk memindahkan file desktop ke/usr/share/applications
dan memperbarui database desktop XDG. Ini dilakukan oleh eggoogle-chrome-stable
, tetapi saya tidak dapat mengerti mengapa (baca terus)Jika Anda menginstal file desktop langsung ke
/usr/share/applications
gantinya (melalui dpkg - yaitu, letakkan file di sana melaluidh_install
misalnya, sehingga jalan di.deb
adil/usr/share/applications
), sejumlah paket akan secara otomatis 'memicu' pembaruan: terutamagnome-menus
dandesktop-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-menu
dengan tangan (program segera muncul di menu pengguna saya)Aku masih dalam kegelapan mengapa
google-chrome-stable
dan lainnya (terutama pihak ke-3).deb
mengirim file desktop ke tempat lain selain/usr/share/applications
(/opt
dalam kasus chrome) dan kemudian memindahkannya dengan tangan.sumber
postinst
. Itu sepertinya menyarankan saya menebak dengan benar. Masih tidak tahu mengapapostinst
tidak 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.Error on file "/usr/local/share/applications/silhouettefx-silhouette.desktop": No such file or directory
menunjukkan bahwa ini mungkin masih merupakan masalah prerm/usr/share/applications
, Anda tidak perlupostinst
sama sekali (atauprerm
cuplikan yang setara ) - silakan coba itu.Script postrm / prerm yang memanggil "xdg-desktop-menu --uninstall 'yang menjadi penyebabnya, yaitu
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:
Ini adalah pendekatan yang sulit untuk memperbaiki masalah tetapi tampaknya melakukan trik di sini (dan juga untuk Goog yang perkasa).
Paul
sumber