Geoserver en entorno de producción (IV): Habilitando GDAL y su soporte para formatos

Esto se está haciendo eterno, pero desde luego esta costando mucho lograr todo lo que me he propuesto. En este caso, me voy a centrar en ampliar los tipos de datos que va a aceptar nuestro servidor de mapas. Y esto me ha dado dos días de guerra. Os recuerdo mi configuración: Ubuntu 9.10 Server, Geoserver 2.0.1 y Tomcat 6. También os recuerdo que si queréis empezar con una instalación limpia, hay 3 manuales anteriores que encontraréis más abajo.

En este caso, vamos a instalar las librerías necesarias para que nuestro Geoserver sea capaz de leer formatos soporta la librería GDAL, entre los que están ECW, MrSID, EHdr, DTED, rasters de ERDAS,  etc…

Importante: Por desgracia, en esta ampliación tendremos un problema con las licencias para utilizar ECW en nuestro servidor, ya que para usarlo hay que usar unas librerías de ERDAS bastante restrictivas, y tendremos que tener un licencia (obviamente de pago, es decir, comprada) para usarlo sin romper la licencia de sus librerías, que no permiten su uso libre en servidores de mapas de terceros. En este tutorial se explica como activar el soporte para ECW, pero contamos con que se tienen las licencias compradas de antemano.

Manos a la obra, empecemos por el principio:

  1. En versiones antiguas de Geoserver hay que instalar un plugin dentro del directorio “WEB_INF/lib” de Geoserver, el cual puedes encontrar aún, en la página de descargas de Geoserver, en el apartado “Extensions>GDAL“. En la versión 2.0.1, ya viene de serie, por lo que no hace falta hacer nada.

Bajar las librerías nativas de GDAL del proyecto “ImageIO-ext” en esta dirección, no tengo que decirte que busques la versión más moderna y para tu sistema operativo, bájate las “native-libraries“. Estas librerías son totalmente independientes de las que tengas instaladas en tu equipo. Es decir, si hay tenias GDAL instalado vía apt/aptitude o porque tu te las instalaras a mano, no interfieren con estas.

Actualización 10-08-21: De nuevo, las cosas han cambiado, ya que como todos sabemos, Java ahora pertenece al eje del mal, es decir Oracle. Y como no, ha tenido que cambiar todo de sitio. Las nuevas direcciones para encontrar las cosas son:

Todas estas librerías son para el GDAL 1.7.3, el cual es el que esta disponible en los repositorios de Ubuntu, en caso de no tenerlo, no se si funcionará, aunque imagino que tendrás que instalarlo a mano para desgracia de nuestros nervios.
cd /usr/lib/
sudo wget https://imageio-ext.dev.java.net/files/documents/7505/144611/imageio-ext-1.0.5-linux32-mrsid-ecw-lib.tar.gz
sudo tar -zxvf ./imageio-ext-1.0.5-linux32-mrsid-ecw-lib.tar.gz
./
./libNCSCnet.so
./libNCSEcwC.so.0.0.0
./libNCSCnet.so.0
./gdalinfo
./libNCSUtil.so.0.0.0
./libNCSCnet.so.0.0.0
./libgdal.so.1
./libNCSEcw.so.0.0.0
./libNCSUtil.so.0
./libgdal.so
./libNCSEcwC.so.0
./libosrjni.so
./libNCSUtil.so
./libNCSEcw.so.0
./libNCSEcw.so
./libNCSEcwC.so
./libgdalconstjni.so
./libgdaljni.so
./libogrjni.so
./libgdal.so.1.11.4

Como habrás notado, he bajado la versión con soporte ECW (solo para probar que funciona), y lo he instalado en la carpeta “/usr/lib”. Si miras los manuales de referencia, todos te dicen que estas librerías puedes instalarlas donde te de la gana y luego fijar una variable de entorno “LD_LIBRARY_PATH” a la ruta para que todo funcione. En mi caso, esto no funcionaba, y la única manera de lograr que funcionara, era instalando estas librerías aquí.

Esto es importante, ya que no tengo muy claro donde se tiene que instalar las librerías nativas del GDAL (en serio, es un follón). Ahora mismo si no las descomprimo tambien en; “/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64” (es decir, en el directorio de mi versión por defecto de Java, y con la arquitectura, en 64 bits en mi caso, pero podría ser en i386 también), no me funciona. Simplemente trata de descomprimir en el directorio JAVA primero, y luego intenta en el directorio de librerías.

  1. Bajar los datos para la GDAL. Este fichero contiene definiciones de proyección y datos que se necesitan para usar esta librería, esta puedes instalarla donde quieras para luego fijar la variable de entorno “GDAL_DATA” para que GDAL sepa encontrarlas.
    cd /usr/share/gdal-data/
    sudo wget https://imageio-ext.dev.java.net/files/documents/7505/137749/gdal_data-1.4.5.zip
    sudo unzip -o ./gdal_data-1.4.5.zip
    

    Ahora editamos el fichero “/etc/profiles” y añadimos la siguiente línea:

    export GDAL_DATA=/usr/share/gdal-data
    

    Y ya hemos instalado todo.

    Actualización 2-11-10: Según he aprendido a lo largo de mis andaduras con linux, el mejor sitio para poner las exportaciones de variables de entorno es en el fichero “/etc/environment“.

  2. Tendremos que reiniciar Tomcat, por seguridad de que refresque y ver reflejados los cambios. En alguna ocasión solo con recargar el Geoserver desde el “manager” de Tomcat me ha valido, pero no lo puedo asegurar.
  3. Ahora entramos en el interfaz Web de Geoserver, que usualmente está instalado en: http://tuservidor:8080/geoserver, y en el apartado “Almacenes de datos” pulsamos “Agregar nuevo almacén”, y tendremos que ver una lista parecida a esta:

    Formatos soportados tras instalar la extensión de GDAL

    Formatos soportados tras instalar la extensión de GDAL

  4. Importante: Parece que están surgiendo problemas con estas librerías y Tomcat, y puedes leer como “arreglarlo” en el siguiente post. Para saber si te ocurre, sólo tienes que tratar de crear un almacén con cualquiera de los nuevos tipos que han aparecido y te saldrá un error. No es muy complicado de arreglar pero asusta 🙂

Como siempre, aquí tienes todas las referencias, de donde he sacado sabiduría:

Please follow and like us:

Geoserver en entorno de producción (III): Configurando PostgreSQL y PostGIS

Después de las dos partes iniciales (I y II) sobre como estoy instalando un servidor Geoserver, dentro de mi organización con miras a que funcione en producción, hoy nos centramos en una de las optimizaciones más mas importantes, y que es la utilización de una base de datos espacial.

Antes de nada, una nota: Existen configuraciones mucho más seguras que la que yo os describo, con usuarios con permisos muy limitados, usuarios de sistema, etc… pero este documento sólo trata de mostrar una configuración rápida de la que partir, y posteriormente ir afinando. No quiero críticas a ese respecto 😛

Este tipo de base de datos, espaciales, nos permite almacenar dentro de su contenido puntos, líneas y polígonos, así como funciones que nos permitan realizar consultas espaciales, es decir, almacenar cartografía dentro de la base y poder hacerle consultas preguntando por coordenadas, pero sólo nos permitirá almacenar datos vectoriales. Con esto, obtendremos todas las mejoras que tiene una base de datos en cuanto a velocidad, pero también ciertas complicaciones “extra”, como son su configuración correcta en nuestra arquitectura. Además hay otro problema: las bases de datos más utilizadas no traen de “serie” esta funcionalidad y se tendrá que que instalar como un añadido o plugins.

Dentro del software libre, cabe destacar la unión de la base de datos PostgreSQL y PostGIS (el cual es su extensión para obtener las funciones espaciales). Pues manos a la obra:

  1. Instalamos PostgreSQL+PostGIS, pero usando cierto “truco” para no tener problemas de versiones. En mi caso, estoy usando Ubuntu 9.10, el cual tiene un paquete para ambas partes, pero por desgracia, PostGIS solo se instala en PostgreSQL 8.3, mientras que el paquete PostgreSQL es el 8.4. Entonces, instalamos PostGIS, y le permitimos que instale correctamente todas las dependencias (es recomendable usar aptitude en vez de apt)
    linux@svrmapas:~$ sudo aptitude search postgis
    p   libpostgis-java                                                                  - geographic objects support for PostgreSQL -- JDBC support
    c   postgis                                                                          - geographic objects support for PostgreSQL -- common files
    p   postgresql-8.3-postgis                                                           - geographic objects support for PostgreSQL 8.3
    linux@svrmapas:~$ sudo aptitude install postgresql-8.3-postgis
    Leyendo lista de paquetes... Hecho
    Creando árbol de dependencias
    Leyendo la información de estado... Hecho
    Leyendo la información de estado extendido
    Inicializando el estado de los paquetes... Hecho
    Se instalarán los siguiente paquetes NUEVOS:
      libgeos-3.1.0{a} libgeos-c1{a} libproj0{a} postgis{a} postgresql-8.3{a} postgresql-8.3-postgis postgresql-client-8.3{a} postgresql-client-common{a} postgresql-common{a}
      proj-data{a}
    0 paquetes actualizados, 10 nuevos instalados, 0 para eliminar y 0 sin actualizar.
    Necesito descargar 11,2MB/11,4MB de archivos. Después de desempaquetar se usarán 31,2MB.
    ¿Quiere continuar? [Y/n/?]
    

    Como puedes ver, fuerza a instalar la PostgreSQL 8.3, tal y como queremos.

  2. Configurar el acceso remoto al motor de la base de datos, y no nos queda mas que cacharrear en los ficheros de configuración para darnos acceso a nuestro equipo para usarlo remotamente. Este acceso remoto, puede aprovecharse con programas como “pgAdmin” que nos permite manejar la base de datos desde tu ordenador, aunque su uso escapa del tema principal de este tutorial.
    En el fichero “/etc/postgresql/8.3/main/postgresql.conf” (ojo, mira que tengo puesta mi versión de la base, en tu caso saldrá el de la tuya) edita lo siguiente:

    # Te encontrarás esto
    #listen_addresses = 'localhost'
    # Pondrás esto:
    # Acceso por todas las ips configurados
    listen_addresses = '*'
    # O por una en particular... usa una de las dos
    listen_addresses = '192.160.0.1'
    

    Tambien cambiamos la siguiente línea:

    # Esto
    #password_encryption = on
    # por esto
    password_encryption = on
    

    Ahora en el fichero “/etc/postgresql/8.2/main/pg_hba.conf” hacemos un par de cambios,  para poder acceder vía usuario/password remotamente. Sólo añadiendo esto al final:

    # IPv4 conexiones dentro de su misma red
    host    all         all         192.168.1.0/24      md5
    

    Es muy interesante estudiar un poco este tema, ya que se pueden configurar varios métodos de acceso dependiendo de la ip que se conecte al servidor, como por ejemplo, una ip que no tenga usuario ni password, o solo usuario, etc… Este tema lo puede leer en mayor profundidad en este link.

    Ya está, y tras esto, recargamos el servicio:

    sudo /etc/init.d/postgresql-8.3 reload
    

    Si todo va bien, podrás acceder desde tu ordenador tranquilamente sin tener que estar delante del ordenador.

  3. En este punto, tendrías que decirme:

    ¡¡¡Esto no funciona!!!, ya que pgAdmin me pide usuario y password
    .

    Bueno, es un pequeño detalle :). Por defecto el usuario es “postgres”, el cual también ha sido creado como usuario local de la máquina linux (una buena idea, un usuario sólo para las tareas administrativas), pero ahora vamos a fijar su password dentro de la base de datos:

    # Ejecutamos el shell de psql como el usuario "postgres"
    sudo -u postgres psql postgres
    # Dentro del shell de psql
    \password postgres
    # Tecleamos el nuevo password
    

    Con esto, acabamos de fijar el usuario y password que vamos a usar remotamente.

  4. Instalación del “Admin Pack”. Esto no es más que funciones para administrar la base remotamente, y que se pueden instalar de dos manera. Antes de nada instalar lo siguiente:
    sudo aptitude install postgresql-contrib-8.3
    

    De manera local, se tiene que hacer con un usuario que no requiera de password, en este caso primero cambio al usuario “postgres” que nos permitirá realizarlo sin password en la configuración por defecto de la base de datos:

    sudo su postgres
    postgres@svrmapas:/home$ psql -U postgres -d postgres < /usr/share/postgresql/8.3/contrib/adminpack.sql
    

    De manera remota, es muy sencillo, te bajas las librerías que necesitas desde el código fuente de PostgreSQL, en tu ordenador claro, y las lanzas desde pgAdmin. Y todo funcionará tal y como lo hace en local.

En siguientes “entregas” comentaremos como enlaza todo esto con Geoserver, y como almacenar tus capas vectoriales dentro de esta base de datos… pero todo más adelante y con paciencia 🙂

Y como siempre, os dejo la lista de referencias que he consultado para realizar este pequeño “tutorial”.

Please follow and like us:

Geoserver en entorno de producción (II): Optimizando el servidor

Tengo que reconocerlo. Esto está siendo mucho más difícil de lo que yo pensaba, ya que me estoy encontrando con muchos problemas, al configurar mi servidor en producción me estoy dando cuenta que hay mucha información contradictoria, y mucha más que es demasiado antigua. Voy a intentar resumir los pasos que voy siguiendo y que me han funcionado (pero recordar mi máquina, Ubuntu Server 9.10 de 32bits, en otras configuraciones… ¡quién sabe si esto funcionará!).

Allá van las mejoras que he incluido al servidor de mapas:

  1. Confirmar que la maquina virtual que usamos es la de Sun y no la OpenJDK mediante el comando:
    sudo  update-alternatives --config java
    Hay 2 opciones para la alternativa java ( proporcionando /usr/bin/java).
    
      Selección   Ruta                                      Prioridad  Estado
    ------------------------------------------------------------
      0            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      modo automático
      1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      modo manual
    * 2            /usr/lib/jvm/java-6-sun/jre/bin/java       63        modo manual
    

    Con este comando te pedirá que le des el numero de la máquina a utilizar, y como ves en mi caso ya está elegida correctamente.
    Una vez elegida, entra en la web de administración de Geoserver, y en la sección “Estado del Servidor“, y mirar que maquina virtual usa en el apartado “Versión de la JVM“, pone algo como “OpenJDK”, entonces vamos mal. Pero no hay que tirar la toalla aún.
    El problema suele ser que la variable de entorno “JAVA_HOME” no está definida, como podemos consultar con el comando “env”:

    linux@svrmapas:~$ env
    TERM=xterm
    SHELL=/bin/bash
    XDG_SESSION_COOKIE=XXX
    SSH_CLIENT=192.168.XXX.XXX 4809 22
    SSH_TTY=/dev/pts/1
    USER=linux
    LS_COLORS=rs=0:di=01;34:ln=01;36:hl=44;37:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
    MAIL=/var/mail/linux
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    PWD=/home/linux
    LANG=es_ES.UTF-8
    SHLVL=1
    HOME=/home/linux
    LOGNAME=linux
    SSH_CONNECTION=192.168.XXX.XXX 4809 192.168.XXX.XXX 22
    LESSOPEN=| /usr/bin/lesspipe %s
    LESSCLOSE=/usr/bin/lesspipe %s %s
    _=/usr/bin/env
    

    Vaya, si no tenemos definida la variable, ¿donde coge el Tomcat la ruta para la máquina virtual de Java?. Para desvelar este misterio, sólo miramos el script de arranque de Tomcat nos encontramos unas líneas como estas:

    # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
    # defined in $DEFAULT)
    JDK_DIRS="/usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
    

    Como puedes ver, primero mira si existe la máquina de código libre, que no nos interesa para nada, y luego el resto (en mi caso, la maquina virtual de Java es el segundo directorio). En este punto tienes dos opciones, definir la variable de entorno “JAVA_HOME” o borrar la primera ruta de de la variable “JDK_DIRS”. Pero si lo hacemos elegantemente, solo tenemos que ir a el fichero “/etc/profile” y añadir estas lineas:

    # Ten en cuenta que tu ruta a la maquina virtual puede cambiar
    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    export JRE_HOME=${JAVA_HOME}/jre
    export PATH=$PATH:${JAVA_HOME}/bin
    

    Actualización 22-03-10: Resulta que si hubiera leido ese fichero de configuración de Tomcat, me hubiera dado cuenta que usa un fichero “/etc/default/tomcat6“, en el cual puedes indicar que máquina virtual de Java utilizar sin tener que liar tanto follón, por lo que simplemente nos vamos a ese fichero y descomentamos la siguiente línea, incluyendo la ruta a la máquina virtual de Sun:

    # The home directory of the Java development kit (JDK). You need at least
    # JDK version 1.5. If JAVA_HOME is not set, some common directories for
    # OpenJDK, the Sun JDK, and various J2SE 1.5 versions are tried.
    #JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk # Original que viene comentada
    JAVA_HOME=/usr/lib/jvm/java-6-sun # Mi modificación
    
  2. Poner el log en modo producción, lo cual hace que sea menos “verboso”. Simplemente desde el interfaz web de Geoserver, en “Configuración global>Perfil de registro“, poner “Production” y aplicar.
  3. Dar recursos de sobra a Tomcat. No me seáis rácanos y dedicar una máquina completa al servidor, ya que va a ser muy exigente en cuanto a RAM. Para dar más recursos, tendremos que modificar los parámetros con los que arranca la maquina virtual que contiene a Tomcat, dentro del fichero “/etc/init.d/tomcat6“, buscaremos la línea que rellena la variable “JAVA_OPTS“:
    # Default Java options
    # Set java.awt.headless=true if JAVA_OPTS is not set so the
    # Xalan XSL transformer can work without X11 display on JDK 1.4+
    # It also looks like the default heap size of 64M is not enough for most cases
    # so the maximum heap size is set to 128M
    if [ -z "$JAVA_OPTS" ]; then
            JAVA_OPTS="-jvm server -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:NewRatio=2 -XX:+AggressiveOpt -XX:MaxPermSize=128m -XX:SoftRefLRUPolicyM$
    fi
    

    Actualización 22-03-10: De nuevo esto se puede hacer en “/etc/default/tomcat6“, escribiendo la linea siguiente:

    # Ponlo en una única línea"
    JAVA_OPTS="-jvm server -Djava.awt.headless=true -Xms1024m -Xmx1024m -XX:NewRatio=2
    -XX:+UserParalleGC -XX:+AggressiveOpt -XX:MaxPermSize=128m
    -XX:SoftRefLRUPolicyMSPerMB=3600"
    

    Esta configuración, que parece muy complicada, indica que Tomcat arranque con una máquina virtual con los siguientes parámetros:

    • -jvm server: Arranque de una máquina virtual en modo servidor, que da más rendimiento.
    • -Djava.awt.headless=true: Usar librerías AWT pero sin usar una ventana (no se muy bien porqué pero lo recomiendan en todos los foros).
    • -Xms1024m -Xmx1024m: Usará como mínimo 1Gb de memoria RAM y también 1Gb como máximo.
    • -XX:NewRatio=2 -XX:MaxPermSize=128m -XX:SoftRefLRUPolicyM$: Como limpiar los objetos que se tienen en memoria…
    • -XX:+AggressiveOpt: Optimizaciones experimientales.

    Actualización 2-12-10: En una nueva actualización los parámetros de optimización de la máquina virtual de Java, que he podido utilizar han sido:

    JAVA_OPTS="-server -Djava.awt.headless=true -Xms256m -Xmx512m -XX:NewRatio=2 -XX:MaxPermSize=128m -XX:SoftRefLRUPolicyMSPerMB=3600"
    

    Gran parte de estas recomendaciones, puedes leerlas más profundamente en el siguiente documento en formato OpenOffice.

  4. Instalar las extensiones “Java Advanced Imaging” para Java, las cuales nos ofrecen mayor rendimiento en el manejo de gráficos, que es parte de lo que hace nuestro servidor de mapas: traducir de formatos cartográficos a imágenes.
    Primero, bajamos las librerias, donde hay que tener cuidado con elegir las correctas para tu sistema operativo y plataforma (x64 para sistemas de 64bits o i585 para sistemas de 32bits), en mi caso es un 32bits para una máquina linux:

    linux@svrmapas:~$ wget http://download.java.net/media/jai/builds/release/1_1_3/jai-1_1_3-lib-linux-i586-jdk.bin
    

    Ahora toca instalar:

    linux@svrmapas:~$ sudo cp jai-1_1_3-lib-linux-i586-jdk.bin /usr/lib/jvm/java-6-sun/
    linux@svrmapas:~$ cd /usr/lib/jvm/java-6-sun/
    linux@svrmapas:/usr/lib/jvm/java-6-sun$ sudo sh jai-1_1_3-lib-linux-i586-jdk.bin
    # Aceptamos la licencia
    Do you agree to the above license terms? [yes or no]
    yes
    Unpacking...
    Checksumming...
    
    0
    0
    Extracting...
    UnZipSFX 5.31 of 31 May 1997, by Info-ZIP (Zip-Bugs@lists.wku.edu).
      inflating: COPYRIGHT-jai.txt
      inflating: DISTRIBUTIONREADME-jai.txt
      inflating: LICENSE-jai.txt
      inflating: THIRDPARTYLICENSEREADME-jai.txt
      inflating: UNINSTALL-jai
      inflating: jre/lib/i386/libmlib_jai.so
      inflating: jre/lib/ext/jai_core.jar
      inflating: jre/lib/ext/jai_codec.jar
      inflating: jre/lib/ext/mlibwrapper_jai.jar
    Done.
    linux@svrmapas:/usr/lib/jvm/java-6-sun$
    

    Ahora volvemos a visitar nuestra web de control de Geoserver, en el apartado “Estado del servidor”, busca la línea “Native JAI” y que esté a “true”.

  5. Instalar las extensiones “JAI Image I/O” de Java para ayudar aun más la escritura y lectura de las imágenes. Solo hay que seguir unos pasos similares que con el paquete anterior, aunque con algún cambio:
    linux@svrmapas:~$ wget http://download.java.net/media/jai-imageio/builds/release/1.1/jai_imageio-1_1-lib-linux-i586-jdk.bin
    linux@svrmapas:~$ sudo cp jai_imageio-1_1-lib-linux-i586-jdk.bin /usr/lib/jvm/java-6-sun/
    linux@svrmapas:~$ cd /usr/lib/jvm/java-6-sun/
    linux@svrmapas:/usr/lib/jvm/java-6-sun$ sudo su
    root@svrmapas:/usr/lib/jvm/java-6-sun-1.6.0.15# export _POSIX2_VERSION=199209
    root@svrmapas:/usr/lib/jvm/java-6-sun-1.6.0.15# sh jai_imageio-1_1-lib-linux-i586-jdk.bin
    # Acepta la licencia
    Unpacking...
    Checksumming...
    0
    0
    Extracting...
    UnZipSFX 5.31 of 31 May 1997, by Info-ZIP (Zip-Bugs@lists.wku.edu).
      inflating: COPYRIGHT-jai_imageio.txt
      inflating: DISTRIBUTIONREADME-jai_imageio.txt
      inflating: ENTITLEMENT-jai_imageio.txt
      inflating: LICENSE-jai_imageio.txt
      inflating: THIRDPARTYLICENSEREADME-jai_imageio.txt
      inflating: UNINSTALL-jai_imageio
      inflating: jre/lib/i386/libclib_jiio.so
      inflating: jre/lib/ext/jai_imageio.jar
      inflating: jre/lib/ext/clibwrapper_jiio.jar
    Done.
    

    Actualización 10/04/2012: Me he encontrado con problemas en esta instalación, con equipos de 64bits. Al parecer no funciona y devuelve un error del tipo “tail: no puedo abrir `+215′ para lectura“. El error viene de lejos pero como no, Oracle no tiene ganas de arreglarlo. La única solución que he encontrado es esta:

    sed s/+215/-n+215/ jai_imageio-1_1-lib-linux-amd64-jdk.bin > jai_imageio-1_1-lib-linux-amd64-jdk-fixed.bin
    # Usar el nuevo instalable "fixed"
    

    Y tras reiniciar Tomcat, ya tendremos de nuevo disponibles estas nuevas librerías. Como siempre, si queremos ver si todo ha ido bien, solo tendremos que ir a “Geoserver>Estado del servidor” y allí buscar la línea “JAI ImageIO nativo” y ver que se ha puesto a “true”.
    Al final tendremos algo así:

    Tras la instalación de las librerias y la maquina Sun tendras que ver algo así en Geoserver

    Tras la instalación de las librerias y la maquina Sun tendras que ver algo así en Geoserver

  6. Cambiar el directorio de datos de Geoserver. Es una buena opción, para facilitar actualizaciones y poder trabajar sin miedo a que una actualización machaque nuestra configuración. Para esto hay que buscar donde Tomcat despliega las apliacaciones, en el directorio: “/var/lib/tomcat6/webapps/geoserver/WEB-INF/” ahora dentro de la carpeta encontraremos un fichero muy importante “web.xml”. en el se pueden tocar varios parámetros, pero nos centraremos en la siguiente parte:
    
       GEOSERVER_DATA_DIR
       C:\eclipse\workspace\geoserver_trunk\cite\confCiteWFSPostGIS
    

    Como ves, esta comentado, quita los comentarios y cambia la ruta (curiosamente la versión linux tiene una dirección Windows (?) que obviamente no va ha funcionar).
    Una buena política es poner un segundo disco, si se puede, que favorecerá mucho el acceso paralelo a datos y al servidor.

    Seguiremos contando como trabajar con la base de datos en la siguiente parte.

Referencias de este artículo:

Please follow and like us:

Diferentes configuraciones IP para cada SSID Wifi en Android

Logo de Android

Logo de Android

¡Cuanto hace que no escribía!

Bueno, ya tengo hasta mi querida Hero por “cortesía” de Orange, con su sistema Android. Simplemente no tengo palabras, ya que no para de sorprenderme, y eso que ya tuve un iPhone que paso con más pena que gloria entre mis manos.

Android no es perfecto, y aun más la versión del sistema operativo que trae de serie las HTC Hero de Orange que no es precisamente muy actualizada, pero el Market lo hace perfecto.

Un fallo del cual se están quejando sobre este sistema operativo en el foro de desarrollo de Android, es que no guarda configuraciones IP diferentes para cada red Wifi a la que se conecta. Por ejemplo, en mi casa tengo las ips estáticas, mientas que en el trabajo uso DHCP, pero Android solo permite que configures una ÚNICA configuración para todas las redes Wifi.

Bueno, rebuscando por el Market ya tengo la solución (gratuita claro) que es la aplicación “Static Wifi“. Sencillamente genial y creo que no necesita mucha explicación, ya que cuando encuentra que se conecta a una red Wifi con cierto SSID, cambia toda la configuración para que se adapte a lo que se necesite.

Please follow and like us:

Como recuperar un Raid0 tras un fallo de disco en Ubuntu

Hoy me he enfrentado a este problema. Uno de nuestros servidores de respaldo (al menos no era un principal) ha muerto. Tras mirar que ocurría, sencillamente que el raid no existía, nos hemos dado cuenta de que un disco duro había pasado a mejor vida. Obviamente, al ser un Raid0 se pierde toda la información (por lo que hay que tener un respaldo, ya sea en otro equipo, o mediante otro raid), y en nuestro caso, este servidor era el respaldo de otro, por lo que simplemente hay que recuperarlo y volver a sincronizar con el principal.

Antes de nada, recordaros un gran blog que habla mucho sobre estos temas y muchos más, como es el blog de Iván López, que merece ser leído ya que ha hecho cosas muchos más complejas que esto, y del cual saco mucha información que vas a leer más adelante.

¿Como vimos el fallo?. La verdad que fue sencillo ya que tuvimos un apagón y el servidor no se recuperó bien, mediante el comando podemos ver el desastre:

more /proc/mdadm

Todos los discos que forman el raid se encuentran con una (S) a su lado (son discos spare) y falta uno. En nuestro caso, teniamos 7 discos, y solo salian 6.

sudo mount

Y nos encontramos que el raid no esta montado… bueno, toca buscar el disco duro roto. Un buen método es mirar el dmesg y ver cual da error, en nuestro caso no quedaba claro (la bios de la máquina marcaba el disco como conectado, pero luego linux no era capaz de mostrarlo), se fue desconectando uno a uno cada disco hasta que le encontramos. Se substituyo por uno de igual capacidad, ya que no es recomendable mezclar capacidades en Raid0.

Bien, pues substituimos el disco duro que esta averiado por el nuevo, pero este no está preparado para formar parte de un raid, por lo que lo conectamos y arrancamos la máquina (obviamente no montará el raid) y abrimos Gparted (en su defecto lo instalas). Le creas una nueva tabla de particiones, lo formateas a capacidad completa con el tipo de ficheros “sin formato”. Aplicamos y luego nos vamos al menú de “Partición > marcas” (no recuerdo exactamente como se dice en castellano, en ingles es “flags”, ya que mi servidor esta en inglés) y marcamos sólo “raid” de todas las opciones que nos aparecen. Aceptamos y el disco duro ya está preparado para ser parte de un raid.

Ahora tocaba eliminar todo rastro del antiguo raid, primero en los discos anteriores:

# Se tiene que parar o dará un error de que está en uso.
# Si se tienen dudas mirar en /proc/mdadm
sudo mdadm --stop /dev/md0
# Si incluyes el disco duro nuevo, este dará un error
#  no importará sigue adelante
sudo mdadm --zero-superbloc /dev/sd[a-g]1

Ya tenemos los discos impolutos y listos para volver a montar, pero antes hay que eliminar cualquier configuración de la existencia de raid en “/etc/mdadm/mdadm.conf” eliminando cualquier linea del tipo:

ARRAY /dev/md0 level=raid0 num-devices=7 UUID=1803e03e:db1868b2:d2508c3c:95c11b58

Aunque esto último no es obligatorio, ya que se va a reescribir unos pasos mas adelante, nos vendrá muy bien por si necesitamos un reinicio en la máquina, y así el sistema no tratará de montar de nuevo el raid con el fallo de disco.

Tras esto, ya podemos volver a crear nuestro raid:

sudo mdadm --create --auto=yes --verbose /dev/md0 --level=0 --raid-disks=7 /dev/sd[a-g]1

Ojo, que el parámetro auto del comando mdadm es muy interesante, ya que crea, si no existiera, el dispositivo md0, dentro del directorio “/dev“. Si has hecho un reinicio seguramente no tengas dicho dispositivo ya que se elimina si no esta en uso.

Bien, comprobamos que todo funciona, formateando la nueva partición:

sudo mkfs.ext3 -v /dev/md0

Con un simple:

sudo mount -a

remontamos el sistema de ficheros, y podemos acceder al raid. Perfecto.

Ahora queda el paso final, y es volver a crear el fichero /etc/mdadm/mdadm.conf:

cd /etc/mdadm
sudo cp mdadm.conf mdadm.conf.`date +%y%m%d`
sudo sh -c 'echo "DEVICE partitions" > ./mdadm.conf'
sudo sh -c 'mdadm --detail --scan >> ./mdadm.conf'

Testeamos que todo este bien:

more ./mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid0 num-devices=7 UUID=bed08171:06afc57d:9c8da9aa:858c4c7d

Y ahora solo queda sincronizar el contenido, en mi caso con un rsync que va a tardar al menos unas 6 horas en sincronizar mediante una gigalan directa entre servidores, pero puedes hacerlo como sea, como por ejemplo discos duros externos, y ya tu raid vuelve a funcionar tras el susto del fallo del disco.

Actualización: Aveces, si usamos en el fichero “/etc/mdadm/mdadm.conf” la linea “DEVICES partitions“, al reiniciar no funcionan correctamente los raid, y cuando se realiza un “mdadm –examine /dev/sdxx” nos encontramos que tienen un diferente UUID que no cuadra ni con el fichero “mdadm.conf“.

Para evitar esto, la única solución que he logrado, gracias a esta entrada de la web de Ubuntu-es, encontrar es eliminar la entrada de los “DEVICES” y poner en el fichero “mdadm.conf“:

# Obviamente pon los devices que use tu raid
ARRAY /dev/md0 level=raid0 num-devices=3 metadata=00.90 UUID=e1fbf1e6:da616113:e368bf24:bd0fce41 devices=/dev/sda2,/dev/sdb1,/dev/sdc1

Al añadir al final los “devices” los monta correctamente, y sin hacer cosas raras. Según leo, no es muy recomendable (no se porqué) pero hace que al menos en mis maquinas no falle.

Please follow and like us:

Nunca os fiéis de internet

Internet es un gran centro de información, pero sin duda, que las informaciones no están contrastadas en la mayoría de ellas y que son la mayoría un copiar y pegar es un hecho que solo con un par de búsquedas, te das cuenta.

En mi caso, por vaguería, me puse a mirar las configuraciones del MMS de Orange, solo por comprobar que mi nuevo móvil funcionaba correctamente… Pues tras buscar varios sitios web, me encuentro, como no, con un montón de información contradictoria. Así que ni corto ni perezoso, llamo a Orange, y me encuentro que muchas webs no tienen la información correcta. Os pongo un ejemplo de copiar y pegar sin comprobar  nada: esta web la configuración que propone no funciona ni a la de tres, ya que se equivoca al poner la pasarela y encima te configura el móvil para que pregunte la contraseña cada vez que mande un MMS.

Otras muchas, no tienen la información completa, otras en antigua, otros sencillamente dan la configuración WAP cuando te ponen que es la MMS.

Vamos, que llamar es muy duro para perezosos como yo, pero aveces no hay otro remedio.

Please follow and like us:

Al fin, como lograr que un cliente linux, actualice el DNS de un Windows 2003 server mediante el DHCP

Disclaimer: Desgraciadamente esto solo esta probado en un entorno con clientes Ubuntu, y servidores Windows 2003 Server. Si no es exactamente esta configuración de equipos, no te aseguro que funcione.

¡Por fin!… Un método que funciona, para que tu cliente Linux, metido dentro de una red con un Active Directory, pueda actualizar el DNS cuando recibe una ip a través de la DHCP del servidor.
El escenario en el cual esta solución es aplicable, es cuando tu ordenador Linux, recibe una ip del servidor DHCP de Windows, pero el resto de los equipos no pueden resolver el nombre de la máquina, solo mediante ip pueden contactar con la máquina. Y tras revisar el fichero “/etc/dhcp3/dhcp.conf” es correcto (en teoria no tendrías que tocar nada de fichero por defecto).

Bien… ¡deja de mirar a tu máquina Linux como la culpable!. La culpa esta en el servidor Windows. Tras mucho revisar a nuestro amigo Google, y culpar a mi pobre Linux, al final he visto que solo hay que tocar el servidor Windows en su servicio de DHCP para que todo vaya fino.

Por partes, solo hay que seguir este manual, aunque yo la voy a traducir y anotar:

  • ad_usuarioLo primero de todo es generar un usuario con los suficiente permisos para incluir registros/punteros en el DNS. Ir a “Usuarios y equipos de Active Directory”, allí crear un nuevo usuario, pon por ejemplo un nombre muy descriptivo (“dhcpTOdns”, o “dhcpAdns” o “noBorrarEstePutoUsuario”) pon un password que sea sencillo de recordar ya que no lo usaras muy a menudo :).
    Tras generarlo, tienes que incluirlo en el grupo “DnsUpdateProxy”, el cual es el que nos concede el permiso para actualizar el DNS. Quitale cualquier otro permiso (quitale del grupo de “usuarios de dominio”).
  • dhcp_configAhora pasamos a la madre del cordero. Configurar el servicio de DHCPdel Windows 2003, para que use este nuevo usuario que hemos incluido. Entramos en la consola de administración del DHCP y pulsamos sobre el arbol de la izquierda sobre el servidor, luego “Propiedades”, allí ve a la pestaña “DNS”, y dejala tal y como pone en la imagen que te aparece en la derecha. Tras esto, solo queda ir a la pestaña de “Opciones Avanzadas” para allí pulsar sobre el botón de “Credenciales”. Pon el usuario/dominio/password del usuario que hemos creado anteriormente.

Ahora en la máquinas Linux, haz un “sudo dhcpclient3 -d ethx” (donde ethx es tu tarjeta de red conectada al dominio) y todo el mundo podrá acceder por tu hostname a la maquina Linux. Huyuuuu….

Please follow and like us: