Ambos os ficheiros son de 32 bits e só un deles se executa na túa placa. Unha compilación ELF32 para Intel e unha compilación ELF32 para ARM coinciden no campo de clase e discrepan en todo o que importa. Unha páxina de descarga que ofrece unha opción de 32 bits non che dixo case nada ata que les a cabeceira do ficheiro que descargaches realmente. Cambiarlle o nome non cambia nin unha instrución.

A clase e a máquina responden preguntas distintas

O campo de clase di se o ficheiro usa estruturas de 32 bits ou de 64 bits. O campo de máquina nomea o conxunto de instrucións para o que se compilou o ficheiro. Ler só o primeiro é como unha compilación x86 acaba nunha placa ARM cun nome de ficheiro que parece totalmente plausible. Ambos os valores veñen do mesmo comando, por iso é tan fácil saltarse un.

A mesma confusión se aplica ás etiquetas de 64 bits, onde aarch64 e x86-64 comparten un tamaño de palabra e ningunha instrución. Unha páxina de provedor que lista unha descarga de 64 bits describe a súa propia compilación, non a túa máquina. Comproba a cabeceira do ficheiro en lugar do encabezado da columna da páxina.

readelf -h ./vendor-vpn
readelf -l ./vendor-vpn | head -20
file ./vendor-vpn

O primeiro comando imprime a cabeceira, incluídas a clase e a máquina. O segundo mostra as cabeceiras de programa, onde vive unha solicitude de intérprete. O terceiro dálle unha liña cando unha táboa é máis do que precisas.

Engadir permiso de execución ou parchear unha comprobación de distribución non traduce nada. A emulación, cando a plataforma a admite, é unha decisión de despregamento co seu propio custo de rendemento e dependencias.

Le a cabeceira antes de executar o instalador

Inspecciona un artefacto de confianza antes de executar algo del. Un instalador que falla a metade de camiño pode deixar bibliotecas substituídas e nada funcionando, o que é un peor punto de partida que o arquivo co que comezaches. A inspección da cabeceira é de só lectura e reversible no sentido de que nada cambia no sistema.

Compara o campo de máquina coa arquitectura de paquetes do sistema en execución, non co nome comercial da placa. Unha CPU de 64 bits que executa un espazo de usuario de 32 bits necesita a compilación de 32 bits, e ese detalle decide que descarga é nativa. A capacidade da placa non é a restrición; o espazo de usuario instalado si.

dpkg --print-architecture
uname -m
getconf LONG_BIT

O primeiro comando informa da arquitectura para a que o sistema instala paquetes, e é o valor que debe coincidir. Os outros dous describen o núcleo e o tamaño de palabra, e poden discrepar do espazo de usuario nunha instalación multiarquitectura.

Cando esas respostas discrepan, decide cal admite o provedor antes de descargar outro arquivo. Adiviñar produce un bucle de instalacións que fallan cada unha nun punto distinto, e cada fallo parece un problema novo.

Comproba o intérprete, non só a arquitectura

Un executábel dinámico rexistra o cargador que agarda nunha cabeceira de programa. Nun sistema cunha ruta de cargador distinta, o núcleo négase a iniciar o ficheiro aínda que o campo de máquina coincida exactamente. Ese é o fallo que envía a xente a buscar bibliotecas que faltan.

A mensaxe de erro di en que caso estás, e os dous casos son fáciles de confundir. Un rexeitamento de formato ou de arquitectura difire dun ficheiro ou intérprete que falta, e só un deles se corrixe instalando outro paquete.

readelf -l ./vendor-vpn | grep -A1 INTERP
ls -l /lib64/ld-linux-x86-64.so.2

O primeiro comando mostra a ruta do intérprete que solicita o binario. O segundo comproba se esa ruta existe, o que separa unha compilación errada dun cargador que falta.

Non executes un listador de dependencias contra un binario que non sexa de confianza, porque algunhas implementacións poden executar o ficheiro que inspeccionan. Mantén a inspección en só lectura e resiste a tentación de engadir ligazóns simbólicas do cargador para facer arrancar unha compilación non admitida.

Pide unha compilación cos feitos na man

Envía ao provedor a versión do sistema operativo, a arquitectura de paquetes, os valores de clase e máquina e a primeira mensaxe de erro. Esa combinación gaña unha resposta útil, mentres que unha captura dun fallo xenérico gaña un modelo de soporte.

Mantén a cuestión do binario separada da cuestión da configuración. Unha vez que arranca a compilación correcta, os perfís, as credenciais e as rutas seguen sendo problemas seus, e ningunha cantidade de edición de perfís fará funcionar un binario de arquitectura errada.

Artigos relacionados