Как откатить ядро linux arch

Обновлено: 03.07.2024

Про Archlinux ходит множество слухов, в том числе не совсем правдивых. В частности, устоявшееся общественное мнение говорит, что Арч часто ломается при обновлениях, так как bleeding edge. На практике это это одна из самых живучих и ремонтопригодных систем, которая может жить годами без переустановок, при этом обновляясь чуть не каждый день.

Иногда, около одного-двух раз в год, проблемы всё-таки возникают. Какой-нибудь злостный баг умудряется просочиться в репозитории, после обновления система ломается, и вы как пользователь мало что можете с этим сделать — надо откатываться.

Ситуация

С очередным обновлением всё ломается к хренам собачьим . Уровень возможных проблем варьируется от "шрифты стали некрасивые" до "перестала работать сеть", а то и "ядро не видит дисковые разделы". Многие пользователи Арча умеют справляться с этой проблемой так или иначе, а в этой статье я расскажу как это делаю я.

Возврат контроля над системой

Для проведения ремонтных работ нам нужна консоль и работающая сеть. Если есть — хорошо. Если нет — есть простой и быстрый способ гарантированно их получить. Грузимся с загрузочной флешки, монтируем наши дисковые разделы, чрутимся в систему:

Всё, мы в консоли нашей системы, и у нас есть сеть.
А наличие загрузочной флешки в арсенале арчевода — практически обязательно.

Алгоритм ремонта

  1. Убеждаемся, что проблема нерешаема своими силами
  2. Определяем виновника проблемы и дату проблемного обновления
  3. Подменяем /etc/pacman.d/mirrorlist
  4. Выполняем pacman -Syyuu

Как это работает

Существует специальный сервер обновлений под названием Arch Linux Archive (ранее он назывался Arch Linux Rollback Machine), в котором хранятся "слепки" всех репозиториев на каждую отдельную дату.

Желаемую дату можно выбрать, специальным образом задав имя сервера в файле mirrorlist. Проще всего старый файл забэкапить, создать новый и добавить туда единственную строчку (в примере задано 1 декабря 2017г)

После чего команда pacman -Syyuu принудительно обновит базу данных пакетов на ту, которая соответствует выбранной дате, и принудительно переустанавливает все пакеты в системе, версии которых не соответствуют этой дате.

Наша задача — определить ближайшую дату, откат на которую даёт рабочую систему, выяснить какие пакеты обновились на следующий день, и выяснить, какой из этих пакетов вызвал поломку.

Определение нужной даты

Если система обновлялась не очень давно, можно пошагово уменьшать дату в mirrorlist, каждый раз выполняя pacman -Syyuu и проверяя, не исчезла ли проблема. Плюсом такого подхода является то, что можно с высокой вероятностью сразу вычислить конкретный пакет и добавить его в /etc/pacman.conf в строчку IgnorePkg — до лучших времен.

Если с момента последнего обновления прошёл, допустим, месяц — то итеративно делим временной промежуток пополам. Сперва откатываемся на полмесяца назад. Если проблема исчезла — то обновляемся на четверть месяца вперед, если нет — то четверть месяца назад. И так далее. Этот способ позволяет определить точный момент сбоя, который произошёл в течение последнего года, всего за 9 смен даты.

Определение пакета-виновника

Итак, допустим — мы не обновлялись уже неделю, pacman сообщает что есть 200 необновленных пакетов. После обновления система ломается.

Откатываемся назад на сутки, несколько пакетов "обновляются" до более ранней версии. Проверяем — система все ещё сломана.

Откатываемся ещё на сутки, ещё несколько пакетов снижают версию. Система сломана.

Ещё на сутки, очередные три пакета "обновляются" наоборот и ура, проблема исчезла!
Теперь мы точно знаем, что виноват один из этих трех пакетов. Допустим, это linux, linux-headers и gnome-shell. Так как linux-headers тянутся вслед за linux, их в расчёт не берем, это зависимость. Так что у нас всего два варианта.

Далее мы поодиночке добавляем кандидатов в /etc/pacman.conf.
Начнём с пакета linux:

После чего обновляем систему через pacman -Syu и смотрим, не исчезла ли проблема. Если она исчезла — то как раз потому, что пакет-виновник записан в pacman.conf как запрещенный к обновлению. Если не исчезла — снова откатывается на рабочую систему, вписываем в IgnorePkg следующего кандидата и повторяем цикл.

Пункт, который должен быть первым

А чей, собственно говоря, баг? Данная статья посвящена проблемам на уровне всего дистрибутива. Нет никакого смысла откатываться на старые версии пакетов, если проблема не вызвана их обновлениями. Поэтому первое, что делаем — это гуглим ошибку всеми возможными способами, настроив выдачу только на свежие записи. Если проблема общая — то с огромной вероятностью вы наткнетесь на свежий тред на каком-нибудь официальном форуме дистрибутива, где узнаете все подробности — точную дату проблемного обновления, имя проблемного пакета, и даже технические причины (что, собственно, сломалось под капотом).

Возьмем пример выше. Допустим, мы выяснили, что наша система не грузится в графический режим после обновления пакета gnome-shell до версии 3.26.2

Что делать дальше?

Сперва делаем, чтобы система работала — откатываемся на дату на день раньше вредного обновления и добавляем gnome-shell в IgnorePkg (как вариант — добавить всю группу gnome в IgnoreGroup, чтобы гном не обновлялся частично).

Далее пытаемся найти в гугле ответ на вопрос — "это моя личная проблема или у других тоже так?" Если такой проблемы в интернете не обнаружилось — это может быть признаком того, что баг слишком свежий. Ждем для уверенности несколько дней, иногда повторяя поисковые запросы в разных сочетаниях. Если проблема в том, что проблемный пакет действительно пролез в репозитории — она обязательно вылезет в интернете! У арча огромная пользовательская база, и люди будут писать багрепорты и задавать вопросы на форумах.

Всем привет. Может кто-нибудь подсказать, как откатиться с ядра 3.2.0-1 на 3.1 и внести запрет на его обновление?



ладно бы арчвики не существовало.


yaourt -S downgrade && downgrade linux


А две версии ядра оно умеет?


Дык linux 3.2 только в тестинге, в основном репозитории 3.1.7.

Закомментируй в /etc/pacman.conf реп тестинга и попробуй сделать pacman -S linux


Одновременно? Вроде нет. :)
Разве что назвать пакет по другому. Например у меня были установлены kernel26 и kernel26-pae.


> внести запрет на его обновление?

В /etc/pacman.conf заигнорируй пакет linux


Вот это лол.
Не знал раньше.
Еще один повод не пользоваться :)


Бегом на арчвики!


можешь поставить лтс, если совсем лениво вникать.


А во многих ли дистрах есть слоты? :)


Всем спасибо за помощь.
В арчвики описан процесс даунгрейда, я просто не знал, какие пакеты необходимо обновлять.



В репозитории там все равно только последняя версия. А прошлые ядра остаются после обновления.



Launchpad + возможность указать необходимую версию = profit

И чем оно тогда отличается от того, что в арче? Когда приходит новая версия ядра - старая сноситься и обновляется список загрузчика. Названия пакетов-то одинаковые, отличаются только версии. Логично, что в системе (без использования дополнительных костылей) нет возможности держать два пакета с одинаковым именем. Тогда причем тут арч?

старая по умолчанию сама не сносится, а новое просто устанавливается рядом. названия пакетов у ядер в убунте отличаются, поэтому можно держать хоть 100500 ядер одновременно

xapienz

старая по умолчанию сама не сносится, а новое просто устанавливается рядом.

Наверное так и есть, я не знаю, не убунтовод, но:

В арче один из основных принципов - простота, а подобные манипуляции никак не упрощают обслуживание системы.


Отличаеться тем, что с легкостью можно установить другую версию, которая сама добавиться в список граба.

нужно будет только снести старое ядро.

список загрузки обновляется автоматически при установке/удалении ядер


Значит не сносятся?
Мда, думал пофиксили давно.

rigiy

Отличаеться тем, что с легкостью можно установить другую версию, которая сама добавиться в список граба.

В арче (и не только в нем) ты тоже можешь установить другую версию, главное, чтоб она отличалась названием от уже установленной. М.б. не так легко, но никто этого и не обещал. )

А в оф. репозитории одновременно лежат две версии, помимо текущей есть еще и kernel26-lts , обе версии можно установить одной командой пакетного менеджера и держать в системе одновременно (мало того, они еще и обновляться будут).

xapienz

список загрузки обновляется автоматически при установке/удалении ядер

Я по поводу списка и не спорил, просто процитировал себя полностью. Да и разговор в общем-то не об автоматическом обновлении списка, а о возможности одновременной установки ядер разных версий.

xapienz

нужно будет только снести старое ядро.

на мой взгляд - лишние и муторные телодвижения.

на мой взгляд - лишние и муторные телодвижения.

удалить не сложнее, чем обновить.

тем более можно чистить систему от старых ядер раз в полгода, а в остальное время про них даже не вспоминать

xapienz

удалить не сложнее, чем обновить.

xapienz

тем более можно чистить систему от старых ядер раз в полгода, а в остальное время про них даже не вспоминать

А теперь представь - у тебя не один комп, а с десяток, или комп не твой и ты имеешь к нему доступ не всегда, или . Да масса вариантов.

В любом случае получается усложнение обслуживания, причем не всегда оправданное. В арче, кстати, откатить версию ядра очень просто и в вике подробно описано. Хотя для того, чтоб держать несколько версий - придется делать дополнительные, возможно не очень простые для новичка, телодвижения. Но, никто и не позиционирует арч, как дистр для начинающих.


В репозитории там все равно только последняя версия. А прошлые ядра остаются после обновления.

Нет, в репозитории лежит куча ядер с разными версиями.

Да нет, ты просто придурок. PKGBUILD позволяет создать пакет с другим ядром. А grub позволяет загрузить новое ядро. Но ты слишком убогий.


К чему ты это вякнул?

наверно у него батхёрт из-за любимого арчика
но это не отменяет того, что ты пытаешься пропагандировать говно-генту, и потому, ты — идиот
//другой анонимус


Ну, несколько ядер даже Ubuntu поддерживает. Это же не слоты.


Ох, если он увидел в моем посте пропаганду генты - это сугубо его проблемы.


Эти инструменты позволяют вам фактически выполнять работу, но они не могут ничего сделать без ядра.

Ядро операционной системы похоже на вашу сердечно-сосудистую систему.

Вы склонны забывать об этом, пока что-то пойдет не так.

Когда обновленное ядро не позволит вам использовать ваш компьютер, пришло время понизить версию.

Загрузитесь в старое ядро


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

Когда компьютер загружает GRUB, вам может потребоваться нажать клавишу, чтобы выбрать нестандартные параметры.

В некоторых системах сразу будут показаны более старые ядра, в то время как в Ubuntu вам нужно будет выбрать «Advanced options for Ubuntu», чтобы найти более старые ядра.

Выбрав старое ядро, вы загрузитесь в свою систему.

Все должно работать как раньше.

Если проблема не устранена, значит она не в ядре.

Удалите проблемное ядро

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

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


Вы можете сделать это, используя инструменты управления пакетами вашего дистрибутива. Это будет отличаться в зависимости от системы, которую вы используете. Вам также необходимо знать версию ядра, которое вы хотите удалить. Версию можно найти во время загрузки на экране GRUB. Для Ubuntu и других основанных на apt дистрибутивов вы можете использовать команду, подобную следующей: Вам нужно заменить вышеприведенную VERSION точным номером версии проблемного ядра, которое вы хотите удалить. Если вы просто хотите отложить ядро на некоторое время, вы можете использовать следующую команду:


Как избежать таким проблем в будущем

Особенно следует следить за пользователями со схожим оборудованием.

Если вам важна стабильность, вы также можете использовать дистрибутивы LTS.

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

Это означает, что вы можете рассчитывать на то, что они будут более стабильными, чем ваш стандартный дистрибутив.

Заключение

Хотя понижение версии является самым простым способом решения проблем, связанных с ядром, это не единственный способ.

Иногда это просто невозможно.

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

В этом случае вы должны собрать собственное ядро, а не полагаться на версию, поставляемую вашим дистрибутивом.

Я только что сделал обновление системы, которое включало мое ядро. После чего, мой Wi-Fi сломался. После некоторого google, кажется, я не единственный человек, с которым это произошло.

rt2860 драйверы не играют хорошо с ядром 2.6-32.

Итак, как я могу понизить мой ядра? У меня все еще есть старый в моем кэше pacman, но я не уверен, как удалить текущий и установить старый.

Я попытался сделать ' pacman-Rsn kernel26[прошивка / заголовки], но OSS (звуковая система) жаловалась, что она требует *заголовков в качестве иждивенчества.

безопасно ли просто установить старый kernel26* (прошивка, заголовки, база), а затем удалить ток? Как я могу это сделать? :/

по моему опыту, можно безопасно понизить версию ядра. В последнее время мне приходилось много этим заниматься из-за проблемы с lirc и новые версии ядра. Мой пульт Hauppauge PVR-250 больше не работает после установки последней версии ядра. На самом деле, я сделал это несколько часов назад ;).

переустановка старой версии ядра:

обязательное условие: вы действительно должны найти двоичный пакет старого ядра где угодно. Если вы не имеете это, вы в значительной степени не повезло (если вы не хотите, чтобы скомпилировать старые пакеты самостоятельно).

Если вы имеете старую пакет kernel, вы можете установить его с помощью pacman -U package-name.pgk.tar.gz . Вы, скорее всего, получите ошибку зависимости после этого. Каждый пакет, указанный в этой ошибке, также должен быть понижен. Поэтому вернитесь в кэш пакетов, найдите именованный пакет в старой версии и попробуйте установить его, снова вызвав pacman, на этот раз со старым ядром и вновь найденным пакетом ( pacman -U package-name.pgk.tar.gz other-package.pkg.tar.gz ).

вам придется повторить эти шаги, пока pacman выполнить успешно. После этого вы должны быть в состоянии перезагрузите систему и новое (фактически старое) ядро будет загружено. Если pacman скажет вам, что он не может удалить пакет, несовместимый со старым ядром, вам придется удалить его вручную ( pacman -Rd conflicting-package.pkg.tar.gz ), перед установкой старого ядра. Но будьте осторожны с этим шагом, он может сломать вашу систему.

в моем случае, я должен понизить 7 пакетов, включая ядро, glibc, kernel-headers, lirc и два пакета моего драйвера nvidia.

В думаю, единственный большой недостаток в Archlinux на самом деле является проблемой понижения. Если вы очистили кэш пакетов, может быть очень трудно найти нужный вам двоичный пакет. Мне так и не удалось найти нужный пакет на одном из зеркальных серверов.

потому что Archlinux в значительной степени передний край дистрибутив с очень текущих пакетов и частых релизов, мне нужна функция понижения очень часто. Я действительно надеюсь, что ребята из Archlinux найдут способ сделать это немного проще некоторое время будущее.

Регулярное обслуживание системы необходимо для правильной работы Arch в течение определенного периода времени. Своевременное обслуживание является привычной практикой многих пользователей.

Contents

Проверка на наличие ошибок

Неудачный запуск служб systemd

Проверьте, возможно какие-либо службы systemd неудачно запустились:

Файлы журналов

Посмотрите на наличие ошибок файл журнала, находящийся в /var/log , а также высоко приоритетные ошибки в журнале systemd:

Резервное копирование

Создавайте резервные копии важных данных через регулярные промежутки времени. Эти данные включают в себя конфигурационные файлы, установленные пакеты и каталоги, такие как /etc , /home , /var и для серверных установок, также /srv .

Смотрите различные приложения синхронизации и программ резервного копирования которые подойдут в вашем случае. Также смотрите восстановление системы.

Резервное копирование можно автоматизировать с помощь Systemd/Таймеры.

Файлы настроек

Перед внесением изменений в файлы настроек, создайте резервную копию. Таким образом, вы можете вернуться к рабочей версии в случае возникновения проблем. Такие редакторы как vim и emacs могут сделать это автоматически, а также такая утилита как etckeeper держат /etc в системе контроля версий (VCS).

Список установленных приложений

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

База данных Pacman

Заголовки LUKS

Обновление системы

Если в системе есть пакеты из AUR, внимательно обновите все из них.

Избегайте определенных команд pacman

Избегайте частичные обновления, то есть никогда не запускайте pacman -Sy , вместо того чтобы использовать pacman -Syu .

Избегайте использования опции -d с Pacman. pacman -Rdd пакет пропустит проверку зависимостей при удалении пакета. В результате пакет, создающий критическую зависимость, может быть удален, что приведет к нарушению системы.

Частичные обновления не поддерживаются

Arch Linux является роллинг-релиз дистрибутивом. Это означает, что когда новая версия библиотек поступит в репозиторий, разработчики и доверенные пользователи пересоберут все пакеты в репозиториях, которые должны быть пересобраны с библиотеками. Например, если два пакета зависят от той же библиотеки, обновление только одного пакета может также обновить библиотеку (в качестве зависимости), которая может сломать другой пакет, который зависит от старой версии библиотеки.

Именно поэтому частичные обновления являются не поддерживаемыми. Не используйте pacman -Sy пакет или любой эквивалент, такой как pacman -Sy а затем pacman -S пакет , всегда обновляйтесь (с помощью pacman -Syu ) перед установкой пакета. По той же причине будьте очень осторожны при использовании IgnorePkg и IgnoreGroup . Если в системе есть локально установленные пакеты (например, пакеты из AUR), пользователи должны будут пересобрать их, когда их зависимост получит игнор.

Если было частичное обновление, и бинарные файлы сломаны, потому что они не могут найти зависимые библиотеки, не "исправляйте" проблему при помощи символьной ссылки. Библиотеки получают игнор, когда они не имеет обратной совместимости. Выполнение команды pacman -Syu с правильно синхронизированным зеркалом решит проблему, пока сам "pacman" работоспособен.

Прочитайте перед обновлением системы

Сигналы предупреждений во время обновления

Как можно быстрее договаривайтесь с новыми файлами настроек

Когда вызывается pacman, могут быть созданы файлы .pacnew и .pacsave . Pacman уведомит вас, когда это произойдет, и пользователи должны разобраться с этими файлами в кратчайшие сроки. Пользователи могут обратиться к вики-страницы Pacman/Pacnew and Pacsave (Русский) для подробных инструкций.

Кроме того, подумайте о других файлах настроек которые вы можете скопировать или создать. Если пакет содержал пример настроек, который был скопирован в ваш домашний каталог, проверьте, был ли создан новый.

Откат сломанных обновлений

Используйте менеджер пакетов для установки программного обеспечения

Pacman делает работу намного лучше, чем ваше ручное содержание файлов. Если вы устанавливаете пакеты вручную, вы в скором времени, рано или поздно, забудете что вы делали, устанавливали конфликтующее программное обеспечение, устанавливали в неправильное место и т.д. Вместо этого, узнайте, как создать пакет.

Выбирайте драйверы с открытым исходным кодом

Будьте осторожны с неофициальными пакетами

Используйте меры предосторожности при использовании пакетов из AUR или неофициальных пользовательских репозиториев. Большинство из них содержатся обычными пользователями, и, следовательно, не могут иметь те же стандарты, что и в официальных репозиториях. Будьте осторожны с вспомогательными утилитами для работы с AUR, которые весьма упрощают установку пакетов AUR. Всегда проверяйте PKGBUILD'ы на вменяемость, признаки ошибок или вредоносного кода, прежде чем собрать и/или установить пакет.

Обновите список зеркал (mirrorlist)

Обновите список зеркал pacman, так как качество зеркал может меняться со временем, и некоторые из них могут перейти в офлайн или их скорость загрузки может ухудшиться. Смотрите Зеркала.

Очистите файловую систему

При поиске файлов для удаления, важно найти файлы, которые занимают большую часть дискового пространства. Программы, которые вам помогут можно найти в:

Старые файлы настроек

Старые файлы настроек могут конфликтовать с новыми версиями программного обеспечения, или портиться со временем. Периодически удаляйте ненужные файлы настроек, особенно в вашей домашней папке и

/.config . По тем же причинам, будьте осторожны при совместном использовании домашних папок между установками.

Посмотрите на следующие папки:

Для большей информации смотрите XDG Base Directory support.

Чтобы сохранить домашний каталог чистым от временных файлов, созданных в неправильном месте, будет хорошо иметь список нежелательных файлов и удалять их регулярно, например, с помощью rmshit.py.

rmlint может быть использован для поиска и при необходимости удалении дубликатов файлов, пустых файлов, рекурсивных пустых каталогов и сломанных символических ссылок.

Неиспользуемые пакеты

Удалите неиспользуемые пакеты из системы, тем самым освободив место на диске и упростив обслуживание.

Кэш пакетов

Удалите ненужные файлы .pkg из /var/cache/pacman/pkg/ чтобы освободить дисковое пространство. .

Сломанные симлинки

Старые, сломанные символьные ссылки могут находится в вашей системе; вы должны удалить их. Найти примеры того как их найти указаны тут (Англ.) и там (Англ.).

Для быстрого просмотра списка всех сломанных символьных ссылок в вашей системе, воспользуйтесь:

Затем проверьте и удалите ненужные записи из этого списка.

Советы и приёмы

Следующие советы, как правило не требуется, но некоторые пользователи могут счесть их полезными.

Используйте проверенные программные пакеты

Роллинг-релиз Arch даёт преимущество пользователям, которые хотят попробовать новейшие функции и получить последние обновления как можно скорее, но это может сделать обслуживание системы более трудным. Для упрощения технического обслуживания и повышения стабильности, старайтесь избегать ультрасовременное программное обеспечение и устанавливайте только зрелое и проверенные программное обеспечение. Такие пакеты имеют меньше шансов получить сложные обновления, такие как основные изменения настроек или удаление особенностей. Предпочитайте программное обеспечение, которое имеет сильное и активное сообщество разработчиков, а также большое количество компетентных пользователей, для того чтобы упростить поддержку в случае возникновения проблем.

Избегайте использования тестового (testing) репозитория, даже отдельных пакетов из testing. Эти пакеты являются экспериментальными и не подходят для стабильной системы. Кроме того, избегайте разрабатываемых пакетов, которые собираются непосредственно из апстрима. Они обычно находятся в AUR, и содержат в названии: "dev", "devel", "svn", "cvs", "git", и т.д.

Установите пакет linux-lts

Пакет linux-lts представляет собой альтернативный пакет ядра Arch, и доступен в core репозитории. Эта конкретная версия ядра имеет долгосрочную поддержку (LTS) от апстрима, включая исправления безопасности, и некоторые Бэкпорты. Это будет полезным, если вы предпочитаете стабильность и менее частые обновления ядра, или если вы хотите иметь запасное ядро, в случае если новая версия ядра вызывает проблемы.

Читайте также: