OpenWRT y trocitos de mí

Hola hijos,

Este mes he comenzado una nueva andadura como Ingeniero de I+D y me ha tocado pegarme con unas cosas nuevas (es lo que tienen los nuevos trabajos) y divertidas. En este caso hablaré mínimamente de OpenWRT, pero esto es todo una excusa para explicar otra cosa.

OpenWRT es una distribución de Linux para sistemas embebidos. Se usa sobre todo en puntos de acceso wifi y ese tipo de dispositivos.

No quiero entrar mucho porque tampoco controlo nada pero, básicamente, a esta distribución se le puede instalar una interfaz web para gestionarla, como tiene nuestro router de casa, por ejemplo. Esta interfaz se llama LuCI.

Esta interfaz web tiene la opción de instalar un modo seguro, desde el que se pueden instalar imágenes del sistema etc. Cuando se instalaba, la web sacaba un mensaje de error y no se podía ver.

Debuggeando un poco el mensaje, indica qué línea del código fuente tiene problemas, aquí veis el mensaje de error:

/usr/lib/lua/luci/dispatcher.lua:433: Failed to execute function dispatcher target for entry '/'.
The called action terminated with an exception:
/usr/lib/lua/luci/dispatcher.lua:433: Failed to execute function dispatcher target for entry '/failsafe'.
The called action terminated with an exception:
/usr/lib/lua/luci/dispatcher.lua:433: Failed to execute call dispatcher target for entry '/failsafe/flashops'.
The called action terminated with an exception:
/usr/lib/lua/luci/controller/failsafe/failsafe.lua:91: attempt to index upvalue 'fp' (a nil value)
stack traceback:
    [C]: in function 'assert'
    /usr/lib/lua/luci/dispatcher.lua:433: in function 'dispatch'
    /usr/lib/lua/luci/dispatcher.lua:168: in function </usr/lib/lua/luci/dispatcher.lua:167>

Revisando el mensaje de error, vemos que en la línea 91 de /usr/lib/lua/luci/controller/failsafe/failsafe.lua se está accediendo a una variable con valor “nil”, es decir, sin inicializar.

No es realmente necesario saber Lua, que es el lenguaje de programación que se ha usado en LuCI, para resolver este problema. Si vamos al código fuente, podemos editar directamente esa zona para evitar acceder a esa variable si está sin inicializar.

Este es el cambio que he hecho, como se ve, sólo es comprobar que la variable ‘fp‘ no sea ‘nil‘. Así que ya no saltará el mismo error.

https://github.com/ekaitz-zarraga/luci/commit/a16654b12130d636b4e0f81839a26f5821619baa

Una vez resuelto, lo suyo es que lo solucionemos en todos los OpenWRTs del mundo, ¿no?

En realidad, tal y como está la sociedad no es lo habitual, pero como esto es software libre, sí, se puede arreglar para todos.

El paquete de LuCI es independiente, lo podéis encontrar en su página de GitHub o través de sus propios repositorios. Revisando un poco el archivo CONTRIBUTING.md aprendemos cómo contribuir, que no dejan de ser unos pocos detalles adicionales al procedimiento habitual de GitHub.

El procedimiento habitual es clonar el proyecto en nuestro perfil, crear una nueva rama para el cambio que queremos hacer, aplicarlo y pedir un Pull Request al proyecto original desde la rama que hemos creado en el nuestro.

Este es mi Pull Request:
https://github.com/openwrt/luci/pull/473

Como veis, mi Pull Request ha sido Merged, lo que implica que ha sido unido al proyecto, lo que me llena de satisfacción.

Lo que quiero explicaros con esto es que sin saber Lua y sin saber demasiado acerca de programación hemos resuelto un problema que tenía el código de un proyecto relativamente grande leyendo un poco el mensaje de error e investigando mínimamente. Es decir, no hace falta que nuestros cambios sean enormes o que tengamos que arreglar cosas extremadamente complicadas, simplemente, con encontrar un hueco donde ayudar es suficiente. Todos podemos hacerlo sin mucho esfuerzo.

Cuando un proyecto se gestiona correctamente, como usuarios podemos colaborar con este tipo de pequeñas aportaciones, haciendo que el software mejore y arreglando para todos pequeñas cositas que nos hemos arreglado a nosotros mismos.

En resumen, que cada pequeña aportación cuenta, que podemos cambiar el mundo desde el sofá sin esforzarnos demasiado. No hace falta ser un programador pro para ayudar. No hay que tenerle miedo al código porque, al fin y al cabo, a todos se nos cuelan pequeños bugs. 😉

Pues nada, eso. Que en OpenWRT hay un poco de Ekaitz y que perfectamente podía haber sido un poquito de ti y eso es maravilloso.

Un abrazo.


Sí que es cierto que hay que tener cierto dominio de las herramientas habituales que, resumiendo, es controlar un poco de Git o de otros sistemas de control de versiones. Al final, todo el software libre y colaborativo se basa en este tipo de herramientas para gestionar la colaboración. Pero de eso hablamos otro día 😉

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s