Все об Arch Linux

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

«warning: local is newer than core» — рассинхрон зеркал

Сразу к делу: warning: local is newer than core появляется, когда установленный у тебя пакет новее, чем версия в репозитории. Pacman видит, что зеркало предлагает более старую сборку, и пропускает «обновление», чтобы не откатывать пакет. Причина почти всегда одна — рассинхрон зеркала с основными репозиториями Arch. Лечится принудительным обновлением баз командой pacman -Syy и повторным pacman -Syu.

Что значит warning: local is newer than core?

Pacman сравнивает версии пакетов по схеме epoch:pkgver-pkgrel. Сначала сравнивается epoch, потом pkgver, потом pkgrel. Если локальная версия выше хотя бы по одному из полей, pacman считает пакет «новее» и не ставит версию из репозитория. Вместо установки он печатает предупреждение и пропускает пакет.

Разберём на примере. У тебя установлен mesa 24.2.8-1, а зеркало предлагает 24.2.7-1. Pacman сравнивает pkgver: 24.2.8 против 24.2.7, видит, что локальная версия выше, и пропускает пакет. Тот же результат, если отличается только pkgrel — например, 24.2.8-2 против 24.2.8-1. А вот epoch важнее всего: если у репозитория epoch выше, pacman обновит пакет, даже когда pkgver ниже.

Это защита от отката. По умолчанию pacman не понижает версии пакетов, и warning: local is newer than core — штатное поведение, а не ошибка. Система продолжает работать с локальной версией пакета.

Опасность не в самом предупреждении, а в его причине. Если зеркало отстаёт, ты не получаешь настоящие обновления, а часть пакетов может «пропасть» из репозитория. Поэтому предупреждение — повод проверить зеркала, а не игнорировать его.

Почему зеркало рассинхронизировано?

Зеркала Arch синхронизируются с главного сервера не мгновенно. Между появлением пакета на архиве и его копией на конкретном зеркале проходит время. В этот промежуток возможны два состояния:

  • repo.db на зеркале уже свежий, а сами пакеты ещё старые. Pacman видит новые версии в базе, но при скачивании получает старые файлы.
  • Пакеты уже обновились, а repo.db ещё нет. Pacman не видит новых версий вовсе и считает локальные пакеты «новее».

Оба состояния дают warning: local is newer than core или ошибку «target not found».

Зеркала синхронизируются с главного сервера по расписанию, у каждого своего. Часть зеркал тянет файлы напрямую, часть — с других зеркал, поэтому отставание у всех разное. В любой момент времени часть зеркал свежая, а часть отстаёт на несколько часов. Именно поэтому одна и та же команда на разных зеркалах даёт разные результаты.

Ещё одна причина — частичное обновление. Если ты обновлял систему не полностью, часть пакетов осталась старых версий. При следующем полном обновлении pacman может посчитать их «новее» репозитория. Подробнее — в статье «Частичное обновление в Arch Linux».

Иногда пакет не пропал, а переименован или разбит на несколько. Например, пакет разделили на основной и дополнительные, и старое имя больше не существует. В этом случае pacman тоже пишет, что пакет не найден, хотя с зеркалом всё в порядке.

Почему пакет «пропал» из multilib?

Вторая частая жалоба — пакеты lib32-* внезапно перестают находиться. Например, lib32-mesa или lib32-vulkan-* исчезают из поиска или не обновляются. Причины:

  • Репозиторий multilib отключён в /etc/pacman.conf.
  • Зеркало не синхронизирует multilib. Часть зеркал вообще не несёт multilib, часть обновляет его с задержкой.
  • repo.db на зеркале взят из другого снимка, и пакет в нём ещё не появился.

Типичная картина: вчера lib32-* обновлялись, сегодня pacman -Syu их не видит, а pacman -Ss lib32-mesa возвращает пустоту. При этом 64-битные пакеты обновляются нормально. Это почти всегда зеркало: multilib на нём либо не синхронизируется вовсе, либо синхронизируется реже, чем core и extra.

Проверь, включён ли multilib:

grep -A2 '^\[multilib\]' /etc/pacman.conf

Должно быть:

[multilib]
Include = /etc/pacman.d/mirrorlist

Если секции нет или она закомментирована — раскомментируй и обнови базы:

sudo pacman -Syy

Как проверить, что зеркало отстаёт?

Сначала посмотри, в каком репозитории лежит пакет:

pacman -Si lib32-mesa

В выводе поле Repository покажет, откуда берётся пакет. Если пакета нет в базе, pacman -Si вернёт ошибку «target not found».

Сравни установленную версию с версией в репозитории:

pacman -Qi lib32-mesa
pacman -Si lib32-mesa

Поля Version в обоих выводах должны совпадать. Если локальная версия выше — зеркало отстаёт.

Принудительно скачай свежие базы со всех зеркал:

sudo pacman -Syy

Ключ -yy заставляет pacman скачать repo.db заново, даже если файл уже есть. Обычный pacman -Sy пропускает загрузку, когда база на месте, и при рассинхроне не помогает.

Узнать, с какого зеркала pacman скачивает базы, можно по выводу pacman -Syy — в начале каждой строки стоит адрес зеркала. Если адрес один и тот же для всех репозиториев — работает одно зеркало, и его состояние определяет всё.

Как проверить статус зеркала?

На странице статуса зеркал на archlinux.org видно, когда каждое зеркало синхронизировалось в последний раз. Если зеркало отстаёт на несколько часов или дней — оно в списке рассинхронизированных, и от него стоит отказаться.

Свежесть базы можно проверить и локально. Файлы repo.db лежат в /var/lib/pacman/sync/:

ls -l /var/lib/pacman/sync/

Дата изменения файла показывает, когда база скачана в последний раз. Если core.db старше нескольких часов, а обновления в репозитории выходят регулярно — зеркало отстаёт. Свежая база — необходимое условие, но не достаточное: сам файл мог обновиться, а пакеты на зеркале ещё нет. Поэтому после проверки базы всегда сверяй версии через pacman -Si и pacman -Qi.

Как починить рассинхрон зеркал?

После pacman -Syy выполни полное обновление:

sudo pacman -Syu

Если предупреждение исчезло — зеркало просто отставало. Если нет — смени зеркало. Поставь в начало /etc/pacman.d/mirrorlist зеркало с гео-балансировкой:

Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch

Оно автоматически направляет на ближайшее синхронизированное зеркало. Как выбрать и проверить зеркала — в статье «Медленные зеркала и reflector».

Если хочешь автоматизировать выбор зеркал — используй reflector. Он опрашивает зеркала, сортирует по скорости и записывает свежий список:

sudo reflector --latest 10 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

После этого снова выполни pacman -Syy и pacman -Syu.

После смены зеркала проверь, что все три репозитория — core, extra и multilib — обновились. Вывод pacman -Syy должен показать загрузку всех трёх баз. Если multilib в списке нет — секция в /etc/pacman.conf отключена, вернись к разделу про multilib.

Иногда достаточно подождать. Синхронизация зеркал занимает от нескольких минут до получаса. Если пакет пропал из-за рассинхрона, через полчаса он обычно появляется снова.

Почему не стоит форсировать установку?

Соблазн поставить пакет в обход предупреждения понятен, но обходные пути опасны.

pacman -S <пакет> --ignore=... не решает проблему. --ignore исключает пакет из обновления, а не ставит нужную версию. Использовать его для «починки» рассинхрона — значит замаскировать симптом. Это рабочий инструмент, когда нужно осознанно заморозить версию пакета, но для лечения рассинхрона он бесполезен: пакет останется старым, а предупреждение вернётся при следующем обновлении.

Установка локального пакета через pacman -U с более старой версией — это откат. Если пакет тянет зависимости, pacman может потребовать откатить и их, а это уже частичное обновление со всеми его последствиями. Правильный способ откатить пакет — через архив Arch Linux, об этом отдельная статья «Откат пакетов через архив Arch Linux».

Пример: зеркало отстаёт по lib32-mesa, и ты ставишь старую версию через pacman -U. Если старая версия требует старый mesa, pacman предложит откатить и его. Дальше — цепочка откатов, и система уходит в частичное обновление. Чинить это потом сложнее, чем подождать полчаса.

В большинстве случаев «local is newer» лечится ожиданием или сменой зеркала, а не принудительной установкой.

Как проверить результат?

После смены зеркала или ожидания:

sudo pacman -Syy
sudo pacman -Syu

Затем сверь версии:

pacman -Qi <пакет>
pacman -Si <пакет>

Если Version совпадают и предупреждений нет — всё в порядке. Полный разбор команд pacman — в статье «Pacman от А до Я».

Частые вопросы

warning: local is newer than core — это опасно?

Нет. Система продолжает работать с локальной версией пакета. Опасен не сам отказ от обновления, а причина: рассинхронизированное зеркало может скрывать настоящие обновления. Если предупреждение повторяется для многих пакетов сразу — зеркало отстаёт системно, меняй его.

Почему pacman -Sy не помогает?

Обычный pacman -Sy скачивает базы, только если файл repo.db изменился. При рассинхроне зеркало может отдавать тот же файл, поэтому нужен pacman -Syy — он принудительно скачивает базы заново.

Пакет пропал из multilib — это навсегда?

Нет. Чаще всего зеркало просто не синхронизировало multilib. Проверь /etc/pacman.conf, выполни pacman -Syy и при необходимости смени зеркало на то, которое несёт multilib. Узнать, какие репозитории поддерживает зеркало, можно на странице статуса зеркал на archlinux.org.

Можно ли поставить пакет вручную, если зеркало отстаёт?

Можно, но не нужно. pacman -U с локальным файлом или --ignore маскируют проблему и могут привести к частичному обновлению. Правильный путь — дождаться синхронизации или сменить зеркало. Исключение — осознанный откат через архив Arch Linux, но это отдельная операция, а не способ обойти предупреждение.

Как понять, что пакет переименован, а не пропал?

Сравни вывод pacman -Si со старым именем и поищи новое имя в базе. Если пакет переименован, в PKGBUILD обычно указано поле replaces. Проверить можно через pacman -Ss <ключевое слово>.

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

Заключение

warning: local is newer than core — сигнал рассинхрона зеркала, а не поломки системы. Pacman отказывается откатывать пакет, и это правильно. Лечение простое: pacman -Syy, затем pacman -Syu, при необходимости — смена зеркала. Пропавшие пакеты из multilib почти всегда возвращаются после принудительного обновления баз или перехода на зеркало, которое синхронизирует multilib. Не форсируй установку в обход предупреждения — дождись синхронизации или смени зеркало. Тогда обновления снова пойдут ровно, без предупреждений и пропавших пакетов.



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

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

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

Комментарии

Загрузка…

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

Telegram Max