viernes, 28 de mayo de 2010

Compilando el kernel de opensolaris 1a. parte

Al parecer todo va bien hasta ahora para compilar el kernel de opensolaris. Lleva 5 horas en un pentium 4 HT con 1.5 en RAM.

Me gustaría mostrar de manera rápida y resumida los pasos que seguí para poner a compilar el kernel.

1. Instalar opensolaris, pueden descargarlo de http://hub.opensolaris.org/bin/view/Main/downloads
la versión utilizada fue la última estable: http://dlc.sun.com/osol/opensolaris/2009/06/osol-0906-x86.iso

2.Luego de instalarlo se necesitan instalar unos paquetes, que pueden ser desde el repositorio.
* SUNWonbld
* SUNWgcc

Estos los pueden añadir directamente del administrador de paquetes. Necesitan estar conectados a Internet.

3. Mientras se instalan estos paquetes, también pueden poner a descargar el Sun Studio 12.
Para instalarlo pueden seguir las intrucciones de http://hub.opensolaris.org/bin/view/Community+Group+tools/sun_studio_12_tools


4. Preparamos el código fuente necesario, para esto recomiendo crear una carpeta, proyecto, por ejemplo:
mkdir proyecto
cd proyecto

Bajamos y descomprimimos aqui lo siguiente.

Hay que obtener el código fuente de ON, se utiliza la herramienta "mercurial" :

hg clone ssh://anon@hg.opensolaris.org/hg/onnv/onnv-gate

y los binarios que no son open source.
http://dlc.sun.com/osol/on/downloads/current/on-closed-bins-nd.i386.tar.bz2

5. Preparamos el ambiente, copiamos onnv-gate/usr/src/tools/env/opensolaris.sh onnv-gate.
Esta carpeta onnv-gate fue la que se creo cuando bajamos el código fuente de ON en el paso 4.
En la carpeta proyecto tambien descomprimimos on-closed...

Una vez copiado opensolaris.sh que nos servirá para definir todas las variables de ambiente, hay que modificar algunos parametros:

GATE al nombre de la carpeta donde esta el código fuente, por ejemplo onnv-gate
CODEMGR_WS a la ruta donde se encuentra esa carpeta, por ejemplo /export/home/hugo/proyecto
STAFFER a tu nombre de usuario
VERSION. para que aparezca tu nombre en el kernel :)

ejecutamos onbld opensolaris.sh

6. En la carpeta onnv-gate/usr/src/tools/ creamos la carpeta prod y la carpeta opt dentro de ella
luego hacemos una liga suave a la carpeta donde estan las herramientas onbld
ln -s /opt/onbld /export/home/hugo/proyecto/onnv-gate/usr/src/tools/prod/opt/onbld

también añadimos a la variable de ambiente la ruta del sun studio compiler y del onbld
export PATH=/opt/onbld/bin:/opt/onbld/bin/i386:/opt/SUNWpro/bin:$PATH

7. Nos cambiamos al directorio onnv-gate/usr/src/utm
y ejecutamos
dmake all

Si todo sale bien y no da errores en unas cuantas horas tendremos el kernel de opensolaris, luego veremos como instalarlo.

Feliz Compilada !!!!

p.d. pueden consultar http://hub.opensolaris.org/bin/view/Community+Group+on/install_quickstart como referencia.

jueves, 27 de mayo de 2010

El API de bit.ly

Bit.ly es un servicio para acortar direcciones de internet (url), de esta forma puedes poner la dirección en twitter en menos caracteres.

Otra ventaja es que puedes dar seguimiento de cuantas visitas ha tenido tu url acortada, siempre y cuando estes registrado. El registro es gratis.

Bit.ly ofrece un API REST, que mediante una petición y ciertos parámetros te devuelve la url corta, la url extendida, la información de la url ...

Entre el formato en que te da respuestas está el de texto plano, y el json, que en otra ocasión hablaré de él ya que es MUY interesante y muy facil de utilizar (al menos en python).

En esta liga pueden consultar la documentación de la API, en otro post les presentaré mi programa en python para utilizarla

http://code.google.com/p/bitly-api/wiki/ApiDocumentation

Creando kmz desde la info de twitter. (y iii)

Luego de bastante tiempo, seguimos con la entrada.

Solo tenemos que acoplar lo anterior, para meterlo todo a un archivo bash y que genere tu nuevo kmz.

Para generar la info, vamos a utilizar la herramienta awk, para poder utilizar el flujo obtenido en el post (i) y darle formato necesario explicado en el post (ii).

Les dejo el código completo :



#!/bin/bash
# Program to convert info from SismologicoMX to KML to place in google-earth

final='doc.kml'

echo '<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name> Ultimos sismos registrados </name>
<Style id="bajo">
<IconStyle>
<scale> 0.7 </scale>
<Icon>
<href>root://icons/palette-3.png</href>
<x>64</x>
<y>64</y>
<w>32</w>
<h>32</h>
</Icon>
</IconStyle>
<LabelStyle>
<scale>0.7</scale>
</LabelStyle>
</Style>
<Style id="alto">
<IconStyle>
<scale> 0.7 </scale>
<Icon>
<href>root://icons/palette-3.png</href>
<x>64</x>
<y>96</y>
<w>32</w>
<h>32</h>
</Icon>
</IconStyle>
<LabelStyle>
<scale>0.7</scale>
</LabelStyle>
</Style>
<Folder>
<name> Sismos de SismologicoMX via Twitter</name> ' > $final



lynx --source http://twitter.com/SismologicoMX | grep "entry-content" | \
sed 's/<[^>]*>//g' | awk ' {print \
" <Placemark> \
<name> ", $11, " </name> \n \
<description> " $0" </description>\n \
<LookAt> \n \
<longitude>",$8,"</longitude> \n \
<latitude>",$6,"</latitude> \n \
<altitude>-"$10" </altitude> \n \
<range>100</range> \n \
<tilt>0</tilt> \n \
<heading>0</heading> \n \
</LookAt> \n \
<styleUrl>#bajo</styleUrl> \n \
<Point> \n \
<coordinates>",$8","$6",-"$10"</coordinates> \n \
</Point> \n \
</Placemark> \n " \
}' >> $final


echo '
</Folder>
</Document>
</kml>
' >> $final

zip sismos-`date +%Y-%m-%d.%R`.kmz doc.kml

echo "archivo sismos.kmz generado"

viernes, 16 de abril de 2010

Creando kmz desde la info de twitter. (ii)

Ok, ahora voy a mostrar como está construido un archivo kml, que es el que contiene la información para desplegarla en el google-earth. El archivo es un XML que contiene información sobre los puntos (coordenadas, latitud, longitud) para desplegarlos sobre el mapa.


<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name> Ultimos sismos registrados </name>
<Style id="bajo">
<IconStyle>
<scale> 0.7 </scale>
<Icon>
<href>root://icons/palette-3.png</href>
<x>64</x>
<y>64</y>
<w>32</w>
<h>32</h>
</Icon>
</IconStyle>
<LabelStyle>
<scale>0.7</scale>
</LabelStyle>
</Style>
<Style id="alto">
<IconStyle>
<scale> 0.7 </scale>
<Icon>
<href>root://icons/palette-3.png</href>
<x>64</x>
<y>96</y>
<w>32</w>
<h>32</h>
</Icon>
</IconStyle>
<LabelStyle>
<scale>0.7</scale>
</LabelStyle>
</Style>
<Folder>
<name> Sismos de SismologicoMX via Twitter</name>




hasta aquí tenemos el encabezado, definiendo 2 tipos de estilos para mostrar los iconos, el nombre de la carpeta y la identificación del archivo.

Luego viene la parte de los puntos sobre el mapa, la cual se va a repetir dependiendo del número de puntos que se quieran mostrar.




<placemark>
<name> NOMBRE </name>
<description> DESCRIPCION </description>
<lookat>
<longitude> LONGITUD </longitude>
<latitude> LATITUD </latitude>
<altitude> ALTURA </altitude>
<range>100</range>
<tilt>0</tilt>
<heading>0</heading>
</lookat>
<styleurl>#bajo</styleurl>
<point>
<coordinates> LONGITUD, LATITUD, ALTURA </coordinates>
</point>
</placemark>




Finalmente el cierre del documento:




</Folder>
</Document>
</kml>





Esta información la puedes observar en cualquier punto que añadas al google earth, lo exportes y luego la abras en un editor de texto, o bien puedes consultar los manuales oficiales de google-earth.

En la siguiente entrega, veremos como acoplar todo esto :)

jueves, 15 de abril de 2010

Creando kmz desde la info de twitter. (i)

Las columnas de Dave Taylor en LinuxJournal son muy buenas, utiliza bash para MUCHAS cosas. Siguiendo la línea, voy a programar un script para que obtenga la información que el Sistema Sismológico Nacional "twittea" y lo ponga en un archivo kmz que googleearth entienda.

El dia de hoy, muchos sismos "menores" en Baja California, yo creo que la península se va a desprender :)

Los datos que ponen en Twitter bajo SismologicoMX son generados automáticamente, así que tienen una estructura consistente, lo primero es descargar la info de twitter, y para esto utilizaré el buen amigo lynx, con la opción de código fuente para parsear el html directamente, buscando la clase entry-content, que es la que contiene el micropost, afortunadamente está en la misma linea, asi que con el siguiente código lo obtenemos:


lynx --source http://twitter.com/SismologicoMX | grep "entry-content"


agrego un poco de sed para eliminar los tags html :


lynx --source http://twitter.com/SismologicoMX | grep "entry-content" | \
sed 's/<[^>]*>//g'


y con esto tenemos la linea de los datos, para obtener la información que me interesa, como fecha, hora, latitud, longitud, profundidad y magnitud, agrego un poco de awk :


lynx --source http://twitter.com/SismologicoMX | grep "entry-content" | \
sed 's/<[^>]*>//g' | awk ' {print $2,$4,$6,$8,$10,$11 }'


Con esto termino este post, ya con esos datos, en el siguiente veremos como utilizarlos para formar el archivo kmz.


Ejemplo de resultados:

2010-04-15 05:20:08 31.95 -113.47 10 M=4.2
2010-04-15 04:28:19 32.28 -115.32 16 M=3.5
2010-04-15 04:20:39 32.08 -114.92 20 M=3.9
2010-04-15 03:51:01 32.66 -115.55 10 M=3.8
2010-04-15 02:17:22 32.47 -115.33 8 M=3.4
2010-04-15 01:35:21 32.73 -115.81 16 M=3.6
2010-04-15 01:19:56 32.63 -115.76 16 M=3.7
2010-04-15 00:14:30 32.14 -115.23 17 M=3.5

jueves, 28 de enero de 2010

Ejercicio en bash para descargar ...

Existen varias alternativas para descargar archivos de r*pidsh*re sin pagar por una cuenta, con la respectiva espera y todo ...

El que uso se llama autorapid.rb, y está escrito en ruby, es muy bueno.

La cuestión es que me dió curiosidad por comprar una cuenta para no tener que estar esperando por las descargas, blablabla ... y al intentar modificar este programa pues resulta que ... me resultó más fácil realizar otro que hiciera algo similar. MMM ya mencioné que el dicho programa funciona en modo texto ?? Eso es importante, ya que pretendo tener un Linux sin ambiente gráfico solo para descargas :)

Aunque existen "downloaders" que me permiten bajar del sitio en cuestión y de otros sitios, no encontré alguno en modo texto, así que urgando por ahí encontré que se puede utilizar el famoso **wget** para realizar estas descargas, y para no hacerlo a mano, pues tirando algunas lineas en bash (y aprovechando otros comandos) se puede automatizar algunas cosas al momento de descargar, por ejemplo:

* Verificar que todos los links estén disponibles antes de realizar la descarga.
* Interrumpir la descarga ... y tratar de continuar donde se quedó
* Hacer 4 descargas paralelas.

Para esto hacemos uso de lynx, wget y xargs, y a continuación les pego mi programa que llamé: bajarRapid.bash

nota: NECESITAS CUENTA PAGADA y haber creado la cookie.



##########################################################################################
#!/bin/bash
# Hugo Gonzalez, 2010
# hugo (dot) glez (AT) gmail (dot) com
# Programa para descargar de manera simultanea desde r*apidsh*are
# TENIENDO CUENTA PAGADA...



# archivo donde se verifican los links
file=".file.ok"

li=`cat $1`

###############
# Se verifican los links en paralelo :)
function chk_link
{
E=`lynx --dump $url | grep Error`
if [ "$E" = "Error" ]; then
echo "link roto ! : $url" >> $file
else
echo "OK : $url" >> $file
fi
}
################


if [ -f $file ]; then
echo "Ya se verificaron los links !"
else
# verificar links
echo "Validando links !"
for url in $li
do
chk_link $url &
done
wait # espera a que finalicen los procesos en segundo plano
E=`grep roto $file`
if [ "$E" == "" ]; then
echo "Todos los links OK"
else
echo "Existen algunos links rotos"
grep roto $file
exit 1
fi
fi


echo "Revisando archivos existentes !"

for a in $li
do
NA=`echo $a | cut -d'/' -f6`
if [ -f $NA ]; then
echo "$NA existe, omitiendo"
else
lin="$lin $a"
fi
done

echo "comenzando la descarga paralela de 4 archivos"


# para este paso debes haber creado previamente la cookie :)
echo $li| tr ' ' '\n' | xargs -P4 -I{} wget -c --load-cookies ~/.cookies/rapidshare {}