Archivos Mensuales: marzo 2012

Hay gente buena en este mundo …

Una llamada me recuerda con un mensaje lo inútil que es ser honesto y tener ética en este país, en una entidad pública, una empresa logró instalar una aplicación de software libre (de esas de “aptitude install” o “script>instalar>usar”) al exhorbitante precio de 75 mil bolívares (de esos de los fuertes) …

Otra llamada, un día después, me indica que algo muy sencillo, por el que cobro unos pocos bolívares (y hasta a algunos panas lo hago de gratis) una empresa logró sacarle a otra entidad pública y a otra privada la bicoca de 90 mil bolívares (por implementación) por un simple Samba con Firewall …

Hace algunas semanas atrás me enteré de una aplicación hecha en PHP+mySQL utilizando puras CRUD (sistema sencillo para crear vistas a partir de una tabla SQL) con Symfony y que costó la ingente suma de 230 mil bolívares fuertes …

Cuando lo conversas con amigos, incluso el más chavista a ultranza responde cosas como “hay que pagar comisiones, mordidas, etc” como si la cosa más abyecta se hubiera convertido en la cosa más común y pan de cada día …

Cuando te enteras que tu hermano fué quien cobró más barato mientras trabajaba en la empresa de un alto personero del gobierno, que buscando “la vida de empresario” monta una empresa con millones de bolívares y que hasta el vigilante cobró comisiones y mi hermano, honestamente, le cobró como a cualquier otro cliente …

Si la alcaldía reparte materiales de construcción y dices “oye, yo sinceramente no necesito, ya le hice arreglos a mi apartamento” y ves que la gente te mira con cara de PENDEJO y comienzan las discusiones “anotame ahí que mi abuela necesita bloques” ó “claro, yo también, le llevo esos sacos de cemento a mi cuñao que está en Barinas” o peor “¿acaso usted no sabe que no hay cemento?, agarre eso y véndalo” y ser los únicos de todo el consejo comunal que no nos ROBAMOS unos materiales que en definitiva NADIE NECESITABA porque eran cemento y bloques para un conjunto de apartamentos ya terminado hace años.

Que invadan par de terrenos en frente de mi conjunto residencial y, a pesar de que los terrenos son verdaderos latifundios que llevan AÑOS abandonados, cuando los invasores se enteran que los terrenos son de altos personeros del gobierno regional, inmediatamente se retiran, no sin antes dejar los terrenos limpios y desmontados y se “mudan” para un terreno unos metros más allá, quitándole terreno al pobre vendedor de verduras que tiene su puestito allí todos los días y quitándonos el camino comunal que unía las urbanizaciones de “La Granja” y “Los Pinos”.

Cuando te enteras que un incendio premeditado e iniciado en una finca vecina a la urbanización de mi hermano, se va fuera de control e incendia parte de su casa, acabando con techo, aires acondicionado y varios enseres y el dueño del terreno no se hará responsable de ninguna pérdida a la mirada indolente de las autoridades.

Cuando a tu padre le invaden su casa hordas de maníacos expropiadores acusándolo de derecha y latifundista cuando él es Chavista y antiguo guerrillero fundador del partido PCV y tiene que conformarse con lo que “los nuevos dueños del grupo de invasores F.R.I.O” le vayan a dejar de la casa y el terreno, si le dejan …

Cuando a tu vecino taxista lo secuestran para ruletearlo por la ciudad mientras sicarios van “matando” a su enemigos y luego, al final de la noche, 6 disparos acaban con la vida de un hombre que tuvo como único crímen queren prestar un servicio de transporte y de estar en mal lugar en mal momento …

y siempre, cuando uno está así, triste, cuando te dicen “conchalo, tú si cobras barato y explicas bien, tú si tienes ética” y eso lo tomas más por un insulto sinónimo de PENDEJO que por un cumplido, llega un señor, en un taxi muy viejo, que me traslada con mi esposa hasta el terminal de Barquisimeto, me espera (sin cobrarme) un rato a las afueras del terminal mientras me despido de mi esposa que retorna a Guanare para luego llevarme hasta mi trabajo (muy al norte de la ciudad, por Tamaca), todo a un precio más que justo y sin ningún inconveniente, hablando animadamente de las cosas del día a día y despidiéndose como si fuéramos amigos desde hace mucho tiempo, cuando te ocurre eso, te das cuenta que aún quedan personas buenas en el mundo …

[LDAP] Easy LDAP: una manera rápida de instalar un Directorio LDAP

openLDAP es, de facto, el servicio para instalación de directorios LDAP v.3 en software libre más utilizado, pero su instalación es a veces engorrosa y/o complicada para muchas personas.

Aún con conocimientos de openLDAP, el gestionar los cambios en la base de configuración cn=config puede hacerse complicado y/o tedioso y la instalación de un primer DIT (Directory Information Tree) o su configuración puede alargarse innecesariamente.

Para resolver esos detalles, he creado un muy simple y conciso script en Bash que nos permite instalar un openLDAP básico con las siguientes características:

  • * openLDAP en Debian Squeezy/Wheezy con soporte a cn=config
  • * Instalación completamente desasistida (la mayoría de los parámetros los auto-descubre)
  • * Incorpora un DIT DC utilizando el nombre de dominio del equipo (ej: ejemplo.com.ve genera un root DN dc=ejemplo,dc=com,dc=ve)
  • * Seguridad TLS/SSL con certificados x.509 auto-generados
  • Logging personalizado (/var/log/slapd.log) con rsyslog y logrotate
  • Reglas ACLs básicas
  • Tunning básico de cn=config y olcBackend
  • cn=auditlog y changelog habilitados
  • Incorporación de una larga lista de esquemas incluyendo:
      • Samba
      • Asterisk
      • DNSzone
      • ISC DHCP-ldap
      • RFC2307-bis (posixGroup auxiliary)
      • Trac
      • sudo-ldap, entre otros
  • Indexación de todos los atributos necesarios para todos los esquemas
  • Habilitación de SASL Auth (requiere configuración previa de SASL Digest-MD5)
  • Incorporación de las reglas básicas para replicación usando SyncRPEL
  • cn=Monitor habilitado
  • Incorporación de los siguientes módulos (overlays)
      • Integridad Referencial de atributos
      • Datos únicos (uidNumber, gidNumber, etc)
      • Constraints (ej. jpegPhoto !> 512k ó userPassword debe ser mayor que 5 caracteres)
      • Password Policy (ej. auto-cifrado de claves a SSHA)
      • Dynamic Listing (permite crear listas y grupos dinámicos)
      • Ordenamiento por valor (ValSort)

Easy LDAP incorpora un DIT básico FLAT (plano) del que necesita por ejemplo Samba, por lo que las personas no tendrán que convivir con un DIT muy complicado.

El DIT Incorpora:

  • Grupos y Grupos dinámicos
  • Reglas Sudo para root y Administradores
  • Grupo Administradores con permisos de “manage” (administración) sobre todo el DIT LDAP
  • Reglas por defecto del password Policy
  • Grupos para administración de cuentas (account-admins), del LDAP (ldap-admins) y de réplica (replicators) con sus permisos respectivos.
  • Data de ejemplo de algunas entradas (usuarios, grupos, grupos dinámicos y hosts)

Instalando

Para utilizar el script deben descargarlo desde Gitorious:

git clone https://git.gitorious.org/easy-ldap/easy-ldap.git

Página web oficial del proyecto > https://www.gitorious.org/easy-ldap/

encontrarán un archivo install-ldap.conf y uno llamado install-ldap.sh, en el archivo “.conf”, este archivo permite personalizar cosas como el SUFIJO (SUFFIX) si lo desea para algo distinto a “dc=ejemplo,dc=com”, el dominio del equipo (si va a ser distinto al dominio configurado de la máquina), de estar este valor en blanco y el dominio de la máquina no está configurado, este lo preguntará.

Usando

Usar el script es bastante sencillo, solo tiene un parámetro que es la actividad que deseamos hacer:

install-ldap.sh install

Inicia el proceso de instalación de openldap y:

install-ldap.sh uninstall

Desinstala y borra la base de datos existente.

Eso es todo!, respondan las preguntas en pantalla, y dejen que finalice el script.

TODO

Queda por hacer:

  • Que las personas puedan incorporar su propio DIT ú otros DIT (más árboles al bosque LDAP)
  • Configurar una entidad certificadora (para que el certificado no sea auto-firmado) y SASL
  • Configuración de réplicas

¿Más información?

openLDAP es un servicio del cual hay poca documentación en español para actividades complejas como configuración de overlays, tunning del olcBackend o personalización de servicios, aún cuando llevo un wiki en phenobarbital.gnu.org.ve este está bastante desafasado (mi culpa, no tengo Internet en mi apartamento y a veces voy a un cibercafé a conectarme y subir cosas como esta) pero estaré mejorando la documentación y la guía:libro que acompañará este script.

¿Te resultó de Utilidad?, pues dona algo para la causa!, no seas pichirre! …

[Linux] LXC: La “virtualización” barata

¿Qué es LXC?

LinuX Containers, una tecnología de contenedores que permite crear jaulas aisladas, una jaula contenedora es un sistema GNU/Linux auto-contenido dentro de otro, al que se le pueden aplicar cuotas de disco, CPU, memoria y algunos límites y capacidades, asignarle una (o varias) interfaces de red e “iniciarlo” como si fuera un equipo independiente.

LXC es construido encima de una jaula (chroot) y proporciona un sistema virtual completo, con mecanismos de “aislamiento e individualización” (isolation) que son completamente nativos al kernel Linux.

A diferencia de una virtualización al estilo de Xen, una “virtualización” basada en contenedores solamente puedes levantar el sistema operativo del host (en este caso, GNU/Linux), sin embargo, se puede levantar diversas “versiones” de GNU/Linux, al estilo de openVZ, con LXC se pueden levantar contenedores “compatibles” en Linux basados en Fedora, CentOS o Ubuntu y a diferencia de openVZ,  no requieren un micro-kernel o un parche completo al kernel Linux, ya que se basa exclusivamente en una tecnología de espacios y grupos (CGROUPS) que es nativa del kernel Linux desde el 2.6.30 y cualquier equipo con un kernel 2.6.30 (o superior), CGROUPS habilitado y los scripts de LXC puede comenzar a crear contenedores.

Se conoce como una “virtualización barata” puesto que no se requiere mucho recurso para levantar un contenedor LXC, consumen mucho menos que una maquina completa Xen y un poco menos que openVZ puesto que LXC se basa en un “chroot aislado y mejorado”, se pueden levantar docenas de “mini-máquinas virtuales” en un simple host.

¿Para qué usaríamos LXC?

A diferencia de openVZ, LXC no requiere un kernel “parcheado” (incluso un kernel Xen puede levantar recursos LXC), sin embargo, LXC no es una tecnología muy “completa”, por ejemplo, a diferencia de openVZ, no se pueden limitar capacidades de manera granular y específica y el kernel “oficial” de Debian estable (Squeeze 6.02) no posee por ejemplo habilitado el control de memoria (cgroup.memory).
Aún asi, LXC es muy útil para iniciar servicios aislados que anteriormente utilizabas una jaula chroot (como DNS) o aquellos que por su bajo consumo de recursos podrían correr perfectamente sobre una jaula LXC, algunos ejemplos serían: DNS, DHCP, Kerberos, Entidad Certificadora, pero que ahora, teniendo su propia reserva de recursos y su propia IP, podrás correrlo de manera aislada y segura.

¿Qué necesitamos?

LXC corre muy bien en Debian Squeeze estable, incluso sobre el kernel Xen 2.6.32, sin embargo, las herramientas para crear “contenedores” están bastante “desfasadas”, yo me hice mi propio script bash que crea un contenedor LXC de Debian usando debootstrap, tengo ya algo más de año y medio con ese script y lo pongo a disposición de quien lo necesite.

Si deseas “experimentar”, tendrás que saber que los núcleos 3.01 y 3.02 fallaron en su configuración de CGROUPS namespaces para soportar claramente LXC (Debian bug) y si desean utilizarlo conjuntamente con Xen, tendrán que subir hasta la última versión en backports, o sea:

  • * linux-image-3.2.0-0.bpo.1-rt-amd64
  • * cgroups habilitado
  • * xen-linux-system-3.2.0-0.bpo.1-rt-amd64
  • * lxc 0.7.5-24

Sin embargo, luego de algunas pruebas, he notado que ambos (Xen 4.1 sobre Kernel 3.2) y LXC (versión 7.4 en adelante) pueden coexistir pacíficamente:

xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  2985     4     r—–    541.9
ldap                                         1   256     1     -b—-     24.1

Y en el mismo equipo, LXC:

lxc-ls
cache
vm1

LXC-Tools: creando contenedores

LXC incorpora algunas “plantillas” para crear contenedores, pero están bastante desatendidas (aún en Wheezy, se consiguen plantillas solamente para crear VMs en Debian Lenny), por lo que hemos creado una serie de scripts que permiten crear contenedores para Debian Squeeze o Wheezy sobre un servidor con CGROUPS y LXC < 0.7.4.

Con LXC > 7.4 lxc-create incorpora la posibilidad de crear contenedores Debian incluso sobre Debian Sid, del que hablaremos en el siguiente capítulo.

Hay que tomar en cuenta que las cosas no se quedan ahí, ya que podemos crear contenedores para cualquier versión de GNU/Linux Debian-Based utilizando debootstrap (Ubuntu, Canaima) y podemos crear Fedora o CentOS utilizando rpmstrap, pero a su vez, una template para openVZ/proxmox (con algunos cambios) es compatible con una VPS LXC, por lo que veremos algunos avances en los scripts de lxc-tools.

Instalando lxc-tools

Tome nota que para poder utilizar contenedores LXC debería cumplir algunas cosas:

* Montado los CGROUPS (tip: agregar esta línea en el archivo /etc/fstab “none /sys/fs/cgroup cgroup defaults 0 0”)
* Instalado paquete LXC
* La forma más fácil de configurar red, es a través de un bridge, debe existir uno configurado (vea: mi artículo sobre virtualización)
* La interfaz bridge debe estar activa (revisar: “brctl show”)

Instalamos las dependencias del script:

apt-get install lxc lsb-release

Descarguen lxc-tools desde su fuente en Gitorious:

git clone https://git.gitorious.org/lxc-tools/bash_version.git

Cambie el modo a ejecutable al script principal:

chmod +x lxc-tool

y ya estamos listos para utilizarlo!.

Usando lxc-tools

lxc-tools viene con un archivo de configuración que permite definir ciertas opciones del script como por ejemplo el tamaño del contenedor, la versión de GNU/Linux (default: Debian), la Suite (default: squeeze) y otras opciones como el grupo de volumen donde crear la VM (TODO: en próxima entrega crearé contenedores directamente en un directorio); sin embargo, el script tratará de auto-descubrir la mayoría de las opciones necesarias.

Crear una VM es tan fácil como ejecutar:

lxc-tool create -n nombre

Este hará las preguntas necesarias y las otras las tomará del archivo de configuración o las autodetectará.

Notas: lxc-tools son unos scripts que tuve más de un año desatendidos, por unas necesidades inmediatas, hice algunos cambios y estaré agregando otros (como la creación de VMs a partir de plantillas de proxmox u openvz), sin embargo, la template para Debian incorporada en LXC 0.7.4 es realmente superior!.

Usando LXC

El comando más básico que deben conocer es “lxc-checkconfig”, este permite verificar si la configuración de nuestro Kernel Linux corresponde a las necesidades de LXC:

lxc-checkconfig

Verán una salida semejante a esta:

Kernel config /proc/config.gz not found, looking in other places…
Found kernel config file /boot/config-3.2.0-1-amd64
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

— Control groups —
Cgroup: enabled
Cgroup namespace: required
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

— Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Si CGROUPS está activo y el kernel soporta LXC, al instalar LXC podremos comenzar a crear VMs.

* Creando una VM:

lxc-create -n nombre -t [debconf|ubuntu|debian]

Donde:

-n : nombre que le daremos al conenedor

-t : template de construcción (debconf, debian base o ubuntu)

* Iniciando una VM:

lxc-start -n nombre

* Deteniendo una VM:

lxc-stop -n nombre

* Listando las VMs activas y creadas:

lxc-ls

Si desean una guía completa de LXC, revisen acá http://lxc.teegra.net/

Conclusiones

LXC se levanta como una alternativa fácil (de gestionar, de trabajar, de configurar, de mantener) a otros sistemas de virtualización/contenedores) su incorporación al ecosistema LIBVIRT nos permite administrarlo fácilmente con cualquier herramienta diseñada para usar libvirt (ej. virt-manager) y su bajo consumo de recursos permite ser pensado para virtualizar en entornos donde otras tecnologías serían imposibles de lograr (ejemplo: ¿se imaginan virtualizar contenedores LXC dentro de una Tablet Android para paralelizar tareas?).

TODO: ¿sería posible crear contenedores Fedora/CentOS desde cero si incorporamos rpmstrap a la fórmula?, ¿será posible incorporar LXC a un sistema Dual-Core Nvidia-Tegra 2 de una tablet?

Prueben y opinen sobre LXC, y como siempre:

Happy Hacking!

A %d blogueros les gusta esto: