Charla en TED sobre modelos de código abierto para la civilización

El otro día me pasaron una charla muy interesante que va en consonancia con lo que se habla últimamente de economía local, comprar a productores, oposición a obsolescencia programada….. una sintonía con la que cada vez caso más.

 

Herramientas imprescindibles para despliegues de aplicaciones Python

Hace algún tiempo buscando por ahí información sobre Virtualenv (una maravilla….) me dí con esta página que explica brevemente tres herramientas muy importantes para despliegues de aplicaciones Python y por ende, de Django, que era el objetivo de mi búsqueda.

Si no conocéis las herramientas os aconsejo que lo leáis y las uséis, aunque por ejemplo, pip, dudo mucho que alguien del mundo python no la haya usado, pero bueno, lo mismo ha tirado más de easy-install o de su propia distribución.

Alex-clemesha: Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip

Pantallazo de depuración de Eucalyptus

A modo de curiosidad me ha dado por postear el entretenido trabajo de depurar la ejecución de Eucalyptus con un Cloud Controller y cuatro nodos. Para quien no lo sepa Eucalyptus es un software de Cloud Computing con una versión empresarial y otra para la comunidad.

La primera imagen es la Sun Storage que sirve por ISCSI los rootfs de los nodos:

La segunda es la depuración de eucalyptus:
debugging_eucalyptus

y sí, digo depuración y no monitorización porque tuvimos un montón de problemas y al final nos decidimos a cambiar a Openstack, con el cual estamos bastante más contentos.

open-stack-cloud-computing-logo-2

A ver si me animo y posteo algo sobre Openstack que está bastante chulo y funciona relativamente bien, amén de que me he hecho un experto. Al estar escrito en python, los problemas que aparecían los solucionaba directamente en código, y ya me he visto una buena cantidad de éste.

Desinstalar aplicaciones en Android sí o sí

Estuve hace un tiempo buscando la manera de desinstalar en Android esas aplicaciones que te mete el vendedor por narices y que no aparecen en el listado de aplicaciones para borrarlas.

top secret

Encontré una receta donde te lo explican, pero aviso que tienes que tener el móvil rooteado, así que no es la panacea, pero bueno, mucha gente lo tiene rooteado.

Receta para desinstalar aplicaciones ocultas en Android: http://android.modaco.com/topic/302122-remove-amazon-mp3-store-or-other-stock-apps-rooted-device/

Dropbox y Amazon Web Services

queda claro qué servicio de cloud usa Dropbox no?

tcp 38 0 localhost:46756 ec2-107-20-248-13:https CLOSE_WAIT 6475/dropbox
tcp 38 0 localhost:37965 ec2-23-21-220-152:https CLOSE_WAIT 6475/dropbox
tcp 0 0 localhost:47059 sjc-not7.sjc.dropb:http ESTABLISHED 6475/dropbox
tcp 38 0 localhost:32940 v-client-1b.sjc.d:https CLOSE_WAIT 6475/dropbox
tcp 38 0 localhost:55403 75.126.110.108-st:https CLOSE_WAIT 6475/dropbox
tcp 38 0 localhost:36729 v-d-1b.sjc.dropbo:https CLOSE_WAIT 6475/dropbox
tcp 38 0 localhost:57051 v-client-2a.sjc.d:https CLOSE_WAIT 6475/dropbox
tcp 38 0 localhost:35751 ec2-50-16-232-209:https CLOSE_WAIT 6475/dropbox

Rebotear GT-I5800 en modo recovery

Siempre se me olvida y tengo que buscarlo así que voy a ponerlo aquí a modo de ejercicio de memoria.

Antes de nada aclaro que el GT-I5800 también es llamado Samsung Galaxy 3.

Para arrancarlo en modo Recovery:

Vol +, Vol -, Home, Power

Para arrancarlo en modo Upload:

Vol +, Home, Power

el modo Upload sirve para upgradearlo con ODIN.

Mirroring-backup

Hoy voy a explicar cómo mantener una segunda copia del SO linux en otro disco duro (o par de ellos).

¿ para qué puede servir? por si se te rompe uno de los discos duros.
¿ qué recuperas ? como estaba el servidor/desktop en el momento que se hizo la copia.

Yo lo tengo en un script que se lanza a una hora determinada. Para que la base de datos no quede incoherente, antes la paro, y la relanzo cuando acaba el proceso, no tendría que hacerlo puesto que igualmente en el script hago una copia de la BD en caliente, pero bueno, no tengo ningún servicio crítico.

¿ cómo manejamos los discos de respaldo? bueno, antes de nada los llamo discos porque son dos y los tengo en RAID 1, doble seguridad ante fallos de disco. Los mantengo apagados (standby) con la orden:

$ hdparm -y /dev/sdx

así que cuando voy a hacer la copia se activan, y al acabar la copia vuelven a estar en reposo (hay que usar el comando cada vez que queramos que entren en reposo), no se cascan, no hacen ruido, no dan calor y no consumen electricidad. No olvidéis desmontar los discos porque si no, el standby no surtirá efecto ya que con operaciones del SO se volverán a activar y en ese caso dependería de las opciones de reposo que tengáis configuradas en el hdparm o propias del disco.

Tengo que aclarar que la orden de standby se hace sobre las unidades físicas no sobre las lógicas, esto es, aunque con el RAID montéis el /dev/mapper/xxxxxxxx1, el standby se ejecuta sobre las unidades físicas que formen el RAID.

Para mantener los HDDs sincronizados, lo mejor es usar rsync. A continuación pongo la línea que yo utilizo en mi script y la comento:

rsync -aHv --delete --exclude /dev --exclude /usr/portage --exclude /tmp --exclude /media --exclude /proc --exclude /sys --exclude /mnt/bak / /mnt/bak

la opción -a viene de archive, que a fin de cuentas es lo que estamos haciendo, el -H es para mantener los enlaces duros (siempre es bueno a mi parecer) y -v para que vaya contando los cambios que hay. Con –delete borra los archivos que ya no estén en el original y con –exclude excluimos directorios de la sincronización. Los directorios más usuales para excluir son los que tienen montados interfaces del sistema a modo de fs como el sys o el proc, los temporales (/tmp), el directorio donde está montado el directorio a sincronizar (/mnt/xxxxxx), y otros volúmenes y en gentoo, por ejemplo, el /usr/portage.Para más información:

$ man rsync

Si se quiere probar antes de pasarlo definitivamente se le añade la opción -n:

rsync -avHn --delete --exclude /proc --exclude /sys --exclude /mnt/gentoo / /mnt/gentoo

y ¿cómo hacemos que esto funcione en el arranque? pues se instala el GRUB en los dos discos (entendiendo el RAID ahora como un disco) haciendo referencia a que está instalado en la primera partición (/boot o / si no tenemos una partición para boot). Como mantenemos la misma configuración del /boot, sólo hay que dar una ruta alternativa si no encuentra uno de los discos, esto se hace con las opciones del GRUB:

default 0
fallback 1
timeout 6
 
title=Linux1
root (hd1,0)
kernel /boot/kernel-genkernel-x86-2.6.39 root=/dev/ram0 init=/linuxrc real_root=/dev/sdX1 dodmraid vga=791  panic=5
initrd /boot/initramfs-genkernel-x86-2.6.39
 
title=Linux2
root (hd0,0)
kernel /boot/kernel-genkernel-x86-2.6.39 root=/dev/ram0 init=/linuxrc real_root=/dev/sdY1 dodmraid vga=791  panic=5
initrd /boot/initramfs-genkernel-x86-2.6.39

Con default decimos qué opción se intenta arrancar primero, con fallback, decimos qué opción intentamos arrancar si la otra falla y con timeout, el tiempo de espera antes de arrancar. En las opciones del kernel, el parámetro panic=5 indica que si hay un kernel panic se reinicie, así entraría en la siguiente opción.

En esta ocasión, de manera predeterminada, arranca el segundo disco y deja en standby el primero, si se rompe alguno de los discos, entonces el otro será el primero y arrancará de igual manera, si el disco jodido hace que la placa no arranque, entonces toca aguantarse.

Bueno, aquí os he dejado algo con lo que entreteneros un buen rato. Con esta base y afinando vuestro propio script os puede salir algo muy bonico, yo por ejemplo, el resultado de estas acciones me las mando por correo de manera diaria, así como el backup de la bd y un backup incremental que también hago que ya contaré en otro momento.

Experiencia de usuario mejorada en Linux gracias a Automatic Process Group

Hace ya tiempo salió la noticia de que un tipo, Mike Galbraith, había escrito un parche para el kernel de Linux, versión 2.6.37, con tal sólo 233 líneas de código, que reducía por 10 la latencia de las aplicaciones de escritorio, esto es, da al usuario fluidez en el uso de programas, que a fin de cuentas es mejorar la experiencia de usuario.

¿cómo se consigue esto? bueno, el parche es un trozo de código que ordena los procesos en grupos y les da prioridad a los que son de escritorio, simple ¿verdad? Es por eso que, ya incorporado al árbol principal de código del kernel, es una característica que se denomina: Automatic Process Group Scheduling.

Se decidió incorporarlo para la versión 2.6.38 que fue liberada el 14 de Marzo de 2011, y desde entonces lo tenemos en la rama oficial de Linux.

Si tienes una de las distribuciones habituales tipo Fedora, Ubuntu, Mandriva, Suse…. supongo que lo traerá de serie con la siguiente actualización del sistema que tenga el kernel 2.6.38, si no es así, te voy a enseñar cómo podemos activarlo.

Como cada distribución es un mundo en temas de kernel, sólo voy a indicar por encima cómo se haría, y cómo se hace en Gentoo, que es la que uso.

Doy por hecho que tenemos las fuentes del kernel en /usr/src/linux y que tenemos la configuración del kernel actual guardada en /usr/src/linux/.config

Arrancamos menuconfig para configurar correctamente el kernel:

General y gentoo:

$ cd /usr/src/linux
$ make oldconfig
$ make menuconfig

una vez nos salga el menú, con los cursores pulsamos Enter en la primera opción: General setup

en el siguiente menú que son sale, bajamos hasta: Automatic process group scheduling y pulsamos la Y. Tiene que haber un asterisco entre los corchetes del principio de línea: [*]

Una vez hecho esto, presionamos con el cursor a la derecha, resaltando la opción de Exit, pulsamos Enter, otra vez cursor derecho, se resalta Exit, presionamos Enter, y nos saldrá la pantalla de si queremos guardar, simplemente volvemos a pulsar Enter, que es guardar los cambios.

Nos queda compilar el kernel, los módulos e instalarlo.

General:

$ cd /usr/src/linux
$ make all
$ make modules && make modules_install

después de esto nos quedaría crear el initrd que cada distribución tiene su manera, modificamos el /boot/grub/menu.lst y a volar. Si estos pasos no se saben cómo hacer buscad información para vuestra distribución que seguro que hay.

Gentoo:

En gentoo a través de la utilidad que da de compilar el kernel te la la posibilidad de configurarlo y te general él solo el initrd:

$ genkernel --menuconfig all

Esto te instala el kernel en el boot junto con el initrd y te instala los módulos donde hacen falta. Lo único que hay que hacer es modificar el /boot/grub/menu.lst, que incluso si es la misma versión no hay que hacerlo.

Si tenéis alguna duda lo mejor es buscar por internet o preguntarme.

Yo ya tengo la opción en todos mis equipos y la verdad es que se nota mucho, estoy encantado, como dicen “is a miracle patch”.