Este tutorial está basado en el siguiente artículo de la wiki:
http://wiki.openwrt.org/doc/howto/extroot#openwrt.barrier.breaker.trunkCuando tenemos un router con limitada memoria flash, el número de aplicaciones/paquetes que podemos instalar es muy pequeño
Con esto lo que conseguiremos es usar parte del espacio de almacenamiento de un disco duro o memoria USB para ejecutar OpenWrt e instalar (casi) lo que queramos.
Para llevarlo a cabo, he usado un router Comtrend VR-3025un (con 8 megas de flash) y un pendrive con 3 particiones: swap, datos y sistema (estas últimas formateadas en ext2). La compilación es la r37737 (Barrier Breaker). Ojo con esto porque dependiendo de la rama que uséis, el proceso será distinto. Si usáis versiones anteriores (Backfire o Attitude Adjustment) mirad la wiki:
http://wiki.openwrt.org/doc/howto/extrootAquí tenéis el proceso explicado para Backfire en un Linksys WRT160NL:
https://foro.seguridadwireless.net/openwrt/instalacion-de-openwrt-y-mas-en-wrt160nl/Además, nuestro firmware debe incluir los paquetes necesitarios para trabajar discos USB y particiones en ext2-3-4 (kmod-fs-ext4, kmod-usb-storage, etc.)
Manos a la obra
Lo primero será actualizar la lista de paquetes e instalar block-mount:
opkg update
opkg install block-mount
Después de hacerlo es recomendable hacer un reinicio
reboot
Ahora ejecutamos el comando
block info para ver las particiones de nuestro dispositivo:
block info
/dev/sda1: UUID="66694f24-d129-481c-ae1b-3c8ed8fba501" LABEL="Volumen nuevo" VERSION="2" TYPE="swap"
/dev/sda2: UUID="9a043a55-c369-4d75-bf7a-db03c956ec0a" LABEL="Volumen nuevo" VERSION="1.0" TYPE="ext2"
/dev/sda3: UUID="3323f15d-da1a-4f3b-ad40-6d2fb49f42ad" VERSION="1.0" TYPE="ext2"
Aquí se ven las 3 particiones de mi pendrive (swap + ext2 + ext2)
Ahora montamos la partición que queramos usar para que OpenWrt se ejecute desde ella. En mi caso es la última
/sda3mount -t ext2 /dev/sda3 /mnt
Y procedemos a copiar OpenWrt (actualmente en la flash) a la partición
mkdir /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt -xvf -
sync ; umount /mnt
umount /tmp/cproot
Es momento de crear el fichero fstab
block detect > /etc/config/fstab
Y ahora toca editarlo
vi /etc/config/fstab
config 'global'
option anon_swap '0'
option anon_mount '0'
option auto_swap '1'
option auto_mount '1'
option delay_root '5'
option check_fs '0'
config 'swap'
option uuid '66694f24-d129-481c-ae1b-3c8ed8fba501'
option enabled '1'
config 'mount'
option target '/mnt/sda2'
option uuid '9a043a55-c369-4d75-bf7a-db03c956ec0a'
option enabled '1'
config 'mount'
option target '/overlay'
option uuid '3323f15d-da1a-4f3b-ad40-6d2fb49f42ad'
option enabled '1'
Ponemos los 3 puntos de montaje en enabled y nos aseguramos que la última partición (la que tiene OpenWrt) se monta como
/overlayPara terminar, toca reiniciar el router y ver si lo hemos hecho todo correctamente
reboot
Con df -h veremos si el espacio que asignamos en la partición del pendrive es reconocido como rootfs
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
rootfs 52.3M 10.2M 38.3M 21% /
/dev/root 2.8M 2.8M 0 100% /rom
tmpfs 30.1M 516.0K 29.6M 2% /tmp
/dev/sda3 52.3M 10.2M 38.3M 21% /overlay
overlayfs:/overlay 52.3M 10.2M 38.3M 21% /
tmpfs 512.0K 0 512.0K 0% /dev
También se puede comprobar gráficamente desde LuCi (Sistema/Software)
Antes:
Después:
Finalmente (aunque esto ya no tiene que ver con extroot), podemos hacer que se monten automáticamente la particiones de swap y datos accediendo desde LuCi a Sistema/Puntos de Montaje. Ojo no tocar ni activar la partición que estéis usando para cargar OpenWrt.
Para poder llevar a cabo el proceso, será necesario haber incluido el soporte de ficheros ext2/3/4 (kmod-fs-ext4) en la compilación del fimware que vayamos a usar.