-
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:
- Obtención de imagen para quemar en la MicroSD.
- Grabado de la imagen en la tarjeta.
- Configuración de los jumpers para iniciar desde la MicroSD.
- 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:
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 subsistema 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.
Los hacks de hacks4geeks son minitutoriales rápidos pensados para geeks con conocimiento informático avanzado. Si no entiendes o no consigues ejecutar un hack de esta web considera suscribirte a Premium para solicitar asistencia sobre el mismo.
