Ahora que tenemos shell en nuestro router, vamos a instalar OpenWRT. Paso a paso.
Primero de todo, descargaremos:
- OpenWRT backfire 10.03 aqui
- Parche para incluir nuestro router en OpenWRT aqui
MODIFICACIONES:
Descomprimir los fuentes de OpenWRT. Despues aplicaremos nuestro parche:
# patch -p0 < livebox2_backfire.patch
COMPILACION DE OPENWRT:
En primer lugar, asegurarse que no tenemos en nuestro $PATH el toolchain que usamos para compilar el kernel. En otro caso, no compilara. Avisados estais.
Si preferis añadir mas paquetes a los pocos que yo inclui, haceis:
# make menuconfig
Y simplemente elegid los que querais.
Aparte de esto, para compilar simplemente es cuestion de hacer:
# make
Deberia compilar perfectamente (despues de hora y media o 2 horas, dependiendo de vuestra CPU y velocidad de conexion), pero yo os aconsejaria hacer esto:
# make V=99
De esta forma, la compilacion no sera silenciosa. Un monton de mensajes de compilacion, descarga, etc apareceran en vuestro terminal, pero en caso de error -esperemos que no- sera mas facil detectar donde.
Una vez la compilacion ha finalizado, encontrareis lo siguiente en el directorio bin/ de los fuentes del OpenWRT:
# ls -l total 21040 -rw-rw-r-- 1 acki acki 2359296 2011-11-18 18:06 livebox2-root.jffs2-128k -rw-rw-r-- 1 acki acki 2359296 2011-11-18 18:06 livebox2-root.jffs2-64k -rw-rw-r-- 1 acki acki 1441792 2011-11-18 18:06 livebox2-root.squashfs -rwxrwxr-x 1 acki acki 2012248 2011-11-18 18:06 livebox2-vmlinux.elf -rw-rw-r-- 1 acki acki 229 2011-11-18 18:06 md5sums -rw-rw-r-- 1 acki acki 13322032 2011-11-18 18:06 OpenWrt-ImageBuilder-livebox2-for-Linux-x86_64.tar.bz2 drwxrwxr-x 2 acki acki 4096 2011-11-18 18:06 packages #
Estos ficheros son: Dos imagenes jffs2 (alineadas a 64k y 128k) y una imagen squashfs; un kernel “fantasma” que podemos borrar con total tranquilidad, porque nosotros vamos a usar “el nuestro”, el ImageBuilder, que nos servira para crear imagenes sin tener que recompilar, y un fichero con los md5 de los anteriores. Tambien un directorio con todos los paquetes que hayais elegido.
INSTALANDO Y (DES)CONFIGURANDO OPENWRT:
Ahora vamos a instalar OpenWRT en nuestro router. Tecnicamente, deberia hacerse desde el u-boot, pero nuestros intentos fueron baldios. Asi que lo haremos de una forma mas heterodoxa, pero prefectamente funcional.
Encendamos el router y arranquemos nuestro shell. Veamos esto:
# cat /proc/mtd dev: size erasesize name mtd0: 000a0000 00020000 "boot" mtd1: 00200000 00020000 "kernel" mtd2: 00d60000 00020000 "jffs2" #
Esto que vemos son las particiones de la flash. Una para el boot, otra para el kernel y otra que dedicaremos para nuestra imagen, que como podemos ver se corresponde con mtd2.
Bien, copiemos el fichero livebox2-root.jffs2-128k a un lapiz USB (o a un disco, como prefirais). Como vereis, al conectarlo, el router mostrara mensajes reconociendo el dispositivo como sda, y con una particion (si es que teneis solo una), sda1. Creamos un punto de montaje y la montamos:
# mkdir /mnt # mount /dev/sda1 /mnt
Ahora, vamos a “volcar” el fichero sobre el dispositivo correspondiente, en nuestro caso el /dev/mtdblock2 (OJO, no confundirse o tendreis un hermoso brick):
# dd if=/mnt/livebox2-root.jffs2-128k of=/dev/mtdblock2
Facil, ¿Verdad?. Bien, vamos a comprobar que ha funcionado. Vamos a montar esta particion, de nuevo creando un punto de montaje antes:
# mkdir /jffs2 # mount -t jffs2 /dev/mtdblock2 /jffs2
Vereis que se produce un warning, no pasa nada, podeis ignorarlo. Id al directorio y ved los contenidos:
# ls /jffs2 bin etc lib overlay rom sbin tmp var dev init mnt proc root sys usr www #
Ahora lo que vamos a hacer es copiar el /dev del CRAMFS al Openwrt, es decir de SDRAM a FLASH. Tecnicamente, esto no deberia ser necesario dado que OpenWRT provee las 3 formas conocidas de /dev dinamico, pero yo no fui capaz de hacer funcionar ninguna. Si lo conseguis, postearlo aqui, por favor.
Se que podria usar cp, pero voy a usar el tar a la antigua usanza:
# tar cvf /tmp/devs.tar *
Ahora simplemente “des-tareamos” en /jffs2/dev
# cd /jffs2/dev # tar xvf /tmp/devs.tar
Bueno, a partir de aqui, si se es un experto en OpenWRT probablemente sabras hacer esto mucho mejor que yo, pero sino, asi es como yo lo hice. Por pasos:
1.- Borraremos los contenidos de /jffs2/etc/modules y /jffs2/lib/modules/2.6.15 (si hay alguno). Recordemos que hemos compilado el kernel por separado. Este paso no es estrictamente necesario para que arranque, pero os aconsejo que lo hagais.
2.- Renombrad /jffs2/lib/firewall/uci_firewall.sh. Esto evitara un monton de errores en consola. Ademas, si ni siquiera tenemos lan, para que necesitamos un firewall ?
3.- Editar el /jffs2/etc/preinit y cambiar pi_suppress_stderr y pi_init_suppress_stderr de ‘n’ a ‘y’. De nuevo, esto no es necesario para que arranque, pero mejor no suprimir mensajes de stderr por si hubiera algun problema.
4.- Ir a /jffs2/lib/preinit y modificar los scripts para evitar que /dev se monte dinamicamente… o simplemente sobreescribir con mis modificaciones. Si podeis hacerlo mejor, posteadlo aqui.
Y nada mas. Todo lo que resta es compilar nuestro kernel de nuevo, comentando o eliminando primero la linea del .config donde hacemos referencia a la ubicacion de nuestro CPIO: CONFIG_INITRAMFS_SOURCE. Pues eso, compilamos e instalamos de nuevo el kernel (ver el hilo correspondiente si no recordamos).
(OPCIONAL) CAMBIAR EL PARTICIONADO DE LA FLASH:
Podeis cambiar el particionado de la flash si os apetece, o encontrais una buena razon para ello. Solamente es cuestion de ir a los fuentes del kernel y editar el fichero drivers/mtd/maps/livebox2.c. Particularmente, esta parte:
static struct mtd_partition fusiv_mtd_partitions[] = {
{
.name = "boot",
.offset = 0x00000000,
.size = 0x000a0000,
.mask_flags = MTD_WRITEABLE, /*read only*/
},{
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = 0x00200000,
.mask_flags = MTD_WRITEABLE,
},
#if defined CONFIG_SAGEM_LBV2ULT || defined CONFIG_SAGEM_BOXER
,{
.name = "jffs2",
.offset = MTDPART_OFS_APPEND,
.size = 0x00d60000,
.mask_flags = 0,
},
#endif
Pero solamente si estais muy seguros de lo que haceis. No es necesario decir que hay que tener MUCHO CUIDADO
COMENTARIO FINAL:
Antes de embarcarme en este proyecto, tenia CERO PATATERO conocimiento de OpenWRT (y no es que tenga mucho ahora tampoco), y la documentacion es…hmmm… dejemoslo pasar 
En cualquier caso, sed comprensivos.
EPILOGO:
Para automatizar el arranque completamente, vamos al prompt delu-boot y escribimos:
setenv bootcmd 0x002a0000 setenv bootdelay 5 saveenv
Logicamente, el delay lo elegis vosotros.