• Instalar OpenWrt oficial personalizado en la MicroSD del router BPI-R3

    Para quemar una imagen oficial personalizada de OpenWrt en una MicroSD y que esta imagen inicie correctamente en una BPI-R3 tenemos que seguir los siguientes pasos:

    1. Obtención de imagen para quemar en la MicroSD.
    2. Grabado de la imagen en la tarjeta.
    3. Configuración de los jumpers para iniciar desde la MicroSD.
    4. Inicio de la MicroSD.

    OBTENCIÓN DE LA IMAGEN PERSONALIZADA DE OPENWRT

    La BananaPi BPI-R3 tiene un procesador MediaTek Filogic MT7986a. OpenWrt ofrece una herramienta web para personalizar la creación de la imagen de instalación. Con esta herramienta web podemos compilar una imagen personalizada, con los paquetes que nos interesa. Lo bueno de esto es que, elijamos los paquetes que elijamos, la propia herramienta de compilación seleccionará automáticamente todas las dependencias.

    Los enlaces a la herramienta web para las diferentes versiones son:

    Snapshot
    24.10.4

    En mi caso, personalizo los paquetes desplegando la flecha hacia abajo, borro todos los que aparecen y los reemplazo con esta lista personalizada:

    uboot-envtools mt7986-wo-firmware kmod-mt7986-firmware kmod-crypto-hw-safexcel kmod-nft-offload kmod-hwmon-pwmfan kmod-mt7915-firmware kmod-mt7915e kmod-mac80211 kmod-mt7615e kmod-sfp kmod-usb2 kmod-usb-core kmod-usb-ehci kmod-usb-ohci usbutils usbids kmod-usb3 kmod-usb-xhci-hcd kmod-usb-xhci-mtk kmod-gpio-button-hotplug kmod-i2c-gpio kmod-leds-gpio mtd kmod-nvme pciutils pciids base-files busybox dnsmasq dropbear wpad-basic-mbedtls libc libgcc libustream-mbedtls logd netifd nftables openssh-sftp-server procd procd-ujail procd-seccomp uci ca-bundle odhcp6c odhcpd-ipv6only ppp ppp-mod-pppoe uclient-fetch urandom-seed urngd mc nano curl git hwclock ethtool e2fsprogs f2fsck fstools mkf2fs blkid block-mount blockd blockdev dosfstools fdisk kmod-fs-vfat kmod-usb-storage parted nand-utils lsblk fitblk luci luci-i18n-base-es adblock luci-app-adblock luci-i18n-adblock-es tcpdump msmtp ddns-scripts ddns-scripts-services luci-app-ddns luci-i18n-ddns-es bind-host firewall4 luci-app-firewall luci-i18n-firewall-es opkg luci-app-package-manager luci-i18n-package-manager-es wifischedule luci-app-wifischedule luci-i18n-wifischedule-es luci-app-samba4 luci-i18n-samba4-es luci-app-ttyd luci-i18n-ttyd-es luci-app-upnp luci-i18n-upnp-es luci-app-wol luci-i18n-wol-es luci-app-watchcat luci-i18n-watchcat-es luci-app-commands luci-i18n-commands-es kmod-wireguard wireguard-tools luci-proto-wireguard qrencode luci-proto-modemmanager kmod-usb-serial kmod-usb-serial-wwan kmod-usb-serial-option kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan wwan uqmi usb-modeswitch minicom
    

    Abajo una explicación de cada uno de esos paquetes:

    U-BOOT
    uboot-envtools Utilidad para leer y modificar las variables de entorno de U-Boot sin reiniciar ni entrar al bootloader
    HARDWARE
    Chipset
    mt7986-wo-firmware Firmware del Wireless Offload (WO) del SoC MediaTek MT7986, necesario para acelerar por hardware el Wi-Fi en OpenWrt
    kmod-mt7986-firmware Carga el firmware base del SoC MediaTek MT7986, necesario para que funcionen correctamente sus aceleradores y subsistemas internos en OpenWrt
    kmod-crypto-hw-safexcel Descarga operaciones crypto al hardware mejorando el rendimiento de VPNs, IPsec, TLS, etc. si el SoC lo soporta
    kmod-nft-offload Offload de NAT / conntrack al hardware usando nftables. Reduce carga de CPU y aumenta throughput en routing / NAT. Útil en routers con soporte de flow offload
    Ventilador
    kmod-hwmon-pwmfan Driver de hardware monitoring que permite controlar ventiladores por PWM y leer su estado desde OpenWrt
    Wifi
    kmod-mt7915-firmware Firmware Wi-Fi 6 necesario para que los chips MediaTek MT7915/MT7916 funcionen correctamente
    kmod-mt7915e Módulo para tarjetas Wi-Fi 6 (802.11ax) MediaTek MT7915/MT7916 conectadas por PCIe
    kmod-mac80211 Subsistema Wi-Fi del kernel que proporciona la capa 802.11 común sobre la que funcionan los drivers inalámbricos
    kmod-mt7615e Módulo para tarjetas Wi-Fi 5 (802.11ac) MediaTek MT7615 conectadas por PCIe
    SFP
    kmod-sfp Módulo para puertos SFP/SFP+ que gestiona módulos ópticos y de cobre (detección, enlace, potencia)
    USB 2
    kmod-usb2 Módulo que habilita controladores USB 2.0 (EHCI/OHCI/UHCI)
    kmod-usb-core Módulo del sub­sistema USB, imprescindible para que cualquier dispositivo USB funcione
    kmod-usb-ehci Módulo para el controlador USB 2.0 EHCI, usado para puertos USB de alta velocidad
    kmod-usb-ohci Módulo para el controlador USB 1.1 OHCI, usado en hardware antiguo o embebido
    usbutils Utilidades de usuario (como lsusb) para listar y diagnosticar dispositivos USB desde la línea de comandos
    usbids Base de datos de IDs USB usada por herramientas como lsusb para identificar fabricantes y dispositivos
    USB 3
    kmod-usb3 Habilita controladores USB 3.x (xHCI) para puertos USB de alta velocidad
    kmod-usb-xhci-hcd Módulo para el controlador USB xHCI, necesario para USB 3.x y compatibilidad con USB 2.0
    kmod-usb-xhci-mtk Driver xHCI específico de MediaTek, imprescindible para que los puertos USB 3.x del SoC MTK funcionen
    GPIO
    kmod-gpio-button-hotplug Módulo que detecta pulsaciones de botones físicos GPIO y lanza eventos hotplug
    kmod-i2c-gpio Módulo que implementa un bus I2C por software usando GPIOs, para comunicar sensores y periféricos I2C
    kmod-leds-gpio Módulo para controlar LEDs conectados al GPIO
    MTD
    mtd Herramientas y soporte para gestionar memorias flash MTD (NAND/NOR), usadas para leer, escribir y mantener el almacenamiento interno
    NVMe
    kmod-nvme Módulo que habilita dispositivos NVMe sobre PCIe, permitiendo usar SSD NVMe
    PCIe
    pciutils Utilidades de usuario (como lspci) para listar y diagnosticar dispositivos PCI/PCIe
    pciids Base de datos de IDs PCI/PCIe usada por herramientas como lspci para identificar fabricantes y dispositivos
    SOFTWARE
    Herramientas para terminal (mandatorias)
    base-files Instala la estructura mínima del sistema, archivos esenciales y scripts de inicio de OpenWrt
    busybox Binario único que agrupa las herramientas básicas de Unix (ls, cp, sh, etc.)
    dnsmasq Servicio ligero que proporciona DNS, DHCP y TFTP para redes pequeñas
    dropbear Servidor y cliente SSH ligero para sistemas embebidos
    wpad-basic-mbedtls Alternativa ligera a hostapd-openssl para WPA/WPA2 en Wi-Fi con cifrado mbedTLS, sin funciones avanzadas (802.11r/k/v)
    libc Biblioteca C estándar del sistema, base sobre la que se compilan y ejecutan todos los programas
    libgcc Biblioteca de soporte de GCC que aporta rutinas de bajo nivel necesarias para ejecutar binarios compilados
    libustream-mbedtls Alternativa ligera a la biblioteca libustream-openssl de streams y TLS basada en mbedTLS para conexiones seguras (HTTPS) de servicios y utilidades
    logd Demonio que recoge, gestiona y expone los logs del sistema
    netifd Demonio que gestiona interfaces de red, enlaces, IPs, bridges y su integración con el firewall
    nftables Framework de filtrado y control de tráfico del kernel usado como base del firewall moderno
    openssh-sftp-server Componente de OpenSSH que proporciona el servicio SFTP para transferencia de archivos segura sobre SSH
    procd Init system de OpenWrt, gestiona el arranque, servicios, hotplug y la supervisión de procesos
    procd-ujail Extensión de procd que permite aislar servicios en jaulas (sandbox) usando ujail para mayor seguridad
    procd-seccomp Soporte para filtros seccomp en procd, que restringe llamadas al sistema de los servicios para mejorar la seguridad
    uci Sistema de configuración unificada de OpenWrt que permite leer y modificar ajustes del sistema desde CLI y scripts
    ca-bundle Conjunto de certificados raíz para que el sistema confíe en conexiones HTTPS/TLS. Sin esto, HTTPS falla
    odhcp6c Cliente DHCPv6 que se usa para obtener IPv6 desde el ISP (prefijo, DNS, etc.) en la interfaz WAN
    odhcpd-ipv6only Asigna direcciones IPv6 (sin IPv4) y anuncios de router a la LAN. Normalmente va junto con odhcp6c
    ppp Soporte base de PPP (Point-to-oint Protocol). Capa común para conexiones PPP (PPP over serial, PPPoE, etc.)
    ppp-mod-pppoe Módulo PPPoE. Permite conectar a ISPs que usan PPPoE (muy común en fibra y ADSL)
    uclient-fetch Cliente HTTP/HTTPS ligero. Lo usa OpenWrt para descargar archivos (actualizaciones, scripts, feeds) sin depender de wget/curl completos
    urandom-seed Guarda y restaura una semilla de entropía entre reinicios. Evita que el sistema arranque con entropía baja, lo cual es crítico para crypto
    urngd Daemon que alimenta /dev/random usando /dev/random. Mantiene un nivel saludable de entropía, especialmente en sistemas sin buen RNG hardware
    Herramientas para terminal (extra)
    mc Midnight Commander, gestor de archivos en modo texto con paneles, editor y visor integrados
    nano Editor de texto simple y ligero para editar archivos desde la terminal
    curl Herramienta de línea de comandos para transferir datos por red (HTTP, HTTPS, FTP, etc.) y probar APIs o servicios remotos
    git Sistema de control de versiones distribuido para gestionar y sincronizar código fuente
    hwclock Herramienta para leer y ajustar el reloj hardware (RTC) del sistema
    ethtool utilidad para consultar y configurar parámetros de interfaces Ethernet (velocidad, dúplex, offloads=
    Acceso a volúmenes
    e2fsprogs Conjunto de herramientas para crear, comprobar y reparar sistemas de archivos ext2/3/4.
    f2fsck Herramienta para comprobar y reparar sistemas de archivos F2FS, optimizados para memoria flash.
    fstools Utilidades de OpenWrt para detectar, montar y gestionar sistemas de archivos y overlays
    mkf2fs Herramienta para crear (formatear) sistemas de archivos F2FS sobre dispositivos de almacenamiento flash
    blkid Utilidad para identificar dispositivos de bloque y detectar UUID, LABEL y tipo de sistema de archivos
    block-mount Componente que gestiona el montaje automático de dispositivos de almacenamiento según la configuración en fstab
    blockd Demonio que detecta cambios en dispositivos de bloque y coordina el automontaje con block-mount
    blockdev Herramienta para consultar y ajustar parámetros de dispositivos de bloque desde la línea de comandos
    dosfstools Herramientas para crear y reparar sistemas de archivos FAT/FAT32, usados en USBs y particiones EFI
    fdisk Utilidad para crear y modificar tablas de particiones en discos
    kmod-fs-vfat Módulo del kernel que permite montar sistemas de archivos FAT/VFAT
    kmod-usb-storage Módulo que habilita dispositivos de almacenamiento masivo USB (pendrives, discos externos)
    parted Herramienta para crear, modificar y redimensionar particiones en discos usando tablas MBR y GPT
    nand-utils Herramientas para gestionar y mantener memorias NAND (leer, escribir, borrar, comprobar) en sistemas embebidos
    lsblk Utilidad para listar dispositivos de bloque y su jerarquía (discos, particiones, puntos de montaje)
    fitblk Soporte para imágenes FIT con particiones en bloque. Se usa en firmwares modernos para manejar el arranque y actualizaciones desde imágenes FIT almacenadas en flash o eMMC
    LUCI
    Web base
    luci Interfaz web de OpenWrt para configurar y administrar el sistema desde el navegador
    luci-i18n-base-es Paquete de traducción al español de la interfaz base de LuCI
    Adblock
    adblock Servicio de OpenWrt que bloquea publicidad y rastreadores a nivel DNS usando listas de filtros
    luci-app-adblock Módulo de LuCI para configurar y gestionar Adblock desde la interfaz web
    luci-i18n-adblock-es Paquete de traducción al español de luci-app-adblock
    tcpdump Herramienta de línea de comandos para capturar y analizar tráfico de red en tiempo real
    msmtp Cliente SMTP ligero para enviar correos salientes desde scripts o servicios del sistema
    DDNS
    ddns-scripts Scripts para actualizar automáticamente DNS dinámico (IP pública cambiante) en proveedores DDNS
    ddns-scripts-services Colección de plantillas y proveedores predefinidos para que ddns-scripts funcione con servicios DDNS conocidos
    luci-app-ddns Módulo de LuCI para configurar y gestionar DNS dinámico (DDNS) desde la interfaz web
    luci-i18n-ddns-es Paquete de traducción al español de luci-app-ddns
    bind-host Utilidades del paquete BIND (como dig/nslookup) para consultar y diagnosticar DNS desde la línea de comandos
    Cortafuegos
    firewall4 Sistema de cortafuegos de OpenWrt basado en nftables, encargado de gestionar reglas, zonas y NAT
    luci-app-firewall Módulo de LuCI para configurar el firewall4 (nftables) desde la interfaz web
    luci-i18n-firewall-es Paquete de traducción al español de luci-app-firewall
    OPKG
    opkg Gestor de paquetes de OpenWrt para instalar, actualizar y eliminar software desde repositorios
    luci-app-package-manager Módulo de LuCI que proporciona la interfaz web para gestionar paquetes opkg (instalar, actualizar y eliminar)
    luci-i18n-package-manager-es Paquete de traducción al español de luci-app-package-manager
    Programación Wifi
    wifischedule Servicio que programa el encendido y apagado del Wi-Fi por horarios para ahorro energético o control de acceso
    luci-app-wifischedule Módulo de LuCI para configurar horarios de activación/desactivación del Wi-Fi usando Wifischedule
    luci-i18n-wifischedule-es Paquete de traducción al español de luci-app-wifischedule
    Samba
    luci-app-samba4 Módulo de LuCI para configurar y gestionar Samba 4, compartiendo archivos en red (SMB/CIFS)
    luci-i18n-samba4-es Paquete de traducción al español de luci-app-samba4
    Terminal en LUCI
    luci-app-ttyd Módulo de LuCI que expone un terminal web interactivo (ttyd) para acceder a la consola del router desde el navegador
    luci-i18n-ttyd-es Paquete de traducción al español de luci-app-ttyd
    uPnP
    luci-app-upnp Módulo de LuCI para configurar UPnP/NAT-PMP, permitiendo apertura automática de puertos en el firewall
    luci-i18n-upnp-es Paquete de traducción al español de luci-app-upnp
    Wake on LAN
    luci-app-wol Módulo de LuCI para enviar paquetes Wake-on-LAN y encender equipos remotamente (Instala la dependencia etherwake)
    luci-i18n-wol-es Paquete de traducción al español de luci-app-wol
    Watchcat
    luci-app-watchcat Módulo de LuCI para configurar Watchcat, que vigila la conectividad y reinicia servicios o el router si detecta fallos
    luci-i18n-watchcat-es Paquete de traducción al español de luci-app-watchcat
    Ejecutar scripts desde LUCI (Agrega Sistema > Comandos personalizados)
    luci-app-commands Módulo de LuCI que permite ejecutar comandos o scripts predefinidos desde la interfaz web
    luci-i18n-commands-es Paquete de traducción al español de luci-app-commands
    VPN
    kmod-wireguard Módulo del kernel que añade soporte WireGuard
    wireguard-tools Utilidades de usuario (wg, wg-quick) para configurar y gestionar túneles WireGuard
    luci-proto-wireguard Soporte de LuCI para configurar interfaces WireGuard como protocolo de red
    qrencode Herramienta para generar códigos QR desde texto o datos en la línea de comandos
    Módem
    luci-proto-modemmanager Soporte de LuCI para configurar interfaces de red gestionadas por ModemManager (módems 3G/4G/5G)
    Módem EC25 (QMI)
    kmod-usb-serial Módulo que habilita adaptadores serie USB (USB-to-UART)
    kmod-usb-serial-wwan Módulo para módems WWAN (3G/4G/5G) basados en interfaces serie USB
    kmod-usb-serial-option Módulo para módems USB 3G/4G/5G tipo Option/Huawei/ZTE, habilita sus puertos serie AT
    kmod-mii Módulo que proporciona soporte MII/MDIO para la comunicación entre MAC Ethernet y PHYs
    kmod-usb-net Módulo que habilita adaptadores de red USB
    kmod-usb-wdm Módulo que habilita la interfaz USB WDM usada por módems WWAN (QMI/MBIM) para control y gestión
    kmod-usb-net-qmi-wwan Módulo para módems USB WWAN en modo QMI, proporcionando interfaz de red de alta velocidad
    wwan Conjunto de herramientas y soporte para conectividad móvil (3G/4G/5G), gestionando interfaces WWAN
    uqmi Herramienta de línea de comandos para controlar módems QMI (conexión, estado, SIM, APN)
    usb-modeswitch Herramienta que cambia el modo USB de módems (de almacenamiento a red/serie) para que funcionen correctamente
    minicom Terminal serie en modo texto para comunicarse con dispositivos vía UART/USB-serial

    Todos los paquetes de arriba garantizan que la BPI-R3 funcione correctamente, con todas sus funcionalidades activadas. La propia herramienta selecciona todas las dependencias para esa compilación y se asegura que no falte ninguno que tenga relación con los paquetes que le pegamos. Esto nos asegura una instalación funcional de OpenWrt en la BPI-R3 en la que podremos utilizar todos sus componentes y hacer todas las funciones básicas de un router (y alguna más).

    De los paquetes oficiales que vienen cuando uno instala la compilación por defecto, he dejado fuera los siguientes:

    kmod-phy-aquantia (Driver para PHYs Aquantia (10G/5G/2.5G/1G). Necesario si el hardware usa chips Aquantia para Ethernet multigigabit)

    …porque no entiendo para que viene incluido si las BPI-R3 no tienen hardware Aquantia.

    Al quemar una imagen personalizada, debemos tener en cuenta que, además de preparar la imagen para la MicroSD , si vamos a querer tener instalado OpenWrt en la SPI NAND de la BPI-R3, deberemos tener cuidado con que la imagen generada no ocupe más de 128MB, pues es el tamaño máximo que disponemos para quemar imágenes en ella. Si, por otro lado, queremos tener OpenWrt instalado en la EMMC, o si vamos a correrlo desde la propia MicroSD, no nos hace falta preocuparnos por el espacio que ocupe la imagen generada; la EMMC de la BPI-R3 tiene 8GB de espacio y una MicroSD, pues lo que estemos dispuestos a gastar.

    Después de ingresar estos paquetes en el personalizador, y antes de compilar, podemos crear un script que se ejecutará la primera vez que la imagen de OpenWrt se inicie en la BPI-R3. Esto lo hacemos en el campo de texto que está por debajo del campo de selección de paquetes (uci-defaults). Un script básico podría ser:

    .

    Después de darle a compilar, y de que la compilación haya resultado exitosa, podremos descargar 8 tipos de archivos individuales:

    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-sdcard.img: Imagen para quemar directamente en la MicroSD.

     

    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-nor-preloader.bin: Esta va en la mtd bl2?
    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-nor-bl31-uboot.fip: Es la imagen de cargador de arranque.  Va en la mtd fip?

    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-snand-preloader.bin: Esta va en la mtd bl2?
    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-snand-bl31-uboot.fip: Es la imagen de cargador de arranque.  Va en la mtd fip?

     

    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-emmc-preloader.bin: Es la correspondiente a bl2_emmc.
    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-emmc-bl31-uboot.fip: Imagen de cargador de arranque. Software de bajo nivel que carga el sistema operativo en la primera fase del arranque.

     

    openwrt-xxx-mediatek-filogic-bananapi_bpi-r3-squashfs-sysupgrade.itb: Para actualizar un sistema que ya ejecuta OpenWrt.

     

    El archivo que nos importa ahora mismo es el de la SD. Descomprimimos el archivo y obtendremos otro archivo con extensión .img.

    QUEMADO DE LA IMAGEN EN LA TARJETA

    Podemos quemar la imagen en la MicroSD de esta forma:

    sudo dd if=/home/usuario/openwrt-xx.xx.x-mediatek-filogic-bananapi_bpi-r3-sdcard.img of=/dev/mmcblk0 bs=10M status=progress oflag=direct
    

    Eso sí, al acabar de quemar la imagen de la MMC en la tarjeta, hay que prestar atención a que la última partición (que es donde se montará el overlay) tiene de tamaño, como mucho, el total de espacio que suman los paquetes elegidos. Y eso es muy poco. Por eso, antes de sacarla del ordenador GNU/Linux donde la hemos «quemado» y antes también de meterla en la BPI-R3, hay que hacer que esa última partición (que es la que se llama «production») sea tan grande como todo el espacio libre disponible al final de la tarjeta de memoria. Esto lo hacemos abriendo en la distro donde la quemamos, una consola con permisos de administrador y ejecutando dentro:

    sudo cfdisk /dev/mmcblk0

    …donde /dev/mmcblk0 es el dispositivo de la tarjeta de memoria.

    Nos desplazamos con flecha abajo hasta la última partición y luego, con flecha lateral nos desplazamos hasta la opción de resize.

    Damos Enter en resize y aceptamos que use todo el espacio libre disponible.

    Nos desplazamos hasta write y damos Enter, aceptando la escritura.

    Salimos de cfdisk presionando Enter sobre «Quit».

    El binario cfdisk, en caso de que no lo tengamos instalado, forma parte del paquete util-linux.

    CONFIGURACIÓN DE JUMPERS PARA INICIAR DESDE LA MICROSD

    Expulsamos la MicroSD, la metemos en el router BPI-R3, ponemos los jumpers 1, 2 y 4 hacia arriba. La posición del jumper 4 determinará si el OpenWrt booteado desde la MicroSD podrá acceder a la SPI NOR o a la SPI NAND. Para la NAND, arriba. Para la NOR, abajo.

    INICIO DE LA MICROSD

    Conectamos el cable de corriente y el OpenWrt debería iniciar sin problemas.

    Euskal Hack Congress

    Deja una respuesta