Crear una imagen personalizada de Openwrt (LEDE 17.01.4) para HG556A versión C

Objetivo: Crear una imagen personalizada de de Openwrt (LEDE 17.01.04) para un router. Con ello conseguiremos dejar de manera permanente un router con una configuración determinada y los paquetes que nos interesen preinstalados.

Usaremos:

  • Linux Mint, Ubuntu o derivado.
  • Router Huawey Hg556A versión C

Gracias a este método evitaremos que el usuario borre todas las configuraciones al hacer un RESET del router.

En nuestro caso lo haremos para un router Huawey HG556A versión C, aunque iremos indicando como hacerlo para otros modelos.

También indicamos que todos los enlaces apuntan a la versión de fecha de hoy que es la 17.01.04 de Openwrt. Lo ideal es siempre descargarse la última versión estable.

Paso 1. Preparamos nuestro equipo.

Usaremos para Linux Mint para realizar todo el proceso. Debemos instalar los paquetes necesarios:

apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc wget unzip python

Paso 2. Descargamos los fuentes del Openwrt.

Como el router HG556A tiene arquitectura brcm63xx, descargamos  el fichero de LEDE image builder versión estable 17.01.4.

En caso de tener otra arquitectura deberemos bajarnos la que corresponda.  Primero averiguamos cual es la arquitectura, accedemos a http://downloads.lede-project.org/releases/17.01.4/targets/  y dentro del directorio bajamos el imagebuilder correspondiente.

A continuación descomprimimos el archivo.

OJO: Al hacerlo descomprimí el contenido en una carpeta llamada “LEDE IMAGEBUILDER”. Si creas una carpeta con espacios y descomprimes el archivo dentro, da un error.
Al descomprimirlo ya te crea él una carpeta pero ten en cuenta que si lo metes en una carpeta no debes dejar espacios en el medio.

Paso 3.  Informándonos sobre el firmware que vamos a generar.

Entramos con un terminal  en la carpeta donde hemos descomprimido el archivo y ejecutamos el siguiente comando para ver la ayuda:

make help

Esto nos mostrará la siguiente ayuda:

Available Commands:
    help:    This help text
    info:    Show a list of available target profiles
    clean:    Remove images and temporary build files
    image:    Build an image (see below for more information).
Building images:
    By default 'make image' will create an image with the default
    target profile and package set. You can use the following parameters
    to change that:
    make image PROFILE="<profilename>" # override the default target profile
    make image PACKAGES="<pkg1> [<pkg2> [<pkg3> ...]]" # include extra packages
    make image FILES="<path>" # include extra files from <path>
    make image BIN_DIR="<path>" # alternative output directory for the images
    make image EXTRA_IMAGE_NAME="<string>" # Add this to the output image filename (sanitized)

De aquí lo importante es lo siguiente:

Si queremos ver para qué routers me sirve este firmware hacemos:

make info

En ella podemos ver al principio los paquetes que incluirá siempre para todo dispositivo con este chipset (brcm63xx)

Current Target: "brcm63xx (generic)"
Default Packages: base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd swconfig kmod-gpio-button-hotplug dnsmasq iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd odhcp6c

Luego vemos una lista de routers para los que podremos crear el firmware personalizado junto con los paquetes extra que le añade por defecto:

A4001N:
 ADB P.DG A4001N
 Packages: kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport kmod-b43 wpad-mini
A4001N1:
 ADB P.DG A4001N1
 Packages: kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport kmod-b43 wpad-mini
RG100A:
 Alcatel RG100A
 Packages: kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport kmod-b43 wpad-mini
AR1004G:
...
HG556a-A:
 Huawei EchoLife HG556a rev A
 Packages: kmod-ath9k wpad-mini kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport
HG556a-B:
 Huawei EchoLife HG556a rev B
 Packages: kmod-ath9k wpad-mini kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport
HG556a-C:
 Huawei EchoLife HG556a rev C
 Packages: kmod-rt2800-pci wpad-mini kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport
...

Vemos en nuestro caso que para el HG556a-C le añade además los paquetes

kmod-rt2800-pci wpad-mini kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport

Paso 4. Generando el firmware añadiendo paquetes nuevos.

Una vez vista esta información podemos hacer lo siguiente:

Para crear un firmware para HG556a versión C con añadiendo luci y nano haremos lo siguiente:

make image PROFILE="HG556a-C" PACKAGES="nano luci"

si quisieramos hacerlo para un router ADB P.DG A4001N1 añadiendo paquetes tales como luci, nano, openssh-sftp-server y arp-scan haremos:

make image PROFILE="A4001N1" PACKAGES="luci nano openssh-sftp-server arp-scan"

El firmware generado lo encontrarás en el directorio bin/targets/brcm63xx/generic/

Paso 5. Generando el firmware añadiendo configuración personalizada.

Podemos añadir cualquier archivo nuevo o modificación de archivos existentes al firmware.

Sólo tenemos que crear una carpeta dentro del directorio donde hemos descomprimido el LEDE image builder.

En nuestro caso creamos la carpeta files

Vamos a poner un ejemplo:

  • Queremos que en el archivo raiz aparezca un archivo llamado LICENSE.INFO
  • Además en la carpeta /root que haya un ejecutable llamado ver_dispositivos.sh
  • También queremos tener una configuración personalizada de la red WIFI
  • Además que al pulsar un botón me ejecute el archivo /root/ver_dispositivos.sh

Dentro de la carpeta files meteremos los siguientes archivos y creamos los directorios necesarios quedando la estructura siguiente:

LICENSE.INFO
root/ver_dispositivos.sh
etc/config/wireless
etc/hotplug.d/button/buttons

En la siguiente imagen vemos como queda el directorio files con otro ejemplo:

En él podemos ver como añadimos configuraciones nuevas para todo el router, una configuración para nginx y varios archivos más. Cabe decir que en este ejemplo hay muchos archivos que se han modificado por lo que podemos ver un montón de carpetas. Dentro de esas carpetas están dichos archivos modificados.

A la hora de generar el firmware debemos de incluir una opción que sea: FILES=files/

Ejemplos:

make image PROFILE="HG556a-C" PACKAGES="nginx iptables-mod-ipopt nano wget libsqlite3 sqlite3-cli luci" FILES=files/

Para otros routers:

Para COMTREND ar-5387un

make image PROFILE="AR5387un" PACKAGES="nginx iptables-mod-ipopt nano wget libsqlite3 sqlite3-cli luci" FILES=files/

Para asl26555-16M

make image PROFILE="asl26555-16M" PACKAGES="nginx iptables-mod-ipopt nano wget libsqlite3 sqlite3-cli luci" FILES=files/

Para flashear este router es mejor subir el firmware generado a /tmp del router y usar el comando:

mtd -r write /tmp/lede-17.01.4-ramips-rt305x-asl26555-16M-squash fs-sysupgrade.bin firmware

Consejos importantes para trabajar más cómodo.

  • Descarga el firmware por defecto del router, instálalo, configúralo a tu gusto y apunta todos los paquetes que has instalado.
  • Si has cambiado la configuración debes saber que está guardada en /etc/config
  • No utilices configuraciones de la carpeta /etc/config de un router a otro modelo diferente. Cada modelo de router tiene diferentes parámetros de configuración. En algunas configuraciones coincide pero en otras no.
  • Para pasar los archivos de un router a tu ordenador o viceversa,  instala un servidor sftp en el router (opkg update; opkg install openssh-sftp-server). Luego accede mediante linux con sftp://<dirección ip del router>. Esto sirve para que al traértelos te mantenga los permisos del archivo o lo que es lo mismo si te traes un ejecutable por ejemplo en tu equipo seguirá siendo ejecutable. Si usas samba no te trae tal información.
  • Si pasas archivos desde tu equipo al router recuerda que también te pasará el propietario del archivo. Deberás a continuación decirle al router que el propietario de esos archivos es root.
  • Es aconsejable hacer un make clean para eliminar restos de la creación de un firmware anterior.
  • No te olvides que si has instalado un paquete de algún servicio, el cual requiere que una vez instalado le digas que arranque al encender el router, tienes que buscar dentro de /etc/rc.d/ el enlace simbólico que te ha generado para dicho servicio e incluirlo en los archivos modificados.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *