Как пропустить обновление ядра?
Я использую 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