Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Пины и заморозка версий: IgnorePkg и динамика

Сразу к делу: заморозить версию пакета в Arch можно одной строкой в /etc/pacman.confIgnorePkg = <имя>. После этого pacman -Syu пропускает пакет и оставляет текущую версию. Но работает это только для «листовых» пакетов: ядра, драйверов, приложений. Замораживать библиотеки вроде glibc или python нельзя — система скатится в частичное обновление и развалится. Правильная динамика другая: обновляй всё, а если свежая версия сломалась — откати её, а не держи пин годами.

Что такое IgnorePkg и как он работает

IgnorePkg — директива в /etc/pacman.conf. В неё записываются имена пакетов через пробел:

# /etc/pacman.conf
IgnorePkg = linux linux-headers

Когда pacman -Syu доходит до такого пакета, он печатает skipping target и не трогает его. Остальные пакеты обновляются как обычно. Проверить, что заморожено, можно так:

grep -i ignorepkg /etc/pacman.conf

Важный нюанс: IgnorePkg не запрещает установку пакета вообще. Если пакет нужен как зависимость другого пакета, pacman всё равно поставит его — в минимальной версии, которая удовлетворяет зависимость. Именно здесь прячется главная ловушка, о ней ниже.

Синтаксис простой: имена через пробел, можно в несколько строк, комментарии начинаются с #. Имена пакетов пишутся как в выводе pacman -Q, в нижнем регистре.

Есть и родственная директива IgnoreGroup — она замораживает целую группу пакетов, например IgnoreGroup = linux. Работает по тому же принципу.

Стоит понимать разницу с другими дистрибутивами. В Debian и Ubuntu версию можно жёстко зафиксировать через apt-mark hold или пиннинг в /etc/apt/preferences. В Arch такого механизма нет: pacman не умеет требовать конкретную версию пакета. IgnorePkg — единственный инструмент, и он грубый: либо обновляй, либо нет.

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

Не хочется править конфиг ради одного раза — используй флаг --ignore:

pacman -Syu --ignore linux

Флаг действует только на один запуск pacman. Несколько пакетов — через запятую:

pacman -Syu --ignore linux,nvidia

Это удобно, когда ты знаешь, что свежая версия сломана, но не готов замораживать пакет в конфиге. Один раз пропустил, дождался фикса, обновил. Флаг работает и с обычной установкой: pacman -S --ignore <имя> поставит пакет, но не тронет его версию, если он уже установлен.

Перед обновлением полезно посмотреть, что вообще пришло в репозитории. Список доступных обновлений покажет pacman -Qu. Так ты заранее увидишь проблемный пакет и решишь, пропускать его или нет.

Когда заморозка версии оправдана

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

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

Ядро с известным регрессом

Вышло ядро, которое ломает твоё железо: пропал Wi-Fi, не грузится звук, зависает на пробуждении. Держишь linux и linux-headers на рабочей версии, пока баг не починят. Как выбрать ядро под свои задачи — в статье «Какое ядро выбрать: linux, linux-lts, linux-zen, linux-hardened».

Отдельно про linux-lts: это не заморозка, а другое ядро с долгосрочной поддержкой. Оно обновляется как обычно, просто реже меняет поведение. Если хочешь стабильности — поставь linux-lts и держи его свежим, а не замораживай старое ядро.

Баговая версия приложения

Обновление программы сломало её работу, а фикс ещё не вышел. Замораживаешь пакет до следующего релиза. Тут важно следить за апстримом: как только вышла починка — снимай пин. Иначе через пару месяцев забудешь, зачем замораживал, и будешь сидеть на древней версии с дырами в безопасности.

Драйвер под конкретное ядро

Например, nvidia-dkms не собирается против свежего ядра. Держишь драйвер на версии, которая работает, пока не выйдет совместимая.

Во всех трёх случаях пакет «листовой»: от него не зависят десятки других пакетов. Это ключевое условие.

Как заморозить ядро на практике

Самый частый сценарий — пин ядра. Разберём по шагам.

Сначала посмотри, какое ядро стоит:

uname -r
pacman -Q linux

Если свежая версия ломает железо, добавь ядро и заголовки в IgnorePkg:

# /etc/pacman.conf
IgnorePkg = linux linux-headers

Если используешь модули из AUR или DKMS, держи linux-headers замороженным вместе с ядром. Иначе заголовки обновятся, а ядро останется старым — и модули перестанут собираться.

Запусти обновление:

pacman -Syu

В выводе увидишь skipping target: linux — ядро пропущено, остальное обновилось. Проверь, что версия не изменилась:

pacman -Q linux

Когда баг починят, убери строку из конфига и обнови ядро принудительно:

pacman -S linux linux-headers

После обновления ядра перезагрузка не обязательна, но желательна — новое ядро подхватится при следующей загрузке. Если держишь несколько ядер, старые можно почистить — об этом статья «Чистка старых ядер и initramfs».

Чем опасна заморозка пакета

Главный риск — частичное обновление. Arch — роллинг-релиз: пакеты собираются против свежих версий библиотек. Если заморозить glibc, openssl, gcc-libs или python, то пакеты, собранные против новой версии, перестанут работать со старой. Система превращается в смесь старых и новых пакетов, которая живёт до первого серьёзного обновления. Подробно об этом — в статьях «Частичное обновление в Arch» и «Частичное обновление и IgnorePkg».

Разберём на примере. Ты заморозил python. Через месяц выходит обновление, которое требует свежую версию интерпретатора. Дальше два варианта: pacman откажет в обновлении, потому что не может собрать консистентный набор версий, либо поставит пакет, который не запустится на твоём старом python. Оба плохие.

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

Отдельная история — заморозка пакета, который тянет за собой половину системы. glibc и gcc-libs обновляются вместе с десятками пакетов, собранных против них. Пропустил такой пакет — и следующее обновление либо упадёт, либо поставит пакеты, которые не запустятся. Симптомы частичного состояния: странные ошибки при запуске программ, сообщения вроде error while loading shared libraries, падение сборок из AUR.

И ещё один сигнал: когда pacman печатает skipping target, это не просто информационное сообщение. Каждый пропуск увеличивает расхождение между пакетами. Один пропущенный пакет на пару дней — нормально. Длинный список в IgnorePkg на месяцы — почти гарантированная поломка при следующем обновлении. Чем дольше живёт пин, тем дороже обходится его снятие: расхождение версий копится, и однажды обновление превращается в починку системы.

Правила безопасности простые:

  • Замораживай только «листовые» пакеты: ядро, драйверы, приложения, firmware.
  • Не держи больше одного-двух пинов одновременно.
  • Снимай пин, как только проблема решена.

Как снять пин и вернуться к динамике

Когда апстрим починил баг, убери строку из /etc/pacman.conf или закомментируй её. Затем обнови пакет принудительно:

pacman -S linux

Команда pacman -S <имя> игнорирует IgnorePkg и ставит свежую версию. Это же работает, если хочешь обновить один замороженный пакет, не трогая остальные.

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

Динамический подход вместо вечного пина: обновляй всё как обычно. Если новая версия сломалась — откати её. Полный цикл выглядит так. Сначала обычное обновление:

pacman -Syu

Новая версия сломала работу. Посмотри, какие версии лежат в кеше:

ls /var/cache/pacman/pkg/имя-пакета*

Если нужная версия на месте, поставь её напрямую:

pacman -U /var/cache/pacman/pkg/имя-пакета-старая-версия.pkg.tar.zst

Чтобы pacman не обновил её обратно при следующем -Syu, добавь пакет в IgnorePkg на время. Это и есть динамический пин: откатил, заморозил до фикса, потом снял. Подробнее про установку конкретной версии — в статье «Установка конкретной версии пакета из кеша».

Если нужной версии в кеше нет — поможет утилита downgrade из AUR или архив Arch Linux. Чтобы было от чего откатываться, держи кеш /var/cache/pacman/pkg и не чисти его слишком рьяно. По умолчанию pacman не удаляет старые файлы, но при нехватке места их можно почистить через paccache. Если планируешь откаты — не запускай чистку сразу после обновления.

Частые вопросы

IgnorePkg и IgnoreGroup — в чём разница?

IgnoreGroup замораживает целую группу пакетов, например IgnoreGroup = linux. В остальном работает так же, как IgnorePkg.

Почему pacman всё равно обновил замороженный пакет?

Потому что IgnorePkg не запрещает установку. Если пакет нужен как зависимость другого пакета, pacman поставит его в минимальной версии. Заморозка работает только против «добровольного» обновления.

Можно ли заморозить версию навсегда?

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

Как узнать, какие пакеты заморожены?

grep -i ignorepkg /etc/pacman.conf

Что делать, если заморозил библиотеку и система сломалась?

Сними пин и обнови всё: pacman -Syu. Если не помогло — откати проблемные пакеты из кеша или из архива Arch Linux. В крайнем случае поможет переустановка всех пакетов, но это уже тяжёлая артиллерия.

Полезные ресурсы

Заключение

IgnorePkg — простой механизм заморозки версии, но с жёсткими ограничениями. Держи пин только на «листовых» пакетах, не больше одного-двух, и снимай его, как только проблема решена. Вместо вечной заморозки используй динамику: обнови всё, а сломанную версию откати. Так система останется целой, а ты — на свежих пакетах.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

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

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max