MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

Compilando rsync en Android

Hace muy pocos días que he aterrizado en el mundo de android pero creo que voy avanzando poco a poco. Voy a publicar una minireceta de como compilar utilidades linux (sencillas) nativamente en Android. Antes de empezar sería bueno recordar que los binarios de Android se compilan para arquitectura ARM por lo que o usamos un emulador (tipo qemu) o un toolchain. Yo he usado el toolchain para compilar nativamente, con el emulador deberíamos compilar en estático y el binario ocupará bastante más. Vamos por pasos:

1.- Descargar el git de android, viene muy bien explicado aquí. Yo lo he descargado en mi $HOME/toolchain.

mkdir ~/toolchain
cd toolchain
wget http://android.git.kernel.org/repo
chmod +x repo
./repo init -u git://android.git.kernel.org/platform/manifest.git
./repo sync

2.- Hora de tomarse algo, descarga la friolera de 2.1 GiB, seguimos, hay que compilar la parte base (librerías)

make BUILD_TINY_ANDROID=true

3.- Tarda otro buen ratillo, ahora compilamos la parte oprofile (lo he compilado aquí porque así tenía a mano los includes de popt.h que son los únicos que he necesitado), cargamos el entorno de ayuda y compilamos el directorio actual y subdirectorios con "mm":

cd external/oprofile
. ../../build/envsetup.sh
mm 

4.- Ahora descargamos las fuentes de rsync (pueden valer las de Debian)

dget -u http://ftp.uk.debian.org/debian/pool/main/r/rsync/rsync_3.0.6-1.dsc
cd rsync-3.0.6

5.- La parte que más me ha costado ha sido entender los Makefile de Android que se llaman Android.mk. Este es mi Android.mk para rsync:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
flist.c\
rsync.c\
generator.c\
receiver.c\
cleanup.c\
sender.c\
exclude.c\
util.c\
main.c\
checksum.c\
match.c\
syscall.c\
log.c\
backup.c\
options.c\
io.c\
compat.c\
hlink.c\
token.c\
uidlist.c\
socket.c\
hashtable.c\
fileio.c\
batch.c\
clientname.c\
chmod.c\
acls.c\
xattrs.c\
progress.c\
pipe.c\
params.c\
loadparm.c\
clientserver.c\
access.c\
connection.c\
authenticate.c\
lib/wildmatch.c\
lib/compat.c\
lib/snprintf.c\
lib/mdfour.c\
lib/md5.c\
lib/permstring.c\
lib/pool_alloc.c\
lib/sysacls.c\
lib/sysxattrs.c\
zlib/deflate.c\
zlib/inffast.c\
zlib/inflate.c\
zlib/inftrees.c\
zlib/trees.c\
zlib/zutil.c\
zlib/adler32.c\
zlib/compress.c\
zlib/crc32.c
LOCAL_SRC_FILES += netbsd_getpass.c
LOCAL_STATIC_LIBRARIES := \
libpopt
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/.. \
$(LOCAL_PATH)/../libdb \
$(LOCAL_PATH)/../libutil \
$(LOCAL_PATH)/../libop \
$(LOCAL_PATH)/../libabi
LOCAL_MODULE := rsync
include $(BUILD_EXECUTABLE)

El archivo netbsd_getpass.c lo he tomado de ~/toolchain/external/dropbear/netbsd_getpass.c ya que Android no debe tener la rutina getpass(), sólo se usa si la rutina getpassf() de rsync nativa falla.

6.- A compilar toca, sólo hay que ejecutar "mm" dentro del directorio rsync-3.0.6 y si todo va bien veremos al final:

target Executable: rsync (out/target/product/generic/obj/EXECUTABLES/rsync_intermediates/LINKED/rsync)
target Non-prelinked: rsync (out/target/product/generic/symbols/system/bin/rsync)
target Strip: rsync (out/target/product/generic/obj/EXECUTABLES/rsync_intermediates/rsync)
Install: out/target/product/generic/system/bin/rsync
make: se sale del directorio `/home/mario/toolchain'

7.- Para copiarlo al móvil (conectar el cable USB y activar el modo depuración USB en las preferencias)Necesitamos el SDK de Android.

cd ~/sdk/tools
sudo ./adb kill-server
sudo ./adb remount
sudo ./adb push ~/toolchain/out/target/product/generic/system/bin/rsync /system/bin
sudo ./adb shell chmod 755 /system/bin

Ya podemos abrir el terminal desde android (o desde adb shell) y ejecutar rsync para ver si se copio bien.

Se me ocurren miles de cosas sencillas (GScript + rsync) para tener las fotos publicadas en un blog, hacer copias de seguridad remotas (incrementales) o incluso usarlo para descargar contenido pudiendo perder la conexión temporalmente.

Rizando el rizo, estaría guapo hacer un pequeño frontend con las opciones más usadas y llamarlo desde una aplicación APK.

Como próximo objectivo compilar alguna otra cosa que hecho en falta (¿git? etc...)





Qué pequeño es el mundo.

Uno (que humildemente aún se cree desarrollador newbie) programa cuatro líneas (para más "inri", aprendiedo a programar mientras tecleaba) y de casualidad va viendo pedacitos de su código en otros proyectos...

 

¿En esto consiste el Software Libre no? Cool

Este Makefile [baifox] se parece mucho a éste [tcosphpmonitor].

Pero ya la prueba irrefutable: debian/postrm [baifox] debian/postrm[tcosphpmonitor]

 





Squid 3.0 con soporte a X_FORWARDED_FOR

Cuando se mezcla Dansguardian con Squid en un proxy transparente existen ciertos inconvenientes que es bueno conocer.

  1. Dansguardian escucha las peticiones de la red interna en el puerto 8080, con iptables redirigimos todo el tráfico de salida a este puerto.
  2. Dansguardian pasa su petición a Squid por localhost al puerto 3128.
  3. Squid hace la petición y dansguardian la procesa.

Esto tiene un inconveniente y es que todas reglas acl o delay_pool en squid dejan de trabajar ya que todo el tráfico usa como IP cliente 127.0.0.1.

Existe un parche relativamente antiguo llamado follow_xff (pensado para versiones 2.x) que he reescrito en parte para que Squid3 use la cabecera X_FORWARDED_FOR. El parche se guarda en debian/patches en formato dpatch. Me falta el detalle de que no muestre un mensaje de no reconocer las nuevas reglas, porque funcionar sí lo hace.

Parece que en Debian (#523943) estaba activado, pero solo era un modificador de debian/rules, no había ni rastro de código y también parece que se ha añadido a Squid a partir de la versión 3.1.0.1.

He preparado un repositorio GIT de squid para compilarlo en Debian lenny con el parche y un simple «git-buildpackage».





Marketing bluetooth por proximidad: python-thinblue

ThinBlue es una aplicación desarrollada en python que envía archivos mediante el protocolo OBEX a dispositivos móviles (teléfonos por ejemplo).

Desde Thinetic Systems (empresa en la que trabajo) hemos liberado una primera versión (funcional, aunque beta) de esta aplicación bajo la licencia GPL2.

De momento tenemos un repositorio GIT con el código y en breve publicaremos paquetes *.deb para las versiones más usadas de Debian y Ubuntu.

Tienes más información en la noticia de nuestra web: ThinBlue, aplicación bluetooth para marketing por proximidad.

Una de las cosas más chulas ha sido desarrollar el panel de administración con el framework web: web.py , de hecho sin contar javascript, html o css son apenas 300 líneas.

A disfrutarla Wink





Mi regalo de reyes, nuevo interfaz de TcosDevicesNG

Hacer que algo simple y poco práctico:

 

 

Pase a ser algo como esto:

 

 

A falta de pulir un poco como se coloca el texto en la columna central creo que el tema ha mejorado bastante...

Disponible desde ya en el SVN.

Tengo que reconocer que me he inspirado gráficamente en Ejecter, aunque sólo en el aspecto, esto es una ventana gtk.Window() en modo popup y con detección de posición cada vez que aparece, de hecho el cambio para hacer que esto funcione sobre tcos-devices-ng.py es una sóla línea, y una nueva clase con los mismos métodos que la vieja.

Felices reyes y sed buenos Laughing




Hace un año: Nueva versión MaX 3.1

Análisis gráfico del arranque de TCOS

Supongo que muchos conocereis el paquete bootchart, que reemplazando a init guarda un registro del arranque del equipo para luego generar unas gráficas bastante chulas.

Pues bien, hasta ahora bootchart sólo trabajaba (que yo sepa) desde el mismo proceso init de la partición de nuestro linux y no había manera de lanzarlo desde el INITRAMFS... con un poco de «hacking» y mucho borrar código que no necesitaba he hecho un tcos-bootchartd para analizar el arranque de TCOS.

La víctima es un terminal ligero eTC3800 y este es el gráfico (pulsar para ver más grande):

Al tiempo total (47 segundos) hay que restar 2 segundos metidos a propósito para que se vean los últimos procesos antes de parar bootchartd.

Conclusiones:

  • La descarga del squashfs es lo que más tiempo tarda (14 segundos) Embarassed
  • Gracias a bootchart he quitado un par de «sleep» que sobraban Tongue out
  • Gracias a bootchart he visto que el sistema de registro de dipositivos que se inyecta en udev (tcos-udev.sh) perdía mucho tiempo cuando aún no es útil por lo que se activa casi al final. Surprised
  • «ldconfig» tarda casi 2 segundos... quizás se pueda mejorar ejecutándolo cuando se genera la imagen con «chroot ldconfig»
  • El arranque tiene picos de 100% CPU sostenidos con udev y Xorg (algo relativamente lógico)
Hace un tiempo el arranque no bajaba de 1 minuto, tener un arranque usable (el terminal muestra GDM antes de los 44) ha sido todo un logro y gracias a bootchart podré saber donde se pierde ese tiempo tan precioso.

Luego lo subo al SVN por si alguien quiere probarlo.



¿Qué es Thinetic Systems?

 

Thinetic Systems





¿Cómo borrar de forma segura un disco duro?
Hoy después de escribir unos datos importantes en un disco duro que me han prestado, tenía que borralo para que el dueño no pudiese acceder a mi privacidad.

Así que con el borrador magnético de alta tecnología marca ACME, creo que no ha quedado ni rastro.




II Jornadas de Software Libre y Comunicaciones de Fuerteventura (gnumax'07)
Desde hace unos días se ha abierto el plazo para presentación de ponencias y comunicaciones para las II Jornadas de Software Libre y Comunicaciones de Fuerteventura que tendrán lugar el 13 y 14 de abril en esa paradisiaca isla de las Canarias.



Aún recuerdo las I Jornadas [1] [2] [3] a las que tuve el honor de ser invitado y en donde conocí mucha gente que han pasado a ser muy buenos amigos.

Corren rumores, y no debería decir mucho más, que este año el cartel de las ponencias superará las de las anteriores y que los que asistan sin duda no se arrepentirán.

Voy preparando mi pequeño resumen para ver si este año volvemos por allí... ¿de que voy a hablar? pues yo creo que está claro, ¿o no?



Hace un año: Cambiando el mundo

iTALC versión 1.0.0.0-rc2
He comprobado que entra bastante gente a este blog buscando información sobre iTALC, y tengo que reconocer que con TcosMonitor tengo lo que necesito así que hasta hoy no había probado la nueva versión 1.0.0.0-rc2

Me he bajado el fuente, le he quitado los parches de la 0.9.6, he añadido la traducción a español y lo he compilado....

Han cambiado varias cosas, ahora ya no hay «ivs», «lockscreen», «demoviewer», «messageviewer», se han unido todos en uno nuevo «ica», por la misma regla de tres ya no hay «icv», «italc-keygen», sino sólo italc.

Al tema de las claves se añade una nueva forma de trabajar que es con roles (profesor, administrador, ayudante y otros) lo que hace su gestión y permisos mucho más sencilla (es root el que crea esas claves).

Como se puede ver en las capturas quedan muchas partes en alemán (el archivo de tradución es de inglés a otro idioma y he tomado como plantilla el que ya existe en alemán).

UPDATE 14 feb 2007: si quieres colaborar con la traducción, entra en el trac/wiki de iTALC

Un detalle que no me gusta un pimiento son los globos esos de KDE que ponen la CPU al 99%, menos mal que se pueden desactivar (traducirlos es otro tostón).




IMPORTANTE


Como la traducción es bastante larga y no tengo demasiado tiempo, PROPONGO desde aquí que alguien con soltura en traducir documentación técnica de inglés a español me eche un cable con esta, como agradecimeinto prepararé el paquete deb y mandaré el «debianizado» al equipo de Debian Edu que son los responsables de la anterior versión para que lo actualicen en los mirror oficiales de debian. De paso también se lo mando al autor Tobias como ya lo hice con la anterior.

Si alguien se anima que contacte conmigo por medio de correo electrónico o dejando un comentario en este hilo.

Ah !! Esas capturas son sobre un equipo con TCOS que ya soporta esta nueva versión (y que ocupa bastante más por cierto...)



Hace un año: Recuperando...

1 2 3 4 5 6  Siguiente»