Blog

VirtualHost en tomcat

Supongo que alguna vez os habrá pasado. Queremos darle un dominio web a una aplicación, para que sea acceda a ella directamente sin tener que poner nada detrás, como por ejemplo que app.uva.es vaya a servidor.uva.es/app que es la ruta donde está desplegada la aplicación.

Pues es muy sencillo, en la configuración del tomcat, en server.xml definimos un nuevo host con el contextpath apuntando a la ruta donde está la aplicación, y si queremso que tenga un alias también s elo ponemos. Tenéis un ejemplo a continuación:

<Host name="app.uva.es" appBase="">
<Context path="/" docBase="/servicio/webapps/app" />
<Alias>app2.uva.es</Alias>
</Host>

Y con esto de manera sencilla lo tenemos resuelto.

Atributos extendidos en Mac OS: com.apple.quarantine

Hoy trabajando con WordPress-MU al copiar algunos archivos me apareció una cosa curiosa en la cabecera de la página en el Safari, algo como «Mac OS X ? 2?°??â??ATTR??“5?â˜&?˜&?com.apple.quarantine0000;4b8e31e2;Safari;|com.apple.Safar» y te quedas un poco perplejo… así que me fui raudo y veoz a la linea de comandos del terminal (uno es de la vieja escuela y le encanta en cuanto puede irse a los comandos). Con un ls -l no vi nada, pero con un ls -la encontré algo que no había visto, una «@» así que tuve que investigar.

-rw-r--r--@ 1 davidrod staff 1665458 13 ene 2009 navidad.jpg

No tardé mucho en encontrar el tema en San Google patrón de los problemas y sus soluciones. Resulta que Mac OS X desde el Leopard al menos tiene unos atributos extendidos para los ficheros, por ejemplo para usar con el Time Machine o en Cuarentena para archivos descargados de internet. Éste último era mi caso. La solución es usar el comando «xattr».

Con xattr -l fichero vemos el parámetro que tiene el fichero, en mi caso «com.apple.quarantine», y con xattr -d com.apple.quarantine fichero podemos eliminarlo. No es muy complicado hacer un scriptillo que nos lo quite de todos los ficheros de un directorio como «find . | while read file; do xattr -d com.apple.quarantine $file; done».

Awstats en tomcat

Supongo que conoceréis el sistema de estadísticas Awstats. Para mi es uno de los más sencillos y mejores que hay, aunque nunca lo utilizo en tiempo real, sino que genero las estadísticas por la noche tras hacer el rotado de los logs y de manera estática para no sobrecargar al servidor.

Normalmente las usamos con el servidor HTTP de apache, pero en este caso os voy a explicar cómo hacerlo sobre el servidor de Servlets Apache Tomcat.

Después de tener descargado el awstats y asegurarnos que tenemos correctamente instalado el tomcat y perl en nuestro servidor empezaremos por configurar los logs del tomcat para que nos dejen un log de los accesos a nuestro servidor. Para ello debemos encontrar en el directorio de instalación del Tomcat, en el subdirectorio conf el fichero server.xml y al final del mismo encontraremos comentado lo siguiente:

<!--
<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
directory="logs"  prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
-->

Simplemente tendremos que descomentar este código y cambiar «common» por «combined» que nos dará una mayor información para luego realizar el procesamiento de los logs, quedando de la siguiente forma:

<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="combined" resolveHosts="false"/>

Ahora pasamos a configurar el awstats. Podemos usar la utilidad «awstats_configure.pl» que nos irá preguntando los datos de los directorios y configuración de nuestro servidor, o directamente crear un fichero de configuración copiando el modelo que viene y cambiando los siguientes parámetros:

LogFile="[Directorio Tomcat]\logs\localhost_access_log.%YYYY-24-%MM-24-%DD-24.txt"
LogType=W
LogFormat=1
LogSeparator=" "
SiteDomain="127.0.0.1" [O el nombre DNS como www.ejemplo.es]
HostAliases="127.0.0.1 localhost www.ejemplo.es"

DirData=»[Directorio donde queremos que deje los ficheros de datos del awstats]»
AllowToUpdateStatsFromBrowser=0

A continuación debemos preparar el sistema para que ejecute el programa awstats cada día con el fin de que procese el fichero de logs de acceso y genere las estadísticas. En un equipo linux podemos usar el crontab o en windows el Task Scheduler por ejemplo. En el caso de linux tendríamos un script que generase las estadísticas en páginas html estáticas en el directorio [Directorio de los informes] como el siguiente:

perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -update -showdropped -showcorrupted
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output -staticlinks > [Directorio de los informes]/index.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=alldomains -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].alldomains.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=allhosts -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].allhosts.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=lasthosts -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].lasthosts.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=unknownip -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].unknownip.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=alllogins -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].alllogins.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=lastlogins -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].lastlogins.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=allrobots -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].allrobots.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=lastrobots -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].lastrobots.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=urldetail -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].urldetail.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=urlentry -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].urlentry.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=urlexit -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].urlexit.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=browserdetail -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].browserdetail.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=osdetail -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].osdetail.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=unknownbrowser -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].unknownbrowser.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=unknownos -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].unknownos.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=refererse -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].refererse.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=refererpages -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].refererpages.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=keyphrases -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].keyphrases.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=keywords -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].keywords.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=errors404 -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].errors404.html

Si además queremos que esté visible en la web tendremos que generar estos informes dentro de una carpeta accesible desde el tomcat y copiar la carpeta «icon» que está tentro del directorio «[Directorio del awstast]/wwwroot» a la carpeta «[Directorio instalación Tomcat]/webapps/ROOT» y renombrar «icon» a «awstatsicons».

Espero que os sirva como a mi.

Problemas al autenticar un usuario con windows XP en Samba

Alguna de las actualizaciones de windows XP desactivan la posibilidad de que el cliente se conecte por netbios al servidor Samba.

Tenemos dos opciones, poner la IP del servidor, ya que la configuración de NetBIOS por defecto nos indica que con la IP usa el protocolo.

La otra opción es  entrar en las Opciones Avanzadas de la conexión, ir a la pestaña de WINS y habilitar NetBIOS sobre TCP/IP.

Problemas al autenticar un usuario con MacOsX 10.6 Snow Leopard en Samba

si os aparece el error con identificación 36, es porque Snow Leopard envía la información de los permisos y propietario, que no entiende el servidor. Sucede al autenticarnos y también al copiar archivos.

La solución consiste en editar /etc/smb.config y añadir a linea al final con «unix extensions = no». Seguramente haya que reiniciar el samba, y a partir de entonces nos ahorraremos ese problema.

Problemas al autenticar un usuario con Windows 7 en Samba

Nos hemos encontrado el mismo problema que teníamos con Vista en Windows 7. Windows por defecto sólo usa NTLM2, por lo que debemos cambiar la directiva local para que use LM y NTML.

La solución sencilla es ejecutar (Inicio->Ejecutar) secpol.msc , ir a Directivas locales->Opciones de Seguridad, buscar en la lista «Seguridad de Red: nivel de autenticación de Lan Manager» y cambiar el valor a «Enviar LM y NTML: usar la seguridad de sesión NTLMv2 si se negocia»

Esta es la manera más sencilla, sino podéis revisar también la entrada para Windows Vista y actuar de forma similar.

Opencms 7.5 sobre Tomcat III – Crear un Módulo

En esta ocasión vamos a crear un módulo en OpenCms para tener tanto los templates como funciones dinámicas usadas por la web.

El primer paso es crear el módulo en OpenCms desde la vista de Administración como se muestra en la imagen:

crear módulo I

Hacemos clic en «Módulo nuevo» y rellenaremos los datos que nos solicita. En nuestro caso el paquete s ellamará «es.uva.web» siguiendo la terminología habitual en los paquetes del lenguaje Java.

Crear módulo II

A continuación ya tendremos creado el módulo, y podremos modificar su contenido a través de la vista del explorador. Hay que cambiar el sitio de /sites/default a / e ir a la carpeta /system/modules/ donde tendremos la carpeta de nuestro módulo. Ahora deberemos rellenarla de contenido y publicarla… así que nos queda mucho trabajo por delante.

OpenCms 7.5 sobre Tomcat II-Configuración del idioma

El primer paso una vez instalado es indicar los idiomas de nuestro sitio. Para ello debemos modificar el fichero de configuración en opencms/WEB-INF/config/opencms-system.xml. En este fichero de configuración podemos configurar otros elementos importantes, como el servidor smtp y el usuario con el que se envían los correos, el número de documentos de histórico que se guardan, etc. En este caso vamos a modificarlo únicamente para cambiar los idiomas de trabajo. Tendrá por defecto lo siguiente:

<internationalization>
<localehandler class=»org.opencms.i18n.CmsDefaultLocaleHandler»/>
<localesconfigured>
<locale>en</locale>
<locale>de</locale>
</localesconfigured>
<localesdefault>
<locale>en</locale>
<locale>de</locale>
</localesdefault>
</internationalization>

y debemos añadir el idioma español y en nuestro caso quitar el idioma alemán e inglés.

<internationalization>
<localehandler class=»org.opencms.i18n.CmsDefaultLocaleHandler»/>
<localesconfigured>
<locale>es</locale>
</localesconfigured>
<localesdefault>
<locale>es</locale>
</localesdefault>
</internationalization>

Tras realizar la modificación debemos reiniciar el tomcat.

Obtener el identificador a partir de la ruta de un documento

Es muy sencillo, creamos una página jsp con el siguiente código:
<%@page buffer=»none» session=»false» import=»org.opencms.file.*,org.opencms.file.collectors.*, java.util.*,org.opencms.jsp.*, org.opencms.flex.*,>
<%@ taglib prefix=»c» uri=»http://java.sun.com/jsp/jstl/core» %>
<%@ taglib prefix=»cms» uri=»http://www.opencms.org/taglib/cms» %>
<%@ taglib prefix=»fn» uri=»http://java.sun.com/jsp/jstl/functions» %>
<%
org.opencms.jsp.CmsJspActionElement cms = new org.opencms.jsp.CmsJspActionElement(pageContext, request, response);
CmsObject cmsobject = CmsFlexController.getCmsObject(request);
String url=request.getParameter(«url»);
cmsobject.loginUser(«Admin», «XXX»);
CmsResource res = cmsobject.readResource(url);
out.println(res.getResourceId().toString());
%>

A continuación podemos pasar como parámetro a esa página la URL del documento y obtenemos el CmsUUID del documento. Por ejemplo http://localhost:8080/opencms/opencms/getuid.jsp?url=/documentos/prueba.pdf.