?>/script>'; } ?> Base práctica de desarrollo Widgets Magazine

Autor Tema: Base práctica de desarrollo  (Leído 41257 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #40 en: 29-11-2016, 21:20 (Martes) »
.. Creo que uno de los principales problemas es no saber cómo trabajar con Openwrt. Es decir, programar una aplicación y poder integrarla . Tampoco encuentro mucho manual de inicializacion en Openwrt...

Aquí todas y todos hemos pasado por eso.

OpenWrt es Linux. Una versión de Linux capaz de correr sobre determinados routers.


Lo primero que vas a necesitar es hacerte con uno de esos routers. La lista de máquinas compatibles con OpenWrt la tienes aquí: https://wiki.openwrt.org/toh/start
Lo más barato es rebuscar por los cajones de casa, que igual tienes alguno por ahí perdido... O adquirirlo en una tienda de artículos de segunda mano. También podrías comprárselo a alguien del foro que tenga alguno de sobra.

Una vez tengas el router, lo siguiente  es descargar la versión adecuada de OpenWrt e instalarla en la máquina. El procedimiento de instalación varía según qué router. Para mi gusto, los más sencillos de instalar son el HG553, HG556A y el Comtrend AR-5387un. Hay guías de cómo se instala en la página de hilos relevantes.

Luego toca acceder al router desde un PC. El router no tiene pantalla, ni teclado, ni ratón. Hay que manejarlo desde un PC con Linux o Windows (supongo que también se podrá con OS X). Básicamente, se trata de abrir en el PC una sesión remota que permitirá manejar el router.

Después hay que instalar en el router el intérprete de Python.

Ahora viene lo de programar en Python. Si has programado en Python para tu PC, también sabrás hacerlo para tu router OpenWrt. La única diferencia es que el fichero que contiene las instrucciones Python está ubicado en el router y no en el PC.

Saludos.

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #41 en: 03-12-2016, 07:56 (Sábado) »
Muchas gracias Raphik. Con tus indicaciones me has despejado muchas dudas.
Respecto al router, tengo el Linksys 1900ACS que soporta openwrt. He encontrado el firm que le tocaría y procederé a instalarlo.

Una vez lo tenga, y como prueba, quiero crear un código básico en python que me diga por ejemplo que IP tengo asignada. Entiendo que en en un sistema operativo de escritorio ejecutaría ese fichero en python, pero en el router, ¿ se ejecutaría sólo?.

La intención de mi proyecto de fin de carrera es la de integrar Latch en openwrt para gestionar remotamente el router. Entonces, no se como podría cualquier programa que cree en python ejecutarlo en el router o si se puede añadir alguna funcionalidad a la interfaz del router, como por ejemplo, una pestaña, botón, etc.

Saludos.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #42 en: 03-12-2016, 14:04 (Sábado) »
... Una vez lo tenga, y como prueba, quiero crear un código básico en python que me diga por ejemplo que IP tengo asignada. Entiendo que en en un sistema operativo de escritorio ejecutaría ese fichero en python, pero en el router, ¿ se ejecutaría sólo? ...

Primero, un poco de teoría.

El usuario se comunica con el ordenador mediante el intérprete de comandos. Éste suele disponer de dos tipos de interfaces de usuario (shell): el de línea de texto (CLI, Command-Line Interface) y el gráfico (GUI, Graphical User Interface), también llamado escritorio.
En un router, capacidad de proceso y memoria son limitadas. OpenWrt no podría mover una interfaz gráfica tipo Gnome o KDE. No obstante, cuenta con una interfaz gráfica Web llamada LuCI. Por supuesto, también cuenta con una interfaz de línea Almquist Shell (ASH) proporcionada por BusyBox que implementa los comandos más usuales de UNIX.


Ahora, la práctica.

El script más sencillo es el típico Hola Mundo, que en Python será:

Contenido del fichero holamundo.py
Código: [Seleccionar]
print ("Hola Mundo!")
Para ejecutarlo  desde la línea de comandos:
Código: [Seleccionar]
phython holamundo.py
Si se quiere ejecutar invocándolo directamente, la primera línea del fichero tiene que informar de cómo tratar el resto del contenido:

Contenido del fichero holamundo.py
Código: [Seleccionar]
#! /usr/bin/env python
print ("Hola Mundo!")

Además, habrá que activarle el atributo de "ejecutable":
Código: [Seleccionar]
chmod 777 holamundo.py
Y, finalmente, ejecutarlo:
Código: [Seleccionar]
./holamundo.py
Para ejecutar un comando automáticamente al arrancar el router, se edita el fichero /etc/rc.local y se le añade una línea que invoque dicho comando.

La IP externa se puede averiguar desde la línea de comandos sin necesidad de Python:
Código: [Seleccionar]
wget -q -O- icanhazip.com
Saludos.

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #43 en: 04-12-2016, 11:56 (Domingo) »
Muchas gracias Raphik por tu ayuda. Me has allanado mucho el camino. Voy a intentarlo.

Saludos.

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #44 en: 06-12-2016, 22:09 (Martes) »
Disculpa Raphik te vuelva a molestar. Me he quedado atascado con la instalación.  Te comento los pasos que he realizado:

1.- Conecté el router (linksys 1900ACS) mediante el cable ethernet al puerto ethernet del macbook
2.- Accedí al router a través del navegador e instale la imagen de openwrt que correspondía.
3.- A través de consola en OS X he accedido al router mediante ssh y me aparece el menú de inicio de openwrt igual que el de la imagen que pusiste.

4.- Ahora debería instalar Luci, sin embargo, no tengo conexión a internet. Al estar el router conectado al puerto ethernet del macbook, el portátil queda lógicamente sin poder acceder a la web. Entiendo que debería configurar una ip para el router dentro del rango que corresponda para así desconectar el router del puerto ethernet del portátil y que tenga conexión vía wifi. 

No obstante, no se si se instaló correctamente openwrt pues no consigo mediante consola introduciendo comandos  que me diga por ejemplo la versión de Linux instalada.

También me gustaría saber como es posible volver al firm original de linksys para que quede todo como de fábrica por si tuviera algún problema.

Gracias por tu ayuda.

seny

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #45 en: 06-12-2016, 23:32 (Martes) »
Hola, al igual que te recomendé este hilo para el tema programación, estas últimas dudas que planteas se escapan del objetivo de este hilo, deberias solucionarlas leyendo los manuales que hay en los hilos enchinchetados como por ejemplo "[FAQ] Preguntas más comunes sobre OpenWrt" o "[Índice] Hilos relevantes de OpenWrt".

También te recomiendo usar un router mas sencillo para empezar.. sobre dejarlo como de fábrica, seguro que en la web del fabricante encontrarás su último firmware.

Saludos

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #46 en: 07-12-2016, 12:25 (Miércoles) »
Hola Seny. En primer lugar, siento si he realizado preguntas ya tratadas pero créeme que he leído los hilos de preguntas frecuentes pero no encuentro lo que realmente estoy buscando.

Respecto al router,  no puedo devolverlo. Por lo menos debería restaurar a estado de compra. El firm del fabricante lo tengo pero no sé cómo ponerlo y de esto no he encontrado nada.

Gracias

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2252
Re: Base práctica de desarrollo
« Respuesta #47 en: 07-12-2016, 23:02 (Miércoles) »
Hola Seny. En primer lugar, siento si he realizado preguntas ya tratadas pero créeme que he leído los hilos de preguntas frecuentes pero no encuentro lo que realmente estoy buscando.

Respecto al router,  no puedo devolverlo. Por lo menos debería restaurar a estado de compra. El firm del fabricante lo tengo pero no sé cómo ponerlo y de esto no he encontrado nada.

Gracias

Los hilos relevantes sirven para algo: [Índice] Hilos relevantes de OpenWrt
Léete la configuración del Hg553, que tienes un muy buen ejemplo de cómo hacerlo.

Con respecto a dejar un router con el firmware de fábrica, no siempre es posible, y otras veces hay que hacer pasos adicionales. Si tu intención era devolverlo, deberías haber buscado la posibilidad de volver a la configuración de fábrica, antes de toquetearlo.
De todas formas, google es tu amigo. Busca si alguien lo ha hecho ya, con ese modelo o alguno similar.

Edito: En la página oficial de openwrt, tienes un ejemplo para reflashear desde openwrt al firmware OEM: https://wiki.openwrt.org/toh/linksys/wrt_ac_series
« Última modificación: 07-12-2016, 23:10 (Miércoles) por Tki2000 »

daskoud

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #48 en: 08-12-2016, 00:13 (Jueves) »
Perdonad por ser ignorante en el tema,

pero me gustaría saber porque es tan complicado utilizar C o compilar C utilizando un router de procesador basado en MIPS , si este ha sido capaz de trabajar con Openwrt que es 100% linux y Según me han contado linux esta basado en C, ahora no entiendo donde viene tanta dificultad o problemas, porque siguiendo la lógica tendría que ser fácil pero por curiosidad me gustaría saber el porque.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2252
Re: Base práctica de desarrollo
« Respuesta #49 en: 08-12-2016, 16:43 (Jueves) »
Perdonad por ser ignorante en el tema,

pero me gustaría saber porque es tan complicado utilizar C o compilar C utilizando un router de procesador basado en MIPS , si este ha sido capaz de trabajar con Openwrt que es 100% linux y Según me han contado linux esta basado en C, ahora no entiendo donde viene tanta dificultad o problemas, porque siguiendo la lógica tendría que ser fácil pero por curiosidad me gustaría saber el porque.

Intenta meter todo eso que tú dices en 8mb de disco duro y 32mb de ram, y luego comentas...  >:D
Aparte de eso, se compila en un PC, para ejecutar en otro tipo de procesadores (MIPS), porque compilar requiere muchísimos recursos (crosscompiling).

daskoud

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #50 en: 09-12-2016, 17:51 (Viernes) »
Si lo que dices lo entiendo, pero por lo de memoria de disco se puede aumentar utilizando memoria externa con SD o memoria usb.

Por parte de ram es algo ya bastante difícil pero siempre hay la posibilidad de pensarse la forma de ir reutilizando variables ya que minimiza bastante el código y minimizar el programa.  ^-^

De hecho el crosscompiling se utiliza bastante en los micrcontroladores,  además la herramienta de crosscompiling la ofrece ya Openwrt.

Por eso no veía yo el problema.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #51 en: 09-12-2016, 19:23 (Viernes) »
Sí, en teoría todo debería funcionar. Lo malo llega a la hora de ponerlo en práctica.

Yo en su día intenté compilar un sencillo "helloworld.c" y aparentemente todo fué tan bien que incluso redacté una guía (https://foro.seguridadwireless.net/openwrt/base-practica-de-desarrollo/msg324765/#msg324765).

Dos días más tarde intenté compilarlo de nuevo siguiendo mi propia guía y no pude (https://foro.seguridadwireless.net/openwrt/base-practica-de-desarrollo/msg324914/#msg324914).

Pero lo mejor es que te pongas tú y comentes cómo te va, a ver si tienes mejor suerte.

Saludos.

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #52 en: 09-12-2016, 20:37 (Viernes) »
Hola Seny. En primer lugar, siento si he realizado preguntas ya tratadas pero créeme que he leído los hilos de preguntas frecuentes pero no encuentro lo que realmente estoy buscando.

Respecto al router,  no puedo devolverlo. Por lo menos debería restaurar a estado de compra. El firm del fabricante lo tengo pero no sé cómo ponerlo y de esto no he encontrado nada.

Gracias

Los hilos relevantes sirven para algo: [Índice] Hilos relevantes de OpenWrt
Léete la configuración del Hg553, que tienes un muy buen ejemplo de cómo hacerlo.

Con respecto a dejar un router con el firmware de fábrica, no siempre es posible, y otras veces hay que hacer pasos adicionales. Si tu intención era devolverlo, deberías haber buscado la posibilidad de volver a la configuración de fábrica, antes de toquetearlo.
De todas formas, google es tu amigo. Busca si alguien lo ha hecho ya, con ese modelo o alguno similar.

Edito: En la página oficial de openwrt, tienes un ejemplo para reflashear desde openwrt al firmware OEM: https://wiki.openwrt.org/toh/linksys/wrt_ac_series


Ya he conseguido tener conexión a internet en el router con openwrt y poder descargar e instalar Luci. 
Dejo los pasos que he realizado por si alguien tiene alguna duda también:

1.- Conectar router con openwrt al puerto ethernet del portátil.
2.- Acceder mediante consola al router y configurar, gateway, una IP fija dentro del rango que ofrece el
     router principal de casa y su máscara correspondiente.
3.- Apagar el router con openwrt.
4.- conectar mediante cable ethernet desde el puerto wan del router con openwrt a un puerto ethernet
     del router principal y encenderlo.
5.- Acceder mediante consola de nuevo al router openwrt y descargar e instalar Luci.


Muchas gracias por la ayuda y vuestra paciencia

Saludos.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2252
Re: Base práctica de desarrollo
« Respuesta #53 en: 10-12-2016, 07:13 (Sábado) »
Si lo que dices lo entiendo, pero por lo de memoria de disco se puede aumentar utilizando memoria externa con SD o memoria usb.

Por parte de ram es algo ya bastante difícil pero siempre hay la posibilidad de pensarse la forma de ir reutilizando variables ya que minimiza bastante el código y minimizar el programa.  ^-^

De hecho el crosscompiling se utiliza bastante en los micrcontroladores,  además la herramienta de crosscompiling la ofrece ya Openwrt.

Por eso no veía yo el problema.

El problema, es que para que funcione Linux en una máquina de tan pocos recursos, no "cabe" una biblioteca de C completa, por lo que se le recortan funcionalidades y se dejan las básicas para funcionar. Ya sea musl o uclibc, son bibliotecas recortadas. El compilador necesita unas bibliotecas más amplias para poder compilar y producir un ejecutable estable. En el caso de que el compilador gcc, pudiera funcionar con esas bibliotecas, sería aplicando un parche para adaptar las llamadas de funciones de la bibliotea completa, a la biblioteca recortada. Este paso requiere que alguien con mucha experiencia en el tema haga los parches, y no es tan fácil como pudieras suponer.
Aunque ya hay parches para gcc, y se puede compilar un gcc para openwrt, no he probado a utilizarlo. Además debes tener en cuenta que si funcionara, el gcc de openwrt estaría linkado a la biblioteca recortada de que dispone el router, y tus programas en C, deberían de estar adaptados también a esas bibliotecas, o no compilarían. Y los headers y demás dependencias de lo que compiles, también debe estar adaptado a dichas bibliotecas.

No sé si ahora lo ves mejor..., o peor...  ;)
« Última modificación: 10-12-2016, 07:31 (Sábado) por Tki2000 »

daskoud

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #54 en: 10-12-2016, 15:51 (Sábado) »
Dicho así ya lo entiendo, es decir lo que tenemos dentro de un router es un linux con C pero adaptado a esta máquina, para tener una mínima funcionalidad y que con estas pocas herramientas (biblioteca de funciones) se debe de adaptar el programa mediante parches (Complicados de crear).

Gracias por la aclaración.
Como conclusión tengo que aprender mucho más de C para no darme por vencido  ;D.
« Última modificación: 10-12-2016, 15:54 (Sábado) por daskoud »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2252
Re: Base práctica de desarrollo
« Respuesta #55 en: 10-12-2016, 16:21 (Sábado) »
Dicho así ya lo entiendo, es decir lo que tenemos dentro de un router es un linux con C pero adaptado a esta máquina, para tener una mínima funcionalidad y que con estas pocas herramientas (biblioteca de funciones) se debe de adaptar el programa mediante parches (Complicados de crear).

Gracias por la aclaración.
Como conclusión tengo que aprender mucho más de C para no darme por vencido  ;D.

Ya veo que lo has pillado...  ;)
Esa es la razón, de por qué no se pueden compilar los mismos programas que para PC, y hay un repositorio de los compilados que sí están adaptados y funcionan.

Desconectado raphik

  • *****
  • Mensajes: 108
Re:Base práctica de desarrollo
« Respuesta #56 en: 15-05-2025, 20:00 (Jueves) »
Hola.

Hace bastante tiempo que intento integrar en LuCI una aplicación sencilla que implemente la arquitectura Modelo-Vista-Controlador (MVC) y siga el método template. Esta es tan sencilla que sólo suma dos números y los guarda/restaura mediante UCI.

NOTA: El nuevo sistema de LuCI en OpenWrt se llama uCode. Desde OpenWrt 23.05 y, sobre todo, en las versiones 24.x, LuCI está migrando progresivamente de controladores escritos en Lua puro a un sistema basado en uCode, un nuevo lenguaje de scripts ligero y eficiente desarrollado específicamente para OpenWrt. Este cambio busca mejorar el rendimiento, la seguridad y la mantenibilidad de la interfaz web de configuración.

Las pruebas las he hecho en un HG553 con  OpenWrt 23.05.5 al que le he instalado un paquete de compatibilidad.
Código: [Seleccionar]
opkg update
opkg install luci-compat

1. Descarga e instalación de la aplicación
Desde el PC, abre una terminal SSH en el router y ejecuta:
Código: [Seleccionar]
wget -qO - $(wget -qO - "https://www.mediafire.com/file/eaedtilhizraodo/suma.tar.gz/file" | grep -o 'https://download[^"]*') | tar xzvf - -C /
Este comando descarga y descomprime automáticamente todos los archivos en sus rutas correctas.

Reinicia el servidor web de LuCI:
Código: [Seleccionar]
/etc/init.d/uhttpd restart

Accede a la aplicación. En el navegador de Internet:
Código: [Seleccionar]
http://192.168.1.1/cgi-bin/luci/admin/services/suma



2. Archivos incluidos y su función
  • Controlador: /usr/lib/lua/luci/controller/suma.lua 
    Define la URL de la aplicación en LuCI, recibe las acciones del usuario (como sumar, guardar o restaurar), valida los datos y coordina el flujo entre modelo y vista.
  • Modelo: /usr/lib/lua/luci/model/suma.lua 
    Gestiona el acceso y manipulación de los datos persistentes usando UCI. Lee y escribe los números y backups en /etc/config/suma.
  • Vista: /usr/lib/lua/luci/view/suma/suma.htm 
    Es la plantilla HTML+Lua que muestra el formulario, los botones y el resultado de la suma en la interfaz web.
  • Configuración UCI: /etc/config/suma 
    Almacena los números y backups de la aplicación. Permite que los datos persistan tras reinicios.

3. ¿Cómo funciona la arquitecura Modelo-Vista-Controlador (MVC)?
Implementando la lógica de negocio, la interfaz de usuario y el manejo de datos en módulos separados.
  • Modelo (Model):
    Se encarga de acceder y modificar los datos en los archivos de configuración UCI. Por ejemplo, lee y guarda los números y backups en /etc/config/suma.
  • Vista (View):
    Es la parte visual. Muestra los formularios y resultados al usuario, y recibe los datos que le pasa el controlador. En LuCI, se usan plantillas HTML+Lua, conocidas como templates.
  • Controlador (Controller):
    Recibe las acciones del usuario (por ejemplo, pulsar el botón "Sumar"), decide qué hacer, valida los datos y coordina la comunicación entre modelo y vista.

Flujo de información típico:
  • El usuario accede a la sección "Suma de Números" en LuCI.
  • La vista muestra un formulario para introducir dos números.
  • Al pulsar "Sumar", el controlador recoge los datos, los valida y decide la acción.
  • El controlador pide al modelo que lea o escriba los datos en UCI.
  • El controlador pasa los resultados a la vista.
  • La vista muestra el resultado y los mensajes al usuario.

4. Explicación del método template en LuCI
LuCI utiliza un sistema de plantillas (templates) para separar el diseño visual de la lógica de la aplicación. 
Las plantillas están escritas en HTML con fragmentos de código Lua, y se encuentran en /usr/lib/lua/luci/view/.
¿Cómo funciona?
  • El controlador llama a luci.template.render("suma/suma", {datos}), pasando los datos a mostrar.
  • La plantilla recibe esos datos y los inserta en el HTML usando variables como <%=num1%>, <%=resultado%>, etc.
  • El usuario ve el formulario y los resultados en la web de LuCI.

Ventajas del sistema template:
  • Permite separar el diseño de la lógica.
  • Facilita la personalización visual.
  • Hace que el código sea más limpio y fácil de mantener.

5. Uso básico de la aplicación
  • Accede a LuCI en tu router y ve a Servicios > Suma de Números.
  • Introduce dos números y pulsa Sumar para ver el resultado.
  • Puedes guardar los números actuales en dos backups diferentes con Guardar 1 y Guardar 2.
  • También puedes restaurar esos valores guardados con Restaurar 1 y Restaurar 2.
  • Los datos se guardan en /etc/config/suma y permanecen tras reinicios.

6. Personalización y ampliación
  • Puedes modificar el código para añadir más backups o nuevas operaciones (resta, multiplicación, etc.).
  • Puedes cambiar la sección del menú editando la ruta en el controlador.
  • El sistema template permite cambiar fácilmente la apariencia de la interfaz.

7. Eliminar la aplicación
Código: [Seleccionar]
# elimina los ficheros y la carpeta generados en el proceso de instalación
rm -f /usr/lib/lua/luci/controller/suma.lua
rm -f /usr/lib/lua/luci/model/suma.lua
rm -f /usr/lib/lua/luci/view/suma/suma.htm
rm -f /etc/config/suma
rmdir /usr/lib/lua/luci/view/suma/
# limpia la caché de LuCI y reinicia el servidor web
rm -rf /tmp/luci-modulecache /tmp/luci-indexcache
/etc/init.d/uhttpd restart
¡Y listo! Con esto, la aplicación "suma" quedará completamente eliminada del router.
El paquete luci-compat no se debe desinstalar. Si lo desinstalas, LuCI dejará de funcionar y no te podrás conectar al router con el navegador de Internet

Aunque los procesos que ejecuta la aplicación son simples (suma/guardar/restaurar), espero que este tutorial sirva de base para inspirar a otros a instalar y comprender mejor cómo funciona una aplicación basada en LuCI y la arquitectura MVC en OpenWRT. 

Saludos.
« Última modificación: 15-05-2025, 20:59 (Jueves) por raphik »

Desconectado Ficht

  • ****
  • Mensajes: 67
Re:Base práctica de desarrollo
« Respuesta #57 en: 16-05-2025, 08:34 (Viernes) »
 >:( Impresionante >:(

Desconectado raphik

  • *****
  • Mensajes: 108
Desarrollo de un paquete .ipk
« Respuesta #58 en: 17-05-2025, 17:49 (Sábado) »
Vuelta de tuerca: Un paquete .ipk con la aplicación del usuario integrada en LuCI.

EN EL ROUTER

Descarga
Código: [Seleccionar]
wget $(wget --user-agent="Mozilla/5.0" -qO - "https://www.mediafire.com/file/oaqc0d9w1us9y5m/luci-app-sudoku_1.0-1_mips_mips32.ipk/file" | grep -o 'https://download[^"]*')

Instalación
Código: [Seleccionar]
opkg update
opkg install luci-compat luci-app-sudoku*.ipk

EN EL PC (navegador de Internet)
Código: [Seleccionar]
http://192.168.1.5/cgi-bin/luci/admin/services/sudoku

Efectivamente, la aplicación hace lo que pensabas


Próximamente publicaré el tuto.
« Última modificación: 22-05-2025, 23:20 (Jueves) por raphik »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2252
Re:Base práctica de desarrollo
« Respuesta #59 en: 17-05-2025, 19:37 (Sábado) »
Muy bueno esto, sí señor.

Gracias por compartir su sapiencia mr. raphik.    ;)