On Fri, Dec 6, 2019 at 12:41 PM wes <p...@the-wes.com> wrote:

> On Fri, Dec 6, 2019 at 11:11 AM Louis Kowolowski <lou...@cryptomonkeys.org
> >
> wrote:
>
> > If you’re getting “file too large”, its probably the client complaining,
> > not the server.
>
>
> One would reasonably think that, but no. This was output in the server log.
> Literally "file to large" (grammar error included).
>
> When I’ve had that in the past, its because legacy firmware made
> > assumptions about file size and there was some intermediate firmware that
> > fixed it, allowing you to move forward.
>
>
> Note that we're not even uploading a firmware file at this stage; we are
> merely booting a temporary OS which will then be used to update the
> router's actual firmware. This is the way the edgerouter people want us to
> do it.
>

You are on the right track.

What is going on here is that the ERX device uses NAND flash. NAND flash
tends to be much larger than the alternative NOR flash but is also prone to
bad blocks, and you need a layer of abstraction to deal with the bad blocks
and wear leveling so other layers don't need to deal with it, and that
layer in this instance is something called UBI (unsorted block image). Note
that confusingly, UBIFS is something different than UBI, but is usually
used on top of the UBI block layer. NOR flash generally doesn't have this
bad block problem, and the flash process for NOR flash is much simpler.
With NAND flash, particularly in this recovery scenario, more tools are
required than typically are present in the bootloader. For example, you
might need to remove, resize and/or recreate the partition-like volumes
that are allocated from the UBI block layer. Booting an initramfs image
over the network (from an off-device TFTP server) provides the needed tools
without modifying the underlying flash.

When I was investigating this problem for Rich, I found that the expedient
recovery process involved booting an OpenWrt initramfs image, and (with the
tools that come with that) manipulate the contents of the flash to correct
whatever is wrong. OpenWrt and the Ubiquiti stock firmware organize things
differently. On this device, OpenWrt would create a UBI volume for a
read-only squashfs file system, and another UBI volume with whatever space
is left over for a writable filesystem, which is overlaid (with overlayfs)
on top of the squashfs to give the appearance of a fully writable
filesystem with the ability to recover to a known good state. In the case
of Ubiquiti's stock firmware, they create a large UBIFS filesystem and put
read-only images and integrity hashes as regular files on that. The system
can check that they are okay and load them. In addition, they put
configuration information in directory trees directly on the UBIFS as well.
This provides some scaffolding for having two versions of their firmware on
the system at the same time (new vs old). What I remember (memory that has
become wobbly in the week or so since I was looking at this) is that
probably the easiest way to recover Rich's bricked device is to do the
initramfs boot of OpenWrt and then just delete the configuration trees in
Ubiquiti's UBIFS, and then reboot. The Ubiquiti firmware is smart enough to
reconstruct the configuration info it needs from nothing, but it's confused
by the configuration that's there now. Anyway, that was my educated guess.

Because of Rich's difficulty in getting a simple ethernet configuration to
work, I didn't want to try to talk him through this fairly complex and
fiddly process over email.

Note, the ERX device loads initramfs images as a client from a remote TFTP
server. To initramfs boot, you put the image on the server and use a serial
console to tell the ERX to fetch the initramfs to RAM. You use the serial
console to interrupt the normal boot process and select the initramfs boot,
and then tell the ERX what its ip address is, what the server ip address
is, and what the filename is relative to the TFTP server space.


>
>
> > You may also be able to use a different protocol to copy the file. Many
> > modern devices will allow http(s)/scp/ftp/tftp.
> >
> >
> I did not find any mention of the edgerouter boot ROM supporting this. If
> you can find evidence of it, please share.
>
> -wes
> _______________________________________________
> PLUG mailing list
> PLUG@pdxlinux.org
> http://lists.pdxlinux.org/mailman/listinfo/plug
>
_______________________________________________
PLUG mailing list
PLUG@pdxlinux.org
http://lists.pdxlinux.org/mailman/listinfo/plug

Reply via email to