viernes, 27 de julio de 2012

Linux: como generar un número limitado de subprocesos en segundo plano

Esta situación se me ha dado con bastante frecuencia. Imagínate que tienes que procesar una gran cantidad de archivos en un árbol de directorios, y que por cada archivo tienes que ejecutar un proceso algo pesado (por ejemplo, bzip2).

A voz de pronto, la forma más fácil de hacerlo es:

$ find . -type f -exec bzip2 \{\} \;

Esto ejecutará nuestro  proceso ... de uno en uno. Estamos en el año 2012, nuestros procesadores tienen muchos núcleos, y ya que los pagamos queremos usarlos. Bien, la alternativa podría ser:

$ find . -type f -exec bzip2 \{\} \& \;

¡Olé! Ahora en lugar de un solo proceso, vamos a empezar a crear procesos sin control hasta que el sistema se colapse o alcancemos el límite máximo (ver ulimit), y obtengamos un error. No parece la mejor solución.

Lo que realmente queremos es que el sistema genere 4, 5, ó 20 procesos, y que a medida que vayan acabando se generen otros nuevos que reemplacen a los que han terminado. La solución más simple nos la da xargs :

$ find . -type f -print | xargs -P 5 -d "\n" -n 1 bzip2

La clave está en el parámetro -P , que limita exactamente el número máximo de procesos a crear. De hecho, si hacemos un ps -ef ....


jose      8462  2856  0 13:44 pts/3    00:00:01 xargs -P 5 -d \n -n 1 bzip2
jose     24599  8462 39 13:57 pts/3    00:00:02 bzip2 ./Backups/servers/mail/vhosts/tri.com/egd/cur/1310570188.V811I1ad008cM674902.mail:2,S
jose     24613  8462 53 13:57 pts/3    00:00:01 bzip2 ./Backups/servers/mail/vhosts/tri.com/egd/cur/1310562280.V811I1ad0048M849935.mail:2,S
jose     24615  8462 44 13:57 pts/3    00:00:01 bzip2 ./Backups/servers/mail/vhosts/tri.com/egd/cur/1310569446.V811I1ad0080M942514.mail:2,S
jose     24622  8462 41 13:57 pts/3    00:00:00 bzip2 ./Backups/servers/mail/vhosts/tri.com/egd/cur/1310560224.V811I1ad0024M906849.mail:2,S
jose     24623  8462  0 13:57 pts/3    00:00:00 bzip2 ./Backups/servers/mail/vhosts/tri.com/egd/cur/1310571017.V811I1ad0096M988948.mail:2,S


Por cierto, no te pases mucho con el número de procesos simultáneos, o la carga del sistema subirá demasiado y puede que sea más lenta la solución en paralelo a la solución en serie.


martes, 19 de junio de 2012

Configuración avanzada router Movistar Home Station ASL-26555

Si recientemente has contratado una línea ADSL con Movistar, probablemente habrás recibido un router de marca Amper Home Station AS-265555.

Esta maravilla de la tecnología viene con un interfaz de configuración en http://192.168.1.1 La contraseña por defecto es 1234

He intentado cambiar la configuración LAN para que, en lugar de estar en el segmento 192.168.1.0/255.255.255.0 estuviera en el segmento 192.168.0.0/255.255.255.0

Problema: el impresionante interfaz de configuración cambia el segmento de red, y el servidor de DHCP empieza a dar direcciones en el nuevo segmento, pero no cambia el gateway, que sigue siendo 192.168.1.1 Obviamente, con el gateway en una red diferente, no se puede navegar en la red local.

Solución: entrar en el interfaz de configuración de verdad, que está en http://192.168.1.0:8000 , usuario 1234, contraseña 1234 Realizar los cambios de uno en uno en esa interfaz e, importante, tras cada cambio ir a Maintenance -> System settings -> reboot.

Con el interfaz avanzado sí he podido cambiar el segmento de red y después la configuración del servidor DHCP para que diera las direcciones en el segmento correcto.

Saludos.

viernes, 6 de abril de 2012

Nokia C5-03: Mi último Nokia.

No sé qué fue de aquella marca que hacía unos móviles a prueba de bombas. En mala hora elegí semejante CACHARRO.

1- Cuando intento escuchar la radio, el teléfono se reinicia. Otras aplicaciones me bloquean el móvil (la pantalla aparece llena de puntos, y tengo que quitar la batería)

2- La memoria del teléfono se llena misteriosamente, y el teléfono se BLOQUEA. Ahora mismo no puedo ni enviar SMS.


3- Falta de aplicaciones para Symbian. Todo sale para Android o iOS.

4- Instalar What's app bloquea mi teléfono.  Instalar "Radio por internet" bloquea mi teléfono. Realmente, ya no sé qué puedo hacer con el teléfono para que NO se bloquee. Imagino que todo estará relacionado con la porquería de memoria interna que le han puesto al cacharro.

5- No tiene un botón externo para la camara, y no tiene flash.

6- No trae "lápiz" para manejar la pantalla táctil con precisión. El resultado es que es una tortura usar cualquier aplicación un poco delicada, como el navegador web.

7- Y la cosa sigue, y sigue y sigue...


Quiero aclarar que tengo el software actualizado a la última versión. También he seguido los asistentes para liberar memoria (de hecho, ahora tengo dos mensajes SMS y una agenda de menos de 100 contactos) y las páginas de soporte de la web oficial de Nokia.

Así que si estás en comprate este engendro, ¡huye insensato!

martes, 3 de abril de 2012

SSH: Eliminando claves erróneas del fichero known_hosts

Otro recordatorio para mi memoria de pez.

Debian almacena las claves públicas de los hosts a los que se conecta en el fichero

/home/usuario/.ssh/known_hosts

En ocasiones, la clave pública de un ordenador puede cambiar. Por ejemplo, porque hayamos trasladado el servidor. En esos casos, SSH se negará a conectarse al servidor nuevo porque su clave pública actual no coincidirá con la antigua. Lo hará con un mensaje apocalíptico:



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for ftp.xxxxx.es has changed, and the key for the corresponding IP address x.x.x.x is unchanged. This could either mean that DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/jose/.ssh/known_hosts:18
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6f:16:ff:ce:2f:30:15:86:d8:69:dd:6c:c7:fe:21:0c.
Please contact your system administrator.
Add correct host key in /home/jose/.ssh/known_hosts to get rid of this message.
Offending key in /home/jose/.ssh/known_hosts:11
RSA host key for ftp.xxxxx.es has changed and you have requested strict checking.
Host key verification failed.
lost connection

Bueno, pues hay tres formas de arreglar ésto:

a- Configurando SSH para que no haga un chequeo estricto de claves. No es aconsejable, por motivos de seguridad.

b- Borrando el fichero known_hosts. Tampoco es aconsejable por motivos de seguridad, y encima cada vez que te conectes a tus servidores te volverá a preguntar si quieres confiar en la clave pública. Un coñazo.

c- Usar ssh-keygen para eliminar sólo la clave problemática en el fichero known_hosts :

jose@jose:~$ ssh-keygen -R "ftp.xxxxx.es"
/home/jose/.ssh/known_hosts updated.
Original contents retained as /home/jose/.ssh/known_hosts.old

Fin del problema.

jueves, 22 de marzo de 2012

Sirviendo actualizaciones ClickOnce desde un servidor Apache.

Como programador, estoy encantado con el sistema "ClickOnce" de actualización de Microsoft. Permite instalar y distribuir actualizaciones de forma práctica y rápida.

Como administrador de sistemas, soy un firme partidario del servidor web Apache, por razones técnicas, económicas (sin coste de licencias) y prácticas (es el servidor web más utilizado en Internet).

Pero independientemente de las opiniones de cada uno, a veces hay que hacer funcionar ClickOnce sobre Apache, y punto pelota  :) Veamos como.

Lo primero, aclarar que sólo he conseguido que funcione para actualizar, no para instalar por primera vez el programa. Por eso el artículo se llama "sirviendo actualizaciones". Yo suelo hacer la instalación manualmente en los equipos de los clientes, y luego utilizo Apache para distribuir las actualizaciones, que suele ser el 90% del trabajo.

En primer lugar, hay que preparar el alojamiento web para nuestros ficheros. Puedes hacerlo mediante un host virtual, a través de un puerto diferente o de un subdirectorio dentro de tu sitio web. En mi caso, utilizo un subdirectorio, por lo que los ficheros son accesibles desde:

http://www.miweb.com/aplicacion

Mientras preparas el alojamiento, ten en cuenta las restricciones de seguridad que quieras aplicar. Creo que es aconsejable, al menos, limitar las IPs desde las que se pueden conectar a las IPs del cliente. En fin, haz lo que quieras. En el manual de Apache viene todo muy bien explicadito :)

En segundo lugar, hay que preparar la aplicación para que se actualice a través de web.

En Visual Studio 2010, saca las propiedades de tu proyecto y vete a la solapa de Publicar. En la casilla Ubicación de la carpeta de publicación debes poner una carpeta de tu ordenador, por ejemplo "C:\publicaciones".

En el botón de Actualizaciones, selecciona "la aplicación debe buscar actualizaciones", y en la "Ubicación de actualizaciones" pon el alojamiento que preparaste en el primer paso. En mi caso, http://www.miweb.com/aplicacion El resto de parámetros ponlos como quieras. Yo prefiero que las actualizaciones se busquen antes de ejecutar la aplicación, pero eso ya es cosa de cada uno.

Finalmente, quedan los pasos que hay que seguir cada vez que quieras liberar una actualización.

En primer lugar, evidentemente, debes generar los ficheros de publicación. En las propiedades del proyecto, selecciona "Publicar ahora". En nuestro ejemplo, eso generará los ficheros de actualización en la carpeta C:\publicaciones

Copia todo el contenido de "C:\publicaciones" a tu alojamiento web (probablemente algo como /var/www/miweb/aplicacion o /home/usuario/public_html/aplicacion).

Ahora, debes asegurarte de que todos los ficheros tienen activado el permiso +r para todos los usuarios. Si puedes conectarte por SSH, la orden es:

find .  -exec chmod ugo+r \{\} \;

Si no puedes conectarte por SSH, usa tu cliente de FTP para cambiar los permisos.

Finalmente, debes activar el permiso +x a todos los directorios. Por SSH, se haría:

find . -type d -exec chmod ugo+x \{\} \;

o usa tu cliente FTP.

Debes cambiar los permisos cada vez que subas una actualización, o lo más probable es que los clientes no se actualicen.

Pues eso es todo. Happy ClickOnce.