Cách sử dụng phiên bản gói tiêu chuẩn của riêng tôi


10

Tôi gặp phải sự cố với Nautilus mà tôi không tìm thấy giải pháp nào ngoài việc tải xuống mã nguồn, thực hiện một số thay đổi và tự biên dịch nó. Vì vậy, bây giờ tôi có hai phiên bản nautilus, phiên bản chính thức từ kho và của tôi với một vài thay đổi. Tôi muốn giữ cả hai.

Điều gì sẽ là một cách tốt để nói với các ứng dụng sử dụng phiên bản Nautilus được biên dịch của riêng tôi khi bắt đầu Nautilus từ trong ứng dụng? (ví dụ: mở thư mục Tải xuống bằng firefox)

Tôi đã tìm ra rằng các cuộc gọi firefox /usr/bin/nautilusđể tôi có thể thay thế nó bằng một liên kết tượng trưng đến chương trình của riêng tôi. Tuy nhiên, tôi tin rằng liên kết tượng trưng này sẽ bị ghi đè ngay khi tôi cài đặt bản cập nhật cho Nautilus. Tôi có thể làm gì khác không?

debian  apt 

1
Đưa phiên bản của bạn vào /usr/local/binkhông hoạt động? tức là firefox tìm kiếm của bạn $PATHvà tìm phiên bản trong /usr/bin, hoặc mã (hoặc công cụ mở xdg của bạn) có mã cứng /usr/bin/nautiluskhông? Cài đặt phiên bản của riêng bạn một cái gì đó trong / usr / local thường hoạt động.
Peter Cordes

Tôi đã thử điều này ngay bây giờ và nó không hoạt động. Tôi không biết firefox làm gì trong nội bộ, nhưng /usr/bin/nautilusdường như được mã hóa bằng cách nào đó. Nếu nó bị xóa, firefox không làm gì nữa khi tôi cố mở thư mục Tải xuống, mặc dù có một liên kết tượng trưng đến phiên bản nautilus của riêng tôi /usr/local/bin. $PATHBiến của tôi là/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Nếu bạn tò mò, bạn có thể chạy strace -f -efile,execve -o firefox_syscalls.txt firefoxđể xem ff làm gì. Nếu bạn tìm kiếm nhật ký nautilus, điều đó có thể cho bạn thấy một cái gì đó. (Điều đó -elọc hệ thống gọi execvevà mở tệp / đóng / tên đường dẫn, nếu không, nó sẽ là một lũ futexvà đọc / ghi ổ cắm cho X11).
Peter Cordes

Câu trả lời:


14

Tôi sẽ sửa phiên bản đóng gói của Nautilus, ban đầu có vẻ khó xử nhưng đủ dễ dàng - mặc dù nó không tồn tại trong việc nâng cấp gói nên nó đòi hỏi một số kỷ luật. (Xem câu trả lời của Wouter để biết chi tiết.)

Cách tiếp cận đơn giản nhất trong tình huống của bạn là thêm một trò chơi:

sudo dpkg-divert --divert /usr/bin/nautilus.original --rename /usr/bin/nautilus

Điều này sẽ hướng dẫn dpkgđổi tên /usr/bin/nautilusthành /usr/bin/nautilus.originalbất cứ khi nào một gói cố gắng cài đặt nó. Sau đó, bạn có thể thêm liên kết tượng trưng của riêng mình và nó sẽ không bị ảnh hưởng ngay cả khi gói Nautilus được nâng cấp. Để loại bỏ nó, hãy chạy

sudo dpkg-divert --rename --remove /usr/bin/nautilus

Bạn có thể áp dụng kỹ thuật tương tự cho bất kỳ tệp nào khác mà bạn cần thay thế theo cách tương tự, ngoài một số tệp cấu hình không được xử lý chính xác khi chuyển hướng.


7

Giải pháp dài hạn tốt nhất là liên hệ với các nhà phát triển nautilus và làm việc với họ trên một bản vá với mã nautilus chính thức, để một khi phiên bản cập nhật của nautilus chạm vào hệ thống của bạn, bạn sẽ không cần phải xử lý vấn đề này nữa.

Giả sử bạn đã làm điều đó, cho đến khi thay đổi nhỏ giọt xuống hệ thống của bạn, bạn vẫn sẽ cần phải giải quyết vấn đề muốn sử dụng phiên bản nautilus được vá của riêng bạn.

Cách dễ nhất là tạo ra một gói nautilus với bản vá của bạn đã được áp dụng và cài đặt nó theo cách mà nó sẽ không được nâng cấp tự động.

Trên Debian (theo các thẻ trong câu hỏi này bạn đang sử dụng), cách dễ nhất để thực hiện đó là:

apt-get install devscripts
apt-get build-dep nautilus # note, this also pulls in build-essential
apt-get source nautilus
cd nautilus-*
# apply your patch
dch -i
# Set the version number of the new changelog entry to something like x.y.z-a.local,
# where "x.y.z-a" is the version of the package as it existed prior to your patch,
# add a description of the change after the '*', then save and exit the editor
debuild -uc -us -i && sudo debi --upgrade
echo "nautilus hold" | sudo dpkg --set-selections

Điều này xây dựng một gói mới với bản vá của bạn, cài đặt nó và sau đó đánh dấu nó trong dpkg để nó không được cập nhật tự động nữa.

Lần tới khi một phiên bản cập nhật của gói sẽ được phát hành, apt sẽ thông báo cho bạn rằng có một phiên bản cập nhật, nhưng đang bị giữ lại. Sau đó, bạn cần phải làm lại ở trên.


apt-mark hold packagenamelà cách hiện đại để giữ một gói. (Tôi thậm chí làm của riêng tôi dpkg-hold/ dpkg-unholdscript trong dlocatesử dụng apt-markthay cho dpkg --set-selectionsphương pháp họ đã sử dụng trong nhiều năm. Các kịch bản là lỗi thời vì apt-mark nhưng tôi vẫn còn có các kịch bản khác mà gọi cho họ, và tháo gỡ chúng chỉ có thể phá vỡ kịch bản được viết bởi những người dùng khác của gói dlocate)
cas

Phần bị tạm dừng man apt-marknói The command is only a wrapper around dpkg --set-selections and the state is therefore maintained by dpkg(1) and not affected by the --file option, vì vậy tôi nghĩ đó là một vấn đề nhỏ ;-)
Wouter Verhelst
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.