Làm thế nào để chỉ cài đặt bản cập nhật từ một kho lưu trữ cụ thể?


39

Làm cách nào để giới hạn các bản cập nhật được cài đặt cho các bản cập nhật từ một bộ kho cụ thể? Đây có phải là ở tất cả có thể?


Bạn có muốn chỉ định repo trong thời gian chạy, hoặc nó nên là một thứ tĩnh hơn? Các hai câu trả lời dưới đây giả định lựa chọn thứ hai.
tshepang

Lý tưởng nhất là trong thời gian chạy. Các tùy chọn tĩnh là đủ mặc dù.
Ton van den Heuvel

2
Bạn hướng đến và sự giúp đỡ thực tế mà bạn đang yêu cầu là khác nhau.
Sundar

Câu trả lời:


29

Sử dụng ghim

Ghim là một quá trình cho phép bạn duy trì bản phát hành ổn định của Ubuntu (hoặc bất kỳ hệ thống debian nào khác) trong khi lấy các gói từ phiên bản mới hơn. - help.ubfox.com

Bạn có thể vô hiệu hóa cập nhật tự động từ các kho lưu trữ nhất định mà không xóa hoàn toàn chúng thông qua aptcác chính sách:

Để tắt cập nhật tự động khỏi kho lưu trữ repo, hãy thêm một tệp
/etc/apt/preferences.d/repocó nội dung sau:

Package: *
Pin: release n=repo
Pin-Priority: 50

Điều này sẽ cung cấp cho tất cả các gói từ kho lưu trữ này mức độ ưu tiên thấp hơn các gói đã cài đặt (có 100).

Để biết thêm thông tin man apt_preferenceshoặc kiểm tra Ubuntu Community Wiki .


3
Thật xấu hổ khi câu trả lời apt_preferences duy nhất là câu cuối cùng ...
Robert Siemer

Làm thế nào để tìm ra phiên bản nào từ repo nào?
Tối đa

2
@MaxN bạn thường sẽ tìm thấy thông tin đó bằng cách chạyapt-cache policy package-name
Anwar

Điều này sẽ không buộc một kho lưu trữ không được xem xét trong khi cập nhật. bởi vì release n=reposẽ không lưu trữ bất cứ ai
Anwar

35

Bạn có thể chỉ định một bản phát hành với -ttùy chọn. Ví dụ, tôi đã thêm kho lưu trữ sau /etc/apt/sources.listđể cài đặt bản phát hành mới nhất của Iceweasel:

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Như bạn biết có một gói tương tự iceweaseltrong kho lưu trữ Debian chính thức. Nếu tôi muốn cài đặt Iceweasel từ bản phát hành cụ thể này, tôi chạy:

apt-get install -t squeeze-backports iceweasel

từ trang hướng dẫn apt-get:

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

Tôi nghĩ rằng đây là một giải pháp tốt hơn.

CẬP NHẬT : Như @SuB đã đề cập trong bình luận, " -tchỉ định phát hành không phải tên kho lưu trữ. Không có tên kho lưu trữ trong Ubuntu (không giống như linux dựa trên RedHat như RHEL, Fedora, CentOS, ...)".


4
Như bạn thấy trong apt-gethướng dẫn, -tchỉ định phát hành không phải tên kho lưu trữ. Không có tên kho lưu trữ trong Ubuntu (không giống như linux dựa trên RedHat như RHEL, Fedora, CentOS, ...)
SuB

1
@SuB Vâng, bạn nói đúng! Tôi nhầm lẫn tên kho lưu trữ với phát hành!
vẽ tranh biếm họa

-t xeniallàm việc cho một gói duy nhất. nhưng tất cả các phụ thuộc của nó vẫn sẽ được lấy từ các gói cao hơn
Anwar

11

Câu trả lời ngắn

Bạn cần ghim các kho lưu trữ mà bạn không muốn cài đặt với mức độ ưu tiên dưới 100. Có nghĩa là (từ apt_preferencetrang man)

100 <= P <500
khiến phiên bản được cài đặt trừ khi có phiên bản thuộc về một số phân phối khác hoặc phiên bản đã cài đặt gần đây hơn

Và để chọn kho lưu trữ để ghim, bạn sẽ sử dụng các trường từ Releasetệp của kho lưu trữ . Chẳng hạn như archive, label, release, version, vv Bằng cách xác định các giá trị của các trường này, bạn có thể chính xác chọn một kho lưu trữ và gán ưu tiên yêu thích của bạn với nó. Kiểm tra trang apt_preference để biết thêm chi tiết.


Câu trả lời dài

Trước khi tiếp tục, chúng ta cần biết một số điều quan trọng về ghim. Những người bao gồm

  1. Các trường của Releasetệp và ánh xạ tới apt-cache policyđầu ra

  2. Định dạng của tệp ưu tiên apt

  3. Sử dụng Releasecác trường tệp để đặt mức độ ưu tiên

1. Các lĩnh vực của Releasetập tin và apt-cache policyđầu ra

Từ bài viết của Debian Wiki

  • Sự miêu tả
  • Nhãn
  • Gốc
  • Phiên bản
  • Suite
  • Tên mã
  • Các thành phần
  • Kiến trúc

Bạn sẽ thấy đầu ra từ apt-cache policynhư thế này

 500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
 release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64

Các giá trị trong các dòng này đến từ Releasecác tập tin.

  • Mô tả đặt mô tả cho một kho lưu trữ. Điều này không được hiển thị trong apt-cache policyđầu ra

  • Nhãn nó là nhãn của kho lưu trữ. Nhiều kho lưu trữ có nhãn trống. Nó được hiển thị trong l=<label>đầu ra.

  • Nguồn gốc này nói về nguồn gốc của kho lưu trữ. Kho lưu trữ Ubuntu chính thức có Ubuntugiá trị. Hiển thị như o=trong đầu ra

  • Phiên bản là phiên bản của một bản phân phối. Đó là 16.04 cho Xenial. Hiển thị như v=trong đầu ra

  • Suite giống như Lưu trữ . Từ wiki debian, đó là Tên của bản phân phối Debian, các gói trong thư mục này thuộc về (hoặc được thiết kế cho), tức là ổn định, thử nghiệm hoặc không ổn định. . Đối với Ubuntu, đây là release-updates, release-securityv.v. Ví dụ xenial-updates, xenial-security. Nó hiển thị trong đầu ra như a=xenial, a=xenial-security. PPA chỉ sử dụng tên phát hành cho điều này, đó là lý do tại sao nó sẽ không giúp ích nhiều trong Ghim.

  • Thành phần nói về điều cấp phép. Đó là main, multiverse, restricted, universetrong Ubuntu. Trong đầu ra, nó được hiển thị là c=mainhoặc c=restrictedvv. Hầu hết các PPA sử dụng maincho trường này, do đó, nó cũng không giúp ích gì cho việc ghim nhiều.

  • Kiến trúc là về kiến ​​trúc hệ điều hành. Hiển thị như b=i386hoặc b=amd64trong đầu ra

  • Tên mã là tên phát hành của bản phân phối. Cho 16.04 nó là xenial. Cho 14.04 nó là trusty. Hiển thị ở apt-cache policyđầu ra là n=xenialhoặc n=trusty. Nó giống nhau cho tất cả các kho lưu trữ cho một phân phối thường. Đó là lý do tại sao nó không giúp đỡ trong việc ghim nhiều.

Dòng khác trong apt-cache policyđầu ra bắt đầu bằng thông originbáo nguồn gốc Internet của kho lưu trữ. Nó cũng có thể được sử dụng trong ghim. Nhưng không nên trộn lẫn với trường Releasetập tin Origin. Đó là những khác nhau.

Chúng tôi sẽ sử dụng các giá trị này để ghim một kho lưu trữ.

Vậy, làm thế nào để chúng ta sử dụng ghim 1 để hạn chế kho lưu trữ?

Có một số cách để kiểm soát ghim và chỉ một tập hợp con nhỏ là có hiệu quả đối với Ubuntu. Một lời giải thích chi tiết là vượt quá phạm vi của câu trả lời mặc dù. Vui lòng tham khảo apt_preferenceman-page cho điều này.

2. Định dạng tệp pin

Các tệp ưu tiên pin hoặc apt nằm trong /etc/apt/preferences.dthư mục. Mỗi ghim chứa ba dòng.

  • Dòng đầu tiên bắt đầu bằng Package:và một tên gói được phân tách bằng dấu phẩy theo sau. Biểu thức thông thường và ảm đạm được cho phép

  • Dòng thứ hai bắt đầu bằng Pin:và nó được sử dụng để nhắm mục tiêu một tập hợp các gói.

    Nếu chúng tôi muốn ghim các gói từ xenialcao hơn xenial-updates, chúng tôi sẽ sử dụng release a=xenial.

    Nếu chúng tôi muốn ghim phiên bản 5.0, chúng tôi sẽ sử dụng version 5.0ở đây. Glob pattens được cho phép.

    Hoặc nếu chúng tôi muốn ghim các gói từ nguồn gốc http://archive.ubuntu.com, chúng tôi sẽ sử dụng origin "archive.ubuntu.com". Lưu ý, chúng tôi không viết http://giao thức ở đó.

  • Dòng thứ ba bắt đầu bằng Pin-Priority:và giá trị của nó là một con số. Điều này biểu thị mức độ ưu tiên của các mục tiêu ở trên.

3. Sử dụng Releasecác trường tệp để đặt mức độ ưu tiên

Đây là một ví dụ

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

Trong ví dụ này, các gói từ xenialtài liệu lưu trữ được ưu tiên cao hơn xenial-updatesxenial-security.

Sau khi ghim, chạy một apt-cache policy nautiluschương trình cho thấy nó thực sự đã ưu tiên cao hơn cho phiên bản thấp hơn từ xenialkho lưu trữ so với phiên bản cao hơn từ xenial-updateskho lưu trữ. Chú ý Candidate:dòng.

nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 100
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Nhưng, nếu chúng tôi muốn ưu tiên hơn các gói do PPA cung cấp, điều này sẽ không hoạt động. Bởi vì PPA sử dụng cùng tên lưu trữ xenialtheo mặc định. Vì vậy, việc chỉ định mức độ ưu tiên a=xenialcũng sẽ áp dụng cho các gói đó. Ví dụ: (sau khi kích hoạt PPA),

13:31 $ apt-cache policy nautilus
nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.5-0ubuntu1~xenial1
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 1001
        500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Bây giờ phiên bản ứng cử viên là từ một PPA. Cả hai gói từ xenialkho lưu trữ repo chính thức của Ubuntu và PPA đều có mức độ ưu tiên như nhau 1001, bởi vì cả hai gói này đều sử dụng cùng một giá trị Archivetrong tệp Phát hành. Để ghim thành công, chúng ta cần kết hợp nhiều trường hơn trong tệp Ghim.


Vài ví dụ

Ghim kho lưu trữ PPA

Để ghim các gói từ kho lưu trữ, chúng ta cần nhắm mục tiêu sử dụng thông tin được tìm thấy từ apt-cache policylệnh. Chúng tôi chỉ thấy rằng a=xenialsẽ không giúp xác định một kho lưu trữ. Chúng ta cần sử dụng nhiều trường cùng nhau bằng dấu phẩy trong tệp ưu tiên để nhắm mục tiêu chính xác vào kho lưu trữ.

Ví dụ: để ngăn chặn tất cả các gói từ http://ppa.launchpad.net/oibaf/graphics-drivers/ppa, chúng ta có thể sử dụng

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

Ở đây chúng tôi đang sử dụng giá trị tên mã cũng như Origingiá trị của PPA. (Mặc dù giá trị tên mã không thực sự cần thiết ở đây). Đôi khi kho lưu trữ có thể bỏ lỡ những giá trị này. Trong những trường hợp đó, một số kỹ thuật khác nên được sử dụng. Đầu ra của apt-cache policy libgl1-mesa-glxnó nói rằng nó hoạt động. Nó hạ mức độ ưu tiên của tất cả các gói của PPA này.

libgl1-mesa-glx:
  Installed: 12.1~git1608200730.16ef7a~gd~x
  Candidate: 12.1~git1608200730.16ef7a~gd~x
  Version table:
 *** 12.1~git1608200730.16ef7a~gd~x 100
        -10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     11.2.0-1ubuntu2.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     11.2.0-1ubuntu2 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

Bỏ qua thực tế rằng đó là ứng cử viên. Điều này xảy ra, bởi vì nó đã được cài đặt trong hệ thống của tôi . Kiểm tra mức độ ưu tiên ở bên phải

Ghim kho lưu trữ khi thiếu thông tin phát hành

Nếu chúng ta muốn ghim một kho lưu trữ mà thông tin phát hành bị thiếu, như kho này http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04, chúng ta phải sử dụng phương pháp khác. Vì không có kho lưu trữ nào khác sử dụng nguồn gốc đó, chúng tôi có thể sử dụng một cách an toàn originđể ghim kho lưu trữ này.

Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10

Lưu ý 1: Nguồn gốc này là nguồn gốc Internet, không phải nguồn gốc chỉ định Nhà cung cấp trong tệp Phát hành.

Lưu ý 2: Pin-Priority số có ý nghĩa đặc biệt. Kiểm tra apt_preferencetrang hướng dẫn để biết chi tiết.


7

Một lựa chọn thay thế dựa trên gui sẽ là mở trung tâm phần mềm và chọn chỉnh sửa> nguồn phần mềm ...

Nguồn phần mềm với tab phần mềm Ubuntu được chọn

Nguồn phần mềm với tab phần mềm khác được chọn

tất cả những gì bạn cần làm là bỏ chọn các kho lưu trữ mà bạn không muốn cập nhật.

Hi vọng điêu nay co ich


5

Lựa chọn rõ ràng là sửa đổi /etc/apt/sources.listvà nhận xét tất cả các kho lưu trữ khác, rồi chạy

apt-get update && apt-get upgrade && apt-get autoclean

Và sau đó xóa bình luận từ sources.list. Có thể không phải là cách tốt nhất, nhưng ít nhất apt-getcác trang man không chỉ định bất kỳ cách nào để làm điều đó.

Về lưu ý liên quan, ví dụ quy trình nâng cấp phân phối Ubuntu sẽ vô hiệu hóa tất cả các kho lưu trữ của bên thứ 3 trong quá trình nâng cấp (và không chỉ chạy một số tùy chọn để loại trừ những kho đó tạm thời).


1

Một tùy chọn GUI khác là chỉ chọn nguồn gốc trong trình quản lý gói Synaptic.

  1. Tìm kiếm tên gói bạn muốn cài đặt
  2. Nhấp vào nút Xuất xứ
  3. Chọn kho lưu trữ bạn muốn cài đặt từ
  4. Chọn các gói
  5. Ứng dụng
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.