Autor Tema: Base práctica de desarrollo  (Leído 15855 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: 1953
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 »
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

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: 1953
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).
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

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: 1953
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 »
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

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: 1953
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.
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

Desconectado raphik

  • ****
  • Mensajes: 52
Re:Base práctica de desarrollo
« Respuesta #56 en: 25-03-2019, 23:30 (Lunes) »
Vuelta de tuerca al helloworld.

Compilar para OpenWrt es más fácil de lo que parecía.
FUENTE: http://dvblog.soabit.com/building-custom-openwrt-packages-an-hopefully-complete-guide/

Fichero fuente helloword.c
Código: [Seleccionar]
#include <stdio.h>
int main(void)
{
  printf("\nHello World!\n\n");
  return 0;
}

Compilación simple (se compila en el PC, se ejecuta en el PC).
Código: [Seleccionar]
gcc -o helloworld helloworld.c
Compilación cruzada (se compila en el PC, se ejecuta en el router).
Código: [Seleccionar]
mips-openwrt-linux-gcc -o hello hello.c
El quid de la cuestión está en encontrar el compilador adecuado y en definir un par de variables de entorno.

Lo vemos con un ejemplo: el compilador para máquinas brmc63xx con LEDE-17.0.4 (HG553, HG556a, AR5387un, etc.) lo tenemos en
https://downloads.openwrt.org/releases/17.01.4/targets/brcm63xx/generic/lede-sdk-17.01.4-brcm63xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz

Crear primeramente la carpeta ~/pruebas.
Código: [Seleccionar]
mkdir ~/pruebas
Y copiar la recién descargada carpeta lede-sdk-17.01.4-brcm63xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64 dentro de la carpeta ~/pruebas.


Definir un par  variables de entorno.
Código: [Seleccionar]
export STAGING_DIR=~/pruebas/lede-sdk-17.01.4-brcm63xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir
export PATH=~/pruebas/lede-sdk-17.01.4-brcm63xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/toolchain-mips_mips32_gcc-5.4.0_musl-1.1.16/bin:$PATH

Copiar también helloword.c en la carpeta ~/pruebas y compilar para el router.
Código: [Seleccionar]
mips-openwrt-linux-gcc -o helloworld helloworld.c
Transferir el ejecutable al router.
Código: [Seleccionar]
scp helloworld root@192.168.1.11:
Iniciar sesión en el router y ejecutar el programa
Citar
root@LEDE:~# ./helloworld

Hello, world!

root@LEDE:~#

NOTA: Si se desea restaurar la variable PATH a su contenido original:
Código: [Seleccionar]
PATH=$(/usr/bin/getconf PATH)
« Última modificación: 26-03-2019, 09:46 (Martes) por raphik »