Làm thế nào tôi có thể giữ hai phiên bản của cùng một gói trong archlinux?


8

Tôi đang chạy Archlinux. Gần đây, một trong những gói có tên icuđã được cập nhật; tuy nhiên, Firefox phụ thuộc libicuuc.so.56, trong khi R phụ thuộc vào libicuuc.so.55. Làm thế nào tôi có thể giải quyết vấn đề này?

Lưu ý: gói R được xây dựng dựa trên Intel MKLlibiary, vì vậy nó không hoạt động trên phiên bản phụ thuộc mới. Tôi đã cố gắng xây dựng lại R - nó vẫn phụ thuộc vào cái cũlibicuuc.so.55


2
Những điều như vậy không nên xảy ra với repo chính thức. Chỉ cần bạn chưa cập nhật đầy đủ, vì các cập nhật một phần không được hỗ trợ bởi bản phát hành archlinux. Nếu nó thực sự như thế này (trên một hệ thống được cập nhật đầy đủ), bạn nên báo lỗi.
bvolkmer

Câu trả lời:


6

Tôi giả sử bạn muốn chạy một tệp thực thi cụ thể với thư viện cũ. Hãy gọi cho thực thi myprogram.

Nếu bạn đặt libicuuc.so.55trong một thư mục khác, chẳng hạn như /opt/oldlibs/libicuuc.so.55có thể hướng dẫn myprogramsử dụng thư viện cũ với một lệnh như thế này:

LD_LIBRARY_PATH=/opt/oldlibs myprogram

Các tệp thư viện có thể được trích xuất từ ​​tệp gói (mà bạn có thể tìm thấy /var/cache/pacman/pkg).

Nếu điều này không giải quyết được vấn đề về cách bạn dự định sử dụng ứng dụng, bạn có thể xem xét việc chạy nó trong một chroot hoặc container thay thế.


1
Tôi có sự pha trộn kinh nghiệm giữa * BSD và Linux Tôi nghĩ hai lần giữa việc gọi nó là nhà tù hoặc chroot. Không phải là tên tù thực sự, và chroot lệnh để đạt được nó? Nếu không, câu trả lời tuyệt vời thưa ông.
Rui F Ribeiro

@RuiFRibeiro Tôi nghĩ "tù" là thuật ngữ phổ biến trên * BSD (và chúng hoạt động khác với chroots, vì chúng an toàn hơn), trong khi tôi nghĩ "chroot" được sử dụng phổ biến hơn trên Linux. Tôi tin rằng tương đương với các tù BSD trên Linux, bảo mật thông minh, sẽ là các Container của Linux. Cảm ơn các đầu vào.
Alexander

1
Cảm ơn bạn đã trả lời của bạn, mà làm việc. Tôi nên chỉ ra rằng tôi đưa /opt/oldlibs/vào /etc/ld.so.conf.d/R.conf. ( R.confTệp đã có sẵn, với Rđường dẫn lib tiêu chuẩn trong đó.)
Nick

0

kinh nghiệm của tôi với arch linux

systemctl start mongodb đưa ra lỗi bắt đầu quá trình

tôi chỉ cần nhấn tạp chí -xe để kiểm tra nhật ký hiện tại

nó hiển thị thiếu libboost_system.so.1.64.1 (cái cũ)

đó là một sumlink tôi giải quyết nó bằng cách sử dụng

readlink -f /lib/libboost_system.so.1.65.1  (new one)

readlink cho tôi biết điểm liên kết tới /usr/lib/libboost_system.so.1.60.1

tôi trích xuất boost-libs 1.64 từ / var / cache / pacman / pkg và dán tất cả các tập tin / lib vào / usr / lib cũng bỏ qua để ghi đè tập tin cũ

Điều này giải quyết tôi phá vỡ sự phụ thuộc công việc hơn nữa nếu không giải quyết làm cho một liên kết mất tích như

 ln -s /lib/libboost_system.so.1.64.1 /usr/lib/libboost_system.so.1.64.1 

kinh nghiệm đạt được

đừng tìm bản vá luôn sử dụng pacman -Suy && pacman -S pack_name để cài đặt bất cứ thứ gì. cập nhật một phần không được hỗ trợ (trong trường hợp vòm)

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.