A re flash

Como hago un reflasheo general en quintana.libre.org.ar

Publicado por Marcos el July 10, 2019 · 5 minutos de lectura

Como hago un reflasheo general en quintana.libre.org.ar

La red comunitaria Quintana Libre se autoasume también como experimental. Es por eso que muchas veces tiene la suerte de ser el conejito de indias de la tecnología que generamos, cambios de protocolos, y breaking changes (cambios que nos son compatibles con lo actual). Luego de probar con un par de routers sobre la mesa, incluyendo también el nodo propio, pasamos a extender nuestos experimentos al resto de la red. Todavía no tenemos nada que automatice el proceso, ya que la mayor parte del tiempo queremos ir observando el proceso nodo por nodo.

La tolopogía

Técnica, física y mentalmente, Quintana se encuentra dividida en varias zonas. Las denomino así:

  • Quintana Fondo del Loteo
  • Quintana Loteo y Oncelotes
  • Backbones y LibreRouters
  • Quintana Frente
  • San Isidro Frente
  • San Isidro Fondo Actualmente son entre 35 y 50, depende bastante según el estado de la red y de la voluntad de les integrantes.

QuintanaLibre Vista parcial de la topología de la red

Obtener el orden

Lo primero al momento de hacer el reflasheo es obtener la cantidad de saltos que hay hasta los nodos. De esta forma, se puede establecer en que orden deben suceder para afectar la porción mínima de la red si algo falla o no dejar nodos inaccesibles si hay cambios en la forma de conexión (ej. pasar de adhoc a ieee80211s, canales, etc). La cantidad de saltos será relativa a nuestra ubicación en la red. Para saberlo simplemente hago un traceroute de batman desde el nodo hasta mi ubicación o borde con esa zona, y cuento la cantidad de líneas. A ese número lo guardo en un txt junto con el hostname, la dirección IPv4 y el modelo del dispositivo

#!/bin/sh
# mi ip es 10.5.0.36
for host in `cat ./ips_quintan_loteo`;do
    echo `ssh $host 'echo $(batctl tr 10.5.0.36 2> /dev/null | grep -v traceroute | wc -l) $HOSTNAME $(uci get network.lan.ipaddr) $(cat /etc/board.json |  jsonfilter -e "@.model.name" | cut -d" " -f2)'` | sort -r;
done > ips_quintana_loteo_ordenadas

El output similar a este:

6 ql-reiser 10.5.0.64 TL-WDR3600
6 ql-natisofi 10.5.0.85 TL-WDR3500
6 ql-chanxs 10.5.0.8 TL-WDR3600
5 ql-marisa 10.5.0.7 TL-WDR3500
5 ql-angela 10.5.0.44 TL-WDR3500
4 ql-silviak 10.5.0.88 TL-WDR3500
4 ql-bety 10.5.0.80 TL-WDR3500
3 ql-quinteros 10.5.0.59 TL-WDR3500
3 ql-delaguila 10.5.0.48 TL-WDR3500
2 ql-yani 10.5.0.87 TL-WDR3500
2 ql-roxa 10.5.0.94 TL-WDR3500
2 ql-gioiajesinico 10.5.0.96 TL-WDR3600
2 ql-cesarylucia 10.5.0.32 TL-WDR3500
1 ql-oncelotes 10.5.0.68 TL-WDR3500
0 ql-margayorlando 10.5.0.24 TL-WDR3500
0 ql-angelina 10.5.0.54 TL-WDR3500
0 ql-ale 10.5.0.95 TL-WDR3600
0 ql-anaymarcos 10.5.0.36 TL-WDR3600

Luego copio las imágenes a cada router. Para eso uso el modelo obtenido anteriormente y mediante scp copio a cada router el archivo correspondiente.

Si el anterior script se podía mejorar, a este hay que hacerlo de nuevo mil veces mejor. Podría separar la lista en dispositivos y hacer parallel-scp a cada lista con la imagen, podría conocer el path e ir copiando sucesivamente de nodo en nodo, etc. En fin, por ahora lo básico: un scp a cada nodo de la imagen correspondiente.

#!/bin/sh

binDir="/home/notebook/libremesh/openwrt/bin/targets/ar71xx/generic"

while IFS=  read -r node_line; do
    echo $node_line
    ipAddr=$(echo $node_line | cut -d\  -f3)
    hard=$(echo $node_line | cut -d\  -f4 | tr '[:upper:]' '[:lower:]')
    fileName="openwrt-ar71xx-generic-$hard-v1-squashfs-sysupgrade.bin"
    scp $binDir/$fileName root@$ipAddr:/tmp
done < ../ips_quintana_loteo_ordenadas

Luego, realizo el sysupgrade en los nodos de un salto a la vez, todos los que están a 5 saltos, luego a 4 y así hasta llegar a mi router. El flash lo hago entrando a cada nodo y siguiendo estos pasos:

  • Ingreso por ssh al router
  • sysupgrade /tmp/openwrt*.bin
  • La terminal sale del ssh y en ese mismo lugar dejo corriendo un ping a ese nodo

La idea es que todos los pings deben regresar antes de continuar con el siguiente salto. De esa forma, voy descartando posibles fallas.

Todo el tiempo pueden ocurrir y ocurren cosas inesperadas, por eso mejor ir despacio y a paso firme, confirmando que todo está ok antes de continuar.

Qué revisar

Luego de que el ping responde, accedo para ver que todo esté funcionando bien:

  • Ver que las asociaciones wifi esperadas en las radios de 5ghz y 2.4ghz sigan estando
  • La conexión a Internet o tabla de ruteo
  • Latencia del ping al Gateway

Los test van a depender del tipo de cambio que se esté realizando, pero con eso suele ser suficiente confirmación.