miércoles, 9 de diciembre de 2020

Install Ubuntu on Raspberry PI

 Install Ubuntu on Raspberry PI

In order to install Ubunto on Raspberry PI you should 

  • Download the Raspberry PI imager from https://www.raspberrypi.org/software/  
  • Insert a MicroSD card in your computer (format it as FAT32 if you have issues) and then run the Raspberry PI imager
  • Then click on CHOOSE OS and select Ubuntu. My recommendation is to select the latest Ubuntu Desktop available

Once completed, remove the SDD and insert it into your raspberry, to complete the configuration.

To complete this Raspberry PI configuration, connect your Raspberry PI to an external monitor, a keyboard and a mouse, so you can use it as a regular computer.

martes, 18 de febrero de 2020

Docker: inicio automatico de contenedores

Docker e inicio automatico de contenedores

Cuando implementamos un contendor, queremos usualmente que siga corriendo, a pesar que el usuario se desconecte o que el servidor sea reiniciado.

Como mantener el proceso en ejecución tras la desconexión del usuario

Para resolver el primer punto, que siga corriendo cuando el usuario que lo inició se desconecte, debemos iniciar el contenedor como un demonio. Para esto simplemente usamos el parámetro -d.

Como mantener el proceso en ejecución tras el reinicio del servidor

En un escenario más complejo, optaremos por automatizar el proceso de los contenedores a través de docker-compose, el cual nos permite incluir un archivo yaml con la configuración deseada, incluyendo imagen, puntos de montaje, puertos, etc.

En el mismo archivo yaml, se puede añadir la opción "restart: always", lo que hará que cada vez que se reinicie el servidor (VM), se reinicien automáticamente los contenedores listados con esa opción.

Resumen

En resumen, para iniciar los contenedores, que estos sigan corriendo al desconectarse y que inicien cada vez que el servidor es reiniciado, usaremos el siguiente comando:

sudo docker-compose up -d

Archivo YAML ejemplo

Un archivo YAML de ejemplo es el siguiente:

Nombre de archivo: docker-compose.yml

Contenido del archivo:

# ###################
version: '1'

services:

  postgres:
    container_name: postgres
    image: postgres
    restart: always

  nginx:
  image: nginx
  volumes:
   - ./mysite.template:/etc/nginx/conf.d/mysite.template
  ports:
   - "8080:80"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=80
  command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx"

    depends_on:
     - postgres


martes, 8 de octubre de 2019

Gestor de contraseñas

Hoy en dia todo está en línea y necesitas una clave para cada cosa. Al poco andar, la conclusión es simple:
  1. Usa la misma clave para todo
  2. Usa una clave diferente para cada cosa, pero no podrás con ello sin ayuda
Claramente la única opción segura es la #2, porque si optas por usar una clave para todo (1) finalmente te van a hackear, y te van a hackear todo!
Sin embargo, si usas una clave para cada sitio (2), vas a ser un blanco más difícil de hackear, pero necesitarás apoyo, es imposible que puedas recordar todas las claves sin morir en el intento. Además, tener claves diferentes no sirve de nada si tus claves son inseguras. Necesitas generar claves seguras, cada vez que lo necesites y eso no es fácil.

¿Que necesito para tener contraseñas seguras?

Dado lo anterior, concluimos rápidamente que para tener contraseñas seguras necesitaremos poder:
  • Recordar todas tus claves
  • Generar claves seguras y diferentes constantemente
Como el ser humano no fue hecho para tal tarea, llegamos a la inevitable conclusión de que necesitaremos de un gestor de contraseñas. Estos gestores de contraseñas (o password managers) nos ayudarán en las dos tareas antes descritas: generar claves y almacenarlas en forma segura.

¿Que tener en mente al elegir un gestor de contraseñas?

Algunos de los aspectos a considerar cuando buscas un gestor de contraseñas son los siguientes:
  • Precio: evidente
  • Incluye o no generación de contraseña (la mayoría lo traen, pero no está de más verificarlo)
  • Incluye o no usarlo en varios dispositivos (computador de trabajo, computador de casa, celular, tablet, etc)
  • Autenticación de doble factor (2FA): Tiene un segundo esquema de validación, como clave y huella dactilar, por ejemplo
  • Si es pagado: tiene plan familiar? (o grupal, para varios miembros)
  • Si tiene plan familiar (o grupal) tiene como compartir contraseñas entre los miembros? 
  • Multiplataforma: Para Windows, Mac, Android, etc

Gestores de contraseña

Sin buscar hacer una lista detallada, ya hay muchas listas de gestores de contraseñas (en los links de referencia verán muchos más), he listado algunos que son destacables, por precio y funcionalidad.



Aplicación
Dispone version gratis
Versión pagada desde
Mejoras de version pagada
Plan familiar
Multiplataforma
Si
USD 3 / mes
Respaldo en linea
Si
Si
No
USD 3.99 / mes
Autentificación doble factor
Si
Si
Si
Gratis
Gratis en version personal
N/A
Si
Si
Gratis
Gratis
N/A
Si
Si
Gratis
No almacena en la nube
N/A
Si
Si
USD 11.99
Un solo pago
No
Si

Hay varios otros productos, que personalmente he descartado, como Dashlane y Keeper, por su alto costo o por las limitaciones de su versión “gratuita”.


Referencias:




miércoles, 28 de agosto de 2019

Draft, simplificando aún más el desarrollo con Kubernetes

El desafío constante: como reducir los tiempos desde que un desarrollador genera una actualización hasta que es probada.
Usualmente al desarrollar debemos seguir un proceso para desplegar nuestro código. Este proceso era muy extenso años atrás y con DevOps se ha simplificado notablemente.
Un ejemplo muy básico involucrará ingresar a un Jenkins, para construir (build) nuestra aplicación y posteriormente hacer el despliegue (deploy). En la realidad añadimos otras herramientas, haciendo este flujo algo no tan trivial. Justamente ahí es donde entra Draft, a integrar nuestro ambiente de desarrollo con Kubernetes, permitiéndonos hacer un despliegue en un par de pasos: "draft create" y "draft up", así de simple.

Con esto tendremos nuestra app desplegada en un sandbox de Kubernetes disponible con su URL publicada. Draft nos entrega entonces un gran potencial, simplificando y reduciendo los tiempos de generación de un sandbox aún más allá de lo que hemos visto en el ciclo de DevOps, dejándonos listos para ejecutar las pruebas iniciales de nuestro desarrollo.

Si quieres probar Draft, necesitarás Kubernetes evidentemente además de Draft. Sin embargo puedes usar minikube en reemplazo, que te dará lo necesario para tus pruebas de concepto.

Minikube está disponible para descargas en https://minikube.sigs.k8s.io/docs/start/windows/
Para descargar draft, puedes hacerlo con brew (brew install azure/draft/draft) o desde este link de binarios https://github.com/Azure/draft/releases
Una vez instalado, simplemente ejecutas :
  • draft init para configurar draft
  • draft create, para contenerizar tu app 
  • draft up, para desplegar tu sandbox.
Happy Sailing!


martes, 6 de agosto de 2019

Buscar los ultimos archivos modificados en Linux

Hace un tiempo pensé en publicar respecto al tópico que expongo hoy, sin embargo pensé que al ser un tema muy conocido no sería de interés. Después de un poco andar, me di cuenta que no resulta tan trivial y que puede ayudar a algunas personas que existan artículos como éste y en particular en español, por lo que decidí retomar y publicar un par de artículos, partiendo por este.
Quisiera sus comentarios, de si encuentran esta información útil o no, para ver si sigo haciendo publicaciones como ésta.

Problemática: por que buscar los últimos archivos modificados en Linux

Por diferentes razones tal vez queremos buscar los ultimos archivos modificados en Linux. Razones como, por ejemplo:
  • Instalé un programa y quiero saber que archivos modificó
  • Tengo una actualización y quiero saber el / los filesystem que está ocupando
  • Quiero identificar los archivos modificados recientemente
Cuando pensamos en buscar los ultimos archivos modificados en Linux, lo primero que se nos viene a la cabeza es usar el comando find, pero find es muy amplio y necesitamos acotar y esa es la razón de este artículo, algunas opciones que nos permitan acotar la búsqueda.

Solución: buscar los ultimos archivos modificados en Linux

En esta solución expongo dos simples opciones que combino:
  • Filtrar por tiempo
  • Filtrar directorios no relevantes

Filtrando los resultados de búsqueda: por tiempo, últimos modificados

Para filtrar por los ultimos archivos modificados en el tiempo podemos usar el parámetro cmin. cmin nos permitirá especificar una cantidad de minutos hacia atrás, buscando archivos que fueron modificados desde el momento actual hasta x minutos atrás.
Por ejemplo:

$ find . -cmin -30

En este ejemplo, find buscará archivos en el directorio actual (.) que fueron modificados hace 30 minutos (o menos)

Esto resuelve nuestro problema y podría quedar hasta ahí, pero en ocasiones, la busqueda retornará resultados de directorios que no nos interesan. Entonces iremos un paso más allá en el filtro, con la siguiente opción de búsqueda.

Filtrando los resultados de búsqueda: excluyendo directorios

Si, por ejemplo, hacemos una busqueda desde el directorio raiz (/) el resultado arrojará archivos modificados en los directorios /proc /var /sys, entre otros, que en la mayoría de los casos no son de interés ya que son directorios de sistema y no de una aplicación. Para filtrar los directorios "indeseados" usamos la opción -prune

Excluyendo un directorio

Para excluir solo un directorio ocupamos la opción prune con el flag o, como se muesta a continuación:

$ find / -path /proc -prune -o -cmin -30

Esto buscará en el directorio raiz (/) todos los archivos modificados en los últimos 30 minutos, excluyendo los que están el el directorio /proc

Excluyendo varios directorios

Para excluir varios directorios, listamos los directorios entre paréntesis, pudiendo añadir todos los directorios que queremos excluir

$find / \( -path /proc -o -path /sys -o -path /run -o -path /var \) -prune -o -cmin -30

Esto buscará en el directorio raiz (/) todos los archivos modificados en los últimos 30 minutos, excluyendo los que están el los directorios /proc , /sys , /run y /var



viernes, 22 de marzo de 2019

Como usar Atom con GitLab integrado

En un artículo anterior comentaba como configurar Atom con GitLab. Este artículo trata de como usar esa integración.
Para ello descargaremos el cliente Git, para luego clonar un repositorio localmente y finalmente configurar Atom para usar ese repositorio y actualizar Git directamente desde Atom.

Descargar cliente Git

Si no tienes un cliente Git puedes descargarlo desde https://git-scm.com/downloads. Simplemente lo descargas e instalas. Elige tu sistema operativo (ver imagen) e instálalo.

Clonar repositorio remoto

Una vez instalado el cliente Git, abres la aplicación GIT GUI y eliges clonar un repositorio.
Asumiremos que existe el repositorio sobre el cual quieres trabajar. Si no existe deberás crear un nuevo repositorio en vez de clonarlo.
Git Gui
En la pantalla de clonar el repositorio deberás ingresar la fuente remota (Source Location) y el destino local (Target Directory) en donde bajarás tu código. La imagen "Git Gui" muestra un ejemplo de estos valores.
Con las rutas elegidas, das click en Clone, lo cual tardará un tiempo dependiendo del tamaño del repositorio remoto y tu velocidad de conexión.  


Source location
Nota: Si no conoces la fuente remota (Source Location), debes ir a GitLab y ahí eliges tu proyecto, luego eliges detalles y das click en el botón derecho que dice Clone, tal como es ejemplifica en la imagen lateral: "Source Location". Usa la dirección "Clone with HTTPS" como "Source Location".




Abir el repositorio en Atom

Con el repositorio clonado, vamos a Atom finalmente elegimos File --> Add Project Folder y navegamos hasta la carpeta donde está nuestro repositorio clonado para abrirla. Con esto abriremos la carpeta donde clonamos el proyecto.
Modificaremos o agregaremos archivos (tal como lo hacemos normalmente trabajando) y cuando terminemos elegiremos del menú Packages --> GitHub --> Toggle Git Tab. Ahi veremos nuestro archivo como Unstaged, tal como se muestra en la imagen. Lo podemos añadir manualmente o simplemente elegir Stage All.
Agregamos un Commit message y damos click al botón Commit to master (o a otro branch si corresponde).
Para terminar, damos click en la opción de Publish, que está disponible en la parte inferior derecha de Atom, tal como se muestra en la imagen destacado en un cuadro rojo.

En resumen

Ahora, cada vez que deseemos actualizar el repositorio en GitLab, solo tenemos que hacer commit y publish desde Atom directamente. Dos simples pasos que nos garantizan seguir todo el proceso de branches que estemos manejando para nuestro proyecto.


GitLab con Atom integrado para devops

Usualmente buscamos herramientas livianas para el trabajo de integración del día a día en devops. Sin embargo cuando se trata de integrar con GitLab (salvo linea de comandos) todas las soluciones tienen un peso considerable, complicando el escenario. Afortunadamente hay algunas opciones, entre ellas Atom.

Atom editor

Atom es un editor de código muy bien catalogado. Está con evaluación 4.4 (de 5) en g2crowd https://www.g2crowd.com/products/atom/reviews . Además que es muy fácil de usar, es muy liviano, se integra con muchas herramientas y contiene un largo numero de paquetes, lo cual lo hace altamente customizable, o como dice Atom: Un editor de texto hackeable para el siglo 21. https://atom.io/ Otra tremenda ventaja es que es gratis. Con todo lo anterior, es mi editor preferido.

Instalar editor y acceso a GitLab


Para comenzar lo primero es tener el editor instalado. Lo puedes descargar desde el sitio de Atom. También necesitas una cuenta en GitLab. Si no tienes cuenta, puedes registrarte gratis en https://gitlab.com/users/sign_in#register-pane

Crear un token en GitLab

Un token es requerido para que Atom pueda acceder a GitLab. Es literalmente la llave de acceso. Puedes crearlo en GitLab directamente, bajo "User Settings" en "Access Tokens". O ir directo a https://gitlab.com/profile/personal_access_tokens
Este token debe incluir API, entonces selecciona SCOPES/API al momento de crearlo, tal como se muestra en la imagen lateral.
Al momento de crear este token, aparecerá un mensaje: "Make sure you save it - you won't be able to access it again." En otras palabras, debemos copiar el código del token de una vez, ya que después no será accesible. Así que cópialo y guárdalo en un lugar seguro.

GitLab integration

Ir a configuración de gitlab-integration
Uno de los tantos paquetes disponibles para Atom es justamente para la integración con GitLab, llamado tal cual: GitLab integration, disponible en https://atom.io/packages/gitlab-integration
Para usarlo, simplemente vas al link de descarga y selecciona install. El paquete se descargará y abrirá Atom editor para realizar la instalación.
Una vez instalado, vas a la configuración de Atom (File --> Settings) eliges Packages y bajo Gitlab-integration eliges Settings, como se muestra en la imagen de "Ir a configuración de gitlab-intetration".
Ingreso del token en gitlab-settings

Ya dentro de Settings aparecerá la opción "Gitlab API token", en donde podrás ingresar el token generado en GitLab, en el paso anterior, tal como se muestra en la imagen "Ingreso del token en gitlab-settings".

Con esto ya está listo, está configurado e integrado. Ahora el usarlo, lo cual es parte de mi siguiente publicación.


Notas:
- He elegido hacer publicaciones más cortas, para facilitar la lectura.
- He optado por hacer publicaciones en español, dado que aun es escaso el material en este lenguaje