Blog de Daniel Zegarra Rotating Header Image

Linux

Depurar Code Igniter con Eclipse y Zend Debugger

Sin hacer cambios a Code Igniter no se puede. Aun si enable_query_strings esta definido en FALSE Code Igniter leera las variables que PDT pasa usando GET para que Zend Debugger conecte correctamente a la consola. Es una tonteria que Eclipse no nos permita NO pasar estas variables via GET. La solucion mas rapida pero no permanente es abrir el sitio que deseamos depurar en un browser aparte luego de tener a Eclipse esperando la conexion del depurador, pero es una salida molesta.

Lo que hice fue decirle a Code Igniter que ignore ciertas variables entregadas via GET aprovechando los Hooks para no tocar el codigo base de CI.

Para usar este hook sigue estos pasos:

  1. Descarga este archivo y guardalo en tu escritorio.
  2. Descomprime el contenido del archivo en el directorio application de tu instalacion de CI. Si ya tienes registrado algun hook entonces no reemplaces el archivo config/hooks.php. Agrega el contenido del archivo descargado tu archivo hooks.php actual.
  3. Asegurate que enable_hooks es igual a TRUE en el archivo config.php ubicado en CIroot/application/config/.

Luego de hacer esto, intenta depurar tu aplicacion. Deberia correr sin problemas y ya no mostrar el error de que no se encuentra el controlador.

Nota: La intencion de este articulo es solo compartir un archivo fuente para utilizar Zend Debugger con CI. Para informacion de la instalacion de Zend Debugger o su uso con Eclipse PDT  puedes… googlear.

Descargar ZendDebugger&CI Hook

Proxy Web sobre SSH (2da parte)

Parametros de configuracion avanzados de Firefox

Hace unos dias publique un minituto para usar una conexion ssh cualquiera para salir por ella a internet. Lo que no explique en ese post es que hacer cuando el proxy que nos bloquea el acceso libre a internet tambien funciona como un servidor DNS.

Advertencia: Yo supongo que vienes de leer el post Proxy Web sobre SSH. Si tienes dudas sobre algun paso lee este post anterior. No empieces a hacer cambios en tu maquina si no sabes lo que estas haciendo.

Si el computador que usamos utiliza el servidor proxy como servidor DNS entonces es probable que sigamos sin poder navegar libremente ya que si bien los paquetes de datos estan viajando a traves de nuestro tunel encriptado, la resolucion de nombres de dominio (lo que permite convertir www.google.com en 66.102.7.99) sigue realizandose como antes.

Para probar si tenemos salida a internet enganando al proxy podemos hacer lo siguiente:

  1. Buscate una pagina que no puedas entrar, por ejemplo: www.youtube.com o www.facebook.com.
    Usando el terminal de putty hazle un ping a esta direccion para obtener el IP resultante.

    ping www.youtube.com -c 1

    Haciendo un ping a www.google.com

    Nota: Utilizo el argumento -c 1 para realizar un solo intento. El comando ping de linux no tiene limite de intentos por defecto. Si no le pones un limite o lo detienes manualmente no parara hasta cerrarse la sesion.

  2. Apunta y escribe el IP en tu navegador y presiona <Enter>. Si se abre la pagina prohibida significa que solo necesitas usar tu tunel SSH para resolver nombres de dominio. Sigue leyendo para aprender como hacerlo.

Resolver nombres de dominio usando un servidor remoto

Esto es un poco complicado puesto que, como es de esperarse, el servidor proxy este acompanado a su vez de un cortafuegos y este no permite hacer solicitudes de DNS hacia fuera. Y si no utilizas un proxy transparente (osea que debes configurar manualmente la direccion del proxy en Opciones de Internet) Windows no te permitira configurar un proxy a travez de otro proxy.

La solucion mas simple es instalar y usar Firefox.

Mozilla Firefox tiene una opcion que te permite resolver DNSs a travez del proxy que este configurado. Para actvarla sigue estos pasos:

  1. Escribe about:config en la barra de direcciones y presiona <Enter>.
  2. Veras una advertencia de Firefox informandote que puedes joder el browser si te pones a jugar en esta area. Si te riges al tuto no pasara nada, solo no toques lo que no entiendas. Presiona en el unico boton de la advertencia y a continuacion el editor de parametros.
  3. Escribe network.proxy.socks_remote_dns en el filtro para ubicar el parametro que debemos modifcar.

    Parametros de configuracion avanzados de Firefox

    Parametros de configuracion avanzados de Firefox

  4. Como se trata de un parametro de tipo booleano, has doble clic sobre el para alternar entre TRUE o FALSE. Por defecto es FALSE y por lo tanto resuelve nombres usando el gateway configurado en Windows. Si es TRUE, enviara toda peticion de resolucion de nombres por el proxy configurado.

Esta configuracion solo afectara a Firefox. Todas las demas aplicaciones seguiran resolviendo nombres de forma local.

Si deseas restaurar este cambio, realiza los mismos pasos y devuelve el estado FALSE al parametro para dejarlo como estaba al inicio.

Proxy Web sobre SSH

Usando dreamhost.com como proxy

Y bien, volviendo a los temas originales del blog esta vez explicare como usar como un proxy web cualquier servidor al que tengamos acceso via ssh.

Las conexiones ssh son tuneles entre dos computadores (cliente y servidor) que permiten una comunicacion segura entre estas. Yo lo utilizo para configurar remotamente servidores linux y para transferir archivos al servidor de hosting que aloja este blog. Pero el potencial de ssh va mas alla. Lo que vamos a intentar ahora es usar este canal para salir a internet.

Esto es util en los siguientes casos:

  • Te encuentras en una red detras de un proxy y no te deja entrar a… facebook, youtube, etc.
  • Estas conectado a una red wi-fi sin proteccion y quieres proteger tus datos (con ssh todo va encryptado).
  • Deseas tener acceso a contenido que no se encuentra disponible en tu region (pero si en la region donde se encuentra tu servidor ssh).

Para empezar, lo que se necesitas para este experimento es:

  • Un equipo corriendo un servidor ssh que se encuentre en un lugar accesible ( Puede encontrarse en tu misma red o contar con un IP publico para tener acceso a el desde cualquier parte).
  • Tener instalado Putty, si usas Windows o tu cliente ssh si usas Linux.

Nota: Yo tengo un hosting contratado con Dreamhost que me da acceso a mi servidor compartido Linux via ssh. Utilizare este servidor como ejemplo.

En Windows

Ejecutas Putty e ingresas la direccion de tu servidor en el campo Host Name (or IP Address). Asegurate que connection type tenga marcado SSH.

Pantalla inicial de Putty

Pantalla inicial de Putty

Esta primera pantalla es basica. Con llenar esto es suficiente para iniciar la conexion con el servidor pero para lograr lo que queremos hace falta algo mas. En el panel izquierdo ve a Connection > SSH > Tunnels.

En el grupo de campos llamado Add new forwarded port ingresa 8080 en el campo Source port y elije Dynamic de entre los botones de opcion para que quede tal como se ve en la siguiente imagen.

Configurando el nuevo tunel

Configurando el nuevo tunel

Una vez hecho esto dale en el boton Add. Esto ingresara la configuracion dada a la lista de tuneles que deben crearse al conectarse con el servidor. Veras un nuevo elemento con el nombre D8080

Con ayuda del panel izquierdo regresa a la pantalla inicial de Putty (Session) y dale un clic en el boton Open para empezar la conexion con el servidor. Luego de ingresar el nombre de usuario y clave y una vez que el servidor confirme que los datos son correctos Putty redireccionara todos los paquete enviados al puerto 8080 local hacia el servidor.

En Linux

Pues es mas simple. Tan solo corres el siguiente comando:

ssh -D 8080 username@servidor_ssh

Donde el numero seguido de -D es el numero de puerto que se quiere crear, username un nombre de usuario valido y servidor_ssh es la direccion del servidor. Presionas <enter> e ingresas la clave para completar la autenticacion.

Configurar el proxy en el navegador

Yo usare Firefox pero tu puedes usar cualquiera. Te vas al menu Herramientas > Opciones > Avanzado > Red > Conexion > Configuracion y dejas los campos tal como vez en la imagen siguiente.

Configurando un proxy Socket en Firefox

Configurando un proxy Socket en Firefox

Guardas los cambios y firefox saldra a internet por el tunel con tu servidor remoto.

Hacemos la prueba?

Sin el proxy (saliendo a internet con trafafonica)

Salida normal a internet, directamente a traves del router

Salida normal a internet, directamente a traves del router

Y este es el resultado saliendo a traves de xxx.dreamhost.com.

Usando dreamhost.com como proxy

Usando dreamhost.com como proxy

Notas

  • Este proceso redireccionara todo el trafico del browser por este tunel la resolucion de nombre de dominio las seguira haciendo por la via habitual. Si estas detras de un proxy que te bloquea el acceso por el nombre de dominio que utilices necesitas activar la opcion set network.proxy.socks_remote_dns de firefox entrando a about:config para resolver los nombres por el mismo tunel.
  • La version de Putty a la fecha de creacion de este post es la 0.60.

La distribución Linux adecuada

Mi primer contacto con Linux fue gracias una revista de esas que llevan un disco de aplicaciones dentro. Esta era una distribución que se instalaba como una aplicación de Windows y modificaba a voluntad los archivos de arranque de Windows 98 para cargarse. Así que cada vez que querías usar este “Linux” tenias que entrar a Windows y correr esta aplicación la cual te hacia reiniciar la PC con Linux y al próximo reinicio volvías a Windows nuevamente.

En ese entonces mi primer contacto con Linux fue traumático. Encontré que no podía correr los juegos que solía usar y el editor de textos era horrible (incluso comparado con el Ms Word 97 de esos tiempos). No habré ingresado a ese Linux mas de 3 veces cuando lo desinstale para no volver a probar software libre hasta varios años mas tarde.

Ahora Linux es otra cosa. Ha dejado de ser ese sistema operativo con falta de gracia y “solo para servidores” e incluso hasta llegar a usarse en computadoras de escritorio de usuarios nada especializados en informática.

Pero ahora, surge otro problema para los usuarios que quieren aventurarse en Linux:

¿Cual distribución elegir?

Si bien, no todas las distribuciones están pensadas para usarse en una PC de escritorio, muchas de ellas se califican como “perfectas para los usuarios que recién empiezan” o con “tiene todo lo que necesitas para trabajar” lo que hace muy difícil elegir una sin antes probarla.

Lo que sigue es una evaluación de las distribuciones Linux mas populares que pueden usarse en equipos de escritorio:

Mandriva Linux One 2010

Vista miniatura de aplicaciones activas

Mandriva 2010 - Vista miniatura de aplicaciones activas

Si bien el theme por defecto es muy… azul, se puede cambiar al Oxigen que es mas serio.

Hay asistentes de configuración, principalmente en redes, que parecen pensados para hacer las tareas mas comunes (como el compartir el acceso a internet o compartir archivos con equipos Windows) y el manejo de redes 3G es realmente impresionante. Detecto y configuro mi conexión a internet automáticamente al leer el ID de mi operador móvil. Lo hizo tan rápido que me dio la sensación que conectarme a una red Wifi no es tan simple como yo pensaba.

Gestión de adaptadores de red

Mandriva 2010 - Gestión de adaptadores de red

Mandriva 2010 - Centro de control de red

Mandriva 2010 - Centro de control de red

Mandriva 2010 - Centro de compartición

Mandriva 2010 - Centro de compartición

Mandriva 2010 - Escritorio 3D

Mandriva 2010 - Escritorio 3D

Mandriva 2010 - Monitor del sistema

Mandriva 2010 - Monitor del sistema

Su defecto mas grande, creo que el aspecto. Como dije antes, muy azul. Iconos muy coloridos, poco serios, y el lanzador de aplicaciones se lleva la peor parte.

Entre sus características se encuentra:

  • Usa KDE 4
  • Asistentes para la configuración de red y compartición de archivos en la red.
  • Asistente para compartir la conexión a internet.
  • Excelente con las redes 3G. (incluye una base de datos con las configuraciones por defecto de las operadoras)
  • El software incluido para dispositivos Bluetooth  no soporta A2DP.
  • Cubo 3D de escritorio.
  • Flash Player pre-instalado
  • El lanzador de aplicaciones es espantoso
  • Soporte de audio USB
  • Es LiveCD
  • Mapa del hardware
  • OpenOffice pre-instalado
  • Incluye versión en español

Descargar Mandriva One 2010

openSUSE 11.2

Escritorio de openSUSE 11.2

openSUSE 11.2 - Escritorio de usando KDE4

Desarrollado por Novell, es muy conocido por su herramienta de configuración YAST y por ser uno de los mas completos en cuanto a variedad de paquetes se refiere.

Es un sistema operativo robusto usado en muchos casos en servidores. Esta versión cuenta con KDE4 y es capaz de iniciar en modo LiveCD.

Lamentablemente, en mis pruebas, resulto no ser el mas indicado en cuanto a su uso en un computador personal. En donde mas problemas tuvo fue en conectarse a internet usando un modem 3G. No incluye una base de datos con configuraciones por defecto por lo que la configuración de la operadora hay que hacerlo de manera manual (al menos con KDE). En mi caso, luego de configurarlo, conectarlo y obtener correctamente el IP y DNSs de mi operador, no pude tener salida a internet.
En cuanto al soporte para bluetooth, al igual que Mandriva, el software nativo de KDE tampoco soporta A2DP.

Escritorio 3D con openSUSE

openSUSE 11.2 - Escritorio 3D

Lanzador de aplicaciones de openSUSE con KDE4

openSUSE 11.2 - Lanzador de aplicaciones con KDE4

Mi equipo - openSUSE

openSUSE 11.2 - Mi equipo

Parámetros de red correctos pero aun sin salida a internet

openSUSE 11.2 - Parámetros de red correctos pero aun sin salida a internet

De openSUSE se puede destacar:

  • Puedes elegir entre usarlo con KDE, Gnome o en modo consola.
  • Es LiveCD
  • Cuenta con su conocido asistente de configuración YAST
  • Soporte para audio USB
  • El software incluido para dispositivos Bluetooth  no soporta A2DP.
  • Pésimo con los modem 3G
  • OpenOffice pre-instalado
  • Mapa del hardware
  • Cubo 3D de escritorio
  • Incluye versión en español

Descargar openSUSE 11.2

Ubuntu 9.10 Karmic Koala

Mi desktop con Ubuntu Karmic Koala

Ubuntu Karmic Koala - Mi desktop

Es el que mas conozco porque lo llevo usando desde hace algún un tiempo. Es conocido por ser simple e intuitivo, perfecto para usuarios que recién empiezan a usar tecnología libre. La versión 9.10 incluye el “Centro de Software de Ubuntu” que simplifica increíblemente el proceso de buscar e instalar nuevo software. Fue uno de los primeros sistemas operativos que vino en formato LiveCD.

El soporte para redes 3G es amigable. Con elegir el país y proveedor de internet móvil ya tienes configurada tu red 3G.
Si bien el aspecto y efectos gráficos son aceptables no es comparable con la tecnología Aero de Microsoft. Me parece incluso que KDE4 cuenta con un aspecto de trabajo mas llamativo.

Centro de software de Ubuntu Karmic Koala

Ubuntu Karmic Koala - Centro de software

  • No requiere de conocimientos técnicos para leer la documentación integrada (la comunidad de Ubuntu si cuenta con documentación técnica para usuarios mas avanzados)
  • Es LiveCD
  • Usa Gnome como escritorio gráfico
  • Soporte para audio USB
  • El manejador de audio funciona bien pero no es muy intuitivo
  • Preparado para redes 3G. Aunque tiene algunos bugs con algunos modem USB. (incluye una base de datos con las configuraciones por defecto de las operadoras por países).
  • El software incluido para dispositivos Bluetooth  no es bueno con dispositivos A2DP. Se recomiendo usar Blueman (instalable desde del Centro de Software)
  • OpenOffice pre-instalado
  • Incluye versión en español

Descargar Ubuntu 9.10 Karmic Koala

Linux Mint 8 Helena

Escritorio de Linux Mint 8 Helena

Linux Mint 8 Helena - Escritorio

Podría decirse que es un Ubuntu Karmic Koala Unattended. Es una distribución de Ubuntu con Flash Player pre-instalado, codecs propietarios pre-instalados, las mejores aplicaciones sin importar si cuentan con soporte de Canonical (la empresa detrás de Ubuntu) y lo mas importante, con temas gráficos especialmente diseñados para esta edición.

Esta distribución hereda las ventajas de Ubuntu pero pierde el soporte multi-idioma nativo (pero que luego se puede instalar desde internet).

También incluye un Centro de Control que funciona igual que en Ubuntu Karmic pero con un aspecto gráfico muy similar al administrador de paquetes Synaptic.

Muy similar al centro de control de Ubuntu salgo algunas opciones mas

Linux Mint 8 Helena - Muy similar al centro de control de Ubuntu salgo algunas opciones mas

Centro de Software de Linux Mint 8

Linux Mint 8 Helena - Centro de Software

Descargar Linux Mint 8 Helena

Gentoo Linux

Default KDE 4 screen of the Gentoo Linux 10.
Image via Wikipedia

No lo he probado por no tener una versión LiveCD y por ser al parecer una distribución pensada para usuarios mas experimentados. He conocido empresas de hosting que utilizan Gentoo como sistema operativo para sus servidores, asi que puedo suponer que el SO es tan robusto como se comenta.

La interfase gráfica, al menos por los screenshots que he visto en internet, no es uno de sus puntos fuertes aunque eso en realidad depende de el escritorio gráfico que se le instale. Se cuenta como principal ventaja el uso de “Portage”, su instalador de paquetes.

Descargar Gentoo Linux

Yo me decidí por Linux Mint 8 por que ya me he acostumbrado a usar Ubuntu, conozco sus puntos fuertes, sus puntos débiles y ya que con Ubuntu tengo todo lo que necesito se que no me faltara nada con Linux Mint. Empezaré a instalarlo luego de terminar este post ;)

Configurando un gateway de red con Ubuntu

Ya había explicado lo simple que era compartir nuestra conexión a internet con Windows, ahora explicare como hacerlo con Ubuntu.

Para lograrlo necesitamos dos cosas:

  • Instalar y configurar el servicio dhcp. Para entregarle la configuración a los demás equipos de la red.
  • Configurar las iptables del equipo con conexión a internet para que funcione como gateway.
  • Definir la configuración de red del servidor gateway.

El servicio dhcp

Para instalarlo abres el terminal y escribes:

sudo apt-get install dhcp3-server

Ahora, debes decirle al servidor dhcp en que dispositivo de red debe trabajar. Si no sabes cual elegir el comando ifconfig te dará un listado de todos los dispositivos de red instalados. Asegurate de identificar el que necesitas.Los que inician con eth# son las tarjetas de red por cable y los wlan# las tarjetas inalámbricas. Los ppp# suelen ser dispositivos modem.

Una vez que lo tengas identificado abre y edita el archivo /etc/default/dhcp3-server con el siguiente comando:

sudo gedit /etc/default/dhcp3-server

En este ejemplo estoy usando gedit como editor de textos. Puedes usar otro como nano o vi si no cuentas con un entorno grafico.

Cambia eth0 por el que necesites, por ejemplo:

INTERFACES="wlan0"

Luego, abres y editas el archivo /etc/dhcp3/dhcpd.conf de la misma manera que el fichero anterior. Reemplaza el contenido del archivo con el siguiente texto:

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;

#DNS's de tu proveedor de internet
option domain-name-servers 213.158.199.1, 213.158.199.5;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.150 192.168.0.200;
}

En este ejemplo se define una red de clase C (192.168.###.###) y se darán IPs del 192.168.0.150 al 192.168.0.200. En option domain-name-servers se definen los servidores DNS’s. Debes reemplazarlos con los que tu proveedor de internet te asigna. Pueden encontrarlos en el fichero /etc/resolv.conf.

Para probarlo, ejecuta el siguiente comando para detener el servicio (si ya estuviera ejecutándose) y volverlo a iniciar:

sudo /etc/init.d/dhcp3-server restart

Nota: Debes asegurarte que el dispositivo de red donde dhcp3-server va ha trabajar esta conectado a la red. De lo contrario el servicio podría no iniciar.

Configurar los iptables

Abre el fichero /etc/sysctl.conf y retira el comentario de la siguiente linea:

net.ipv4.ip_forward=1

Nota: Las lineas comentadas llevan el signo # para ser ignoradas por el sistema.

Luego ejecuta el siguiente comando para aplicar los cambios efectuados:

sudo sysctl -p

Ahora, el siguiente comando configurara las iptables para que enmascaren los paquetes recibidos desde la nat hasta el dispositivo ppp0. Reemplaza ppp0 por el dispositivo de red que configuraste con el servicio dhcp:

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

Si deseas que el gateway este disponible en cada inicio del sistema agrega al fichero /etc/rc.local el ultimo comando ignorando el “sudo” inicial para que quede de la siguiente manera:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
exit 0

Configurando manualmente nuestra conexión a la red local

Si cuentas con un entorno gráfico lo puedes hacer usando el administrador de redes que tiene Ubuntu. De lo contrario, debes configurar tu red desde la consola. Para ello abre el fichero /etc/network/interfaces.

El paso siguiente depende si esta ya configurado el dispositivo de red y como lo esta. Reemplaza los #### con el nombre del dispositivo conectado a la red local (el mismo al que el servicio dhcp esta sirviendo).

Si encuentras la linea iface #### inet dhcp elimínala.

Si encuentras la linea iface #### inet static suprimes desde esta linea hasta antes de empezar el siguiente iface... o hasta el final del archivo.

Una vez que ya no este definida una configuración para este dispositivo de red escribir lo siguiente:

iface #### inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.1

Guardar el archivo y corres el siguiente comando para aplicar la nueva configuración a los dispositivos de red:

sudo /etc/init.d/networking restart

Con esto ya tienes tu gateway y servidor dhcp configurado y funcionando.