Ubuntu Peronista@TTBP

Este es un espejo en el Tilde Blog Project del blog original Ubuntu Peronista. Se encuentra disponible en Tildeverso únicamente con fin histórico.



15 february 2022

¿Cómo puedo ejecutar programas en OpenWRT? ¡Trabajadores!

Como verdaderos apóstoles, hemos de instalar software libre en todos los dispositivos que tengamos a mano. Solo así nos aseguraremos de transitar la real senda de la Liberación.

He comentado ya del caso del router TP Link WR491ND y de su firmware de control alternativo y abierto OpenWRT. Gracias a el nuestro router dejará de ser un dispositivo bobo, y pasará a convertirse en un verdadero router peronista capaz de correr otras aplicaciones. OpenWRT es un firmware abierto, pensado para controlar enrutadores. Como tal, es un sistema operativo que convierte a nuestro router en una computadora de pequeñas dimensiones y potencia reducida, pero programable para conducir efectivamente una serie de tareas.

Por medio de OpenWRT y un router compatible, podremos crear un servidor de archivos, servidores pequeños de correo de status, controlar en horarios determinados dispositivos electrónicos a través de interfaces seriales, USB, o Ethernet.

Con un poco de dificultad, se pueden programar entonces dispositivos controlados a partir del router, como por ejemplo, aspersores que trabajen a horario, unidades de medición del clima que lean las condiciones de temperatura y humedad y la transmitan por internet, podremos controlar cámaras de seguridad, relays que enciendan luces, abran o cierren portones eléctricos, enciendan bombas o motores eléctricos, o con más software libre podremos convertir nuestro router en un dispositivo de transmisión de medios (fotos, audio e incluso video) para operar dentro de la red local, y muchso etcéteras

Sin embargo, no necesitamos tanta dificultad, aún así podremos desarrollar nuestras propias "aplicaciones caseras" por medio de código Ash. Dicho código comprende comandos y condicionales, de manera de poder realizar ciertas acciones útiles, con poco ingenio y habilidad.

Es importante si bien los guiones los almacenaremos dentro del directorio /root del router, los mismos han de concentrarse en operar dentro del directorio /tmp/ del router, ya que el mismo es la memoria RAM volátil. Esto es así pues los routers disponen de muy poco espacio físico (un chip EEPROM de 4 megabytes, y raramente más).

Para disponer nuestros scripts, crearemos dentro del router un directorio a tal efecto:

mkdir /root/scripts/ Por ejemplo, si nuestro proveedor nos da IP dinámica y quisiéramos saber cuáles nuestra dirección IP de salida actual para montar un servidor de juego o por cualquier motivo, podríamos crear un script que lo haga.

Para ello, hemos de utilizar siempre el básico editor Vi. Se trata de un editor mínimo incorporado dentro del router. Para editar texto debemos llamarlo con vi nombredelarchivo.

En este caso podriamos hacer:

vi /root/scripts/decimelaip

Presionamos i para entrar al modo edición, y le pegamos el siguiente código peronista:

!/bin/sh

Scropt decimelaip Informa la IP de salida.

rm -f /tmp/log/ipactual.log wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log echo La direccion IP actual de salida a internet es: echo '' >> /tmp/log/ipactual.log cat /tmp/log/ipactual.log

Para guardar el archivo y abandonar el editor, debemos presionar Esc y escribir :wq seguido de Enter.

Ahora podremos darle permisos de ejecución con:

chmod +x /root/scripts/decimelaip

y ejecutarlo con:

sh ~/scripts/decimelaip

También podríamos configurar un script que revise por medio de un ping a google.com, para saber si hay conexión WAN (al cablemódem), y si no la encuentra, que reinicie el router. Este microprograma puede ser útil para una tarea de administración remota.

Para ello editaríamos el archivo:

vi /root/scripts/pingreset

Activamos el modo de edición con i y le pegamos el siguiente código:

!/bin/sh

Programa para probar la conexion o resetear.

if ping -c 1 google.com > /dev/null ; then echo "Todo OK, el cliente funciona y no necesita reiniciarse" pingfail=0 else pingfail=$(($pingfail+1)) echo $pingfail " ping fracasados" if [ $pingfail -gt 10 ]; then echo "mas de 10 ping a google fracasados. RESETEANDO EL ROUTER!!" reboot fi fi

Luego guardamos y salimos con Esc +:wq, y le damos permisos de ejecución con:

chmod +x /root/scripts/pingreset

Podremos ejecutarlo con:

sh ~/scripts/pingreset

Un script que conviene tener en el directorio root de nuestro router es uno que active o desactive la red wifi. Para ello editamos:

vi ~/wifionoff

Se abrirá el editor Vi con el archivo en blanco. Presionamos i y le insertamos el siguiente código:

!/bin/sh

Crea un archivo con el registro de estado del Wifi (on u off)

Si el wifi está on lo apaga, si está off lo enciende.

STATEFILE="/tmp/wifionoff.state"

if [ $# -eq 1 ]; then case $1 in "up"|"on") STATE=off ;; "down"|"off") STATE=on ;; esac else if [ ! -e ${STATEFILE} ]; then STATE=on else . ${STATEFILE} fi fi if [ -z ${STATE} ]; then STATE=on fi

if [ ${STATE} == "on" ]; then /sbin/wifi down STATE=off else /sbin/wifi up STATE=on fi

echo "STATE=${STATE}" > ${STATEFILE}

Una vez realizado esto, podremos darle permiso con:

chmod +x /root/wifionoff

Con este archivo creado, podremos ahora apagar o encender el wifi con dicho comando (siempre que estemos conectados por cable, claro está).

En vista de dicho archivo y si por algún motivo necesitásemos reiniciar solamente la red inalámbrica, pero queremos hacerlo estando conectados por wifi, podremos crear un script a tal efecto.

Para ello ingresamos

vi /root/scripts/resetearwifi

Y le pegamos el siguiente código:

!/bin/sh

Programa para resetear el wifi estando conectado por wifi

requiere script wifionoff en /root/

cd /root/ ./wifionoff && ./wifionoff

Lo guardamos y salimos con Esc + :wq, y le asignamos permisos de escritura con chmod + /root/scripts/resetearwifi.

En el caso de necesitar scripts puros para encender o apagar el wifi (por ejemplo, para utilizarlos a través de una orden cronometrada Cron, y activar o desactivar el wifi en determinadas horas del día), podremos utilizar Vi para incorporar dos archivos:

Un archivo /root/script/wifion que contenga el siguiente código:

!/bin/sh

Enciende la WLAN (sin detener el dispositivo de emision radio0)

wifi up

...y un archivo /root/script/wifioff que contenga el siguiente código:

!/bin/sh

Apaga la WLAN (sin detener el dispositivo de emision radio0)

wifi down

Es siempre útil contar con un script que nos presente el status del router. Para ello podremos crear con Vi un archivo /root/status e insertarle el código:

!/bin/sh

Programa que devuelve datos de estado del router

date uptime echo Detalle de las Conexiones del router ifconfig echo Direcciones IP cedidas por DHCP cat /tmp/dhcp.leases rm -f /tmp/log/ipactual.log wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log echo '' >> /tmp/log/ipactual.log echo La dirección IP actual de salida a internet es: cat /tmp/log/ipactual.log

Guardamos el archivo con Esc + :wq y le damos permisos de ejecución con chmod +x /root/status.

Para ejecutarlo, podremos utilizar el comando ./status o sh /root/status.

Podremos crear otro programa de información aún mas detallado con facilidad. Por ejemplo, podríamos escribir un guion llamado /root/scripts/info con el siguiente contenido:

scripts para detalles

echo INFORMACION DEL ROUTER - presione q para salir > /tmp/log/info echo Dispositivo >> /tmp/log/info cat /tmp/sysinfo/model >> /tmp/log/info cat /proc/version >> /tmp/log/info uname -mnrs >> /tmp/log/info cd /tmp/ rm -f /tmp/log/ipactual.log wget -q http://ipecho.net/plain -O /tmp/log/ipactual.log echo '' >> /tmp/log/ipactual.log echo La IP actual de salida a Internet es >> /tmp/log/info cat /tmp/log/ipactual.log >> /tmp/log/info echo INFORMACION DE LA CPU DEL ROUTER >> /tmp/log/info cat /proc/cpuinfo >> /tmp/log/info echo '' >> /tmp/log/info echo ESTADO DE LA MEMORIA >> /tmp/log/info cat /proc/meminfo >> /tmp/log/info echo '' >> /tmp/log/info echo MODULOS CARGADOS EN MEMORIA >> /tmp/log/info cat /proc/modules >> /tmp/log/info echo '' >> /tmp/log/info echo DMESG DEL ROUTER >> /tmp/log/info dmesg >> /tmp/log/info echo '' >> /tmp/log/info echo LOG INTERNO DEL APARATO >> /tmp/log/info logread >> /tmp/log/info echo '' >> /tmp/log/info echo Generando archivo nuevo en tmp/log/info cat /tmp/log/info | less

Comentar para que no elimine el archivo al terminal el proceso:

rm /tmp/log/info

Con ello, al darle permisos de ejecución y ejecutar el script, nos devolverá una gran cantidad de información de status, en un paginador con le cual podremos movernos usando las flechas del cursor. Para cerrar el paginador, debemos presionar q.

Red de invitados En mi residencia de Puerta de Hierro dispongo de un único router que utilizo para mis quehaceres, pero en ocasiones debo montar el wifi para que mis invitados puedan utilizar sus dispositivos móviles. Es verdad que existen configuraciones específicas para el tema que nos aislan la red wifi de la red local, pero en mi caso no lo considero necesario de momento, por lo que simplemente dispongo una red wifi con una clave simple, diferente a la utilizada regularmente.

En tal caso, podremos preveer dos scripts que cambien la configuración de la red, y la activen. Cada uno de ellos depende de distintos archivos de parámetros generales.

En OpenWRT la red inalámbrica se configura a través del archivo /etc/config/wireless, el cual delimita las opciones de la red wifi, entre ellas el nombre de red (ssid) y la contraseña (key).

Para el funcionamiento adecuado crearé dos archivos de configuración. En el archivo /etc/config/wireless.normal indicaremos nuestros datos normales de la red, incluyendo su nombre de red y su contraseña. Por ejemplo, indicaré:

configuracion de la red Wifi normal

config wifi-device 'radio0' option type 'mac80211' option hwmode '11ng' option path 'platform/ath9k' option disabled '0' option country 'AR' option txpower '20' option htmode 'HT40' option channel 'auto'

config wifi-iface option device 'radio0' option network 'lan' option mode 'ap' option ssid 'Wifi de Peron' option key 'eStA cLabe nO lA Bas A DeScUBrIr nI LoCO' option encryption 'psk2+ccmp'

En tanto, en el archivo /etc/config/wireless.invitado pondremos los datos que corresponderán a la red temporal para invitados:

configuracion del Wifi para invitados

config wifi-device 'radio0' option type 'mac80211' option hwmode '11ng' option path 'platform/ath9k' option disabled '0' option country 'AR' option txpower '20' option htmode 'HT40' option channel 'auto'

config wifi-iface option device 'radio0' option network 'lan' option mode 'ap' option ssid 'Puerta de Hierro - Invitados' option key 'vivaperon' option encryption 'psk2+ccmp'

Activarlo con el programa /root/scripts/confwifiinvitado

Para volver a la wifi normal usar /root/scripts/wifinormal

Estos archivos de configuración no requieren permisos de ejecución.

Para poder activar la red Wifi de invitados o la red Wifi normal, debemos crear dos scripts y darles permisos de ejecución que las den de alta. En el archivo /root/scripts/confwifiinvitado ingresamos el siguiente código:

!/bin/sh

activa wifi invitado siguiendo el archivo /etc/config/wireless.invitado

cd /root wifi down rm -f /etc/config/wireless cp /etc/config/wireless.invitado /etc/config/wireless wifi up echo Se activo la wifi de invitado!

Luego en el archivo /root/scripts/confwifinormal, le incorporamos el siguiente código:

!/bin/sh

activa wifi normal segun archivo /etc/config/wireless.normal

cd /root wifi down rm -f /etc/config/wireless cp /etc/config/wireless.normal /etc/config/wireless wifi up echo Se reestablecio la wifi normal...

Tras editar ambos scripts, les otorgamos sus necesaarios permisos de ejecución con:

chmod +x /root/scripts/confwifiinvitado /root/scritps/confwifinormal:

Ahora, si ejecutamos el script confwifiinvitado, la red se llamara "Puerta de Hierro - Invitados" y la contraseña será "vivaperon". Y si ejecutamos confwifinormal, la red se llamará "Red de Peron" y la contraseña será la dificultosa "eStA cLabe nO lA Bas A DeScUBrIr nI LoCO".