Junos is in my opinion an awesome OS for your network. I enjoy the CLI, where commands are alike across all of Juniper’s products. Also, the many features and the fact that it’s not cisco.
BUT it also has its drawbacks. Honestly, I have seen some weird bugs. And keeping track of all the PRs from Juniper is a full-time job. And last but not least, the software upgrades are kind of a pain. especially on Junos devices older than 18.x.
EX3400 – format/install
For this case, I had a new EX3400, but with older firmware, 15.1X53-D58.3. I needed to upgrade to the latest SR in the newest train but from the CLI of the device only jumping 3 firmware versions are supported.
15.1> 18.1 > 18.4 > 19.3 > 20.2 > 21.1
But you can also do a format/install where you interrupt the boot process and then load a new firmware image on the device from a TFTP server. This is all done outside of Junos. This way you can jump to whatever version you want.
Jumping many version might make your config invalid, so beaware.
Juniper has a LOT of kb articles for this process and they all vary. So here is the process in my own writing
Process of format install
First, we need to get the right image from the juniper support side. It needs to the install image and the extension is .tgz
- Download the image into your TFTP server.
root@tftp:/srv/tftp# wget -O junos-install-media-net-ex-arm-32-21.4R1.12.tgz 'https://cdn.juniper.net/software/junos/21.4R1.12/junos-install-media-net-ex-arm-32-21.4R1.12.tgz?SM_USER=jv......5ce43fbdad2' Resolving cdn.juniper.net (cdn.juniper.net)... 18.104.22.168 Connecting to cdn.juniper.net (cdn.juniper.net)|22.214.171.124|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 393745989 (376M) [application/octet-stream] Saving to: ‘junos-install-media-net-ex-arm-32-21.4R1.12.tgz’ junos-install-media-net-ex-arm-32-21.4R1.12.tgz 100%[==================================================================>] 375.50M 3.48MB/s in 2m 4s 2022-01-26 20:47:46 (3.03 MB/s) - ‘junos-install-media-net-ex-arm-32-21.4R1.12.tgz’ saved [393745989/393745989] root@tftp:/srv/tftp# ls junos-install-media-net-ex-arm-32-21.4R1.12.tgz
- Now let’s reboot the switch and interrupt the “first” boot loader. just keep hitting ctrl+c after you powered rebooted when you see the “=>” you are in the right place. Here we set the IP address on the me0 interface and boot into the next boot loader.
Board: EX3400-24T Base MAC: C00380FAAD2E arm_clk=1000MHz, axi_clk=500MHz, apb_clk=125MHz, arm_periph_clk=500MHz Net: Registering eth Broadcom BCM IPROC Ethernet driver 0.1 Using GMAC0 (0x18022000) et0: ethHw_chipAttach: Chip ID: 0xdc14; phyaddr: 0x1 et0: gmac_serdes_init read sdctl(0xf4141c) et0: gmac_serdes_init() serdes_status0: 0xf100ff00; serdes_status1: 0xf00 et0: gmac_serdes_init() PLL ready brought up exit serdes_reset_core pbyaddr(0x1) id2(0xf) bcmiproc_eth-0 Last Reset Reason: 0 Hit ^C to stop autoboot: 0 =>setenv ipaddr 10.1.100.253 =>setenv gatewayip 10.1.100.1 =>setenv netmask 255.255.255.0 =>setenv serverip 10.1.101.130 =>save =>boot Saving Environment to SPI Flash... SF: Detected MX25L6405D with page size 256 Bytes, erase size 64 KiB, total 8 MiB, mapped at 0001faa0 Erasing SPI flash...Writing to SPI flash...done Erasing SPI flash...Writing to SPI flash...done SF: Detected MX25L6405D with page size 256 Bytes, erase size 64 KiB, total 8 MiB device 0 offset 0x3c0000, size 0x10000 SF: 65536 bytes @ 0x3c0000 Read: OK
- Wait for a few seconds for the next bootloader to appear and press ctrl+c again. Now you will see a menu, this menu you choose 5 and 5 and you should see “loader>”
Hit ^C to stop autoboot: 0 Options Menu 1. Recover [J]unos volume 2. Recovery mode - [C]LI 3. Check [F]ile system 4. Enable [V]erbose boot 5. [B]oot prompt 6. [M]ain menu Choice: Type 'menu' to go back to the menu Type 'boot-junos' to boot into Junos Type 'reboot' to reboot 5 5
- We now set use the install format with the TFTP location of the image we downloaded in the first step.
Type '?' for a list of commands, 'help' for more detailed help. loader> install --format tftp://10.1.101.130/junos-install-media-net-ex-arm-32-21.4R1.12.tgz /kernel text=0x105b888 data=0x640fc+0x1fbf04 syms=[0x4+0x914a0+0x4+0x9b821] /ex3400.dtb size=0x1f76 /crypto.ko text=0x419e0 data=0xe58+0x2a0 syms=[0x4+0x4740+0x4+0x2ba5] /iflib.ko text=0x11f10 data=0x910+0x58 syms=[0x4+0x2b10+0x4+0x2194] /miibus.ko text=0x19f38 data=0x10c4+0x78 syms=[0x4+0x51f0+0x4+0x3491] /if_gmac.ko text=0xbc3c data=0x688+0xc syms=[0x4+0x1cc0+0x4+0x15ad] /contents.iso size=0x279b000 Using DTB from loaded file '/ex3400.dtb'. Kernel entry at 0xc1000180... Kernel args: (null) ---<<BOOT>>--- GDB: no debug ports present K cache Release APs WARNING: WITNESS option enabled, expect reduced performance. mwill now attempt to reach the remote host. <====== LOADS OF OUTPUT TO CONSOLE ======> <====== LOADS OF OUTPUT TO CONSOLE ======> Downloading /junos-install-media-net-ex-arm-32-21.4R1.12.tgz from 10.1.101.130 ... rmed on 1024 samples passed.t-up health tests perfo 300.6MB 03:52random: unblocking device. 393.7MB 05:04 Installing Junos OS release ...
After 15-20 minutes the switch will have the install finished and ready for you to log into and start loading your config.
FreeBSD/arm (Amnesiac) (ttyu0) login:
This is a very helpful process and might come in handy when having new switches with old firmware that need to be applied. Skipping the smaller version jumps is a time saver.
This format install process can also be done with a USB key. This process is also quite simple but requires you to have physical access to the switch.
In my case, I have a console over ssh and can manage the switch out-of-band so TFTP is the easy way.