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

25

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

garconcn
источник

Ответы:

18

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

Источник

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

LnxSlck
источник
1
Спасибо за ваш ответ. Похоже, мы используем другую версию. У меня нет диспетчера пакетов Synaptic и / etc / apt / предпочтений в моей Ubuntu 12.04.
garconcn
2
Да, Synaptic больше не устанавливается по умолчанию.
иш
1
@garconcn, вы можете установить Synaptic и установить исправление, о котором я вам говорил, или снова прочитать вопрос, так как я
добавил
2
@LnxSlck, я установил Synaptic и следовал твоим инструкциям. Оно работает. Спасибо.
garconcn
16

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

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

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

Christoph
источник
8

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

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

В отношении предложения 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
cloudeliver
источник
1
Если пакеты extras / headers / etc не помечены, есть ли проблемы? Или вы предлагаете пометить их также для полноты картины? Я ожидаю, что Ubuntu не будет пытаться установить обновленный пакет заголовков, пока не будет установлен образ linux (заголовки зависят от образа). Мне еще предстоит это проверить.
whitehat101
2
Вы, ребята, могли бы сотрудничать на одной строчке вместо того, чтобы укладывать по 3 противника друг на друга. = P Просто
скажи
1
Нет необходимости вызывать grep, если вы уже используете awk:dpkg -l "*$(uname -r)*" | awk '/kernel/{print $2}'
Хавьер Лопес,
1

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

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

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

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

Ярно
источник
0

На 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
Чен Дэн-Та
источник
Хороший ответ, но вы добавили sudoв комментарий не команду ...
WinEunuuchs2Unix
0

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

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

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

 dpkg --get-selections | grep "linux-"
Пер Мейдал Расмуссен
источник