Все об Arch Linux

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

Пакеты из чужой архитектуры: wrong architecture

Сразу к делу: предупреждение warning: ...: ignoring package with invalid architecture (в старых версиях pacman это wrong architecture) появляется, когда пакет собран для другой архитектуры, чем твой процессор. Чаще всего это сборка для x86_64_v3, а у тебя обычный x86_64. Не игнорируй предупреждение: найди пакет для своей архитектуры или собери его из исходников.

Что значит ошибка wrong architecture

Pacman перед установкой сверяет архитектуру пакета с архитектурой системы. Поле arch в PKGBUILD и в метаданных собранного пакета хранит, для какого процессора он собран. Если значения не совпадают, менеджер пакетов пропускает файл и пишет предупреждение. Проверка работает и при синхронизации репозиториев, и при установке скачанного файла через pacman -U.

Откуда pacman знает архитектуру пакета? При сборке makepkg записывает её в файл .PKGINFO внутри архива. Там же лежат версия, зависимости и контрольные суммы. При установке pacman читает этот файл и сравнивает поле arch с архитектурой системы. Если в /etc/pacman.conf задана опция Architecture, проверка идёт по ней.

В новых версиях pacman текст такой:

warning: firefox: ignoring package with invalid architecture

В старых версиях ошибка выглядела иначе:

error: firefox: wrong or unknown architecture: 'x86_64_v3'

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

Почему pacman ругается на архитектуру пакета

Официальные репозитории Arch собираются только для x86_64, поэтому в обычной системе ошибка не появляется. Чужие пакеты попадают в систему несколькими путями.

Сторонние репозитории для другой микроархитектуры

CachyOS, Chaotic-AUR и другие проекты собирают пакеты с оптимизациями под x86_64_v3. Если ты добавил такой репозиторий в /etc/pacman.conf, pacman начнёт видеть пакеты с чужой архитектурой. Подробнее про подключение сторонних репозиториев читай в статье «Свой репозиторий: repo-add».

Скачанные пакеты из чужого каталога

Файлы .pkg.tar.zst с форумов, из чужих кэшей или с сайтов собираются на чужих машинах. Скачал такой файл, запустил pacman -U и получил предупреждение об архитектуре. Та же история с импортом пакетов из Manjaro: там свои сборки, и они не всегда совместимы с Arch. Разбор читай в статье «Импорт пакетов из Manjaro».

Чужие AUR-сборки

AUR-пакеты собираются из исходников на твоей машине, поэтому архитектура там всегда своя. Но если кто-то выложил готовый бинарник в комментариях к AUR-странице, он собран на другом процессоре. Ставить такие файлы вслепую нельзя.

Опция Architecture в pacman.conf

Отдельный случай: опция Architecture в /etc/pacman.conf. По умолчанию pacman берёт архитектуру из uname -m, но её можно переопределить вручную. Если ты прописал там x86_64_v3, а процессор старый, pacman начнёт ругаться на все официальные пакеты. Верни значение x86_64 или удали строку.

Что такое x86_64, x86_64_v3 и any в PKGBUILD

Поле arch в PKGBUILD описывает, для каких архитектур собирается пакет. Три значения встречаются чаще всего.

  • any: пакет не зависит от процессора. Скрипты, шрифты, документация, темы. Такой пакет ставится на любую архитектуру.
  • x86_64: базовая архитектура x86-64. Официальные репозитории Arch собирают именно так.
  • x86_64_v3: микроархитектурный уровень с дополнительными инструкциями: AVX2, FMA, BMI1, BMI2. Сборки для него быстрее, но требуют современный процессор.

Уровни микроархитектуры x86-64 нумеруются от v1 до v4. v1: базовый набор инструкций, который понимает любой 64-битный процессор. v2 добавляет SSE4.2 и POPCNT. v3: AVX2 и FMA. v4: AVX-512, его используют редко. Чем выше уровень, тем быстрее код, но тем новее нужен процессор.

Как проверить архитектуру пакета и своего процессора

Сначала узнай, какую архитектуру видит система:

uname -m

Вывод x86_64 означает базовый уровень. Он не показывает, поддерживает ли процессор AVX2. Проверь это отдельно:

grep -c avx2 /proc/cpuinfo

Число больше нуля: AVX2 есть, процессор тянет сборки x86_64_v3. Для полной проверки уровня v3 нужны ещё флаги bmi1 и fma:

grep -o -m1 'avx2\|bmi1\|fma' /proc/cpuinfo

Теперь посмотри архитектуру пакета. Для пакета из репозитория:

pacman -Si firefox

В выводе ищи строку «Архитектура» (Architecture). pacman -Si показывает данные из синхронизированной базы репозиториев, пакет скачивать не нужно. Для скачанного файла:

pacman -Qip ./firefox-xxx.pkg.tar.zst

Команда читает метаданные прямо из архива и показывает архитектуру до установки. Для уже установленного пакета аналогично работает pacman -Qi firefox.

Что такое x86_64_v3 и кому он подходит

x86_64_v3 это не отдельная архитектура, а уровень оптимизации. Сборки для него компилируются с флагом -march=x86-64-v3, и компилятор использует инструкции AVX2, FMA и BMI. Код получается компактнее и быстрее: меньше инструкций на одну операцию, лучше работа с векторами.

Прирост производительности зависит от задачи. В среднем это несколько процентов, в тяжёлых вычислениях (кодирование видео, компиляция, рендеринг) заметно больше. Для повседневных программ разница почти незаметна.

Кому подходят такие сборки: владельцам процессоров Intel Haswell и новее (2013 год и позже) и AMD Excavator, Zen и новее. Проверка одна: флаг avx2 в /proc/cpuinfo. Если его нет, сборки x86_64_v3 не запустятся.

Готовые репозитории с такими сборками держат CachyOS и Chaotic-AUR. Они пересобирают пакеты Arch с флагами оптимизации и выкладывают в свои зеркала. Подключать их стоит только если процессор точно поддерживает AVX2, иначе половина пакетов просто не установится.

Чем опасно ставить пакет из чужой архитектуры

Обычная установка не даст поставить несовместимый пакет, но у pacman есть флаг --ignorearch, который отключает проверку. Использовать его не стоит.

Даже если пакет встанет, ты не получишь нормальных обновлений. Официальные репозитории не знают про чужую сборку, и pacman -Syu попытается заменить её своей версией. В лучшем случае пакет перезапишется, в худшем система останется с битыми зависимостями.

На старом процессоре без AVX2 программа с инструкциями v3 упадёт с segfault при первом же обращении к такой инструкции. Не «медленно работает», а именно падает: процессор не понимает команду и выбрасывает исключение.

На новом процессоре пакет x86_64_v3 запустится, но смешивать архитектуры всё равно плохо. Обновление из официального репозитория перезапишет пакет версией x86_64, зависимости начнут конфликтовать, и система придёт в нестабильное состояние. Предупреждение pacman это сигнал остановиться и разобраться, а не повод жать --ignorearch.

Как исправить ошибку wrong architecture

Порядок действий зависит от того, откуда взялся пакет.

  1. Не игнорируй предупреждение. Выясни источник пакета: pacman -Si покажет репозиторий, pacman -Qip покажет метаданные файла.
  2. Если пакет из стороннего репозитория x86_64_v3, отключи его в /etc/pacman.conf или найди вариант для обычного x86_64. У CachyOS и Chaotic есть репозитории для базовой архитектуры.
  3. Если пакет скачан вручную, скачай версию для своей архитектуры. У большинства проектов есть отдельные сборки.
  4. Если пакет из AUR, собери его сам через makepkg. Сборка из исходников всегда подстраивается под твой процессор. Как это работает, читай в статье «Установка пакетов из AUR».
  5. Если пакет из своего репозитория, пересобери его на своей машине и обнови repo-add.

Общая методика диагностики таких проблем описана в статье «Методика решения проблем в Arch Linux».

Как отличить зеркала x86_64 от x86_64_v3

Официальные зеркала Arch содержат только каталог x86_64. Сторонние репозитории с оптимизациями держат отдельные каталоги: x86_64_v3 в URL зеркала означает микроархитектурный репозиторий. Посмотри на путь в /etc/pacman.conf и в mirrorlist:

grep -r "x86_64_v3" /etc/pacman.conf /etc/pacman.d/

Если нашёл, ты подключил репозиторий для другой микроархитектуры. В URL сторонних зеркал каталог выглядит как x86_64_v3 или x86-64-v3. Официальные зеркала Arch такого каталога не имеют вообще. Открой mirrorlist и посмотри на пути: core/os/x86_64 это официальное зеркало, core/os/x86_64_v3 это стороннее.

pacman -Si firefox | grep -i "репозиторий"

Название репозитория в выводе подскажет источник. Настройка зеркал разобрана в статье «Настройка зеркал Arch Linux».

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

Почему pacman пишет wrong architecture при установке из AUR?

AUR-пакеты собираются из исходников на твоей машине, поэтому ошибка архитектуры там редка. Но если ты скачал готовый бинарник из комментариев к AUR-странице или с чужого сайта, он собран на другом процессоре. Собирай сам через makepkg.

Можно ли поставить пакет x86_64_v3 на старый процессор?

Нет. Процессор без AVX2 не выполнит инструкции, и программа упадёт с segfault. Проверь поддержку заранее: grep -c avx2 /proc/cpuinfo.

Чем x86_64_v3 лучше обычного x86_64?

Сборки используют AVX2, FMA и BMI, поэтому код быстрее. В среднем прирост несколько процентов, в тяжёлых вычислениях больше. Для обычного пользователя разница почти незаметна.

Как узнать, поддерживает ли мой процессор x86_64_v3?

Выполни grep -c avx2 /proc/cpuinfo. Если вывод больше нуля, поддержка есть. Для полной уверенности проверь ещё флаги bmi1 и fma.

Что делать, если пакет из официального репозитория ругается на архитектуру?

Значит, в mirrorlist или в /etc/pacman.conf попал сторонний репозиторий. Проверь оба файла и убери лишние записи. Официальные репозитории Arch собираются только для x86_64.

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

Заключение

Ошибка wrong architecture это защита pacman от пакетов, собранных для другого процессора. Чаще всего за ней стоит сборка x86_64_v3, а у тебя обычный x86_64. Проверь архитектуру пакета через pacman -Si или pacman -Qip, сверь с флагами своего CPU через grep avx2 /proc/cpuinfo и найди версию для своей архитектуры или собери из исходников. Игнорировать предупреждение и ставить пакет через --ignorearch не стоит: на старом процессоре программа упадёт, на новом сломает систему смешиванием архитектур.



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

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

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

Комментарии

Загрузка…

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

Telegram Max