Сразу к делу: заморозить версию пакета в Arch можно одной строкой в /etc/pacman.conf — IgnorePkg = <имя>. После этого pacman -Syu пропускает пакет и оставляет текущую версию. Но работает это только для «листовых» пакетов: ядра, драйверов, приложений. Замораживать библиотеки вроде glibc или python нельзя — система скатится в частичное обновление и развалится. Правильная динамика другая: обновляй всё, а если свежая версия сломалась — откати её, а не держи пин годами.
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 на месяцы — почти гарантированная поломка при следующем обновлении. Чем дольше живёт пин, тем дороже обходится его снятие: расхождение версий копится, и однажды обновление превращается в починку системы.
Правила безопасности простые:
Когда апстрим починил баг, убери строку из /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. Если планируешь откаты — не запускай чистку сразу после обновления.
IgnoreGroup замораживает целую группу пакетов, например IgnoreGroup = linux. В остальном работает так же, как IgnorePkg.
Потому что IgnorePkg не запрещает установку. Если пакет нужен как зависимость другого пакета, pacman поставит его в минимальной версии. Заморозка работает только против «добровольного» обновления.
Технически да, но это гарантированный путь к частичному обновлению. Пакеты в Arch собираются против свежих библиотек, и рано или поздно замороженный пакет перестанет сочетаться с остальной системой.
grep -i ignorepkg /etc/pacman.conf
Сними пин и обнови всё: pacman -Syu. Если не помогло — откати проблемные пакеты из кеша или из архива Arch Linux. В крайнем случае поможет переустановка всех пакетов, но это уже тяжёлая артиллерия.
IgnorePkg — простой механизм заморозки версии, но с жёсткими ограничениями. Держи пин только на «листовых» пакетах, не больше одного-двух, и снимай его, как только проблема решена. Вместо вечной заморозки используй динамику: обнови всё, а сломанную версию откати. Так система останется целой, а ты — на свежих пакетах.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии