Adiós a la “Safe Harbour”: bienvenidos al caos

Cómo casi siempre pasa, oímos campanas pero no terminamos de entender que significan. Por ejemplo, hace unos meses, nos enteramos que la Unión Europea había cancelado el acuerdo con Estados Unidos denominado “Safe Harbour“. Pocos sabrían que era ese acuerdo, pero afecta a todo aquel que use servicios en Internet y quien ofrece el servicio los ofrecía desde EEUU (más o menos).

¿Qué es Safe Harbour”?

The Safe Harbour pub (Roy Hughes [CC BY-SA 2.0])

The Safe Harbour pub (Roy Hughes [CC BY-SA 2.0])

Este acuerdo, digamos que hacia “casar” dos legislaciones muy diferentes sobre la privacidad de los datos personales, a uno y otro lado del Atlántico, permitiendo que EEUU no tuviera que adaptar sus leyes, bastante más laxas que las que se regularon en EU, y dejando a las empresas la responsabilidad de tener que cumplir con las exigencias europeas, y a la EU la tarea de analizar si es cierto que se estaban cumpliendo las leyes.

Esto a simple vista no esta mal pensado… pero claro, hablamos de EEUU, y sabemos lo que ese país presiona a las empresas para poder acceder a toda la información que ellos consideren de “seguridad nacional”.

Welcome Max!

A todo esto, llega un hombre, llamado Maximilian Schrems, un joven estudiante de derecho austriaco que se marcha a estudiar de intercambio a Santa Clara, en Silicon Valley. En ese viaje tiene la oportunidad de hablar con un abogado de la plantilla de Facebook que demuestra que están ignorando las leyes que se fijan en el acuerdo de “Safe Harbour”, y al bueno de Max se le ocurre realizar una petición a Facebook de toda la información que se tenga de él utilizando las leyes europeas de acceso la información. Tras recibir un CD con toda la información (cerca de 1.200 páginas), ve que se están incumpliendo la leyes europeas, y lo denuncia ante los tribunales irlandeses (donde se encuentra la filial europea de Facebook) en 2013, señalando que todos los datos que Facebook Europa envía a EEUU no cumplen las leyes Europeas. De aquí, los irlandeses lo mandan al tribunal europeo, y en octubre del 2015 salta la liebre: el tribunal de justicia de la EU dicta “que Estados Unidos no garantiza un nivel de protección adecuado de los datos personales“. Se anula el acuerdo “Safe Harbour”.

Consecuencias…

¿Y ahora qué?, en que afecta esto a mi día a día. Sencillo, en que una empresa europea, que almacene datos personales, o con carácter privado, no puede mandar esa información fuera de las fronteras europeas o con países con tratados similares al “Safe Harbour”. ¿Os suena empresas como “Google”, “Facebook”, “Twitter”, Flickr”?, pues se refieren a esas empresas. Y además la AEPD (Agencia Española de Protección de Datos) insta a las empresas a realizar dicho “cambio” antes del día 29 de enero, para poder cumplir con la LOPD.

Si se tuviera que definir el impacto en una empresa con una sóla palabra, yo usaría una: brutal. Existen muchas empresas que basan su infraestructura en Google Apps, sobre todo pequeñas empresas, o almacenamiento en la nube mediante servicios que tiene su base en EEUU, el más conocido es Dropbox. Ahora miles de administradores de sistemas, tienen que estar preguntándose como afrontar la posibilidad de realizar cambios en la infraestructura de su empresa, para cumplir la ley y para permitir que todo siga funcionando como antes. Tengamos en cuenta que más o menos afecta a los servicios habituales de una empresa: hosting web, correo electrónico, mensajería, y almacenamiento online.

¿Soluciones?

Si os veis en el mismo problema que el resto, es decir necesidad de orientación, creo que tendríais que leer lo siguiente antes de continuar, o lanzaros al suicido colectivo:

  • El artículo de este periódico digital aclara lo que puede suceder a partir del día 29. También indica que la AEPD juega con cierta ambigüedad.
  • Ir a la fuente, la AEPD, donde indica excepciones y el estado del tratado “Safe Harbour”.
  • Este excelente análisis publicado en otro periódico digital.

Y como solucionarlo, pues no está del todo claro, aunque se están proponiendo soluciones por parte de las empresas, donde cada empresa europea, tiene que firmar un contrato con la empresa situada en EEUU donde se recogen todas la clausulas que permiten operar legalmente dentro de Europa, una de las primeras que ha tomado esta solución es MailChimp. Quizás esto sea una solución por un tiempo, pero no se sabe con exactitud que desenlace va a tener dicho entuerto.

Referencias usadas en el texto:

Share

HOW TO: Unir mucho shapefiles en un solo shapefile con GDAL en Windows

Si trabajas con cartografía es normal que te den un montón de shapefiles como respuesta a “necesito el vectorial de una zona”, y en algunos casos (en el mío) no es manejable cuando su número es mayor de 1000 ficheros.

Para unir todos los ficheros, y de paso borrando las geometrías repetidas, podemos usar la fabulosa herramienta ogr2ogr del paquete GDAL, que puedes obtener desde el instalador de la OSGeo4W que nos permite instalar de manera sencilla GDAL compilado para Windows. Creo que esta parte es suficientemente sencilla como para explicarla, pero si hay dudas, deja un comentario.

Una vez instalado, entramos en “Inicio > OSGeo4W > OSGeo4W Shell”, y vamos a la ruta donde tenemos la montonera de shapefiles. Y creamos el siguiente fichero “.bat” dentro del mismo directorio:

@echo off
mkdir merged
set counter=0

setlocal ENABLEDELAYEDEXPANSION

for %%f in (*.shp) do (
	if not exist merged\mergedFilter.shp (
		echo Uniendo %%f
		ogr2ogr -f "ESRI Shapefile" merged\mergedFilter.shp %%f
	) else (
		echo Uniendo %%f - Iteracion !counter!
		ogr2ogr -f "ESRI Shapefile" -update -append merged\mergedFilter.shp %%f  
		if !counter! GTR 500 (
			echo Simplificando %%f
			ogr2ogr -f "ESRI Shapefile" merged\mergedFilterAux.shp merged\mergedFilter.shp -sql "SELECT * FROM mergedFilter GROUP BY id_parcela" -dialect sqlite
			del merged\mergedFilter.*
			ren merged\mergedFilterAux.* mergedFilter.*
			set counter=0
		)
	)
	set /A counter=counter+1
)

Este código tendrás que adaptarlo a tus necesidades, por ejemplo lo nombres de los fichero y demas, pero te cuento lo que hace:

  • Va leyendo todos los fichero del directorio donde se ejecuta
  • Une el fichero con un fichero que se va creando dentro de “merge/mergedFilter.shp”
  • Cada 500 uniones, borra todas las features que tengan el mismo “id” (en tu caso puede que sea diferente y tengas que usarlo comprobando la geometria).

Le das unas horas, y al final tendrás un fichero Shapefile gigante… pero al menos uno.

Share

Pantalla en blanco tras actualizar OwnCloud 7 a 8

Quien me mandaría a mí… si algo funciona no hay que tocarlo. O eso me dicen habitualmente. Pero no puedo remediarlo, tengo que actualizar mis servidores.

Vayamos la grano, mi pequeña Raspberry Pi B+ llego a casa para funcionar como mi almacén online para ficheros, y utilicé Owncloud como software que instalar, junto con Ngnix. Todo funcionaba, aunque va algo lento porque uso SQLite, en vez de MySQL (creo que al final lo vamos a probar en la pequeña Raspberry). Una de las cosas más chulas es que tiene un actualizador automático (tipo WordPress) para cada versión… y claro, soy un vago y lo uso siempre.

En este caso, aparece una actualización pero no me dio y cuenta de que vamos a dar un salto de la versión 7 a la 8 (lo que me hubiera echado para atrás), por lo que lanzo la actualización sin pensar… un rato después todo termina sin problemas, voy a la pagina principal y página en blanco. A tomar por cu…

Hago una busqueda por internet, y en la primera entrada, la primera en la frente: Actualizar no esta tan fácil, si tiene activados el calendario o el gestor de contactos, aquello no funciona. Así que hay que deshabilitarlo, y a funcionar. Solo hay que lanzar estos comandos en el shell de linux:

sudo -u www-data php occ app:disable calendar
sudo -u www-data php occ app:disable contacts

No te tengo que explicar que hay que usar el usuario del servidor web (en mi caso www-data) y tener un usuario con permisos de “sudoer”. Y a disfrutar de una nueva versión.

Share

Se puede vivir sin leer los medios de AEDE

Stop Canon AEDE Ya hace tiempo que se venia hablando de “tasa Google”, o  el nuevo “canon AEDE”, o la nueva Ley de Propiedad Intelectual del gobierno del PP. La verdad que esta vez, me apeteció echar un vistazo más allá de los clásicos comentarios de Twitter y cuatro comentario de “Gurús On Fire TM”, y me puse a leer mas en profundidad.

No os voy a hacer un análisis de dicha ley, que incluye burradas como cerrar dominio .ES por vía administrativa o cosas como una tasa por enlazar otro contenido (pero… ¿eso no era la finalidad de todo esto del internet?), pero podéis leer grandes análisis por la red (que no pienso enlazar, no vaya a ser que me multen)

Me pregunte que podía hacer, para mostrar mi enfado, y me decidí a hacer lo más sencillo: no visitar las web de AEDE ni de gente que promocione dicha tasa, por lo que llevo un mes usando un plugin para Chrome llamado “AEDE blocker” y sin duda mi vida no ha cambiado.

Recomiendo el uso, y esperemos que no volvamos a ser el “hazmereir” de Europa (como siempre).

Share

Compilar Openlayers 3 en Windows, sin morir en el intento

Si eres programador, trabajas sobre SIG, y por desgracia, tienes que hacer clientes SIG Web, creo que conocerás la solución “Openlayers” que nos hace la vida mas sencilla a todos los que nos peleamos a diario con esto…

Openlayers 3 Logo

Openlayers 3

El salto de la rama 2.x a la 3.x ha sido muy dura. Incluso compilar, desde el código fuente, la rama 3.x es bastante complicado (si vemos como se trabajaba en la version 2.x). Y recompilar el código es una necesidad cuando no paran de encontrarse errores y pequeños fallos (recordemos que estamos en una beta). Errores como por ejemplo el que se comenta en este hilo respecto del manejo de las capas “ImageStatic” como fuente de las imágenes.

Bueno pues manos a la obra.

Requisitos:

Os dejo una lista, instala todos por defecto y que estén en el disponibles en el PATH:

  • Git
  • Node.js
  • Python 2.6/2.7
  • Java 7 (yo usé el JRE)

Una cosa muy curiosa es que Python se tiene que instalar en “C:\Python27” o “C:\Python26” o no funcionará este sistema.

Git haz tu trabajo

Nos traemos el repositorio entero de OL3 desde Github (te recomiendo una ruta corta, tipo “C:\ol3” que es la que voy a usar a lo largo del manual):

git clone https://github.com/openlayers/ol3.git

Esto tardará un rato… es la hora del café!

Dependencias… y algo de magia

Bien, ahora comprobamos si tenemos todo lo que necesitamos:

C:\ol3>build.py checkdeps
Program "./node_modules/.bin/cleancss" seems to be MISSING.
Program "git.exe" seems to be present.
Program "C:Python27\Scripts\gjslint.exe" seems to be MISSING.
Program "C:\Program Files\jsdoc3\jsdoc.cmd" seems to be MISSING.
Program "./node_modules/.bin/jshint" seems to be MISSING.
Program "C:Python27\python.exe" seems to be MISSING.
Program "C:phantomjs-1.9.7-windows\phantomjs.exe" seems to be MISSING.
For certain targets all above programs need to be present.

Fue bonito mientras duró (no iba a funcionar a la primera 🙂

Pero vamos a realiza un par de comandos que nos van a arreglar el asunto:

npm install

Instalará bastantes cosas… otro café?. Por último:

C:\ol3>c:\Python27\Scripts\easy_install.exe http://closure-linter.googlecode.com/files/closure_linter-latest.tar.gz
C:\ol3>c:\Python27\Scripts\easy_install.exe pystache 

Y… redoble de tambores:

C:\ol3>build.py checkdeps
Program ".\node_modules\.bin\cleancss.cmd" seems to be present.
Program "git.exe" seems to be present.
Program "gjslint.exe" seems to be present.
Program ".\node_modules\.bin\jsdoc.cmd" seems to be present.
Program ".\node_modules\.bin\jshint.cmd" seems to be present.
Program "python.exe" seems to be present.
Program ".\node_modules\.bin\phantomjs.cmd" seems to be present.
For certain targets all above programs need to be present.

Y ahora la parte más difícil…

… Compilar. Hay mucho fallos en la versión para Windows de los scripts, por lo que hay que bucear un montón por los foros de GitHub para encontrar la solución a problemas en los scripts (rutas largas, directorios que no existen, rutas linux, etc…) yo lo he conseguido, con los scripts siguientes:

Scripts ol3-fix

Descomprime en el raíz del repositorio de Openlayers, y ya puedes lanzar el build.

C:\ol3>build
2014-10-23 11:57:44,256 build/ol.css: .\node_modules\.bin\cleancss.cmd css/ol.css
2014-10-23 11:57:44,424 build/ol.js: node tasks/build.js config/ol.json build/ol.js
info ol Parsing dependencies
info ol Compiling 333 sources
2014-10-23 11:58:06,733 build/ol.js: uncompressed:   406514 bytes
2014-10-23 11:58:06,733 build/ol.js:   compressed:   121282 bytes, (saved 70.17%)
2014-10-23 11:58:06,734 build/ol-debug.js: node tasks/build.js config/ol-debug.json build/ol-debug.js
info ol Parsing dependencies
info ol No compile options found.  Concatenating 333 sources
2014-10-23 11:58:10,434 build/ol-debug.js: uncompressed:  3276814 bytes
2014-10-23 11:58:10,436 build/ol-debug.js:   compressed:   603658 bytes, (saved 81.58%)

Sólo busca en el directorio “build” por las versiones de “debug” y “compressed”.

Referencias:

Share

NET: Como convertir el CLR una app en “AnyCPU” en “32bits”

Os propongo un escenario:

  • Aplicación desarrollada en .NET, hace mucho tiempo, y a decir verdad, con la mitad de los conocimientos que tenemos ahora.
  • Por desgracia, se compiló como “AnyCPU” (lo que se ha demostrado como un error a lo largo del tiempo).
  • Ahora lo lanzas, y te encuentras con un: “Error en microsoft.jet.oledb.4.0”. Tras leer, te das cuenta que esto se arregla recompilando en “x86”
  • … Solo tengo el ejecutable, y unas horas para presentar el programa (música de terror de fondo…)

Bueno, pues hay un trucoquillo para marcar un ejecutable de .NET, compilado en AnyCPU, como un ejecutable x86, ya que realmente, solo hay que cambiar un campo en la cabecera (más o menos). ¿Cómo?, ahora te lo explico:

  • Doy por sentado que tienes el SDK de desarrollo del NET o el Visual Studio en cualquier de sus sabores (con el componente “Developer Tools -> Windows Development Tools -> .NET Development Tools” instalado)
  • Te metes en: “Program Files\Microsoft SDKs\Windows\v6.1\Bin” (ojo el v6.1 es para NET 3.5, para NET 4.x cambiará obviamente) y allí tienes que encontrar un fichero “corflags.exe”.
  • Ejecutas:
    corflags /32bit+ <RutaATuEjecutableANYCPU>

    Y tachán. Ejecutable en 32bits :).

Referencias:

  • http://stackoverflow.com/questions/1507268/force-x86-clr-on-any-cpu-net-assembly
  • http://stackoverflow.com/questions/242304/where-should-i-download-corflags-exe-from

Share

Yoigo y su estúpido sistema de portabilidades

Un día (maldito sea), no hace mucho, tuve la ocurrencia de mirar mi factura del móvil, horrorizarme al ver el dineral que pago, y comparar mi tarifa actual con Orange, con la ofrecian otros operadores. Y aunque no estoy descontento con Orange (en general), me encontré que la diferencia de precios era tan abismal que incluso me sentí estafado. Curiosamente, ese mismo día, Yoigo lanzaba su fabulosa “tarifa del 2“. ¿Conjunción astral, Jesús mostrándome el camino?, yo pensé que estaba claro, esa tarifa era para mí. ¡¡¡Esto es lo que necesito!!!, y gritaba por casa, mientras mi mujer se llevaba a casa a mi hijo para que tenga una adolescencia feliz y sin traumas.
Recapacitando sobre mi uso del móvil, yo apenas llamo a nadie, utilizo bastante el 3G y quiero tener una factura mucho menor. Total, eche cuentas de minutos, llamadas y más chorradas de las crípticas facturas que nos envían los operadores, y me salía un ahorro de casi 10 euros por mes. Oye, con la que esta cayendo, bienvenidos sean.

Total, me voy a una tienda Yoigo después del trabajo, donde muy amablemente una señorita me indica que tengo que llevar una factura de mi anterior operador (ein?). Le digo que ya volveré y pienso (iluso de mí), lo hago por internet, me ahorro el papeleo y santas pascuas, no tengo que buscar facturas y recibos, ni leches.

Entro en la web de Yoigo. Mis pupilas se llenan de color, ofertas, móviles que no me van a dar, buen rollo, verdad verdadera, y mierdas varias. ¿Donde se inicia la portabilidad?, vamos al toro. Relleno todos mis datos, mi DNI, mi cuenta bancaria y llego feliz al último paso, pero… sorpresa: No soy aceptado como cliente de contrato, eso si como prepago tengo la puerta abierta.
¿Lo qué?, ¿tan feo soy?. Lo divertido es que te lo anuncian como si fuera un error del sistema, faltaría un “E-335AE” y un busca en Google, con mensajito que indica que no te pueden hacer la portabilidad, sin muchos detalles y te animan a llamar a su teléfono de atención al cliente. Y seamos sinceros, cuando me encontré esto, pensé en lo que pasa cuando llamas a un teléfono de atención al cliente, y preferí ver la tele a tirarme 2 horas colgado del teléfono.

Mientras veía la tele, busqué por Internet, si yo era el único que no era el elegido para pertenecer a la santa institución de Yoigo. Pues no. Somo muchos (otro, otro, y otro más… por dar unos ejemplos) , y es debido a una cosa llamada Scoring, que sirve para catalogar el riesgo como cliente que afronta la empresa por aceptarse, y que puede resumirse en un sistema automático (y obviamente propenso a fallar si esta mal hecho) donde me habían catalogado como no apto. ¿Porqué?… nadie lo sabe, quizás algún conjuro arcando, el ASNEF, o que no eres de fiar por alguna razón. Incluso los mismos de Yoigo parece que no tienen ni puta idea de nada, por lo que ponen en su Facebook.

¿Hace falta que os diga que soy solvente, sin ningún tipo de deuda, y con cuenta bancaria saneada?. Vale, pues ninguno de estos puntos son importantes para el Scoring.

Vale, empieza el reto. ¿Cómo se soluciona esto y por el mínimo esfuerzo?.
Mis primero pasos fueron encaminados a contactar el twitter de Yoigo (@somosyoigo) y contarle que tenía problemas con una portabilidad. Amablemente el “Social Media” que esta detrás de esta cuenta, me indico un correo donde remitir mi nº de teléfono y DNI, para “analizar mi caso”. Obviamente, no obtuve respuesta de ningún tipo, empezamos bien.
Mi segundo paso, fue el rastreo por las webs, donde puedes encontrar de todo, pero si añades a tu busqueda el término “scoring” las cosas cambia: gente echando pestes. Y como no, todos coincidían en ir a la tienda con papeles. Al parecer hay que hacer un re-análisis de tu situación llevando 2 facturas y sus correspondientes recibos y ya te dirán. Vale, genial.

Al día siguiente, haciendo un esfuerzo sobrehumano para contratar (ojo, quiero pagar, no recibir dinero), me afeito (bueno quizás no), me cambio la muda, me pongo mi mejor camiseta de los Ramones, y voy a la tienda con todo el papeleo. La misma chica me recibe con los brazos abiertos, intenta la portabilidad en su sistema, y me dice que no puede ser, que no soy suficientemente atractivo como cliente, y me enseña el mismo mensaje que ponen en la web que podemos usar todos. Bien, información y transparencia, sin razón aparente por la cual me rechazan. Le ofrezco como sacrificio las facturas, con sus correspondientes adeudos del banco, para que el dios Yoigo me permita entrar con ellos a formar parte de ese Nirvana que tiene que ser darles dinero todos los meses por un servicio. Me dice que en 24/48 horas tendré contestación. Le digo a la chica que para la hipoteca llevé menos cosas, ella me sonríe y me dice que “son así de gilipollas“.

Mi vida sigue, anodina como siempre. Y dos días después, recibo una llamada de otra chica que identifica como comercial de la tienda Yoigo, y empieza la fiesta:

Oyes, no nos vale lo que has traído, ya que en los adeudos no sale tu nombre, por lo que no eres titular de la cuenta. O nos traes eso o nada, es un adeudo con tu nombre o no puedes darte de alta en Yoigo.
– Hem… creo que hay un error. Si soy titular, de hecho cotitular con mi mujer y porque su apellido empieza por “A”, sale antes que mi apellido, y aparece como el cliente en el espacio reservado dentro del adeudo, ya que solo entra un nombre. Es lo que me da el banco. – Me oigo a mi mismo. ¿Porqué coño le estoy contando esto yo a esta tía?. Que comprueben ellos si es mi cuenta o no.
Oyes, que no me vale. Que me tienes que traer un adeudo de un recibo donde salga tu nombre. – Su voz suena como un robot.
– ¿¿¿Como???. Te repito, soy titular de la cuenta.
Si, que vale, pero trae el adeudo que salga tu nombre.
– A ver, te puedo acercar si quieres la cartilla para que veas que soy titular de la cuenta, pero no pretenderás que vaya al banco a que me hagan un recibo especial a lo que Yoigo quiere. Eso tendría que comprobarlo Yoigo, si soy o no titular de la cuenta que he puesto.
Bueno, si. Trae la cartilla, pero trae un adeudo con tu nombre… – En este momento, me cabreo. O eso, o tengo una enfermedad extraña que hace que se me inflen las gónadas. Para dejar claro el asunto, le digo muy despacio lo siguiente:
– Es decir, tengo que ir al banco, dejar de trabajar, pedir por favor que me haga un papel con mi nombre (que no se si serán capaces ya que su web no me permite hacer eso), mandarlo otra vez a Yoigo, para que si les apetece, ¿me acepten en su secta?
Si.
– Vale déjalo… ya no quiero ni portabilidad ni ostias.

Enfadado me voy a tomar un café, se lo cuento a los compañeros de trabajo (que son Yoigo) y se parten el pecho de mi situación. Genial, a la mierda. Recapacito. ¿Pero que mierdas estoy haciendo?, soy solvente, no tengo deudas (salvo una hipoteca como todo hijo de vecino), y gano suficiente dinero para considerarme capaz de pagar el recibo. ¿Porqué me estoy mareando?.

Me doy media vuelta, abro un navegador en el PC, voy a la web de PepePhone. En menos de 2 minutos, sin pedirme nada, soy de PepePhone, con una tarifa muy parecida a la de Yoigo.

Resumen: Vete a la mierda Yoigo. Si no quieres clientes, no ofrezcas dar de alta nuevos clientes. ¡Hola PepePhone!.

Share

Geoserver en entorno de producción (VI): Cacheando mediante MapProxy

Logo MapProxy

Si os fijáis, tener un servidor de mapas no es “ligero”, ya que por defecto, genera todas la capas al vuelo, reproyecta y cambia de formato… ¡Aunque pidamos dos veces lo mismo!.
Por lo tanto: usa mucha cantidad de CPU, memoria y incluso disco. Si pensamos en subirlo a la nube, y usar el Amazon para servir tus mapas, por poner un ejemplo, tendrías que pensar en controlar mucho el consumo  y de no encontrarnos con alguna sorpresa en la factura de algún mes.

Pero esto tiene solución, claro. La idea es cachear el trabajo, y lo vamos a hacer mediante un servicio de proxy geoespacial que guardará los mapas generados para no tener que volver a generarlos y gastar tiempo/recursos. Para esta tarea, usaré “MapProxy ya que es el desarrollo mas maduro y versátil que he encontrado. Está montado sobre Python, y su montaje es “relativamente” sencillo, si tienes una buena guía, como esta, por ejemplo.

Preparar el entorno

Empecemos, vamos a instalar todo lo necesario para empezar. Utilizaremos nuestro querido “apt-get” para bajar todas la librerías que necesitamos.

sudo aptitude install python-imaging python-yaml libproj0 libgeos-dev python-lxml libgdal1-dev python-shapelyy build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev

Aparte, bajamos la herramienta de creación de un entorno independiente de Python. ¿Que hace esto?, pues generar un entorno virtual Python dentro de un entorno real de Python, para que nos entendamos, tener siempre una versión de Python, aunque en el sistema este cambie.

wget https://raw.github.com/pypa/virtualenv/1.7.1.2/virtualenv.py

Creamos el entorno virtual, y le damos permisos para poder escribir sin ser root. Este paso no es necesario, pero es muy cómo para trabajar desde cualquier usuario normal.

virtualenv /var/local/mapproxy/venv
chmod ugo+x -R /var/local/mapproxy/venv

En este momento ya disponemos de un entorno virtual Python, y se encuentra dentro de “/var/local/mapproxy“, y lo usaremos  para trabajar e instalar MapProxy.

Para activarlo (esto significa que usaremos el Python virtual, no el real), tendremos que ejecutar el comando “source“. Si no hacemos este paso, será como si no existieran todas las herramientas que vamos instalar posteriormente. Por lo tanto este paso es muy importante.

source /var/local/mapproxy/venv/bin/activate
# Fijate como ha cambiado el prompt, y nos indica que estamos en un "venv" o entorno virtual.
(venv)admin@svrmapas:~$
# Si queremos salir del entorno virtual, NO lo uses aun, usa este comando:
deactivate

Usando PyIP para dejar nuestro Python perfecto

Este herramienta, que en adelante llamaremos PIP, es como el “apt-get” pero solo para Python. Es muy sencilla de usar, y de verdad, nos facilitará la instalación de todas las librerías Python. Pasemos a instalar todas las librerías:

pip install https://bitbucket.org/olt/pil-2009-raclette/get/default.tar.gz # Para uso avanzado de PNG
pip install flup # Servidor fcgi
pip install MapProxy
# Si MapProxy necesita dependencias que no tienes, se las bajará.
# Esto puede tardar.

Configuración básica para MapProxy y test del servicio

Ahora creamos una configuración por defecto para MapProxy. Esto es una configuración por defecto que consulta unos mapas (creo recordar que del OpenStreetMap, pero no estoy seguro) y nos sirve para testar que nuestra instalación de MapProxy funciona. No voy a entrar mucho más allá, pero puedes consultar el manual de MapProxy para configurarlo.

mapproxy-util create -t base-config /var/local/mapproxy

Vale, tenemos la configuración básica, pero quiero ver algo. La gente de MapProxy son muy listos y nos permiten lanzar un servicio de test, solo usando herramientas de Python.

cd /var/local/mapproxy
# Yo le he pasado la ip y el puerto de escucha ya que tengo un Tomcat
# escuchando por el puerto 8080 que es el defecto que usa.
mapproxy-util serve-develop -b 192.168.0.100:8081 mapproxy.yaml

Con este comando, tendremos un servidor escuchando por el puerto 8081, es decir se podrá acceder a dicha cache mediante la URL:

http://192.168.0.100:8081/service?

Este servicio lo podremos testar mediante el uso de algún cliente GIS que tenga soporte para WMS, como por ejemplo “gvSIG” que permite la consulta a servidores WMS.

Ahora, a producción

Ahora habrá que utilizar, algún método para desplegar el servicio de caché de manera que de el mejor rendimiento. Yo he optado por FastCGI sobre un servidor “Apache2”, ya que estoy muy familiarizado con este sistema, pero hay muchas otras formas de hacerlo como indican en la documentación oficial y en otras guías.

sudo apt-get install libapache2-mod-fcgid

Ahora creamos un fichero “mapproxy.fcgi” con el siguiente texto:

#!/var/local/mapproxy/venv/bin/python
# WSGI module for use with Apache mod_wsgi or gunicorn
# # uncomment the following lines for logging
# # create a log.ini with `mapproxy-util create -t log-ini`
# from logging.config import fileConfig
# import os.path
# fileConfig(r'/var/local/mapproxy/log.ini', {'here': os.path.dirname(__file__)$

from mapproxy.wsgiapp import make_wsgi_app
application = make_wsgi_app(r'/var/local/mapproxy/mapproxy.yaml')

if __name__ == '__main__':
    from flup.server.fcgi_fork import WSGIServer
    WSGIServer(application).run()

En este script, hay varias cosas a destacar:

  • La primera linea tiene que indicar donde está el fichero de python del entorno virtual. NO vale con el python que tiene instalado el servidor, ya que no tendrá instalada ninguna de las librerías anteriores.
  • Esta línea: make_wsgi_app(r’/var/local/mapproxy/mapproxy.yaml’) indica donde esta el fichero .yaml donde has configurado todas las capas que consultara MapProxy. Esto es muy extenso y te recomiendo el manual de la web de MapProxy.

Tras esto configuramos el servidor web Apache, incluyendo esta línea al final de fichero “/etc/apache2/mods-available/fcgid.conf“:

[...]
# Tiene que tener la configuración del módulo arriba
ScriptAlias /mapproxy /var/local/mapproxy/mapproxy.fcgi

Y ahora un paso muy oscuro, tiene que poner como propietario al usuario que maneja el servidor web de TODA la carpeta de MapProxy. No sé si se podrá solo dar permisos en ciertos lugares, pero es lo único que me ha funcionado.

chown apache /var/local/mapproxy/ -R

Reinicia Apache, y ahora tendrás que tener accesible la web de prueba de MapProxy en “http://server/mapproxy” y el servidor WMS está en “http://server/mapproxy/service?“.

Otra guerra, es la configuración correcta para servir mallas… no me veo con fuerza hoy de escribir, ya que ese si sería un gran manual.

Documentación usada:

Share

Corrigiendo el error de “Automatic crash report generation” al arrancar Ubuntu 11.10

Se que soy un poco pijo para mis instalaciones de Ubuntu, pero detesto que muestre fallos en los arranques, y uno muy curioso que está dándome en una instalación nueva de Ubuntu Server 11.10 es que muestra un error al arrancar “Automatic crash report generation” dejando un error marcado en la consola.

Este servicio, el que provoca el error, es Apport, y es el encargado de generar reportes de error cuando una aplicación se sale de manera no controlada y no tiene un sistema propio de reporte de errores.

Para solucionar esto, solo hay que hacer:

sudo nano /etc/default/apport  # Poner a 1 el campo "Enabled"
sudo reboot

Tras esto no tendrías que tener más ese maldito error en pantalla.

Share

Backup rápido entre máquinas con rsync

Aunque no voy a entrar en profundidad en el tema de como montar un servidor rsync, ya que hay muchos manuales y es muy sencillo de montar en un servidor Linux, os voy a dejar mi receta, rápida, para montar un backup de una máquina remota en otra mediante rsync y sin muchos problemas.

Esto lo suelo usar para replicar información importante que siempre necesita tener un backup idéntico. No hace copias incrementales, si no un espejo de lo que hay en un disco a otro. Si el usuario borra una carpeta, en el backup también se borrará. Pero hay scripts para hacer copias incrementales con rsync por internet… no tardarás en encontrarlos.

Partimos que tenemos una máquina con rsyncd configurado y funcionando, pues para hacer un backup rápido, solo hay que hacer:

rsync -Eavz --delete-after --stats --progress --password-file=/etc/rsync.pass /directorio/a/salvar/ rsync://rsync@megaNAS/CompartidoRsync/

Como verás he indicado un directorio donde se almacena el password para el servidor rsync remoto, que no es más que un fichero con el password en texto plano. Pero es importante que tenga los permisos solo para el usuario.

chmod 600 /etc/rsync.pass

Se que lo ideal es montar un follón de certificados para que no te pida password, pero con un fichero nos ahorramos todos los problemas. Ahora metemos esta linea en el fichero de crontab… y ya está.

Share