• El script uci-defaults de OpenWrt

    OpenWrt se basa en UCI, la Interfaz Unificada de Configuración, para configurar sus servicios centrales. UCI defaults ofrece una manera de preconfigurar nuestras imágenes utilizando UCI. Para establecer algunos valores predeterminados del sistema la primera vez que el dispositivo se inicia, creamos scripts en el directorio /etc/uci-defaults. Todos los scripts en ese directorio se ejecutan automáticamente al arranque:

    • Si finalizan con el código 0, se eliminan inmediatamente.
    • Si finalizan con un código de salida distinto de cero no se eliminan y se volverán a ejecutar en el próximo arranque hasta que finalicen correctamente.

    En un router en funcionamiento podemos ver los scripts de UCI defaults existentes en /rom/etc/uci-defaults, ya que /etc/uci-defaults suele estar vacío (después de que todos los scripts se hayan ejecutado con éxito y se hayan eliminado).

    Los scripts de UCI defaults pueden ser creados por paquetes o pueden ser insertados manualmente en la construcción como archivos personalizados.

    cat << "EOF" > /etc/uci-defaults/99-custom
    uci -q batch << EOI
    set network.lan.ipaddr='192.168.1.1'
    set wireless.@wifi-device[0].disabled='0'
    set wireless.@wifi-iface[0].ssid='OpenWrt'
    add dhcp host
    set dhcp.@host[-1].name='impresora'
    set dhcp.@host[-1].ip='192.168.1.50'
    set dhcp.@host[-1].mac='a1:b2:c3:d4:e5:f6'
    rename firewall.@zone[0]='lan'
    rename firewall.@zone[1]='wan'
    rename firewall.@forwarding[0]='lan_wan'
    EOI
    EOF

    Este es un ejemplo sencillo para configurar la dirección IP de LAN, el SSID, activar Wi-Fi, configurar una asignación DHCP estática, renombrar la zona de firewall y las secciones de reenvío. Una vez que el script se haya ejecutado con éxito y haya finalizado correctamente (estado de salida 0), se eliminará de /etc/uci-defaults. Todavía podremos consultar el original en /rom/etc/uci-defaults, si es necesario.

    Los scripts en /etc/uci-defaults se ejecutarán cada primer arranque (es decir, después de una instalación limpia o una actualización), posiblemente sobrescribiendo valores ya existentes. Si este comportamiento no interesa, podemos hacer una comprobación al principio del script, como por ejemplo esta:

    [ "$(uci -q get system.@system[0].zonename)" = "America/New York" ] && exit 0

    Esa línea hace que el script no se ejecute si la zona horaria es «America/New York».


    Deja una respuesta