Exportando el servidor X a contenedores LXD

Mahjong

Supongamos la siguiente situación:
Estamos en nuestro equipo de desarrollo ejecutando Ubuntu desktop (esta solución la he validado con Ubuntu 16.04 y Ubuntu 18.04), tenemos el servicio de LXD operativo y queremos ejecutar una aplicación gráfica (como por ejemplo un IDE) dentro de un contenedor.

La solución pasa por utilizar el concepto de device passthrough que se muestra en traspaso de dispositivos en lxc para aplicarlo a lxd y traspasar los dispositivos relacionados al servidor X dentro del contenedor.
Continuar leyendo “Exportando el servidor X a contenedores LXD”

Traspaso de dispositivos en lxc

World Map Suitcase

Al igual que acontece con otras opciones de virtualización, en lxc podemos realizar una oeración de device passthrough. Esto es, trasladar un dispositivo a un contenedor de manera uqe sea gestionado en forma transparente por este, en lugar de por el anfitrión.

Como ejemplo de cómo realizar una configuración de este tipo tenemos un contenedor de nombre legacy al que se desea traspasar el dispositivo /dev/ttyS1.
Continuar leyendo “Traspaso de dispositivos en lxc”

Guardar un fichero con vi o vim sin tener permisos de escritura

Sheeps

No sé a estas alturas cuantas veces me ha podido pasar pero diría que más de cientos sin temor a equivocarme. Abro un fichero para editar, digamos por ejemplo /etc/group y, cuando voy a grabar, me doy cuenta que estaba con mi usuario no privilegiado y no había abierto el editor con sudo y, por lo tanto, no me deja grabar por error de escritura.
Continuar leyendo “Guardar un fichero con vi o vim sin tener permisos de escritura”

LXC, LXD y ZFS

Lincoln Type L

Introducción

Un contenedor es una opción de virtualización que permite ejecutar un conjunto de procesos de forma que se encuentren completamente aislados del resto de procesos que puedan estar ejecutándose en un sistema.

Esto implica que, aunque los procesos del contenedor estén utilizando el sistema operativo del anfitrión, están utilizando un root file system virtual propio del contenedor; con sus propias versiones de librerías, datos y dispositivos, independientes a los existentes en el sistema anfitrión u otros contenedores del sistema.
Continuar leyendo “LXC, LXD y ZFS”

Creando entornos de desarrollo python con virtualenv

Red Corvette

Cualquier desarrollo en Python requerirá con seguridad del uso de un conjunto de módulos y, dado que, generalmente no tendremos control sobre cómo ni cuándo evolucionará cada uno de estos módulos, nuestro desarrollo quedará restringido para operar sólo con versiones específicas de los módulos de los cuales dependa. Si seguimos las normas especificadas para el empaquetado, estas dependencias estarán claramente determinadas en los paquetes generados. Y, si hemos respetado las versiones por defecto existentes en nuestro entorno de producción, estas dependencias no deberían suponer mayores inconvenientes a la hora de instalar o actualizar nuestros desarrollos.
Continuar leyendo “Creando entornos de desarrollo python con virtualenv”

Subiendo directorios vacíos en Git

Blue Corvette interior

Una de las características de Git es que, por defecto, los directorios vacíos no forman parte del repositorio y, por lo tanto, son silenciosamente descartados por operaciones como commit o push.

Incluso en los casos en que un directorio que previamente formaba parte de un repositorio pierda todo su contenido, este directorio directorio es silenciosamente eliminado del repositorio y no será creado en futuras operaciones de clonación.
Continuar leyendo “Subiendo directorios vacíos en Git”

Ubicar ficheros abiertos por un proceso

Indian bike

Configurando un sistema comencé a recibir errores como el siguiente:

syslog-ng[1091]: Error suspend timeout has elapsed, attempting to write again; fd='11'

El problema era que el proceso de syslog no era capaz de escribir sobre el fichero que había abierto con el file descriptor 11 pero no tenía referencias acerca de cuál era ese fichero como para comprobar por qué se producía el error.
Continuar leyendo “Ubicar ficheros abiertos por un proceso”