Cómo instalar plugins SA-MP en Linux: guía práctica para VPS
Tutorial técnico para instalar plugins SA-MP en VPS Linux: descargar .so de 32 bits, configurar server.cfg, validar dependencias y resolver errores comunes.
Los plugins son lo que hace que SA-MP sea utilizable en producción: streamer (para mapas grandes sin límite de objetos), mysql (persistencia), sscanf (parseo de comandos), entre otros. En Linux la instalación es más sensible que en Windows, principalmente por la arquitectura de 32 bits del servidor: descargar un .so de 64 bits es la causa más frecuente de “el plugin no carga” en VPS recién aprovisionadas.
Este tutorial cubre el flujo completo: descargar el plugin correcto, colocarlo en el lugar adecuado, declararlo en server.cfg, resolver dependencias glibc y validarlo mediante el log. La persona objetivo es el dueño de un servidor SA-MP que está migrando de un hosting gestionado a una VPS Linux y necesita entender por qué comandos que “siempre funcionaron” en Windows fallan silenciosamente en Linux.
Tiempo estimado: 15 a 20 minutos por plugin, contando descarga y validación. Para un servidor con 4 o 6 plugins, calcula una hora de configuración inicial.
Requisitos previos
VPS Linux con SA-MP server 0.3.7-R2 ya instalado y funcionando (sin plugins). Acceso sudo para instalar paquetes de 32 bits. Conocimientos básicos de SSH y edición de archivos con nano o vim.
Antes de empezar, valida los puntos de referencia de tu servidor. Vas a necesitar estos datos a lo largo del tutorial:
i386 (32 bits) plugins/ server.cfg server_log.txt Confirma que estás en el directorio del servidor SA-MP:
cd ~/samp03
ls -la samp03svr
La salida debe mostrar el binario samp03svr con permiso de ejecución. Si lo instalaste en otra ruta, ajusta los comandos del tutorial. Confirma también la arquitectura del binario:
file samp03svr
La salida esperada contiene ELF 32-bit LSB executable, Intel 80386. Eso confirma que necesitas plugins de 32 bits, independientemente de que la VPS ejecute un kernel de 64 bits.
Instalar dependencias de 32 bits en el sistema
El kernel de la mayoría de las VPS modernas es de 64 bits, pero el servidor SA-MP está compilado para 32 bits. Para que el binario y los plugins encuentren sus librerías, debes instalar las variantes i386 de glibc y de libstdc++.
Habilita la arquitectura i386 en dpkg (necesario en Debian/Ubuntu de 64 bits):
sudo dpkg --add-architecture i386
sudo apt updateEsto hace que el gestor de paquetes reconozca los paquetes de 32 bits como instalables en el sistema. Sin este paso, apt rechaza los paquetes con sufijo :i386 indicando que no están disponibles.
Instala las librerías que el servidor SA-MP y la mayoría de los plugins necesitan:
sudo apt install -y libc6:i386 libstdc++6:i386 lib32gcc-s1 zlib1g:i386libc6 es la glibc de 32 bits: la base de todo. libstdc++6 es necesaria para plugins compilados en C++ (la gran mayoría). lib32gcc-s1 aporta el runtime de GCC de 32 bits. zlib1g aparece como dependencia indirecta en plugins que comprimen datos.
Si vas a usar el plugin MySQL R39+, instala también libmariadb-dev-compat:i386 o libmysqlclient21:i386. Sin esto el plugin carga pero falla en cualquier consulta con Could not load libmariadb.
Descargar el plugin correcto
Este es el paso donde ocurren la mayoría de los errores. Los plugins tienen releases separados para Windows (.dll) y Linux (.so), y dentro de Linux existe además la división entre 32 y 64 bits. Elegir el equivocado resulta en Failed. en el log sin explicación clara.
Identifica el repositorio oficial del plugin. Los más comunes:
- streamer — github.com/samp-incognito/samp-streamer-plugin
- sscanf — github.com/Y-Less/sscanf
- mysql (R41) — github.com/pBlueG/SA-MP-MySQL
- fixes2 — github.com/Y-Less/samp-plugin-fixes2
Entra en Releases y busca el archivo de Linux. El nombre varía: streamer-2.9.6-linux.zip, sscanf.so, mysql-R41-4-linux-static.tar.gz.
Descarga directamente en el servidor con wget. Ejemplo para streamer:
cd /tmp
wget https://github.com/samp-incognito/samp-streamer-plugin/releases/download/v2.9.6/samp-streamer-plugin-2.9.6-linux.zip
unzip samp-streamer-plugin-2.9.6-linux.zipDentro del .zip normalmente hay plugins/streamer.so (32 bits) y/o plugins/streamer.x64.so. Usa siempre el que no tenga sufijo .x64.
Valida la arquitectura del .so antes de copiarlo al servidor:
file plugins/streamer.soLa salida debe contener ELF 32-bit LSB shared object, Intel 80386. Si aparece x86-64, descargaste el incorrecto: vuelve al release y toma el otro archivo.
Los plugins precompilados publicados en foros o Discord pueden contener backdoors (hay casos documentados en la comunidad SA-MP). Usa siempre el release oficial del repositorio en GitHub del autor. Si necesitas modificarlo, compílalo tú mismo desde el código fuente.
Mover el plugin y ajustar permisos
El loader de SA-MP busca los archivos .so en una única ruta: el directorio plugins/ junto al binario. No hay configuración para cambiar esto.
Crea el directorio plugins/ si todavía no existe y copia el .so:
cd ~/samp03
mkdir -p plugins
cp /tmp/plugins/streamer.so plugins/Repite el procedimiento para cada plugin que descargues. Mantén el nombre original del archivo: lo referenciaremos en server.cfg sin el .so.
Ajusta los permisos. El archivo debe ser legible y ejecutable por el usuario que ejecuta el servidor:
chmod 644 plugins/*.soLos permisos 755 también funcionan pero no son necesarios: el .so se carga vía dlopen, no se ejecuta directamente. En servidores compartidos, evita 777 por principio.
Registrar los plugins en server.cfg
server.cfg controla qué plugins intenta cargar el servidor al iniciar. La línea plugins acepta nombres separados por espacio, en el orden deseado.
Abre server.cfg en el editor:
nano server.cfgBusca la línea plugins (puede no existir todavía). Si no la hay, agrégala al inicio del archivo. El formato es una sola línea:
plugins streamer sscanf mysqlImportante: sin .so, sin ruta, separados por espacio. El loader añade .so automáticamente y busca en plugins/.
Guarda (Ctrl+O en nano, Enter, Ctrl+X) y valida la línea. Los errores de tipeo aquí resultan en Failed. en el log con un nombre corrompido: streame en vez de streamer.
Cuando un plugin depende de otro, declara al dependiente después. mysql antes de cualquier plugin que haga consultas en el startup; streamer antes de scripts que registren dinámicos mediante callbacks. Cuando dudes, lee el README del plugin: los autores documentan el orden necesario.
Verificación
Con todo en su lugar, levanta el servidor y revisa el log para confirmar que cada plugin se cargó.
Inicia el servidor en primer plano para ver la salida en tiempo real:
./samp03svrEn los primeros segundos, el servidor enumera los plugins. Debes ver algo como:
Loading plugin: streamer.so
*** Streamer Plugin v2.9.6 by Incognito loaded ***
Loaded.
Loading plugin: sscanf.so
===============================
sscanf plugin loaded.
Version: 2.8.3
(c) 2022 Alex "Y_Less" Cole
===============================
Loaded.Cada plugin termina con Loaded. en su propia línea. Si aparece Failed., el mensaje de error viene en la línea inmediatamente anterior: anota el nombre exacto del error.
Detén el servidor (Ctrl+C) y revisa server_log.txt:
grep -E "Loaded\.|Failed\." server_log.txt | tail -20Debes ver una línea Loaded. por cada plugin declarado en server.cfg. Si la cantidad de Loaded. es menor que la esperada, alguno no se cargó.
Resolución de problemas
”Failed (libplugin.so: wrong ELF class: ELFCLASS64)”
Descargaste la versión de 64 bits del plugin. Vuelve al release en GitHub y toma el archivo sin sufijo .x64. Confirma con file plugins/tuplugin.so antes de volver a intentarlo: debe mostrar Intel 80386, no x86-64.
”Failed (libplugin.so: cannot open shared object file)”
El archivo .so no está en plugins/ o tiene un nombre distinto al declarado en server.cfg. Lista el directorio con ls plugins/ y compáralo con la línea plugins del config. Los nombres son sensibles a mayúsculas en Linux: MySQL.so no es lo mismo que mysql.so.
”Failed (libstdc++.so.6: cannot open shared object file)”
Faltan las librerías de 32 bits en el sistema. Vuelve al paso “Instalar dependencias de 32 bits” y confirma que libstdc++6:i386 esté instalado:
dpkg -l | grep libstdc++6:i386
Si no aparece, instálalo y reinicia el servidor.
El plugin carga pero crashea en runtime
Usa ldd para identificar dependencias no satisfechas que dlopen acepta pero fallan después:
ldd plugins/tuplugin.so
Las líneas con not found indican librerías ausentes. Para plugins MySQL, normalmente es libmariadb o libmysqlclient. Instala la versión :i386 correspondiente.
Próximos pasos
Con los plugins cargando correctamente, el siguiente paso natural es configurar el arranque automático con systemd para que el servidor sobreviva a los reinicios de la VPS. Después de eso, configurar el backup de la base de datos (si usas el plugin MySQL) y del directorio scriptfiles/ es lo que separa un setup de hobby de uno de producción.
Si estás migrando a una VPS dedicada, conviene revisar los límites del kernel: un ulimit -n bajo derriba el servidor cuando crece el número de jugadores. El valor por defecto de 1024 descriptores de archivo aguanta servidores de hasta ~500 slots; por encima de eso, ajústalo a 4096+ en /etc/security/limits.conf.
Para servidores en producción, una VPS optimizada para juegos de Hostini ya viene con kernel ajustado para baja latencia, protección contra ataques de UDP flood (frecuentes contra puertos SA-MP) y almacenamiento NVMe, relevante cuando el servidor hace mucha I/O en scriptfiles/. Las librerías de 32 bits también vienen preinstaladas en las imágenes Linux para SA-MP, ahorrando los primeros pasos de este tutorial.
Preguntas frecuentes
¿Por qué el plugin .so devuelve 'wrong ELF class' al iniciar?
El binario del servidor SA-MP es de 32 bits (i386) y solo carga plugins compilados para 32 bits. Ese error aparece cuando descargas la versión x86_64 (.so de 64 bits). Busca siempre el archivo marcado como `Linux` o `i386` en el release del plugin, no el `Linux x64`. En algunos repositorios el sufijo es `.so` puro para 32 bits y `.x64.so` para 64.
¿Necesito instalar lib32 incluso en un servidor headless?
Sí. El servidor SA-MP y sus plugins hacen dlopen contra glibc de 32 bits y dependencias como libstdc++. Sin `libc6:i386`, `libstdc++6:i386` y `lib32gcc-s1`, el servidor falla silenciosamente o queda en bucle de reconexión. Instala los paquetes de 32 bits aunque tu VPS ejecute un kernel de 64 bits.
¿Puedo poner el plugin directamente en la raíz y no en plugins/?
No. El loader de SA-MP busca los archivos exclusivamente en `plugins/` relativo al binario del servidor. Ponerlo en otro lugar resulta en `Failed (libpluginxyz.so: cannot open shared object file)`. Crea el directorio si no existe y mantén permisos 644 en los archivos.
¿Importa el orden de los plugins en server.cfg?
Sí, en casos con dependencia mutua. Plugins como `mysql` deben ir antes que los wrappers que dependen de él, y `streamer` antes de scripts que registren callbacks de streaming en la inicialización. Cuando dudes, lee el README del plugin: la mayoría documenta requisitos de orden explícitos.
¿Cómo sé si el plugin se cargó realmente?
Revisa `server_log.txt` justo después de iniciar. Cada plugin emite una línea del tipo `Loaded.` o `Loading plugin: nombreplugin.so`. Si aparece `Failed.`, el motivo viene en la línea anterior, normalmente arquitectura equivocada o dependencia ausente. Verifica con `ldd plugins/tuplugin.so` qué librerías están `not found`.
¿Hay que reiniciar el servidor cada vez que se añade un plugin?
Sí. El servidor SA-MP carga los plugins solo en la inicialización: no hay hot-reload. Detén el proceso (Ctrl+C o `systemctl stop`), edita `server.cfg`, valida el archivo en el directorio `plugins/` y vuelve a levantar el servidor. Los cambios en el `.so` en runtime no tienen efecto hasta el próximo arranque.