Ambos archivos son de 32 bits y solo uno de ellos se ejecuta en tu placa. Una compilación ELF32 para Intel y una compilación ELF32 para ARM coinciden en el campo de clase y discrepan en todo lo que importa. Una página de descarga que ofrece una opción de 32 bits no te ha dicho casi nada hasta que lees la cabecera del archivo que realmente descargaste. Cambiarle el nombre no cambia ni una instrucción.

La clase y la máquina responden a preguntas distintas

El campo de clase dice si el archivo usa estructuras de 32 bits o de 64 bits. El campo de máquina nombra el conjunto de instrucciones para el que se compiló el archivo. Leer solo el primero es como una compilación x86 acaba en una placa ARM con un nombre de archivo que parece del todo plausible. Ambos valores vienen del mismo comando, por eso es tan fácil saltarse uno.

La misma confusión se aplica a las etiquetas de 64 bits, donde aarch64 y x86-64 comparten un tamaño de palabra y ninguna instrucción. Una página de proveedor que enumera una descarga de 64 bits describe su propia compilación, no tu máquina. Comprueba la cabecera del archivo en lugar del encabezado de la columna de la página.

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

El primer comando imprime la cabecera, incluida la clase y la máquina. El segundo muestra las cabeceras de programa, donde vive una solicitud de intérprete. El tercero te da una línea cuando una tabla es más de lo que necesitas.

Añadir permiso de ejecución o parchear una comprobación de distribución no traduce nada. La emulación, cuando la plataforma la admite, es una decisión de despliegue con su propio coste de rendimiento y dependencias.

Lee la cabecera antes de ejecutar el instalador

Inspecciona un artefacto de confianza antes de ejecutar algo desde él. Un instalador que falla a mitad de camino puede dejar bibliotecas reemplazadas y nada funcionando, lo que es un peor punto de partida que el archivo con el que empezaste. La inspección de la cabecera es de solo lectura y reversible en el sentido de que nada cambia en el sistema.

Compara el campo de máquina con la arquitectura de paquetes del sistema en ejecución, no con el nombre comercial de la placa. Una CPU de 64 bits que ejecuta un espacio de usuario de 32 bits necesita la compilación de 32 bits, y ese detalle decide qué descarga es nativa. La capacidad de la placa no es la restricción; el espacio de usuario instalado lo es.

dpkg --print-architecture
uname -m
getconf LONG_BIT

El primer comando informa de la arquitectura para la que el sistema instala paquetes, y es el valor que debe coincidir. Los otros dos describen el núcleo y el tamaño de palabra, y pueden discrepar del espacio de usuario en una instalación multiarquitectura.

Cuando esas respuestas discrepan, decide cuál admite el proveedor antes de descargar otro archivo. Adivinar produce un bucle de instalaciones que fallan cada una en un punto distinto, y cada fallo parece un problema nuevo.

Comprueba el intérprete, no solo la arquitectura

Un ejecutable dinámico registra el cargador que espera en una cabecera de programa. En un sistema con una ruta de cargador distinta, el núcleo se niega a iniciar el archivo aunque el campo de máquina coincida exactamente. Ese es el fallo que envía a la gente a buscar bibliotecas que faltan.

El mensaje de error te dice en qué caso estás, y los dos casos son fáciles de confundir. Un rechazo de formato o de arquitectura difiere de un archivo o intérprete que falta, y solo uno de ellos se corrige instalando otro paquete.

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

El primer comando muestra la ruta del intérprete que solicita el binario. El segundo comprueba si esa ruta existe, lo que separa una compilación equivocada de un cargador que falta.

No ejecutes un listador de dependencias contra un binario que no sea de confianza, porque algunas implementaciones pueden ejecutar el archivo que inspeccionan. Mantén la inspección en solo lectura y resiste la tentación de añadir enlaces simbólicos del cargador para hacer arrancar una compilación no admitida.

Pide una compilación con los hechos en la mano

Envía al proveedor la versión del sistema operativo, la arquitectura de paquetes, los valores de clase y máquina y el primer mensaje de error. Esa combinación consigue una respuesta útil, mientras que una captura de pantalla de un fallo genérico consigue una plantilla de soporte.

Mantén la cuestión del binario separada de la cuestión de la configuración. Una vez que arranca la compilación correcta, los perfiles, las credenciales y las rutas siguen siendo problemas suyos, y ninguna cantidad de edición de perfiles hará funcionar un binario de arquitectura equivocada.

Artículos relacionados