Làm cách nào để cài đặt một gói duy nhất từ ​​kiểm tra Debian hoặc không ổn định khi ổn định?


41

Tôi muốn cài đặt một gói duy nhất (và các phụ thuộc của nó, nhưng chỉ ở mức độ không thỏa đáng trong Wheezy) từ Debian Jessie trên hệ thống Wheezy của tôi, mà không nâng cấp "mọi thứ và bồn rửa trong bếp" lên các phiên bản của Jessie. Cụ thể, tôi muốn cài đặt kpcli , được đóng gói sẵn trong Jessie nhưng không có trong Wheezy.

Tất cả mọi thứ tôi tìm thấy chỉ ra rằng tôi nên thêm kho lưu trữ của Jessie vào danh sách nguồn của mình, đặt ghim để giữ mọi thứ ở mức khò khè và chỉ lấy gói duy nhất từ ​​jessie, và nó sẽ rơi vào vị trí. Tuy nhiên, nó không rơi vào vị trí của tôi. Nếu tôi tạo /etc/apt.d/source.list.d/jessie.list với nội dung sau:

deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main

và sau đó tạo /etc/apt/preferences.d/jessie với:

Package: *
Pin: release a=wheezy
Pin-Priority: 1001

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450

và chạy apt-get -u updatetheo sau apt-get -u install kpcli/jessie, sau đó tôi mong đợi apt-get sẽ lấy kpcli và có thể một số ít các gói khác từ Jessie, và để phần còn lại của hệ thống đã cài đặt của tôi không bị ảnh hưởng. (Hệ thống của tôi là bản cài đặt hoàn toàn cập nhật của Wheezy.) Ngoài ra, nếu tôi có mức độ ưu tiên pin quá thấp, tôi hy vọng nó sẽ không làm gì cả. Thay vào đó, trên hệ thống của tôi, apt-get muốn nâng cấp hàng trăm gói.

Gì, chính xác, là cần thiết để cài đặt chỉ này một gói duy nhất của một phiên bản Jessie khi rời khỏi phần còn lại của hệ thống Wheezy của tôi bị ảnh hưởng?

Lưu ý rằng trong trường hợp cụ thể này, phần mềm thực sự được viết bằng Perl nên không có phần tổng hợp thành nhị phân hoặc bất cứ thứ gì tương tự; tuy nhiên, có một số ít các phụ thuộc mô-đun Perl. Do đó, một giải pháp thay thế khả thi sẽ là cài đặt .deb (được tải xuống thủ công) bằng cách sử dụng thứ gì đó chỉ (1) cho phép chỉ định một kho lưu trữ .deb cục bộ duy nhất được cài đặt, như dpkg -ivà (2) xử lý các phụ thuộc theo cách thông minh , mà đồng bằng dpkg -ikhông. Tuy nhiên, đối với tất cả các tìm kiếm tôi đã thực hiện trong nhiều lần và không đưa ra được hướng dẫn đơn giản để thực hiện việc này, một giải pháp chung (cũng hoạt động cho các gói nhị phân, được biên dịch) sẽ rất tuyệt .


4
Cách thông thường để xử lý việc này là nhập lại - xây dựng lại gói từ các nguồn Debian trên Wheezy. Gói bạn đang sử dụng dường như là perl (hoặc ít nhất là phụ thuộc vào nó), vì vậy có lẽ không khó để backport. Nếu bạn muốn biết thêm chi tiết, xin vui lòng nói như vậy. Tôi có thể có thể cung cấp một hướng dẫn nếu bạn thực sự cần nó.
Faheem Mitha

Câu trả lời:


15

Đối với mỗi mục (ổn định, kiểm tra, không ổn định), bạn có mức ưu tiên pin 500. Bạn không nên sử dụng pin> 1000. Tôi chỉ sử dụng 1001 khi tôi muốn hạ cấp thứ gì đó. Tôi có các mục kiểm tra + sid + thử nghiệm được chỉ định trong /etc/apt/sources.list/etc/apt/preferencestệp sau :

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

Giá trị 500 được mặc định cho không ổn định. Vì vậy, hãy thử kiểm tra iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

Vì vậy, nếu tôi cố gắng cài đặt iceweasel, nó sẽ được tải xuống từ nhánh thử nghiệm vì nó có mức độ ưu tiên cao nhất.

Cố gắng thay đổi các ưu tiên thành:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910

sudo apt-get -u install kpcli/jessievẫn cho tôi 316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.với các ưu tiên đề xuất của bạn. Nếu tôi thực hiện apt-cache policy perl(một trong các gói mà nó muốn nâng cấp), nó hiển thị 5.18.1-5 với tư cách là ứng cử viên ở mức ưu tiên 500 và đã cài đặt 5.14.2-21 + deb7u1 ở mức ưu tiên 500. Dù sao đi nữa, nó trông giống như, vì bất kỳ lý do gì, apt không nhận các ưu tiên ...
CVn

OK, tôi có vài thứ. Có vẻ như mánh khóe là sử dụng Package: kpcli*(chứ không phải Package: kpcli) và sau đó là Package: * Pin: release o=Debian Pin-Priority: -10phần cuối. Sau đó, tất nhiên có những phụ thuộc cứng dẫn đến các phiên bản của Perl chỉ có sẵn trong Jessie, do đó cần một libc6 mới hơn! Thành thật tôi không định đi theo con đường đó, nhưng điều này ít nhất đã mang lại cho tôi kết quả mà tôi đã đạt được. Cảm ơn bạn!
một CVn

25

Thực sự có một cách để làm điều đó mà không cần sử dụng ghim / ưu tiên nào cả. Thay vào đó, bạn có thể chỉ định bản phát hành mặc định bạn sẽ cài đặt các gói từ đâu, sau đó sẽ được sử dụng trừ khi được chỉ định khác bằng cách sử dụng tham số phát hành mục tiêu. Điều này hoạt động theo cách tương tự nếu bạn chỉ muốn cài đặt các gói được chọn từ ví dụ như backport.

Tôi sẽ trình bày điều này để cài đặt các gói từ Stretch vào Jessie, vì đây là những gói ổn định / thử nghiệm hiện tại, nhưng nó hoạt động giống như cách cài đặt các gói của Jessie trong Wheezy như yêu cầu ban đầu.

Đầu tiên, thêm căng như kho lưu trữ, ví dụ /etc/apt/sources.list.d/stretch.list:

deb http://ftp.debian.org/debian stretch main

Sau đó, để đặt bản phát hành mặc định, hãy tạo một tệp như /etc/apt/apt.conf.d/default-releasechứa:

APT::Default-Release "jessie";

(Trong Wheezy, tôi nghĩ apt.conf.dkhông tồn tại và bạn cần đưa đoạn trích đó vào /etc/apt/apt.conf).

Sau đó, cài đặt một gói từ thử nghiệm cũng đơn giản như aptitude -t stretch install kpclikhông cần bạn phải lo lắng về việc ưu tiên ghim.

Lưu ý: @amc chỉ ra trong các ý kiến rằng nếu bạn sử dụng aptthay vì aptitude, bạn phải sử dụng "stable"như Default-Releasethay vì "jessie". Cảm ơn bạn! (Tất nhiên, bạn cũng có thể sử dụng aptitudevới cài đặt đó.)


Sồi này trông giống như một cách thực sự khéo léo để làm điều này. Tại sao điều này không được chấp nhận chính thức ??
JamesTheAwgieDude

1
Tôi nhận đượcThe value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
Steven Penny

1
bạn cần sử dụng "ổn định" / "thử nghiệm" / vv thay vì "jessie" / "kéo dài" cho bản phát hành mặc định và khi sử dụng apt
amc

6

Pin: release a=wheezynên Pin: release n=wheezy, có thể.

Từ trang người đàn ông :

Bản ghi sau chỉ định mức độ ưu tiên cao cho tất cả các phiên bản gói thuộc bất kỳ phân phối nào có Tên mã là "jessie".

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

Vậy là đúng!


3
Điều này sẽ không cài đặt TẤT CẢ các gói từ jessy?
rubo77
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.