Sincronizar directorios entre la PocketPC (Windows) y Linux

Hasta ahora hemos conseguido un sistema de noticias parecido a AvantGo, desatendido y automático, que se actualiza con solo conectar la PDA a la base USB (o, si ya está conectada, a una hora determinada de la noche). Pero ahora vamos a dar un gran paso adelante. Vamos a conseguir que nuestra PDA mantenga un directorio "espejo" en nuestro Linux, de tal forma que cualquier cambio que hagamos en él se refleje en la PDA en la próxima sincronización (o a la inversa).

Esto nos permite mucha libertad de movimientos. Por ejemplo, bastará con añadir una serie de ficheros MP3 a un directorio concreto de nuestro linux para que automáticamente se transfiera a la PDA en cuanto la enchufemos a la base. O, del mismo modo, todas las fotos que tomemos con la PocketPC serán copiadas a nuestro Linux. Y quien dice eso, dice todos los documentos que escribamos, en Pocket Word o Pocket Excel. Naturalmente, para que el efecto sea completa, podemos ajustar nuestra PDA para que grabe los documentos en formato Word 97 y Excel 97 en lugar del formato Pocket. Esto nos permitirá editar esos ficheros con OpenOffice, en Linux, sabiendo que cuando se sincronice, los cambios pasarán a la PDA. Y encima nos sirve de copia de seguridad.

Para ello usaremos dos programas: un servidor FTP que instalaremos en la PDA, y un cliente FTP que accederá desde el ordenador Linux.

Zona Servidor (PDA)

Para instalar un servidor FTP en la PDA necesitaremos un programa comercial que se llama ShareIt FTP. La licencia cuesta menos de 29 euros. Yo tengo la versión Pro, que cuesta algo menos de 50 euros y proporciona soporte para SSL/TLS, pero realmente no lo necesitas para lo que vamos a hacer ahora (aunque sería muy conveniente si pretendes establecer conexiones por WiFi). Bien, para lo que aquí nos interesa, la versión Lite funciona perfectamente y es muy barata.

Tienes que instalar ShareIt FTP en tu PDA. Después arranca el programa y haz que funcione permanentemente en la PDA. Ahora tienes que configurarlo. En la sección "System" debes ajustar "Directory" a "Root=\". Esto hará que toda la PDA esté disponible, desde la tarjeta SD hasta el "iPAQ File Store". En la sección "Users" debes añadir un usuario con contraseña, el que quieras, y luego desmarcar la casilla "Allow anonymous user" (esta opción sería muy peligrosa con esta configuración). En "IP Access" debes ajustar la política por defecto en "Deny", y luego añadir una única máquina a la que permitr el acceso: 192.168.131.201. Si quieres usar el WiFi tendrás que meter otra dirección, ya que el acceso por WiFi y por USB tienen direcciones distintas. En la sección "Misc" asegúrate de que el "Power Save Scheme" indica "Keep alive for active users". Ahora tienes que reiniciar el servidor FTP. Y ya está. Hemos terminado con los ajustes de la PDA.

Zona cliente (Linux)

En la máquina Linux necesitaremos el programa LFTP, un magnífico cliente FTP, disponible en casi todos los repositorios (incluido Gentoo) y que incluye dos características que nos son imprescindibles:

  1. El comando "mirror". Este comando copia toda una estructura de directorios, desde el ordenador remoto al local. Tiene una opción "--only-newer" que permite hacer un mirror incremental. También dispone de "mirror --reverse", que copia en dirección contraria, es decir, desde local a remoto.
  2. Ejecución en script. Esta caracteristica permite escribir todos los comandos que nos interesan en un script, y luego hacer que lftp funcione en forma automática y desatendida. Inicialmente pensado para subir una página web al servidor automáticamente, a nosotros nos sirve para sincronizar la PDA con nuestro Linux.

El autor de este programa es Alexander V. Lukyanov, que imagino que nunca pensó que pudiera servir para esto, pero lo cierto que es que ha hecho un cliente FTP magnífico, que permite hacer esto y mucho más. Caramba, es tan bueno que si buscas un cliente FTP o SFTP en modo texto, te lo recomiendo con entusiasmo. De hecho, es el cliente que yo sigo usando hoy en día para transferir ficheros entre mis máquinas y para subir la Web a mi servidor. Gracias, Alexander. ;-)

Bien, pero volviendo al tema, ahora tenemos que crear una estructura de directorios que sirva para almacenar el espejo de la ipaq que estará en nuestro linux. No tiene por qué ser idéntica a la de la PDA, porque lftp hará todo lo necesario para emparejar cada oveja con su pareja. :-)

   [lacofi@jeanette:~]$ mkdir ipaq
   [lacofi@jeanette:~]$ cd ipaq
   [lacofi@jeanette:~/ipaq]$ mkdir ifs #o sea "iPAQ File Store"
   [lacofi@jeanette:~/ipaq]$ mkdir sd #o sea "Tarjeta de almacenamiento SD"
   [lacofi@jeanette:~/ipaq/ifs]$ cd ifs
   [lacofi@jeanette:~/ipaq/ifs]$ mkdir datos
   [lacofi@jeanette:~/ipaq/ifs]$ cd ~/ipaq/sd
   [lacofi@jeanette:~/ipaq/sd]$ mkdir documentos fotos musica
   [lacofi@jeanette:~/ipaq/sd]$ mkdir personal profesional

Ahora tenemos que crear el script para lftp. Básicamente no son más que una serie de comandos FTP, escritos tal y como haríamos si estuvieramos conectados:

----------- Comienza script /etc/lftp-ipaq.cmd ----------
open -u lacofi,contraseña ipaq
cd pub
lcd /home/lacofi/ipaq
cd "/pub/Tarjeta de almacenamiento"
lcd /home/lacofi/ipaq/sd
cd "/pub/Tarjeta de almacenamiento/My Documents"
cd "/pub/Tarjeta de almacenamiento/My Documents/My pictures"
lcd /home/lacofi/ipaq/sd/fotos
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/Tarjeta de almacenamiento/My Documents"
lcd /home/lacofi/ipaq/sd
cd "/pub/Tarjeta de almacenamiento/My Documents/Personal"
lcd /home/lacofi/ipaq/sd/personal
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/Tarjeta de almacenamiento/My Documents"
lcd /home/lacofi/ipaq/sd
cd "/pub/Tarjeta de almacenamiento/My Documents/Profesional"
lcd /home/lacofi/ipaq/sd/profesional
mirror --only-newer --no-recursion
mirror --only-newer --no-recursion --reverse
cd "/pub/Tarjeta de almacenamiento/My Documents/Profesional/chuletas"
lcd /home/lacofi/ipaq/sd/profesional/chuletas
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/iPAQ File Store"
lcd /home/lacofi/ipaq/ifs
cd "/pub/iPAQ File Store/Datos"
lcd /home/lacofi/ipaq/ifs/datos
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/Tarjeta de almacenamiento/Mi musica"
lcd /home/lacofi/ipaq/sd/musica
mirror --only-newer --reverse --delete-first
------------ Termina script /etc/lftp-ipaq.cmd ----------

Los comandos "lcd" cambian el directorio local. Los comandos "cd" cambian el remoto. Observad los comandos "mirror" y "mirror --reverse", así como la opción "--no-recursion". Todo esto ya depende de lo que vosotros necesiteis y querais sincronizar.

Observar que en el directorio "musica" no pongo ninguna orden "mirror --reverse" y sí una opción "--delete-first". Esto es porque aquí me interesa que la PDA actúe como esclava. Si borro un MP3 del ordenador, también se borrará en la PDA. Si lo añado en el ordenador, se añadirá en la PDA. Pero nada de lo que haga en la PDA se reflejará en el ordenador. Uso "--delete-first" y no "--delete" a secas, porque así se libera un montón de espacio en la PDA antes de hacer cualquier otra cosa. Para más detalles, tendreis que recurrir a las páginas man de lftp o al comando "help", que para eso están. ;-)

Mucho cuidadito con la opción "--delete". Para evitar problemas os recomiendo SIEMPRE usar trayectorias absolutas, no relativas (es decir, "lcd /home/lacofi/ipaq", y no "lcd ../ipaq". Esto es porque si calculais mal la jugada, entra dentro de lo posible que el programa FTP se ponga a recorrer toda la estructura de directorios de vuestro Linux y se ponga a borrar ¡TODOS VUESTROS FICHEROS!. A mí me ocurrió y os aseguro que el efecto es espectacular... Afortunadamente tenía copias de seguridad. Vosotros también las teneis, ¿verdad? ;-).

Vale. Pues ahora, para ejecutar un ftp desatendido basta con esto:

   [lacofi@jeanette:~]$ lftp -f /etc/lftp-ipaq.cmd

Vamos, que más fácil imposible. Ahora sólo teneis que incluir éste comando en vuestro crontab, en el script "subelo", o en ambos.

Con los cambios, el script subelo quedaría tal que así:

------------- Empieza script subelo ---------------------------
#!/bin/bash
LOG="/var/log/syncipaq.log"
FECHA=`date`
sleep 3

echo " " >> $LOG
echo "--- $FECHA ---" >> $LOG

pgrep -f "/usr/sbin/pppd call synce-device"
resultado=$?

if [ $resultado -eq 0 ]; then
  echo "La iPAQ esta conectada. Correcto." >> $LOG
  sleep 3
  for archivo in `find /home/lacofi/.plucker/*.pdb`
  do
    nombre=`basename $archivo`
    pcp $archivo ":/Tarjeta de almacenamiento/My Documents/$nombre.pdb"
    error=$?
    if [ $error -eq 0 ]; then
      echo "--> Transferido `basename $archivo.pdb` a la iPAQ" >> $LOG
    else
      echo "--> No pude subir `basename $archivo.pdb` a la iPAQ" >> $LOG
    fi
  done
  lftp -f /etc/lftp-ipaq.cmd
    error=$?
    if [ $error -eq 0 ]; then
      echo "Se han sincronizado los ficheros predeterminados" >> $LOG
    else
      echo "Hubo un error FTP" >> $LOG
    fi
else
  echo "No he detectado ninguna iPAQ!!" >> $LOG
fi
------------- Termina script subelo ---------------------------
Be Sociable, Share!

Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.

Deja un comentario

Disculpa, debes iniciar sesión para escribir un comentario.