Los primeros 10 minutos con LXD el hypervisor de contenedores en Ubuntu

Instalación

$ sudo add-apt-repository ppa:ubuntu-lxc/lxd-git-master

$ sudo apt-get update

$ sudo apt-get install lxd

El proceso de instalación incluye la creación del grupo lxd al que deberán pertenecer todos los usuarios que interactúen con los contenedores.  Inicialmente se agregan a este grupo todos los usuarios que pertenecían a admin y sudoers en el momento de la instalación.

Una vez realizada la instalación es necesario cerrar y volver a abrir la sesión de usuario para que la inscripción en el grupo lxd sea tomada en cuenta.  Si se desea obviar esto, ejecute el siguiente comando para incluir al usuario en el grupo mencionado sobre la sesión actual.

$ newgrp lxd

Gestión de imágenes

Agregar el repositorio de linuxcontainers.org.

$ lxc remote add lxc-org images.linuxcontainers.org

$ lxc remote list

+---------+-----------------------------------------+--------+
|  NAME   |                   URL                   | PUBLIC |
+---------+-----------------------------------------+--------+
| local   | unix:///var/lib/lxd/unix.socket         | NO     |
| lxc-org | https://images.linuxcontainers.org:8443 | YES    |
+---------+-----------------------------------------+--------+

Importar imágenes para tenerlas disponibles localmente.

# Ubuntu Cloud
$ lxd-images import ubuntu --alias ubuntu-cloud

# Debian 8 64 bits
$ lxc image copy lxc-org:/debian/jessie/amd64 local: --alias=jessie-amd64

Consultar mas información acerca de las imágenes disponibles en el repositorio de linuxcontainers.org.

Listar las imágenes disponibles en un repositorio remoto

$ lxc image list lxc-org:

+--------------------------------+--------------+--------+-------------------------+---------+-------------------------------+
|             ALIAS              | FINGERPRINT  | PUBLIC |       DESCRIPTION       |  ARCH   |          UPLOAD DATE          |
+--------------------------------+--------------+--------+-------------------------+---------+-------------------------------+
|                                | ee326b31ae93 | yes    | Debian squeeze (amd64)  | x86_64  | Oct 1, 2015 at 6:17pm (COT)   |
|                                | cd3f30323ce2 | yes    | Centos 6 (amd64)        | x86_64  | Oct 1, 2015 at 10:17pm (COT)  |
|                                | b6a940bfe3a4 | yes    | Plamo 5.x (amd64)       | x86_64  | Sep 30, 2015 at 5:23pm (COT)  |
|                                | 5351e4792a81 | yes    | Plamo 5.x (amd64)       | x86_64  | Oct 1, 2015 at 5:24pm (COT)   |
|                                | 02a8d955bc82 | yes    | Plamo 5.x amd64 (mini)  | x86_64  | Sep 30, 2015 at 5:50pm (COT)  |
|                                | 5df2ba98422b | yes    | Plamo 5.x amd64 (mini)  | x86_64  | Oct 1, 2015 at 5:50pm (COT)   |

...

Listar las imágenes disponibles localmente

$ lxc image list

+--------------+--------------+--------+------------------------------------+--------+------------------------------+
|    ALIAS     | FINGERPRINT  | PUBLIC |            DESCRIPTION             |  ARCH  |         UPLOAD DATE          |
+--------------+--------------+--------+------------------------------------+--------+------------------------------+
| jessie-amd64 | 87c085189294 | yes    | Debian jessie (amd64)              | x86_64 | Oct 3, 2015 at 1:40am (COT)  |
| ubuntu-cloud | a1448d43bb7c | no     | Ubuntu 14.04 LTS server (20150930) | x86_64 | Oct 3, 2015 at 12:49am (COT) |
+--------------+--------------+--------+------------------------------------+--------+------------------------------+

Obtener información de una imagen disponible localmente.

$ lxc image info jessie-amd64

Fingerprint: 87c085189294cd6a316dbefe1e235f9b9e69aa1b049df4ddce2202ad0f9c56ab
Size: 1e+02MB
Architecture: x86_64
Public: no
Timestamps:
    Created: 2015/10/02 23:30 UTC
    Uploaded: 2015/10/03 06:40 UTC
    Expires: never
Properties:
    description: Debian jessie (amd64)
Aliases:
    - jessie-amd64

Remover una imagen dispoible localmente.

$ lxc image delete jessie-amd64

Sincronizar la versión de las imágenes locales con la disponible en los repositorios.

$ lxd-images sync

Es posible agregar la opción --sync durante la importación de la imagen para mantenerla actualizada automáticamente.

Gestión de contenedores

Crear un nuevo contenedor a partir de una imagen disponible localmente.

$ lxc launch ubuntu-cloud myContainer

Si la imagen solicitada, ubuntu-cloud en este caso, no se encuentra disponible localmente, esta es importada automáticamente y puesta en el caché por 10 días.

Listar los contenedores disponibles y su estado.

$ lxc list

Iniciar un contenedor explícito.

$ lxc start myContainer

Consultar el registro (log) de un contenedor explícito.

$ lxc info --show-log myContainer

Detener a un contenedor explícito.

$ lxc stop myContainer

Destruir (remover) a un contenedor explícito.

$ lxc delete myContainer

Interacción con el contenedor

Ejecutar un comando en un contenedor específico.

$ lxc exec myContainer -- COMANDO

Acceder al shell del contenedor.

$ lxc exec myContainer -- /bin/bash

Transferir un archivo hacia el contenedor.

$ lxc file push ARCHIVO myContainer/ruta/de/destino

Transferir un archivo desde el contenedor.

$ lxc file pull myContainer/ruta/de/origen .

Recursos

  1. What’s LXD?
    https://linuxcontainers.org/lxd/introduction/
  2. LXD – The Linux container hypervisor
    http://www.ubuntu.com/cloud/tools/lxd
  3. Getting started with LXD – the container lightervisor
    https://insights.ubuntu.com/2015/04/28/getting-started-with-lxd-the-container-lightervisor/
  4. Installing LXD and the command line tool
    https://insights.ubuntu.com/2015/03/20/installing-lxd-and-the-command-line-tool/
  5. Infographic: LXD Machine containers from Ubuntu
    https://insights.ubuntu.com/2015/09/23/infographic-lxd-machine-containers-from-ubuntu/
  6. Repositorio de LXD en GitHub
    https://github.com/lxc/lxd

Problemas reconociendo el touchpad de un Asus X455L en Linux Ubuntu 15.04

Aclaración de versiones

Este procedimiento sólo es necesario con versiones del Kernel inferiores a la 4.2 ya que a partir de esta versión (utilizada por Wily y Trusty de Ubuntu), los touchpads Focaltech se encuentran soportados de manera nativa.

Introducción

Una vez instalado Linux Ubuntu 15.04 en el portátil Asus X455L se evidencia que el touchpad no se encuentra funcionando correctamente.  Los gestos como el scroll vertical y horizontal no funcionan y el área de los botones también es sensible al movimiento haciendo muy difícil hacer clic sobre una ubicación precisa.

Al parecer este touchpad de FocalTech requiere de unos controladores específicos que aún no se encuentran incluidos en el kernel convencional.

$ xinput list

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ PS/2 FocalTech FocalTech Touchpad in mouse emulation mode    id=13    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Video Bus                                   id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ USB2.0 VGA UVC WebCam                       id=10    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                            id=11    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=12    [slave  keyboard (3)]

La solución a este problema consiste en instalar estos controladores que han sido preparados por miembros de la comunidad (no directamente Asus).

Solución

Agregar el repositorio e instalar el paquete requerido.

$ sudo add-apt-repository ppa:hanipouspilot/focaltech-dkms

$ sudo apt-get update

$ sudo apt-get install focaltech-dkms

Reiniciar psmouse de la siguiente manera o reiniciar el sistema operativo completo.

$ sudo modprobe -r psmouse

$ sudo modprobe psmouse

Verificación

Una vez instalado correctamente el módulo con los controladores y reiniciado el sistema se obtiene este nuevo resultado con xinput.

$ xinput list

⎡ Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                  id=4    [slave  pointer  (2)]
⎜   ↳ PS/2 FocalTech FocalTech Touchpad           id=13    [slave  pointer  (2)]
⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard                 id=5    [slave  keyboard (3)]
    ↳ Power Button                                id=6    [slave  keyboard (3)]
    ↳ Video Bus                                   id=7    [slave  keyboard (3)]
    ↳ Video Bus                                   id=8    [slave  keyboard (3)]
    ↳ Sleep Button                                id=9    [slave  keyboard (3)]
    ↳ USB2.0 VGA UVC WebCam                       id=10    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                            id=11    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard                id=12    [slave  keyboard (3)]

Recursos

  1. Repositorio de Ubuntu para el paquete focaltech-dkms.
    https://launchpad.net/~hanipouspilot/+archive/ubuntu/focaltech-dkms
  2. Repositorio de GitHub para el paquete psmouse-focaltech-dkms.
    https://github.com/markmandel/psmouse-focaltech-dkms

Descargar manualmente imágenes (boxes) de Vagrant desde el catálogo de HashiCorp’s Atlas

Obtener la box

Para descagar manualmente la imágen base (box) de una máquina virtual desde el catálogo de HashiCorp’s Atlas para ser utilizada con Vagrant se deben seguir los siguientes pasos.

  1. Ubicar la box que se desea descargar en el catálogo.
  2. Identificar el URL de la box deseada.

    Por ejemplo: https://atlas.hashicorp.com/thdengops/boxes/ubuntu-14.04-dev.

  3. Teniendo en cuenta la información mostrada en el sitio web, agregar a la URL la versión y el proveedor (sistema de virtualización) de la box que se desea descargar.

    Vagrant Box Info

    De la manera URL/versions/{VERSION}/providers/{PROVEEDOR}

    Para el caso del ejemplo sería entonces: https://atlas.hashicorp.com/thdengops/boxes/ubuntu-14.04-dev/versions/0.0.7/providers/virtualbox.box

Crear una máquina virtual a partir de una box local

Se debe agregar la box local al sistema de boxes de Vagrant, este procedimiento se debe realizar una unica vez.

$ vagrant box add miBox /ruta/boxes/ubuntu-14.04-dev.virtualbox.box

Posteriormente se crea el Vagrantfile para la instancia de la máquina virtual.

$ vagrant init miBox

Finalmente, una vez configurado apropiadamente el Vagrantfile, se inicia la máquina virtual.

$ vagrant up

Recursos

Los primeros 10 minutos con Vagrant

Instalación

Instalar Virtualbox como prerequisito si aún no se cuenta con este software.

$ sudo aptitude install dkms virtualbox

Es recomendable instalar su correspondiente Extension Pack.

Para el caso de Ubuntu/Debian descargar el archivo .deb correspondiente a la arquitectura desada del sitio web de descargas e instalarlo localmente.

$ sudo dpkg -i vagrant_*.deb

Obtener la caja (box) a obtenerse

Una box hace referencia a la máquina virtual base que se utilizará para crear la que se asociará al proyecto.

$ vagrant box add ubuntu/trusty32

En este caso ubuntu/trusty32 hace referencia al nombre de la imagen que va a descargarse.  Pueden  utilizarse otras imágenes que se encuentran en linea gracias al repositorio oficial de Vagrant.

Los archivos asociados a estas imágenes son descargados bajo el directorio ~/.vagrant.d/boxes.

Crear el archivo de configuración

En el directorio del proyecto ejecutar el siguiente comando

$ vagrant init ubuntu/trusty32

Esto básicamente crea una versión base del archivo Vagrantfile para configurar la máquina virtual y asigna automáticamente la box a utilizarse en el proyecto.

$ vi VagrantFile

   ...
   config.vm.box = "ubuntu/trusty32"
   ...

Una vez se cree la máquina virtual por primera vez (con el primer vagrant up) sus archivos quedarán por defecto bajo ~/VirtualBox\ VMs/.

Reenvío de puertos

Para configurar el reenvío de puertos entre la máquina virtual y la máquina física se deben agregar una o mas opciones config.vm.network al archivo Vagrantfile.

$ vi VagrantFile

   ...
   config.vm.network :forwarded_port, guest: 80, host: 8080
   config.vm.network :forwarded_port, guest: 443, host: 80443
   ...

Configurar la interfaz de red

El acceso a la red de la máquina virtual puede configurarse de manera privada (sólo el host y otras máquinas pueden acceder a ella) o de manera pública en la cual cualquier equipo en la red puede interactúar con la máquina virtual.

Configuración privada

Es posible utilizar una dirección IP estática de la siguiente manera.

$ vi VagrantFile

   ...
   config.vm.network "private_network", ip: "192.168.1.100"
   ...

O una dirección IP dinámica.

$ vi VagrantFile

   ...
   config.vm.network "private_network", type: "dhcp"
   ...

Configuración pública

Al igual que con la configuración privada, es posible asignar una dirección IP estática.

$ vi VagrantFile

   ...
   config.vm.network "public_network", ip: "192.168.1.100"
   ...

O una dirección IP dinámica basada en el DHCP de la red.

$ vi VagrantFile

   ...
   config.vm.network "public_network"
   ...

Directorios sincronizados

Por defecto el directorio /vagrant de la máquina virtual se encuentra sincronizado con el directorio del proyecto en la máquina física, es decir, en este directorio se deberán ubicar los archivos que deberán perdurar en el tiempo.

Es posible especificar otros directorios sincronizados mediante diferentes métodos.

Gestión de la máquina virtual

Iniciar la máquina virtual

$ vagrant up

Acceder a la máquina virtual a través de una sessión de SSH

$ vagrant ssh

Suspender una máquina virtual activa

$ vagrant suspend

En este caso el estado de la máquina en memoria (además de sus archivos) es almacenado en disco.  Su reinicio es muy rápido (entre 5 y 10 segundos).

Detener una máquina virtual activa

$ vagrant halt

Este comando realiza un apagado limpio de la máquina virtual.  El reinicio de la máquina toma un poco mas de tiempo.

Destruir una máquina virtual

$ vagrant destroy

Este comando apaga abruptamente la máquina virtual si esta se encuentra activa y remueve todos los archivos asociados a la misma sin incluir las carpetas compartidas (/vagrant).

Obtener ayuda de los comandos vagrant

Para listar los comandos disponibles utilice el siguiente comando.

$ vagrant list-commands

Para obtener ayuda adicional sobre un comando en especial utilice la siguiente variante.

$ vagrant COMANDO -h

Recursos

Problemas de conexión al servidor VNC de GNOME

Introducción

En las versiones recientes de Vino, el servidor VNC del proyecto GNOME que se incluye en otras distribuciones como Ubuntu, he encontrado problemas de conexión con los clientes, especialmente con el cliente de RealVNC que utilizo.

Cuando el cliente intenta conectarse con el servidor, la conexión falla y el usuario recibe un mensaje de “No supported authentication methods!” o “No matching security types“.

Causa

Esto aparentemente se debe a que Vino por defecto intenta cifrar el tráfico de datos con TLS y los clientes no lo soportan.

Solución

La solución consiste en desactivar el cifrado de los datos transmitidos durante la sesión de VNC.

Para hacer esto se debe ejecutar el siguiente comando en el servidor.

$ gsettings set org.gnome.Vino require-encryption false

Probablemente sea necesario reiniciar el servicio de Vino.

$ pgrep -l vino-server 

$ pkill -x vino-server

$ /usr/lib/vino/vino-server -t &

Instalación de Heimdall en Linux

Introducción

Heimdall es una herramienta multiplataforma y libre para actualizar (flash) el firmware (custom recoveries, ROMs, modems, etc) de los teléfonos móviles Samsung.

Instalación

La versión mas reciente de Heimdall puede descargarse desde su sitio web e instalarse mediante la herramienta de gestión de paquetes de la distribución de Linux.

$ sudo dpkg -i ubuntu13.04-heimdall_1.4.0-0_amd64.deb

En Linux Ubuntu también es posible agregar su repositorio para mantener la aplicación continuamente actualizada.

$ sudo add-apt-repository ppa:modycz/heimdall
$ sudo apt-get update
$ sudo apt-get install heimdall

Recursos

Expandir la partición raíz de Linux Debian en la Intel Galileo

Introducción

Una vez instalado Linux Debian en la tarjeta micro SD de la Intel Galileo es posible ampliar la partición raíz para que esta utilice el espacio real físicamente disponible en la tarjeta.

A continuación se muestra el procedimiento para hacer esto utilizando GParted.

Procedimiento

Insertar la tarjeta micro SD a manipularse el tamaño de la particicón raíz y ejecutar GParted.

$ sudo gparted

En los dos mensajes de error mostrados a continuación presionar el botón Fix.

Libparted Bug Found!_018 Libparted Warning_019

Seleccionar la partición raíz (segunda) de la tarjeta micro SD, hacer clic derecho y elegir la opción Resize/Move del menú contextual.

-dev-mmcblk0 - GParted_021

Especificar el tamaño que se le desea asignar a la partición (arrastrar la parte gráfica).

En este caso se decidió asignarle 5245 MB para dejar aún libres 2048 MB.

Resize -dev-mmcblk0p2_022

Finalmente presionar el botón (7mo. de la barra de íconos) para aplicar todas las operaciones sobre la tarjeta de memoria.

-dev-mmcblk0 - GParted_023

Recursos