Сразу к делу: Arch Linux Archive (ALA) — это официальный архив всех когда-либо опубликованных версий пакетов Arch Linux, он живёт на archive.archlinux.org. Если свежее обновление сломало систему, откат делается в три шага: находишь рабочую версию пакета в каталоге packages/, скачиваешь её командой pacman -U и ставишь поверх текущей. ALA — источник старых версий, а не способ установки: сам процесс разобран в статье «Установка конкретной версии пакета из кеша».
ALA — это снимок всего, что когда-либо публиковалось в официальных репозиториях Arch. Каждый пакет, каждая версия, каждая сборка попадает в архив в момент публикации и остаётся там. Зачем это нужно? Rolling release живёт по принципу «всегда свежее», но свежее не всегда значит лучше. Новая версия ядра, glibc или драйвера может принести регрессию, и тогда единственный быстрый способ вернуть рабочую систему — поставить предыдущую версию пакета.
Когда это нужно? Три типичных сценария. Первый: обновил систему, и что-то перестало работать — откатываешь подозрительный пакет. Второй: новая версия принесла регрессию, о которой уже пишут на форумах, а фикс ещё не вышел. Третий: нужно сравнить поведение старой и новой версии, чтобы понять, кто виноват — пакет или твоя конфигурация.
Архив решает именно эту задачу: он хранит историю, по которой можно откатиться. Официальные зеркала такой истории не дают — там только текущее состояние репозиториев.
Архив состоит из двух больших деревьев: packages/ и repos/.
Дерево packages/ — это каталог по именам пакетов. Путь строится так: первая буква имени, затем имя, затем файл пакета. Например, для glibc:
https://archive.archlinux.org/packages/g/glibc/glibc-2.40-3-x86_64.pkg.tar.zst
Первая буква в пути — это первая буква имени пакета. Так каталоги не разрастаются до нечитаемых размеров: все пакеты на «g» лежат в одной папке, на «l» — в другой. Имя файла всегда заканчивается на .pkg.tar.zst — это формат, который pacman понимает напрямую.
Дерево repos/ — это полный снимок репозитория на конкретный момент времени. Путь выглядит так:
https://archive.archlinux.org/repos/2024/08/01/core/os/x86_64/
Здесь 2024/08/01 — дата снимка. Внутри — полный набор пакетов core на тот день. Снимки снимаются регулярно, обычно раз в день. Если нужно состояние «как было первого августа» — берёшь каталог 2024/08/01 и ставишь пакеты из него. Это удобно, когда откатить нужно сразу много пакетов до одной даты.
В дереве repos/ есть не только core, но и extra, multilib и testing. Снимок каждого репозитория снимается отдельно, поэтому даты в путях могут отличаться. Для отката обычно хватает core и extra — именно там живут системные библиотеки и большинство программ.
Самый простой способ — открыть каталог пакета в браузере или через curl:
curl https://archive.archlinux.org/packages/g/glibc/
Вывод — это HTML-листинг со всеми версиями glibc. Имена отсортированы, так что легко увидеть, какие версии доступны и за какой период. Листинг можно отфильтровать прямо в терминале, чтобы не листать сотни строк:
curl -s https://archive.archlinux.org/packages/g/glibc/ | grep glibc-2.40
Так ты увидишь только нужные версии. Обрати внимание: в листинге есть и каталоги, и файлы. Файлы пакетов — это .pkg.tar.zst, остальное можно игнорировать.
Если нужной версии в листинге нет — проверь соседние даты в repos/. Иногда пакет публиковался несколько раз за день, и в архиве лежат обе сборки. Сравни даты файлов и бери ту, что ближе к моменту, когда система работала.
Если нужен снимок репозитория целиком — смотри дерево repos/ по дате. Дата в пути — это дата публикации снимка, а не дата сборки пакетов.
Когда версия найдена, установка тривиальна:
sudo pacman -U https://archive.archlinux.org/packages/g/glibc/glibc-2.40-3-x86_64.pkg.tar.zst
pacman скачает файл, проверит подпись и поставит его поверх текущей версии. Проверка подписи работает автоматически: пакеты в архиве подписаны теми же ключами, что и в обычных репозиториях, поэтому подмену или повреждение файла pacman отклонит.
Команда pacman -U умеет работать и с локальными файлами, и с URL. Разница только в источнике: локальный файл pacman не скачивает, а URL — скачивает и кладёт в кеш. Флаги те же, что у обычной установки: –noconfirm пропустит вопросы, –needed не тронет уже установленные версии.
Скачанный из архива файл pacman кладёт в /var/cache/pacman/pkg, как и при обычном обновлении. Так что после отката у тебя в кеше появится копия старой версии — на случай, если понадобится вернуть её снова.
Важно: pacman -U не трогает зависимости. Если старая версия требует другие версии библиотек, pacman предупредит о конфликте и откажется ставить пакет. Это защита, а не баг. Полный разбор команд pacman — в статье «pacman от А до Я: команды».
Типичный случай — откат приложения, собранного против старой glibc. Ставить его поверх новой glibc нельзя: бинарник может просто не запуститься. Тогда откатываешь и зависимости, причём из снимка той же даты.
Порядок такой:
sudo pacman -U https://archive.archlinux.org/packages/g/glibc/glibc-2.40-3-x86_64.pkg.tar.zst \
https://archive.archlinux.org/packages/l/libxcrypt/libxcrypt-4.4.36-2-x86_64.pkg.tar.zst
Точный список зависимостей конкретной версии смотри в файле .PKGINFO внутри пакета:
tar -xOf glibc-2.40-3-x86_64.pkg.tar.zst .PKGINFO | grep depend
Команда pacman -Si показывает зависимости только актуальной версии, а .PKGINFO — именно той, которую ты собираешься ставить.
Перед откатом проверь, что ещё зависит от пакета, который ты собираешься понизить. Команда pacman -Qi покажет установленные пакеты, которым он нужен. Если таких много — откат заденет всю систему, и это уже не разовая починка, а полноценный частичный откат.
Такой откат называют частичным: часть пакетов остаётся новой, часть возвращается к старым версиям. Это нормально для разовой починки, но держать систему в таком состоянии постоянно не стоит — pacman при следующем обновлении всё равно предложит вернуть всё к актуальным версиям.
Отдельный случай — ядро. Версии ядра, заголовков и модулей должны совпадать между собой. Нельзя взять ядро из одного снимка, а заголовки из другого. Подробнее о выборе ядра — в статье «Какое ядро выбрать: linux, lts, zen, hardened».
ALA хранит версии пакетов с 2010 года, но это не строгая гарантия. Политика хранения менялась, часть старых версий могла быть удалена. Если нужной версии в архиве нет — откатиться через ALA не получится.
Поэтому порядок действий при откате такой: сначала проверь, что нужная версия вообще существует в архиве, и только потом удаляй локальный кеш. Кеш pacman — первый и самый быстрый источник старых версий, архив — запасной. Очистка кеша разобрана в статье «Чистка кеша пакетов paccache».
Ещё один нюанс: архив не работает как зеркало в обычном смысле. Он не участвует в обновлениях, с него нельзя настроить mirrorlist. Это хранилище истории, а не рабочий репозиторий.
Вручную искать версии в архиве утомительно, особенно когда пакетов несколько. Для этого есть утилита downgrade из AUR. Она умеет:
Установка стандартная для AUR:
yay -S downgrade
После установки запускаешь downgrade с именем пакета и выбираешь версию из списка. Утилита сама скачает файл из архива и поставит его, а в конце предложит добавить пакет в IgnorePkg — тогда следующее обновление не вернёт всё назад.
Да, если версия пакета подписана корректно. pacman -U проверяет подпись автоматически и откажет установку повреждённого или неподписанного файла. Риск не в самом откате, а в несовместимости старых версий с новыми зависимостями — поэтому откатывай зависимости вместе с пакетом.
Зеркало хранит только текущее состояние репозиториев. ALA хранит все когда-либо опубликованные версии. Обновляться с ALA нельзя, откатываться — можно.
Проверь кеш pacman (/var/cache/pacman/pkg) — там могут лежать старые версии. Если и там пусто, остаётся собрать пакет из старого PKGBUILD или жить с текущей версией. Зеркала в этой ситуации не помогут: там только актуальные версии.
Можно, но вместе с ядром откатывай linux-headers и модули той же версии. Смешивать версии ядра и заголовков нельзя — сборка модулей сломается.
Arch Linux Archive — это официальная история всех версий пакетов Arch. Когда свежее обновление ломает систему, откат через ALA занимает пару минут: нашёл версию в packages/, поставил через pacman -U, при необходимости откатил зависимости из снимка той же даты. Помни про два ограничения: архив не гарантирует вечное хранение каждой версии, а ядро, заголовки и модули откатываются только вместе. Кеш pacman держи до тех пор, пока не убедишься, что нужная версия есть в архиве.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии