Cuando llevas tiempo administrando servidores Linux te sucede que algunos clientes por antigüedad tienen aun una instalación de 32bits que no llegó a realizarse por algún motivo o luego se mejoró el hardware con nuevos procesadores con soporte de 64bits. Y para poder gestionar más de tres Gigabytes de memoria y mejorar el rendimiento,es necesario,actualizarlo a los 64bits para sacar el mayor rendimiento al hardware.

En proceso de migración de un sistema Gentoo de 32Bits a 64Bits existen varias formas de realizar lo, nosotros creamos un chroot con todo el sistema desde cero y luego vamos copiando la configuración. Esto nos permitirá actualizar el servidor sin apenas tiempo de desconexión.

Pasos previos:

  • Actualizar el portage, emerge e instalar el ultimo kernel estable
emerge –-sync
emerge -1 portage
emerge gentoo-sources

Creando el compilador de 64Bits (Cross Compiler)
El primer proceso en la migración a 64Bits es la instalación de un compilador que permita generar código de otra plataforma, para ello necesitamos las utilidades de crossdev.

emerge -1 crossdev
mkdir /usr/local/portage

Añadimos en /etc/make.conf o /etc/portage/make.conf
PORTDIR_OVERLAY=”/usr/local/portage”

Y compilamos el compilador y su entorno.
crossdev -S -s1 --target x86_64-pc-linux-gnu

Compilamos el kernel y lo activamos en nuestro gestor arranque (grub / lilo)

make ARCH=x86_64 oldconfig
make ARCH=x86_64 CROSS_COMPILE=x86_64-pc-linux-gnu-

Y nos acordamos de activar “IA32 Emulation” y ajustar también los cambios pertinentes del nuevo kernel o requerimientos del udev u otros.
Reiniciamos la máquina y ya tendremos el kernel de 64bits funcionando con el resto de aplicaciones de 32bits.


Descargamos el stage3 apropiado y creamos un entorno en /mnt/64bits

Creamos un directorio en /mnt/64bits y descomprimimos el stage3 actual y con chroot /mnt/64bits instalamos los programas necesarios y copiamos la configuración del sistema actual.

Acordarse de activar los nuevos valores del nuevo sistema en el make.conf CHOST y CFLAGS apropiados

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=native -pipe"

 

cp /etc/locale.gen /mnt/64bits/etc/
cp /etc/localtime /mnt/64bits/etc/ mount -o bind /dev /mnt/64bits/dev
mount -o bind /proc /mnt/64bits/proc
mount -o bind /sys /mnt/64bits/sys
mount -o bind /usr/portage /mnt/64bits/usr/portage
chroot /mnt/64bits
source /etc/profile

Una vez instalados todos los programas requeridos reiniciamos el equipo y lo arrancamos con una sistema de rescate SystemRescueCD por ejemplo.
Movemos los directorios anteriores del sistema a /mnt/32bits por si tenemos que realizar una marcha atrás, y movemos el sistema de 64bits a su ubicación normal. Luego con reiniciar es suficiente para tener todo el sistema a 64bits con apenas tiempos de parada.

Referencias:

Publicado en Seguridad
Domingo, 09 Junio 2013 10:18

Migrando a MariaDB en Gentoo

Gracias a qué Oracle ,con la adquisición de MySQL, le esta haciendo perder velocidad desde hace algún tiempo, creemos que es para favorecer al hermando mayor “Oracle DB” y tienes otros problemas de cara a la comunidad de  desarrolladores, por eso pensamos que MariaDB tiene un gran futuro.

Es en este pequeño vamos a explicar de forma sencilla los pasos a seguir para migrar una instalación con MySQL a MariaDB en Gentoo, algunos de estos pasos también podríais aplicarse a otras distribuciones, simplemente seria cambiar los comandos de instalación.

  1. Backup de todas las base de datos por si tenemos que ir marcha atrás.
    mysqldump -A >all.sql
  2. Actualmente en Gentoo MariaDB se encuentra en fase de pruebas con lo que tendremos que añadir lo siguiente en los fichero /etc/portage/package.keywords.
    dev-db/mariadb
    virtual/mysql
  3. Igualmente tendremos que copiar nuestra configuración de dev-db/mysql en /etc/portage/package.use para no perder nuestra personalización.
    Recomendamos usar el flag jemalloc para mejorar el rendimiento.
  4. Paramos la el motor MySQL.
    /etc/init.d/mysql stop
  5. Desinstalamos MySQL
    emerge -C mysql
  6. Instalamos MariaDB.
    emerge mariadb
  7. Y por si tenemos alguna dependencia rota o librería.
    emerge @preserved-rebuild
    revdep-rebuild
  8. Arrancamos la base de datos.
    /etc/init.d/mysql start
  9. Por ultimo actualizamos las tablas.
    mysql_upgrade -u root -p
    mysqlcheck --repair --all-databases -u root -p

 

Y a disfrutar de la velocidad de MariaDB.

 

Referencias:

 

Publicado en Blog
Viernes, 26 Abril 2013 10:26

¿Por qué Gentoo?

Nosotros usamos en todos nuestros servidores Gentoo, aunque no es una distribución sencilla,  tiene grandes ventajas si se consigue dominar, entre ellas destacamos:

icon-gentoo

  • Un ciclo de actualizaciones 'sobre la marcha', que nos permite actualizarlos de forma lineal, cuando nosotros queremos o realmente hace falta por motivos de seguridad o alguna nueva funcionalidad. Y no esperar años y luego tener que cruzar los dedos para qué todos los servicios funcionen correctamente. Incluso podemos bloquear para que no se actualicen ciertos componentes del sistema e igualmente el resto del sistema completo puede ir evolucionando.
  • Permite de forma sencilla crear tu propio repositorio y tener un sistema de compilación donde replicar los cambios al resto de servidores, antes también realizábamos rpms personalizados pero no es tán cómodo y práctico como un ebuild.
  • Optimizar el sistema para un determinado procesador y hardware.
  • Simplificar las dependencias y protocolos no necesarios, evitamos así posibles errores de programación, vulnerabilidades y reducir el uso de memoria.

 

 

Publicado en Blog
Lunes, 07 Enero 2013 23:22

Sincronizar tablas en MySQL

Cuando se realizan paginas web a veces resulta necesario compartir datos entre ellas como puede ser el caso de compartir los usuarios entre varias web diferentes en joomla y para eso MySQL nos proporciona una funcionalidad llamada FEDERATED que permite usar tablas en remoto como si estas estuvieran almacenadas en local, pero para no tener problemas de perdida de datos y velocidad lo mejor es usarlo en el mismo server.

Para ello en Gentoo necesitamos activar:

USE="extraengine" emerge mysql

O añadirlo en el fichero /etc/portage/packages.use

dev-dev/mysql extraengine

Luego reiniciamos el servicio de MySQL

/etc/init.d/mysql restart

Entramos en la consola de MySQL e instalamos el ENGINE con:

INSTALL PLUGIN federated SONAME 'ha_federated.so';

Pasamos a comprobar que lo tenemos activo:

show engines;

Debe de aparecer algo como esto:

+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+


Ahora ya solo nos queda crear la tabla que necesitamos duplicar, modificadas con la sintaxis requerida:

DROP TABLE IF EXISTS 'h3241_users';
CREATE TABLE 'h3241_users' (
'id' int(11) NOT NULL,
'name' varchar(255) NOT NULL DEFAULT '',
'username' varchar(150) NOT NULL DEFAULT '',
'email' varchar(100) NOT NULL DEFAULT '',
'password' varchar(100) NOT NULL DEFAULT '',
'usertype' varchar(25) NOT NULL DEFAULT '',
'block' tinyint(4) NOT NULL DEFAULT '0',
'sendEmail' tinyint(4) DEFAULT '0',
'registerDate' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'lastvisitDate' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'activation' varchar(100) NOT NULL DEFAULT '',
'params' text NOT NULL,
'lastResetTime' datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Date of last password reset',
'resetCount' int(11) NOT NULL DEFAULT '0' COMMENT 'Count of password resets since lastResetTime',
PRIMARY KEY ('id'),
KEY 'usertype' ('usertype'),
KEY 'idx_name' ('name'),
KEY 'idx_block' ('block'),
KEY 'username' ('username'),
KEY 'email' ('email')
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://usuario:password@localhost/basededatos/a4821_users';

Hemos quitado del original el AUTO_INCREMENT, cambio el ENGINE y por supuesto la conexión a la otra base de datos.

 

Referencias:

Publicado en Código en Joomla