viernes, 29 de mayo de 2009

Debian Etch: Problemas con hardware clock (Argentina)

Toda esta mañana me ha tomado poder solucionar un problema que a simple vista puede ser de lo MAS TRIVIAL:
Cambiar la hora en un sistema Debian Linux y que quede permanente ese cambio una vez reiniciada la maquina para la zona horaria de ARGENTINA.
Bueno, el problema surgio cuando trate de sincronizar el reloj de las BIOS con el del sistema mediante:

# hwclock --hctosys
Cannot access the Hardware Clock via any known method.
Use the --debug option to see the details of our search for an access method.

Ok! hagamos un debug entonces!

# hwclock --debug
hwclock from util-linux-2.12r
hwclock: Open of /dev/rtc failed, errno=16: Dispositivo o recurso ocupado.
No usable clock interface found.
Cannot access the Hardware Clock via any known method.

Intente muchas cosas que se sugieren en internet, hasta agregarle a la linea del kernel en grub 'noapic nolapic acpi=noacpi acpi=off' sin ningun tipo de exito.

Entonces se me ocurrio sincronizar el reloj del sistema con algun servidor ntp en internet, sabiendo que cuando no haya internet tampoco va a haber sincronizacion.

# ntpdate -d lerc-dns.lerc.nasa.gov
(este server es uno entre tantos que probe...)

Despues de una larga espera en silencio:

29 May 13:38:32 ntpdate[3217]: ntpdate 4.2.2p4@1.1585-o Sun May 10 17:09:17 UTC 2009 (1)
transmit(139.88.35.33)
transmit(139.88.35.33)
transmit(139.88.35.33)
transmit(139.88.35.33)
transmit(139.88.35.33)
139.88.35.33: Server dropped: no data
server 139.88.35.33, port 123
stratum 0, precision 0, leap 00, trust 000
refid [139.88.35.33], delay 0.00000, dispersion 64.00000
transmitted 4, in filter 4
reference time: 00000000.00000000 Thu, Feb 7 2036 6:28:16.000
originate timestamp: 00000000.00000000 Thu, Feb 7 2036 6:28:16.000
transmit timestamp: cdca63db.2ad9ad85 Fri, May 29 2009 13:38:35.167
filter delay: 0.00000 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000
filter offset: 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0.000000 0.000000
delay 0.00000, dispersion 64.00000
offset 0.000000

29 May 13:38:36 ntpdate[3217]: no server suitable for synchronization found

Asi que buscando informacion se me sugiere que quizas iptables este bloqueando el puerto 123, el cual es el responsable de sincronizar nuestro reloj de sistema con un servidor reloj dedicado.
Bien... la mañana va pasando y ahora se me pide que averigue sobre el tema de iptables...
No me doy por vencido, debe de haber otra forma...
Recuerdo entonces que en /usr/share/zoneinfo estan todas las tablas de uso horario, pero ademas encuentro un enlace llamado localtime, entonces averiguo un poco mas sobre él:

# ls -l /usr/share/zoneinfo/localtime
lrwxrwxrwx 1 root root 14 2009-05-29 11:45 localtime -> /etc/localtime

¡Bien! apunta a /etc. ¿Y si renombro 'localtime'? ¿que sucedera? ¿Debian interpretara que no tiene parametros de hora local y se volvera hora universal?

# mv /etc/localtime /etc/localtime.old
# date
vie may 29 13:59:42 UTC 2009

¡EXCELENTE! ahora esta es la hora que queria queria ver.
Ya que es una solucion medio atada con alambre, pero sinceramente no disponia de tanto tiempo para investigar este problema, que arranca avisando que el dispositivo de bloque /dev/rtc esta ocupado por otro recurso el cual desconozco.

Tambien no me debo de olvidar que en /etc/default/rcS tengo una opcion que dice UTC=yes y que se hablo mucho en los foros como posible solucion cambiarlo a 'no'. No lo he probado. Pero mi problema se ha solucionado.
Gracias por leer!

Debian etch: W: GPG error: http://ftp.us.debian.org etch Release

Un pequeño problemita que tuve esta mañana en un servidor Debian Etch, trate de hacer un simple 'apt-get update y obtuve el siguiente error:

# apt-get update

W: There is no public key available for the following key IDs:
9AA38DCD55BE302B
W: GPG error: http://ftp.us.debian.org etch Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 9AA38DCD55BE302B
W: Tal vez quiera ejecutar 'apt-get update' para corregir estos problemas

Se soluciona rapidamente ejecutando:

# apt-get install debian-archive-keyring --reinstall

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Se actualizarán los siguientes paquetes:
debian-archive-keyring
1 actualizados, 0 se instalarán, 0 para eliminar y 82 no actualizados.
Necesito descargar 12,8kB de archivos.
Se utilizarán 4096B de espacio de disco adicional después de desempaquetar.
AVISO: ¡No se han podido autenticar los siguientes paquetes!
debian-archive-keyring
¿Instalar estos paquetes sin verificación [s/N]? s

Gracias por leer!

jueves, 28 de mayo de 2009

Mapserver (II): mi primer experiencia

Bueno, aca dejo lo que documente como primer experiencia, despues de esto a volar solos:

PARTE 2: EJEMPLOS

hola mundo
Antes que nada saber que los cambios efectuados en mapserver 5.2.2 en algunos casos han sido radicales.
Lo primero es crear en el repositorio de datos /home/mapdata, nuestro mapfile (archivo de configuracion y construccion de nuestro mapa).
En este caso se va a llamar hola.map

Recomiendo por el momento, o darle todos los permisos a este directorio, o bien asignarlo a nuestro usuario o anexarlo a nuestro usuario junto al user nobody.
Ver 'man usermod' 'man chown' y 'man chmod'.

Una vez hecho lo anterior, creamos el archivo:
$ touch hola.map

usamos nuestro editor de texto y tipeamos:
MAP
# Este es nuestro 'hola mundo' mapfile
NAME "Hello_Word"
SIZE 400 300
IMAGECOLOR 249 245 186
IMAGETYPE png
EXTENT -1.00 -1.00 1.00 1.00
WEB
TEMPLATE "/var/www/html/hola.html"
IMAGEPATH "/var/www/html/tmp/"
IMAGEURL "/tmp/"
END
LAYER
STATUS default
TYPE point
FEATURE
POINTS 0.0 0.0 END
TEXT "HOLA MUNDO"# USA 2 ESPACIOS!
END # end FEATURE
CLASS
STYLE
COLOR 255 0 0
END
LABEL
TYPE bitmap
END
END # end CLASS
END # end LAYER
END # end MAPFILE
END

Podemos ver la frase "HOLA MUNDO" y entre las dos palabras un diminuto punto rojo.

Palabras claves usadas en este mapfile
MAP: Declaracion fundamental, en la primera linea de nuestro mapfile. Indicamos que este archivo es un mapa
NAME: Este es el nombre de nuestro proyecto, el cual se replicara a todos los archivos relacionados.
SIZE: Tamaño del area de vizualizacion del mapa.
IMAGECOLOR: Color de fondo del area de visualizacion en formato RGB(*).
IMAGETYPE: Tipo de imagen resultante final, en este caso 'png'.
EXTENT: (**).
WEB: instertar un obejto web en el proyecto, se cierra modulo con END.
TEMPLATE: path donde se encuentra la plantilla html (en este caso hola.html) dentro del DocumentRoot del server apache.
IMAGEPATH: path donde se encuentran las imagenes dentro del DocumentRoot del server apache.
IMAGEURL: Referenciado al raiz del DocumentRoot (html/) del server apache.
LAYER: Objeto de representacion de elemento a renderizar, tambien se puede pensar como una capa, se cierra con END.
STATUS: estado on|off de renderizacion.
TYPE: tipo de elemento a crear para luego ser renderizado (en este caso un punto).
FEATURE: Creacion de las caracteristicas del objeto, se cierra con END.
POINTS: lista 2 pares de coordenadas que representaran al punto.
TEXT: Muestra un texto en pantalla.
CLASS: Objeto de clase, define los atributos del punto en este caso, se cierra con END.
STYLE: Objeto de estilo del simbolo, el punto en este caso.
COLOR: color del punto.
LABEL: Objeto etiqueta. Define tipos de fonts, tamaño, color, etc. Cierra con END.
TYPE: Objeto tipo, especifica el tipo de font usado, en este caso 'bitmap' indica a MapServer que utilice su propio renderizado interno.
Las dos posibilidades son:
bitmap y truetype
END: indica el cierre de cada declaracion de objetos.

Los paths, representaciones de caracteres tales como 'TEXT' SIEMPRE deben indicarse con comillas, simples o dobles, es indistinto.
(*)FORMATO RGB: Se expresa en una terna de nros octales, representando cada unidad un color basico (Red - Green - Blue) el cual el '0' representa la ausencia de color, llegando al nro. maximo representado por el '255' indicando presencia total del color, asi una indicacion tal como '0 0 0' representara el colo NEGRO, una '255 255 255' representara el color BLANCO y en este caso una '255 0 0' al color ROJO.

(**)EXTENT: representacion de la extension (area rectangular) del mapa en dos pares de unidades de valor, con coordenadas en esquinas opuestas. un ejemplo a este EXTENT seria: EXTENT [X(x' y')] [Y(x'' y'')].
Esto se representaria graficamente de la siguiente forma aproximada:
1 area definida por EXTENT:
Ahora necesitamos crear el archivo de invocacion e inicializacion de nuestro mapfile, que sera guardado dentro de nuestro DocumentRoot en apache (en este caso /var/www/html)
# touch hola.html

insertamos en él:<br /><br /><br /><br />

<!-- MapServer Template -->

<html>

<head><title>MapServer HOLA MUNDO</title></head>

<body>

<form method=POST action="/cgi-bin/mapserv">

<input type="submit" value="cliqueame">

<input type="hidden" name="map" value="/home/mapdata/hello.map">

<input type="hidden" name="map_web" value="imagepath /var/www/html/tmp/ imageurl /tmp/">

</form>

<IMG SRC="[img]" with=400 heigth=300 border=0>

</body>

</html>

Como se puede observar, es una pequeña pagina web, la cual envia todos los datos necesarios, para poder mostrar a posteriori la representacion grafica.

Cabe destacar que el tag [img] no es una URL valida, pero MapServer la utiliza como variable interna de generacion y representacion de la imagen creada, entonces, la 1era vez que ejecutemos hola.html, veremos un vinculo roto de imagen, luego al hacer clic y pasar los datos a MapServer, éste generará un grafico y lo alojara donde anteriormente lo definimos en nuestro hola.map.

Una vez generada la imagen esta se representara, reemplazando el tag [img] por el correspondiente, recien creado.
Cabe destacar que para no perder 2 dias de tiempo tratando de solucionar errores, es fundamental tomar como parametro este documento html para futuras implementaciones.

He aqui los errores mas comunes
En el navegador:
***msLoadMap(): Unknown identifier. First token must be MAP, this doesn't look like a mapfile.***
Solucion:
Falta la palabra clave 'MAP' en la 1er linea de nuestro hola.map

En el navegador:
Content-type: text/html isValidTemplate(): Web application error. Missing magic string, /var/www/html/hola.html doesn't look like a MapServer template.
Solucion:
Agregar en la 1era linea de nuestro archivo de inicializacion 'hola.html':


En el navegador:
loadWeb(): Unknown identifier. Parsing error near (/var/www/htdocs/tmp/):(line 1)
Solucion:
En viejas representaciones de MapServer se utilizaba en nuestro hola.html algo como esto:

Actualmente MapServer redefinio la forma de recibir los datos via CGI, asi que este tipo de linea debe ser reemplazado por este tipo:

ADVERTENCIA: los paths son solo meramente ilustrativos, tu configuracion puede ser diferente!

En el navegador:
****ERROR: msPostMapParseOutputFormatSetup(): General error message. Unable to select IMAGETYPE `JPG'.
Solucion:
No reconoce la sintaxis JPG, cambiar en la plantilla (primero.map) JPG por JPEG.
Estos son los errores que obtuve mientras trabajaba con MapServer.

FIN DEL DOCUMENTO
gracias por leer!

Instalacion & configuracion de MAPSERVER en FEDORA 10 (I)

He tenido la bienaventurada oportunidad de empezar a trabajar con MAPSERVER.
Si no sabes que es MAPSERVER:
MapServer es un entorno de desarrollo en código abierto (Open Source Initiative) para la creación de aplicaciones SIG en Internet/Intranet con el fin de visualizar, consultar y analizar información geográfica a través de la red mediante la tecnología Internet Map Server (IMS).
(de WikiPedia en español)

PARTE 1: INSTALACION & CONFIGURACION
vie 17 abr 2009 12:42:25 ART
[MapServer]
Sistema huesped: Fedora10
Utilidades necesarias para correr MapServer (del libro Beginnimg MapServer de Bill Kroopa):

GD
# yum install gd
FreeType [Se encuentra instalada - actualizar]
libJPEG [instalada]
libpng [instalada]
zlib [instalada]
GDAL
# yum install gdal
Proj.4
# yum install proj proj-devel
shapelib

Ahora, instalarlo es muy sencillo, ya que lo encontramos en los repos de Fedora 10.
# yum install *mapserver*

Chequemos que funcione:
# mapserv ***This script can only be used to decode form results and ***should be initiated as a CGI process via a httpd server.

copiamos a apache:
# cp -a /usr/sbin/mapserv /var/www/cgi-bin

Controlamos su funcionamiento, para eso, en firefox tipeamos:
http://localhost/cgi-bin/mapserv

deberiamos obtener esta respuesta:
***No query information to decode. QUERY_STRING is set, but empty.

CONFIGURACION DE MAPSERVER EN APACHE
Primero, definimos un set de caracteres que usara por defecto MAPSERVER:
Crear en directorio html de apache:
# touch fontset.txt

dentro de fontset.txt escribimos:
Mono /usr/share/fonts/liberation/LiberationMono-Bold.ttf Sans /usr/share/fonts/liberation/LiberationSans-Regular.ttf Serif /usr/share/fonts/liberation/LiberationSerif-Regular.ttf

Ahora definimos los simbolos predefinidos (circulos, lineas, etc.)
Nos bajamos el fuente mapserver y copiamos del fuente de mapserver/symbols
# cp -a examples.sym var/www/html/symbols.sym

Objetos y formas (shapes)
Aca alojamos los objetos con user nobody (acceso web)
# mkdir /home/mapdata
# chown nobody:nobody /home/mapdata # chmod u+rx /home/mapdata

IMAGENES
crear un lugar donde el mapserver aloje sus imagenes generadas en apache:
# mkdir /var/www/html/tmp # chown nobody:nobody /var/www/html/tmp # chmod u+rx /var/www/html/tmp
CONFIGURACION FINALIZADA
Gracias por leer!

Una vez mas...

Trato de comunicarme ahi afuera.
Es la 3era vez que creo una bitacora, espero poder mantenerla en el tiempo.
La diferencia de esta con las anteriores, simplemente es que la pretendo usar como ayuda on-line de mis trabajos y de paso de vez en cuando tambien escribir acerca de algo politicamente incorrecto?
Parezco Minguito con todas mis anotaciones repartidas entre decenas de papeles y computadoras y sitios de internet.
Es hora de juntarlos en un solo lugar.
Desde ya gracias por tomarte el tiempo de leerme!
Abrazos!