Câu hỏi Làm thế nào để ngăn chặn việc cập nhật một gói cụ thể?


Bởi vì lỗi # 693758 Tôi muốn ngăn chặn apt-get upgrade và Update Manager cập nhật gói "libgtk2.0-0".

Làm thế nào điều này có thể đạt được?


324
2017-12-23 17:29


gốc


@ hhlp: Nhưng câu hỏi này là hỏi về một gói chưa bao giờ được cài đặt. - Nathan Osman
@George Edison - Ngoài ra còn có gói giữ, cho phép bạn không cập nhật gói. Vì vậy, Giữ một gói cơ bản có nghĩa là bạn đang nói với người quản lý gói để giữ cho phiên bản hiện tại không có vấn đề gì. Điều này rất hữu ích nếu phiên bản mới hơn của chương trình hiện đang hoạt động bị gián đoạn sau khi cập nhật. (bạn không thể giữ một gói mà không bao giờ được cài đặt cũng thấy câu hỏi của tôi là như nhau) .... tôi đã kiểm tra ngay bây giờ - xem ông nói disable packages from the auto-update - hhlp


Các câu trả lời:


Giữ

Có bốn cách giữ lại các gói: với dpkg, apt, aptitude hoặc dselect.

dpkg

Đặt gói bị giữ:

echo "<package-name> hold" | sudo dpkg --set-selections

Xóa khoản giữ:

echo "<package-name> install" | sudo dpkg --set-selections

Hiển thị trạng thái của các gói của bạn:

dpkg --get-selections

Hiển thị trạng thái của một gói duy nhất:

dpkg --get-selections | grep "<package-name>"

apt

Giữ một gói:

sudo apt-mark hold <package-name>

Xóa khoản giữ:

sudo apt-mark unhold <package-name>

dselect

Với dselect, nhập màn hình [S] elect, tìm gói bạn muốn giữ ở trạng thái hiện tại và nhấn = hoặc là H. Các thay đổi sẽ có hiệu lực ngay lập tức sau khi thoát khỏi màn hình chọn [S].


Các cách tiếp cận sau được giới hạn trong việc khóa / giữ một gói trong aptitude hoặc synaptic không ảnh hưởng đến apt-get / apt.

năng khiếu

Giữ một gói:

sudo aptitude hold <package-name>

Xóa khoản giữ:

sudo aptitude unhold <package-name>

Khóa với trình quản lý gói Synaptic

Đi đến Synaptic Package Manager (Hệ thống> Quản trị> Trình quản lý gói Synaptic).

Nhấp vào nút tìm kiếm và nhập tên gói.

Khi bạn tìm thấy gói, hãy chọn nó và đi đến Gói menu và chọn Phiên bản lock.

Synaptic menu

Gói đó sẽ không hiển thị trong trình quản lý cập nhật và sẽ không được cập nhật.


474
2017-12-23 18:04



Điều này cũng làm việc để ngăn chặn một gói được cài đặt. Khi cài đặt devscripts, rất nhiều gói được kéo theo các gói Khuyến nghị. Vì tôi không cần một máy chủ thư (postfix), tôi có thể vô hiệu hóa việc cài đặt nó bằng cách chạy echo postfix hold | sudo dpkg --set-selections trước khi chạy sudo apt-get install devscripts. Hành động giữ này chỉ tồn tại trong lần cài đặt này, sau khi cài đặt, các lựa chọn được đặt lại. - Lekensteyn
Ngoài ra giá trị chỉ ra, gói giữ làm phá vỡ nâng cấp và bản vá lỗi đôi khi bằng cách tạo ra một tình huống mà không có giải pháp pháp lý apt có thể tính toán cho một phụ thuộc. Nếu gói foo có một == <hoặc <= dependency trên libbar, thì apt sẽ từ chối nâng cấp libbar cũng như foo. Theo thời gian, các phụ thuộc xếp tầng này có thể phát triển để chặn một số lượng lớn các bản cập nhật, bao gồm các bản cập nhật bảo mật quan trọng. Bạn sẽ cần xóa lệnh giữ và để nâng cấp xảy ra hoặc xây dựng lại các gói bạn đang nắm giữ dựa trên các phiên bản mới hơn của các phụ thuộc của nó nếu điều này xảy ra. - Stephanie
Chỉ cần lưu ý: apt-mark không hỗ trợ hold trong phiên bản 0.7.25 (Ubuntu Lucid) - Joril
Điều này đặc biệt hữu ích khi cố gắng giữ lại các trình điều khiển đồ họa. Đối với người dùng ATI, apt-mark hold fglrx fglrx-amdcccle fglrx-dev && aptitude hold fglrx fglrx-amdcccle fglrx-dev. - earthmeLon
Hiện nay synaptic và aptitude chỉ khóa các gói trong các chương trình đó. "Bất cứ điều gì khác mà không nâng cấp gói (đọc: Update Manager, apt-get, aptitude, vv) bỏ qua điều này." Từ câu hỏi này. - holocronweaver


Để đặt gói "foo" bị giữ:

echo "foo hold" | dpkg --set-selections

Trong trường hợp của bạn, chúng tôi sẽ đặt rượu chờ:

sudo -i
echo "wine hold" | dpkg --set-selections

Để xóa khoản giữ:

sudo -i
echo "wine install" | dpkg --set-selections

43
2017-12-08 20:15



Cũng lưu ý rằng trong khi gói bị giữ, bạn có thể cài đặt phiên bản cụ thể qua apt-get install wine=1.2.3. Đang bị ngăn chặn apt-get (dist-)upgrade từ việc thay đổi nó. - rcoup
@rcoup Nếu bạn có phiên bản cũ bị giữ và sau đó bạn nâng cấp lên phiên bản mới theo cách thủ công mà không xóa yêu cầu lưu giữ khi bạn mô tả, phiên bản cũ có được lưu trong bộ nhớ cache để bạn có thể quay lại không? - cxrodgers
@cxrodgers bộ nhớ cache cục bộ (thường là /var/cache/apt/archives) độc lập với lưu giữ và nâng cấp & công cụ, vì vậy tất cả các phiên bản bạn đã tải xuống sẽ có ở đó cho đến khi bạn chạy apt-get [auto]clean - rcoup


Tôi đã tìm kiếm điều tương tự và sau rất nhiều nghiên cứu tôi thấy rằng bằng cách sử dụng cú pháp sau đây bạn có thể cấm một phiên bản cụ thể nhưng cho phép cập nhật tiếp theo:

Gói: compiz-plugins-main
Pin: phiên bản 1: 0.9.7.0 ~ bzr19-0ubuntu10.1
Ưu tiên pin: -1

Điều này đi vào tệp / etc / apt / preferences.


28
2017-07-22 11:13



Đây là cách tốt hơn nhiều so với việc ngăn cập nhật vô thời hạn - Eero Aaltonen
Với phương pháp này, tôi nghĩ rằng, rất có thể là lớn hơn để ngăn chặn ubuntu 'phần mềm quảng cáo' như ubuntu một hoặc biểu tượng amazon từ đang được cài đặt lại với bản nâng cấp phát hành tiếp theo ... - Daniel Alder


cài đặt, dựng lên synaptic sử dụng sudo apt-get install synaptic.

Chạy bằng gksudo synaptic và trên hộp tìm kiếm xác định vị trí gói bạn muốn khóa, ví dụ: gedit

enter image description here

Từ menu gói chọn Phiên bản lock:

enter image description here

Và đó là tất cả, phiên bản hiện được cài đặt tại thời điểm khóa sẽ vẫn được cài đặt ngay cả khi nâng cấp.


19
2017-12-08 20:06



Hãy nhìn vào "Phiên bản khóa không thông minh như âm thanh. Nó phải làm những gì nó nói trên tin, khóa phiên bản ... Nhưng nó chỉ khóa nó trong Synaptic. Bất cứ thứ gì khác làm nâng cấp gói (đọc: Update Manager , apt-get, aptitude, vv) bỏ qua điều này. Đây có lẽ là hành vi lỗi, vì vậy tôi mong đợi điều này sẽ được sửa trong thời gian. " từ askubuntu.com/questions/9607/what-does-lock-version-do. Trạng thái hiện tại là gì? Nếu một cái gì đó bị khóa trong Synaptic, các nhà quản lý gói khác có "vinh danh" khóa này không?
vasa1: Kể từ phiên bản 0.75.13, vẫn không: (Cùng một vấn đề với aptitude. - syockit


Ngăn chặn một gói được cài đặt được gọi là "gói giữ" và nó rất đơn giản để làm:

tiếng vang tên gói hàng giữ | dpkg --set-selections

... trong đó * package_name * là tên của gói bạn muốn ngăn không cho cài đặt.

Chú thích: lệnh trên giả định quyền root. Nói cách khác, bạn có thể sẽ cần phải gõ sudo su trước khi chạy nó.


16
2018-02-05 01:18



Hoàn hảo điều này là câu trả lời. Cảm ơn bạn. - asoundmove
s/sudo su/sudo -s/g (hoặc là sudo -i). (-i sẽ cung cấp một shell đăng nhập, -s sẽ không). - derobert


Từ một thời gian apt-get được thay thế bởi apt, ví dụ như tôi muốn ngăn Firefox cập nhật lên phiên bản trên 56, bởi vì rất nhiều tiện ích, như "Nhóm tab" không làm việc được nữa với Firefox 57 mới (xem "Cập nhật WebExtensions").

Có thể chứa nhiều hơn một gói với một lệnh và sử dụng các ký tự đại diện.

Ngăn Firefox cập nhật

sudo apt-mark hold firefox firefox-locale-*

Nếu bạn muốn bỏ chúng sau này, đó sẽ là lệnh:

sudo apt-mark unhold firefox firefox-locale-*

5
2017-11-19 07:45





Tôi synaptic bạn có thể đóng băng phiên bản của một gói cụ thể tôi không phải là một 100% chắc chắn là liệu điều này sẽ sửa đổi apt-get nhưng nó chắc chắn sẽ ngừng cập nhật quản lý.

Để đóng băng một gói, chọn nó trong synaptic sau đó mở menu gói và chọn phiên bản đóng băng.

Hi vọng điêu nay co ich

chỉnh sửa này câu hỏi 16668 đề cập đến một tình huống tương tự


4
2017-12-23 17:35





Mọi thứ bạn từng muốn biết về các gói "giữ" và "ghim" các phiên bản cụ thể: https://help.ubuntu.com/community/PinningHowto


3
2017-12-23 21:09





Xem lỗi # 75332, # 158981 và # 72806.

Tóm tắt là giữ ở cấp apt-get / aptitude không kích hoạt trạng thái giữ trong dpkg (xem lỗi 72806 đặc biệt) và update-manager đọc trạng thái từ dpkg.

workaround được chạy dưới dạng root: echo "package hold" | dpkg --set-selections


3
2017-11-26 07:24





Nếu bạn đã cài đặt Synaptic, bạn có thể chọn gói và sử dụng menu Package -> Lock Version để ngăn nó được cập nhật.

Bạn có thể cài đặt Synaptic với sudo apt-get install synaptic. Cá nhân tôi thấy nó hữu ích hơn Trung tâm Phần mềm ... sau đó một lần nữa, tôi là một trường học khá cũ. :)


1
2017-12-08 20:06





Bạn có thể sử dụng trên aptitude "ghi đè cụ thể", như sau:

aptitude reinstall ~i oracle-java8-jre:

Đây là một lần duy nhất sử dụng (không được lưu trữ để cài đặt lại trong tương lai), giữ ghi đè cụ thể, để cài đặt lại tất cả các gói trong hệ thống của bạn nhưng không phải là oracle-java8-jre.

Nếu bạn sử dụng ghi đè cụ thể, gói sẽ tạm thời ở trạng thái giữ nguyên năng khiếu sẽ không cố gắng cài đặt nó.

Một điều rất tốt nếu bạn nghĩ rằng hệ thống của bạn đã bị xâm phạm một số cách.


1
2018-05-18 16:27