Hành vi kỳ quặc của apt-get với các hướng dẫn sau inst và các tệp .desktop


8

Chúng tôi có một số tệp .deb được xây dựng bằng tay (với fpm và jenkins) trong kho lưu trữ Apt cục bộ (reprepro). Các .deb này chứa tệp .desktop sẽ được xdg-desktop chọn trong tập lệnh post-inst.

Nếu chúng ta cài đặt tệp deb bằng tay, trên một hệ thống mới, mọi thứ đều ổn.

Nếu chúng tôi cài đặt phiên bản mới với cài đặt apt-get, chúng tôi sẽ gặp lỗi này

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

Nếu tôi tải xuống tệp gỡ lỗi với apt-get install -d customthingy và chạy

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

Tôi nhận được, xdg-desktoplỗi như trước. Vì vậy, quy tắc ra một vấn đề với apt.

Nếu tôi liệt kê nội dung của bản tải xuống

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

Bạn có thể thấy các tập tin tồn tại.

Tuy nhiên .. Nếu chúng tôi thanh lọc trước khi cài đặt lại,

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

Và sau đó

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: Nội dung của kịch bản 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

Không có lỗi. Vì vậy, các câu hỏi là:

  1. Đây có phải là hành vi dự kiến, hoặc một lỗi trong apt / dpkg?
  2. Chúng ta có gói không đúng định dạng với customthingy.deb đang ngăn không cho cài đặt lại trong tương lai chạy không?
  3. Có an toàn không khi cho rằng post-inst sẽ luôn xảy ra vào cuối quá trình cài đặt và chúng ta có thể giả định một cách an toàn rằng tất cả các tệp sẽ được trích xuất trước thời điểm này?
  4. Có phải chúng ta đang làm một cái gì đó ồ ạt kỳ lạ?

1
Vì vậy, sự khác biệt quan trọng là giữa việc cài đặt một bản sao mới và nâng cấp một bản sao hiện có. Có dpkg -D101 -i <package>(hoặc thậm chí dpkg -D1101) tạo ra bất kỳ kết quả khác nhau trong mỗi kịch bản? Nó có thể đưa ra một thứ tự thực hiện khác nhau.
SmallClanger

Bạn có thể cung cấp một bản sao của bạn postinst?
jmtd

@jmtd xem chỉnh sửa mới nhất.
Tom O'Connor

Câu trả lời:


4

Tôi đoán bạn postinstđang gọi xdg-desktop-menuđể chuyển tệp máy tính để bàn vào /usr/share/applicationsvà cập nhật cơ sở dữ liệu máy tính để bàn XDG. Điều này được thực hiện bằng ví dụ google-chrome-stable, nhưng tôi không thể hiểu tại sao (đọc tiếp)

Nếu bạn cài đặt các tập tin máy tính để bàn trực tiếp vào /usr/share/applicationsthay (thông qua dpkg - có nghĩa là, đặt các tập tin có qua dh_installví dụ, như vậy mà đường dẫn trong .debchỉ là /usr/share/applications), một số gói sẽ tự động 'kích hoạt' cập nhật: đáng chú ý gnome-menusdesktop-file-utils, nhưng có lẽ những người khác (tùy thuộc vào phiên bản hệ điều hành đích chính xác, v.v.)

Ít nhất trong trường hợp của tôi, những điều này là đủ để đạt được những gì chạy xdg-desktop-menubằng tay (chương trình sẽ hiển thị trong menu người dùng của tôi ngay lập tức)

Tôi vẫn còn chìm trong bóng tối vì sao google-chrome-stablevà bên kia (chủ yếu là bên thứ 3) .debgửi tập tin máy tính để bàn vào một nơi khác ngoài /usr/share/applications( /opttrong trường hợp của chrome) và sau đó di chuyển nó bằng tay.


Tôi đã đăng bài này trước lần chỉnh sửa mới nhất (tại thời điểm viết bài) cung cấp postinst. Điều đó dường như cho thấy tôi đã đoán đúng. Vẫn không biết tại sao lại postinstnhư vậy, nhưng vui lòng thử xem bạn có thể sắp xếp lại mọi thứ như tôi đã mô tả hay không, để xem liệu nó có giải quyết được vấn đề của bạn không.
jmtd

Tôi đã sửa đổi tập lệnh postinst để sử dụng cài đặt tập tin máy tính để bàn .. và đã gặp lỗi này thay vào đó Error on file "/usr/local/share/applications/silhouettefx-silhouette.desktop": No such file or directoryĐiều đó cho thấy rằng nó vẫn có thể là một vấn đề khó khăn
Tom O'Connor

1
Nếu bạn đặt tệp máy tính để bàn vào /usr/share/applications, bạn hoàn toàn không cần postinst(hoặc prermđoạn mã tương đương ) - vui lòng thử điều đó.
jmtd

Oh tốt, tại sao không.
Tom O'Connor

1
Tôi rất vui vì bạn đã được sắp xếp, chúc mừng tiền thưởng :-)
jmtd

2

Đó là các tập lệnh postrm / prerm gọi "xdg-desktop-menu --uninstall 'là thủ phạm, tức là

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

Điều đó sẽ xóa tệp .desktop ngay trước khi yêu cầu postdst của xdg-desktop-menu cố gắng sử dụng nó. Rất đẹp.

Nói về các cuộc tranh luận về google-chrome, họ cũng đưa đoạn thơ này vào đầu tập lệnh prerm của họ:

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

Đây là một cách tiếp cận nặng nề để khắc phục vấn đề nhưng dường như đang thực hiện thủ thuật ở đây (và đối với Goog hùng mạnh cũng vậy).

Paul


Urgh. Tôi thực sự hy vọng bây giờ có một lý do chính đáng để làm theo cách này, các hạt nhân tiếp tục trở nên khủng khiếp hơn :-)
jmtd

Bạn nói rất đúng - Tôi vừa thử theo cách của bạn được mô tả ở trên và nó tốt hơn nhiều. Ai đó nên sắp xếp các peeps crom: D
Paul Nendick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.