Adventures installing OpenWRT
I recently got my MikroTik RB2011U, and I wanted to install OpenWRT on it.
The MikroTik RouterBOARD has a “Netinstall” mode, in which it connects
eth1 and receives a kernel to boot from using TFTP1. I ended up
with this small script, based on something from the OpenWRT
#!/bin/sh # Replace `enp2s0f1` with your ethernet interface # Serve TFTP from $TFTP_DIR/$TFTP_FILE TFTP_DIR=~/tmp/openwrt TFTP_FILE=stable.elf sudo ifconfig enp2s0f1 192.168.1.10 up sudo dnsmasq -i enp2s0f1 --dhcp-range=192.168.1.100,192.168.1.200 \ --dhcp-boot=$TFTP_FILE --enable-tftp --tftp-root=$TFTP_DIR \ --enable-tftp -d -u $USER -p0 -K --log-dhcp --bootp-dynamic
Once the router attempted to connect to the DHCP server with the
OpenWrt, I killed the TFTP server.
This worked - the router was now running OpenWRT from RAM.
Then, I disconnected my laptop from
eth1 and plugged it into
The OpenWRT initramfs is configured to act as a DHCP server on
At this point, I
sshed into the router:
$ ssh root@OpenWrt
(In the future, commands starting with
$ are on the host computer, and
commands starting with
# are on the router.)
I now had a root shell on the router! So far so good.
scped the OpenWRT sysupgrade2 onto the router:
$ scp ~/tmp/openwrt/stable.bin root@OpenWrt:/tmp/sysupgrade.bin
and proceeded to
sysupgrade the router:
# sysupgrade /tmp/sysupgrade.bin Image metadata not found Cannot save config while running from ramdisk. Commencing upgrade. Closing all shell sessions.
At this point, the router closed the SSH connection and entered a boot loop.
I tried repeating the previous steps, replacing stable (18.06.4) OpenWRT with the snapshot. (The RB2011U v2 is listed as only supported by OpenWRT snapshot.)
In vain, I tried pinging the router as it boot looped. It never responded.
This meant that it was crashing and burning before networking was initialized. (This also meant that OpenWRT failsafe mode wouldn’t help.)
So, I tried to read the kernel logs from flash memory:
# mount /dev/mtdblock6 /mnt mount: mounting /dev/mtdblock6 on /mnt/ failed: Invalid argument
Maybe I need to specify the filesystem type? JFFS2 seems likely:
# mount -t jffs2 /dev/mtdblock6 /mnt ## (hangs for a *really* long time) mount: mounting /dev/mtdblock6 on /mnt/ failed: Invalid argument
That last case was interesting, so I pulled up another SSH connection and:
# dmesg | tail -1 [ 703.468505] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0244003c: 0xa94c instead [ 855.211369] jffs2: Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes [ 855.220100] jffs2: empty_blocks 0, bad_blocks 3, c->nr_blocks 992
It appears that there’s no JFFS2 filesystem on /dev/mtdblock6. That makes sense, given:
# cat /proc/mtd | grep mtd6 mtd0: 0000c000 00001000 "routerboot" mtd1: 00001000 00001000 "hard_config" mtd2: 00001000 00001000 "bios" mtd3: 00001000 00001000 "soft_config" mtd4: 00040000 00020000 "booter" mtd5: 003c0000 00020000 "kernel" mtd6: 07c00000 00020000 "ubi"
It would appear that
mtd6 has UBIFS on it, but:
# mount -t ubifs /dev/mtdblock6 /mnt mount: mounting /dev/mtdblock6 on /mnt/ failed: Invalid argument
At this point, I decided to dump
/dev/mtd6 to my laptop, and do some
# dd if=/dev/mtd6 | ssh firstname.lastname@example.org dd of=/tmp/mtd6 ## blah blah blah fingerprints blah blah blah email@example.com's password: 253952+0 records in 253952+0 records out 253944+10 records in 253952+0 records out 130023424 bytes (130 MB, 124 MiB) copied, 313.463 s, 415 kB/s
Wait! UBI is
# mount -t ubi /dev/mtdblock6 /mnt mount: mounting /dev/mtdblock6 on /mnt/ failed: No such device
# ls -l /dev/mtdblock6 brw------- 1 root root 31, 6 Jan 1 1970 /dev/mtdblock6
By this point, I’ve installed
ubi_reader on my laptop and I go back
there to do some diagnostics:
$ ubireader_list_files mtd6 UBI Fatal: Less than 2 layout blocks found. $ less mtd6 ## UBI#^A^@^@^@...^E^@^@^B... ## ... ## <FF><FF><FF><FF><FF>...
Interesting. It appeared that OpenWRT did not successfully flash, but it failed consistently. (By this time, I had re-flashed OpenWRT quite a few times.)
At this point, it was 5:00 in the morning, so I decided to go to sleep.
Update: I returned that router and bought another one. Same problem. I decided to give up.