Làm thế nào để bỏ qua cập nhật kernel?


25

Tôi đang chạy Ubuntu 12.04.1 LTS i686 trên VirtulBox. Mỗi lần tôi kiểm tra các bản cập nhật, sẽ có một nhân Linux mới. Nếu tôi cài đặt kernel mới, tôi phải cài đặt lại Virtulbox Guest Additions và khởi động lại máy chủ. Tôi không muốn làm điều này mỗi tuần. Tôi biết tôi có thể bỏ chọn thủ công các gói kernel khỏi trình quản lý cập nhật, nhưng có cách nào để tự động bỏ qua cập nhật kernel không? Tôi đã tìm thấy câu trả lời ở đây, nhưng đó là cho Ubuntu 10. Cảm ơn.

Câu trả lời:


18

APT (Công cụ đóng gói nâng cao) là hệ thống mà Ubuntu sử dụng để quản lý tất cả phần mềm được cài đặt trên hệ thống. Nó cho phép bạn cài đặt gói pin vào một phiên bản nhất định để không bị cập nhật khi Trình quản lý cập nhật chạy.

Để ghim các gói kernel của bạn, trước tiên bạn phải xác định kernel của bạn là phiên bản nào. Một cách để làm điều này là mở Trình quản lý gói Synaptic trong Hệ thống> Quản trị.

nhập mô tả hình ảnh ở đây

Nhập vào linux linux-generic trong trường văn bản Tìm kiếm nhanh và nhấn enter.

nhập mô tả hình ảnh ở đây

Ghi lại số được liệt kê trong cột Phiên bản cài đặt trực tuyến. Chúng tôi sẽ sử dụng nó trong bước tiếp theo.

Tiếp theo, chúng ta cần chỉnh sửa tệp / etc / apt / Preferences. Mở nó bằng cách nhấn Alt + F2 để hiển thị cửa sổ Run Application và nhập:

gksudo gedit /etc/apt/preferences

nhập mô tả hình ảnh ở đây

Điều này sẽ mở ra một cửa sổ gedit. Nhiều khả năng cửa sổ sẽ trống, trừ khi bạn đã chơi xung quanh với APT trước đó.

Trong cửa sổ, nhập nội dung sau, thay thế số phiên bản bằng số phiên bản bạn tìm thấy trong Trình quản lý gói Synaptic.

Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic
Pin: version <insert version here>
Pin-Priority: 1001

nhập mô tả hình ảnh ở đây

Lưu tệp và đóng gedit. Nếu bạn mở Trình quản lý cập nhật, bạn sẽ thấy các bản cập nhật nhân Linux hiện đang bị ẩn!

nhập mô tả hình ảnh ở đây

Nguồn

Chặn các gói với APT / DPKG

Nhớ tên gói của hạt nhân của bạn từ trên.

Mở một thiết bị đầu cuối và chạy:

sudo -s

Và đánh enter.

Nhập mật khẩu của bạn cho sudo:

echo kernel_package_name hold | dpkg --set-selections

Thay thế kernel_package_namebằng tên của hạt nhân bạn muốn ghim.

Bây giờ chạy:

sudo apt-get update && sudo apt-get upgrade

Để xóa pin khỏi Apt / Dpkg:

Mở một thiết bị đầu cuối

sudo -s
echo kernel_package install | dpkg --set-selections

Thay thế kernel_package bằng gói bạn muốn ghim.

Bây giờ chạy:

sudo apt-get update &&  sudo apt-get upgrade

Nguồn

Những gì bạn đang cố gắng làm được gọi là ghim. Các nguồn tôi đã cung cấp cho bạn ở trên, có các yếu tố cần thiết về những gì bạn phải làm để hoàn thành nhiệm vụ trong tay.


1
Cảm ơn vì đã trả lời. Có vẻ như chúng tôi đang sử dụng phiên bản khác nhau. Tôi không có Trình quản lý gói Synaptic và / etc / apt / tùy chọn trên Ubuntu 12.04 của mình.
garconcn

2
Có, Synaptic không còn được cài đặt theo mặc định.
ish

1
@garconcn, bạn có thể cài đặt Synaptic và cài đặt bản sửa lỗi mà tôi đã nói với bạn, hoặc đọc lại câu hỏi, vì tôi đã đặt thêm thông tin về nó
LnxSlck

2
@LnxSlck, tôi đã cài đặt Synaptic và làm theo hướng dẫn của bạn. Nó hoạt động. Cảm ơn.
garconcn

16

Trong một dòng đó là:

echo $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') hold | dpkg --set-selections

Điều này sẽ đặt trạng thái hình ảnh của kernel từ cài đặt thành giữ và do đó sẽ ngăn cập nhật.


8

Một lớp lót của Christoph không đưa gói phụ vào tài khoản (ví dụ: linux-image-Extra-3.13.0-45-generic). Thay vì sử dụng cái này:

cho tôi bằng $ (dpkg -l "* $ (uname -r) *" | grep image | awk '{print $ 2}'); làm vang $ i giữ | dpkg - bộ lựa chọn; làm xong

4

Trong đề xuất của superlexx: dòng đó sẽ bỏ lỡ gói "tiêu đề":

dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

Vì vậy, làm thế nào về chỉ đơn giản là sử dụng như sau:

dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'
linux-headers-3.13.0-48-generic
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

1
Nếu các gói bổ sung / tiêu đề / vv không được đánh dấu, có vấn đề gì không? Hoặc, bạn đang đề nghị đánh dấu chúng là tốt cho đầy đủ? Tôi hy vọng rằng Ubuntu sẽ không cố gắng cài đặt gói tiêu đề được cập nhật, cho đến khi hình ảnh linux được cài đặt (các tiêu đề là một phụ thuộc của hình ảnh). Tôi vẫn chưa xác minh điều này.
Whitehat101

2
Các bạn có thể hợp tác trên một lớp lót duy nhất thay vì xếp chồng 3 lớp lên nhau. = P Chỉ cần nói
cubuspl42

1
Sẽ không cần thiết phải gọi grep nếu bạn đã sử dụng awk:dpkg -l "*$(uname -r)*" | awk '/kernel/{print $2}'
Javier López

1

Điều này thanh trừng các gói meta kernel cho phép cập nhật kernel:

sudo apt purge $(apt-cache rdepends -i --installed linux-{headers,image}-$(uname -r)|awk '!/[0-9]/ && /^[ ]/{print $1}')

(Nếu bạn vừa nâng cấp kernel, trước tiên bạn phải khởi động lại với kernel mới hoặc tìm bản phát hành kernel mới nhất và sử dụng nó ở trên thay vì "$ (uname -r)".)

Bạn nên cài đặt các bản cập nhật hạt nhân mặc dù chúng chủ yếu là các bản cập nhật bảo mật.


0

Trên Ubuntu 16.04.1, đoạn mã sau hoạt động

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | sudo dpkg --set-selections; done

mã cải tiến của Superlexx, sudođược thêm vào

dpkg -l | grep linux-image

Bạn sẽ thấy:

xin chào linux-image-4.4.0-34-chung ...

xin chào linux-image-Extra-4.4.0-34-generic ...

lưu ý rằng thẻ bây giờ đọc hi, khôngii

để loại bỏ pin

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | sudo dpkg --set-selections; done

Câu trả lời hay nhưng bạn đưa sudovào bình luận không phải là lệnh ...
WinEunuuchs2Unix

0

Phiên bản ngắn hơn: (Thay thế "giữ" bằng "cài đặt" để loại bỏ pin)

 dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2,"hold"}' | sudo dpkg --set-selections

Để xem trạng thái của tất cả các hình ảnh và tiêu đề kernel, hãy chạy:

 dpkg --get-selections | grep "linux-"
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.