En los ambientes corporativos se suele usar Microsoft Outlook como solución de cliente para correo electrónico. Como es costumbre Microsoft trata de inducir el uso de formatos propietarios y cerrados, el mundo de correos electrónicos no se salvó de esta incómoda situación; por tal razón en algunas condiciones se usa un formato TNEF (Transport Neutral Encapsulation Format) para enviar correos electrónicos. Este formato no es compatible para algunos clientes de correo, especialmente con aquéllos OpenSource.
El cliente de correo electrónico Thunderbird ofrece una alternativa para soportar este formato por medio de un Complemento (AddOn) llamado LookOut.
Para instalar este complemento puede hacerse yendo al menú Herramientas -> Complementos, y escribiendo el nombre del complemento "LookOut" en el cuadro de texto para búsqueda de Complementos, una vez encontrado se puede instalar siguiendo las correspondientes instrucciones. Será necesario reiniciar la aplicación después de la instalación.
sábado, 3 de diciembre de 2011
viernes, 7 de octubre de 2011
Windows XP Professional / instalando IIS
Para instalar Internet Information Server (IIS) es necesario tener a la mano el CD de instalación para Windows XP Professional, o una copia local del instalador.
Se debería instalar simplemente yendo al panel de control a la parte de Agregar o quitar programas, y se le da en el botón Agregar / quitar componentes de Windows, donde aparecerá una lista de programas instalables donde se puede sseleccionar IIS entre otros.
Al proceder con la isntalación te pide indicar la ruta del instalador de Windows XP para tomar los archivos e instalar, pero desafortunadamente tuve inconvenientes y me arrojaba el sigueinte error:
Con un CD de instalación para Windows XP Professional con el SP3 integrado debe ser suficiente, pero no se solucionaría hasta ejecutar la siguiente sentencia:
esentutl /p %windir%/security/database/secedit.sdb
Al parecer este archivo indicado en el comando anterior tenía algun tipo de problema, pero instaló de inmediato una vez reparado con el comando anterior.
Referencias
http://ilovett.com/blog/projects/dealing-with-staxmemdll
Se debería instalar simplemente yendo al panel de control a la parte de Agregar o quitar programas, y se le da en el botón Agregar / quitar componentes de Windows, donde aparecerá una lista de programas instalables donde se puede sseleccionar IIS entre otros.
Al proceder con la isntalación te pide indicar la ruta del instalador de Windows XP para tomar los archivos e instalar, pero desafortunadamente tuve inconvenientes y me arrojaba el sigueinte error:
Setup cannot copy the file staxmem.dll ...insert Windows XP Professional Service Pack 3 CD
Con un CD de instalación para Windows XP Professional con el SP3 integrado debe ser suficiente, pero no se solucionaría hasta ejecutar la siguiente sentencia:
esentutl /p %windir%/security/database/secedit.sdb
Al parecer este archivo indicado en el comando anterior tenía algun tipo de problema, pero instaló de inmediato una vez reparado con el comando anterior.
Referencias
http://ilovett.com/blog/projects/dealing-with-staxmemdll
miércoles, 5 de octubre de 2011
JBoss 7 AS / Apache Tomcat ARP
Es probable que la instalación de JBoss al iniciar arroje el siguiente mensaje:
La recomendación indicada en el mensaje es instalar Tomcat Nativo; para ello creé una entrada: http://x78527.blogspot.com/2011/10/instalando-tomcat-nativo-en-osx-snow.htm
Con esta instalación debería desaparecer el error al próximo reinicio del servidor de aplicaciones JBoss.
INFO [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-3) La biblioteca nativa de Apache Tomcat basada en ARP que permite un rendimiento óptimo en entornos de desarrollo no ha sido hallada en java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
La recomendación indicada en el mensaje es instalar Tomcat Nativo; para ello creé una entrada: http://x78527.blogspot.com/2011/10/instalando-tomcat-nativo-en-osx-snow.htm
Con esta instalación debería desaparecer el error al próximo reinicio del servidor de aplicaciones JBoss.
Instalando Tomcat nativo en OSX Snow Leopard
Prerequisitos
Referencias
- XCode 3.2.1
tar zxvf tomcat-native-1.1.22-src.tar.gz
cd tomcat-native-1.1.22-src/jni/native
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/
make clean
make
sudo cp .libs/libtcnative-1.0.1.22.dylib /usr/lib/java
sudo ln -s /usr/lib/java/libtcnative-1.0.1.22.dylib /usr/lib/java/libtcnative-1.dylib
|
- http://blog.hgomez.net/2009/12/22/how-to-build-tomcat-native-on-snow-leopard/
jueves, 29 de septiembre de 2011
OSX modos para suspender (sleep)
OSX ofrece tres métodos para suspender, con los respectivos comandos asociados se muestran a continuación:
sudo pmset -a hibernatemode 0″ = suspend to RAM only (por defecto para escritorios)
sudo pmset -a hibernatemode 1″ = suspend to disk only
sudo pmset -a hibernatemode 3″ = suspend to disk + RAM (por defecto para portátiles)
En el orden anterior tienen ventajas y desventajas:
Modo 0: es el más rápido, sin embargo el menos seguro porque se corre el riesgo de que se agote la batería y se pierde la sesión.
Modo 1: no usa la memoria y simplemente maneja todo en disco, presenta el inconveniente de lentitud para volver del modo suspendido. Este método es el menos recomendado, porque es lento tanto para suspender como para volver del modo suspender. Solo debería usarse en circunstancias muy específicas.
Modo 3: con respecto al modo anterior, es igual de seguro pero tiene la ventaja de que es más rápido a la hora de volver del modo suspendido.
Referencias
http://etherealmind.com/osx-hibernate-mode/
sudo pmset -a hibernatemode 0″ = suspend to RAM only (por defecto para escritorios)
sudo pmset -a hibernatemode 1″ = suspend to disk only
sudo pmset -a hibernatemode 3″ = suspend to disk + RAM (por defecto para portátiles)
En el orden anterior tienen ventajas y desventajas:
Modo 0: es el más rápido, sin embargo el menos seguro porque se corre el riesgo de que se agote la batería y se pierde la sesión.
Modo 1: no usa la memoria y simplemente maneja todo en disco, presenta el inconveniente de lentitud para volver del modo suspendido. Este método es el menos recomendado, porque es lento tanto para suspender como para volver del modo suspender. Solo debería usarse en circunstancias muy específicas.
Modo 3: con respecto al modo anterior, es igual de seguro pero tiene la ventaja de que es más rápido a la hora de volver del modo suspendido.
Referencias
http://etherealmind.com/osx-hibernate-mode/
martes, 27 de septiembre de 2011
OSX: estableciendo variables de entorno (Snow Leopard)
Las recomendaciones aquí indicadas se ensayaron usando Snow Leopard, sin embargo las cosas en OSX Lion deben funcionar muy seguramente de forma similar (o igual).
Aunque existen diferentes formas de establecer variables de entorno y muchas funcionan en diferentes niveles, la forma que se va a explicar es global y por lo tanto funciona para todo el entorno, es decir: entorno gráfico, terminal, otros shells, etc.
La forma de establecer variables globales recomendada para OSX es usando el comando launchctl, que recibe como parámetro una operación, el nombre de la variable y el valor de la variable, ejemplo:
El comando anterior se le indica la operación "setenv" (establecer variable de entorno), el nombre de la variable (GLASSFISH_HOME) y el valor (/opt/glassfish3, una ruta donde se encuentra la aplicación Glassfish OSE 3.1.1). La ejecución de este comando tiene efecto inmediato y solamente es necesario reiniciar las aplicaciones y/o shells (Terminales por ejemplo) donde se quiera tener acceso a la variable. Si se quiere hacer permanente la variable, debe agregarse una línea al archivo /etc/launchd.conf (Si no existe debe crearse). Continuando con el ejemplo anterior, la línea de configuración quedaría:
Para que los cambios tengan efecto, es necesario reiniciar el sistema; si no deseas reiniciar puedes ejecutar launchctl y dejar configurada la variable para el próximo reinicio.
La variable de enotorno PATH es un caso especial y debe establecerse de otra manera, la forma recomendada es crear un archivo en /etc/paths.d ó bien, usar /etc/paths con las asignaciones; tomando el ejemplo anterior, si quisieramos configurar los binarios de la aplicación en el PATH asumiendo que estén ubicados en $GLASSFISH_HOME/bin (como se puede notar se reutiliza la ruta establecida en la variable de entorno), crearíamos un archivo /etc/paths.d/glassfish3, este archivo tendría el siguiente contenido:
La configuración anterior tiene efecto inmediato y deben reiniciarse las aplicaciones donde se quiera tener acceso.
Otra forma de establecer la variable PATH es usando el archivo /etc/paths, pero no la recomendaría por razones de orden y mejor administración, sin embargo funciona perfectamente.
En OSX existen otras formas de establecer variables de entorno, pero presentan inconvenientes de una u otra forma, por ejemplo algunas solo funcionan para el entorno gráfico, otras solo funcionan para la línea de comandos; algunas funcionan bien pero no son filosóficamente apropiadas con respecto a OSX, por ejemplo /etc/profile, archivo que incluso viene de solo lectura.
Finalmente hay un caso especial cuando se requiere sobreescribir, o dar preferencia a algún directorio en el PATH; ejemplo: digamos que se tiene instalado Maven en /opt/apache-maven, sin embargo también existe una instalación previa en /usr/bin. Si configuramos en /etc/paths.d se ejecutará lo que esté en /usr/bin, si queremos que se ejecute los comandos de /opt/apache-maven/bin será necesario agregar esta ruta en /etc/paths encima de la ruta /usr/bin o cualquier otra donde se quiera sobreescribir un comando.
Aunque existen diferentes formas de establecer variables de entorno y muchas funcionan en diferentes niveles, la forma que se va a explicar es global y por lo tanto funciona para todo el entorno, es decir: entorno gráfico, terminal, otros shells, etc.
La forma de establecer variables globales recomendada para OSX es usando el comando launchctl, que recibe como parámetro una operación, el nombre de la variable y el valor de la variable, ejemplo:
launchctl setenv GLASSFISH_HOME /opt/glassfish3
El comando anterior se le indica la operación "setenv" (establecer variable de entorno), el nombre de la variable (GLASSFISH_HOME) y el valor (/opt/glassfish3, una ruta donde se encuentra la aplicación Glassfish OSE 3.1.1). La ejecución de este comando tiene efecto inmediato y solamente es necesario reiniciar las aplicaciones y/o shells (Terminales por ejemplo) donde se quiera tener acceso a la variable. Si se quiere hacer permanente la variable, debe agregarse una línea al archivo /etc/launchd.conf (Si no existe debe crearse). Continuando con el ejemplo anterior, la línea de configuración quedaría:
setenv GLASSFISH_HOME /opt/glassfish3
Para que los cambios tengan efecto, es necesario reiniciar el sistema; si no deseas reiniciar puedes ejecutar launchctl y dejar configurada la variable para el próximo reinicio.
La variable de enotorno PATH es un caso especial y debe establecerse de otra manera, la forma recomendada es crear un archivo en /etc/paths.d ó bien, usar /etc/paths con las asignaciones; tomando el ejemplo anterior, si quisieramos configurar los binarios de la aplicación en el PATH asumiendo que estén ubicados en $GLASSFISH_HOME/bin (como se puede notar se reutiliza la ruta establecida en la variable de entorno), crearíamos un archivo /etc/paths.d/glassfish3, este archivo tendría el siguiente contenido:
$GLASSFISH_HOME/bin
La configuración anterior tiene efecto inmediato y deben reiniciarse las aplicaciones donde se quiera tener acceso.
Otra forma de establecer la variable PATH es usando el archivo /etc/paths, pero no la recomendaría por razones de orden y mejor administración, sin embargo funciona perfectamente.
En OSX existen otras formas de establecer variables de entorno, pero presentan inconvenientes de una u otra forma, por ejemplo algunas solo funcionan para el entorno gráfico, otras solo funcionan para la línea de comandos; algunas funcionan bien pero no son filosóficamente apropiadas con respecto a OSX, por ejemplo /etc/profile, archivo que incluso viene de solo lectura.
Finalmente hay un caso especial cuando se requiere sobreescribir, o dar preferencia a algún directorio en el PATH; ejemplo: digamos que se tiene instalado Maven en /opt/apache-maven, sin embargo también existe una instalación previa en /usr/bin. Si configuramos en /etc/paths.d se ejecutará lo que esté en /usr/bin, si queremos que se ejecute los comandos de /opt/apache-maven/bin será necesario agregar esta ruta en /etc/paths encima de la ruta /usr/bin o cualquier otra donde se quiera sobreescribir un comando.
miércoles, 31 de agosto de 2011
Instalando Oracle 10g XE en Debian 6 amd64
Para el presente artículo se empleó la base de datos Oracle XE 10g Release 2 (10.2.0.1) y el sistema operativo Debian 6 ""Squeeze" (6.0.2.1) para arquitectura amd64.
El soporte de Oracle para sistemas operativos Linux está mucho más avanzado que en años anteriores y la instalación en general es realmente fácil.
1. INSTALADOR. Es necesario desde luego disponer del instalador de la base de datos, se descargó desde la siguiente dirección: http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html. Se encuentran disponibles versiones de instalador RPM y DEB, para Debian usaremos DEB. Por otro lado, surge el inconveniente que solamente estará disponible para arquitecturas x86; sin embargo esto no es impedimento para instalarlo en una versión Debian para arquitectura amd64.
2. DEPENDIENCIAS. Es necesario algunas dependencias para que la base de datos instale.
ia32-libs para soporte de arquitectura i386.
libaio1 soporte para características AIO (asynchronous I/O system calls) en el núcleo.
La siguiente secuencia instala tales dependencias:
3. INSTALACIÓN DE LA BD. Una vez instaladas las dependencias se puede ejecutar el instalador descargado previamente.
El parámetro "--force-architecture" hace posible instalar el paquete en una arquitectura que no corresponde al sistema instalado.
4. CONFIGURACIÓN DE LA BD. Después de instalar es necesario una configuración básica inicial mínima que se puede realizar ejecutando la siguiente secuencia:
/etc/init.d/oracle-xe configure
A continuación preguntarán puertos por donde se conectará la base de datos (1521 por omisión), por donde estarán los servicios de administración (8080 por omisión), un usuario y contraseña para acceder al sistema.
Una vez configurada la base de datos se puede ingresar a la consola de administración en el puerto que se indicó, ejemplo: http://localhost:8080/apex.
5. INSTALACIÓN DEL CLIENTE. Más conocido como "Instant Client", nos permitirá usar clientes como el SQL*Plus.
Es necesario obtener el cliente, para este artículo se descargó la edición Basic Lite correspondiente al archivo basiclite-10.2.0.5.0-linux-x64.zip en
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html.
Una vez descargado se puede descomprimir y ejecutar la siguiente secuencia:
La secuencia anterior crea un directorio "network/admin" dentro del directorio donde se descomprimió el Instant Client (instantclient_10_2 ) y crea un enlace con el archivo de configuración de conexión "tnsnames.ora".
Para el funcionamiento del cliente es necesario configurar algunas variables de entorno. Estas variables pueden ubicarse en el archivo .bachrc, o algún otro donde garantice la disponibilidad de las variables.
Las siguiente instrucciones funcionario para la instalación del presente artículo:
Terminada la instalación y configuración debería ser posible conectarse con SQL*Plus con la siguiente secuencia:
El usuario y contraseña se indicaron anteriormente durante el proceso de configuración de la base de datos.
Referencias
El soporte de Oracle para sistemas operativos Linux está mucho más avanzado que en años anteriores y la instalación en general es realmente fácil.
1. INSTALADOR. Es necesario desde luego disponer del instalador de la base de datos, se descargó desde la siguiente dirección: http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html. Se encuentran disponibles versiones de instalador RPM y DEB, para Debian usaremos DEB. Por otro lado, surge el inconveniente que solamente estará disponible para arquitecturas x86; sin embargo esto no es impedimento para instalarlo en una versión Debian para arquitectura amd64.
2. DEPENDIENCIAS. Es necesario algunas dependencias para que la base de datos instale.
ia32-libs para soporte de arquitectura i386.
libaio1 soporte para características AIO (asynchronous I/O system calls) en el núcleo.
La siguiente secuencia instala tales dependencias:
aptitude install ia32-libs
apt-get install libaio
3. INSTALACIÓN DE LA BD. Una vez instaladas las dependencias se puede ejecutar el instalador descargado previamente.
dpkg --force-architecture -i oracle-xe_10.2.0.1-1.0_i386.deb
El parámetro "--force-architecture" hace posible instalar el paquete en una arquitectura que no corresponde al sistema instalado.
4. CONFIGURACIÓN DE LA BD. Después de instalar es necesario una configuración básica inicial mínima que se puede realizar ejecutando la siguiente secuencia:
/etc/init.d/oracle-xe configure
A continuación preguntarán puertos por donde se conectará la base de datos (1521 por omisión), por donde estarán los servicios de administración (8080 por omisión), un usuario y contraseña para acceder al sistema.
Una vez configurada la base de datos se puede ingresar a la consola de administración en el puerto que se indicó, ejemplo: http://localhost:8080/apex.
5. INSTALACIÓN DEL CLIENTE. Más conocido como "Instant Client", nos permitirá usar clientes como el SQL*Plus.
Es necesario obtener el cliente, para este artículo se descargó la edición Basic Lite correspondiente al archivo basiclite-10.2.0.5.0-linux-x64.zip en
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html.
Una vez descargado se puede descomprimir y ejecutar la siguiente secuencia:
cd instantclient_10_2
mkdir -p network/admin
cd network/admin
ln -sf /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/tnsnames.ora .
La secuencia anterior crea un directorio "network/admin" dentro del directorio donde se descomprimió el Instant Client (instantclient_10_2 ) y crea un enlace con el archivo de configuración de conexión "tnsnames.ora".
Para el funcionamiento del cliente es necesario configurar algunas variables de entorno. Estas variables pueden ubicarse en el archivo .bachrc, o algún otro donde garantice la disponibilidad de las variables.
Las siguiente instrucciones funcionario para la instalación del presente artículo:
export ORACLE_SID=XE
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export XE=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib:/usr/local/lib:~/instantclient_10_2:$XE/lib
export PATH=~/bin:~/instantclient_10_2:$XE/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/bin/X11:/usr/games
export ORACLE_USERID='usuario/password'
export ORACLE_DSN='dbi:Oracle:XE'
Terminada la instalación y configuración debería ser posible conectarse con SQL*Plus con la siguiente secuencia:
sqlplus usuario/contraseña
El usuario y contraseña se indicaron anteriormente durante el proceso de configuración de la base de datos.
Referencias
- Oracle XE Overview. http://www.oracle.com/technetwork/database/express-edition/overview/index.html
- Debian Stable Release Ofical. http://www.debian.org/releases/stable/
- Caelum's Blog : Installing Oracle XE on Debian AMD64. http://blog.cachemiss.com/articles/Installing%20Oracle%20XE%20on%20Debian%20AMD64.pod
jueves, 7 de julio de 2011
Bondades del SSH: acceso a Internet, transferencia de información, túneles,...
Si nos encontramos en alguna red privada, es probable que la configuración de red (entre proxy y firewalls) tenga restringido los servicios de acceso a redes externas, particularmente se va a tratar el servicio SSH en este artículo. El servicio SSH por defecto sale por el puerto 22, uno de los puertos que generalmente se encuentran bloqueados, precisamente por las libertades de acceso y funcionalidades que un servicio SSH ofrece, algunas de estas libertades resultan ser:
Como primera medida es posible cambiar el puerto de salida desde nuestro servidor, raramente encontraremos el puerto 22 abierto en una red restringida, pero es probable que algunos puertos de común uso no presente este tipo de restricciones, uno que muy probablemente se encontrará libre para acceso es el puerto 443, que generalmente se usa para conexiones HTTP seguras, más conocidas como HTTPS. Restringir este puerto implicaría limitar el acceso a sitios Web que usen esta configuración de acceso, por esta razón es un buen candidato para el túnel de acceso.
Existen diferentes formas de lograr este cambio de puerto, una de ellas es cambiando la configuración del mismo servicio SSH en el servidor para que salga por un puerto determinado, en Linux distribución Debian específicamente (por lo tanto debería funcionar con distribuciones de uso común como Ubuntu), esto puede lograrse configurando el archivo /etc/ssh/sshd_config. Para revisar el valor actualmente configurado puede usarse
(Azul el comando, negro la salida)
Esta configuración puede modificarse y reiniciar el servicio SSH
Y con esa configuración es generalmente suficiente para tener un servicio SSH corriendo por ese puerto. Otra alternativa, mi preferida en comparación a esta, es la configuración por hardware que puede lograrse directamente en el router que realiza la conexión a internet (uno que generalmente proporciona tu ISP "Internet Service Provider"). Naturalmente es necesario que tengas acceso a dicho dispositivo el cual generalmente viene con acceso protegido con usuario y contraseña. Por medio de un router, es posible direccionar las peticiones con puertos y protocolos específicos, para el caso del presente artículo necesitaríamos redireccionar las conexiones recibidas por el puerto 443 a una máquina local con una IP específica, que tiene a su vez el servicio SSH saliendo por el puerto 22. Cada dispositivo dependiendo de su fabricante, marca y/o modelo, cuenta con su propia manera de configurarlo, en mi caso personal dispongo de un clásico D-Link DI-524, donde puede configurarlo por medio de una característica llamada Virtual Server que se puede acceder desde la pestaña Advanced, botón Virtual Server.
La configuración esencial consiste en darle una IP de la red local donde se encuentra el servidor, en la configuración de ejemplo tengo la 192.168.0.120; además debe indicarse un puerto público y uno privado, el privado será el puerto donde se encuentra publicado el servicio dentro de la red local, para el caso será el puerto 22 donde está el servicio SSH; el puerto público será el de acceso exterior, para el caso será el 443. En resúmen, todo lo que entre por el puerto 443 será redireccionado a la máquina con IP 192.168.0.120 por el puerto 22.
Con esta segunda alternativa de configuración el servicio SSH sigue disponible en el puerto 22, lo que nos da ventajas y comodidades, por ejemplo podemos ingresar a una sesión SSH sin indicar explícitamente puertos desde máquinas configuradas en la misma red local.
Para el uso del servicio SSH en redes externas, la red restringida para el caso, será necesario ingresar por el puerto 443; en el cliente SSH esto se indica por medio de la opción "-p", para probar el acceso simplemente podemos escribir
Si logramos este acceso ya tenemos transferencia de información tanto envío y recepción, entre la máquina remota y la máquina local dentro de la red "restringida". Pero en algunos casos, y muy seguramente en una red restringida, no será tan sencillo, porque hay seguramente un proxy que requiere configurarse para tener acceso; pero hay solución al respecto.
Un aliado de SSH llamado Corkscrew, permite realizar conexiones SSH sobre conexiones HTTP y HTTPS, que son regularmente permitidas por servidores proxy. De otra manera sería necesario abrir un socket, lo cual seguramente estaría restringido por el proxy y no sería posible conectarse aún con el servicio activo en un puerto permitido, como el 443 mencionado anteriormente.
Es necesario por lo tanto tener instalado el Corkscrew, en Debian y familiares como Ubuntu, puede instalarse ejecutando como super usuario:
La configuración puede hacerse de diferentes formas, pero una recomendada es creando dos archivos de configuración que tendrán los siguientes propósitos:
Con esa simple línea indicamos el usuario de acceso al proxy, y la contraseña asociada. El segundo archivo con el comando para Corkscrew también tiene una sola línea, lo llamé ConexionProxy y lo ubiqué en ${HOME}/.ssh, pero al igual que el anterior, pueden ubicarse donde se deseé.
Puede notarse la siguiente información relevante:
La información relevante del comando anterior sería:
La instrucción anterior descargaría el archivo /home/usuario/ejemplo.zip, ubicado en la máquina remota al directorio actual en el sistema local. Nótese que el puerto está indicado con "P" mayúscula, a diferencia de la "p" minúscula usada en el comando "ssh".
Finalmente, como si fuera poco ya tener transferencia de información y acceso a un equipo externo donde podremos realizar todo lo que nuestros conocimientos y alcance en materia de línea de comando nos permita; también podremos crear un segundo proxy propio, que nos permita salir a Internet u otra red a la que el equipo externo tenga acceso. Realizando esta configuración no tendremos las restricciones de la red privada, sino que estaremos limitados a lo que pueda acceder la máquina remota, que si es nuestro equipo casero muy seguramente serán ínfimas las restricciones. La instrucción para levantar este servicio de proxy sería algo como lo siguiente:
Este comando crea un proxy que estará configurado y disponible en la dirección localhost en el puerto 9999. Ahora podemos dirigirnos a las opciones de nuestro navegador preferido y configurar el acceso usando este proxy virtual, o la configuración global del sistema operativo.
La imágen anterior muestra la configuración en un Firefox para OSX.
En la siguiente ruta http://www.filesavr.com/EVLLBBHI382E6WH, subí un paquete con los archivos de configuración indicados en el ejemplo que fácilmente se pueden modificar para crear un túnel en cualquier red restringida.
Referencias y lecturas recomendadas asociadas al tema
- Tengo acceso total a una máquina externa, la cual puedo controlar a mi antojo (asumiendo usuarios con permisos suficientes desde luego).
- A esta máquina externa le puedo enviar y recibir información de ella, una de las principales preocupaciones de las redes privadas, en especial las corporativas.
- Como si fuera poco lo anteriormente mencionado, puedo incluso crear un proxy que me permita salir a otra red por medio de esta máquina. Esta red puede ser cualquiera a la que la máquina externa tenga acceso, generalmente se aprovecha para acceder a la red de redes, Internet.
Como primera medida es posible cambiar el puerto de salida desde nuestro servidor, raramente encontraremos el puerto 22 abierto en una red restringida, pero es probable que algunos puertos de común uso no presente este tipo de restricciones, uno que muy probablemente se encontrará libre para acceso es el puerto 443, que generalmente se usa para conexiones HTTP seguras, más conocidas como HTTPS. Restringir este puerto implicaría limitar el acceso a sitios Web que usen esta configuración de acceso, por esta razón es un buen candidato para el túnel de acceso.
Existen diferentes formas de lograr este cambio de puerto, una de ellas es cambiando la configuración del mismo servicio SSH en el servidor para que salga por un puerto determinado, en Linux distribución Debian específicamente (por lo tanto debería funcionar con distribuciones de uso común como Ubuntu), esto puede lograrse configurando el archivo /etc/ssh/sshd_config. Para revisar el valor actualmente configurado puede usarse
cat /etc/ssh/sshd_config | grep Port
Port 22
(Azul el comando, negro la salida)
Esta configuración puede modificarse y reiniciar el servicio SSH
/etc/init.d/ssh restart
Restarting OpenBSD Secure Shell server: sshd.Y con esa configuración es generalmente suficiente para tener un servicio SSH corriendo por ese puerto. Otra alternativa, mi preferida en comparación a esta, es la configuración por hardware que puede lograrse directamente en el router que realiza la conexión a internet (uno que generalmente proporciona tu ISP "Internet Service Provider"). Naturalmente es necesario que tengas acceso a dicho dispositivo el cual generalmente viene con acceso protegido con usuario y contraseña. Por medio de un router, es posible direccionar las peticiones con puertos y protocolos específicos, para el caso del presente artículo necesitaríamos redireccionar las conexiones recibidas por el puerto 443 a una máquina local con una IP específica, que tiene a su vez el servicio SSH saliendo por el puerto 22. Cada dispositivo dependiendo de su fabricante, marca y/o modelo, cuenta con su propia manera de configurarlo, en mi caso personal dispongo de un clásico D-Link DI-524, donde puede configurarlo por medio de una característica llamada Virtual Server que se puede acceder desde la pestaña Advanced, botón Virtual Server.
La configuración esencial consiste en darle una IP de la red local donde se encuentra el servidor, en la configuración de ejemplo tengo la 192.168.0.120; además debe indicarse un puerto público y uno privado, el privado será el puerto donde se encuentra publicado el servicio dentro de la red local, para el caso será el puerto 22 donde está el servicio SSH; el puerto público será el de acceso exterior, para el caso será el 443. En resúmen, todo lo que entre por el puerto 443 será redireccionado a la máquina con IP 192.168.0.120 por el puerto 22.
Con esta segunda alternativa de configuración el servicio SSH sigue disponible en el puerto 22, lo que nos da ventajas y comodidades, por ejemplo podemos ingresar a una sesión SSH sin indicar explícitamente puertos desde máquinas configuradas en la misma red local.
Para el uso del servicio SSH en redes externas, la red restringida para el caso, será necesario ingresar por el puerto 443; en el cliente SSH esto se indica por medio de la opción "-p", para probar el acceso simplemente podemos escribir
ssh ip-remota@usuario -p 443
Si logramos este acceso ya tenemos transferencia de información tanto envío y recepción, entre la máquina remota y la máquina local dentro de la red "restringida". Pero en algunos casos, y muy seguramente en una red restringida, no será tan sencillo, porque hay seguramente un proxy que requiere configurarse para tener acceso; pero hay solución al respecto.
Un aliado de SSH llamado Corkscrew, permite realizar conexiones SSH sobre conexiones HTTP y HTTPS, que son regularmente permitidas por servidores proxy. De otra manera sería necesario abrir un socket, lo cual seguramente estaría restringido por el proxy y no sería posible conectarse aún con el servicio activo en un puerto permitido, como el 443 mencionado anteriormente.
Es necesario por lo tanto tener instalado el Corkscrew, en Debian y familiares como Ubuntu, puede instalarse ejecutando como super usuario:
apt-get install corkscrew
La configuración puede hacerse de diferentes formas, pero una recomendada es creando dos archivos de configuración que tendrán los siguientes propósitos:
- Un archivo de autenticación con las credenciales necesarias para acceder al proxy
- Configuración proxy, donde se indicará un comando de proxy que ejecutará el Corkscrew con sus parámetros asociados.
usuario:password
Con esa simple línea indicamos el usuario de acceso al proxy, y la contraseña asociada. El segundo archivo con el comando para Corkscrew también tiene una sola línea, lo llamé ConexionProxy y lo ubiqué en ${HOME}/.ssh, pero al igual que el anterior, pueden ubicarse donde se deseé.
ProxyCommand /usr/bin/corkscrew proxy 8080 %h %p $HOME/.ssh/Credenciales
Puede notarse la siguiente información relevante:
- Puerto donde está configurado el proxy (8080 en el ejemplo).
- Ruta del archivo con las credenciales de acceso al proxy
ssh -p 443 -F ${HOME}.ssh/ConexionProxy usuario@ip-remota
La información relevante del comando anterior sería:
- Puerto por donde saldrá la conexión SSH, 443 en el ejemplo.
- Archivo con la configuración del comando para Corkscrew.
- Usuario y dirección IP de la máquina remota donde se conectará al servicio SSH.
scp -P 443 -F ${HOME}.ssh/ConexionProxy
usuario@ip-remota:/home/usuario/ejemplo.zip .La instrucción anterior descargaría el archivo /home/usuario/ejemplo.zip, ubicado en la máquina remota al directorio actual en el sistema local. Nótese que el puerto está indicado con "P" mayúscula, a diferencia de la "p" minúscula usada en el comando "ssh".
Finalmente, como si fuera poco ya tener transferencia de información y acceso a un equipo externo donde podremos realizar todo lo que nuestros conocimientos y alcance en materia de línea de comando nos permita; también podremos crear un segundo proxy propio, que nos permita salir a Internet u otra red a la que el equipo externo tenga acceso. Realizando esta configuración no tendremos las restricciones de la red privada, sino que estaremos limitados a lo que pueda acceder la máquina remota, que si es nuestro equipo casero muy seguramente serán ínfimas las restricciones. La instrucción para levantar este servicio de proxy sería algo como lo siguiente:
ssh -p 443 -F ${HOME}.ssh/ConexionProxy -N -D localhost:9999 -l usuario ip-remota
Este comando crea un proxy que estará configurado y disponible en la dirección localhost en el puerto 9999. Ahora podemos dirigirnos a las opciones de nuestro navegador preferido y configurar el acceso usando este proxy virtual, o la configuración global del sistema operativo.
La imágen anterior muestra la configuración en un Firefox para OSX.
En la siguiente ruta http://www.filesavr.com/EVLLBBHI382E6WH, subí un paquete con los archivos de configuración indicados en el ejemplo que fácilmente se pueden modificar para crear un túnel en cualquier red restringida.
Referencias y lecturas recomendadas asociadas al tema
Richfaces: verificación de errores de validación en el cliente
En algunas circunstancias es útil verificar en el cliente (generalmente un navegador) si ocurrieron errores de validación mientras se enviaba información al servidor. Un caso típico es un cuadro de diálogo modalPanel, donde probablemente se tiene un commandButton para ejecutar una acción que requiere validaciones en la información de un form; este tipo de validaciones generalmente son de tipo campos requeridos (required), formatos válidos para el tipo de dato y otros. Se desea que el cuadro de diálogo no se cierre hasta que la operación sea exitosa o el usuario cancele el cuadro de diálogo
Para llevar a cabo esta verificación, se puede revisar los mensajes de error del contexto faces y dependiendo de los resultados obtenidos se pueden dar los siguientes casos:
¿Cómo hacer esta verificación en el cliente? JavaScript es el mecanísmo más común, usando la API de Richfaces la implementación quedaría de la siguiente forma:
Con lo anterior logramos que el cuadro de diálogo solo se cierre en caso de no presentar errores de validación, que es un comportamiento comunmente deseado.
Para llevar a cabo esta verificación, se puede revisar los mensajes de error del contexto faces y dependiendo de los resultados obtenidos se pueden dar los siguientes casos:
- Si no hay mensajes de error en el contexto faces, se asume la información se ha enviado y la operación asociada se ha ejecutado satisfactoriamente.
- En caso contrario, se asume un error de validación, o de alguna regla de negocio que no permite ejecutar la operación requerida.
FacesContext fc = FacesContext.getCurrentInstance();
boolean tieneMensajesError = fc.getMessages(null).hasNext();
if (tieneMensajesError) {
// Realizar alguna acción si hay mensajes de error
} else {
// Realizar alguna acción si no hay mensajes de error
}
¿Cómo hacer esta verificación en el cliente? JavaScript es el mecanísmo más común, usando la API de Richfaces la implementación quedaría de la siguiente forma:
<rich:modalpanel id="ejericioDlg">
<a4j:commandButton id="btnGuardar" action="#{algunBean.guardar}" value="Guardar" oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('ejercicioDlg')}.hide();"/>
<a4j:commandButton id="btnCancelar" value="Cancelar" immediate="true">
<rich:componentControl for="ejercicioDlg" operation="hide" event="oncomplete" />
</a4j:commandButton>
</rich:modalpanel>
Con lo anterior logramos que el cuadro de diálogo solo se cierre en caso de no presentar errores de validación, que es un comportamiento comunmente deseado.
miércoles, 20 de abril de 2011
Reproducción de videos en la Mac: Quicktime/Perian
En la instalación por defecto, Quicktime tiene algunas limitaciones dentro de las que destaco:
A pesar de introducir soporte a muchos formatos reconocidos, faltarán algunos formatos que Quicktime no reproducirá a pesar de instalarle la Navaja suiza, por lo tanto es recomendable tener un reproductor guerrero a la mano, personalmente recomiendo VLC media player.
Referencias
- Soporte para archivos de subtítulos con formato SRT
- Soporte para formatos de video DivX
A pesar de introducir soporte a muchos formatos reconocidos, faltarán algunos formatos que Quicktime no reproducirá a pesar de instalarle la Navaja suiza, por lo tanto es recomendable tener un reproductor guerrero a la mano, personalmente recomiendo VLC media player.
Referencias
- Página oficial Perian: http://perian.org/
- Descargas Apple, Perian: http://www.apple.com/downloads/macosx/video/perian.html.
- Página oficial VLC media player: http://www.videolan.org/vlc/
- Página Apple, Quicktime: http://www.apple.com/es/quicktime/
domingo, 27 de marzo de 2011
Breaking Bad, tercera temporada ¡la mejor escena! [SPOILER]
La siguiente escena del video tiene lugar en la serie Breaking Bad temporada 3, episodio 7 "One Minute"
Hank recibe una llamada telefónica donde le dan una alerta de que en "un minuto" (como el mismo título del capítulo sugiere) será asesinado; Hank comienza a sentir angustia, duda de la veracidad de la información recibida y prefiere inicalmente pensar que es una broma de mal gusto, de todos modos algo le dice que es cierto así que intenta prepararse para la situación pero cae en la cuenta de que no tiene un arma a la mano, tendrá que defenderse desarmado de dos asesinos profesionales muy conocidos en capítulos anteriores de la serie donde han merecido una fama de ser efectivos y terribles.
Aunque no deja de ser un acto heróico defenderse de estos dos homicidas, y de paso asesinarlos, Hank no lo logrará sin antes pasar por serios aprietos y ser lástimado gravemente, llegando a experimentar incluso cercanías a la línea de la muerte.
Hank recibe una llamada telefónica donde le dan una alerta de que en "un minuto" (como el mismo título del capítulo sugiere) será asesinado; Hank comienza a sentir angustia, duda de la veracidad de la información recibida y prefiere inicalmente pensar que es una broma de mal gusto, de todos modos algo le dice que es cierto así que intenta prepararse para la situación pero cae en la cuenta de que no tiene un arma a la mano, tendrá que defenderse desarmado de dos asesinos profesionales muy conocidos en capítulos anteriores de la serie donde han merecido una fama de ser efectivos y terribles.
Aunque no deja de ser un acto heróico defenderse de estos dos homicidas, y de paso asesinarlos, Hank no lo logrará sin antes pasar por serios aprietos y ser lástimado gravemente, llegando a experimentar incluso cercanías a la línea de la muerte.
Suscribirse a:
Entradas (Atom)