Intentos
Ideas
-
Hacer una version mas ligera
-
Compilar el kernel 6.12.33 con solo lo necesario | Maybe Help
- make localmodconfig
-
Adios Modulos del kernel
-
Borrar Librerias de kernel que no necesitamos
-
NO LVM, solo ext4
-
Exportar las configuraciones de TUNED a sysctl para asi borrar tanto la app como el daemon
-
Optimizar el SSD con
tune2fs -o discard,noatime,nobarrier /dev/sda1 -
Borrar librerias muertas
sudo package-cleanup --leaves | xargs yum remove -y
-
Eliminar Documentacion Local
sudo rm -rf /usr/share/{doc,man,info} /usr/src/*sudo find /usr/share/locale -mindepth 1 -maxdepth 1 ! -name 'en_US' -exec rm -rf {} +
-
Revisa mas en profundidad servicios de systemd
sudo systemctl list-unit-files --state=enabled
-
Exportar Correctamente al peor entorno de emulacion (Windows + Virtualbox)
- 6.1 (USBv1)
- 7.1.10 (USBv2 + UEFI + <8vCPU + no-libvirt-interface)
Compilacion para IOU WEB 64 bits
Adaptar un sistema es muy complicado cuando es versionado, por lo que el alcance de IOU WEB - 64 Bits CentOS 7 esta completo, por lo que a pesar de decir 64 bits, solo es compatible con imagenes de 32 bits, pero permite utilizar muchisimo mejor la aceleracion por hardware de distintos sistemas, por lo que es una version muy agradable para continuar usando como reemplazo rapido a IOU WEB
La intencion era compilar GLIBC, debido a que las maquinas de 64 bits, necesitan una version mayor a 2.27, por lo que la unica opcion, era compilar una version compatible, con la actualizacion del kernel, me permitia no instalar solo GLIBC 2.27 sino una un poco mayor, me convenci con 2.34 por la compatibilidad del sistema.
En un futuro podria hacer Make y GCC dentro de Icarus para poder compilar correctamente OpenSSL y OpenSSH, pero eso sera otro dia, el siguiente reemplazo directo a esta maquina, es la instalacion experimental de IOU WEB - 64 Bits Arch Linux (WIP)
El mejor prefijo para poner los programas compilados correctamente es en “/usr/local”, de esta forma no sobreescribe las herramientas del sistema, se le puede configurar como PATH prioritario, y sirve para poder configurar una cadena LD_LIBRARY_PATH y LD_RUN_PATH que ayudara al sistema a ejecutar todo correctamente
Se me ocurre que la lista de prioridad deberia ser asi
export PATH=/usr/local/make-4.2.1/bin:/usr/local/sbin:/usr/local/bin:/opt/iou/bin:/usr/bin:/bin
La explicacion puede ser la siguiente
/usr/local/sbin: Binarios de administracion local para root/usr/local/bin: Binarios locales compilados para usuarios/opt/iou/bin: Binarios de IOU WEB/usr/bin: Binarios instalados por el adminitrador de archivos (yum o dnf)/bin: Binarios del sistema (ls,cp, etc.)
Y que los agregados se agregan de la siguiente manera, es muy importante el $PATH al final
export PATH=/usr/local/make-4.2.1/bin:$PATH
Y ahora que lo pienso se puede hacer lo mismo con LD_LIBRARY_PATH TO-DO: deberia extraer la base limpia de 32 bits y revisar cual es
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
Estas pueden estar en rc.local y .bashrc
source ~/.bashrc
Tambien para configurar las librerias, se puede utilizar el archivo /etc/ld.so.conf.d/local.conf y le agregas las rutas de tus librerias
/usr/local/lib64
/usr/lib32
Luego se configuran esas rutas con
sudo ldconfig
Compilar Programas
Sitios Recomendados Generales
GNU GCC 10.5.0
Sitios Recomendados
- GNU GCC - The GNU Compiler Collection
- GNU.org Docs - GCC Online Docs
- GCC GNU Docs - Installing GCC
- Mirror List
- GCC Releases | Timeline | CppReference - Compiler Support
- GNU GCC - GCC 4.8 Release Series: Instalada en CentOS 7
- GNU GCC - GCC 10 Release Series: Compilando en CentOS 7
- GNU GCC - GCC 15 Release Series (Latest): Branch Actual cuando escribo esto
- Blogs
La forma correcta de hacer esto y con el visto weno de GNU (Prerequisites for GCC), es instalar una version intermedia de GCC
- GCC 4.8.5 → GCC 9.5 → GCC 15
Ve a la carpeta de fuentes
cd /usr/src
Descarga GCC 10.5.0 (07 de Julio de 2023)
wget https://ftp.gnu.org/gnu/gcc/gcc-10.5.0/gcc-10.5.0.tar.gz
Descomprime el TAR
tar -xzvf gcc-10.5.0.tar.gz
Elimina el TAR
rm -f gcc-10.5.0.tar.gz
Ve a la carpeta de GCC
cd gcc-10.5.0
Ejecuta el instalador de prerequisitos (Descargara
gmp,mpfr,mpc,isl)
./contrib/download_prerequisites
Crea la carpeta build y ve a ella
mkdir build && cd build
Configura el Prefijo temporal (parece ser que ahora si funciona), habilita los lenguajes c y c++ que son los que usaremos, y habilita la compilacion para la libreria de 32 bits
../configure --prefix=/usr/local/gcc-10.5.0 --enable-languages=c,c++ --enable-multilib
Compila usando el 100% de la CPU (Tengo 4 Nucleos y se demoro aprox 2 horas y media)
make -j$(nproc)
Confia en los dioses de la demo e instala la version compilada
make install -j$(nproc)
Limpia los archivos de compilacion
make clean -j$(nproc)
Exportar temporalmente al PATH
export PATH=/usr/local/gcc-10.5.0/bin:$PATH
Exportar temporalmente la libreria
export LD_LIBRARY_PATH=/usr/local/gcc-10.2.0/lib64:$LD_LIBRARY_PATH
Revisa si esta funcionando con
gcc --version
gcc (GCC) 10.5.0
Copyright (C) 2020 Free Software Foundation, Inc.
Compila un programa en C
Escribe dentro de “
hello.c”
#include <stdio.h>
int
main()
{
printf("hello, world\n");
return 0;
}
Compila el programa hello.c
gcc -o hello hello.c
Ejecuta el programa compilado
./hello
Si todo resulta correcto, tenermos GCC 10.5.0 instalado en el sistema
GNU C Library (GlibC) 2.34
Sitios Recomendados
GBLIBC 2.28 Necesita
- GNU
make4.0 or newer (Tengo 4.4.1) - GNU
GCC6.2 or newer (Tengo 4.8.5, compilando GCC 10.5.0) - GNU
binutils2.25 or later (Compile con 2.44 y dio problemas, la wiki dice2.35.1, oops) - GNU
texinfo4.7 or later (Tengo texi2any (GNU texinfo) 5.1) - GNU
awk3.1.2, or higher (Tengo 4.0.2) - GNU
bison2.7 or later (Tengo 3.0.4) - GNU
sed3.02 or newer (Tengo 4.2.2) - Perl 5 (OPCIONAL, De todas formas tengo perl-4:5.16.3-299)
Envia mensajes UNSUPPORTED si no estan, no son criticos, pero no tendra soporte para los debugging symbols
- Python 3.4 or later (Python 3.6.8)
- The Python
abnfmodule. (Successfully installed abnf-2.2.0) - PExpect 4.0 (python36-pexpect-4.8.0-1)
- GDB 7.8 or later with support for Python 2.7/3.4 or later (Tengo GDB 7.6.1-120.el7, el modulo python gdb_plus no lo pilla, pero parece que puedo vivir perfectamente sin el)
NOTE FROM DOCS
Unless Python, PExpect and GDB with Python support are present, the printer tests will report themselves as `UNSUPPORTED`. Notice that some of the printer tests require the GNU C Library to be compiled with debugging symbols.
NOTE FROM DOCS
For multi-arch support it is recommended to use a GCC which has been built with support for GNU indirect functions. This ensures that correct debugging information is generated for functions selected by IFUNC resolvers. This support can either be enabled by configuring GCC with ‘--enable-gnu-indirect-function’, or by enabling it by default by setting ‘default_gnu_indirect_function’ variable for a particular architecture in the GCC source file gcc/config.gcc.
Crear carpetas necesarias
mkdir -p /src/gnu/glibc-build
NOTE
- glibc-build → Object
- glibc-2.28 → Unpack library Packages
Ve al directorio de glibc-2.28
cd /src/gnu/
Descarga la version de GLIBC necesaria
wget https://gnu.c3sl.ufpr.br/ftp/libc/glibc-2.34.tar.gz
Descomprime el tar
tar -xzvf glibc-2.34.tar.gz
Elimina el archivo tar
rm -f glibc-2.34.tar.gz
Ve a la carpeta gblic-build
cd /src/gnu/glibc-build
Configura GLIBC
../glibc-2.34/configure --prefix=/opt/glibc-2.34
Compilar utilizando el 100% de la CPU
make -j$(nproc)
Checkear si la version de GLIBC es funcional con el 100% de uso de CPU
make check -j$(nproc)
Instala la version compilada con el 100% de la CPU
make install -j$(nproc)
Prueba ???
/opt/glibc-2.34/lib/ld-2.34.so --library-path /opt/glibc-2.34/lib /opt/glibc-2.34/lib/libc.so.6
Revisa las versiones de GLIBC Soportadas
strings /lib64/libc.so.6|grep GLIBC_
Probar el funcionamiento con GLIBC-2.34 y con todas las demas librerias, teniendo como prioridad la de GLIBC2.34
/opt/glibc-2.34/lib/ld-linux-x86-64.so.2 --library-path /opt/glibc-2.34/lib:/lib64:/usr/lib64:/usr/lib /bin/ls
Ejecuta un binario con la nueva version de GLIBC
LD_LIBRARY_PATH=/opt/glibc-2.18/lib /opt/glibc-2.18/lib/ld-2.18.so /bin/ls
Limpia la carpeta del build
make clean -j$(nproc)
OpenSSL
Sitios Recomendados
Aqui si hay que tener miedo uhhh
Usare 3.0.16 [LTS] porque mejor volar cerca del sol que nada, ademas que la 3.5 pesa 5 veces mas y me da miedito
Descarga la fuente de OpenSSL
cd /usr/src
wget https://github.com/openssl/openssl/releases/download/openssl-3.0.16/openssl-3.0.16.tar.gz
tar -zxf openssl-3.0.16.tar.gz
rm openssl-3.0.16.tar.gz
muevete a la carpeta
cd openssl-3.0.16
Crea la carpeta build y ve a ella
mkdir build && cd build
Revisa las plataformas soportadas
./cnfigure LIST
TEST
gcc -dM -E - </dev/null | grep __SIZEOF_INT128__
Compila xdxd
./Configure linux-x86_64 no-shared no-ssl3 no-comp no-zlib --prefix=/opt/openssl-3.5.0
cd /usr/src/openssl-3.5.0
./config
make depend -j$(nproc)
make -j$(nproc)
make test -j$(nproc)
make install -j$(nproc)
make clean -j$(nproc)
ln -s /usr/local/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
openssl version
sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
OpenSSH Portable
La ultima version compatible es la de 32 bits porque no tiene la ultima version con soporte o OpenSSL1.1.1
cd ~/git
mkdir openssh && cd openssh
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p2.tar.gz
tar xvf openssh-10.0p2.tar.gz
rm -drf openssh-10.0p2.tar.gz
cd openssh-10.0p1
./configure -q
make -j$(nproc)
make install -j$(nproc)
Soporte GLIBC >=2.27
(WIP) debido a que a pesar de que x86_64 L3 funciona a medias, L2 no llega nisiquiera a iniciar
Ver versiones de GLIBC
strings /lib64/libc.so.6|grep GLIBC_
Lectura Recomendada
Aunque tambien se puede hacer del propio sistema, OMG
Apago la maquina
Creas una nueva, importar desde el disco
Monto el disco como unidad 2 en QEMU como Dispositivo de Disco con drivers virtio porque sino pa que
En Opciones de arranque seleccionamos el disco 2 primero que el 1
Y le damos en Iniciar la instalacion
Inicio el sistema
Seleccionas “Troubleshooting”
Vas a donde dice “Rescue a CentOS sytem”
Luego se quedara en blanco, simplemente esperas, hasta que inicie
Iniciara el instalador
El sistema del instalador probara a montarse en /mnt/sysroot
Selecciona 1 “Continue”
Escribe “chroot /mnt/sysimage”
Ahora tendras disponible una SH
Ejecuta Bash para tener mejor control sobre la terminal
Habilita SSH con
systemctl start sshd
Ejecuta otra vez “chroot /mnt/sysimage”
lsblk
fdisk -l
cat /etc/fstab
df -h
blkid
gcc --version (4.8.5)
wich gcc (/mnt/sysimage/bin/gcc)
g++ --version (4.8.5)
wich g++ (/mnt/sysimage/bin/g++)
ldd --version (2.17)
make --version (3.82)
curl --version (7.29.0)
wget --version (1.14)
rsync --version (3.1.2)
Dentro de
scl enable devtoolset-11 bash(No funciona dentro de Troubleshooting, pero si dentro de chroot /mmt/sysroot)
gcc --version (11.2.1)
g++ --version (11.2.1)
make --version (4.3)
Ejecuta dhclient
Ahora puedes probar ping 1.1.1.1
Soluciona problemas menores
Crea llaves ssh
ssh-keygen -A
Deja corriendo sshd de fondo
`/usr/sbin/sshd -D -e`
Ejecuta
echo "nameserver 1.1.1.1" > /etc/resolv.conf
Ahora podras hacer ping al dns
ping google.cl
Ahora podras conectarte con ssh desde tu maquina, y poder copiar y pegar, que alivio
NOTA, PRIMERO PROBARE SIN SCL DEVTOOL A VER SI COMPILA O NO
AHORA EMPIEZA LA INSTALACION DE GLIBC
Como pequeño entorno de pruebas de CentOS 7.9, instalare 2.28, una actualizacion menor, de GLIBC 2.27 que nos deberia dejar intentar probar y documentar el funcionamiento
Para el correcto funcionamiento de las maquinas de 64 bits, se necesitan otras dependencias, la principal es la presencia de GLIBC ⇐2.27, en CentOS 7.9, usa el paquete GLIBC 2.17, por lo que nos lanzara el siguiente error si intentamos ejecutar una imagen:
./x86_64_crb_linux-adventerprisek9-ms.bin: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by ./x86_64_crb_linux-adventerprisek9-ms.bin)
Una solucion no tan destructiva, es descomprimir las librerias de GLIBC 2.28 disponibles para RedHat 8.10 mediante el programa “Red Hat Enterprise Linux Packages”, necesitaremos descargar los siguientes paquetes RPM para no tener problemas:
glibc-2.28-251.el8_10.22.x86_64.rpm
glibc-all-langpacks-2.28-251.el8_10.22.x86_64.rpm
glibc-common-2.28-251.el8_10.22.x86_64.rpm
glibc-gconv-extra-2.28-251.el8_10.22.x86_64.rpm
Entonces debemos enviar las imagenes a la maquina virtual, luego parchear las rutas usando patchelf y este programa les dira a las imagenes que usen GLIBC 2.28 sin modificar el resto de los programas
Crear carpeta GLIBC
mkdir /opt/iou/glibc/
Envia los paquetes RPM descargados en tu pc
rsync -Phvar *.rpm root@{server-ip}:/opt/iou/glibc/
Nos vamos a la carpeta de glibc
cd /opt/iou/glibc
Descomprimes el primer RPM
rpm2cpio glibc-2.28-251.el8_10.22.x86_64.rpm | cpio -idmv
Luego el segundo
rpm2cpio glibc-all-langpacks-2.28-251.el8_10.22.x86_64.rpm | cpio -idmv
Finalmente el tercero
rpm2cpio glibc-common-2.28-251.el8_10.22.x86_64.rpm | cpio -idmv
Creas la carpeta source
mkdir /opt/iou/glibc/source
Mueves los .rpm a la carpeta source
mv /opt/iou/glibc/*.rpm /opt/iou/glibc/source
Crea un backup de la imagen original, capaz explota
cp /opt/iou/bin/x86_64_crb_linux-adventerprisek9-ms.bin /opt/iou/bin/x86_64_crb_linux-adventerprisek9-ms.bin.back
Ahora bien, existen 3 archivos que son importantes
- Interprete:
/opt/iou/glibc/usr/lib64/ld-linux-x86-64.so.2 - Rpath:
/opt/iou/glibc/usr/lib64
patchelf --set-interpreter /opt/iou/glibc/usr/lib64/ld-linux-x86-64.so.2 --set-rpath /opt/iou/glibc/usr/lib64 x86_64_crb_linux-adventerprisek9-ms.bin
Ejecutamos el parche para la imagen
patchelf --set-interpreter /opt/iou/glibc/usr/lib64/ld-linux-x86-64.so.2 --set-rpath /opt/iou/glibc/usr/lib64 /opt/iou/bin/x86_64_crb_linux-adventerprisek9-ms.bin
Ejecutamos el parche para la imagen
patchelf --set-interpreter /opt/iou/glibc/usr/lib64/ld-linux-x86-64.so.2 --set-rpath /opt/iou/glibc/usr/lib64 /opt/iou/bin/x86_64_crb_linux_l2-adventerprisek9-ms.bin
Verificamos el cambio del loader
readelf -l /opt/iou/bin/x86_64_crb_linux-adventerprisek9-ms.bin | grep interpreter
Verificamos el cambio del loader en L2
readelf -l /opt/iou/bin/x86_64_crb_linux_l2-adventerprisek9-ms.bin | grep interpreter
Verificamos el cambio de rpath
readelf -d /opt/iou/bin/x86_64_crb_linux-adventerprisek9-ms.bin | grep RUNPATH
Verificamos el cambio de rpath
readelf -d /opt/iou/bin/x86_64_crb_linux_l2-adventerprisek9-ms.bin | grep RUNPATH
REVISION AVANZANDA DE IMAGENES
readelf -a ./x86_64_crb_linux_l2-adventerprisek9-ms.bin | less
PARCHEAR INTERPRETER
patchelf --set-interpreter /opt/glibc-2.34/lib/ld-linux-x86-64.so.2 ./x86_64_crb_linux_l2-adventerprisek9-ms.bin
PARCHEAR RUN
patchelf --set-rpath /opt/glibc-2.34/lib:/lib64:/usr/lib64 ./x86_64_crb_linux_l2-adventerprisek9-ms.bin
REVISION PIOLA CON STRACE
strace -e openat ./x86_64_crb_linux_l2-adventerprisek9-ms.bin 4
REVISAR ABSOLUTAMENTE TODO CON STRACE
strace -f -v -s 1024 -e trace=all ./x86_64_crb_linux_l2-adventerprisek9-ms.bin 4
UEFI EN CENTOS7
GRACIAS:
- https://neurealm.com/blogs/booting-centos-from-uefi/
- https://www.bitbull.ch/wiki/index.php?title=Convert_CentOS7_Legacy_Bios_to_Uefi
- https://access.redhat.com/solutions/3486741
Reinstala Grub2-common
dnf reinstall grub2-common
Creo que para instalar UEFI, deberia hacer lo siguiente
- Apagar la maquina
- Hacer otra con el mismo disco
- Encender como UEFI
- Instalar correctamente el grub
grub2-install --target=x86_64-efi --efi-directory=/boot/ --bootloader-id=GRUB --modules="tpm" --disable-shim-lock --removable --recheck
- Luego volver a la anterior maquina y ver si funcionan ambos
o tambien podria ser simplemente
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos --recheck
SOBRE IOU WEB
El archivo NETMAP dentro de un laboratorio no puede llevar el valor 0, el rango es de 1 a 1023
netio??
Que salga a internet
(WIP) Se puede utilizar
Aunque es muy complicado y no lo tomaria encerio hasta haber terminado casi todos los puntos
Si quieres utilizar el comando IOU2NET.pl | Blog deberas usar realmente la imagen que sale en la nota
Note: Seems that problems are not presented when IOU binary i86bi_linux_l2-ipbasek9-ms.may8-2013-team_track is used. Use this particular IOU binary whenever trunk connection between IOU and a real gear is required.
BENCHMARKS
Creo que no hay nada mejor que simplemente quejarse de manera tecnica sobre que mi version es mejor
IOU WEB 32 Bits ORIGINAL
IOU WEB 32 Bits Actualizado
IOU WEB 64 Bits
Version del Kernel con
uname -a
Linux iou.example.com 6.9.7-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jun 27 10:58:15 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux
Demora en encender con
systemd-analyze
[root@iou ~]# systemd-analyze
Startup finished in 1.037s (kernel) + 2.290s (initrd) + 3.710s (userspace) = 7.038s
Crear Interfaz con ip nat inside
Crear llaves SSH de 4096
Configuracion:
Testear Imagenes
Nota 2222 puerto TCP ; 200 ID-APP
./wrapper-linux -m ./i86bi_linux-adventerprisek9-ms -p 2222 -- -e 1 -s 1 200
Conectate al router puerto TCP
telnet localhost 2222
Dejar de correr imagenes
ps -aux | grep wrapper-linux | grep 200 | kill `echo $(cut -d " " -f2)`
Deprecated o Ideas Abandonadas
Git
Sitios Recomendados
Buena la idea, pero no es necesario realmente
La ultima version disponible es la 2.49, pero deberia realmente compilarla??
Parchear Imagenes
Si fallan el test de encendido, posiblemente tendras que parcharlas
Parchea Imagenes L3
for F in i86bi_linux-*;do bbe -b "/xfcxffx83xc4x0cx85xc0x75x14x8b/:10" -e "r 7 x90x90" -o $F.x $F;mv $F.x $F;done;chmod +x ./i86bi_linux-*
Parchea Imagenes L2
for F in i86bi_linuxl2*;do bbe -b "/xa1xffx83xc4x0cx85xc0x75x17x8b/:10" -e "r 7 x74" -o $F.x $F;mv $F.x $F;done;chmod +x ./i86bi_linuxl2*
Actualizar Xinha
Se puso raro, y no tiene sentido realmente actualizarlo
Actualizar Xinha (SUSPENDIDO)
Lectura Recomendada
- Xinha: Editor HTML usado por IOU WEB (usa la version 0.96)
- Posiblemente se pueda actualizar con un drag and drop a la version mas actual, tendria cuidado con la carpeta
langy- Existen algunos
pluginsperdidos
CSS(Ahora es CSSDropDowns)plugins/ExtendedFileManager(esta en “unsupported_plugins”)plugins/ImageManager(esta en “unsupported_plugins”)plugins/PersistentStorage(esta en “unsupported_plugins”)plugins/PSFixed(esta en “unsupported_plugins”)plugins/PSLocal(esta en “unsupported_plugins”)plugins/PSServer(esta en “unsupported_plugins”)plugins/SpellChecker(esta en “unsupported_plugins”)plugins/UnFormat(esta en “unsupported_plugins”)
Descarga la ultima version de Xinha desde su pagina oficial, yo usare la version 1.5.6 Full Distribution
Muevete a la carpeta
~/iou
cd /opt/iou/html
Descarga xinha-1.5.6
wget https://s3-us-west-1.amazonaws.com/xinha/releases/xinha-1.5.6.zip
Descomprime el archivo zip, selecciona “
[N]” para ser conservador
unzip xinha-1.5.6.zip
Elimina el zip
rm -f xinha-1.5.6.zip
Actualiza SpellChecker (NOOOOOOOOOOOOOOO)
rsync -Phvr /opt/iou/html/xinha/unsupported_plugins/SpellChecker /opt/iou/html/xinha/plugins/
Para ahorrar tiempo viendo los errores
Como recomendacion, abre cada opcion para editar texto para luego ver en el logs, con errores
404y403para solucionarlos y que IOU WEB funcione siempre
Actualiza SpellChecker.js desde plugins a plugins
ln -s /opt/iou/html/xinha/plugins/SpellChecker/SpellChecker.js /opt/iou/html/xinha/plugins/SpellChecker/spell-checker.js
Elimina SpellChecker.js qliao
rm -drf /opt/iou/html/xinha/unsupported_plugins/SpellChecker
Actualiza SpellChecker.js desde plugins a unsupported_plugins ?????
ln -s /opt/iou/html/xinha/plugins/SpellChecker /opt/iou/html/xinha/unsupported_plugins/SpellChecker