Planeta Proyecto Canaima

October 16, 2017

Blog Hector Colinadocker y odoo – I

Desde hace algún tiempo, he venido trabajando-investigando con docker, tiempo en el cual he solventado algunos pequeños escollos a medida que se me han ido presentando.

Estos posts, de la serie docker, relatarán dichas peripecias.

En esta oportunidad, necesitaba ingresar como root dentro de un contenedor de docker sobre el cual funcionaba odoo; luego de leer la documentación [1], di con la instrucción precisa:

docker exec -u root -it odoo /bin/bash

La explicación de este comando es:

  • docker exec= ejecuta un comando docker dentro de una instancia determinada
  • -u root = usuario que ejecutará el comando, es importante notar que acá puede utilizarse tanto el nombre del usuario como uid del mismo
  • -it = esto es la unión de dos parámetros, -i -t, los cuales indican, respectivamente, ejecutar el comando de forma interactiva (-i) y crear una pseudo tty (-t) para “enganchar” un comando en específico. Es importante recordar que un contenedor es una máquina y que para acceder a la misma necesitamos “engancharnos”, esto es crear un pseudo dispositivo sobre el cual se anexará un comando
  • odoo = en esta secuencia es el nombre del contenedor sobre el cual se ejecutará la acción
  • /bin/bash = acá significa que esta es la orden a ejecutar

En resumidas, el comando dice

Crea un consola bash dentro del contenedor de nombre odoo y en la misma ingresa al usuario root

Espero les sea de ayuda

[1] https://docs.docker.com/engine/reference/commandline/exec/#options

May 17, 2017

Blog Hector ColinaEjecutando múltiples instancias de tor

En algunas ocasiones, quizás necesitemos ejecutar varias instancias de tor al mismo tiempo. Sin embargo, quien haya realizado esto, recordará que tor le indica que ya hay una instancia ejecutándose y le indica que debe cerrar todas las instancias existentes para poder ejecutar una nueva.

Esta situación puede ser resuelta si seguimos el siguiente procedimiento:

  • Descargamos tor desde su sitio original
  • Descomprimimos y copiamos cuantas veces sea necesario el directorio resultante; cada uno de los directorios resultantes almacenará una instancia, por lo que si deseamos ejecutar 4 instancias en paralelo deberemos copiar el directorio original 4 veces; yo utilizo algo como:
tar xf tor-browser-linux64-6.5.2_es-ES.tar.xz
mv tor-browser-linux64-6.5.2_es-ES tor
cp -R tor tor1
cp -R tor tor2
cp -R tor tor3
  • Luego de esto, un poco de teoría, cada vez que se ejecuta tor, se requiere tener acceso exclusivo a dos puertos, uno de control y el otro del proxy, dosinstancias de tor no pueden utilizar el mismo puerto al mismo tiempo por lo que necesitamos indicar a cada instancia de tor que se conecte a un puerto diferente
  • Llegados a este punto, tome lápiz y papel (o lo que utilice para escribir) y planifique qué puertos utilizará (control y proxy) para cada  instancia de tor; yo hice un ejercicio como el siguiente
Instancia Puerto Control Puerto Proxy
tor 9050 9051
tor1 9052 9053
tor2 9054 9055
tor3 9056 9057
  1. Esto es, asigné un puerto aletorio y le sume 1, pero teniendo en cuenta cuál es el número para cada instancia ya que de no hacerlo así se podrán tener problemas al iniciar la instancia respectiva
  2. Ahora necesitamos iniciar la instancia número 1, en mi caso se llama tor, a secas y cuando abra el navegador, en la barra de herramientas escribir “about:config” y ubicar la clave “extensions.torlauncher.control_port” y colocar allí el número respectivo, en mi caso, el 9050, modificamos el valor y le damos Ok.
  3. Posteriormente, debemos ubicar la pestaña de configuración y allí en la opción  de “Avanzadas -> Red -> Configuración -> Configuración manual del proxy -> Servidor SOCKS colocaremos el valor que hayamos fijado en nuestra tabla de referencia, en mi caso 9051
  4. Finalizado este paso, cerramos el navegador y procedemos a realizar la edición del archivo de configuración del software el cual podemos ubicar en Browser/TorBrowser/Data/Tor/torrc-defaults en la carpeta de la instancia que estamos modificando y allí al abrir el archivo, con un editor de textos,  y buscamos las siguientes entradas:
    • SocksPort y colocamos el valor 9051, en mi caso
    • ControlPort y colocamos 9050, en mi caso
  5. Guardamos los cambios realizados en el archivo y cerramos la edición del mismo
  6. Listo! ya nuestra instancia de tor está preparada para ejecutarse, sólo nos queda repetir los pasos 2, 3, 4 y 5 por cada instancia que hayamos copiado
  7. Luego de que finalice todas las ediciones, puede ejecutar cada instancia de tor sin ningún problema

Ejecución de varias instancias de tor al mismo tiempo

Espero les sea útil esta ayuda

NOTA

Es MUY importante que tome en cuenta que cada instancia consume abundante memoria  y que de tener muchas instancias andando puede hacer que su equipo empiece a presentar problemas de rendimiento, en mi caso, tengo una máquina virtual de 1 Gb y con 3 instancias funcionando al mismo tiempo y  un terminal abierto consume casi el 95% de la memoria RAM , mientras que el consumo de CPU no llega al 10%

May 04, 2017

Blog Hector ColinaPrestashop, página no encontrada

Si vas a mover tu instalación de prestashop hacia un nuevo sitio y estás usando varios lengiajes, está pendiente porque, algunas veces, puede aparecer un error de “Página no encontrada” ya que el sistema interpreta “en” y “es” (en caso de que uses inglés y español) como carpetas y no como parte del nombre.

Una sencilla solución es remover el archivo .htaccess y luego ir a la sección “Preferences -> Seo Urls”y allí desactivar y guardar la opción enlaces amigables y luego, volver a activar dichas opciones. Esto obliga a regenerar el archivo .htaccess.

Disfruta la  ayuda!

Blog Hector ColinaPrestashop page not found

Moving prestashop to new server?, be advise about “page not found” error when you’re using severals languages.

Solving it is easy, just remove your .htaccess and go to “Preferences -> Seo Urls” and turn on friendly urls – and right after that – turn it off.

This action regenerate .htaccess file and solve your issue.

Enjoy it!

November 23, 2016

Blog Hector Colinanginx detrás de proxy e ip real

Hace poco, en uno de los proyectos que estamos trabajando, nos encontramos con que los servidores usaban apache. Luego de examinar una cantidad de variables, tomamos la decisión de usar nginx. Sin embargo, luego de que finalizamos la configuración, nos dimos cuenta de que en los logs no aparecía la ip real de los visitantes sino una única ip; Al preguntar al proveedor nos informó que estábamos detrás de un proxy.

Esta situación nos obligó a revisar la configuración de nginx de forma tal de que pudiésemos obtener la ip real del visitante sin que el proveedor, bien conocido en Venezuela por su mal disposición a cambios que les haga salir de su “zona de confort”, tuviese que hacer ningún cambio.

Para ello, colocamos 3 directivas extras en el archivo de configuración del vhost respectivo (archivo /etc/nginx/sites-available/mi_vhost) en la sección server, las cuales son:

    server {
           set_real_ip_from IP_DEL_PROXY;
           real_ip_header X-Real-IP;
           real_ip_recursive on;
           bla, bla, bla
           }

Luego del cambio, reiniciamos el servicio:
     service nginx stop     service nginx start
Antes de realizar este cambio, nuestro log se veía así:
10.10.25.xx – – [22/Nov/2016:20:25:05 -0400] “GET / HTTP/1.0” 200 3573 “-” “Mozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0”
10.70.25.xx – – [22/Nov/2016:20:25:07 -0400] “GET /xpizarron.png.pagespeed.ic.C7Lq_VUyAW.jpg HTTP/1.0” 200 58211 “http://BLABLABLA/” “Mozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0”
Luego de realizarlo:
66.249.XX.XX – – [22/Nov/2016:20:38:15 -0400] “GET /xpizarron.png.pagespeed.ic.Qv832abBVy.webp HTTP/1.0” 200 29822 “http://BLABLABLABLA/” “Mozilla/5.0 (Linux; Android 4.2.2; V769M Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36”
66.249.XX.XX – – [22/Nov/2016:20:38:17 -0400] “GET /favicon.ico HTTP/1.0” 200 29942 “http://BLABLABLABLA/” “Mozilla/5.0 (Linux; Android 4.2.2; V769M Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36”
Espero les sea útil esta ayuda.

November 21, 2016

Blog Hector ColinaAplicaciones en php5 sin servidor web externo

Debe haber una forma mediante la cual hacer funcionar una aplicación en php sea más expedita que el procedimiento de instalar un servidor web (cualquiera que sea) junto con las dependencias necesarias para php y configuración para que permita el funcionamiento de la app, esta fue la pregunta que me hizo este escribir este post.

Revisando la documentación de php conseguí que php5 tiene integrado su propio servidor web, a partir de la versión 5.4 [1], el cual permite hacer funcionar, “rápidamente”, una aplicación web sin mayores complicaciones; en Debian, el procedimiento pasa por instalar php5 [2], cambiarse hacia el directorio donde está la aplicación que deseamos hacer funcionar y ejecutar:

root@snoopy:/home/hector/Documentos/wiki# php5 -S 127.0.0.1:8000

Donde:

  • php5 ejecutable de php5
  • -S que indica cual es la ip local donde estará funcionando el servidor, seguido de dos puntos indicando el puerto

Luego de esto, sólo es cuestión de abrir un navegador y visitar la dirección de 127.0.0.1 (localhost) en el puerto 8000

Es importante recalcar que este es un modo para desarrollo y no está pensado para producción; para esta función, utilicen servidores pensados para tal fin como apache2, lighttpd, nginx u otro.

Consola servidor php

Espero les sea útil esta ayuda

[1] http://php.net/manual/ro/features.commandline.webserver.php

[2] Procedimiento que instala las dependencias necesarias, a saber:  apache2{a} apache2-bin{a} apache2-data{a} apache2-utils{a}   libapache2-mod-php5{a} libapr1{a} libaprutil1{a} libaprutil1-dbd-sqlite3{a}  libaprutil1-ldap{a} libonig2{a} libqdbm14{a} php5 php5-cli{a} php5-json{a}   php5-readline{a} ssl-cert{a}

February 03, 2016

Blog Hector ColinaNuevo portal de Canaima

Hoy el proyecto Canaima institucional amaneció con nuevo portal Web, acá algunos detalles que observé de pasada

¿Qué me gustó?

* Es ligero (en mi paupérrima conexión cargó rápido)
* Interfaz moderna, no lo probé en otros dispositivos aunque por el
código debería ser responsive
* Combinación agradable de colores
*Declara los contenidos con Creative Commons Reconocimiento – No
Comercial – Compartir Igual 3.0 Venezuela

¿Qué no me gustó?
* Le quitan el crédito a la comunidad de joomla ya que estando basado en ese CMS no se ve por ningún lado que diga que lo usan, sólo revisando el código podemos verificarlo.
* TIene errores ortográficos, incluso en el código (<meta name=”keywords” content=”CNTI,cnti,Cnti,Canaima,CANAIMA,canaima,
Canaima 5.0, canaima 5.0, CANAIMA 5.0, Canaima Linux, canaima linux,
CANAIMA LINUX, Canaima GNU/Linux, canaima gnu/linux, CANAIMA
GNU/LINUX, Canaima Educativo, canaima educativo, CANIAMA EDUCATIVO…)
* Hay errores conceptuales: por ejemplo, confunden la definición de sabor de canaima educativo con el proyecto de hardware homónimo [1], o confundir el concepto de cayapa [2] con el funcionamiento de la comunidad canaima [3] lo cual si alguien que no conoce canaima lee
dirá que la comunidad canaima es una cayapa (:-)
* Mejor aprovechamiento de enlaces : Por ejemplo en
http://canaima.softwarelibre.gob.ve/canaima/soporte envían a
http://trac.canaima.softwarelibre.gob.ve/ cuando debería ser
http://trac.canaima.softwarelibre.gob.ve/canaima
* Alcances del proyecto no correctos: en [4] confunden nacional al
decir que “dado que nuestros dos principales productos están dirigidos
a usuarios en todo el país, el sector educativo y el sector APN”
dejando por fuera otros importantes sectores que también conforman lo
nacional.
* En beneficios se dejan de lado componentes estratégicos tales como
que canaima es una “excusa” par construir una soberania, un país
potencia, independencia tecnológica, apalancamiento de sectores
socio-productivos, etc.

Quizás existan otras observaciones que se me escapan en este momento,
pero creo que lo importante es el punto de que, quizás, la estrategia
de sacarlo al público para su validación es interesante siempre y
cuando se tenga claro el transfondo conceptual ya que esa es la primer
imagen que nos llevamos, lo demás es adorno…

Y así deben haber muchos detalles más.

MI humilde recomendación es que revisen bien este tipo de iniciativas
antes de salir a producción, pero que sean revisadas por un equipo
multidisciplinario para que la construcción pueda ser integral y no desde una única  perspectiva.
[1] http://canaima.softwarelibre.gob.ve/canaima/sabores-canaima
[2] http://cayapa.canaima.net.ve/wiki/doku.php
[3] http://canaima.softwarelibre.gob.ve/comunidad/como-funciona-la-comunidad-canaima
[4] http://canaima.softwarelibre.gob.ve/canaima/alcance

January 17, 2016

Blog Hector ColinaLighttpd y mod_rewrite

WordPress implementa una interesante función que se llama enlaces permanentes. Sin embargo, esta funcionalidad se apoya directamente en el mod_rewrite de apache2.

Ahora bien, algunos de nosotros tratamos en lo posible no usar apache por razones de uso de recursos (en especial en hosting donde la memoria va casi justa) y en su lugar nos decantamos por lighttpd, por ejemplo, lo cual hace que tengamos que trabajar un poco más a la hora de implementar o desplegar funcionalidades como la anteriormente descrita.

Así, al momento de migrar los blogs que estaban funcionando sobre apache y wordpress hacia lighttpd y wordpress, aparecía el detalle de que el panel de administración de wordpress no mostraba en las opciones de enlaces permanentes que  las direcciones fuesen del tipo URL+titulo_entrada sino que eran URL+index.php/+titulo_entrada

Para solventar este detalle se realizaron los siguientes pasos:

a) Se habilito el módulo de mod_rewrite

b) Se creó un nuevo bloque de configuración con una sintaxis como esta:

$HTTP["host"] =~ "(www.)?misitio.com" {
         url.rewrite = (
                         "^/(.*)\.(.+)$" => "$0",
                         "^/(.+)/?$" => "/index.php/$1"
                        )
}

Luego de reiniciar el servicio, entonces, se nos muestra una nueva opción en el panel de enlaces permanentes que se llama “enlaces personalizados”

Espero les sea útil la entrada.

 

August 06, 2015

Blog Hector ColinaPaquete vhistory en español para latex

Latex es una de las herramientas más poderosas que existen para la generación de documentación, así mismo, la cantidad de paquetes adicionales que pueden ser agregados con simples comandos aumentan su flexibilidad para poder realizar casi que cualquier opción que al usuario se le ocurra.

Hace poco se me presentó una duda mientras elaboraba un manual en latex ¿existe alguna forma de colocar el histórico del documento de forma semiautomatizada? En tanto mi documento no está bajo un sistema de versionado como git o svn, no podía acceder a un git log e incluirlo en el cuerpo del documento usando, por ejemplo, latex-git log [1] o latex-diff [2]. Así mismo, semiuatomatizado para mí es que en tanto soy el único autor conozco qué cambios he introducido en cada versión.

Buscando encontré el paquete vhistory el cual cumplía con todos mis requerimientos excepto uno: los mensajes que colocaba estaban en inglés, francés y alemán lo cual me animó a realizar la traducción del mismo al español, cosa que no me tomó más de 10 minutos entre ubicar el archivo .sty, entender el funcionamiento del mismo y colocar los nuevos bloques de mensaje; como resultado obtuve mi control de histórico en el documento con mensajes en español.

El archivo lo pueden conseguir en https://github.com/e1th0r/translations junto con las instrucciones corespondientes a su uso.

Espero les sea útil como lo fue para mí.

[1] https://www.ctan.org/pkg/latex-git-log?lang=en

[2] http://www.ctan.org/tex-archive/support/latexdiff/

April 05, 2015

Blog Hector ColinaIp real detrás de proxy web

Una de las acciones más utilizadas en el mundo de la virtualización es la de tener un proxy web que reciba todas las peticiones web que llegan al dom0 y pasarlas a las correspondietes VM que estén bajo su control y que puedan respondar a las respectivas peticiones web.

Sin embargo, la configuración estandar impide que podaos ver, por ejemplo, las direcciones IP reales que llegan a la VM, obteniéndose, en su lugar, la IP del dom0:

  IP CLIENTE          IP DOM0          IP LOG EN VM
==============      ==============     ===============
|190.9.XX.XX | -->  | 192.168.0.1| --> | 192.168.0.1 |
==============      ==============     ===============

Lo anterior podemos verlo en el siguiente trozo de log de un servidor lighttpd que responde peticiones provenientes de un servidor proxy web que funciona en nginx

prueba.mydomain.net.ve 192.168.0.1 – – [05/Apr/2015:08:36:12 -0430] “GET / HTTP/1.0” 404 345 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0”

Lo que deseamos es que el campo de la ip nos muestre la ip real del cliente que hace la conexión y no la ip del dom0.

La solución correcta en lighttpd es a siguiente:

a) Configurar y activar el módulo accesslog de lighttpd; en debian este módulo tiene su archivo de configuración aparte, ubicado en /etc/lighttpd/conf-available:

a-1) Configurándolo: para ello agregar al archivo /etc/lighttpd/conf-available/10-accesslog.conf la siguiente cadena al final del mismo:

accesslog.format = “%{X-Forwarded-For}i %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i””

a-2) Activar el módulo:

lighty-enable-mod accesslog

b) Configurar el módulo extforward, para ello, en su archivo de configuración de lighttpd coloque:

extforward.forwarder = (
     "192.168.0.1" => "trust"
  )
extforward.headers = ("X-Cluster-Client-Ip")

Nótese que la ip colocada acá es la del dom0 que se conecta con las VM, en nuestro caso es 192.168.0.1

c) Reiniciar lighttpd

Es muy importante el paso a-1 ya que muchos tutoriales no indican que debe colocarse la cadena %{X-Forwarded-For}i lo cual impide conocer la ip real.

Al finalizar esta configuración, el log del lighhtpd configurado en la VM debe mostrar algo como:

190.77.XX.XX – – [05/Apr/2015:08:52:45 -0430] “GET / HTTP/1.0” 200 2682 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0”

Quedando nuestro esquema, entonces, de la iguiente forma:

  IP CLIENTE          IP DOM0           IP LOG EN VM
==============      ==============     ===============
|190.9.XX.XX | -->  | 192.168.0.1| --> | 190.9.XX.XX |
==============      ==============     ===============

Espero disfruten la ayuda 😀