Все об Arch Linux

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

Установка конкретной версии пакета из кэша или архива

Конкретную версию пакета в 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 установит их за один проход и сам разберётся с зависимостями между ними.

Как составить пошаговый план отката

Собери всю процедуру в один список, чтобы не пропустить шаг:

  1. Узнай текущую версию: pacman -Q имя-пакета.
  2. Найди файл старой версии в кэше или в архиве.
  3. Установи его: pacman -U /путь/к/файлу.pkg.tar.zst.
  4. Проверь версию: pacman -Q имя-пакета.
  5. Запусти приложение и убедись, что проблема ушла.
  6. Если нужно — закрепи версию в IgnorePkg.
  7. Запиши, почему откатил и когда вернуть свежую версию.

Пункты 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 с одним файлом. Откат всей системы — это переустановка всех пакетов из архивных баз репозиториев по состоянию на нужную дату. Такой способ тяжелее и нужен редко: обычно хватает точечного отката одного-двух пакетов. К тому же полный откат требует осторожности — версии пакетов в архиве должны быть совместимы между собой.

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

Заключение

Конкретную версию пакета ставят из файла: pacman -U — единственный способ, синтаксиса pacman -S пакет=версия не существует. Файл берёшь из кэша /var/cache/pacman/pkg или из официального архива пакетов. После установки проверь версию через pacman -Q, сразу протестируй приложение, при необходимости закрепи пакет в IgnorePkg и не забудь откатить связанные пакеты — особенно ядро и его заголовки. Если кэш настроен с -rk2, предыдущая версия всегда под рукой, и откат занимает одну команду.



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

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

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

Комментарии

Загрузка…

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

Telegram Max