SlideShare a Scribd company logo
1 of 255
Download to read offline
Dando la vuelta a la Antártida con software libre
Universidad Nacional de Cañete, 2017. Carles Pina y Jen Thomas
Contenido
Quiénes somos
¿Qué es ACE?
Gestión de datos
Django en la expedición
Sistema informático y telecomunicaciones
Sistema de email
Otros:
backups
GPS
Ferrybox
profundidad
CTD
paquetes
instalar LibreOffice sin el instalador
...
2 / 162
¿Quiénes somos?
3 / 162
Carles Pina i Estany
Nací en Manresa, cerca de Barcelona (España)
Desde 2009 trabajo en Mendeley (departamento de Mendeley Desktop) trabajando en
C++/Qt
Normalmente vivo en Londres (Reino Unido) pero nos tomamos un año sabático para
viajar
Me gusta el software libre (uso Debian desde Debian Potato en el 2000)
Algunos proyectos que hago/ayudo...
4 / 162
(en Debian/Ubuntu)
5 / 162
(lo usamos mucho en la Antártida)
6 / 162
(lo usamos mucho en la Antártida)
(xnetload no está mantenido, después del viaje hice qnetload)
https://github.com/cpina/qnetload
6 / 162
7 / 162
8 / 162
9 / 162
10 / 162
11 / 162
Otras cosas
(pequeñas, viejas o no mantenidas)
Catux-USB (2004)
Django (después de la expedición)
Pidgin (notificaciones)
geeqie (copiar path)
Pydance (soporte multilingue)
Amarok
gnokii
...
12 / 162
Jen Thomas
13 / 162
Images: Polar Data Centre, British Antarctic Survey
14 / 162
Copyright Adam Bradley 15 / 162
Mapas de dispersión de aves usando Leaflet y Open Street Map
16 / 162
Introducción
17 / 162
¿Qué es ACE?
18 / 162
Copyright: Swiss Polar Institute 19 / 162
R/V Akademik Tryoshnikov
20 / 162
21 / 162
22 / 162
La ciencia
23 / 162
Copyright Swiss Polar Institute 24 / 162
25 / 162
26 / 162
27 / 162
La gestión de datos
28 / 162
¿Qué es y qué hicimos?
29 / 162
¿Por qué?
30 / 162
31 / 162
32 / 162
Resumen de nuestro trabajo
Guardar datos
Una base de datos (actividades, metadatos, etc.)
Interfaz de la base de datos
Intranet para acceder a los datos, ver información
Mapa de la ruta
Comunicaciones - email, internet
Ayuda con dispositivos, portátiles, software....
Aconsejar a los científicos en la gestión de datos
33 / 162
34 / 162
¿Dónde guardar los datos?
A principios de diciembre Jen preguntó a los 22 investigadores principales cuantos GB
necesitarán para almacenar sus datos
Estimamos en total unos 60 TB
35 / 162
¿Dónde guardar los datos?
A principios de diciembre Jen preguntó a los 22 investigadores principales cuantos GB
necesitarán para almacenar sus datos
Estimamos en total unos 60 TB
Preguntamos al barco qué almacenamiento tienen
35 / 162
¿Dónde guardar los datos?
A principios de diciembre Jen preguntó a los 22 investigadores principales cuantos GB
necesitarán para almacenar sus datos
Estimamos en total unos 60 TB
Preguntamos al barco qué almacenamiento tienen
Nos dicen que 500 GB (0.5 TB)
35 / 162
Datos, datos, datos...
Preguntamos, miramos, comparamos y al final compramos:
15 discos duros 8 TB Western Digital
15 discos duros 8 TB Seagate
2 NAS Synology DS-1815+
2 Gigabit switches
2 SAI APC
...
36 / 162
Datos, datos, datos...
Preguntamos, miramos, comparamos y al final compramos:
15 discos duros 8 TB Western Digital
15 discos duros 8 TB Seagate
2 NAS Synology DS-1815+
2 Gigabit switches
2 SAI APC
...
¡todo esto llegó a Sudáfrica 2 días antes de salir!
36 / 162
Datos, datos, datos...
¡Lo pusimos a punto!
Incluyó bajarse 300 MB para los Synologys: corrí a una cafeteria y después al hotel para
bajarme los ficheros necesarios.
37 / 162
Material de repuesto
En un barco se necesitan piezas de recambio para casi todo.
Compramos material sobrante (discos, switches, etc.) ¡Durante un mes no teníamos acceso a
ninguna tienda!
38 / 162
39 / 162
La web intranet
40 / 162
Django
No sabíamos Django antes de empezar
Tiene muy buena documentación off-line
Yo tenía mucho código Python en mi ~/git (código mío, de proyectos libres). Sirve a
veces más que libros, manuales, etc.
41 / 162
¿Por qué Django nos era muy
cómodo?
Escribiendo un modelo genera formularios y base de datos
Cambiando el modelo hace las migraciones en la base de datos
Sistema autenticación de usuarios
Sistema de permisos de usuarios
Sistema de plantillas integrado con los modelos
Muy fácil de extender como programador
La interfaz de usuario (parte admin) cómoda sin esfuerzo
42 / 162
Modelos en Django
Ejemplo de model en Django:
class StorageCrate(models.Model):
name = models.CharField(max_length=255, unique=True)
location = models.CharField(max_length=255)
description = models.CharField(max_length=255, null=True, blank=True)
comment = models.TextField(null=True, blank=True)
43 / 162
Modelos en Django
Ejemplo de model en Django:
class StorageCrate(models.Model):
name = models.CharField(max_length=255, unique=True)
location = models.CharField(max_length=255)
description = models.CharField(max_length=255, null=True, blank=True)
comment = models.TextField(null=True, blank=True)
Genera los formularios
Genera la tabla en la base de datos si no existía
Genera migraciones si el modelo existía y era diferente
43 / 162
La base de datos
Teníamos que crear una base de datos para que los científicos introdujeran información
de sus actividades - sus metadatos
Yo conocía Flask, Mysql, SQLAlchemy
Pero ¿cómo hacer los formularios para entrar todos los datos? (a mano con Flask tardarí
mucho, con C++/Qt aún peor!)
Estaba una noche en casa un amigo en Londres y le pregunté como lo haría él
44 / 162
La base de datos
Teníamos que crear una base de datos para que los científicos introdujeran información
de sus actividades - sus metadatos
Yo conocía Flask, Mysql, SQLAlchemy
Pero ¿cómo hacer los formularios para entrar todos los datos? (a mano con Flask tardarí
mucho, con C++/Qt aún peor!)
Estaba una noche en casa un amigo en Londres y le pregunté como lo haría él
Dijo: ¡con Django! (yo pensaba que no quería Django, que era demasiado grande)
44 / 162
La base de datos
Teníamos que crear una base de datos para que los científicos introdujeran información
de sus actividades - sus metadatos
Yo conocía Flask, Mysql, SQLAlchemy
Pero ¿cómo hacer los formularios para entrar todos los datos? (a mano con Flask tardarí
mucho, con C++/Qt aún peor!)
Estaba una noche en casa un amigo en Londres y le pregunté como lo haría él
Dijo: ¡con Django! (yo pensaba que no quería Django, que era demasiado grande)
Y hicimos un proyecto pequeño en Django de ejemplo para que viera como funciona
44 / 162
¡Gracias Fran y Django!
45 / 162
science-cruise-data-management
http://github.com/cpina/science-cruise-data-management
Empecé a programar toda la semana... ¡la documentación de Django está muy bien! (y
disponible offline)
Visité a Fran para preguntarle más cosas
Jen y yo hicimos toda la Intranet con Django
46 / 162
47 / 162
48 / 162
49 / 162
Mapa
Yo había usado la librería Leaflet (sobretodo para Benches)
50 / 162
Mapa
Yo había usado la librería Leaflet (sobretodo para Benches)
Queríamos hacer un mapa de la expedición:
¿Dónde estábamos?
¿Dónde han pasado los eventos?
50 / 162
Mapa
Yo había usado la librería Leaflet (sobretodo para Benches)
Queríamos hacer un mapa de la expedición:
¿Dónde estábamos?
¿Dónde han pasado los eventos?
Pero la proyección del mapa no es la estándard
50 / 162
51 / 162
Proyección del mapa
Leaflet tiene soporte para diferentes proyecciones (con un plugin)
La Antártida normalmente se visualiza con proyección EPSG:3031 (el usado
normalmente es Mercator)
No hay tiles (imágenes PNG como las de openstreetmap.org) renderizadas con la
proyección EPSG:3031
En lugar de tiles usé shapefiles (*.shp): describen el contorno de la Antártida
Pasé los shapefiles del formato original (shp) a geojson (para que Leaflet lo cargara)
52 / 162
Proyección del mapa
Leaflet tiene soporte para diferentes proyecciones (con un plugin)
La Antártida normalmente se visualiza con proyección EPSG:3031 (el usado
normalmente es Mercator)
No hay tiles (imágenes PNG como las de openstreetmap.org) renderizadas con la
proyección EPSG:3031
En lugar de tiles usé shapefiles (*.shp): describen el contorno de la Antártida
Pasé los shapefiles del formato original (shp) a geojson (para que Leaflet lo cargara)
ogr2ogr -f GeoJSON -simplify 1000 -t_srs EPSG:3031 
Coastline_high_res_polygon.geojson Coastline_high_res_polygon.shp
52 / 162
Resumen Django
Sin Django hubieramos tardado muchísimo más
Si es necesario Django permite fácilmente acceder a la base de datos directamente (y aún
crear los objetos de los modelos)
Los "commands" (parte de la aplicación de Django pero se usan desde la línea de
comandos, no desde el navegador) son muy cómodos de escribir
Estamos muy contentos con Django (aunque primero pensé que no sería tan útil)
53 / 162
54 / 162
Sistema informático expedición
en el barco
55 / 162
Servidores hardware
Un portátil viejo: Ubuntu 16.10 (se calentaba, etc.). Fué cómodo porqué lo llevamos ya
semi configurado de casa
(segundo mes hasta el final): Añadimos un portátil nuevo con Ubuntu 16.10
56 / 162
Tareas de los servidores
Sistema Django
Sistema de email (ver más adelante)
Subir/bajar ficheros internet (ver más adelante)
DNS (Bind) (para http://ace-intranet.lan, http://ace-mail.lan)
DHCP Server (ISC DHCP)
Servidor git interno (no podíamos depender de nada de Internet)
Importar datos GPS (ver más adelante)
Copias de seguridad de diferentes ordenadores (ver más adelante)
Copias de seguridad entre NAS1 y NAS2 (rsync)
Muchas otras tareas pequeñas (p. ej. reiniciar un router a medianoche)
57 / 162
Internet en el barco
58 / 162
Introducción
Teníamos 2 sistemas Iridium
Inicialmente un sistema para llamadas, otro para Internet
Esto son, 128 kbits para oficialmente 80 personas
59 / 162
Introducción
Teníamos 2 sistemas Iridium
Inicialmente un sistema para llamadas, otro para Internet
Esto son, 128 kbits para oficialmente 80 personas
Las conexiones via Iridium son MUY inestables
L. Wood, SaVi: satellite constellation visualization, First Annual CCSR Research Symposium
(CRS 2011), Centre for Communication Systems Research, 30 June 2011.
http://arxiv.org/abs/1204.3265
59 / 162
Iridium
La constelación tiene 66 satélites operativos
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas
Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y
desconecta porqué no son geostacionarios y hay cambios de satélite
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas
Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y
desconecta porqué no son geostacionarios y hay cambios de satélite
Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km)
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas
Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y
desconecta porqué no son geostacionarios y hay cambios de satélite
Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km)
Por la noche a veces se pueden ver (como estrellas fugaces)
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas
Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y
desconecta porqué no son geostacionarios y hay cambios de satélite
Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km)
Por la noche a veces se pueden ver (como estrellas fugaces)
Estan lanzando satélites de nueva generación
60 / 162
Iridium
La constelación tiene 66 satélites operativos
Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium
Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas
Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y
desconecta porqué no son geostacionarios y hay cambios de satélite
Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km)
Por la noche a veces se pueden ver (como estrellas fugaces)
Estan lanzando satélites de nueva generación
¡Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y
desconecta porqué no son geostacionarios y hay cambios de satélite
60 / 162
61 / 162
62 / 162
63 / 162
Reproducir vídeo:
iridium-apt-get-update.ogv
64 / 162
VSAT
No usamos VSAT durante la expedición
Cuando lo pude probar (hemisferio norte, por el contrato que el barco tiene): ¡unos 10
Mbps estables!
La antena apunta siempre (con motores) al satélite geostacionario
A unos 35.900 Km de la tierra (geoestacionario)
65 / 162
66 / 162
Necesidades de comunicaciones
Los científicos necesitaban:
Bajar imagenes de satélite de hielo
Bajar modelos meteorológicos
Los periodistas necesitaban:
Subir fotos
¡Subir vídeos!
Todos necesitaban/querían:
Comunicarse con sus equipos (resolver problemas)
Comunicarse con su família, amigos
67 / 162
68 / 162
Internet parte 1
69 / 162
Internet parte 1
Setup de las redes de comunicación
70 / 162
Setup parte 1
Un router TP-Link (gama de hogar, no profesional) conectado al Iridium
Dos cables con ancho de banda "ilimitado"
Sistema WiFi del router como red de invitados (guest network) limitando la velocidad
(50% o 70% del total) y menos prioridad
71 / 162
Internet parte 1
Medios de comunicación
72 / 162
Email
Recomandamos usar Thunderbird en cada portátil y usar la conexión cable
Fué bastante mal:
Windows tiene time-outs cortos (e.g. para DNS)
Thunderbird tiene problemas con conexiones inestables (y mala información para el
usuario)
Tuvimos que configurar muchos Thunderbirds para diferentes proveedores
(universidades, empresas, etc.)
Nunca sabíamos si había un error de configuración (servidores IMAP, SSL,
usuario/contraseña) o bien de conexión
Configuramos Thunderbird para bajar sólo emails recientes, sólo si son más
pequeños de 50 KB, etc.
Me dolía ver gente esperando para enviar un email delante de las pantallas. No era
fiable y era muy estresante
73 / 162
WhatsApp
En el WiFi red invitados mucha gente usaba WhatsApp.
En iPhone no se puede escribir si WhatsApp piensa que no hay conexión
En Android los mensajes salían y llegaban pero a veces tardaba horas
La gente dejaba teléfonos en la oficina que también saturaban la conexión (con updates,
etc.).
No siempre funcionaba
74 / 162
WhatsApp
En el WiFi red invitados mucha gente usaba WhatsApp.
En iPhone no se puede escribir si WhatsApp piensa que no hay conexión
En Android los mensajes salían y llegaban pero a veces tardaba horas
La gente dejaba teléfonos en la oficina que también saturaban la conexión (con updates,
etc.).
No siempre funcionaba
Anécdota: científicos escribieron un mensaje en un fichero de texto y lo querían mandar
por WhatsApp... (y tenían iPhone)
74 / 162
Internet parte 1
Bajando datos
75 / 162
Bajar datos científicos
Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o
menos, con las desconexiones, pero muy variable)
76 / 162
Bajar datos científicos
Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o
menos, con las desconexiones, pero muy variable)
until rsync -e "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120" 
-vtaz --progress --inplace --timeout=120 --bwlimit=10k
do
date
done
76 / 162
Bajar datos científicos
Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o
menos, con las desconexiones, pero muy variable)
until rsync -e "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120" 
-vtaz --progress --inplace --timeout=120 --bwlimit=10k
do
date
done
El código es un reflejo de como es el programador
76 / 162
Bajar datos científicos
Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o
menos, con las desconexiones, pero muy variable)
until rsync -e "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120" 
-vtaz --progress --inplace --timeout=120 --bwlimit=10k
do
date
done
El código es un reflejo de como es el programador
¡Bien persistente! (y con paciencia)
76 / 162
rsync --progress
Del "man rsync":
--progress
This option tells rsync to print information showing the
progress of the transfer. This gives a bored user something to
watch. With a modern rsync this is the same as specifying
77 / 162
rsync -e "ssh -o
ConnectTimeout=120"
rsync usa ssh para conectar, reducimos los timeouts para que se reconectara más rápido.
--inplace
Si rsync se cancelaba dejaba el fichero incompleto: así seguía después. Por defecto hace un
fichero temporal que se borra
78 / 162
Resumen comunicaciones parte 1
Mucha frustración: gente que no podía enviar mails o recibir durante días
En un entorno de estrés: tormentas, problemas técnicos, gente que su doctorado depende
de la expedición, etc.
Periodistas esperandome a las 7 de la mañana diciendo "¡¡¡Me levanté a las 4 y no he
podido enviar ningún WhatsApp!!!"
Gente furiosa golpeando los portátiles
A mí me funcionaba bien con:
fetchmail
postfix
mutt
79 / 162
80 / 162
81 / 162
Internet parte 2
82 / 162
Internet parte 2
Configuración de email
83 / 162
Sistema de email
Cuando llegamos a Austrália:
Compré (para 3 meses) un servidor VPS
Configuré Postfix (SMTP) i Dovecot (IMAP)
Configuré un servidor (un portátil) en el barco con Roundcube (Webmail), fetchmail
(cliente IMAP) y Postfix.
Con Django hicimos un sistema para crear usuarios en el servidor del barco y en el
servidor de Internet
Usé fetchmail, postfix, etc. que me había funcionado bien para mí, para los 80
expedicionarios
84 / 162
85 / 162
Crear los usuarios
Como tenía poco tiempo el script de Django sencillamente imprimía por pantalla los
comandos y los copié-pegué en el servidor local o remoto:
Local
useradd --create-home carles.pinaestany
echo carles.pinaestany:ahf5ze | chpasswd
useradd --create-home jen.thomas
echo jen.thomas:ahf5ze | chpasswd
86 / 162
Remoto
(también generado por el script de Django):
useradd --shell /bin/false --create-home carles.pinaestany
echo carles.pinaestany:Aib3gah0oTh5ii1pai0t | chpasswd
echo carles.pinaestany | saslpasswd2 -u ace-expedition.net Aib3gah0oTh5ii1pai0t
#####
useradd --shell /bin/false --create-home jen.thomas
echo jen.thomas:Bae5hahgho1iephuu5qu | chpasswd
echo jen.thomas | saslpasswd2 -u ace-expedition.net Bae5hahgho1iephuu5qu
87 / 162
Envío de emails
Limité el tamaño máximo de mail a 50 KB (en Roundcube y en Postfix)
88 / 162
Envío de emails
Limité el tamaño máximo de mail a 50 KB (en Roundcube y en Postfix)(después
incrementamos el tamaño a 200 KB)
88 / 162
Envío de emails
Limité el tamaño máximo de mail a 50 KB (en Roundcube y en Postfix)(después
incrementamos el tamaño a 200 KB)
Limité el número de conexiones del Postfix del barco al Postfix de Internet a máximo 2
para evitar saturar la conexión
88 / 162
Servidor de Internet
Apache2 (servir ficheros)
Dovecot (servir emails en IMAP), Postfix
Python3, wget, etc. para bajar datos
ssh, rsync, etc. para servir datos al barco
89 / 162
90 / 162
Internet parte 2
Recepción de emails
91 / 162
Recepción de emails (sistema 1)
Con Django generé un .fetchmailrc que bajaba todos los emails de todos los usuarios
(máximo de 50 KB).
Resultado:
Si no había emails fetchmail tardaba unas 4 horas para comprobar que no había
emails (se conectaba como cada usuario) (el protocolo IMAP tiene bastantes
comunicaciones de ida y vuelta, penalizan mucho en comunicaciones con latencias
altas)
Si la conexión no funcionaba: fetchmail "ignoraba" este usuario hasta la próxima
pasada
Los emails podían tardar 8 horas a ser recibidos! (y sólo si eran del tamaño
decidido)
fetchmail es ideal:
time outs altos por defecto
buena opción -v (con el protocolo IMAP paso a paso)
buenos exit codes
92 / 162
Recepción de emails (sistema 2)
Con Django generé un .fetchmailrc de sólo los usuarios de la parte 2 del viaje (se redujo
el tiempo de espera de 4 horas a unas 2 horas)
93 / 162
Recepción de emails (sistema 3,
definitivo)
Pensé que quería sólo recoger los emails de los usuarios que tenían emails. Y en orden de
recepción de los emails.
Miré como organiza Dovecot los emails y a ver si podía saber fácilmente qué usuarios tenían
emails en el servidor de Internet que deberían ser bajados.
94 / 162
Recepción de emails (sistema 3,
definitivo)
Pensé que quería sólo recoger los emails de los usuarios que tenían emails. Y en orden de
recepción de los emails.
Miré como organiza Dovecot los emails y a ver si podía saber fácilmente qué usuarios tenían
emails en el servidor de Internet que deberían ser bajados. Dovecot deja los emails nuevos en
/home/$USERNAME/Maildir/new
Además el nombre del fichero contiene el timestamp de recepción! P. ej:
1498094976.24034_1.servidor64
94 / 162
Internet parte 2
Más de sistema 3 de los emails
95 / 162
Escoger qué usuarios tenían mails a bajar
Script en el servidor de Internet
Un script en Python escaneaba todos los /home/* y imprimía en la salida estándard:
/home/carles.pinaestany/Maildir/new/1498094976.24034_1.servidor64
/home/john.doe/Maildir/new/1375352537.24034_1.servidor64
Script: https://github.com/cpina/science-cruise-data-
management/blob/master/ScienceCruiseDataManagement/utilities/messages_to_download.py
96 / 162
Script en el servidor del barco
cmd = "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120 root@{} 
./messages_to_download.py > '{}'".format(settings.IMAP_SERVER, output_file_path)
Entonces en el fichero "output_file_path" hay la salida del script del servidor. El script local
decide qué usuarios bajar primero (los usuarios con los mails más viejos).
97 / 162
Script en el servidor del barco
cmd = "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120 root@{} 
./messages_to_download.py > '{}'".format(settings.IMAP_SERVER, output_file_path)
Entonces en el fichero "output_file_path" hay la salida del script del servidor. El script local
decide qué usuarios bajar primero (los usuarios con los mails más viejos).
El script de Python entonces genera un "fetchmailrc" para este usuario y ejecuta:
fetchmail --timeout 120 --fetchmailrc {} --pidfile {}".format(file_name, pidfile)
¡En un "while" hasta que funcione!
Script: https://github.com/cpina/science-cruise-data-
management/blob/master/ScienceCruiseDataManagement/main/management/commands/downloademailsb
(también imprime estadísticas)
97 / 162
Internet parte 2
Sistema 3 de emails
Emails grandes
98 / 162
Emails demasiado grandes
Durante unos días la gente no sabía si habían recibido emails demasiado grandes
Hice un notificador de emails grandes. Usé Python con imaplib (imaplib para conectarse
y ver qué emails son grandes) (inspirado con el código de "notificaciones olfativas")
Script: https://github.com/cpina/science-cruise-data-
management/blob/master/ScienceCruiseDataManagement/main/management/commands/warningoversizee
99 / 162
Emails demasiado grandes
En todos los scripts es muy importante pensar que la conexión es inestable. El oversize email
notifier empezó a funcionar consistentemente cuando hice en su código:
import socket
socket.setdefaulttimeout(30)
while True:
try:
print("Checking: {} {}/{}".format(email_account.email_address, index+1, len(emails_active_leg)))
self.check_user(email_account.email_address)
break
except ConnectionResetError:
print("Connection Reset Error for user: {}. Trying again".format(email_account))
except socket.timeout:
print("Connection timeout Error for user: {}. Trying again".format(email_account))
except OSError:
print("Probably 'Network is unreachable' error for user {}. Trying again".format(email_account))
100 / 162
Emails demasiado grandes
warningoversizeemail.py hacia:
Enviar un email para notificar al receptor que un email era demasiado grande
Contenía el tamaño, subject, remitente y UID
Guardaba el email UID y otra información en una tabla (así sólo se notificaba una vez
que había un email grande)
El mail de notificación decía "si este email es muy importante reenvia la notificación al
equipo de data management"
101 / 162
¿Cómo bajamos los emails
grandes?
Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY
inestable, bajarse algo de más de 500 KB seguido era casi imposible
102 / 162
¿Cómo bajamos los emails
grandes?
Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY
inestable, bajarse algo de más de 500 KB seguido era casi imposible
Divide and conquer
102 / 162
¿Cómo bajamos los emails
grandes?
Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY
inestable, bajarse algo de más de 500 KB seguido era casi imposible
Divide and conquer
¡rsync!
102 / 162
¿Cómo bajamos los emails
grandes?
Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY
inestable, bajarse algo de más de 500 KB seguido era casi imposible
Divide and conquer
¡rsync!
¡Usar rsync para bajar emails!
102 / 162
downloademail.py
./downloademail.py $USERNAME $UID
103 / 162
downloademail.py
./downloademail.py $USERNAME $UID
Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene:
103 / 162
downloademail.py
./downloademail.py $USERNAME $UID
Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene:
carles@servidor64:~/Maildir$ cat dovecot-uidlist
3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50
87623 W1257 S1224 :1499969465.29226_1.servidor64
87624 :1499969500.29282_1.servidor64
103 / 162
downloademail.py
./downloademail.py $USERNAME $UID
Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene:
carles@servidor64:~/Maildir$ cat dovecot-uidlist
3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50
87623 W1257 S1224 :1499969465.29226_1.servidor64
87624 :1499969500.29282_1.servidor64
Parsea el dovecot-uidlist para encontrar el filename de un $UID
103 / 162
downloademail.py
./downloademail.py $USERNAME $UID
Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene:
carles@servidor64:~/Maildir$ cat dovecot-uidlist
3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50
87623 W1257 S1224 :1499969465.29226_1.servidor64
87624 :1499969500.29282_1.servidor64
Parsea el dovecot-uidlist para encontrar el filename de un $UID
Baja (rsync) el fichero que contiene el mail: p. ej.
$USERNAME/Maildir/new/1499969500.29282_1.servidor64. Puede tener que
reintentar, etc.
103 / 162
downloademail.py
./downloademail.py $USERNAME $UID
Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene:
carles@servidor64:~/Maildir$ cat dovecot-uidlist
3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50
87623 W1257 S1224 :1499969465.29226_1.servidor64
87624 :1499969500.29282_1.servidor64
Parsea el dovecot-uidlist para encontrar el filename de un $UID
Baja (rsync) el fichero que contiene el mail: p. ej.
$USERNAME/Maildir/new/1499969500.29282_1.servidor64. Puede tener que
reintentar, etc.
Guarda el fichero bajado en el servidor local en
$USERNAME/Maildir/.DownloadedEmails
103 / 162
downloademail.py
./downloademail.py $USERNAME $UID
Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene:
carles@servidor64:~/Maildir$ cat dovecot-uidlist
3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50
87623 W1257 S1224 :1499969465.29226_1.servidor64
87624 :1499969500.29282_1.servidor64
Parsea el dovecot-uidlist para encontrar el filename de un $UID
Baja (rsync) el fichero que contiene el mail: p. ej.
$USERNAME/Maildir/new/1499969500.29282_1.servidor64. Puede tener que
reintentar, etc.
Guarda el fichero bajado en el servidor local en
$USERNAME/Maildir/.DownloadedEmails
Actualiza (si es necesario) el fichero local $USERNAME/Maildir/subscriptions
103 / 162
¿Cómo enviar emails grandes?
Los usuarios venían y nos llevaban ficheros grandes (más de la capacidad del mail
máxima) en una memória USB, carpeta compartida, etc.
A veces los subíamos con un script (until rsync - sigue probando) al servidor de Internet
en /var/www/uploaded/misc/nombre_fichero.zip
Otras veces los poníamos en una cola durante la noche
104 / 162
Internet parte 2
Siguiendo con emails y otros ficheros
grandes
105 / 162
Subir/bajar ficheros durante la
noche
(esto fué la parte 2 y 3, la 1 era caos)
Los periodistas tenían una carpeta compartida y copiaban ficheros allá
Los ficheros y directorios se subían a http://ace-expedition.net/files/FECHA/ (con un
máximo de 30 MB al día)
Se bajaban datos para científicos
Se subía "la cola" (hasta las 8 de la mañana)
106 / 162
La cola: rsync_queue.py
Ver: https://github.com/cpina/rsync-queue
Un script que subía ficheros de un directorio en orden alfabético.
Los ficheros que nos pasaban los copiabamos con orden de preferencia:
010-john-photos_of_fish.zip
020-jen-data.zip
030-james-test_files.zip
107 / 162
La cola: rsync_queue.py
Cuando un fichero era subido: se mandaba un mail a nosotros con el enlace y se movía el
fichero a uploaded
A las 8: killall rsync_queue.py (y este manda un mail a nosotros con el progreso del
fichero que se está subiendo)
Internamente usa rsync con la opción --progress y así puede informar via email o puede
generar un fichero de log con la salida. Va analizando la salida de rsync
Ver: https://github.com/cpina/rsync-queue/blob/master/rsync_queue.py#L96
108 / 162
Internet parte 2
Bajando más datos
109 / 162
Otros datos científicos
En algunos casos, datos necesarios estaban en Internet sólo con protocolos FTP o HTTP
(no con rsync que era lo ideal)
110 / 162
Otros datos científicos
En algunos casos, datos necesarios estaban en Internet sólo con protocolos FTP o HTTP
(no con rsync que era lo ideal)
Teníamos scripts en el servidor de Internet (para bajarlos fiablemente) y después scripts
con rsync para bajarlos al barco
110 / 162
Usando los dos Iridiums para
datos
Conecté el Iridium de teléfono a la red de datos para subir ficheros cuando no había
llamadas
En el servidor de internet: redirigí el puerto 2222 al puerto 22
En el servidor del barco: tenía un default gw (Iridium1). Pero paquetes que iban al puerto
2222 los marcaba para ir a un gw diferente: Iridium2
Tenía dos rsync_queue.py: uno que usaba el puerto 22 y el otro el puerto 2222. Con
iptables, etc. conseguí enrutarlo a gateways diferentes.
111 / 162
112 / 162
Backups
113 / 162
¿De qué queríamos hacer copias
de seguridad?
De recursos compartidos de Windows
De discos duros
De zona "staging"
De otro servidor Linux (usamos rsync)
114 / 162
Backups de recursos compartidos
Fuímos a cada ordenador que recogía datos en el barco (muchos con Windows)
Compartimos la carpeta (en sólo lectura)
Asignamos una IP estática
Teníamos un modelo en Django que contenía:
IP
Usuario
Contraseña
Volumen
Destino
115 / 162
Evitamos cambiar configuraciones de los
ordenadores de científicos
Muchos ordenadores Windows estaban conectados a otros dispositivos via conexión
LAN
116 / 162
Evitamos cambiar configuraciones de los
ordenadores de científicos
Muchos ordenadores Windows estaban conectados a otros dispositivos via conexión
LAN
Añadimos un nuevo puerto LAN via conexiones USB
116 / 162
Evitamos cambiar configuraciones de los
ordenadores de científicos
Muchos ordenadores Windows estaban conectados a otros dispositivos via conexión
LAN
Añadimos un nuevo puerto LAN via conexiones USB
Era la manera de minimizar cambios de configuración en los ordenadores Windows
durante la expedición
116 / 162
Backups recursos compartidos
Teníamos un mail con el resultado del último backup
Y una tabla en la base de datos con los últimos resultados
117 / 162
Backups recursos compartidos
Teníamos un mail con el resultado del último backup
Y una tabla en la base de datos con los últimos resultados
La idea es un script en Python que usa rsync y este hace los mount/rsync/umount basado en los
datos que hay en el model (tabla)
117 / 162
118 / 162
GPS
119 / 162
GPS Introducción
Era importante que tuviéramos todos los datos de los GPS guardados
Para saber "¿Dónde estábamos en la fecha+hora D?"
En el barco NO había ningún sistema que ya lo guardara en una base de datos, tampoco
en ningún fichero de texto, etc.
120 / 162
GPS Trimble
Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie)
para el echo sounder
121 / 162
GPS Trimble
Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie)
para el echo sounder
Este Windows ya tenía instalado el software Serial Port Splitter
(https://www.eltima.com/products/serialsplitter/)
121 / 162
GPS Trimble
Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie)
para el echo sounder
Este Windows ya tenía instalado el software Serial Port Splitter
(https://www.eltima.com/products/serialsplitter/)
Bajé, instalé y configuré "GPS NMEA Router"
(http://arundale.com/docs/ais/nmearouter.html)
121 / 162
GPS Trimble
Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie)
para el echo sounder
Este Windows ya tenía instalado el software Serial Port Splitter
(https://www.eltima.com/products/serialsplitter/)
Bajé, instalé y configuré "GPS NMEA Router"
(http://arundale.com/docs/ais/nmearouter.html)
Compartí el directorio donde se guardaban los logs
121 / 162
GPS Trimble
Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie)
para el echo sounder
Este Windows ya tenía instalado el software Serial Port Splitter
(https://www.eltima.com/products/serialsplitter/)
Bajé, instalé y configuré "GPS NMEA Router"
(http://arundale.com/docs/ais/nmearouter.html)
Compartí el directorio donde se guardaban los logs
Escribí un parser de NMEA leyendo los ficheros en tiempo real (con rotación de
ficheros): lo insertaba a la base de datos (https://github.com/cpina/science-cruise-data-
management/blob/master/ScienceCruiseDataManagement/ship_data/management/commands/nmea_fi
(el parser NMEA es bastante interesante por la clase TailDirectory: lee continuamente del
fichero, usa un callback para líneas enteras, comprueba nuevos ficheros en el directorio, etc.)
121 / 162
Strings NMEA
$GPDTM,W84,,,,,,W84*66
$PORZD,A,009.4*31
$GPZDA,000000,31,12,2016,00,00*4C
$PORZX,000,0,,,0000,A*0E
$GPRMC,000001,A,4610.2061,S,05205.1274,E,06.4,224.191,311216,,,D*54
$GPGGA,000001,4610.2061,S,05205.1274,E,1,12,0.9,37.4,M,,,,*33
$GPVTG,224.2,T,,M,06.43,N,11.91,K,D*07
$GPHDT,232.39,T*0C
$GPROT,-000.16,A*2B
$PRDCU,111,232.39,00.19,00.54,00.37,R,02.56,00.30,L,A*08
$GPGSA,A,3,15,13,20,10,12,18,24,71,72,73,74,,,,,,,,,,,,,,1.8,0.9,1.5*3B
122 / 162
GPS Puente de comandamiento
(1/2)
En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base
de datos? ¿o el visualizador?)
123 / 162
GPS Puente de comandamiento
(1/2)
En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base
de datos? ¿o el visualizador?)
Subí corriendo y... la ¡tripulación lo había apagado!
123 / 162
GPS Puente de comandamiento
(1/2)
En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base
de datos? ¿o el visualizador?)
Subí corriendo y... la ¡tripulación lo había apagado!
Preguntamos para un segundo GPS en el barco: encontramos el del puente de
comandamiento
123 / 162
GPS Puente de comandamiento
(1/2)
En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base
de datos? ¿o el visualizador?)
Subí corriendo y... la ¡tripulación lo había apagado!
Preguntamos para un segundo GPS en el barco: encontramos el del puente de
comandamiento
La tripulación usó Franson GpsGate y "envió" los datos del GPS a nuestra IP via UDP
123 / 162
GPS Puente de comandamiento
(1/2)
En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base
de datos? ¿o el visualizador?)
Subí corriendo y... la ¡tripulación lo había apagado!
Preguntamos para un segundo GPS en el barco: encontramos el del puente de
comandamiento
La tripulación usó Franson GpsGate y "envió" los datos del GPS a nuestra IP via UDP
(la tripulación añadió una nueva IP de una nueva red a su tarjeta de red a su switch, yo
añadí un nuevo dispositivo USB para la nueva red)
123 / 162
GPS Puente de comandamiento
(1/2)
En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base
de datos? ¿o el visualizador?)
Subí corriendo y... la ¡tripulación lo había apagado!
Preguntamos para un segundo GPS en el barco: encontramos el del puente de
comandamiento
La tripulación usó Franson GpsGate y "envió" los datos del GPS a nuestra IP via UDP
(la tripulación añadió una nueva IP de una nueva red a su tarjeta de red a su switch, yo
añadí un nuevo dispositivo USB para la nueva red)
Con ngrep (y tcpdump) ví que sí, llegaban los datos... ¡pero no sabía como guardarlos!
123 / 162
GPS Puente de comandamiento
(2/2)
Bajé y compilé kplex (http://www.stripydog.com/kplex/index.html y lo configuré: recibe
desde un puerto UDP, lo guarda en un fichero, lo sirve via TCP (útil para tenerlo en otros
ordenadores en tiempo real en la red de la expedición)
124 / 162
GPS Puente de comandamiento
(2/2)
Bajé y compilé kplex (http://www.stripydog.com/kplex/index.html y lo configuré: recibe
desde un puerto UDP, lo guarda en un fichero, lo sirve via TCP (útil para tenerlo en otros
ordenadores en tiempo real en la red de la expedición)
Pero kplex no tiene soporte para "un fichero diferente cada día"... hice un script que
modificaba el fichero de configuración y reiniciaba kplex cada día a media noche
(después de la expedición me dí cuenta que con logrotate no hubiera necesitado el script para
cambiar el fichero de configuración ni reiniciar kplex)
124 / 162
Datos GPS
3 tablas para diferentes datos recibidos de los GPS (posición, velocidad, fecha y hora)
Cada tabla unos 16 miliones de registros
Los científicos ponían la hora de sus actividades (fácil) y el sistema ponía la posición
Se usaba para generar la ruta en el mapa
Los científicos también ponían la hora en una Web para saber la posición (para sus
notas)
125 / 162
126 / 162
Ferrybox
127 / 162
Ferrybox
Un Ferrybox lee continuamente datos de las propriadades de una fuente de agua.
Normalmente temperatura, salinidad, cantidad de oxígeno y fluorescencia.
128 / 162
Ferrybox
Un Ferrybox lee continuamente datos de las propriadades de una fuente de agua.
Normalmente temperatura, salinidad, cantidad de oxígeno y fluorescencia.
Fue muy útil para los científicos ver cuándo cambiaron las propriedades del mar para
cambiar sus pruebas y entender sus datos.
128 / 162
129 / 162
Ferrybox: problema
La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un
puerto (los científicos lo querían en tiempo real).
130 / 162
Ferrybox: problema
La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un
puerto (los científicos lo querían en tiempo real).
La Ferrybox era una Debian Etch.
130 / 162
Ferrybox: problema
La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un
puerto (los científicos lo querían en tiempo real).
La Ferrybox era una Debian Etch.
Para escribir en ficheros: mount -o rw,remount /
130 / 162
Ferrybox: problema
La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un
puerto (los científicos lo querían en tiempo real).
La Ferrybox era una Debian Etch.
Para escribir en ficheros: mount -o rw,remount /
Cambié la configuración de red para unirlo a la red de la expedición.
130 / 162
Ferrybox: tener un volcado en
tiempo real
El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos
131 / 162
Ferrybox: tener un volcado en
tiempo real
El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos
Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros
(información sin calibrar pero lo podían recalibrar)
131 / 162
Ferrybox: tener un volcado en
tiempo real
El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos
Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros
(información sin calibrar pero lo podían recalibrar)
Nos dimos cuenta que había muchos errores: a veces en los ficheros generados con
Python, a veces en los ficheros generados con "ferrycon"
131 / 162
Ferrybox: tener un volcado en
tiempo real
El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos
Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros
(información sin calibrar pero lo podían recalibrar)
Nos dimos cuenta que había muchos errores: a veces en los ficheros generados con
Python, a veces en los ficheros generados con "ferrycon"
En Linux dos procesos pueden leer del puerto serie pero entonces hay "interferencias"
(se consumen los bytes, paridad, etc.)
131 / 162
Ferrybox: tener un volcado en
tiempo real
El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos
Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros
(información sin calibrar pero lo podían recalibrar)
Nos dimos cuenta que había muchos errores: a veces en los ficheros generados con
Python, a veces en los ficheros generados con "ferrycon"
En Linux dos procesos pueden leer del puerto serie pero entonces hay "interferencias"
(se consumen los bytes, paridad, etc.)
Desactivé los procesos en Python que leían del puerto serie...
131 / 162
Ferrybox: tener un volcado al día
Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos
132 / 162
Ferrybox: tener un volcado al día
Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos
Hice un script que cada noche hacía "ferrycon audit -R" y guardaba los datos del día
anterior en un fichero (parseando la salida de "ferrycon audit -R" y guardando los datos
del día anterior)
132 / 162
Ferrybox: tener un volcado al día
Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos
Hice un script que cada noche hacía "ferrycon audit -R" y guardaba los datos del día
anterior en un fichero (parseando la salida de "ferrycon audit -R" y guardando los datos
del día anterior)
Copié el binario de rsync de Debian Etch a ~/bin/rsync , desde otro ordenador copiaba
los ficheros usando "rsync --rsync-path=/home/ferrybox/bin/rsync
ferrybox@ferrybox.lan:/var/ferrybox/data ."
132 / 162
Ferrybox: tener un volcado al día
Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos
Hice un script que cada noche hacía "ferrycon audit -R" y guardaba los datos del día
anterior en un fichero (parseando la salida de "ferrycon audit -R" y guardando los datos
del día anterior)
Copié el binario de rsync de Debian Etch a ~/bin/rsync , desde otro ordenador copiaba
los ficheros usando "rsync --rsync-path=/home/ferrybox/bin/rsync
ferrybox@ferrybox.lan:/var/ferrybox/data ."
Y cada día teníamos el fichero del día anterior!
132 / 162
Ferrybox: tener información a
tiempo real
Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack"
mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo
mostraba lo nuevo)
133 / 162
Ferrybox: tener información a
tiempo real
Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack"
mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo
mostraba lo nuevo)
No funcionaba:
"No "FerryLogData" service found on node <1>"
133 / 162
Ferrybox: tener información a
tiempo real
Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack"
mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo
mostraba lo nuevo)
No funcionaba:
"No "FerryLogData" service found on node <1>"
Usé "strace" para ver qué pasaba... y ferrycon intentaba hacer el fichero en un directorio
que no existia:
open("/var/ferrybox/log/testpointer.ack.ack", O_RDWR|O_CREAT|O_TRUNC,
0666) = -1 EACCES (Permission denied)
133 / 162
Ferrybox: tener información a
tiempo real
Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack"
mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo
mostraba lo nuevo)
No funcionaba:
"No "FerryLogData" service found on node <1>"
Usé "strace" para ver qué pasaba... y ferrycon intentaba hacer el fichero en un directorio
que no existia:
open("/var/ferrybox/log/testpointer.ack.ack", O_RDWR|O_CREAT|O_TRUNC,
0666) = -1 EACCES (Permission denied)
Creé el directorio, puse los permisos y ya se pudo generar el fichero adecuado para
ejecutar "ferrycon audit -R -p -f testpointer.ack"
133 / 162
Ferrybox: enseñar la información
a tiempo real
En el servidor hice un script en Python para ejecutar:
ssh fbuser@ferrybox.lan /home/fbuser/bin/output_last_information.sh
Cada 5 minutos, desde un script en Python que captura el stdout, lo parsea y lo pone en una
base de datos (https://github.com/cpina/science-cruise-data-
management/blob/master/ScienceCruiseDataManagement/ship_data/management/commands/getferryboxd
134 / 162
Ferrybox: enseñar la información
a tiempo real
En el servidor hice un script en Python para ejecutar:
ssh fbuser@ferrybox.lan /home/fbuser/bin/output_last_information.sh
Cada 5 minutos, desde un script en Python que captura el stdout, lo parsea y lo pone en una
base de datos (https://github.com/cpina/science-cruise-data-
management/blob/master/ScienceCruiseDataManagement/ship_data/management/commands/getferryboxd
Usando Django, una vista, template y Chart.js hice una visualización de Ferrybox
134 / 162
135 / 162
136 / 162
Missing files
137 / 162
Cambios de nombre de ficheros
Cada hora se hacía una copia de los ficheros de ordenadores usando rsync
138 / 162
Cambios de nombre de ficheros
Cada hora se hacía una copia de los ficheros de ordenadores usando rsync
Algunos científicos cambiaban los nombres de los ficheros: algunos ficheros estaban con
dos nombres
138 / 162
Cambios de nombre de ficheros
Cada hora se hacía una copia de los ficheros de ordenadores usando rsync
Algunos científicos cambiaban los nombres de los ficheros: algunos ficheros estaban con
dos nombres
Queríamos ver si había ficheros en un directorio que no estaban en otro directorio (en
este caso sólo el nombre de los ficheros, no por contenido).
Así nació: http://github.com/cpina/missing-files
138 / 162
Cambios de nombre de ficheros
Cada hora se hacía una copia de los ficheros de ordenadores usando rsync
Algunos científicos cambiaban los nombres de los ficheros: algunos ficheros estaban con
dos nombres
Queríamos ver si había ficheros en un directorio que no estaban en otro directorio (en
este caso sólo el nombre de los ficheros, no por contenido).
Así nació: http://github.com/cpina/missing-files
Había hecho uno parecido (para mis fotos) mirando el contenido de ficheros
138 / 162
Otras tareas
139 / 162
Profundidad del océano en la
Intranet
Profundidad ¿Por qué?
Equipo de bentos: estudiaron los animales del fondo del mar
Querían saber la profundidad para saber de dónde vinieron y entonces entender
mejor las comunidades
Tienen un dispositivo a la proa del barco que baja unos 700 metros y recoge
muestras
A veces pusieron una GoPro para ver que pasó con la red y cómo era el fondo del
mar (rocoso, de arena etc)
140 / 162
141 / 162
142 / 162
143 / 162
Usando el resonador
144 / 162
Mostrar la pantalla de un
Windows en la Intranet
145 / 162
Mostrar la pantalla de un
Windows en la Intranet
Pregunté a un amigo y me pasó el link de un software para Windows que hace un
screenshot cada minuto y lo guarda en un directorio
145 / 162
Mostrar la pantalla de un
Windows en la Intranet
Pregunté a un amigo y me pasó el link de un software para Windows que hace un
screenshot cada minuto y lo guarda en un directorio
Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla
en la intranet
145 / 162
Mostrar la pantalla de un
Windows en la Intranet
Pregunté a un amigo y me pasó el link de un software para Windows que hace un
screenshot cada minuto y lo guarda en un directorio
Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla
en la intranet
Pero no podíamos instalar nada en este ordenador Windows (problemas políticos)
145 / 162
Mostrar la pantalla de un
Windows en la Intranet
Pregunté a un amigo y me pasó el link de un software para Windows que hace un
screenshot cada minuto y lo guarda en un directorio
Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla
en la intranet
Pero no podíamos instalar nada en este ordenador Windows (problemas políticos)
Nota: en sistemas GNU/Linux se puede usar el comando "import" para hacer screenshots
fácilmente
145 / 162
Mostrar la pantalla de un
Windows en la Intranet
Pregunté a un amigo y me pasó el link de un software para Windows que hace un
screenshot cada minuto y lo guarda en un directorio
Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla
en la intranet
Pero no podíamos instalar nada en este ordenador Windows (problemas políticos)
Nota: en sistemas GNU/Linux se puede usar el comando "import" para hacer screenshots
fácilmente
Si el ordenador Windows tuviera VNC: podría haber usado el paquete "vncsnapshot"
145 / 162
Echoview y NMEA strings
El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA
146 / 162
Echoview y NMEA strings
El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA
Manda un string con la profundiad en metro, pies y fantoms (!)
146 / 162
Echoview y NMEA strings
El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA
Manda un string con la profundiad en metro, pies y fantoms (!)
Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento")
146 / 162
Echoview y NMEA strings
El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA
Manda un string con la profundiad en metro, pies y fantoms (!)
Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento")
Con un script nuevo lo insertaba a la base de datos a tiempo real
146 / 162
Echoview y NMEA strings
El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA
Manda un string con la profundiad en metro, pies y fantoms (!)
Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento")
Con un script nuevo lo insertaba a la base de datos a tiempo real
En la página principal de la Intranet mostraba el valor para el equipo bentos
146 / 162
Echoview y NMEA strings
El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA
Manda un string con la profundiad en metro, pies y fantoms (!)
Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento")
Con un script nuevo lo insertaba a la base de datos a tiempo real
En la página principal de la Intranet mostraba el valor para el equipo bentos
Lo tenía en la base de datos para consultar fácil por cuando lo pedían
146 / 162
147 / 162
CTD Winch
148 / 162
149 / 162
150 / 162
CTD: el problema
Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía
el teclado en pantalla)
151 / 162
CTD: el problema
Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía
el teclado en pantalla)
Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP
cuando se iniciaba
151 / 162
CTD: el problema
Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía
el teclado en pantalla)
Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP
cuando se iniciaba
Conecté el portátil al cable de red, puse una IP, un nmap... y tenía un servidor de VNC
(era un Windows CE)
151 / 162
CTD: el problema
Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía
el teclado en pantalla)
Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP
cuando se iniciaba
Conecté el portátil al cable de red, puse una IP, un nmap... y tenía un servidor de VNC
(era un Windows CE)
Me conecté con VNC (xtightvnc, krdc, etc.) y pude escribir en el campo donde no
aparecía el teclado
151 / 162
CTD: el problema
Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía
el teclado en pantalla)
Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP
cuando se iniciaba
Conecté el portátil al cable de red, puse una IP, un nmap... y tenía un servidor de VNC
(era un Windows CE)
Me conecté con VNC (xtightvnc, krdc, etc.) y pude escribir en el campo donde no
aparecía el teclado
¡Pero no aceptó el valor!
151 / 162
CTD: solución
Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian
Winch)
152 / 162
CTD: solución
Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian
Winch)
Pasamos fotos del problema, comparamos notas, etc. hasta que nos dieron el software
para reinstalar (lo bajé en Austrália, eran unos 500 MB)
152 / 162
CTD: solución
Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian
Winch)
Pasamos fotos del problema, comparamos notas, etc. hasta que nos dieron el software
para reinstalar (lo bajé en Austrália, eran unos 500 MB)
Con GNU/Linux formateé un pendrive con FAT12 (!) pero cuando cargó el nuevo sistema
no funcionó (pánico)
152 / 162
CTD: solución
Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian
Winch)
Pasamos fotos del problema, comparamos notas, etc. hasta que nos dieron el software
para reinstalar (lo bajé en Austrália, eran unos 500 MB)
Con GNU/Linux formateé un pendrive con FAT12 (!) pero cuando cargó el nuevo sistema
no funcionó (pánico)
Dentro de sus ficheros encontré otra imagen que sí que funcionó... al menos unos días
porqué más problemas pasaron
152 / 162
153 / 162
Instalar paquetes Debian en otros
ordenadores
154 / 162
Instalar paquetes Debian en otros
ordenadores
Gente con Ubuntu que necesitaban paquetes que no tenían
155 / 162
Instalar paquetes Debian en otros
ordenadores
Gente con Ubuntu que necesitaban paquetes que no tenían
Usé:
tar -T /tmp/files.txt -cvf /tmp/gnuplot-data.tar
Para generar un fichero .tar con todos los ficheros de un paquete. Sólo tenía que
descomprimir en el otro ordenador:
cd /
tar -xvf /media/user/USB/gnuplot-data.tar
(no ejecuta los scripts de post instalación, ni lo añade en el registro de paquetes
instalados, ni añade usuarios de sistema, etc. pero funcionó para todo!)
155 / 162
Microsoft Office (en un Mac) no
funcionaba (problema con
licencias)
156 / 162
Sustituirlo por LibreOffice
Pero en el primer mes no tenía el fichero .dmg de LibreOffice :-(
Cuando ví a otra persona con Mac y LibreOffice hice un tar del
/Applications/LibreOffice.org
Descomprimí el tar en el ordenador del otro usuario
157 / 162
Sustituirlo por LibreOffice
Pero en el primer mes no tenía el fichero .dmg de LibreOffice :-(
Cuando ví a otra persona con Mac y LibreOffice hice un tar del
/Applications/LibreOffice.org
Descomprimí el tar en el ordenador del otro usuario Pero el primer usuario... ¡lo tenía en
francés! (y no se podía cambiar)
157 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
Un dispositivo con una RaspberryPi no se conectaba al WiFi
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
Un dispositivo con una RaspberryPi no se conectaba al WiFi
Dispositivo requería Access Point que no llegó al barco
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
Un dispositivo con una RaspberryPi no se conectaba al WiFi
Dispositivo requería Access Point que no llegó al barco
Disco duro que no se podía montar en Windows
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
Un dispositivo con una RaspberryPi no se conectaba al WiFi
Dispositivo requería Access Point que no llegó al barco
Disco duro que no se podía montar en Windows
Un dispositivo Bluetooth que no se conectaba al ordenador (imán)
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
Un dispositivo con una RaspberryPi no se conectaba al WiFi
Dispositivo requería Access Point que no llegó al barco
Disco duro que no se podía montar en Windows
Un dispositivo Bluetooth que no se conectaba al ordenador (imán)
Configurar access points para acceso en diferentes partes del barco
158 / 162
Otras tareas
Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo)
Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp
Un dispositivo con una RaspberryPi no se conectaba al WiFi
Dispositivo requería Access Point que no llegó al barco
Disco duro que no se podía montar en Windows
Un dispositivo Bluetooth que no se conectaba al ordenador (imán)
Configurar access points para acceso en diferentes partes del barco
Configurar ordenador como router para dar acceso a equipo ROPOS desde punte de
comandamiento a sus euqipos
Y un sin fin más!
158 / 162
Recomendaciones para una
expedición similar
Internet:
Configurar un sistema de mail específico
rsync para todo (subir/bajar ficheros, emails, etc.)
Usar el navegador en modo texto "links"
Bajar documentación
Tener Wikipedia offline?
Otros problemas:
Pensar que todo es solucionable (aunque sea con workarounds)
Proponer alternativas en el barco, o que alguien de su equipo busque y envie
documentos, soluciones, etc.
Nota: usé casi todo lo que sé (de hackdays, de cuando era pequeño y jugaba con el puerto
paralelo, universidad, trabajos anteriores, etc.)
159 / 162
¡Muchas gracias!
¿Preguntas?
160 / 162
161 / 162
Contactos
Jen Thomas (jenny_t152@yahoo.co.uk)
Carles Pina i Estany (carles@pina.cat)
Licencia
Esta obra está bajo Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.
Diapositivas
Las diapositivas han sido escritas usando Markdown y renderizadas usando remarkjs
(https://remarkjs.com) (¡es muy cómodo!)
Para el apng de la página del título: apngasm (paquete Debian)
Diapositivas: https://github.com/cpina/ace-it-presentation
162 / 162

More Related Content

Similar to Optimizando la gestión de datos en la expedición antártica con Django

Preguntas tipo prueba saber sistemas
Preguntas tipo prueba saber sistemasPreguntas tipo prueba saber sistemas
Preguntas tipo prueba saber sistemasIrela García
 
El ordenador, Internet y la Web 2.0
El ordenador, Internet y la Web 2.0El ordenador, Internet y la Web 2.0
El ordenador, Internet y la Web 2.0Morimen Ayuso
 
Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1natalialwl
 
Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1natalialwl
 
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOSSISTEMAS OPERATIVOS
SISTEMAS OPERATIVOSUTMACH
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos infoMichaelSaltos3
 
Screencast aprende python - anexo python en winshit
Screencast   aprende python - anexo python en winshitScreencast   aprende python - anexo python en winshit
Screencast aprende python - anexo python en winshitNoe Nieto
 
Cuaderno_Arduino.pdf
Cuaderno_Arduino.pdfCuaderno_Arduino.pdf
Cuaderno_Arduino.pdfEdwin4321
 
Buildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en PythonBuildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en PythonCodeSyntax
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos infoPaUla ELy
 
Sistemas operativos infomatica
Sistemas operativos infomaticaSistemas operativos infomatica
Sistemas operativos infomaticaUTMACH
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos infoSolcitocruz
 

Similar to Optimizando la gestión de datos en la expedición antártica con Django (20)

Preguntas tipo prueba saber sistemas
Preguntas tipo prueba saber sistemasPreguntas tipo prueba saber sistemas
Preguntas tipo prueba saber sistemas
 
El ordenador, Internet y la Web 2.0
El ordenador, Internet y la Web 2.0El ordenador, Internet y la Web 2.0
El ordenador, Internet y la Web 2.0
 
Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1
 
Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1Mantenimiento folleto instalación s.o1
Mantenimiento folleto instalación s.o1
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos info
 
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOSSISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos info
 
TRABAJO DE INFORMATICA
TRABAJO DE INFORMATICATRABAJO DE INFORMATICA
TRABAJO DE INFORMATICA
 
Manual
ManualManual
Manual
 
Screencast aprende python - anexo python en winshit
Screencast   aprende python - anexo python en winshitScreencast   aprende python - anexo python en winshit
Screencast aprende python - anexo python en winshit
 
Cuaderno_Arduino.pdf
Cuaderno_Arduino.pdfCuaderno_Arduino.pdf
Cuaderno_Arduino.pdf
 
Cuaderno_Arduino.pdf
Cuaderno_Arduino.pdfCuaderno_Arduino.pdf
Cuaderno_Arduino.pdf
 
Cuaderno_Arduino.pdf
Cuaderno_Arduino.pdfCuaderno_Arduino.pdf
Cuaderno_Arduino.pdf
 
Hack x crack_cuaderno_arduino
Hack x crack_cuaderno_arduinoHack x crack_cuaderno_arduino
Hack x crack_cuaderno_arduino
 
Buildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en PythonBuildout: Crear y desplegar entornos reproducibles en Python
Buildout: Crear y desplegar entornos reproducibles en Python
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos info
 
grupo 9
grupo 9grupo 9
grupo 9
 
Sistemas operativos infomatica
Sistemas operativos infomaticaSistemas operativos infomatica
Sistemas operativos infomatica
 
Sistemas operativos info
Sistemas operativos infoSistemas operativos info
Sistemas operativos info
 
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOSSISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS
 

More from Carles Pina Estany

Circumnavigating the Antarctic with Python and Django during ACE 2016
Circumnavigating the Antarctic with Python and Django during ACE 2016Circumnavigating the Antarctic with Python and Django during ACE 2016
Circumnavigating the Antarctic with Python and Django during ACE 2016Carles Pina Estany
 
Expedición ACE: dando la vuelta la Antártida
Expedición ACE: dando la vuelta la AntártidaExpedición ACE: dando la vuelta la Antártida
Expedición ACE: dando la vuelta la AntártidaCarles Pina Estany
 
Dynamic Slides using OpenOffice.org Impress and Python
Dynamic Slides using OpenOffice.org Impress and PythonDynamic Slides using OpenOffice.org Impress and Python
Dynamic Slides using OpenOffice.org Impress and PythonCarles Pina Estany
 

More from Carles Pina Estany (8)

Circumnavigating the Antarctic with Python and Django during ACE 2016
Circumnavigating the Antarctic with Python and Django during ACE 2016Circumnavigating the Antarctic with Python and Django during ACE 2016
Circumnavigating the Antarctic with Python and Django during ACE 2016
 
Expedición ACE: dando la vuelta la Antártida
Expedición ACE: dando la vuelta la AntártidaExpedición ACE: dando la vuelta la Antártida
Expedición ACE: dando la vuelta la Antártida
 
Seal traveling - Icehack
Seal traveling - IcehackSeal traveling - Icehack
Seal traveling - Icehack
 
Benches
BenchesBenches
Benches
 
Dacco
DaccoDacco
Dacco
 
Midi madness
Midi madnessMidi madness
Midi madness
 
Olfactory notifications
Olfactory notificationsOlfactory notifications
Olfactory notifications
 
Dynamic Slides using OpenOffice.org Impress and Python
Dynamic Slides using OpenOffice.org Impress and PythonDynamic Slides using OpenOffice.org Impress and Python
Dynamic Slides using OpenOffice.org Impress and Python
 

Recently uploaded

Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webDecaunlz
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfisrael garcia
 
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMCOMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMcespitiacardales
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdfFAUSTODANILOCRUZCAST
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfOscarBlas6
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAdanielaerazok
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenadanielaerazok
 
institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenajuniorcuellargomez
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 

Recently uploaded (10)

Buscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la webBuscadores, SEM SEO: el desafío de ser visto en la web
Buscadores, SEM SEO: el desafío de ser visto en la web
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
 
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COMCOMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
COMOGANARAMIGODPARACRISTOIGLESIAADVENTISTANECOCLI,COM
 
libro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdflibro de Ciencias Sociales_6to grado.pdf
libro de Ciencias Sociales_6to grado.pdf
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
COMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdfCOMPETENCIAS CIUDADANASadadadadadadada .pdf
COMPETENCIAS CIUDADANASadadadadadadada .pdf
 
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENAINSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
INSTITUCION EDUCATIVA LA ESPERANZA SEDE MAGDALENA
 
Institucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalenaInstitucion educativa la esperanza sede la magdalena
Institucion educativa la esperanza sede la magdalena
 
institucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalenainstitucion educativa la esperanza sede magdalena
institucion educativa la esperanza sede magdalena
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 

Optimizando la gestión de datos en la expedición antártica con Django

  • 1. Dando la vuelta a la Antártida con software libre Universidad Nacional de Cañete, 2017. Carles Pina y Jen Thomas
  • 2. Contenido Quiénes somos ¿Qué es ACE? Gestión de datos Django en la expedición Sistema informático y telecomunicaciones Sistema de email Otros: backups GPS Ferrybox profundidad CTD paquetes instalar LibreOffice sin el instalador ... 2 / 162
  • 4. Carles Pina i Estany Nací en Manresa, cerca de Barcelona (España) Desde 2009 trabajo en Mendeley (departamento de Mendeley Desktop) trabajando en C++/Qt Normalmente vivo en Londres (Reino Unido) pero nos tomamos un año sabático para viajar Me gusta el software libre (uso Debian desde Debian Potato en el 2000) Algunos proyectos que hago/ayudo... 4 / 162
  • 6. (lo usamos mucho en la Antártida) 6 / 162
  • 7. (lo usamos mucho en la Antártida) (xnetload no está mantenido, después del viaje hice qnetload) https://github.com/cpina/qnetload 6 / 162
  • 13. Otras cosas (pequeñas, viejas o no mantenidas) Catux-USB (2004) Django (después de la expedición) Pidgin (notificaciones) geeqie (copiar path) Pydance (soporte multilingue) Amarok gnokii ... 12 / 162
  • 15. Images: Polar Data Centre, British Antarctic Survey 14 / 162
  • 17. Mapas de dispersión de aves usando Leaflet y Open Street Map 16 / 162
  • 20. Copyright: Swiss Polar Institute 19 / 162
  • 25. Copyright Swiss Polar Institute 24 / 162
  • 29. La gestión de datos 28 / 162
  • 30. ¿Qué es y qué hicimos? 29 / 162
  • 34. Resumen de nuestro trabajo Guardar datos Una base de datos (actividades, metadatos, etc.) Interfaz de la base de datos Intranet para acceder a los datos, ver información Mapa de la ruta Comunicaciones - email, internet Ayuda con dispositivos, portátiles, software.... Aconsejar a los científicos en la gestión de datos 33 / 162
  • 36. ¿Dónde guardar los datos? A principios de diciembre Jen preguntó a los 22 investigadores principales cuantos GB necesitarán para almacenar sus datos Estimamos en total unos 60 TB 35 / 162
  • 37. ¿Dónde guardar los datos? A principios de diciembre Jen preguntó a los 22 investigadores principales cuantos GB necesitarán para almacenar sus datos Estimamos en total unos 60 TB Preguntamos al barco qué almacenamiento tienen 35 / 162
  • 38. ¿Dónde guardar los datos? A principios de diciembre Jen preguntó a los 22 investigadores principales cuantos GB necesitarán para almacenar sus datos Estimamos en total unos 60 TB Preguntamos al barco qué almacenamiento tienen Nos dicen que 500 GB (0.5 TB) 35 / 162
  • 39. Datos, datos, datos... Preguntamos, miramos, comparamos y al final compramos: 15 discos duros 8 TB Western Digital 15 discos duros 8 TB Seagate 2 NAS Synology DS-1815+ 2 Gigabit switches 2 SAI APC ... 36 / 162
  • 40. Datos, datos, datos... Preguntamos, miramos, comparamos y al final compramos: 15 discos duros 8 TB Western Digital 15 discos duros 8 TB Seagate 2 NAS Synology DS-1815+ 2 Gigabit switches 2 SAI APC ... ¡todo esto llegó a Sudáfrica 2 días antes de salir! 36 / 162
  • 41. Datos, datos, datos... ¡Lo pusimos a punto! Incluyó bajarse 300 MB para los Synologys: corrí a una cafeteria y después al hotel para bajarme los ficheros necesarios. 37 / 162
  • 42. Material de repuesto En un barco se necesitan piezas de recambio para casi todo. Compramos material sobrante (discos, switches, etc.) ¡Durante un mes no teníamos acceso a ninguna tienda! 38 / 162
  • 45. Django No sabíamos Django antes de empezar Tiene muy buena documentación off-line Yo tenía mucho código Python en mi ~/git (código mío, de proyectos libres). Sirve a veces más que libros, manuales, etc. 41 / 162
  • 46. ¿Por qué Django nos era muy cómodo? Escribiendo un modelo genera formularios y base de datos Cambiando el modelo hace las migraciones en la base de datos Sistema autenticación de usuarios Sistema de permisos de usuarios Sistema de plantillas integrado con los modelos Muy fácil de extender como programador La interfaz de usuario (parte admin) cómoda sin esfuerzo 42 / 162
  • 47. Modelos en Django Ejemplo de model en Django: class StorageCrate(models.Model): name = models.CharField(max_length=255, unique=True) location = models.CharField(max_length=255) description = models.CharField(max_length=255, null=True, blank=True) comment = models.TextField(null=True, blank=True) 43 / 162
  • 48. Modelos en Django Ejemplo de model en Django: class StorageCrate(models.Model): name = models.CharField(max_length=255, unique=True) location = models.CharField(max_length=255) description = models.CharField(max_length=255, null=True, blank=True) comment = models.TextField(null=True, blank=True) Genera los formularios Genera la tabla en la base de datos si no existía Genera migraciones si el modelo existía y era diferente 43 / 162
  • 49. La base de datos Teníamos que crear una base de datos para que los científicos introdujeran información de sus actividades - sus metadatos Yo conocía Flask, Mysql, SQLAlchemy Pero ¿cómo hacer los formularios para entrar todos los datos? (a mano con Flask tardarí mucho, con C++/Qt aún peor!) Estaba una noche en casa un amigo en Londres y le pregunté como lo haría él 44 / 162
  • 50. La base de datos Teníamos que crear una base de datos para que los científicos introdujeran información de sus actividades - sus metadatos Yo conocía Flask, Mysql, SQLAlchemy Pero ¿cómo hacer los formularios para entrar todos los datos? (a mano con Flask tardarí mucho, con C++/Qt aún peor!) Estaba una noche en casa un amigo en Londres y le pregunté como lo haría él Dijo: ¡con Django! (yo pensaba que no quería Django, que era demasiado grande) 44 / 162
  • 51. La base de datos Teníamos que crear una base de datos para que los científicos introdujeran información de sus actividades - sus metadatos Yo conocía Flask, Mysql, SQLAlchemy Pero ¿cómo hacer los formularios para entrar todos los datos? (a mano con Flask tardarí mucho, con C++/Qt aún peor!) Estaba una noche en casa un amigo en Londres y le pregunté como lo haría él Dijo: ¡con Django! (yo pensaba que no quería Django, que era demasiado grande) Y hicimos un proyecto pequeño en Django de ejemplo para que viera como funciona 44 / 162
  • 52. ¡Gracias Fran y Django! 45 / 162
  • 53. science-cruise-data-management http://github.com/cpina/science-cruise-data-management Empecé a programar toda la semana... ¡la documentación de Django está muy bien! (y disponible offline) Visité a Fran para preguntarle más cosas Jen y yo hicimos toda la Intranet con Django 46 / 162
  • 57. Mapa Yo había usado la librería Leaflet (sobretodo para Benches) 50 / 162
  • 58. Mapa Yo había usado la librería Leaflet (sobretodo para Benches) Queríamos hacer un mapa de la expedición: ¿Dónde estábamos? ¿Dónde han pasado los eventos? 50 / 162
  • 59. Mapa Yo había usado la librería Leaflet (sobretodo para Benches) Queríamos hacer un mapa de la expedición: ¿Dónde estábamos? ¿Dónde han pasado los eventos? Pero la proyección del mapa no es la estándard 50 / 162
  • 61. Proyección del mapa Leaflet tiene soporte para diferentes proyecciones (con un plugin) La Antártida normalmente se visualiza con proyección EPSG:3031 (el usado normalmente es Mercator) No hay tiles (imágenes PNG como las de openstreetmap.org) renderizadas con la proyección EPSG:3031 En lugar de tiles usé shapefiles (*.shp): describen el contorno de la Antártida Pasé los shapefiles del formato original (shp) a geojson (para que Leaflet lo cargara) 52 / 162
  • 62. Proyección del mapa Leaflet tiene soporte para diferentes proyecciones (con un plugin) La Antártida normalmente se visualiza con proyección EPSG:3031 (el usado normalmente es Mercator) No hay tiles (imágenes PNG como las de openstreetmap.org) renderizadas con la proyección EPSG:3031 En lugar de tiles usé shapefiles (*.shp): describen el contorno de la Antártida Pasé los shapefiles del formato original (shp) a geojson (para que Leaflet lo cargara) ogr2ogr -f GeoJSON -simplify 1000 -t_srs EPSG:3031 Coastline_high_res_polygon.geojson Coastline_high_res_polygon.shp 52 / 162
  • 63. Resumen Django Sin Django hubieramos tardado muchísimo más Si es necesario Django permite fácilmente acceder a la base de datos directamente (y aún crear los objetos de los modelos) Los "commands" (parte de la aplicación de Django pero se usan desde la línea de comandos, no desde el navegador) son muy cómodos de escribir Estamos muy contentos con Django (aunque primero pensé que no sería tan útil) 53 / 162
  • 66. Servidores hardware Un portátil viejo: Ubuntu 16.10 (se calentaba, etc.). Fué cómodo porqué lo llevamos ya semi configurado de casa (segundo mes hasta el final): Añadimos un portátil nuevo con Ubuntu 16.10 56 / 162
  • 67. Tareas de los servidores Sistema Django Sistema de email (ver más adelante) Subir/bajar ficheros internet (ver más adelante) DNS (Bind) (para http://ace-intranet.lan, http://ace-mail.lan) DHCP Server (ISC DHCP) Servidor git interno (no podíamos depender de nada de Internet) Importar datos GPS (ver más adelante) Copias de seguridad de diferentes ordenadores (ver más adelante) Copias de seguridad entre NAS1 y NAS2 (rsync) Muchas otras tareas pequeñas (p. ej. reiniciar un router a medianoche) 57 / 162
  • 68. Internet en el barco 58 / 162
  • 69. Introducción Teníamos 2 sistemas Iridium Inicialmente un sistema para llamadas, otro para Internet Esto son, 128 kbits para oficialmente 80 personas 59 / 162
  • 70. Introducción Teníamos 2 sistemas Iridium Inicialmente un sistema para llamadas, otro para Internet Esto son, 128 kbits para oficialmente 80 personas Las conexiones via Iridium son MUY inestables L. Wood, SaVi: satellite constellation visualization, First Annual CCSR Research Symposium (CRS 2011), Centre for Communication Systems Research, 30 June 2011. http://arxiv.org/abs/1204.3265 59 / 162
  • 71. Iridium La constelación tiene 66 satélites operativos 60 / 162
  • 72. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium 60 / 162
  • 73. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas 60 / 162
  • 74. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y desconecta porqué no son geostacionarios y hay cambios de satélite 60 / 162
  • 75. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y desconecta porqué no son geostacionarios y hay cambios de satélite Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km) 60 / 162
  • 76. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y desconecta porqué no son geostacionarios y hay cambios de satélite Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km) Por la noche a veces se pueden ver (como estrellas fugaces) 60 / 162
  • 77. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y desconecta porqué no son geostacionarios y hay cambios de satélite Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km) Por la noche a veces se pueden ver (como estrellas fugaces) Estan lanzando satélites de nueva generación 60 / 162
  • 78. Iridium La constelación tiene 66 satélites operativos Nombre Iridium porqué originalmente había 77 satélites: el número atómico de Iridium Tienen satélites sin usar: los activan y ponen en el plano cuando hay problemas Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y desconecta porqué no son geostacionarios y hay cambios de satélite Los satélites están a unos 780 Km de la tierra (GPS a unos 20.000 Km) Por la noche a veces se pueden ver (como estrellas fugaces) Estan lanzando satélites de nueva generación ¡Hay cobertura en el polo norte y sur! Pero MUY lento y inestable: se conecta y desconecta porqué no son geostacionarios y hay cambios de satélite 60 / 162
  • 83. VSAT No usamos VSAT durante la expedición Cuando lo pude probar (hemisferio norte, por el contrato que el barco tiene): ¡unos 10 Mbps estables! La antena apunta siempre (con motores) al satélite geostacionario A unos 35.900 Km de la tierra (geoestacionario) 65 / 162
  • 85. Necesidades de comunicaciones Los científicos necesitaban: Bajar imagenes de satélite de hielo Bajar modelos meteorológicos Los periodistas necesitaban: Subir fotos ¡Subir vídeos! Todos necesitaban/querían: Comunicarse con sus equipos (resolver problemas) Comunicarse con su família, amigos 67 / 162
  • 88. Internet parte 1 Setup de las redes de comunicación 70 / 162
  • 89. Setup parte 1 Un router TP-Link (gama de hogar, no profesional) conectado al Iridium Dos cables con ancho de banda "ilimitado" Sistema WiFi del router como red de invitados (guest network) limitando la velocidad (50% o 70% del total) y menos prioridad 71 / 162
  • 90. Internet parte 1 Medios de comunicación 72 / 162
  • 91. Email Recomandamos usar Thunderbird en cada portátil y usar la conexión cable Fué bastante mal: Windows tiene time-outs cortos (e.g. para DNS) Thunderbird tiene problemas con conexiones inestables (y mala información para el usuario) Tuvimos que configurar muchos Thunderbirds para diferentes proveedores (universidades, empresas, etc.) Nunca sabíamos si había un error de configuración (servidores IMAP, SSL, usuario/contraseña) o bien de conexión Configuramos Thunderbird para bajar sólo emails recientes, sólo si son más pequeños de 50 KB, etc. Me dolía ver gente esperando para enviar un email delante de las pantallas. No era fiable y era muy estresante 73 / 162
  • 92. WhatsApp En el WiFi red invitados mucha gente usaba WhatsApp. En iPhone no se puede escribir si WhatsApp piensa que no hay conexión En Android los mensajes salían y llegaban pero a veces tardaba horas La gente dejaba teléfonos en la oficina que también saturaban la conexión (con updates, etc.). No siempre funcionaba 74 / 162
  • 93. WhatsApp En el WiFi red invitados mucha gente usaba WhatsApp. En iPhone no se puede escribir si WhatsApp piensa que no hay conexión En Android los mensajes salían y llegaban pero a veces tardaba horas La gente dejaba teléfonos en la oficina que también saturaban la conexión (con updates, etc.). No siempre funcionaba Anécdota: científicos escribieron un mensaje en un fichero de texto y lo querían mandar por WhatsApp... (y tenían iPhone) 74 / 162
  • 94. Internet parte 1 Bajando datos 75 / 162
  • 95. Bajar datos científicos Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o menos, con las desconexiones, pero muy variable) 76 / 162
  • 96. Bajar datos científicos Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o menos, con las desconexiones, pero muy variable) until rsync -e "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120" -vtaz --progress --inplace --timeout=120 --bwlimit=10k do date done 76 / 162
  • 97. Bajar datos científicos Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o menos, con las desconexiones, pero muy variable) until rsync -e "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120" -vtaz --progress --inplace --timeout=120 --bwlimit=10k do date done El código es un reflejo de como es el programador 76 / 162
  • 98. Bajar datos científicos Con un rsync bajábamos datos científicos de noche (90 minutos para 15 MB más o menos, con las desconexiones, pero muy variable) until rsync -e "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120" -vtaz --progress --inplace --timeout=120 --bwlimit=10k do date done El código es un reflejo de como es el programador ¡Bien persistente! (y con paciencia) 76 / 162
  • 99. rsync --progress Del "man rsync": --progress This option tells rsync to print information showing the progress of the transfer. This gives a bored user something to watch. With a modern rsync this is the same as specifying 77 / 162
  • 100. rsync -e "ssh -o ConnectTimeout=120" rsync usa ssh para conectar, reducimos los timeouts para que se reconectara más rápido. --inplace Si rsync se cancelaba dejaba el fichero incompleto: así seguía después. Por defecto hace un fichero temporal que se borra 78 / 162
  • 101. Resumen comunicaciones parte 1 Mucha frustración: gente que no podía enviar mails o recibir durante días En un entorno de estrés: tormentas, problemas técnicos, gente que su doctorado depende de la expedición, etc. Periodistas esperandome a las 7 de la mañana diciendo "¡¡¡Me levanté a las 4 y no he podido enviar ningún WhatsApp!!!" Gente furiosa golpeando los portátiles A mí me funcionaba bien con: fetchmail postfix mutt 79 / 162
  • 105. Internet parte 2 Configuración de email 83 / 162
  • 106. Sistema de email Cuando llegamos a Austrália: Compré (para 3 meses) un servidor VPS Configuré Postfix (SMTP) i Dovecot (IMAP) Configuré un servidor (un portátil) en el barco con Roundcube (Webmail), fetchmail (cliente IMAP) y Postfix. Con Django hicimos un sistema para crear usuarios en el servidor del barco y en el servidor de Internet Usé fetchmail, postfix, etc. que me había funcionado bien para mí, para los 80 expedicionarios 84 / 162
  • 108. Crear los usuarios Como tenía poco tiempo el script de Django sencillamente imprimía por pantalla los comandos y los copié-pegué en el servidor local o remoto: Local useradd --create-home carles.pinaestany echo carles.pinaestany:ahf5ze | chpasswd useradd --create-home jen.thomas echo jen.thomas:ahf5ze | chpasswd 86 / 162
  • 109. Remoto (también generado por el script de Django): useradd --shell /bin/false --create-home carles.pinaestany echo carles.pinaestany:Aib3gah0oTh5ii1pai0t | chpasswd echo carles.pinaestany | saslpasswd2 -u ace-expedition.net Aib3gah0oTh5ii1pai0t ##### useradd --shell /bin/false --create-home jen.thomas echo jen.thomas:Bae5hahgho1iephuu5qu | chpasswd echo jen.thomas | saslpasswd2 -u ace-expedition.net Bae5hahgho1iephuu5qu 87 / 162
  • 110. Envío de emails Limité el tamaño máximo de mail a 50 KB (en Roundcube y en Postfix) 88 / 162
  • 111. Envío de emails Limité el tamaño máximo de mail a 50 KB (en Roundcube y en Postfix)(después incrementamos el tamaño a 200 KB) 88 / 162
  • 112. Envío de emails Limité el tamaño máximo de mail a 50 KB (en Roundcube y en Postfix)(después incrementamos el tamaño a 200 KB) Limité el número de conexiones del Postfix del barco al Postfix de Internet a máximo 2 para evitar saturar la conexión 88 / 162
  • 113. Servidor de Internet Apache2 (servir ficheros) Dovecot (servir emails en IMAP), Postfix Python3, wget, etc. para bajar datos ssh, rsync, etc. para servir datos al barco 89 / 162
  • 115. Internet parte 2 Recepción de emails 91 / 162
  • 116. Recepción de emails (sistema 1) Con Django generé un .fetchmailrc que bajaba todos los emails de todos los usuarios (máximo de 50 KB). Resultado: Si no había emails fetchmail tardaba unas 4 horas para comprobar que no había emails (se conectaba como cada usuario) (el protocolo IMAP tiene bastantes comunicaciones de ida y vuelta, penalizan mucho en comunicaciones con latencias altas) Si la conexión no funcionaba: fetchmail "ignoraba" este usuario hasta la próxima pasada Los emails podían tardar 8 horas a ser recibidos! (y sólo si eran del tamaño decidido) fetchmail es ideal: time outs altos por defecto buena opción -v (con el protocolo IMAP paso a paso) buenos exit codes 92 / 162
  • 117. Recepción de emails (sistema 2) Con Django generé un .fetchmailrc de sólo los usuarios de la parte 2 del viaje (se redujo el tiempo de espera de 4 horas a unas 2 horas) 93 / 162
  • 118. Recepción de emails (sistema 3, definitivo) Pensé que quería sólo recoger los emails de los usuarios que tenían emails. Y en orden de recepción de los emails. Miré como organiza Dovecot los emails y a ver si podía saber fácilmente qué usuarios tenían emails en el servidor de Internet que deberían ser bajados. 94 / 162
  • 119. Recepción de emails (sistema 3, definitivo) Pensé que quería sólo recoger los emails de los usuarios que tenían emails. Y en orden de recepción de los emails. Miré como organiza Dovecot los emails y a ver si podía saber fácilmente qué usuarios tenían emails en el servidor de Internet que deberían ser bajados. Dovecot deja los emails nuevos en /home/$USERNAME/Maildir/new Además el nombre del fichero contiene el timestamp de recepción! P. ej: 1498094976.24034_1.servidor64 94 / 162
  • 120. Internet parte 2 Más de sistema 3 de los emails 95 / 162
  • 121. Escoger qué usuarios tenían mails a bajar Script en el servidor de Internet Un script en Python escaneaba todos los /home/* y imprimía en la salida estándard: /home/carles.pinaestany/Maildir/new/1498094976.24034_1.servidor64 /home/john.doe/Maildir/new/1375352537.24034_1.servidor64 Script: https://github.com/cpina/science-cruise-data- management/blob/master/ScienceCruiseDataManagement/utilities/messages_to_download.py 96 / 162
  • 122. Script en el servidor del barco cmd = "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120 root@{} ./messages_to_download.py > '{}'".format(settings.IMAP_SERVER, output_file_path) Entonces en el fichero "output_file_path" hay la salida del script del servidor. El script local decide qué usuarios bajar primero (los usuarios con los mails más viejos). 97 / 162
  • 123. Script en el servidor del barco cmd = "ssh -o ConnectTimeout=120 -o ServerAliveInterval=120 root@{} ./messages_to_download.py > '{}'".format(settings.IMAP_SERVER, output_file_path) Entonces en el fichero "output_file_path" hay la salida del script del servidor. El script local decide qué usuarios bajar primero (los usuarios con los mails más viejos). El script de Python entonces genera un "fetchmailrc" para este usuario y ejecuta: fetchmail --timeout 120 --fetchmailrc {} --pidfile {}".format(file_name, pidfile) ¡En un "while" hasta que funcione! Script: https://github.com/cpina/science-cruise-data- management/blob/master/ScienceCruiseDataManagement/main/management/commands/downloademailsb (también imprime estadísticas) 97 / 162
  • 124. Internet parte 2 Sistema 3 de emails Emails grandes 98 / 162
  • 125. Emails demasiado grandes Durante unos días la gente no sabía si habían recibido emails demasiado grandes Hice un notificador de emails grandes. Usé Python con imaplib (imaplib para conectarse y ver qué emails son grandes) (inspirado con el código de "notificaciones olfativas") Script: https://github.com/cpina/science-cruise-data- management/blob/master/ScienceCruiseDataManagement/main/management/commands/warningoversizee 99 / 162
  • 126. Emails demasiado grandes En todos los scripts es muy importante pensar que la conexión es inestable. El oversize email notifier empezó a funcionar consistentemente cuando hice en su código: import socket socket.setdefaulttimeout(30) while True: try: print("Checking: {} {}/{}".format(email_account.email_address, index+1, len(emails_active_leg))) self.check_user(email_account.email_address) break except ConnectionResetError: print("Connection Reset Error for user: {}. Trying again".format(email_account)) except socket.timeout: print("Connection timeout Error for user: {}. Trying again".format(email_account)) except OSError: print("Probably 'Network is unreachable' error for user {}. Trying again".format(email_account)) 100 / 162
  • 127. Emails demasiado grandes warningoversizeemail.py hacia: Enviar un email para notificar al receptor que un email era demasiado grande Contenía el tamaño, subject, remitente y UID Guardaba el email UID y otra información en una tabla (así sólo se notificaba una vez que había un email grande) El mail de notificación decía "si este email es muy importante reenvia la notificación al equipo de data management" 101 / 162
  • 128. ¿Cómo bajamos los emails grandes? Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY inestable, bajarse algo de más de 500 KB seguido era casi imposible 102 / 162
  • 129. ¿Cómo bajamos los emails grandes? Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY inestable, bajarse algo de más de 500 KB seguido era casi imposible Divide and conquer 102 / 162
  • 130. ¿Cómo bajamos los emails grandes? Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY inestable, bajarse algo de más de 500 KB seguido era casi imposible Divide and conquer ¡rsync! 102 / 162
  • 131. ¿Cómo bajamos los emails grandes? Una idea sería usar fetchmail sin el límite de maximo email. Pero la conexión era MUY inestable, bajarse algo de más de 500 KB seguido era casi imposible Divide and conquer ¡rsync! ¡Usar rsync para bajar emails! 102 / 162
  • 133. downloademail.py ./downloademail.py $USERNAME $UID Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene: 103 / 162
  • 134. downloademail.py ./downloademail.py $USERNAME $UID Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene: carles@servidor64:~/Maildir$ cat dovecot-uidlist 3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50 87623 W1257 S1224 :1499969465.29226_1.servidor64 87624 :1499969500.29282_1.servidor64 103 / 162
  • 135. downloademail.py ./downloademail.py $USERNAME $UID Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene: carles@servidor64:~/Maildir$ cat dovecot-uidlist 3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50 87623 W1257 S1224 :1499969465.29226_1.servidor64 87624 :1499969500.29282_1.servidor64 Parsea el dovecot-uidlist para encontrar el filename de un $UID 103 / 162
  • 136. downloademail.py ./downloademail.py $USERNAME $UID Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene: carles@servidor64:~/Maildir$ cat dovecot-uidlist 3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50 87623 W1257 S1224 :1499969465.29226_1.servidor64 87624 :1499969500.29282_1.servidor64 Parsea el dovecot-uidlist para encontrar el filename de un $UID Baja (rsync) el fichero que contiene el mail: p. ej. $USERNAME/Maildir/new/1499969500.29282_1.servidor64. Puede tener que reintentar, etc. 103 / 162
  • 137. downloademail.py ./downloademail.py $USERNAME $UID Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene: carles@servidor64:~/Maildir$ cat dovecot-uidlist 3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50 87623 W1257 S1224 :1499969465.29226_1.servidor64 87624 :1499969500.29282_1.servidor64 Parsea el dovecot-uidlist para encontrar el filename de un $UID Baja (rsync) el fichero que contiene el mail: p. ej. $USERNAME/Maildir/new/1499969500.29282_1.servidor64. Puede tener que reintentar, etc. Guarda el fichero bajado en el servidor local en $USERNAME/Maildir/.DownloadedEmails 103 / 162
  • 138. downloademail.py ./downloademail.py $USERNAME $UID Baja el fichero $USERNAME/Maildir/dovecot-uidlist . Contiene: carles@servidor64:~/Maildir$ cat dovecot-uidlist 3 V1336238204 N87624 Gd445dd1a9d8c8e51350f0000d09efc50 87623 W1257 S1224 :1499969465.29226_1.servidor64 87624 :1499969500.29282_1.servidor64 Parsea el dovecot-uidlist para encontrar el filename de un $UID Baja (rsync) el fichero que contiene el mail: p. ej. $USERNAME/Maildir/new/1499969500.29282_1.servidor64. Puede tener que reintentar, etc. Guarda el fichero bajado en el servidor local en $USERNAME/Maildir/.DownloadedEmails Actualiza (si es necesario) el fichero local $USERNAME/Maildir/subscriptions 103 / 162
  • 139. ¿Cómo enviar emails grandes? Los usuarios venían y nos llevaban ficheros grandes (más de la capacidad del mail máxima) en una memória USB, carpeta compartida, etc. A veces los subíamos con un script (until rsync - sigue probando) al servidor de Internet en /var/www/uploaded/misc/nombre_fichero.zip Otras veces los poníamos en una cola durante la noche 104 / 162
  • 140. Internet parte 2 Siguiendo con emails y otros ficheros grandes 105 / 162
  • 141. Subir/bajar ficheros durante la noche (esto fué la parte 2 y 3, la 1 era caos) Los periodistas tenían una carpeta compartida y copiaban ficheros allá Los ficheros y directorios se subían a http://ace-expedition.net/files/FECHA/ (con un máximo de 30 MB al día) Se bajaban datos para científicos Se subía "la cola" (hasta las 8 de la mañana) 106 / 162
  • 142. La cola: rsync_queue.py Ver: https://github.com/cpina/rsync-queue Un script que subía ficheros de un directorio en orden alfabético. Los ficheros que nos pasaban los copiabamos con orden de preferencia: 010-john-photos_of_fish.zip 020-jen-data.zip 030-james-test_files.zip 107 / 162
  • 143. La cola: rsync_queue.py Cuando un fichero era subido: se mandaba un mail a nosotros con el enlace y se movía el fichero a uploaded A las 8: killall rsync_queue.py (y este manda un mail a nosotros con el progreso del fichero que se está subiendo) Internamente usa rsync con la opción --progress y así puede informar via email o puede generar un fichero de log con la salida. Va analizando la salida de rsync Ver: https://github.com/cpina/rsync-queue/blob/master/rsync_queue.py#L96 108 / 162
  • 144. Internet parte 2 Bajando más datos 109 / 162
  • 145. Otros datos científicos En algunos casos, datos necesarios estaban en Internet sólo con protocolos FTP o HTTP (no con rsync que era lo ideal) 110 / 162
  • 146. Otros datos científicos En algunos casos, datos necesarios estaban en Internet sólo con protocolos FTP o HTTP (no con rsync que era lo ideal) Teníamos scripts en el servidor de Internet (para bajarlos fiablemente) y después scripts con rsync para bajarlos al barco 110 / 162
  • 147. Usando los dos Iridiums para datos Conecté el Iridium de teléfono a la red de datos para subir ficheros cuando no había llamadas En el servidor de internet: redirigí el puerto 2222 al puerto 22 En el servidor del barco: tenía un default gw (Iridium1). Pero paquetes que iban al puerto 2222 los marcaba para ir a un gw diferente: Iridium2 Tenía dos rsync_queue.py: uno que usaba el puerto 22 y el otro el puerto 2222. Con iptables, etc. conseguí enrutarlo a gateways diferentes. 111 / 162
  • 150. ¿De qué queríamos hacer copias de seguridad? De recursos compartidos de Windows De discos duros De zona "staging" De otro servidor Linux (usamos rsync) 114 / 162
  • 151. Backups de recursos compartidos Fuímos a cada ordenador que recogía datos en el barco (muchos con Windows) Compartimos la carpeta (en sólo lectura) Asignamos una IP estática Teníamos un modelo en Django que contenía: IP Usuario Contraseña Volumen Destino 115 / 162
  • 152. Evitamos cambiar configuraciones de los ordenadores de científicos Muchos ordenadores Windows estaban conectados a otros dispositivos via conexión LAN 116 / 162
  • 153. Evitamos cambiar configuraciones de los ordenadores de científicos Muchos ordenadores Windows estaban conectados a otros dispositivos via conexión LAN Añadimos un nuevo puerto LAN via conexiones USB 116 / 162
  • 154. Evitamos cambiar configuraciones de los ordenadores de científicos Muchos ordenadores Windows estaban conectados a otros dispositivos via conexión LAN Añadimos un nuevo puerto LAN via conexiones USB Era la manera de minimizar cambios de configuración en los ordenadores Windows durante la expedición 116 / 162
  • 155. Backups recursos compartidos Teníamos un mail con el resultado del último backup Y una tabla en la base de datos con los últimos resultados 117 / 162
  • 156. Backups recursos compartidos Teníamos un mail con el resultado del último backup Y una tabla en la base de datos con los últimos resultados La idea es un script en Python que usa rsync y este hace los mount/rsync/umount basado en los datos que hay en el model (tabla) 117 / 162
  • 159. GPS Introducción Era importante que tuviéramos todos los datos de los GPS guardados Para saber "¿Dónde estábamos en la fecha+hora D?" En el barco NO había ningún sistema que ya lo guardara en una base de datos, tampoco en ningún fichero de texto, etc. 120 / 162
  • 160. GPS Trimble Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie) para el echo sounder 121 / 162
  • 161. GPS Trimble Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie) para el echo sounder Este Windows ya tenía instalado el software Serial Port Splitter (https://www.eltima.com/products/serialsplitter/) 121 / 162
  • 162. GPS Trimble Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie) para el echo sounder Este Windows ya tenía instalado el software Serial Port Splitter (https://www.eltima.com/products/serialsplitter/) Bajé, instalé y configuré "GPS NMEA Router" (http://arundale.com/docs/ais/nmearouter.html) 121 / 162
  • 163. GPS Trimble Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie) para el echo sounder Este Windows ya tenía instalado el software Serial Port Splitter (https://www.eltima.com/products/serialsplitter/) Bajé, instalé y configuré "GPS NMEA Router" (http://arundale.com/docs/ais/nmearouter.html) Compartí el directorio donde se guardaban los logs 121 / 162
  • 164. GPS Trimble Un ordenador con Windows de la expedición ya tenía acceso a un GPS (por puerto serie) para el echo sounder Este Windows ya tenía instalado el software Serial Port Splitter (https://www.eltima.com/products/serialsplitter/) Bajé, instalé y configuré "GPS NMEA Router" (http://arundale.com/docs/ais/nmearouter.html) Compartí el directorio donde se guardaban los logs Escribí un parser de NMEA leyendo los ficheros en tiempo real (con rotación de ficheros): lo insertaba a la base de datos (https://github.com/cpina/science-cruise-data- management/blob/master/ScienceCruiseDataManagement/ship_data/management/commands/nmea_fi (el parser NMEA es bastante interesante por la clase TailDirectory: lee continuamente del fichero, usa un callback para líneas enteras, comprueba nuevos ficheros en el directorio, etc.) 121 / 162
  • 166. GPS Puente de comandamiento (1/2) En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base de datos? ¿o el visualizador?) 123 / 162
  • 167. GPS Puente de comandamiento (1/2) En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base de datos? ¿o el visualizador?) Subí corriendo y... la ¡tripulación lo había apagado! 123 / 162
  • 168. GPS Puente de comandamiento (1/2) En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base de datos? ¿o el visualizador?) Subí corriendo y... la ¡tripulación lo había apagado! Preguntamos para un segundo GPS en el barco: encontramos el del puente de comandamiento 123 / 162
  • 169. GPS Puente de comandamiento (1/2) En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base de datos? ¿o el visualizador?) Subí corriendo y... la ¡tripulación lo había apagado! Preguntamos para un segundo GPS en el barco: encontramos el del puente de comandamiento La tripulación usó Franson GpsGate y "envió" los datos del GPS a nuestra IP via UDP 123 / 162
  • 170. GPS Puente de comandamiento (1/2) En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base de datos? ¿o el visualizador?) Subí corriendo y... la ¡tripulación lo había apagado! Preguntamos para un segundo GPS en el barco: encontramos el del puente de comandamiento La tripulación usó Franson GpsGate y "envió" los datos del GPS a nuestra IP via UDP (la tripulación añadió una nueva IP de una nueva red a su tarjeta de red a su switch, yo añadí un nuevo dispositivo USB para la nueva red) 123 / 162
  • 171. GPS Puente de comandamiento (1/2) En la primera isla descubrí que el GPS no funcionaba (¿o la red? ¿o el Windows? ¿o la base de datos? ¿o el visualizador?) Subí corriendo y... la ¡tripulación lo había apagado! Preguntamos para un segundo GPS en el barco: encontramos el del puente de comandamiento La tripulación usó Franson GpsGate y "envió" los datos del GPS a nuestra IP via UDP (la tripulación añadió una nueva IP de una nueva red a su tarjeta de red a su switch, yo añadí un nuevo dispositivo USB para la nueva red) Con ngrep (y tcpdump) ví que sí, llegaban los datos... ¡pero no sabía como guardarlos! 123 / 162
  • 172. GPS Puente de comandamiento (2/2) Bajé y compilé kplex (http://www.stripydog.com/kplex/index.html y lo configuré: recibe desde un puerto UDP, lo guarda en un fichero, lo sirve via TCP (útil para tenerlo en otros ordenadores en tiempo real en la red de la expedición) 124 / 162
  • 173. GPS Puente de comandamiento (2/2) Bajé y compilé kplex (http://www.stripydog.com/kplex/index.html y lo configuré: recibe desde un puerto UDP, lo guarda en un fichero, lo sirve via TCP (útil para tenerlo en otros ordenadores en tiempo real en la red de la expedición) Pero kplex no tiene soporte para "un fichero diferente cada día"... hice un script que modificaba el fichero de configuración y reiniciaba kplex cada día a media noche (después de la expedición me dí cuenta que con logrotate no hubiera necesitado el script para cambiar el fichero de configuración ni reiniciar kplex) 124 / 162
  • 174. Datos GPS 3 tablas para diferentes datos recibidos de los GPS (posición, velocidad, fecha y hora) Cada tabla unos 16 miliones de registros Los científicos ponían la hora de sus actividades (fácil) y el sistema ponía la posición Se usaba para generar la ruta en el mapa Los científicos también ponían la hora en una Web para saber la posición (para sus notas) 125 / 162
  • 177. Ferrybox Un Ferrybox lee continuamente datos de las propriadades de una fuente de agua. Normalmente temperatura, salinidad, cantidad de oxígeno y fluorescencia. 128 / 162
  • 178. Ferrybox Un Ferrybox lee continuamente datos de las propriadades de una fuente de agua. Normalmente temperatura, salinidad, cantidad de oxígeno y fluorescencia. Fue muy útil para los científicos ver cuándo cambiaron las propriedades del mar para cambiar sus pruebas y entender sus datos. 128 / 162
  • 180. Ferrybox: problema La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un puerto (los científicos lo querían en tiempo real). 130 / 162
  • 181. Ferrybox: problema La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un puerto (los científicos lo querían en tiempo real). La Ferrybox era una Debian Etch. 130 / 162
  • 182. Ferrybox: problema La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un puerto (los científicos lo querían en tiempo real). La Ferrybox era una Debian Etch. Para escribir en ficheros: mount -o rw,remount / 130 / 162
  • 183. Ferrybox: problema La Ferrybox del barco tenía un problema: sólo guardaba los datos cuando se llegaba a un puerto (los científicos lo querían en tiempo real). La Ferrybox era una Debian Etch. Para escribir en ficheros: mount -o rw,remount / Cambié la configuración de red para unirlo a la red de la expedición. 130 / 162
  • 184. Ferrybox: tener un volcado en tiempo real El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos 131 / 162
  • 185. Ferrybox: tener un volcado en tiempo real El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros (información sin calibrar pero lo podían recalibrar) 131 / 162
  • 186. Ferrybox: tener un volcado en tiempo real El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros (información sin calibrar pero lo podían recalibrar) Nos dimos cuenta que había muchos errores: a veces en los ficheros generados con Python, a veces en los ficheros generados con "ferrycon" 131 / 162
  • 187. Ferrybox: tener un volcado en tiempo real El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros (información sin calibrar pero lo podían recalibrar) Nos dimos cuenta que había muchos errores: a veces en los ficheros generados con Python, a veces en los ficheros generados con "ferrycon" En Linux dos procesos pueden leer del puerto serie pero entonces hay "interferencias" (se consumen los bytes, paridad, etc.) 131 / 162
  • 188. Ferrybox: tener un volcado en tiempo real El processo "ferrycon" lee de /dev/ttyS[0,1,2,3] que son los dispositivos Hice unos scripts en Python (Python 2.5!) para leer de /dev/ttyS0 y escribir en ficheros (información sin calibrar pero lo podían recalibrar) Nos dimos cuenta que había muchos errores: a veces en los ficheros generados con Python, a veces en los ficheros generados con "ferrycon" En Linux dos procesos pueden leer del puerto serie pero entonces hay "interferencias" (se consumen los bytes, paridad, etc.) Desactivé los procesos en Python que leían del puerto serie... 131 / 162
  • 189. Ferrybox: tener un volcado al día Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos 132 / 162
  • 190. Ferrybox: tener un volcado al día Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos Hice un script que cada noche hacía "ferrycon audit -R" y guardaba los datos del día anterior en un fichero (parseando la salida de "ferrycon audit -R" y guardando los datos del día anterior) 132 / 162
  • 191. Ferrybox: tener un volcado al día Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos Hice un script que cada noche hacía "ferrycon audit -R" y guardaba los datos del día anterior en un fichero (parseando la salida de "ferrycon audit -R" y guardando los datos del día anterior) Copié el binario de rsync de Debian Etch a ~/bin/rsync , desde otro ordenador copiaba los ficheros usando "rsync --rsync-path=/home/ferrybox/bin/rsync ferrybox@ferrybox.lan:/var/ferrybox/data ." 132 / 162
  • 192. Ferrybox: tener un volcado al día Nos dijeron que "/ferrybox/bin/ferrycon audit -R" mostraba todos los datos Hice un script que cada noche hacía "ferrycon audit -R" y guardaba los datos del día anterior en un fichero (parseando la salida de "ferrycon audit -R" y guardando los datos del día anterior) Copié el binario de rsync de Debian Etch a ~/bin/rsync , desde otro ordenador copiaba los ficheros usando "rsync --rsync-path=/home/ferrybox/bin/rsync ferrybox@ferrybox.lan:/var/ferrybox/data ." Y cada día teníamos el fichero del día anterior! 132 / 162
  • 193. Ferrybox: tener información a tiempo real Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack" mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo mostraba lo nuevo) 133 / 162
  • 194. Ferrybox: tener información a tiempo real Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack" mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo mostraba lo nuevo) No funcionaba: "No "FerryLogData" service found on node <1>" 133 / 162
  • 195. Ferrybox: tener información a tiempo real Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack" mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo mostraba lo nuevo) No funcionaba: "No "FerryLogData" service found on node <1>" Usé "strace" para ver qué pasaba... y ferrycon intentaba hacer el fichero en un directorio que no existia: open("/var/ferrybox/log/testpointer.ack.ack", O_RDWR|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied) 133 / 162
  • 196. Ferrybox: tener información a tiempo real Nos dijeron (soporte Ferrybox) que "/ferrybox/bin/ferrycon audit -R -p -f testpointer.ack" mostraba los datos y escribía donde se había acabado de escribir (y la próxima vez sólo mostraba lo nuevo) No funcionaba: "No "FerryLogData" service found on node <1>" Usé "strace" para ver qué pasaba... y ferrycon intentaba hacer el fichero en un directorio que no existia: open("/var/ferrybox/log/testpointer.ack.ack", O_RDWR|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied) Creé el directorio, puse los permisos y ya se pudo generar el fichero adecuado para ejecutar "ferrycon audit -R -p -f testpointer.ack" 133 / 162
  • 197. Ferrybox: enseñar la información a tiempo real En el servidor hice un script en Python para ejecutar: ssh fbuser@ferrybox.lan /home/fbuser/bin/output_last_information.sh Cada 5 minutos, desde un script en Python que captura el stdout, lo parsea y lo pone en una base de datos (https://github.com/cpina/science-cruise-data- management/blob/master/ScienceCruiseDataManagement/ship_data/management/commands/getferryboxd 134 / 162
  • 198. Ferrybox: enseñar la información a tiempo real En el servidor hice un script en Python para ejecutar: ssh fbuser@ferrybox.lan /home/fbuser/bin/output_last_information.sh Cada 5 minutos, desde un script en Python que captura el stdout, lo parsea y lo pone en una base de datos (https://github.com/cpina/science-cruise-data- management/blob/master/ScienceCruiseDataManagement/ship_data/management/commands/getferryboxd Usando Django, una vista, template y Chart.js hice una visualización de Ferrybox 134 / 162
  • 202. Cambios de nombre de ficheros Cada hora se hacía una copia de los ficheros de ordenadores usando rsync 138 / 162
  • 203. Cambios de nombre de ficheros Cada hora se hacía una copia de los ficheros de ordenadores usando rsync Algunos científicos cambiaban los nombres de los ficheros: algunos ficheros estaban con dos nombres 138 / 162
  • 204. Cambios de nombre de ficheros Cada hora se hacía una copia de los ficheros de ordenadores usando rsync Algunos científicos cambiaban los nombres de los ficheros: algunos ficheros estaban con dos nombres Queríamos ver si había ficheros en un directorio que no estaban en otro directorio (en este caso sólo el nombre de los ficheros, no por contenido). Así nació: http://github.com/cpina/missing-files 138 / 162
  • 205. Cambios de nombre de ficheros Cada hora se hacía una copia de los ficheros de ordenadores usando rsync Algunos científicos cambiaban los nombres de los ficheros: algunos ficheros estaban con dos nombres Queríamos ver si había ficheros en un directorio que no estaban en otro directorio (en este caso sólo el nombre de los ficheros, no por contenido). Así nació: http://github.com/cpina/missing-files Había hecho uno parecido (para mis fotos) mirando el contenido de ficheros 138 / 162
  • 207. Profundidad del océano en la Intranet Profundidad ¿Por qué? Equipo de bentos: estudiaron los animales del fondo del mar Querían saber la profundidad para saber de dónde vinieron y entonces entender mejor las comunidades Tienen un dispositivo a la proa del barco que baja unos 700 metros y recoge muestras A veces pusieron una GoPro para ver que pasó con la red y cómo era el fondo del mar (rocoso, de arena etc) 140 / 162
  • 212. Mostrar la pantalla de un Windows en la Intranet 145 / 162
  • 213. Mostrar la pantalla de un Windows en la Intranet Pregunté a un amigo y me pasó el link de un software para Windows que hace un screenshot cada minuto y lo guarda en un directorio 145 / 162
  • 214. Mostrar la pantalla de un Windows en la Intranet Pregunté a un amigo y me pasó el link de un software para Windows que hace un screenshot cada minuto y lo guarda en un directorio Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla en la intranet 145 / 162
  • 215. Mostrar la pantalla de un Windows en la Intranet Pregunté a un amigo y me pasó el link de un software para Windows que hace un screenshot cada minuto y lo guarda en un directorio Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla en la intranet Pero no podíamos instalar nada en este ordenador Windows (problemas políticos) 145 / 162
  • 216. Mostrar la pantalla de un Windows en la Intranet Pregunté a un amigo y me pasó el link de un software para Windows que hace un screenshot cada minuto y lo guarda en un directorio Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla en la intranet Pero no podíamos instalar nada en este ordenador Windows (problemas políticos) Nota: en sistemas GNU/Linux se puede usar el comando "import" para hacer screenshots fácilmente 145 / 162
  • 217. Mostrar la pantalla de un Windows en la Intranet Pregunté a un amigo y me pasó el link de un software para Windows que hace un screenshot cada minuto y lo guarda en un directorio Pensé en compartir este directorio y desde el servidor coger la última imagen y ponerla en la intranet Pero no podíamos instalar nada en este ordenador Windows (problemas políticos) Nota: en sistemas GNU/Linux se puede usar el comando "import" para hacer screenshots fácilmente Si el ordenador Windows tuviera VNC: podría haber usado el paquete "vncsnapshot" 145 / 162
  • 218. Echoview y NMEA strings El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA 146 / 162
  • 219. Echoview y NMEA strings El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA Manda un string con la profundiad en metro, pies y fantoms (!) 146 / 162
  • 220. Echoview y NMEA strings El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA Manda un string con la profundiad en metro, pies y fantoms (!) Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento") 146 / 162
  • 221. Echoview y NMEA strings El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA Manda un string con la profundiad en metro, pies y fantoms (!) Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento") Con un script nuevo lo insertaba a la base de datos a tiempo real 146 / 162
  • 222. Echoview y NMEA strings El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA Manda un string con la profundiad en metro, pies y fantoms (!) Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento") Con un script nuevo lo insertaba a la base de datos a tiempo real En la página principal de la Intranet mostraba el valor para el equipo bentos 146 / 162
  • 223. Echoview y NMEA strings El software Echoview puede enviar la profundidad a puertos UDP en formato NMEA Manda un string con la profundiad en metro, pies y fantoms (!) Con kplex lo guardaba en un fichero (igual que el GPS "puente de comandamiento") Con un script nuevo lo insertaba a la base de datos a tiempo real En la página principal de la Intranet mostraba el valor para el equipo bentos Lo tenía en la base de datos para consultar fácil por cuando lo pedían 146 / 162
  • 228. CTD: el problema Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía el teclado en pantalla) 151 / 162
  • 229. CTD: el problema Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía el teclado en pantalla) Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP cuando se iniciaba 151 / 162
  • 230. CTD: el problema Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía el teclado en pantalla) Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP cuando se iniciaba Conecté el portátil al cable de red, puse una IP, un nmap... y tenía un servidor de VNC (era un Windows CE) 151 / 162
  • 231. CTD: el problema Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía el teclado en pantalla) Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP cuando se iniciaba Conecté el portátil al cable de red, puse una IP, un nmap... y tenía un servidor de VNC (era un Windows CE) Me conecté con VNC (xtightvnc, krdc, etc.) y pude escribir en el campo donde no aparecía el teclado 151 / 162
  • 232. CTD: el problema Un día me dijeron que la tripulación no podía cambiar parámetros del CTD (no aparecía el teclado en pantalla) Encontramos que el CTD Winch tenía un cable de red y que la pantalla mostraba una IP cuando se iniciaba Conecté el portátil al cable de red, puse una IP, un nmap... y tenía un servidor de VNC (era un Windows CE) Me conecté con VNC (xtightvnc, krdc, etc.) y pude escribir en el campo donde no aparecía el teclado ¡Pero no aceptó el valor! 151 / 162
  • 233. CTD: solución Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian Winch) 152 / 162
  • 234. CTD: solución Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian Winch) Pasamos fotos del problema, comparamos notas, etc. hasta que nos dieron el software para reinstalar (lo bajé en Austrália, eran unos 500 MB) 152 / 162
  • 235. CTD: solución Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian Winch) Pasamos fotos del problema, comparamos notas, etc. hasta que nos dieron el software para reinstalar (lo bajé en Austrália, eran unos 500 MB) Con GNU/Linux formateé un pendrive con FAT12 (!) pero cuando cargó el nuevo sistema no funcionó (pánico) 152 / 162
  • 236. CTD: solución Tuvimos muchos emails, llamadas, etc. con la empresa que instaló el CTD (Adrian Winch) Pasamos fotos del problema, comparamos notas, etc. hasta que nos dieron el software para reinstalar (lo bajé en Austrália, eran unos 500 MB) Con GNU/Linux formateé un pendrive con FAT12 (!) pero cuando cargó el nuevo sistema no funcionó (pánico) Dentro de sus ficheros encontré otra imagen que sí que funcionó... al menos unos días porqué más problemas pasaron 152 / 162
  • 238. Instalar paquetes Debian en otros ordenadores 154 / 162
  • 239. Instalar paquetes Debian en otros ordenadores Gente con Ubuntu que necesitaban paquetes que no tenían 155 / 162
  • 240. Instalar paquetes Debian en otros ordenadores Gente con Ubuntu que necesitaban paquetes que no tenían Usé: tar -T /tmp/files.txt -cvf /tmp/gnuplot-data.tar Para generar un fichero .tar con todos los ficheros de un paquete. Sólo tenía que descomprimir en el otro ordenador: cd / tar -xvf /media/user/USB/gnuplot-data.tar (no ejecuta los scripts de post instalación, ni lo añade en el registro de paquetes instalados, ni añade usuarios de sistema, etc. pero funcionó para todo!) 155 / 162
  • 241. Microsoft Office (en un Mac) no funcionaba (problema con licencias) 156 / 162
  • 242. Sustituirlo por LibreOffice Pero en el primer mes no tenía el fichero .dmg de LibreOffice :-( Cuando ví a otra persona con Mac y LibreOffice hice un tar del /Applications/LibreOffice.org Descomprimí el tar en el ordenador del otro usuario 157 / 162
  • 243. Sustituirlo por LibreOffice Pero en el primer mes no tenía el fichero .dmg de LibreOffice :-( Cuando ví a otra persona con Mac y LibreOffice hice un tar del /Applications/LibreOffice.org Descomprimí el tar en el ordenador del otro usuario Pero el primer usuario... ¡lo tenía en francés! (y no se podía cambiar) 157 / 162
  • 244. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) 158 / 162
  • 245. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp 158 / 162
  • 246. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp Un dispositivo con una RaspberryPi no se conectaba al WiFi 158 / 162
  • 247. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp Un dispositivo con una RaspberryPi no se conectaba al WiFi Dispositivo requería Access Point que no llegó al barco 158 / 162
  • 248. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp Un dispositivo con una RaspberryPi no se conectaba al WiFi Dispositivo requería Access Point que no llegó al barco Disco duro que no se podía montar en Windows 158 / 162
  • 249. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp Un dispositivo con una RaspberryPi no se conectaba al WiFi Dispositivo requería Access Point que no llegó al barco Disco duro que no se podía montar en Windows Un dispositivo Bluetooth que no se conectaba al ordenador (imán) 158 / 162
  • 250. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp Un dispositivo con una RaspberryPi no se conectaba al WiFi Dispositivo requería Access Point que no llegó al barco Disco duro que no se podía montar en Windows Un dispositivo Bluetooth que no se conectaba al ordenador (imán) Configurar access points para acceso en diferentes partes del barco 158 / 162
  • 251. Otras tareas Crear una base de datos de unas 30.000 muestras (importando desde hojas de cálculo) Alguien escribió un texto en un fichero de texto y quería pasarlo via WhatsApp Un dispositivo con una RaspberryPi no se conectaba al WiFi Dispositivo requería Access Point que no llegó al barco Disco duro que no se podía montar en Windows Un dispositivo Bluetooth que no se conectaba al ordenador (imán) Configurar access points para acceso en diferentes partes del barco Configurar ordenador como router para dar acceso a equipo ROPOS desde punte de comandamiento a sus euqipos Y un sin fin más! 158 / 162
  • 252. Recomendaciones para una expedición similar Internet: Configurar un sistema de mail específico rsync para todo (subir/bajar ficheros, emails, etc.) Usar el navegador en modo texto "links" Bajar documentación Tener Wikipedia offline? Otros problemas: Pensar que todo es solucionable (aunque sea con workarounds) Proponer alternativas en el barco, o que alguien de su equipo busque y envie documentos, soluciones, etc. Nota: usé casi todo lo que sé (de hackdays, de cuando era pequeño y jugaba con el puerto paralelo, universidad, trabajos anteriores, etc.) 159 / 162
  • 255. Contactos Jen Thomas (jenny_t152@yahoo.co.uk) Carles Pina i Estany (carles@pina.cat) Licencia Esta obra está bajo Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional. Diapositivas Las diapositivas han sido escritas usando Markdown y renderizadas usando remarkjs (https://remarkjs.com) (¡es muy cómodo!) Para el apng de la página del título: apngasm (paquete Debian) Diapositivas: https://github.com/cpina/ace-it-presentation 162 / 162