viernes, 14 de septiembre de 2012

Zentyal 3.0 : primeras impresiones [ Update 1]


[ Update 1 17-09-2011 ]

He probado Zentyal 3.0 en dos máquinas. Todavía no he visitado su base de datos de "bugs" pero me he encontrado el mismo error en dos máquinas distintas y de distinta arquitectura. El "bug"(realmente no sé si es un bug, pero todo apunta a que sí lo es) congela el proceso de instalación de software vía interfaz web. Mi solución ha sido matar el proceso apt y continuar la instalación desde la línea de comandos. Lo curioso del caso es que a posteriori he probado de nuevo Zentyal 3.0 dentro de un VirtualBox y he encontrado el mismo error. Supongo que toca investigar....

¿Actualizar desde la 2.2 a 3.0? Ummmmmmmmm, no me fío. Comentan en los foros de Zentyal:


I am sure the devs will do a great job on getting a decent upgrade path, but it will take some time (probably some weeks) before it is available.


[Post original]

Tenía ganas(muchas) de probar la nueva versión de Zentyal 3.0. No voy a contar/replicar/copiar/pegar las características de esta nueva versión, pues de gente de Zentyal lo ha hecho fenomenal en este link "Novedades Zentyal 3.0".

Actualmente administro máquinas corriendo Zentyal 2.X y los resultados no pueden ser más satisfactorios: estable, segura y muy sencilla de administrar. Conclusión: clientes contentos y reducción considerable del número de "browns"(Consultar el tratado del marrón) al simplificarse la administración del sistema.

Si ya estáis trabajando con Zentyal en producción el propio ssoo os avisará de la disponibilidad de la nueva versión. De momento está testeando al distribución en una máquina virtual. Veremos como se comporta en producción. El próximo fin de semana probaré esta nueva versión con 65 usuarios en el "IX Ciberencontro Concello de Mugardos  Kernel 2012" y os contaré cuál ha sido mi experiencia.

Ubuntu 10.04.1 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

                    *** Zentyal WARNING ***

Lo primero que me ha llamado la atención en el la versión 3.2.X del Kernel de Linux, por otro lado es obvio, puesto que está basada en Ubuntu 12.04 LTS. La instalación es muy similar(visualmente quiero decir), por no decir idéntica a versiones anteriores.


Finalizada la instalación sorprende(o no) la cuidad interfaz de administración. Si ya has utilizado Zentyal con anterioridad comprobarás como se han mejorado aspectos relacionados con la usabilidad de la interfaz. Además han añadido la opción de configuración de idioma desde la propia interfaz. Para "español" no hay problema. Para "galego" es necesario realizar la operación desde la línea de comandos.

Entrando ya en temas más concretos, personalmente me interensan los módulos HTTPProxy y VPN

Para el módulo HTTPProxy siguen apostando por Squid. Estos son los "pequeños" cambios que he apreciado a primera vista:
  • Pasan de la versión 2.7.STABLE7  a la 3.1.19-1. No tengo experiencia con Squid3(está mis objetivos a corto plazo, así que poco puedo aportar. Y eso? Pues en Debian Lenny siguen con 2.7 y por el momento....
  • Han mejorado la gestión de las "Delay pools".
  • Desde mi punto de vista han mejorado la gestión de las reglas de acceso. En esta nueva versión, aplicarlas es más intuitivo que la versión anterior.
Qué podrían mejorar?
  • Podrían incluír una opción para poder gestionar las políticas de control de caché. [ Más info ]
  • Podrían incluír una opción para poder gestionar "cache_peer" [ Más info ]

En resumen: Zentyal 3.0 es una solución estable y robusta para la implantación en PYME. Esta nueva versión, a pesar de no ser "revolucionaría", continúa con la progresión ascendente en cuanto a calidad, usabilidad y estabilidad de sus predecesores. Enhorabuena!


miércoles, 12 de septiembre de 2012

SSH práctico

A modo de recordatorio dejo unas notas sobre OpenSSH.

Problema:Conexión "automática" a servidores corriendo OpenSSH en distintos puertos con diferentes usuarios,configuraciones y llaves.

Consejo: Edita el fichero ~/ssh/config tal y como se indica en este ejemplo:


 Host dama
    User powerslave
    Port 666
    Hostname iron.maiden.com



Host blind
    User ozzy
    Port 1024
    Hostname crazy.train.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/ozzy_rsa


En la práctica: 


ssh dama


Establecerá una conexión SSH al host iron.maiden. com en el puerto TCP 666


ssh blind


Establecerá una conexión SSH al host crazy.train.com en el puerto TCP 1024 usando la llave almacenada en ~/.ssh/ozzy_rsa

Problema:Ejecutar comandos en un servidor remoto.

Consejo: Recomiendo incluir el host en fichero  ~/ssh/config

Ejemplo: 

apermuy@vpn:~$ ssh apermuy@vps 'cat /proc/cpuinfo|grep model'
model           : 6
model name      : QEMU Virtual CPU version 0.9.1


Problema: Al intentar conectarnos a un servidor remoto recibimos el mensaje "WARNING: POSSIBLE DNS SPOOFING DETECTED!  " y/o "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "

Consejo:  Como indica el propio mensaje "Alguien está haciendo algo malo...". Revisa tus llaves RSA/DSA, logs, accesos....

Ejemplo:


ssh-keygen -R vps.algunhost.org


Problema: Backup directorio con tar sobre ssh.
Consejo: No uses la opción verbose( -v). Incluye siempre que sea posible el host en el fichero  ~/ssh/config

 Ejemplo: Este ejemplo envía el contenido del directorio /tmp al server definido en ~/ssh/config y, lo empaqueta en tar y lo comprime con gzip.

 tar zcf - /tmp | ssh apermuy@vps "cat > tmp.tgz"



 Problema: No solicitar que se verifique un host desconocido. 

root@vpn:/home/apermuy# ssh apermuy@vps
The authenticity of host 'vps.algunhost.org (111.111.222.333)' can't be established.
RSA key fingerprint is 2b:11:13:49:11:f9:72:71:28:67:51:2f:d7:2a:5d:6d.
Are you sure you want to continue connecting (yes/no)?


Ejemplo: 

 UserKnownHostsFile /dev/null
 StrictHostKeyChecking no 

Problema: Compactar con tar al vuelo vía ssh hacia un host remoto.

Ejemplo:

 tar zcf - /home/apermuy | ssh apermuy@111.222.333.444 "cat > /tmp/test.tar.gz"



miércoles, 29 de agosto de 2012

Putty Gen “Server refused our key”


Por motivos laborales me he visto obligado a utilizar Microsoft Windows Vista como sistema operativo. El caso es que al generar un par de claves RSA e intentar conectarme a un servidor corriendo OpenSSH recibo "siempre" el siguiente error:

Server refused our key

La solución es muy sencilla. Una vez hemos copiado la clave pública al servidor en cuestión usamos "ssh-keygen" para limpiarla y "convertirla" a "formato openssh" con el siguiente comando:


apermuy@vpn:~$ ssh-keygen -if id_rsa_vbox_sdk.pub > pub_vbox


El siguiente paso es añadir la "llave limpia" al fichero %h/authorized_keys . Tan sencillo como:


cat pub_vbox >> .ssh/authorized_keys


El problema por el cual el servidor rechaza la llave es el formato de la misma. Resumiendo. El "formato" de la llave que genera "putty-gen" es distinto a que espera el servidor(openssh).Veamos un ejemplo:

Contenido de la llave en formato "putty-gen":

El mismo contenido después de convertirla a formato ssh, tal y como se indica en este post:


ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAvkO+GR3NqkGdPxn2MesgSiJBoZ7zzIsULb/JzdP48z6LKAT5YbKs0sRdoUv2iK9pgrJXn18y62yVFAf0BPkgJOS6u7sGkwIHLnyhFI0Pb+NEpXALtCYIUKv6Vh8NfaAcy7M4icM8wRMZ14CAe3SCmoby/MZbqfo9GeUXuBAYxDH---------------------VylMVhxRnuUnMjKkjzSEYNZvc0/dq6omuEGw2VbyTjLcYel5kmmvM8OFXFnqg9Kr0ITjZBxvNk56S9jfOqs9qgt9TMFFHUgHGaYpS+S42JG7m5k7HSp57ZrRaP/9l4BqOQLnwTJLFjOCV272uQzbbUQ==

En resumen: el formato "openssh" sólo espera una línea con el contenido de la llave, comenzando la cadena(p.e) por "ssh-rsa".
Saludos!

lunes, 27 de agosto de 2012

Mi visión particular del verano

El verano se ha terminado, por lo menos para mí. Hoy he comenzado a trabajar después de 21 días de vacaciones. Apenas he viajado, sólo un paseo de 3 días a Bueu y Cangas. No puedo quejarme, máxime después de visitar Polonia el pasado mes de mayo.

Estas vacaciones no me apetecía nada ponerme a estudiar C# ni ASP.net, que es con lo que estoy lidiando últimamente, sin embargo si he tocado, aunque fuese por encima:


  • Squid : He actualizado el repo de Github.com de la versión 2.X. Si os interesa podéis echarle un vistazo a la configuración básica en :  https://github.com/apermuy/squid2
  • He colaborado con GALPon redactando un "mini-howto" para la instalación de un Moodle 2.4 en Debian GNU/Linux Squeeze. Podéis echarle un vistazo en  http://www.galpon.org/wiki/index.php/Instalando_Moodle_en_%C2%ABlocal%C2%BB_para_pruebas
  • He re-escrito el formulario de inscripción del IX Ciberencontro Kernel 2012 de Mugardos, además también me he currado una app en Gambas para la lectura de los datos.
  • tune2fs : Un "tune2fs -m 0 /dev/sda4" me "ha devuelto" todo el espacio que non encontraba en una de la particiones de mi PC de sobremesa.
  • Drupal: He tocado Drupal 6 + CCK + Views en la web de "Asociación Comunidade O Zulo". Espero que en el Kernel 2012 podamos migrar todo el contenido a Drupal 7.
  • Zentyal: He trasteado con la versión 2.2. Nada nuevo, pero igual de interesante.
  • Debian GNU/Linux: Encantado con la versión unstable en mi PC de escritorio.
  • PHP: Recomiendo visitar  http://www.eugeniabahit.com/ , sobre todo la sección PHP POO.

He dejado miles de temas en el tintero, supongo que con algo más de tiempo y ganas, algún día los escribiré en este espacio.


martes, 24 de julio de 2012

Moodle, logs y cómo salvar el culo...

Ayer Lunes día 23 de Julio de 2012 fue uno de los días más jodidos desde que estoy trabajando en esta empresa. Estamos en plena "justificación", es decir: "sacar/imprimir/generar miles de informes de toda la actividad de los últimos 12 meses", y todo se necesita "ya".

El pasado Viernes día 20 me avisaron de que "para ayer" deberíamos tener listos los accesos y calificaciones de todos los alumnos que han cursado algún plan formativo con nosotros. Lo de todos los años: ir a Moodle, entrar en el curso, generar informe y asunto zanjado. Nada más lejos de la realidad!

Comienza el "marrón" con la operación descrita en el párrafo anterior y bueno, la verdad es que aunque suene raro, hasta parecía divertirme y todo! Que si un informe por aquí, que si lo guardo por allá, hasta que "0 registros" encontrados para el curso XXXYYYZZZ: "No puede ser!"  pensaba en voz baja. "Voy a generar de nuevo el informe", pero nada: 0 registros! Llamo a mi compañero y le comento el problema: "Yo genero los informes cuando termina el curso, pues 'el Moodle' está configurado para eliminar los registros después de 100 días de inactividad", responde. El cielo se vuelve negro y yo comienzo a plantearme seriamente abandonar el país de inmediato, dejarlo todo y comenzar una nueva vida en Cuba vendiendo postales en el Malecón. "Keep calm and carry on!".

"Copias de seguridad, eso es" vuelvo a repetir en voz baja. Descargo vía "scp" los últimos backups de los cursos en cuestión y los intento restaurar en mi máquina local. Imposible! Ni aumentando "timeouts" , ni "tuneando MySQL", nada, ni una sola operación de restauración se realizaba correctamente...Las 16:05. 35ºC en el estudio. No sabía qué hacer. Bajo a tomar algo frío, subo de nuevo al estudio y pienso "puedo descargar toda la bbdd e intentar recuperar los logs de acceso, luego los exporto a XLS y asunto arreglado". No fue tan fácil como pensaba, pero sí, lo logré. Es muy probable que a nadie le interese cómo lo he logrado pero voy a dejarlo escrito por aquí, por que es probable que algún día necesite volver a leer este post.

1.- Restaurar la bbdd.

mysql -u root -p bbdddepruebas < copiabbdd.sql

2.- Ni se os ocurra trabajar con PhpMyAdmin o similar. En mi caso he usado MySQLWorkBench y no he tenido ni un problema. Hablamos de 2.100.000 registros en una sóla tabla.....

3.- Crear una "View" sólo con los registros del curso en cuestión. Sabéis que en Moodle todos los cursos tienen un "id" único, pues bien, yo he creado una "View" para cada curso del que había perdido los logs.

CREATE VIEW idcurso AS SELECT * FROM mdl_log WHERE course = 80

4.- Bien, ahora creamos una consulta sobre la vista pero con dos "INNER JOIN" sobre las tablas mdl_user(para obtener el nombre del usuario a partir del userid) y mdl_resource(para obtener el nombre del recurso/actividad a partir del resource_id).

SELECT
    FROM_UNIXTIME(x.time),
    x.ip,
    CONCAT(u.firstname, ' ', u.lastname) AS NombreAlumno,
    x.action as Accion,r.name as Informacion
FROM
    idcurso x
INNER JOIN mdl_user u ON x.userid = u.id
INNER JOIN mdl_resource r ON x.info = r.id
LIMIT 0 , 100000 


Pasteamos directamente la consulta en MySQLWorkbench, esperamos a que finalice la ejecución y listo! Ya podemos pulsar el botón exportar y generar el informe de acceso.


Así es como pasé el Lunes 23 de Julio de 2012, entre Moodle y sentencias SQL. Lo bueno: he entregado el trabajo a tiempo. Lo malo: era mi día libre.

Salud!