Y DebianHackers también estuvo en ConectaCon (Jaén)

El fin de semana pasado se celebró en Jaén la ConectaCon y alguien consideró que era buena idea invitar a Dabo -;). Y allá se fue, hasta la capital jiennense con el encargo de dar una charla, la colección de camisetas frikis y la intención de hacerlo al revés. Ni una diapositiva, ni un vídeo, nada de material audiovisual sobre el que apoyarse, sólo un viejo portátil con poca potencia y un par de gigas de RAM, una conexión a internet y una demo en vivo conectado a 4 servers vía SSH con Debian GNU/Linux (como su portátil).

Nuestro Dabo minutos antes de empezar la demo (y funcionó todo, increíble-;).

conectaconLa organización ha subido a Facebook una galería con casi 300 fotos.

Podéis también leer la crónica de Lorenzo Martínez, en securitybydefault.

La ponencia se tituló “Seguridad y optimización, el camino del guerrero hacia la paz interior del GLAMP” y, básicamente consistió en poner a prueba (aka putear) cuatro servidores propios para probar que la seguridad previene dolores de cabeza.

Gracias a la organización por la parte que nos toca, según leemos, parece que el chaval no rompió nada (ni su Debian Sid) y se medio portó :D . No esperábamos menos !!!

Dabo ha prometido un post en su (otro) blog con todas las herramientas usadas.

Instalar Skype en debian multiarquitectura

Skype

Si, lo sé, los títulos empiezan a rayar lo imposible pero prometo estarme tranquilo una temporada.

Una de las partes, a mi juicio, más interesantes del anuncio de la liberación de Debian GNU/Linux 7, «wheezy», es la inclusión oficial de la multiarquitectura. La posibilidad de instalar un software hecho a medida para una determinada arquitectura en otra y sin que esto suponga un quebradero de cabeza (como venía siendo últimamente), es un avance enorme. Hace algún tiempo publiqué una entrada dedicada a este tema, Entendiendo la multiarquitectura en Debian GNU/Linux con Citrix y ya en la primera línea dejaba claro que el cliente ICA es para un entorno corporativo y que la verdadera prueba de fuego sería Skype. Bien, pues ha llegado el día de las pruebas.

Han coincidido varios factores. Por un lado, la última actualización ya estaba pidiendo la desinstalación de la librería ia32-libs; hace dos días se liberó wheezy con este tema presente en todas las notas, avisos y comentarios; y, además, hoy estoy de ese humor en que el cuerpo te pide riesgos.

Pero volvamos al tema. Lo primero de todo es hacer una pequeña actualización y limpieza del sistema antes de empezar:

diego@denox:~$ sudo aptitude update
diego@denox:~$ sudo aptitude full-upgrade

Probablemente, desinstalará varios paquetes, entre ellos la mencionada ia32-libs y todas sus dependencias. Nada de lágrimas, eso es lo que perseguimos. A continuación, añadimos la segunda arquitectura a dpkg, en mi caso, i386:

diego@denox:~$ sudo dpkg --add-architecture i386

El resto es sencillo. Podría usar dpkg para comprobar las dependencias pero ya he dicho que hoy estoy guerrero, así que instalo directamente skype (bajado de la web oficial):


diego@denox:~$ sudo dpkg -i skype-debian_4.1.0.20-1_i386.deb
Seleccionando el paquete skype previamente no seleccionado.
(Leyendo la base de datos ... 126982 ficheros o directorios instalados actualmente.)
Desempaquetando skype (de skype-debian_4.1.0.20-1_i386.deb) ...
dpkg: problemas de dependencias impiden la configuración de skype:
skype depende de libqtwebkit4 (>= 2.1.0~2011week13).

dpkg: error al procesar skype (--install):
problemas de dependencias - se deja sin configurar
Procesando disparadores para mime-support ...
Procesando disparadores para gnome-menus ...
Procesando disparadores para desktop-file-utils ...
Se encontraron errores al procesar:
skype

Nos comenta que depende de libqtwebkit4 y, al tratar de instalar dicha librería sin indicar la arquitectura, nos corrije:

diego@denox:~$ sudo aptitude install libqtwebkit4
Se configurarán los siguientes paquetes que están ahora parcialmente instalados:
skype:i386{b}
No se instalará, actualizará o eliminará ningún paquete.
0 paquetes actualizados, 0 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 0 B de ficheros. Después de desempaquetar se usarán 0 B.
No se satisfacen las dependencias de los siguientes paquetes:
skype:i386 : Depende: libqtwebkit4:i386 (>= 2.1.0~2011week13) pero no será instalado.
Las acciones siguientes resolverán estas dependencias

Eliminar los paquetes siguientes:
1) skype:i386

¿Acepta esta solución? [Y/n/q/?]

Hace incapié varias veces en que tanto skype como la librería de la que depende están disponibles para la arquitectura i386, únicamente. Así pues, sólo tenemos que complacer al dpkg, indicándole la arquitectura deseada:

diego@denox:~$ sudo aptitude install libqtwebkit4:i386
Se instalarán los siguiente paquetes NUEVOS:
libgstreamer-plugins-base0.10-0:i386{a} libgstreamer0.10-0:i386{a} liborc-0.4-0:i386{a} libqtwebkit4:i386
Se configurarán los siguientes paquetes que están ahora parcialmente instalados:
skype:i386
0 paquetes actualizados, 4 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 8.876 kB de ficheros. Después de desempaquetar se usarán 32,5 MB.
¿Quiere continuar? [Y/n/?]

Y pensar que tenía cierto reparo y hasta miedo…

Debian 7.0 “Wheezy” ya está con nosotros -;)

Y nosotros con ellos, con vosotros… Después de un largo tiempo de desarrollo, la versión 7 de Debian ya es una realidad. Tal y como leemos en el anuncio de la release:

12800 paquetes nuevos, para un total de más de 37493 paquetes, GNOME 3.4, KDE 4.8.4, Xfce 4.8, y LXDE”.

Esta nueva versión de Debian incluye varias funcionalidades interesantes, como, por ejemplo, el soporte multiarquitectura, varias herramientas específicas para desplegar infraestructura de nube privada, un instalador mejorado, y un completo conjunto de códecs y reproductores multimedia que eliminan la necesidad de utilizar repositorios de terceros.

El soporte multiarquitectura, uno de los principales objetivos para Wheezy, permitirá a los usuarios de Debian instalar paquetes para múltiples arquitecturas en la misma máquina. Esto significa que ya es posible, por primera vez, instalar software para 32 bits y 64 bits en el mismo sistema y tener todas las dependencias relevantes resueltas automáticamente.

El proceso de instalación se ha mejorado mucho: ahora se puede instalar Debian usando software de síntesis de voz, por ejemplo para personas con discapacidad visual que no usan un dispositivo Braille. Gracias al esfuerzo combinado de un gran número de traductores el sistema de instalación está disponible en 73 idiomas, y en más de una docena de ellos también se pueden utilizar con el software de síntesis de voz.

Además, por primera vez, Debian soporta la instalación y arranque usando UEFI para PCs nuevos de 64 bits (amd64), aunque aún no hay soporte para arranque seguro

Por cierto, ojo al cambio con los ficheros temporales:

En publicaciones anteriores, se montaban sistemas de ficheros temporales (tmpfs) en /lib/init/rw, /dev/shm/ y opcionalmente en /var/lock y /var/run. Se ha eliminado /lib/init/rw, y los otros sistemas de ficheros se han movido bajo /run. /var/run y /var/lock según la configuración de RAMRUN y RAMLOCK en /etc/default/rcS. Todos estos sistemas de ficheros tmpfs son configurables ahora a través de /etc/default/tmpfs; la configuración anterior no se migra de forma automática.

Como veis, el esfuerzo ha sido grande y es fruto del trabajo de una comunidad orgullosa de colaborar con Debian, activa y generosa. Para los que en nuestro día a día estamos con versiones de desarrollo (Testing o Sid), quizás en nuestros escritorios no veamos estos cambios de una forma tan plausible, pero en los servidores el cambio no es menor.

Debian 7 Wheezy

Sólo hay que ver la lista de paquetes nuevos para darse cuenta. La guía de instalación es muy completa y en este caso, el proceso de actualización de Debian 6 a 7, es un poco más delicado que cuando migramos de Lenny a Squeeze, pero a falta de ponerme a migrar alguno en producción, las instrucciones para hacerlo son claras y ahí se citan posibles problemas más de escritorio que de servers, pero si te puedes fiar de alguien a la hora de actualizar un servidor, pon a Debian muy arriba en la lista ;-;).

Eso sí, no olvides que el fin de soporte para Debian 6 es en julio, aunque como pasó con otras releases, entraron actualizaciones de seguridad pasado el plazo. Fuente e imagen.

Para los SysAdmins, nuevas versiones en Debian 7. Apache 2.2.22, BIND 9.8, lighttpd 1.4.31, MySQL 5.5, PHP 5.4, OpenSSH 6.0, PostgreSQL 9.1, Python 2.7 / 3.2.

fin de soporte Debian 6 Squeeze y ciclo de vida de Debian 7

Así que…Bienvenido Wheezy y gracias Debian por hacerlo posible !!!

Creando clases y objetos flexibles de forma dinámica con eval y ArrayObject en PHP

Debo reconocer que hasta ahora no me había pasado tener la necesidad inevitable y “real” de crear clases “on the fly” (clases al vuelo) hasta que el objeto colector de Europio Engine me enfrentó a ello.

Les explico el problema para que puedan entender cuál fue la motivación para crear este tipo de clases:
Europio Engine, cuenta con objetos genéricos necesarios en cualquier aplicación. Entre ellos, CollectorObject: un objeto colector.

Como explico en el capítulo XVII de mi libro sobre Teoría de Objetos, el objeto colector para un tipo dado, debe ser un Singleton, es decir un objeto de instancia única, pues solo podrá existir una -y solo una- colección para un mismo objeto.

En Europio Engine CollectorObject es un colector genérico. Llamando a CollectorObject::get('NombreDelObjeto') se puede obtener toda la colección de objetos NombreDelObjeto persistentes en el sistema a través de CollectorObject::$collection.

Sin embargo, al ser un objeto de instancia única, si la colección no era recuperada ANTES de solicitar una nueva colección, la última llamada sobrescribía a la primera.

Es entonces que no solo a nivel práctico se hacía necesario poder crear “on the fly” un NombreDelObjetoCollection sino además, ¡a nivel conceptual! Pues un colector genérico, no puede ser de instancia única. Pero, si dejaba de ser de instancia única, dejaba de ser un colector. Así nació la necesidad de crear una clase al vuelo y después de mucho investigar, descubrí que la única forma de hacerlo “sin rodeos ni códigos raros”, era utilizando eval().

Sigue leyendo