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ể?
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ể?
Câu trả lời:
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 apt
cá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/repo
có 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_preferences
hoặc kiểm tra Ubuntu Community Wiki .
apt-cache policy package-name
release n=repo
sẽ không lưu trữ bất cứ ai
Bạn có thể chỉ định một bản phát hành với -t
tù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ự iceweasel
trong 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, " -t
chỉ đị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, ...)".
apt-get
hướng dẫn, -t
chỉ đị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, ...)
-t xenial
là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
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_preference
trang 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ừ Release
tệ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.
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
Các trường của Release
tệp và ánh xạ tới apt-cache policy
đầu ra
Định dạng của tệp ưu tiên apt
Sử dụng Release
các trường tệp để đặt mức độ ưu tiên
Release
tập tin và apt-cache policy
đầu raTừ bài viết của Debian Wiki
Bạn sẽ thấy đầu ra từ apt-cache policy
như 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ừ Release
cá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ó Ubuntu
giá 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-security
v.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
, universe
trong Ubuntu. Trong đầu ra, nó được hiển thị là c=main
hoặc c=restricted
vv. Hầu hết các PPA sử dụng main
cho 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=i386
hoặc b=amd64
trong đầ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=xenial
hoặ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 origin
bá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 Release
tậ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_preference
man-page cho điều này.
Các tệp ưu tiên pin hoặc apt nằm trong /etc/apt/preferences.d
thư 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ừ xenial
cao 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.
Release
cá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ừ xenial
tài liệu lưu trữ được ưu tiên cao hơn xenial-updates
và xenial-security
.
Sau khi ghim, chạy một apt-cache policy nautilus
chươ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ừ xenial
kho lưu trữ so với phiên bản cao hơn từ xenial-updates
kho 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ữ xenial
theo mặc định. Vì vậy, việc chỉ định mức độ ưu tiên a=xenial
cũ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ừ xenial
kho 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ị Archive
trong 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.
Để 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 policy
lệnh. Chúng tôi chỉ thấy rằng a=xenial
sẽ 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ư Origin
giá 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-glx
nó 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
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_preference
trang hướng dẫn để biết chi tiết.
Lựa chọn rõ ràng là sửa đổi /etc/apt/sources.list
và 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-get
cá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).