Publicar la llave pública SSH

Los principales repositorios (Gitlab y Github) exponen las llaves públicas SSH de sus usuarios de forma que están accesibles para descarga:

https://(gitlab|github).com/<usuario>.keys

Es la URL de donde se obtienen, y aquí las mías:

La ventaja es tener un sitio disponible donde está nuestra clave (y la de nuestros colegas) para usar en automatismos como esta task de Ansible:

- name: Enable pilasguru root access
  authorized_key:
    user: root
    state: present
    key: https://gitlab.com/pilasguru.keys
    validate_certs: False

Instalar Docker con Ansible

Instalar en Ubuntu 16.04 con Ansible docker engine y docker-compose.

- hosts: all
  become: true

  tasks:
    - name: ensure repository key is installed
      apt_key:
        id: "58118E89F3A912897C070ADBF76221572C52609D"
        keyserver: "hkp://p80.pool.sks-keyservers.net:80"
        state: present

    - name: ensure docker registry is available
      # Ubuntu 16.04 LTS
      apt_repository: repo='deb https://apt.dockerproject.org/repo ubuntu-xenial main' state=present

    - name: ensure docker and dependencies are installed
      apt: name={{ item }} update_cache=yes
      with_items:
        - docker-engine
        - docker-compose

    # To enable insecure registries with Docker
    #- name: ensure docker can use insecure registries in 10.1.0.0/16
    #  lineinfile: "dest=/etc/default/docker regexp=^DOCKER_OPTS line=DOCKER_OPTS='--insecure-registry 10.1.0.0/16'"

    # Optional if you are provisioning vagrant
    #- name: add vagrant to docker group
    #  user: name=vagrant groups=docker append=yes

    - service: name=docker state=restarted

Configuración de provision con Vagrant:

  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
    ansible.compatibility_mode = "2.0"
  end

LXC en Debian con Ansible

Desde antes del 2013 vengo insitiendo con las ventajas de los containers en Linux, ya que permiten un rápido despliegue de muchos sistemas Linux corriendo en forma independiente.

En 2014 había hecho experiencias para tener con una máquina virtual de DigitalOcean muchos contenedores Linux instalados y prestando servicios y en 2016 tuve la oportunidad de compartir en forma práctica con la comunidad de Paysandú un ejemplo de uso de contenedores.

Hace unos meses atrás armé un perfil de vagrant (Vagrantfile) que permite levantar una máquina virtual con Debian e instalar (aprovisionar) un servidor de contenedores LXC, y un primer contenedor de pruebas.

Este artículo tiene por objetivo, compartir esa configuración, para que la pueda usar quién desee.

Repositorio: debian-lxc-ansible

El aprovisionamiento se realiza mediante Ansible, por lo que es fácil de parametrizar y adaptar.

Una vez levantado el primer contenedor (que ya queda en el aprovisionamiento inicial, luego de correr vagrant up) es muy fácil levantar más contenedores con los comandos normales.

También, en el directorio /vagrant/utils se entregan scripts (requieren revisión y adaptación a la instalación particular) que sirven cómo muestra de cómo levantar containers para producción:

a) Levantar un container con sitio web funcional

/vagrant/utils/create-container.sh name

b) Borrar el container creado con el script anterior

/vagrant/utils/destroy-container.sh name

c) Crear una página web para ver el status de los containers a través de web en el servidor lxc

/vagrant/utils/status.sh

Toda esta instalación, obviamente puede ser modificada y mejorada. Si desean compartir sus mejoras conmigo lo pueden hacer a través de Merge Request.

Gestión y administración centralizada

Nos encaminamos hacia la computación en la nube como la mejor solución para el manejo diario de aplicaciones que requieren soluciones flexibles, plataformas que evolucionan y adaptabilidad de servicios. Además, el Software Libre se desarrolla a velocidades sorprendentes para satisfacer esta necesidad de cloud computing, generando continuamente nuevos proyectos y comunidades.

El Software Libre y la computación de nube han elevado el número de nodos como nunca antes; si bien se pueden aplicar algunas políticas generales, siempre hay que llegar a impactar cambios a nivel de cada nodo o máquina virtual. Se ha vuelto necesario disponer de herramientas que permitan aplicar esas políticas rápidamente: desde una nueva regla para el sistema de monitoreo, una tarea programada o la instalación de un nuevo software. Esta presentación aborda algunas de las alternativas disponbiles con Software Libre que permiten convertirse en el Director del centro de datos: para que los nodos actúen al unísono y las políticas estén siempre aplicadas.

Público objetivo: Técnicos encargados de administración de servidores, SysOps y DevOps, administradores de centros de datos.

Requisitos: Conocimientos de sistemas operativos (Unix), administración de servidores. Cloud computing

Conferencia dictada en:

Video de la presentación realziada en el marco de Avanza 2014:

Avanza 2014

Ejecutar un script bash remoto sin instalar

Me ha sido muy útil ejecutar scripts remotos sin instalarlos localmente. Esto me permite, por ejemplo, hacer la instalación inicial del cliente Puppet o poner Ansible para completar la configuración del sistema hasta llevarlo a estado de producción.

Para descargar el script se puede usar tanto el comando curl como wget. Uno u otro suelen venir instalados por defecto en cualquier distribución Linux.

La idea es simple: correr el comando (wget o curl) y obtener la salida (script) limpia (es decir, sin datos extra de transferencia o ejecución) y pasarlo como entrada a bash para su interpretación y ejecución local.

He armado un simple script, cuyo código puede ser visto aqui: script-remoto.txt (la terminación txt es solamente para que lo muestre el navegador, pero no necesita ninguna extensión en particular), que puede ser ejecutado con cualquiera de estos comandos:

con curl:

source <(curl -s http://pilas.guru/wp-content/uploads/script-remoto.txt)

bash <(curl -s http://pilas.guru/wp-content/uploads/script-remoto.txt)

curl -s http://pil.as/1h1n | source /dev/stdin

curl -sL http://pilas.guru/wp-content/uploads/script-remoto.txt | bash -s

con wget:

source <(wget -qO- http://pilas.guru/wp-content/uploads/script-remoto.txt)

bash <(wget -qO- http://pilas.guru/wp-content/uploads/script-remoto.txt)

wget -qO- http://pil.as/1h1n | source /dev/stdin

wget -qO- http://pilas.guru/wp-content/uploads/script-remoto.txt | bash -s

Pueden ver que he creado un enlace corto que redirecciona al mismo archivo http://pil.as/1h1n, pero ATENCION, no se debe confiar en los enlaces cortos livianamente y MENOS con la intención de ejecutar comandos ajenos en el equipo propio.