Publicado por & archivado en Desarrollo, Noticia, Teoría.

migasfree actual

A principios del año 2015, comencé el proyecto migasfree-backend con la idea de redefinir el servidor migasfree. Enforcarlo hacia una solución escalable (con alta disponibilidad) y fácilmente explotable a través de una API REST.

Después de unos meses de trabajo, teníamos un prototipo bastante prometedor para empezar a depurar y perfilar. Venía con un nuevo protocolo de comunicación entre cliente y servidor que era a la vez cifrado y autenticado gracias a la tecnología JWT, con un servicio de tareas en segundo plano gracias a Celery y Redis y con muchos cambios en el modelo de datos de la aplicación.

Era demasiado revolucionario y rompedor con la versión del servidor que teníamos en producción. Por eso se nos planteaba el reto de cómo hacer la transición entre uno y otro. Dos eran los escollos más importantes para dar el salto:

  1. Qué hacer con los clientes antiguos que accederían al nuevo servidor.
  2. Realizar una aplicación de IU (migasfree-frontend) para explotar los datos del nuevo servidor a través de la API REST.

Tras darle multitud de vueltas, hemos llegado a la conclusión de que la mejor forma de ir afrontando estos cambios tan radicales, es ir haciéndolos de manera progresiva. Para ello, en breve empezaremos a desarrollar la edición mushrooms del servidor de migasfree. Será la versión 5 y empezará a cambiar el modelo de datos para ir encaminándolo hacia el que tiene migasfree-backend.

Vendrá también con dos protocolos de comunicación para los clientes: el actual y el nuevo basado en JWT. De esta forma, esta versión 5 se convierte en una versión de transición entre lo que hay actualmente en producción y lo que queremos que se convierta la suite migasfree.

Tenemos previsto que en la versión 6 (denominada extraoficialmente como liver), se elimine todo el código de compatibilidad que mantendremos en la versión 5 (tanto de protocolo de comunicación como de interfaz de explotación de datos). Para cuando llegue a las pantallas la versión 6, tendrá que estar listo el proyecto migasfree-frontend para consumir la API REST.

Seguramente, el proyecto migasfree-backend jamás verá la luz como un producto en producción. Sin embargo, nos ha venido que ni pintado para reflexionar sobre ideas nuevas sin tener que arrastrar lastres del pasado.

el migasfree que viene

Nuestro deseo, con los próximos cambios que se avecinan, es convertir nuestro patinete (la versión actual) en un auténtico coche de carreras ;).

Publicado por & archivado en Tutorial.

En la documentación del proyecto, se menciona de pasada el parámetro MIGASFREE_REMOTE_ADMIN_LINK, describiendo brevemente cómo configurar el acceso por VNC y SSH a los equipos, pero sin explicar cómo conseguir que esos protocolos sean accesibles directamente desde nuestro navegador web.

En el siguiente artículo vamos a sacarle más funcionalidades a este parámetro de configuración y a narrar cómo configurar nuestro entorno (se entenderá que es una máquina con Linux) para obtener un acceso directo a los protocolos desde el navegador (Firefox, Chrome/Chromium).

En el servidor migasfree

Para comenzar, tendremos que configurar adecuadamente el parámetro en el archivo /etc/migasfree-server/settings.py de nuestro servidor migasfree. Un ejemplo, podría ser el siguiente:


MIGASFREE_REMOTE_ADMIN_LINK = "mvnc://{{computer.ip}} mping://{{computer.ip}} mssh://root@{{computer.ip}} mupdate://root@{{computer.ip}}"

Para que los protocolos sean “personalizados” y no causen conflictos con otros que pueden tener otra configuración en los sistemas, he preferido anteponerles la letra “m” (de migasfree ;)).

Tras realizar los cambios, deberemos hacer que el servidor web relea la configuración para que se apliquen dichos cambios.

Como se comenta en el libro, después de activar este parámetro, cada vez que se represente un ordenador en la aplicación web de migasfree, tendremos disponibles nuevas acciones que vendrán indicadas por los nombres de los protocolos. Siguiendo el ejemplo serían: mvnc, mping, mssh y mupdate. Eso sí, por mucho que pulsemos sobre ellos en el interfaz, no van a realizar todavía ninguna acción, ya que todavía falta por configurar la parte cliente (nuestra estación de trabajo que se conecta al servidor), para obtener las funcionalidades perseguidas.

En nuestro ordenador cliente

Creamos en primer lugar el fichero /usr/bin/migasfree-protocols, con el siguiente contenido:


#!/bin/bash

_PROTOCOL=$(echo $1 | awk 'BEGIN {FS = "://"}; {print $1}')
_URL=$(echo $1 | awk 'BEGIN {FS = "://"}; {print $2}')

case "$_PROTOCOL" in
    "mssh")
        gnome-terminal --command "ssh $_URL"
        ;;

    "mvnc")
        vncviewer $_URL
        ;;

    "mping")
        gnome-terminal --command "ping $_URL"
        ;;

    "mupdate")
        gnome-terminal --command "ssh $_URL migasfree --update; echo; echo TERMINADO; read"
        ;;
esac

En este fichero, que deberá tener permisos de ejecución, se describe qué hacer con cada uno de los protocolos. En este ejemplo son necesarias las utilidades ssh y vncviewer, pero se podrían cambiar por otras (al igual que gnome-terminal), dependiendo de nuestra distribución Linux.

Ahora sólo falta decirle al navegador qué debe hacer cuando se encuentre con los protocolos. El proceso va a diferir según el navegador web que usemos.

Chrome/Chromium

Tenemos que configurar la asociación de protocolos a nivel de entorno gráfico. Para ello, crearemos el fichero /usr/share/applications/migasfree-protocols.desktop:


[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=migasfree protocols
Exec=/usr/bin/migasfree-protocols %U
Terminal=false
MimeType=x-scheme-handler/mssh;x-scheme-handler/mvnc;x-scheme-handler/mping;x-scheme-handler/mupdate;
NoDisplay=true
StartupNotify=true

Como este lanzador sólo tiene fines de asociación de MimeTypes, no se mostrará en el menú de aplicaciones (NoDisplay=true), por lo que no es necesario que tenga asociado un icono o las categorías definidas.

Después, sólo queda actualizar la base de datos de lanzadores y mimetypes mediante los comandos (con un usuario con privilegios de root):


# update-desktop-database
# update-mime-database /usr/share/mime

Firefox

Para este navegador, además del paso anterior, tendremos que crear el fichero /usr/lib/firefox/defaults/pref/migasfree.js con este contenido:


pref("network.protocol-handler.expose.mssh", false);
pref("network.protocol-handler.expose.mvnc", false);
pref("network.protocol-handler.expose.mping", false);
pref("network.protocol-handler.expose.mupdate", false);

pref("network.protocol-handler.app.mssh", "/usr/bin/migasfree-protocols");
pref("network.protocol-handler.app.mvnc", "/usr/bin/migasfree-protocols");
pref("network.protocol-handler.app.mping", "/usr/bin/migasfree-protocols");
pref("network.protocol-handler.app.mupdate", "/usr/bin/migasfree-protocols");

pref("network.protocol-handler.warn-external.mssh", false);
pref("network.protocol-handler.warn-external.mvnc", false);
pref("network.protocol-handler.warn-external.mping", false);
pref("network.protocol-handler.warn-external.mupdate", false);

pref("network.protocol-handler.external.mssh", true);
pref("network.protocol-handler.external.mvnc", true);
pref("network.protocol-handler.external.mping", true);
pref("network.protocol-handler.external.mupdate", true);

Y una vez que volvamos a iniciar el navegador ya tendremos disponible el comportamiento esperado.

Corolario

Como puede verse, las posibilidades son amplias y van a depender de nuestro entorno particular para adecuarlo a unas necesidades determinadas. Es por ello que desde el proyecto migasfree no se ha creado un paquete genérico para cubrir esta funcionalidad.

Se deja como ejercicio práctico para cada organización el crear un paquete a medida con los protocolos que allí se consideren prácticos y realizar la configuración adecuada para sus entornos de explotación (navegadores) de la aplicación web de migasfree.

Publicado por & archivado en Desarrollo, Teoría.

Que significa cuestiónalo todo. Cuestiona lo que tienes alrededor pero, sobre todo, cuestiónate a ti mismo, lo que haces y cómo lo haces. Es reinventarse a sí mismo, mejorando cada día con lo que aprendes por la experiencia adquirida y por la experencia que proporcionan los conocimientos de otras personas.

Con esa intención, desde hace unos meses, estamos construyendo un nuevo migasfree. Que se apoya en conceptos que funcionan en lo que ya está hecho, pero que le da unas cuantas vueltas de tuerca a otros que, a pesar de ser funcionales, no dan la suficiente versatilidad a un proyecto de esta envergadura.

Esta idea de reinvención germinó en Bilbao, el pasado noviembre, mientras asistía a la LibreCon. Allí me di cuenta de dos cosas. La primera, que el concepto de migasfree, aun siendo bueno, no terminaba de calar entre el público por su aparente complejidad. Y la segunda y más importante, que encontré la pista para que fuera más atrayente. Esta pista se basa en algo muy sencillo: deja que otros jueguen con tu aplicación para que la puedan extender y adaptar.

Y para que otros puedan jugar con migasfree, había que facilitar las reglas de juego. Esta idea me llegó durante la charla de Kaleidos sobre Taiga. Habían construido su proyecto dividiéndolo en capas, en otros proyectos independientes pero que se comunicaban con el principal a través de una REST API. Esto posibilita a cualquiera que conozca esta API, interactuar y explotar los datos de la forma en que más le convenga, posibilitando que la comunidad se sienta más atraida porque pueden construir otras piezas a partir de un núcleo sólido. El concepto no es revolucionario, pero de repente, comprendí que eso mismo era lo que le faltaba a migasfree.

Durante 5 años, migasfree se ha ido construyendo con parches sobre parches alrededor de una idea inicial y hay algunas cosas que ya no se aguantan sobre esos inestables andamios. Además, para construir un núcleo sólido había que clarificar y repensar algunos conceptos clave. Los tres más importantes tienen que ver con la semántica y la importancia de escoger nombres adecuados.

  • Repositorio evoluciona a liberación. La denominación de repositorio resultaba confusa porque se podía confundir con los repositorios estáticos de cualquier distribución Linux. Sin embargo, en migasfree se le está dando otra vertiente mucho más dinámica tanto en el eje temporal como en funcionalidades. Por esto se cambia a liberación: se distribuyen cambios de software (instalación/actualización/desinstalación) a equipos según unos atributos y un calendario.
  • El concepto de versión ha sido cambiado por el de proyecto. Versión daba una idea de evolución y de posibilidad de intercambio de los equipos entre otras versiones, pero la idea de proyecto es algo más estanco y deja claro que cada ordenador pertenece a un solo proyecto y no a otro. Por proyecto se entiende una distribución base (como Fedora 21 o Ubuntu 14.04) más una capa de personalización para una organización concreta.
  • Actualización pasa a ser sincronización. La idea de actualización es demasiado genérica ya que cambios en los equipos puede haber muchos. La idea de sincronización es mucho más concreta ya que refleja el conjunto de operaciones que realizan cliente y servidor para dejar en condiciones adecuadas el puesto de trabajo.

Pero hay muchos más cambios. El más relevante se refiere precisamente a la API que pondrá el núcleo (llamado a partir de ahora migasfree-backend) a disposición de quien la quiera usar. Una API mucho más amplia y basada en REST. Otro cambio, también significativo, es la nueva escalabilidad que se va a conseguir al usar un conjunto de tecnologías: Celery, Redis, Circus, Chaussette, Nginx, HAProxy

Escalabilidad de migasfree

El trabajo dista mucho de estar acabado, pero tenemos claro que esta es la dirección sobre la que tenemos que seguir avanzando. Tampoco sabemos qué pasará cuando tengamos una versión funcional y se quiera implantar sobre un migasfree actual. Será algo que nos plantearemos en su momento. El protocolo entre cliente y servidor ha cambiado sustancialmente y, aunque es trivial cambiar los clientes, habrá que pensar muy bien cómo actualizar el servidor.

Cuando hayamos encauzado todos estos cambios, migasfree habrá ascendido de categoría y estará en condiciones de ser usado en organizaciones muy grandes (con más de 10 mil equipos). Además, dará la libertad de programar clientes para cualquier plataforma imaginable y frontends en cualquier tecnología que se quiera. Tan solo tendrán que seguir la API proporcionada por migasfree-backend y añadir algún nuevo PMS si fuera necesario.

Publicado por & archivado en Teoría.

Este es el resumen del proceso GCS en tu organización con migasfree:

  1. Un usuario hace un petición de cambio.
  2. Un desarrollador programa el cambio de la configuración software dentro de un paquete y lo sube a un servidor migasfree.
  3. La liberación es realizada por el servidor migasfree a los ordenadores requeridos.

Y, como se puede ver en el gráfico, migasfree tan sólo aparece al final del proceso, en la fase de liberación.

Publicado por & archivado en Noticia.

Esta vez le tocaba a este blog que estás leyendo. Después de 3 años con el mismo aspecto, era hora de cambiar y de aplicar algunas lecciones aprendidas.

Necesitábamos un nuevo look, más acorde con los tiempos que corren y adaptable a los nuevos dispositivos que tan comunes se han vuelto estos últimos años.

Para el cambio hemos usado:

Aprovechando el uso de Bootstrap, hemos adaptado el contenido de las páginas estáticas para darles un aspecto más atractivo. Como muestra, puedes ver la página About.

Para comprobar el resultado final en distintas resoluciones de pantalla, hemos hecho pruebas con la herramienta online Responsive Web Design Testing.

Además, también estamos de estreno en la Wikipedia.

Publicado por & archivado en Evento.

La librecon 2014 son dos jornadas de conferencias, casos de éxito, keynotes, charlas y talleres, con las últimas tendencias del sector de las tecnologías abiertas.

Se celebrará en Bilbao los días 11 y 12 de noviembre.

Jose Antonio Chavarría, desarrollador de migasfree, dará una charla sobre las características que debe reunir un sistema de gestión de sistemas y cómo migasfree afronta cada una de ellas. Además, nos dará consejos para implantar migasfree en una organización.

Si vas a la librecon 2014, y te interesan estos temas, no dejes pasar la oportunidad de oír a Jose Antonio.

Actualización (2014-11-21)

Aquí tenéis la presentación:

Publicado por & archivado en Teoría.

Ya han pasado más de 4 años desde que Alberto Gacías iniciara la andadura de este proyecto en abierto. El embrión que era por aquel entonces ha sufrido muchos y enormes cambios (aunque mantiene la esencia intacta) y ha evolucionado para convertirse en una potente herramienta administrativa para controlar la configuración software de los equipos de las organizaciones.

En un artículo de agosto de 2010, se mencionaban una serie de características necesarias e imprescindibles para la gestión de grandes parques de ordenadores. En aquel año, el autor hablaba de aplicaciones como Landscape o Spacewalk. Repasemos aquella lista para comprobar si migasfree puede competir con Canonical y Red Hat:

  • Inventariar las máquinas, tanto a nivel de software como hardware, con estadísticas de uso de las aplicaciones.

    Migasfree echa mano de la base de datos del sistema de paquetería para inventariar el software y mantener un histórico de los cambios que se han producido en los equipos.

    Para el hardware, usa lshw para recolectar los modelos de las piezas físicas. Además, convierte estos resultados en propiedades que luego pueden servir para asignar un determinado software a equipos que tengan un componente específico (como un controlador mejorado para un modelo especial de tarjeta gráfica).

    Sobre las estadísticas de uso de las aplicaciones todavía no se ha hecho nada.

  • Actualización de aplicaciones, parches de corrección de errores y seguridad, pudiendo planificar las acciones (temporalmente, por grupos, etc), y además automatizarlas.

    Este es uno de los aspectos esenciales de migasfree. Al basarse en el sistema de paquetería de las distribuciones Linux, es muy fácil actualizar aplicaciones en los equipos. Esto unido al sistema de distribución fundamentado en demoras de tiempo, cumple con creces este apartado.

  • Gestión de configuración remota y centralizada, a nivel de sistema y de aplicaciones principales.

    Aunque migasfree no es directamente la herramienta encargada de realizar estas acciones, sí que es la que se utiliza para distribuir los cambios.

    La filosofía en la que se apoya migasfree es: zapatero a tus zapatos. Es decir, que cada cual se dedique a lo que mejor sabe hacer. Si ya existe un sistema de paquetería que mantiene la integridad de los equipos Linux, que sea este sistema quien se encargue de hacer los cambios en la configuración software. Todo cambio, ya sea a nivel del sistema operativo o de una aplicación específica, es necesario empaquetarlo para que el sistema pueda conservar su integridad. Es después, con migasfree, cuando se distribuye a los equipos y se puede obtener un feedback si la operación se ha completado o no correctamente.

  • Aprovisionamiento de estaciones nuevas.

    Todo lo que necesita el servidor migasfree para agregar una nueva estación de trabajo en su sistema es que el cliente migasfree se conecte al servidor. Esto se consigue instalando el paquete del cliente y configurando cuando se quiere ejecutar periódicamente (lo cual se puede hacer con otro paquete).

    Y ya está. Migasfree también se basa en el concepto de configuración cero y es capaz de recolectar muchos datos de los equipos automáticamente.

  • Despliegue de aplicaciones.

    Otro aspecto muy relevante en la gestión automatizada de equipos es poder ordenar la instalación o desinstalación de aplicaciones. En cada repositorio que se crea en migasfree, se pueden especificar qué paquetes es obligatorio instalar o desinstalar de los equipos. Es decir, además de poner como disponible cierto software se pueden transmitir órdenes al sistema de paquetería para que agrege o elimine paquetes.

  • Soporte al usuario, vía mensajería instantánea y escritorio remoto.

    Si hemos quedado en que todo cambio en la configuración software se hace a través de paquetes, cumplir este requisito es tan sencillo como hacer los paquetes necesarios para configurar estas herramientas (u otras como conexiones por SSH) y distribuirlas en los equipos con migasfree. Además, con este sistema, se podrían cambiar puertos de conexión o contraseñas para los servicios muy fácilmente y de manera automatizada.

  • La posibilidad de realizar todas las acciones individualmente o por grupos.

    Migasfree recolecta mucha información automáticamente de los equipos cliente a través de las propiedades, que tienen la virtud añadida de ser programables.

    Por si esto fuera poco, también existen las etiquetas para asignar atributos
    manualmente a ciertos equipos (por ejemplo, que estén en una determinada ubicación o que requieran una determinada funcionalidad).

    Con todo este conjunto de datos, se puede realizar la asignación de software sobre grupos muy concretos de ordenadores.

Publicado por & archivado en Desarrollo.

Casi 2 semanas después de liberar la versión 4.0, publicamos la 4.1.

Entre la multitud de incidencias resueltas en este período de tiempo, destacamos las siguientes:

  • Se ha solventado el problema de los submenús en dispositivos táctiles, quitándolos y reorganizando las opciones en nuevos menús de primer nivel.
  • También se han hecho mejoras de rendimiento, sobre todo en las estadísticas. Ahora se hacen menos consultas a la base de datos para recuperar los datos.
  • Otra mejora importante ha sido la incorporación de enlaces relacionados en algunos elementos clave como ordenadores, atributos y versiones.
  • Parece que por fin hemos dado con el quid del UUID de los ordenadores para no duplicar equipos.
  • Se ha actualizado la documentación en el magnífico libro Fun with Migasfree.

Publicado por & archivado en Desarrollo.

A mí personalmente no me gustan con uva, pero… creo que esta es la mejor versión del proyecto (hasta el momento, jejeje). Y aunque los programadores siempre digamos lo mismo una y otra vez, en cada ocasión que logramos publicar una versión de un producto (para justificar así nuestro arduo trabajo ;)), veamos las razones para decirlo esta vez.

Cambios respecto a migasfree chocolate edition:

  • Open Flash Chart ha sido sustituido por Flot (javascript plotting for jQuery)
  • Uso de Bootstrap para el diseño de la aplicación:
    • adaptación a dispositivos móviles
    • look más zen y minimalista
    • más espacio disponible para los datos importantes (una única columna central)
    • menús desplegables
    • mejoras visuales en la información sobre el calendario de los repositorios
  • Es necesario Django 1.6 para ejecutar migasfree (actualización de django-ajax-selects)
  • Selector de versión disponible en todas las páginas
  • Alertas visibles (actualizadas con Ajax) en todo momento y mejor clasificadas
  • Mejoras en la navegación entre datos relacionados entre sí
  • Sólo se almacena el último login en cada ordenador (mejoras en los resultados de las búsquedas)
  • Los datos recolectados por los clientes son de sólo lectura
  • Se han separado los archivos estáticos (imágenes, hojas de estilo, javascript) de los repositorios y paquetes
  • Es posible asignar resultados de fallas a usuarios (y que no aparezcan para todos)
  • Se pueden añadir todos los protocolos que se quieran para acceder a los ordenadores remotamente (MIGASFREE_REMOTE_ADMIN_LINK)
  • Configuración y administración centralizada de dispositivos (por ahora sólo impresoras)

Se ha hecho un gran cambio de aspecto a la aplicación (y ya es el segundo de estas características, pero este es el bueno de verdad ;)), con la idea de tener un entorno multidispositivo (PC, tablet, smartphone). Ha sido posible incorporando Bootstrap al proyecto. Ha quedado una aplicación mucho más usable y resultona (agradable a la vista). Queda pendiente el tema de los submenús desplegables, que en móviles no quedan muy usables, pero eso se tratará en una próxima versión.

Otro gran cambio, aunque no tan visible, es el que hemos hecho respecto a los settings de migasfree en Django. Los hemos separado y clasificado para que sea más sencillo involucrarse en el desarrollo del proyecto.

También queda pendiente el tema de la gestión de dispositivos (impresoras), aunque se ha dado un nuevo giro al tema. Por ahora sólo está disponible en el servidor de migasfree, por lo que aunque se configure la gestión, los clientes todavía no saben qué hacer con esa información. Tal vez muy pronto se realice la parte que falta. Todavía es un asunto en fase de experimentación, ya que es un cambio en la filosofía de migasfree. Hasta el momento, todos los datos de los ordenadores los proveían los clientes de migasfree, pero los dispositivos se tienen que dar de alta manualmente.

El próximo reto de migasfree-server es el rendimiento y en ello nos enfocaremos en la próxima versión. Versión que bautizaremos muy pronto en la ya tradicional degustación de migas para celebrar la publicación de la presente release.

En los próximos días se actualizará la documentación del proyecto para que recoja todos los cambios hechos en esta versión. Informaremos del progreso en este aspecto.

Por el momento, no queda otra que ir descubriendo empíricamente todos ellos. ¡Que disfrutéis de migasfree grape edition!