Как пропустить обновление ядра?

Я использую Ubuntu 12.04.1 LTS i686 на VirtulBox. Каждый раз, когда я проверяю обновления, появляется новое ядро ​​Linux. Если я устанавливаю новое ядро, мне нужно снова установить Virtulbox Guest Additions и перезагрузить сервер. Я не хочу делать это каждую неделю. Я знаю, что могу вручную снять флажки с пакетов в диспетчере обновлений, но есть ли способ автоматически пропустить обновление ядра? Я нашел ответ здесь, но это для Ubuntu 10. Спасибо.

7 ответов

Решение

APT (Advanced Packaging Tool) - это система, которую Ubuntu использует для управления всем программным обеспечением, установленным в системе. Он позволяет вам "прикрепить" пакет к определенной версии, чтобы он не обновлялся при запуске диспетчера обновлений.

Чтобы закрепить ваши пакеты ядра, сначала вы должны определить, какая версия вашего ядра. Один из способов сделать это - открыть диспетчер пакетов Synaptic в разделе "Система"> "Администрирование".

введите описание изображения здесь

Введите "linux-generic" в текстовое поле "Быстрый поиск" и нажмите ввод.

введите описание изображения здесь

Запишите номер, указанный в столбце "Установленная версия". Мы будем использовать его на следующем шаге.

Далее нам нужно отредактировать файл /etc/apt/ Предпочтения. Откройте его, нажав Alt+F2, чтобы открыть окно "Запустить приложение" и введите:

gksudo gedit /etc/apt/preferences

введите описание изображения здесь

Это откроет окно Gedit. Скорее всего, окно будет пустым, если вы не играли с APT раньше.

В появившемся окне введите следующий номер, заменив номер версии номером версии, найденным в диспетчере пакетов Synaptic.

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

введите описание изображения здесь

Сохраните файл и закройте gedit. Если вы откроете менеджер обновлений, вы увидите, что обновления ядра Linux теперь скрыты!

введите описание изображения здесь

Источник

Блокировка пакетов с помощью APT/DPKG

Запомните имя пакета вашего ядра сверху.

Откройте терминал и запустите:

sudo -s

И нажмите Enter.

Введите свой пароль для sudo:

echo kernel_package_name hold | dpkg --set-selections

замещать kernel_package_name с названием ядра, которое вы хотите закрепить.

Теперь запустите:

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

Чтобы удалить пин-код из Apt/Dpkg:

Откройте терминал

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

Замените kernel_package пакетом, который вы хотите закрепить.

Теперь запустите:

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

Источник

То, что вы пытаетесь сделать, называется пиннингом. Источники, которые я дал вам выше, содержат в себе основы того, что вы должны сделать для выполнения своих задач.

В одной строке это:

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

Это установит состояние образа ядра от установки к хранению и, таким образом, предотвратит обновления.

Однострочник от Christoph не учитывает дополнительный пакет (например, linux-image-extra-3.13.0-45-generic). Скорее используйте это:

для меня в $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); сделать эхо $ я держу | dpkg - set-selection; сделанный

В отношении предложения superlexx: эта строка пропустит пакет "headers":

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

Так как насчет простого использования следующего:

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

Это очищает мета-пакеты ядра, которые включают обновления ядра:

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

(Если вы только что обновили ядро, вам нужно сначала перезагрузиться с новым ядром или найти последний выпуск ядра и использовать его выше вместо "$(uname -r)".)

Тем не менее, рекомендуется устанавливать обновления ядра, так как это в основном обновления безопасности.

Укороченная версия: (замените "держать" на "установить", чтобы удалить штифт)

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

Чтобы увидеть состояние всех образов и заголовков ядра, выполните:

 dpkg --get-selections | grep "linux-"

На Ubuntu 16.04.1 работает следующий код

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

улучшение кода Superlexx, sudo добавлен

dpkg -l | grep linux-image

Ты найдешь:

привет linux-image-4.4.0-34-generic ...

привет linux-image-extra-4.4.0-34-generic ...

обратите внимание, что тег теперь читает hiне ii

снять штифт

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | sudo dpkg --set-selections; done
Другие вопросы по тегам