Ваш бинарный файл VPN собран для этого процессора? Прочитайте заголовок ELF
Класс и машина ELF — разные поля, а интерпретатор — третье. Прочитайте все три, прежде чем устанавливать клиент VPN на Pi или любую другую плату.
Оба файла 32-битные, и только один из них работает на вашей плате. Сборка ELF32 для Intel и сборка ELF32 для ARM совпадают в поле класса и расходятся во всём, что имеет значение. Страница загрузки с вариантом 32 бита почти ничего вам не сказала, пока вы не прочитаете заголовок файла, который действительно скачали. Переименование не меняет ни одной инструкции.
Класс и машина отвечают на разные вопросы
Поле класса говорит, использует ли файл 32-битные или 64-битные структуры. Поле машины называет набор инструкций, для которого файл был скомпилирован. Читать только первое — это путь, которым сборка x86 попадает на плату ARM с именем файла, выглядящим совершенно правдоподобно. Оба значения берутся из одной команды, поэтому пропустить одно так легко.
Та же путаница относится к меткам 64 бита, где aarch64 и x86-64 разделяют размер слова и ни одной инструкции. Страница поставщика, где указана одна загрузка 64 бита, описывает его собственную сборку, а не вашу машину. Проверяйте заголовок файла, а не заголовок столбца на странице.
readelf -h ./vendor-vpn readelf -l ./vendor-vpn | head -20 file ./vendor-vpn
Первая команда печатает заголовок, включая класс и машину. Вторая показывает заголовки программы, где находится запрос интерпретатора. Третья даёт одну строку, когда таблица — это больше, чем вам нужно.
Добавление права на выполнение или правка проверки дистрибутива ничего не переводит. Эмуляция, там где платформа её поддерживает, — это решение о развёртывании с собственной ценой по производительности и зависимостям.
Прочитайте заголовок перед запуском установщика
Проверьте доверенный артефакт, прежде чем что-либо из него выполнять. Установщик, который срывается на полпути, может оставить заменённые библиотеки и ничего работающего, а это худшая отправная точка, чем архив, с которого вы начали. Проверка заголовка только для чтения и обратима в том смысле, что в системе ничего не меняется.
Сравните поле машины с архитектурой пакетов работающей системы, а не с маркетинговым названием платы. Процессору 64 бита с 32-битным пользовательским пространством нужна 32-битная сборка, и эта деталь решает, какая загрузка является родной. Ограничение — не возможности платы, а установленное пользовательское пространство.
dpkg --print-architecture uname -m getconf LONG_BIT
Первая команда сообщает архитектуру, для которой система устанавливает пакеты, и именно это значение должно совпадать. Остальные две описывают ядро и размер слова, и они могут расходиться с пользовательским пространством при многоархитектурной установке.
Когда эти ответы расходятся, решите, какую из них поддерживает поставщик, прежде чем скачивать ещё один архив. Угадывание порождает цикл установок, каждая из которых срывается в другом месте, и каждая неудача выглядит как новая проблема.
Проверяйте интерпретатор, а не только архитектуру
Динамический исполняемый файл записывает в заголовке программы загрузчик, которого он ожидает. В системе с другим путём загрузчика ядро отказывается запускать файл, даже если поле машины совпадает точно. Именно эта неудача заставляет людей искать отсутствующие библиотеки.
Сообщение об ошибке говорит, в каком случае вы находитесь, и эти два случая легко перепутать. Отказ из-за формата или архитектуры отличается от отсутствующего файла или интерпретатора, и только один из них исправляется установкой другого пакета.
readelf -l ./vendor-vpn | grep -A1 INTERP ls -l /lib64/ld-linux-x86-64.so.2
Первая команда показывает путь интерпретатора, который запрашивает бинарный файл. Вторая проверяет, существует ли этот путь, что отделяет неправильную сборку от отсутствующего загрузчика.
Не запускайте средство списка зависимостей на недоверенном бинарном файле, потому что некоторые реализации могут исполнять проверяемый файл. Держите проверку только для чтения и сопротивляйтесь желанию добавить символические ссылки загрузчика, чтобы запустить неподдерживаемую сборку.
Попросите сборку, имея факты на руках
Отправьте поставщику версию ОС, архитектуру пакетов, значения класса и машины и первое сообщение об ошибке. Такое сочетание заслуживает полезного ответа, тогда как снимок экрана с общей ошибкой заслуживает шаблона поддержки.
Держите вопрос о бинарном файле отдельно от вопроса о конфигурации. Как только правильная сборка запустится, профили, учётные данные и маршруты остаются их собственными проблемами, и никакое редактирование профиля не заставит бинарный файл с неправильной архитектурой работать.