Instalación manual de OpenStack – Servicio de Mensajería y Base de Datos

Esta serie de publicaciones no pretende ser un manual de instalación, por el contrario pretende solo recabar las experiencias aprendidas a lo largo de su instalación y uso para complementar así los manuales existentes. El código mostrado y utilizado a lo largo de estas publicaciones estará disponible en el repositorio vagrant-manual-openstack de mi cuenta personal de github.

Cabe mencionar que actualmente son usados masivamente dos sistema operativos por la comunidad para instalar los servicios de OpenStack: Ubuntu y RedHat. Para este caso en particular utilizare Vagrant como herramienta para la automatización de instalación y configuración de los ambientes, es por ello que haré uso del box “precise64″ que es Ubuntu. Por otra parte, esta instalación tiene como objetivo central ser distribuida, resultando en varias maquinas virtuales ofreciendo cada una de ellas un servicio especifico. Su configuración sera llevada a cabo a través del archivo Vagrantfile especificando los detalles técnicos de cada una de ellas.

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box     = 'precise64'
  config.vm.box_url = 'http://files.vagrantup.com/precise64.box'
 
  config.vm.define :rabbitmq do |rabbitmq|
    rabbitmq.vm.hostname = 'rabbitmq-precise64'
    rabbitmq.vm.network :private_network, ip: '192.168.50.10'
    rabbitmq.vm.network :forwarded_port, guest: 5672 , host: 5672 
    rabbitmq.vm.provision "shell", path: "rabbitmq.sh"
  end
 
  config.vm.define :mysql do |mysql|
    mysql.vm.hostname = 'mysql-precise64'
    mysql.vm.network :private_network, ip: '192.168.50.11'
    mysql.vm.network :forwarded_port, guest: 3306, host: 3306
    mysql.vm.provision "shell", path: "mysql.sh"
  end
end

Como proceso de post-instalación y configuración de cada maquina, he creado un script para cada maquina que contiene los pasos necesarios. Comenzare con la instalación del sistema de mensajería, para ello utilizare RabbitMQ, su proceso de instalación es muy sencillo y directo por lo que su script resulta en lo siguiente:

rabbitmq.sh

#!/bin/bash
 
# 1. Instalación de servicio de mensajeria
apt-get update
apt-get --no-install-recommends -qqy install rabbitmq-server

Otro servicio que requerimos es el de un motor de base de datos, donde todos los servicios podrán almacenar sus datos de manera optima y centralizada. En teoría, OpenStack puede soportar cualquier administradores de bases de datos, al ser instalado los servicios de OpenStack, como lo es Keystone, Glance, Nova, etc. utilizan por defecto SQLite como medio de persistencia, sus capacidades pueden llegar a ser limitadas ignorando partes esenciales requeridas en la computación de la nube, como lo son la escalabilidad y alta disponibilidad, es quizá por ello que la comunidad ha optado por el uso de MySQL (quizá mas delante podremos ver configuraciones con MariaDB) es por ello y para fines prácticos utilizaremos dicho motor de base de datos.

A continuación no solo mostrare las instrucciones necesarias para la instalación y configuración de la base de datos, también incluiré los pasos necesarios para la generación de bases de datos necesarias para cada servicio de OpenStack que posteriormente instalaremos.

mysql.sh

#!/bin/bash
 
# 1. Instalacion de servidor de base de datos
apt-get update
debconf-set-selections <<< 'mysql-server mysql-server/root_password password secure'
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password secure'
apt-get install -qqy mysql-server
 
# 2. Configuracion necesaria para acceso remoto
sed -i.bak "s/127.0.0.1/192.168.50.11/g" /etc/mysql/my.cnf
sed -i.bak "s/key_buffer/#key_buffer/g" /etc/mysql/my.cnf
sed -i.bak "s/myisam-recover/#myisam-recover/g" /etc/mysql/my.cnf
service mysql restart
 
# 3 Creacion de bases de datos de OpenStack
 
# 3.1 Creacion de base de datos para Keystone
echo "CREATE DATABASE keystone;" >> create_keystone.sql
echo "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'secure';" >> create_keystone.sql
echo "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'secure';" >> create_keystone.sql
 
mysql -uroot -psecure < create_keystone.sql
 
# 3.2 Creacion de bases de datos para Glance
echo "CREATE DATABASE glance CHARACTER SET utf8 COLLATE utf8_general_ci;" >> create_glance.sql
echo "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'secure';" >> create_glance.sql
echo "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'secure';" >> create_glance.sql
 
mysql -uroot -psecure < create_glance.sql
 
# 3.3 Creacion de base de datos para Nova
echo "CREATE DATABASE nova;" >> create_nova.sql
echo "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'secure';" >> create_nova.sql
echo "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'secure';" >> create_nova.sql
 
mysql -uroot -psecure < create_nova.sql
 
# 3.4 Creacion de base de datos para Neutron
echo "CREATE DATABASE neutron;" >> create_neutron.sql
echo "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'secure';" >> create_neutron.sql
echo "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'secure';" >> create_neutron.sql
 
mysql -uroot -psecure < create_neutron.sql

Nota: A diferencia del resto de las base de datos, Glance requiere ser configurada con un recompilación especifico(CHARACTER SET utf8 COLLATE utf8_general_ci), dicha característica esta en proceso de ser corregida en el código fuente.

 

OpenStack Fundamentos

openstack-cloud-software-vertical-large

OpenStack es un proyecto de código abierto creado hace mas de cuatro años por Rackspace y la NASA. Su finalidad es proveer un sistema que permita controlar un amplio grupo de recursos de computo, almacenamiento y redes de un centro de datos, todos ellos administrados desde un punto central. En otras palabras, dicha plataforma ofrece soluciones de Infraestructura a través de APIs (Servicios Web con arquitectura Restful).

Su masificación y popularización a lo largo de estos años ha ido creciendo de manera constante, lo cual ha permitido a compañías de distintos tamaños hacer uso de ella. Hoy en día cuenta con un total de 2,914,963 de lineas de código en su mayoría escritas en python y provistas por una comunidad de 2,556 miembros. Fuentes de información resumida y detallada.

Cada seis meses la comunidad global de OpenStack se reune para completar el ciclo de desarrollo y liberar la siguiente versión del código de fuente.

Release Name Release Date
Austin 21 de octubre del 2010
Bexar 3 de febrero del 2011
Cactus 15 de abril del 2011
Diablo 22 de septiembre del 2011
Essex 5 de abril del 2012
Folsom 27 de septiembre del 2012
Grizzly 4 de abril del 2013
Havana 17 de octubre del 2013
Icehouse 17 de abril del 2014
Juno 16 de octubre del 2014
“K” abril del 2015

Nota: En las siguientes publicaciones mostrare los pasos para instalar OpenStack Ice House en un Ubuntu 12.04 LTS “precise”.

 

Devstack

Comenzar a trabajar con OpenStack puede ser algo complicado ya que cuenta con varios componentes interconectados entre si, su instalación necesita la configuración adecuada de cada uno de los servicios y la correcta instalación de los paquetes requeridos, esta tarea en muchas ocasiones es repetitiva para muchos operadores y ardua para los desarrolladores. Es por ello que fue creado Devstack, su propósito fundamental es proveer de un entorno de desarrollo de una manera muy rápida y de la forma mas sencilla posible. Su instalación se podría resumir en solo tres simples pasos:

  • Descarga de los scripts necesarios
  • electrocucaracha@precise64:~$ git clone https://github.com/openstack-dev/devstack.git
  • Configuracion de servicios a ser habilitados y asignación de contraseñas
  • electrocucaracha@precise64:~$ cat <<EOL > devstack/local.conf
    > [[local|localrc]]
    > ADMIN_PASSWORD=password
    > DATABASE_PASSWORD=password
    > RABBIT_PASSWORD=password
    > SERVICE_PASSWORD=password
    > SERVICE_TOKEN=a682f596-76f3-11e3-b3b2-e716f9080d50
    > EOL
  • Ejecución…
  • electrocucaracha@precise64:~$ cd devstack; ./stack.sh

    Nota : Cabe señalar que en los pasos previos han sido omitida la instalación de git.

    Una vez iniciada su instalación solo es cuestión de esperar unos minutos, dependiendo de la velocidad de la red y otros factores, a que el script termine su ejecución. En caso de querer trabajar con Devstack, he creado un repositorio(https://github.com/electrocucaracha/vagrant-minimal-devstack) con las instrucciones mínimas necesarias para conseguirlo, solo es necesario contar con Vagrant y Virtualbox en la maquina a realizar la prueba.

     

    Creando agentes para envio de bitácoras

    Para completar la publicación anterior, es necesario instalar un agente que sea responsable de enviar el contenido de las bitácoras a nuestro repositorio central. Para ello utilizaremos los mismos pasos para la instalación de logstash, con cambios en la configuración.

    Instalación de logstash

    electrocucaracha@precise64:~# add-apt-repository ppa:webupd8team/java
    electrocucaracha@precise64:~# apt-get update
    electrocucaracha@precise64:~# apt-get install oracle-java7-installer
    electrocucaracha@precise64:~# cd /opt/
    electrocucaracha@precise64:~# wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.0.tar.gz
    electrocucaracha@precise64:~# tar -xvf logstash-1.4.0.tar.gz
    electrocucaracha@precise64:~# cat <<EOL > /etc/logstash-shipper-redis.conf
    >input {
    >  file {
    >    type => "nova"
    >    start_position => "beginning"
    >    path => [
    >             "/var/log/nova/nova.log",
    >             "/var/log/nova/nova-api.log",
    >             "/var/log/nova/nova-manage.log",
    >             "/var/log/nova/nova-compute.log"
    >    ]
    >  }
    >}
    >filter {
    >  if [type] == "nova" {
    >    grok {
    >      match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{AUDITLOGLEVEL:level} %{PROG:program} %{GREEDYDATA:message}" }
    >    }
    >    multiline {
    >      pattern => "^(([0-9]+-(?:0?[1-9]|1[0-2])-(?:3[01]|[1-2]?[0-9]|0?[1-9]))|((?:0?[1-9]|1[0-2])/(?:3[01]|[1-2]?[0-9]|0?[1-9]))).*$"
    >      negate => true
    >      what => "previous"
    >    }
    >  }
    >}
    >output {
    >  redis {
    >    host => [ "mi_servidor_redis.com" ]
    >    data_type => 'list'
    >    key => 'logstash'
    >    batch => true
    >  }
    >}
    EOL
    electrocucaracha@precise64:~# bin/logstash -f /etc/logstash-indexer-redis.conf

    Solo hace falta configurar el agente para que inicie como servicio. Para ello utilizare Ubuntu upstart.

    Instalación de logstash

    electrocucaracha@precise64:~# cat <<EOL >/etc/init/logshipper.conf
    >description     "logstash shipper agent"
    >
    >start on (net-device-up
    >          and local-filesystems
    >          and runlevel [2345])
    >
    >stop on runlevel [016]
    >
    >respawn
    >respawn limit 10 30
    >
    ># NB: Upstart scripts do not respect
    ># /etc/security/limits.conf, so the open-file limits
    ># settings need to be applied here.
    >limit nofile 32000 32000
    >
    >console log
    >
    >script
    >  exec sudo /opt/logstash-1.4.0/bin/logstash agent -f /etc/logstash-shipper-redis.conf
    >end script
    EOL
     

    Implementando un sistema centralizado de bitácoras

    Arquitectura general

    Dada la naturaleza de la nube, cada vez es mas común que un administrador sea responsable de varios cientos o quizá miles de servidores. No olvidemos que cada servidor cuenta con cierto nivel de dinamismo donde se procesa cantidad de datos resultando en la generación de eventos, estos últimos registran su actividad en las bitácoras o entradas en el sistema. Estos datos contienen información valiosa que nos puede servir para prevenir fallas en los equipos.

    Desgraciadamente la información que se generada por cada uno de los sistemas supera por mucho la capacidad de análisis que un operador puede realizar de manera cotidiana como parte de sus actividades de prevención en los equipos, es por ello que su análisis lejos de ser una actividad preventiva termina siendo una actividad reactiva. No obstante, muchas aplicaciones se encuentran distribuidas en varios equipos o su interacción implica el uso de varios servidores, lo cual agrava aun mas el poder determinar la principal causa de un problema.

    Es aquí donde nace la necesidad de contar con un sistema central de registros. Donde se busca el que los datos generados sean enviados y almacenados en un lugar único, para así mas tarde puedan ser procesados y consultados en tiempo real con el fin de prevenir posibles fallas.

    Logstash es una herramienta que maneja eventos y registros de las bitácoras. Ademas, su uso en conjunto con otras herramientas como redis, elasticsearch y kibana, nos permite crear un sistema central de registros.

    En esta ocasión, tratare de cubrir los pasos básicos para su instalación. Con el fin de tener una arquitectura modular es recomendable la utilización varios servidores, ademas nos permitirá un crecimiento horizontal en caso de tener una carga excesiva de datos.

    Arquitectura de componentes

    El primer componente que configuraremos es el negociador(“broker), su función es la de regular el flujo de datos que entran a nuestro sistema. Para ello utilizaremos una base de datos de tipo diccionario muy robusta como lo es Redis.

    Instalación de redis

    electrocucaracha@precise64:~# apt-get install build-essential
    electrocucaracha@precise64:~# cd /opt/
    electrocucaracha@precise64:~# wget http://download.redis.io/releases/redis-2.8.8.tar.gz
    electrocucaracha@precise64:~# tar -xvf redis-2.8.8.tar.gz
    electrocucaracha@precise64:~# cd /redis-2.8.8
    electrocucaracha@precise64:~# make
    electrocucaracha@precise64:~# src/redis-server

    Como segundo componente necesario es el indexador(“indexer), el cual nos permite ir procesando la información almacenada por el negociador. Para ello no solo es necesario instalar el servicio, también se requiere especificar las direcciones tanto del negociador(como origen de los datos) como del destino(como análisis de información).

    Instalación de logstash

    electrocucaracha@precise64:~# add-apt-repository ppa:webupd8team/java
    electrocucaracha@precise64:~# apt-get update
    electrocucaracha@precise64:~# apt-get install oracle-java7-installer
    electrocucaracha@precise64:~# cd /opt/
    electrocucaracha@precise64:~# wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.0.tar.gz
    electrocucaracha@precise64:~# tar -xvf logstash-1.4.0.tar.gz
    electrocucaracha@precise64:~# cat <<EOL > /etc/logstash-indexer-redis.conf
    >input {
    >  redis {
    >    host => "mi_servidor_redis.com"
    >    data_type => "list"
    >    key => "logstash"
    >  }
    >}
    >output {
    >  elasticsearch {
    >    host => "mi_servidor_elasticsearch.com"
    >  }
    >}
    EOL
    electrocucaracha@precise64:~# bin/logstash -f /etc/logstash-indexer-redis.conf

    El tercer componente sera una otra base de datos que nos permitirá consumirlos desde una interfaz gráfica. Para esta base de datos utilizaremos elasticsearch y su instalación se realiza de la siguiente manera.

    Instalación de elasticsearch

    electrocucaracha@precise64:~# add-apt-repository ppa:webupd8team/java
    electrocucaracha@precise64:~# apt-get update
    electrocucaracha@precise64:~# apt-get install oracle-java7-installer
    electrocucaracha@precise64:~# cd /opt
    electrocucaracha@precise64:~# wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.1.tar.gz
    electrocucaracha@precise64:~# tar -xvf elasticsearch-1.0.1.tar.gz
    electrocucaracha@precise64:~# cd elasticsearch-1.0.1/
    electrocucaracha@precise64:~# ./bin/elasticsearch

    El ultimo componente y no por ello el menos importante es la interfaz gráfica. Es necesario contar con un elemento que nos permita desplegar la información procesada y que mejor que tomar ventaja de las bondades de node.js con kibana.

    Instalación de kibana

    electrocucaracha@precise64:~# apt-get install -y apache2
    electrocucaracha@precise64:~# wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
    electrocucaracha@precise64:~# tar -xvf kibana-3.0.1.tar.gz
    electrocucaracha@precise64:~# cd kibana-3.0.1
    electrocucaracha@precise64:~# cp -R * /var/www/

    Hasta el momento solo hemos creado la infraestructura que almacenara, procesara y mostrara los datos. En la siguiente publicación mostrare como los clientes pueden utilizar este sistema.

     

    Pets vs. Cattle

    En la vieja escuela de computo, los ingenieros tratan sus computadoras como si fuesen mascotas(Pets). Ellos gastan gran cantidad de dinero comprando servidores que van desde los cientos de dolares hasta docenas de miles de dolares. A cada servidor se le asigna un nombre y sus compañías gastan grandes sumas de dinero cuidando y alimentando a sus maquinas preciosas. Por otra parte, son contratados ejércitos de administradores de sistemas con el único fin de trabajar día y noche asegurándose de su bienestar. Si alguna de ellas se descompone, la compañía asigna un grupo de administradores para arreglarla de inmediato.

    Pero hoy en día, dada la gran demanda de computo de alto rendimiento existen empresas como Google y Facebook que manejan cientos de miles de servidores. Dichas compañías tratan de manera desesperada de reducir costos, incluso llegando a crear su propio hardware. Resultando un modelo bastante efectivo y para muchas otras compañías y organizaciones un modelo a seguir. Tal es el caso de Microsoft, que en el ultimo año registro mas un millón de servidores en su centro de datos.

    Es por eso que hoy en día, los ingenieros tratan a sus servidores como si fuesen ganado(Cattle). En el sentido de que no se tiene importancia de que una vaca muera siempre y cuando la manada sobreviva. En otras palabras, los servidores pueden ser desechados porque ellos son mucho mas baratos de lo que solían serlo, y porque sus compañías ahora cuentan con software que les permite a los ingenieros automatizar tareas de configuración a maquinas recién compradas.

     

    Augeas, herramienta para manejo de archivos de configuración

    Augeas es una aplicación de código abierto( escrita en C) la cual permite administrar configuraciones, que mapean el sistema de archivos a un árbol XML el cual puede ser consumido de forma bidireccional.

    Como parte de sus herramientas esta augtool, la cual es una aplicación que nos permite modificar los archivos de configuración desde la linea de comandos para poder ser utilizada es necesario instalar el paquete de augeas-tools.

    Instalacion usando puppet

    electrocucaracha@precise64:~$ cat <<EOL >site.pp
    > package { 'augeas-tools':
    >   ensure => installed,
    > }
    > EOL
    electrocucaracha@precise64:~$ sudo puppet apply site.pp
    notice: /Stage[main]//Package[augeas-tools]/ensure: ensure changed 'purged' to
    present'
    notice: Finished catalog run in 6.92 seconds

    Para poder realizar modificaciones de manera segura es necesario crear un sandbox el cual nos servirá como respaldo, para ello es necesario declarar la variable de entorno AUGEAS_ROOT.

    electrocucaracha@precise64:~$ export AUGEAS_ROOT=/tmp/augeas-sandbox
    electrocucaracha@precise64:~$ mkdir $AUGEAS_ROOT
    electrocucaracha@precise64:~$ sudo cp -pr /etc $AUGEAS_ROOT
    electrocucaracha@precise64:~$ sudo chown -R $(id -nu):$(id -ng) $AUGEAS_ROOT

    Augtool es una herramienta interactiva, la cual una vez iniciada permite ejecutar una serie de comandos

    electrocucaracha@precise64:~$ augtool -b
    augtool> help
    Commands:
     
        quit       - exit the program
        clear      - clear the value of a node
        defnode    - set a variable, possibly creating a new node
        defvar     - set a variable
        get        - get the value of a node
        ins        - insert new node
        insert     - insert new node (alias of 'ins')
        load       - (re)load files under /files
        ls         - list children of a node
        match      - print matches for a path expression
        mv         - move a subtree
        move       - move a subtree (alias of 'mv')
        print      - print a subtree
        dump-xml   - print a subtree as XML
        rm         - delete nodes and subtrees
        save       - save all pending changes
        set        - set the value of a node
        setm       - set the value of multiple nodes
        clearm     - clear the value of multiple nodes
        span       - Print information get the filename, label and value position in the text of this node
        help       - print help
     
    Type 'help <command>' for more information on a command

    Como primer ejemplo, cambiaremos el valor de IP para la maquina en cuestión. Cuando se inicia augtool con el argumento de -b, nos permite mantener un archivo de respaldo con la extension de .augsave.

    augtool> ls /files/etc/hosts/1
    ipaddr = 127.0.0.1
    canonical = localhost
    augtool> set /files/etc/hosts/1/ipaddr 192.168.0.1
    augtool> save
    Saved 1 file(s)
    augtool> print /files/etc/hosts/1/ipaddr
    /files/etc/hosts/1/ipaddr = "192.168.0.1"

    La herramienta indexa cada entrada del archivo de /etc/hosts secuencialmente iniciando desde 1. Por otra parte el comando set, asigna el valor a un nodo especifico y en caso de no existir lo crea, también existe el comando ins que sirve para crear un nodo y permite tener mejor control. También existen formas para buscar algún valor en particular

    augtool> match /files/etc/hosts/*/ipaddr 192.168.0.1
    /files/etc/hosts/1/ipaddr

    Por ultimo podemos comparar los cambios que hasta el momento hemos hecho en el archivo de configuración. Para ello haremos la comparación contra el archivo de respaldo que automáticamente se ha generado

    augtool> quit
    electrocucaracha@precise64:~$ cd ${AUGEAS_ROOT} && diff -u ./etc/hosts ./etc/hosts.augsave
    --- ./etc/hosts 2014-05-31 20:57:58.680250336 +0000
    +++ ./etc/hosts.augsave 2012-09-14 05:35:17.897584251 +0000
    @@ -1,4 +1,4 @@
    -192.168.0.1    localhost
    +127.0.0.1      localhost
     127.0.1.1      precise64
     
     # The following lines are desirable for IPv6 capable hosts

    Para mas ejemplos e información de esta herramienta se puede encontrar una guía inicial en su sitio oficial.

     

    Instalación y utilización de Vagrant

    Vagrant es una herramienta de código abierto (escrita en Ruby) diseñada para automatizar la creación y configuración de ambientes de trabajo de manera fácil, portable y repetible. Puede ser visto como una envoltorio alrededor del software de virtualización.

    En el caso de los desarrolladores de software es una forma de decir adiós al “funciona en mi maquina” ya que todos los miembros del equipo estarán ejecutando el mismo código en un ambiente con las mismas dependencias y configurado de la misma forma. Para los ingenieros de operaciones, Vagrant provee un ambiente desechable y consistente que permite desarrollar y probar scripts de administración de infraestructura. Y por ultimo, a los diseñadores web les permite configurar todo lo necesario para poder concentrarse exclusivamente en el diseño de un portal.

    Su instalación es sencilla y varia dependiendo del sistema operación y/o la distribución utilizada, y se realiza a través de su sitio oficial. Por otra parte, se requiere de un provisionador local como puede ser VirtualBox o VMware.

    Nota: Todas las instalaciones pueden ser realizadas por medio de chocolatey

      C:\Users\electrocucaracha\>cinst vagrant
      C:\Users\electrocucaracha\>cinst virtualbox

    Una vez instalado es necesario generar el archivo Vagrantfile, en el se especifica los detalles del provisionamiento, sus dependencias y la configuración del ambiente de trabajo, para ello es necesario ejecutar el comando de inicialización.

    vagrant init

    C:\Users\electrocucaracha\demo-vagrant>vagrant init precise64
    A `Vagrantfile` has been placed in this directory. You are now
    ready to `vagrant up` your first virtual environment! Please read
    the comments in the Vagrantfile as well as documentation on
    `vagrantup.com` for more information on using Vagrant.

    Para poder comenzar con la construcción del ambiente es necesario contar con una imagen base del sistema operativo que usaremos. Dichas imágenes (mejor conocida como “boxes” dentro del argot de Vagrant) pueden ser descargadas del catalogo publicado en el sitio oficial de Vagrant, solo hay que tomar en cuenta el provisionador que estemos utilizando(VirtualBox o VMWare). En nuestro ejemplo, al especificar el parámetro “precise64″ nos referimos a la imagen de Ubuntu 12.04 LTS (Precise) de arquitectura de 64 bits. Vagrant cuenta con un comando para agregar dicha imagen a nuestro catalogo local.

    vagrant box add

    C:\Users\electrocucaracha\demo-vagrant>vagrant box add precise64 http://files.vagrantup.com/precise64.box
    Downloading box from URL: http://files.vagrantup.com/precise64.box

    Una vez incorporada la imagen a nuestro catalogo local y después de haber terminado de especificar los detalles del ambiente de trabajo en el archivo Vagrantfile tendremos todo lo necesario para poder construir el ambiente de trabajo.

    vagrant up

    C:\Users\electrocucaracha\demo-vagrant>vagrant up
    Bringing machine 'default' up with 'virtualbox' provider...
    [default] Importing base box 'precise64'...
    [default] Matching MAC address for NAT networking...
    [default] Setting the name of the VM...
    [default] Clearing any previously set forwarded ports...
    [default] Clearing any previously set network interfaces...
    [default] Preparing network interfaces based on configuration...
    [default] Forwarding ports...
    [default] -- 22 => 2222 (adapter 1)
    [default] Booting VM...
    [default] Waiting for machine to boot. This may take a few minutes...
     
    ...
     
    stdin: is not a tty
    [default] Mounting shared folders...
    [default] -- /vagrant

    Después de unos minutos y una vez terminado el proceso de construcción, podemos accesar a la maquina por medio de algún cliente que soporte el protocolo ssh.

    Nota: Vagrant porporciona una manera sencilla que nos permite eliminar el ambiente de trabajo.

    vagrant destroy

    C:\Users\electrocucaracha\demo-vagrant>vagrant destroy -f
    [default] Forcing shutdown of VM...
    [default] Destroying VM and associated drives...
     

    IT Unicorns

    Trevor Pott said that unicorns are “those smart people [that] everyone wants but no one has ever seen one.” They typically have experience managing large amounts of infrastructure and have a background in data center administration and suffer no fools gladly.

     

    Polyfill

    En términos de desarrollo web, un polyfiller es una pieza de código descargable el cual provee capacidades esperadas nativamente dentro de un explorador web. Por ejemplo, muchas características de HTML5 no son soportadas por antiguas versiones de Internet Explorer, pero pueden ser usadas por paginas web siempre y cuando cuenten con algún polyfiller el cual ayude con dichas carencias.

    Dicho termino fue creado por Remy Sharp, quien buscaba una palabra que significara el replicar una API, usando Javascript, en el caso de que el explorador no contara con ella. Poly del griego πολύ = muchos, el cual refiere a dar una solución usando cualquier numero de técnicas, sin estar limitarlo a Javascript y fill cuya traducción significa llenar, refiriendo al rellenar aquellas carencias del explorador donde tecnología necesaria debe estar presente.

    Por ultimo, también refiere al nombre del producto ingles Polyfilla, el cual es una pasta que ayuda a cubrir hoyos en las paredes, siendo una forma visual para Sharp de representar el como es corregido las carencias del explorador.

    Polyfilla

    Para conocer una coleccion de shims, fallbacks y polyfills visita la siguiente pagina.

     
     
     
    Resources