Все об Arch Linux

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

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

Сразу к делу: заморозить версию пакета в Arch можно одной строкой в /etc/pacman.conf: IgnorePkg = <имя>. Затем 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