Установка конкретной версии пакета из кэша или архива
Конкретную версию пакета в Arch Linux ставят из файла. Команды pacman -S пакет=1.2.3 не существует: pacman умеет брать из репозитория только то, что лежит там сейчас. Поэтому сначала получаешь файл .pkg.tar.zst нужной версии, из кэша pacman или из архива Arch Linux Archive, а потом устанавливаешь его командой pacman -U /путь/к/файлу.pkg.tar.zst. Pacman проверит подписи и поставит ровно ту версию, что в файле. Ниже: где искать файлы, как их ставить и как не потерять откаченную версию при следующем обновлении.
Почему нельзя просто указать версию в pacman -S
Pacman работает с репозиториями, а в зеркалах всегда лежат только актуальные версии пакетов. Синтаксиса pacman -S пакет=1.2.3 нет, pacman не умеет выбирать версию из репозитория, такой запрос он просто не поймёт.
Команда pacman -S всегда ставит самую свежую версию из базы репозитория. База обновляется вместе с зеркалами, и старых версий в ней нет в принципе. Запрос с версией pacman просто не поймёт и выдаст ошибку. Это не особенность конкретной сборки: так работает pacman в любом дистрибутиве на его основе. Откат это всегда работа с файлами, а не с репозиторием.
Поэтому единственный способ поставить старую версию, установить её из файла через pacman -U. Файл можно взять в двух местах: в собственном кэше pacman или в историческом архиве пакетов.
Где взять файл старой версии
Кэш pacman: /var/cache/pacman/pkg
Каждый скачанный пакет pacman сохраняет в /var/cache/pacman/pkg. Если ты недавно обновлялся, предыдущая версия пакета почти наверняка ещё там. Сначала посмотри, какая версия установлена сейчас:
pacman -Q имя-пакета
Потом проверь, что лежит в кэше:
ls /var/cache/pacman/pkg/ | grep имя-пакета
Имя файла содержит версию и номер сборки: имя-пакета-1.2.3-1-x86_64.pkg.tar.zst. Если в списке есть версия старше текущей это твой файл. Если файла нет, значит, кэш уже почищен, иди в архив.
Кэш не вечный: утилита paccache чистит его по расписанию и по умолчанию оставляет три последние версии каждого пакета. Чтобы предыдущая версия была под рукой всегда, настрой -rk2, тогда в кэше остаются текущая и предыдущая версии. Как это сделать, разобрано в статье «Чистка кэша пакетов paccache».
Arch Linux Archive
Если в кэше пусто, иди в официальный архив пакетов. Там лежат все версии всех пакетов из официальных репозиториев, отсортированные по первой букве имени. Структура каталогов простая: packages/<первая буква имени>/<имя пакета>/<имя пакета>-<версия>.pkg.tar.zst.
Открой страницу пакета, найди нужную версию и скачай файл. Следи за архитектурой: для x86_64 нужен суффикс x86_64, для ARM: aarch64. Версия и номер сборки в имени файла должны совпадать с тем, что ты ищешь:
wget https://archive.archlinux.org/packages/l/linux/linux-6.12.10-1-x86_64.pkg.tar.zst
Отдельно в архиве хранятся базы репозиториев по датам: repos/<год>/<месяц>/<день>/. С их помощью можно откатить целую систему, а не один пакет. Но для точечного отката одного приложения достаточно скачать один файл.
Зеркала
Зеркала тут не помогут: в них всегда только текущие версии. Старые версии исчезают из зеркал сразу после обновления репозитория. Для отката используй кэш или архив. Искать старую версию в зеркале, пустая трата времени.
Скрипт downgrade из AUR
Ручной путь это два шага: найти файл и установить. Скрипт downgrade из AUR автоматизирует оба. Он сканирует кэш и архив, показывает список доступных версий, а выбранную ставит через тот же pacman -U. Установка:
yay -S downgrade
Запуск:
downgrade имя-пакета
Скрипт спросит, какую версию поставить, и предложит добавить пакет в IgnorePkg. Удобно, когда откатываешь часто: не нужно вручную разбираться в структуре архива и запоминать имена файлов.
Как установить конкретную версию из файла
Когда файл на руках, установка занимает одну команду:
pacman -U /var/cache/pacman/pkg/имя-пакета-1.2.3-1-x86_64.pkg.tar.zst
Если файл скачан из архива, укажи путь к нему:
pacman -U ~/Загрузки/имя-пакета-1.2.3-1-x86_64.pkg.tar.zst
Pacman проверит подпись файла (GPG), разберётся с зависимостями и установит ровно эту версию. Команда pacman -U принимает и локальные файлы, и URL: если пакет лежит в сети, можно указать ссылку напрямую, без скачивания. Проверь результат:
pacman -Q имя-пакета
В выводе увидишь установленную версию. Если она совпадает с нужной, всё сделано правильно. Сразу после установки запусти приложение и проверь, что проблема ушла.
Если нужно откатить несколько пакетов сразу, перечисли все файлы в одной команде через пробел. Pacman установит их за один проход и сам разберётся с зависимостями между ними.
Как составить пошаговый план отката
Собери всю процедуру в один список, чтобы не пропустить шаг:
- Узнай текущую версию:
pacman -Q имя-пакета. - Найди файл старой версии в кэше или в архиве.
- Установи его:
pacman -U /путь/к/файлу.pkg.tar.zst. - Проверь версию:
pacman -Q имя-пакета. - Запусти приложение и убедись, что проблема ушла.
- Если нужно, закрепи версию в
IgnorePkg. - Запиши, почему откатил и когда вернуть свежую версию.
Пункты 6 и 7 пропускают чаще всего, и через неделю пакет снова обновляется, а проблема возвращается. Откат без закрепления это временное решение.
Что делать, если пакет тянет за собой зависимости
Откат одного пакета часто требует отката связанных. Классический пример, ядро: linux и linux-headers должны совпадать по версии. Если откатываешь ядро, откатывай оба пакета одной командой:
pacman -U /var/cache/pacman/pkg/linux-6.12.10-1-x86_64.pkg.tar.zst \
/var/cache/pacman/pkg/linux-headers-6.12.10-1-x86_64.pkg.tar.zst
Посмотреть, от чего зависит пакет и что зависит от него, можно так:
pacman -Qi имя-пакета
В выводе будут списки Depends On и Required By. Если откатываемый пакет тянет за собой библиотеку, откатывай её вместе с ним. Pacman сам сообщит о несовпадении зависимостей, а вывод команды подскажет, каких версий не хватает.
Если pacman отказывается ставить пакет из-за зависимостей, а ты уверен, что они на месте, есть флаг -dd, он пропускает проверку зависимостей. Это крайняя мера: система может сломаться. Сначала откати недостающие зависимости, а -dd оставь на самый крайний случай. После установки с -dd обязательно проверь, что приложение вообще запускается.
Как не потерять старую версию при следующем обновлении
После установки из файла откаченная версия становится текущей. Следующий pacman -Syu снова обновит пакет до свежей, и проблема может вернуться.
Чтобы закрепить версию, добавь пакет в IgnorePkg в /etc/pacman.conf:
IgnorePkg = имя-пакета
В IgnorePkg можно перечислить несколько пакетов через пробел. После закрепления pacman будет пропускать пакет при обновлениях, пока ты не уберёшь его из списка. Подробно про закрепление версий в статье «Замораживание версий пакетов через IgnorePkg».
Закрепляй осознанно. Запиши, почему откатил пакет и при каких условиях можно вернуть свежую версию. Как только апстрим починит проблему, убери пакет из IgnorePkg и выполни pacman -Syu.
Когда откат пакета не помогает
Если после отката проблема осталась или система перестала загружаться, дело может быть не в пакете, а в ядре или загрузчике. Откат ядра и GRUB разобран в статье «Откат обновления GRUB».
Посмотри журнал последней загрузки:
journalctl -b -p err
Он покажет, какой компонент падает. Если виновата конфигурация, а не версия пакета, откат не поможет, ищи причину в настройках.
Частые вопросы
Можно ли откатить пакет, если его нет ни в кэше, ни в архиве?
В архиве лежат почти все версии всех пакетов из официальных репозиториев. Если пакета там нет, скорее всего, он из AUR. Готовых бинарных файлов старых версий для AUR не существует: откат выглядит иначе. Берёшь старый PKGBUILD из git-истории и пересобираешь пакет заново. Если PKGBUILD с тех пор менялся, придётся разбираться с изменениями вручную.
pacman -U ругается на подпись: что делать?
Проверь, что файл скачан целиком и с официального источника. Ошибка подписи часто появляется, когда файл не докачался или взят с постороннего сайта. Если ошибка про неизвестный ключ, обнови ключи: pacman-key --refresh-keys. Если файл повреждён, скачай его заново. Скачивай пакеты только из официального архива или из кэша pacman.
Откатил ядро, а система не загружается: что делать?
Проверь, что initramfs соответствует версии ядра. Загрузись с live-USB, сделай arch-chroot и пересобери образ: mkinitcpio -P. Проверь также, что в загрузчике указана правильная версия ядра. Если не помогло, возможно, понадобится откат GRUB.
Как узнать, какая версия установлена сейчас?
pacman -Q имя-пакета покажет установленную версию. Чтобы сравнить её с версией в репозитории, выполни pacman -Si имя-пакета.
Чем откат одного пакета отличается от отката всей системы?
Откат одного пакета это pacman -U с одним файлом. Откат всей системы это переустановка всех пакетов из архивных баз репозиториев по состоянию на нужную дату. Такой способ тяжелее и нужен редко: обычно хватает точечного отката одного-двух пакетов. К тому же полный откат требует осторожности, версии пакетов в архиве должны быть совместимы между собой.
Полезные ресурсы
- Downgrading packages (ArchWiki): основная страница про установку конкретных версий и откат.
- Arch Linux Archive (ArchWiki): про исторический архив пакетов и его структуру.
Заключение
Конкретную версию пакета ставят из файла: pacman -U, единственный способ, синтаксиса pacman -S пакет=версия не существует. Файл берёшь из кэша /var/cache/pacman/pkg или из официального архива пакетов. После установки проверь версию через pacman -Q, сразу протестируй приложение, при необходимости закрепи пакет в IgnorePkg и не забудь откатить связанные пакеты, особенно ядро и его заголовки. Если кэш настроен с -rk2, предыдущая версия всегда под рукой, и откат занимает одну команду.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии