Instalar virt-manager en Opensuse Tumbleweed

Bueno… Hace algunos años estoy usando software libre, pero con los años te vas enterando que el mundo del software libre también tiene excepciones a la regla en lo que respecta a los parámetros de “software libre”, todos no parecen estar de acuerdo al 100% con la filosofía stallman o simplemente no se quieren complicar.

Lo que quiero decir es simplemente que si hablamos de algo es porque lo practicamos o por lo menos eso pienso y me esfuerzo por hacer. Bajo este argumento propio engendrado por mis propias conclusiones y experiencias siempre me auto impongo la tarea de usar software 100% libre, pero debo decir que hay que insistir pues no es tarea de un doble click.

Cuando te inicias en el mundillo GNU/linux sufres de algo que se llama distrohopping, en simples palabras vas de distribución en distribución buscando algo que a veces ni tu mismo sabe que es, Jajajaja yo también la sufrí y en algún momento decidí parar sin dejarlo del todo, es aquí donde conocí virtualbox.

¿Que es virtualbox?

No es mas que un software que permite simular x hardware para desplegar de manera controlada y hospedada localmente sistemas operativos. Por mucho tiempo lo use y llego el día que empecé a cuestionarme, ya saben, por eso del software libre y tal… En mi busqueda algo que para mis amigos es superior o como dirían los amigos de hatthieves.es es la ostia!!…

¿Que es Virt- manager? el software la ostia.

Es una interfaz de usuario de escritorio para administrar maquinas virtuales a través de libvirt. Se dirige principalmente a maquinas virtuales KVM, pero también administra Xen y LXC (contenedores de Linux). Presenta una vista resumida de los dominios en ejecución, su rendimiento en vivo y estadísticas de utilización de recursos. Los asistentes permiten la creación de nuevos dominios, y la configuración y el ajuste de la asignación de recursos y el hardware virtual de un dominio. Un visor de cliente VNC y SPICE incorporado presenta una consola grafica completa para el dominio invitado. Esto es una definición oficial que encontramos en virt-manager.org.

Ahora si… Como instalar virt-manager en Opensuse tumbleweed.

Lo primero que debemos hacer es abrir YaST Software para instalar los paquetes necesarios, yo suelo presionar Alt+barra_espaciadora y en KDE se desplegará un pequeña barra en la parte superior del escritorio, ahí se escribe el criterio de búsqueda, que en este caso es “yast software”.

Una vez hacemos click sobre el asistente grafico de instalación de paquetes (YaST Software) de opensuse tumbleweed nos aparecerá algo así:

En esta ventana nos interesa el apartado View, damos click y nos aparecerá una lista desplegable con 6 opciones, la que nos interesa es la numero 1 Patterns.

Ahora veremos del lado izquierda todos el software disponible en los repositorios de opensuse tumbleweed organizados por patrones, con esta ventaja podremos ubicar de forma unificada el conjunto de paquetes necesarios para la instalación de virt-manager. En dicha lista nos desplazamos hacia abajo usando la rueda del mouse o usando la barra para desplazarse; así encontramos los patrones KVM Host Server, KVM Virtualization Host and Tools, seleccionamos y presionamos Accept para iniciar la instalación.

Terminada la instalación podemos cerrar la ventana y ahora abrimos una terminal para ejecutar un comando, puedes copiar con control+c y pegar en la terminal con shift+Ctrl+v, presiona enter, ingresa tu contraseña y listo. El comando es:

$ sudo systemctl enable --now libvirtd

Este comando simplemente arranca el servicio libvirtd y lo habilita para iniciar con el sistema, de esta forma no tendremos que estar pendiente de aplicarlo ante de abrir virt-manager.

Ya casi para terminar hay que agregar nuestro usuario a los grupos KVM, qemu y libvirt. Para hacer esto nos vamos a la interface grafica de opensuse que nos permite modificar la configuración del sistema; YaST lo podemos encontrar usando nuevamente Alt+barra_espaciadora (KDE) o ir al lanzador de aplicaciones.

Así como en la imagen iremos a Security and Users para después hacer click en User and Group Management, veremos la ventana a continuación:

En ella vamos a dar doble click sobre nuestro nombre de usuario o presionar edit, que esta ubicado en la parte baja de la ventana. Luego como en las imágenes de abajo hay que presionar en “Details” y del lado derecho de la ventana en Additional Groups buscamos y selecionamos los grupos antes mencionados (KVM, qemu y libvirt.), click en OK para guardar los cambios.

Para que el sistema asimile los cambios realizados debemos cerrar la sesión y volver a ingresar. Ahora ya podemos ejecutar virt-manager para encontrarnos con esta pequeña pero poderosa interface, desde aquí podemos crear, ejecutar, configurar las maquinas virtuales. Por otro lado o como continuación a este post crearé una para explicar como crear y configurar las instancias virtuales.

Gracias a @DevWEDC del canal telegram en español de opensuse .

El placer de hacer y compartir … 🙃

Usa Virt-Manager NO VirtualBox

logo-virt-manager

Desde que se lanzó la versión 10 de Debian GNU/Linux (Buster) en su página nos recomiendan dejar de usar VirtualBox por la aplicación de escritorio Virt-Manager

apt install virt-manager

Ya conocemos desde hace años VirtualBox de Oracle para trabajar con máquinas virtuales, es OpenSource aunque el producto está controlado por la misma empresa. Como alternativa ahora se utiliza Virt-Manager que está basado en KVM y libvirt, aunque también puede gestionar Xen o LXC directamente

Como podéis ver el entorno nos recuerda mucho a otras aplicaciones de virtualización como VMware o VirtualBox, al crear una máquina virtual nos da a elegir el tipo de instalación que queremos realizar

Una vez configurados los parámetros del menú wizard, se generan los recursos necesarios para arrancar la máquina virtual, esto podemos realizarlo también mediante comandos pero la GUI nos facilita mucho la tarea

También hay que configurar las interfaces de red que se asignarán a las máquinas virtuales, aunque la aplicación lo hace todo a golpe de ratón con permisos de root

Como se puede ver el menú nos recuerda mucho a otras aplicaciones de virtualización, aunque difieren muchas de las configuraciones, por ejemplo no hay límites a la hora de asignar los núcleos del procesador a una máquina virtual, pero la aplicación nos avisa que puede incurrir en un bajo rendimiento

Os animo a probarlo y utilizarlo como alternativa a otras aplicaciones de virtualización tanto comerciales como libres y comprobar la potencia que nos ofrece la virtualización del Kernel de GNU/Linux, como ya recomendó hace años fanta en su blog, saludos

Haraka Wildduck

duck

En esta entrada vamos a completar el taller que dimos hace poco de como montar un servidor de correo electrónico completo y autogestionado en NodeJS

Tenemos que bajar el repositorio git que montamos para desplegar la aplicación en contenedores Docker por lo que necesitaremos tener instalado docker y docker-compose

Una vez descargado, generamos los certificados seguros para la aplicación en la carpeta secure con el script start.sh también hay que modificar el dominio sobre el que vamos a tener el correo en el archivo .env, además el DNS del dominio tiene que tener un registro MX apuntando a la máquina donde se despliegue el servidor

Arrancamos los servicios con el siguiente comando

docker-compose up -d

Si queremos mantener la persistencia deberemos copiar las base de datos

docker cp mongo:/data/db ./mongodb && chown -R 999.999 ./mongodb
 docker cp redis:/data ./redis && chown -R 999.999 ./redis

Descomentar las lineas del archivo docker-compose.yml

docker-compose down && docker-compose up -d

Y tendremos un servidor de correo en NodeJS nativo funcionando bajo nuestro control, saludos

Montar una instancia Nextcloud en Docker

nextcloud

En esta entrada vamos a explicar brevemente como montar una instancia de Nextcloud en Docker, Nextcloud es un potente servicio de software libre de cloud (nube), sirve para almacenar, sincronizar y compartir archivos principalmente aunque con sus plugins se pueden añadir muchas funcionalidades, reemplaza al viejo proyecto ownCloud.

Para ello utilizaremos la imagen oficial de Nextcloud que podemos encontrar en el hub de Docker, esto nos facilitará el despliegue y es más fácil que mantener una imagen propia, podemos encontrar distintas versiones de la imagen aunque nos basaremos en la última latest, además contamos con las últimas actualizaciones de seguridad.

Usaremos el programa docker-compose para el despliegue de la instancia, con el que configuramos los contenedores necesarios con nuestras opciones, en vez de hacerlo directamente desde la línea de comandos.

version: '2'

services:
  nextcloud:
    image: nextcloud
    restart: always
    container_name: nextcloud
    hostname: nextcloud
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=xxx
      - MYSQL_HOST=mariadb-nextcloud
    depends_on:
      - mariadb-nextcloud
    expose:
      - 80
    links:
      - mariadb-nextcloud
    volumes:
      - ./nextcloud/html/custom_apps:/var/www/html/custom_apps
      - ./nextcloud/html/config:/var/www/html/config
      - ./nextcloud/html/data:/var/www/html/data
      - ./nextcloud/html/themes:/var/www/html/themes
    networks:
      - cloudnet:

  mariadb-nextcloud:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    container_name: mariadb-nextcloud
    hostname: mariadb-nextcloud
    volumes:
      - ./nextcloud/mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=yyy
      - MYSQL_PASSWORD=xxx
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    networks:
      - cloudnet:

networks:
  cloudnet:

Teniendo este archivo en una carpeta, con el comando docker-compose up -d nos bajaremos la última versión de las imágenes de Nextcloud y MariaDB desde el hub de Docker, y seguidamente se instanciarán ambos contenedores. Hemos preferido compartir los volúmenes de los contenedores con el sistema de archivos local para mantener la persistencia por si se elimina el contenedor, y configurar las imágenes con las variables de entorno necesarias para el correcto funcionamiento del servicio.

También hemos relacionado los contenedores (links) y expuesto el puerto 80/tcp, ya que nuestro servicio está detrás de un proxy nginx, del contenedor Nextcloud para utilizarlo aunque pueden incluirse los que se necesiten.

Una vez se levanten los contenedores podremos acceder al servicio por el puerto correspondiente y comenzar a configurar la instancia con las opciones que necesitemos.

Esperamos que esta entrada os haya gustado y os sirva para futuros despliegues, saludos

Empezando con Docker

docker

¿Qué es Docker?

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.

Docker utiliza características de aislamiento de recursos del kernel Linux, tales como cgroups y espacios de nombres (namespaces) para permitir que “contenedores” independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.

¿Qué NO es Docker?

Docker no es como otros sistemas de virtualización completa de un sistema operativo, no emula el hardware necesario para arrancarlo, utiliza el de la máquina anfitriona compartiendo los recursos de la misma entre los contenedores.

En resumen Docker es una herramienta que nos da la capacidad de trabajar con contenedores (máquinas virtuales) que comparten un mismo Kernel.

Vamos a ver un poco las partes básicas de Docker para hacer funcionar un sistema, y luego explicaremos como podemos automatizarlo con docker-compose.

Contenedores

Es el espacio donde se almacenan los datos de la máquina virtual, contiene todos los archivos necesarios para funcionar independientemente del sistema anfitrión. Un contenedor es una instancia de una imagen.

Imagen

Es un prototipo de un contenedor, así como una clase es el prototipo de un objeto y este una instancia de la misma, un contenedor es una instancia de una imagen. Varios contenedores pueden compartir una imagen, pero una imagen solo se corresponde con un contenedor.

Volumen

Es un espacio de almacenamiento que comparte el contenedor con la máquina anfitriona para tener persistencia de los datos, los volúmenes pueden ser de varios tipos como los internos (que los gestiona Docker) o pueden usarse mayormente carpetas compartidas.

Red

Las interfaces de red pueden configurarse según se necesite, tenemos varias como host, que comparte con la máquina anfitriona, el bridge que genera un puente de red o null que no tiene red.

Automatizar Docker con docker-compose

Docker compose es una herramienta creada por Docker, que permite crear una pila de contenedores intercomunicados, partiendo de distintas imágenes.

Docker compose se basa en un fichero con extensión yml donde vamos a indicar que imagen queremos desplegar, cómo se va a configurar y de qué depende.

version: '3'
services:
  web:
    build: .
    ports:
    - "80:80"
    volumes:
    - ./html:/var/www/html
    networks:
      net:

networks:
  net:

En el anterior ejemplo vemos como se crea un contenedor que compila un Dockerfile de la carpeta local, que comparte el volumen de la carpeta local html y también crea la configuración de red.

Conclusión

Las principales ventajas de la virtualización basada en contenedores son:

  • Menos recursos, ahorro en costes. En una misma máquina pueden desplegarse más contenedores que máquinas virtuales tradicionales. Las exigencias en el proceso de inicio y espacio en disco son menores y más rápidas.
  • Gestión TI más fácil, aumento de la productividad TI. La creación de contenedores permite estandarizar los despliegues ya que son entornos repetibles para tareas de desarrollo, prueba y producción. La compatibilidad con todos los sistemas de implantación elimina un valioso tiempo de configuración. Son elementos totalmente portables. Con Docker la implementación se realiza en segundos.
  • Múltiples aplicaciones independientes en un mismo host. Cada aplicación se ejecuta en su contenedor o clúster de contenedores de forma independiente, sin entrar en conflicto con el resto de aplicaciones que aloje el host que ejecutarán mediante sus propios contenedores. Esto garantiza un entorno seguro y eficiente.

Cuando una aplicación ya no es necesaria, simplemente se elimina su contenedor sin dejar huella en el sistema donde se ejecutaba.