Categories
Contenedores Docker Linux Raspberry

Cómo instalar Docker en Ubuntu

En esta ocasión instalaremos Docker en un sistema operativo Ubuntu

Primero instalaremos un par de paquetes necesarios para poder instalar Docker en nuestro equipo, para instalarlos podemos ejecutar los siguientes comandos

user@controlplane:~$ sudo apt-get update
user@controlplane:~$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

Después agregaremos la llave GPG oficial de Docker para asegurarnos que los archivos que descarguemos del repositorio de Docker sean legítimos

user@controlplane:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

A continuación agregamos el repositorio de Docker adecuado a nuestra versión y arquitectura.
Al agregar el repositorio al sistema podremos actualizar Docker desde nuestro gestor de paquetes

user@controlplane:~$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Una vez que hemos agregado el repositorio, actualizaremos la lista de paquetes disponibles para su instalación

user@controlplane:~$ sudo apt-get update

Actualizada la lista de paquetes disponibles, procederemos a instalar Docker

user@controlplane:~$ sudo apt-get install docker-ce \
docker-ce-cli containerd.io

Ahora Docker se encuentra instalado en el sistema, sin enbargo solo el usuario root puede utilizarlo. Para que nuestro usuario pueda ejecutar los comandos de Docker tendremos que crear un grupo Docker y agregar nuestro usuario a dicho grupo

user@controlplane:~$ sudo groupadd docker && sudo usermod -aG docker $USER

Hechos estos cambiamos tendremos que salir de nuestra sesión actual en el equipo e ingresar de nuevo para que nuestras credenciales sean actualizadas

user@controlplane:~$ exit

Validaremos que podemos ejecutar comandos de Docker con nuestro usuario ingresando de nuevo y ejecutando el siguiente comando

user@controlplane:~$ docker run hello-world

Ahora que hemos instalado Docker podemos continuar aprendiendo esta tecnología tan utilizada hoy en día. Para esto puedes leer nuestra publicación acerca de Kubernetes o puedes jugar con los laboratorios disponibles en Play with Docker

Categories
Linux redes

Cómo monitorear la velocidad de internet con speedtest-cli y iperf3 desde Python

En ocasiones nos gustaría poder saber cómo se ha estado comportando nuestra velocidad de internet o solo nos gustaría comprobar si estamos obteniendo la velocidad que tenemos contratada con nuestro proveedor de internet. Como averiguaremos esto es muy sencillo y solo necesitamos una computadora con acceso a internet y un poco de paciencia.

Requisitos

Obtener código fuente

Para poder monitorear el desempeño de nuestra red es necesario obtener el código fuente que se encargará de obtener las mediaciones programaticamente. El código se puede obtener desde la siguiente dirección

https://github.com/nestortechtips/monitor-velocidad/archive/refs/heads/main.zip

Dentro del archivo zip nos encontraremos con la siguiente estructura de archivos

.
|____requirements.txt
|____README.md
|____main.py

Instalar dependencias

Para que se pueda ejecutar la biblioteca iperf3 sin incovenientes se require instalar la biblioteca homónima en el sistema operativo. A continuación mostraremos cómo hacerlo en Ubuntu 20.04

apt-get update && apt-get install iperf3 -y

Ahora instalaremos las bibliotecas requeridas por nuestro programa de Python, el cuál utiliza Python 3+ (en caso de no tener Python instalado en nuestro sistema podemos instalarlo siguiendo la documentación oficial)

pip install -r requirements.txt

Comprendiendo el código

Ya que contamos con las dependencias del programa, tomemos un momento para analizar el código.

El programa consiste de un par de métodos que se encargan de obtener las mediciones de iperf3 y speedtest-cli además de un método principal que se encarga de orquestrar la ejecución del programa

obtener_velocidad_internet_speedtest_cli

Este método se encarga de obtener la medición de velocidad de speedtest. La línea test_velocidad_subida = speedtest.Speedtest() se encarga de crear el objeto por el que obtendremos el servidor con el que se realizará prueba (el servidor se obtiene de forma aleatoria pero es posible especificar uno en particular) y las velocidades de bajada y subida con los métodos test_velocidad_bajada.download() y test_velocidad_subida.upload() respectivamente. Los resultados de ambos métodos son en bits/segundo, para facilitar su interpretación se calculan en Mbits/segundo con las siguientes líneas velocidad_bajada /= (1 * 10 **6) y velocidad_subida /= (1 * 10 **6)

obtener_velocidad_internet_iperf3

Este método se encarga de obtener el ancho de banda disponible entre nuestra red y un servidor corriendo iperf3 públicamente (la lista de servidores disponibles se puede encontrar aquí). El método se encarga de crear un obtjeto iperf3 con los datos necesarios para realizar la prueba al servidor, los cuales son su hosts/dominio y puerto, adicionalmente configuramos la duración de la prueba en segundos (no se recomienda un duración mayor a 20 segundos para no interferir con la comunicación de los dispositivos en nuestra red). En código esto se ve de la siguiente manera

client = iperf3.Client()
client.duration = 7
client.server_hostname = 'iperf.scottlinux.com'
client.port = 5201

En el ejemplo anterior indicamos que el servidor se encuentra en el dominio iperf.scottlinux.com, que la prueba durará 7 segundos y que el servidor se encuentra escuchando en el puerto 5201

main

Por último el método main se encarga de configurar la ruta donde deseamos guardar el log de la ejecución filename=’/log/{HOST_NAME}.log, ejecutar los métodos obtener_velocidad_internet_speedtest_cli y obtener_velocidad_internet_iperf3 para obtener las medicione de velocidad.

Ejecucíon

El programa puede ejecutarse de la siguiente forma

python main.py

Después de unos momentos deberán aparecer en nuestra pantalla las mediciones de las pruebas realizadas

speedtest-cli descarga - 193.43 Mbits/s. Subida - 191.15 Mbits/s. Servidor - Axtel

iperf3 descarga - 28.833 Mbits/s. Subida - 30.929 Mbits/s
Categories
Ansible Automatizacion Raspberry

Cómo instalar Ansible en Ubuntu 18.04

En esta ocasión mostraré cómo instalar Ansible en nuestro equipo y así poder automatizar la gestión de los demás servidores en nuestro ambiente de trabajo.

Agregar repositorio de Ansible a servidor central

Lo primero que hay que realizar es agregar el repositorio de paquetes al servidor central/maestro desde el cuál se encargará de ejecutar los playbooks en nuestro ambiente. Para hacerlo solo hay que ejecutar el siguiente comando:

usuario@central:~$ sudo apt-add-repository ppa:ansible/ansible

Después hay que actualizar la lista de paquetes disponibles para poder realizar la instalación de Ansible

usuario@central:~$ sudo apt-get update 

A continuación instalaremos el paquete ansible

usuario@central:~$ sudo apt-get install ansible -y

Finalizada la instalación podemos comprobar la versión instalada con el siguiente comando:

usuario@central:~$ ansible --version
ansible 2.9.14
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/usuario/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Jul 20 2020, 15:37:01) [GCC 7.5.0]

El comando nos mostrará la versión instalada, en mi caso se instaló la versión 2.9.14.

Ahora que ansible se encuentra instalado puedes agregar la lista de servidores a tu inventario o ejecutar tus playbook.

Puedes consultar más información sobre ansible o ejemplos en la documentación oficial:

Categories
Contenedores Docker Raspberry

Cómo instalar Docker en Ubuntu 18.04 corriendo en Raspberry Pi

El día de hoy vamos a instalar Docker en una Raspberry Pi 3B ejecutando Ubuntu 18.04.

Primero deshabilitaremos la memoría swap de la Raspberry Pi

root# swapoff -a


A continuación indicaremos al Sistema Operativo que enforce los controlgroups para limitar el uso de recursos de los contenedores.

root# sed -i -e 's/fixrtc/fixrtc cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory/g' /boot/firmware/nobtcmd.txt 

Para que se apliquen los cambios reiniciaremos nuestra Raspberry Pi

root# reboot


Una vez que se haya reiniciado la Raspberry Pi añadiremos la llave pública del repositorio de Docker


root# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

Ahora agregamos el repositorio a la lista de repositorios disponibles en el sistema

root# add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Actualizamos la lista de paquetes disponibles e instalamos Docker

root# apt-get update && apt-get install -y docker-ce

Docker se encuentra listo para su uso, como mejor práctica añadiremos nuestro usuario al grupo docker para poder crear contenedores sin ser root. Antes de ejecutar el comando no olvidemos reemplazar $USUARIO con el nombre de usuario con el que accedemos a nuestra Raspberry Pi

root# usermod -aG docker $USUARIO

Para que se apliquen los cambios, cerraremos la sesión actual. Podemos cerrar la sesión o cerrar y abrir la terminal de nuevo.
Comprobaremos que Docker funcione de manera correcta, haciendo un pull de la imagen nginx y ejecutaremos un contenedor que use esta imagen.

usuario$ docker image pull nginx
usuario$ docker container run --name webserver -d -p 5000:80 nginx 

Comprobarémos que el contenedor ha sido creado de forma exitosa realizando una petición

usuario$ curl localhost:5000

La respuesta del comando curl debe mostrarnos la página inicio de Nginx