Arch Linux Archive: откат пакетов на историческую версию
Суть: Arch Linux Archive (ALA) это официальный архив всех когда-либо опубликованных версий пакетов Arch Linux, он живёт на archive.archlinux.org. Если свежее обновление сломало систему, откат делается в три шага: находишь рабочую версию пакета в каталоге packages/, скачиваешь её командой pacman -U и ставишь поверх текущей. ALA, источник старых версий, а не способ установки: сам процесс разобран в статье «Установка конкретной версии пакета из кеша».
Что такое Arch Linux Archive и зачем он нужен?
ALA: это снимок всего, что когда-либо публиковалось в официальных репозиториях Arch. Каждый пакет, каждая версия, каждая сборка попадает в архив в момент публикации и остаётся там. Зачем это нужно? Rolling release живёт по принципу «всегда свежее», но свежее не всегда значит лучше. Новая версия ядра, glibc или драйвера может принести регрессию, и тогда единственный быстрый способ вернуть рабочую систему: поставить предыдущую версию пакета.
Когда это нужно? Три типичных сценария. Первый: обновил систему, и что-то перестало работать, откатываешь подозрительный пакет. Второй: новая версия принесла регрессию, о которой уже пишут на форумах, а фикс ещё не вышел. Третий: нужно сравнить поведение старой и новой версии, чтобы понять, кто виноват, пакет или твоя конфигурация.
Архив решает именно эту задачу: он хранит историю, по которой можно откатиться. Официальные зеркала такой истории не дают, там только текущее состояние репозиториев.
Как устроен archive.archlinux.org?
Архив состоит из двух больших деревьев: 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/ по дате. Дата в пути: это дата публикации снимка, а не дата сборки пакетов.
Как откатить пакет через pacman -U?
Когда версия найдена, установка тривиальна:
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 нельзя: бинарник может просто не запуститься. Тогда откатываешь и зависимости, причём из снимка той же даты.
Порядок такой:
- Найди в packages/ версию пакета, которая работала.
- Посмотри, от каких библиотек она зависит.
- Скачай из архива те же версии этих библиотек: желательно из снимка той же даты.
- Установи всё одной командой:
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. Она умеет:
- показывать список доступных версий пакета из кеша и из ALA;
- ставить выбранную версию через pacman -U;
- запоминать выбор, чтобы pacman не перезаписал её при следующем обновлении.
Установка стандартная для AUR:
yay -S downgrade
После установки запускаешь downgrade с именем пакета и выбираешь версию из списка. Утилита сама скачает файл из архива и поставит его, а в конце предложит добавить пакет в IgnorePkg, тогда следующее обновление не вернёт всё назад.
Частые вопросы
Откат через ALA безопасен?
Да, если версия пакета подписана корректно. pacman -U проверяет подпись автоматически и откажет установку повреждённого или неподписанного файла. Риск не в самом откате, а в несовместимости старых версий с новыми зависимостями, поэтому откатывай зависимости вместе с пакетом.
Чем ALA отличается от обычного зеркала?
Зеркало хранит только текущее состояние репозиториев. ALA хранит все когда-либо опубликованные версии. Обновляться с ALA нельзя, откатываться можно.
Что делать, если нужной версии нет в архиве?
Проверь кеш pacman (/var/cache/pacman/pkg): там могут лежать старые версии. Если и там пусто, остаётся собрать пакет из старого PKGBUILD или жить с текущей версией. Зеркала в этой ситуации не помогут: там только актуальные версии.
Можно ли откатить ядро через ALA?
Можно, но вместе с ядром откатывай linux-headers и модули той же версии. Смешивать версии ядра и заголовков нельзя, сборка модулей сломается.
Полезные ресурсы
- Arch Linux Archive, ArchWiki: официальная документация по структуре архива.
- Downgrading packages, ArchWiki: обзор всех способов отката, включая ALA и утилиту downgrade.
Заключение
Arch Linux Archive: это официальная история всех версий пакетов Arch. Когда свежее обновление ломает систему, откат через ALA занимает пару минут: нашёл версию в packages/, поставил через pacman -U, при необходимости откатил зависимости из снимка той же даты. Помни про два ограничения: архив не гарантирует вечное хранение каждой версии, а ядро, заголовки и модули откатываются только вместе. Кеш pacman держи до тех пор, пока не убедишься, что нужная версия есть в архиве.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии