?>/script>'; } ?> [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot) Widgets Magazine

Autor Tema: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)  (Leído 103617 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Este tutorial está basado en el siguiente artículo de la wiki: http://wiki.openwrt.org/doc/howto/extroot#openwrt.barrier.breaker.trunk

Cuando 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/extroot

Aquí 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  >:D

Lo primero será actualizar la lista de paquetes e instalar block-mount:

Código: [Seleccionar]
opkg update
opkg install block-mount

Después de hacerlo es recomendable hacer un reinicio

Código: [Seleccionar]
reboot
Ahora ejecutamos el comando block info para ver las particiones de nuestro dispositivo:

Código: [Seleccionar]
block info
Citar
/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 /sda3

Código: [Seleccionar]
mount -t ext2 /dev/sda3 /mnt
Y procedemos a copiar OpenWrt (actualmente en la flash) a la partición

Código: [Seleccionar]
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

Código: [Seleccionar]
block detect > /etc/config/fstab
Y ahora toca editarlo

Código: [Seleccionar]
vi /etc/config/fstab
Citar
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 /overlay

Para terminar, toca reiniciar el router y ver si lo hemos hecho todo correctamente

Código: [Seleccionar]
reboot
Con df -h veremos si el espacio que asignamos en la partición del pendrive es reconocido como rootfs

Código: [Seleccionar]
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.
« Última modificación: 26-02-2014, 12:40 (Miércoles) por jar229 »

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #1 en: 03-10-2013, 09:10 (Jueves) »
348 lecturas tienen el hilo y nadie ha dicho ni 'mu' .... imagino que estará todo muy bien explicado  ;D

wOOx

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #2 en: 03-10-2013, 11:38 (Jueves) »
348 lecturas tienen el hilo y nadie ha dicho ni 'mu' .... imagino que estará todo muy bien explicado  ;D

Eso deberías de tenerlo asumido, ya que todos tus tutoriales son fácilmente entendibles.

Un Saludo.

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #3 en: 03-10-2013, 12:38 (Jueves) »

Eso deberías de tenerlo asumido, ya que todos tus tutoriales son fácilmente entendibles.

Un Saludo.

 ;D ;D

Altair64

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #4 en: 27-12-2013, 23:12 (Viernes) »
Voy a rescatar el tutorial  ;D 

Me veo en la necesidad de tener mas espacio en el tema de instalacion de paquetes. He estado mirando el tutorial y me entraron unas dudas  >:D 

Segun veo en estos 3 comandos:
Código: [Seleccionar]
mkdir /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt -xvf -
Se estaria copiando TODO el directorio raíz a /tmp (también en la propia flash)??

Y luego en el fstab:
Código: [Seleccionar]
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'

/mnt/sda2 lo estarias usando como particion de datos, no?
Y el montaje en /overlay... es asi de sencillo? si se monta esa particion en /overlay automaticamente se toman sus datos como la raiz del sistema? (no por nada, es que se me hace extraño  ;D 

S2!

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #5 en: 28-12-2013, 01:21 (Sábado) »
Así de sencillo, sí.

Si tienes dudas, en la wiki tienes más info.

Enviado desde mi CUBE U30GT usando Tapatalk

Altair64

  • Visitante
Re: Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #6 en: 28-12-2013, 11:43 (Sábado) »
Así de sencillo, sí.

Si tienes dudas, en la wiki tienes más info.

Enviado desde mi CUBE U30GT usando Tapatalk

Buah pues si! que buena! ya lo tengo listo ^^

Linkearé este tutorial a uno que estoy haciendo de WRT  >:D 

S2!

Altair64

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #7 en: 28-12-2013, 12:27 (Sábado) »
una pequeña duda: si acceso por SFTP al router, el directorio "actualizado" (el del extroot) sería el raíz o el que está en la carpeta Overlay en root? supongo que el ultimo, pero por asegurarme si sabes  >:D 

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #8 en: 28-12-2013, 12:33 (Sábado) »
una pequeña duda: si acceso por SFTP al router, el directorio "actualizado" (el del extroot) sería el raíz o el que está en la carpeta Overlay en root? supongo que el ultimo, pero por asegurarme si sabes  >:D 

Una vez en funcionamiento extroot, el sistema completo es montado en el usb.

Altair64

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #9 en: 28-12-2013, 15:09 (Sábado) »
Ok, una ultima pregunta: cuando se copia el sistema a /tmp, se está copiando a la flash del router? digo porque podria caber la posibilidad de que el router tenga poco espacio libre y no se pueda hacer esa operación?

s2!

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #10 en: 28-12-2013, 19:45 (Sábado) »
Ok, una ultima pregunta: cuando se copia el sistema a /tmp, se está copiando a la flash del router? digo porque podria caber la posibilidad de que el router tenga poco espacio libre y no se pueda hacer esa operación?

s2!

De ser así, te avisaría del problema con algún tipo de mensaje de error  ;D

anatulfo

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #11 en: 30-01-2014, 17:51 (Jueves) »
348 lecturas tienen el hilo y nadie ha dicho ni 'mu' .... imagino que estará todo muy bien explicado  ;D

Perfectamente explicado. Buen trabajo.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #12 en: 24-02-2014, 11:16 (Lunes) »
¿Aguien está teniendo problemas para hacer extroot con las últimas versiones del trunk?
Estoy probando con la rama Barrier Breaker 13.12 https://foro.seguridadwireless.net/openwrt/(repositorio)-barrier-breaker-13-12/ con soporte para AR-5387un, VR-3025u y no puedo hacer ni extroot completo ni overlay.
También estoy probando la rama trunk r39584 del repositorio oficial para un WD N750 y tampoco puedo hacerlo. ¿Alguien ha conseguido hacerlo?  ???

Pteridium

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #13 en: 24-02-2014, 15:13 (Lunes) »
¿Podrías explicar un poco más cuál es el problema que estás teniendo?
Hace bastantes meses tuve un problema parecido con una caja USB-sata que "tardaba" demasiado en montar la partición extroot, aunque también podría ser un problema en procd o algún otro de los "nuevos" programas de init de OpenWRT.
http://wiki.openwrt.org/doc/techref/procd

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #14 en: 24-02-2014, 17:09 (Lunes) »
Los síntomas que estoy teniendo es que no monta la partición en el momento del arranque aunque luego sí la pueda montar a mano después de arrancada.

Todo lo hago a través del router con los paquetes pertinentes puestos:

Código: [Seleccionar]
mkfs.ext4 -O ^has_journal /dev/sda1
mkdir /tmp/tmproot
mount --bind / /tmp/tmproot/
mount -t ext4 /dev/sda1 /mnt/
tar -C /tmp/tmproot/ -cvf - . | tar -C /mnt/ -xf -
sync
block detect > /etc/config/fstab
vi > /etc/config/fstab
Código: [Seleccionar]
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 'mount'
        option  target  '/'
        option  uuid    '53e7436f-406b-473d-a828-ac349bb034e9'
        option  enabled '1'
Código: [Seleccionar]
reboot
A la hora de arrancar esto es lo que obtengo en la mayoría de los casos:
Código: [Seleccionar]
extroot: is not ready yet, retrying in 60 seconds
[    9.636000] scsi 0:0:0:0: Direct-Access     TOSHIBA  TransMemory      1.00 PQ
: 0 ANSI: 4
[    9.652000] sd 0:0:0:0: [sda] 15155200 512-byte logical blocks: (7.75 GB/7.22
 GiB)
[    9.660000] sd 0:0:0:0: [sda] Write Protect is off
[    9.664000] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doe
sn't support DPO or FUA
[    9.684000]  sda: sda1
[    9.688000] sd 0:0:0:0: [sda] Attached SCSI removable disk
mounting /dev/sda1 (ext4) as /tmp/extroot/mnt failed (-1) - Unknown error -1

He conseguido hacer que block monte la partición haciendo un export PREINIT=1; block extroot, pero evidentemente no la monta (como extroot, aunque sí lo monta) porque no estamos en el preinit, y durante el preinit la partición es como si no existiera... A veces no la encuentra a la primera y pone extroot: is not ready yet, retrying in 60 seconds, y otras veces aunque parece que la encuentra siempre falla al montarla : mounting /dev/sda1 (ext4) as /tmp/extroot/mnt failed (-1) - Unknown error -1

Las líneas anteriores las consigo por consola serie, no salen ni en dmesg ni en logread.
En logread obtengo esto cuando se supone que se debiera estar montando el extroot:
Código: [Seleccionar]
Sat Jan  4 06:06:07 2014 user.emerg syslog: this file has been obseleted. please call "/sbin/block mount" directly
Sat Jan  4 06:06:08 2014 user.emerg syslog: /dev/mtdblock3 is already mounted
Sat Jan  4 06:06:08 2014 user.emerg syslog: uinteger - 8 = true
He leído en algún sitio que debiera haber un fichero con un crc en el directorio /etc para hacer correctamente el extroot, pero no lo tengo ni en el router ni el el USB. ¿Estoy pasando algo por alto que no debiera?

He probado a formatear con ext2 y ext4 con y sin journal, con un pincho usb de 8GB y con un lector de tarjetas con una tarjeta microSD de 8GB. He probado tanto el extroot como el overlay y los dos fallan de la misma manera. También he probado a hacer un cp -a en vez del tar stdout/in y nada. Los errores que antes he puesto los he visto también en muchos otros sitios de internet pero no he hallado la forma de solucionarlo. He aumentado el tiempo de delay hasta los 60 segundos (como se ve en el log) y tampoco he sido capaz de hacer extroot. Una cosa que veo rara y que muchas veces aparece después del fallo del montaje es que detecta un dispositivo sg0 debido a que tengo cargado el kmod-scsi-generic, pero tampoco he conseguido nada quitándolo.

¿Alguna pista de qué pudiera estar pasando? Porque mi inutilidad en estos menesteres está quedando descubierta... ^-^

P.D.: también he probado en el fstab a direccionar el disco con option device '/dev/sda1' en vez de direccionar por uuid, pero tampoco ha funcionado...
« Última modificación: 24-02-2014, 17:14 (Lunes) por Tki2000 »

Pteridium

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #15 en: 24-02-2014, 19:37 (Lunes) »
¿Alguna pista de qué pudiera estar pasando? Porque mi inutilidad en estos menesteres está quedando descubierta...  ^-^

P.D.: también he probado en el fstab a direccionar el disco con option device '/dev/sda1' en vez de direccionar por uuid, pero tampoco ha funcionado...
Inutilidad para nada: todos nos hemos dado de morros con alguna cosa, y más tratándose de openwrt.
Además, con todos los cambios que han hecho en el proceso de inicio fijo que algunas veces ni los desarrolladores se aclaran.  ;D
Código: [Seleccionar]
mounting /dev/sda1 (ext4) as /tmp/extroot/mnt failed (-1) - Unknown error -1
Este mensaje sí que mosquea un poco...
Supongo que también has probado a añadir
Código: [Seleccionar]
config mount
        option fstype        ext4
Revisando los tickets indican que se arregló con uno de los cambios de versión de ubox: https://dev.openwrt.org/ticket/13763#comment:19
Según este comentario quizá lo que pase es que ubox, procd o ambos sean lerdos: https://dev.openwrt.org/ticket/13763#comment:21

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #16 en: 24-02-2014, 19:49 (Lunes) »
Este mensaje sí que mosquea un poco...
Supongo que también has probado a añadir
Código: [Seleccionar]
config mount
        option fstype        ext4
Revisando los tickets indican que se arregló con uno de los cambios de versión de ubox: https://dev.openwrt.org/ticket/13763#comment:19
Según este comentario quizá lo que pase es que ubox, procd o ambos sean lerdos: https://dev.openwrt.org/ticket/13763#comment:21

Sí claro. He probado con ext2 y ext4. El ext4 con y sin journal. también probé a poner option is_rootfs '1' aunque sé que está más que "obsoleteado". Por los post que me dices ya he pasado hace algunos días y no me consiguieron aclarar nada. Ya comprobé que la versión de ubox es superior a la que dicen. La gente dice que el extroot de hace unos meses funcionaba perfectamente hasta que dejó de hacerlo, pero no sé si funciona ahora mismo o no y me estoy dando de cuernos contra la pared...  :-\

La verdad es que "Unknown error -1" no aclara mucho, ¿verdad?  :P

¿Alguien tiene un trunk de la r39000 para arriba con extroot funcionando?

(Gracias Pteridium)

Pteridium

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #17 en: 24-02-2014, 20:02 (Lunes) »
La verdad es que hay algo de suerte también ayuda.  ^-^
Con este fstab me funcionó en un Comtrend AR-5381u
Código: [Seleccionar]
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 'mount'
        option  target '/overlay'
        option  device  '/dev/sda3'
        option  enabled '1'
        option  fstype   'ext4'
        option is_rootfs '1'
O ubox es lerdo completo y hay que dárselo todo masticado o tengo una suerte descomunal (y por supuesto no me la merezco). ;D

Edición: Usé el repositorio de Noltari https://github.com/openwrt-es/barrier-breaker-openwrt/tree/barrier-breaker_14.02
BARRIER BREAKER (Barrier Breaker, r39533)
También probé Pivot root pero ahí la suerte me abandonó.  :'(
« Última modificación: 24-02-2014, 20:23 (Lunes) por Pteridium »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #18 en: 24-02-2014, 20:41 (Lunes) »
Gracias Pteridium.
Voy a probar ese fstab en mi ar-5381un a ver si me pita en la versión que tengo.

Edito: ¡¡¡Que si quieres arroz Catalina!!!
No funciona. He probado hasta a formatear desde Ubuntu en vez de hacer todo el proceso con fdisk y mkfs.ext4 con el router, pero nada de nada. O es algún módulo que tengo o dejo de tener instalado o no funciona en la versión que tengo.
Voy a probar con la versión 14.02 que me comentas, pero eso ya va a tardar un poco mientras que la bajo y la configuro.

Gracias.
« Última modificación: 24-02-2014, 21:07 (Lunes) por Tki2000 »

Pteridium

  • Visitante
Re: [Tutorial] Ejecutando OpenWrt desde una memoria o disco USB (extroot)
« Respuesta #19 en: 25-02-2014, 11:09 (Martes) »
Acabo de leer tu post y se me ha quedado cara de tonto.  >:D
Según el repositorio Barrier Breaker de openwrt-es los últimos cambios que se hicieron en los archivos de inicio son los siguientes:
https://github.com/openwrt-es/barrier-breaker-openwrt/commit/c91fa494a1073c6b50dff4947e18b7dd6bf52b44
Se corresponden con esta versión de ubox con fecha 22-1-2014 y que no ha cambiado desde entonces: http://nbd.name/gitweb.cgi?p=luci2/ubox.git;a=commit;h=71ea854364833c5dcb0800e092b45fed2c45910e
Para verlo de un modo más general: http://nbd.name/gitweb.cgi?p=luci2/ubox.git;a=shortlog
¿No podría ser que te falte algún módulo o driver? En un rato adjunto el config que usé.