За този процесор ли е компилиран вашият 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
Първата команда показва пътя на интерпретатора, който бинарникът изисква. Втората проверява дали този път съществува, което отделя грешната сборка от липсващ зареждащ модул.
Не стартирайте инструмент за списък на зависимости върху недоверен бинарник, защото някои реализации могат да изпълнят файла, който преглеждат. Пазете прегледа само за четене и се съпротивлявайте на добавянето на символични връзки към зареждащия модул, за да стартирате неподдържана сборка.
Поискайте сборка с факти в ръка
Изпратете на доставчика версията на ОС, архитектурата на пакетите, стойностите за клас и машина и първото съобщение за грешка. Тази комбинация печели полезен отговор, докато екранна снимка на общ провал печели шаблон за поддръжка.
Дръжте въпроса за бинарника отделно от въпроса за конфигурацията. След като правилната сборка стартира, профилите, идентификационните данни и маршрутите все още са си техни проблеми, и никакво редактиране на профил няма да накара бинарник с грешна архитектура да работи.