Skip to content

Instantly share code, notes, and snippets.

@a-a
Last active June 24, 2024 04:49
Show Gist options
  • Save a-a/f70ba370ffee33e3c1f97072784f3ff4 to your computer and use it in GitHub Desktop.
Save a-a/f70ba370ffee33e3c1f97072784f3ff4 to your computer and use it in GitHub Desktop.
Force Juniper SRX110 to accept VDSL PIC firmware from later (published) jfirmware releases
# Force Juniper SRX110H2 to accept VDSL PIC firmware from Juniper jfirmware 17 release (For SRX300 series?)
# it might work, it might not. do this at your own risk etc. i think it rolls back. haven't tried lol.
# Testing using latest 17.4 release specifically from https://support.juniper.net/support/downloads/?p=junos-srx#sw.
# At time of writing, "latest" was jfirmware-srxsme-17.4R3.16-signed.tgz - copy your shit to a fat32 usb
# Make usb mountpoint (if you haven't already)
root@% mkdir /var/tmp/usb
# Mount the USB
root@% mount_msdosfs /dev/da0s1 /var/tmp/usb
# CD to the usb
root@% cd /var/tmp/usb
# Make a new folder to extract our crap to, and cd into it
root@% mkdir inside
root@% cd inside
# Extract first level of archive so we can get at the next part
root@% tar -zxf - < ../jfirmware-srxsme-17.4R3.16-signed.tgz
# Extract second level of archive so we can get to the actual package file
root@% tar -zxf - < ./jfirmware-srxsme-17.4R3.16.tgz
# You just extracted an iso9660 file - mount it, this contains our files.
root@% /sbin/mount_iso --force /cf/var/tmp/usb/inside/packages/jfirmware-srxsme-17.4R3.16 /packages/mnt/jfirmware-srxsme-17.4R3.16 jfirmware-srxsme
# Symlink jfirmware-srxsme to the new version
root@% ln -s /packages/mnt/jfirmware-srxsme-17.4R3.16/ /packages/mnt/jfirmware-srxsme
# Pop into cli, check for new firmware
root@% cli
# Show if we have different current vs available versions
root> show system firmware
Part Type Tag Current Available Status
version version
FPC 1
PIC 0 VDSLBCM 10 2.16.0 2.20.0 OK <---- HERE!
Routing Engine 0 RE BIOS 0 2.5 2.8 OK
Routing Engine 0 RE BIOS Backup 1 2.5 2.8 OK
Routing Engine 0 RE FPGA 14 1.0.0 1.0.0 OK
root>
# If we do, lets request an upgrade
root> request system firmware upgrade pic fpc-slot 1
Part Type Tag Current Available Status
version version
FPC 1
PIC 0 VDSLBCM 10 2.16.0 2.20.0 OK
Perform indicated firmware upgrade ? [yes,no] (no) yes
Firmware upgrade initiated.
root>
# Hammer sh sys firm a few times until the output changes from ERASING to FLASHING to finally.... UPGRADED SUCCESSFULLY
root> show system firmware
Part Type Tag Current Available Status
version version
FPC 1
PIC 0 VDSLBCM 10 2.16.0 2.20.0 UPGRADED SUCCESSFULLY
Routing Engine 0 RE BIOS 0 2.5 2.8 OK
Routing Engine 0 RE BIOS Backup 1 2.5 2.8 OK
Routing Engine 0 RE FPGA 14 1.0.0 1.0.0 OK
root>
# Now restart FPC 1 and wait a while, you should have new firmware loaded
root> restart fpc 1
FPC 1 restarted
root>
# Now clean up (if you want to, im not your mom)
root> exit
root@% rm /packages/mnt/jfirmware-srxsme
root@% umount /cf/var/packages/mnt/jfirmware-srxsme-18.4R3.16
root@% umount /cf/var/tmp/usb
# Enjoy having vectoring (from at least 2.16.0) plus whatever 2.20.0 gives you, i couldn't be bothered to read the release notes to figure it out when there's no seperate notes for the firmwares
@ibook79
Copy link

ibook79 commented Nov 2, 2021

Great Work! :)

Thanks!

@AzurePii
Copy link

https://www.dropbox.com/s/bctkr4oj7lle279/jfirmware-srxsme-21.3R1.9-modified.tgz?dl=0

I'll leave this up for a limited time, however people should follow the below instructions to create the package themselves in the future.

1. Determine the version of JunOS that you have installed. This will determine what you set the min-release to.

2. Download the version of jfirmware that you want to patch from https://support.juniper.net/support/downloads/?p=junos-srx#sw

3. Within jfirmware-srxsme-xxxx-signed.tgz find the +INSTALL file.

4. Find the version_check() function and modify the min_release version to match or be below your JunOS version (eg. "local min_release=${1:-21.3}" becomes "local min_release=${-12.3}")

5. Within jfirmware-srxsme-xxxx-signed.tgz remove all hash files (eg. jfirmware-srxsme-xxxx.tgz.sha1, etc.). If these are not removed the package installer will attempt to compare the jfirmware against the hash, which will fail as we have modified the contents of the jfirmware

6. Within jfirmware-srxsme-xxxx-signed.tgz enter the jfirmware-srxsme-xxxx.tgz archive

7. Modify the min_release in jfirmware-srxsme-xxxx-signed.tgz/jfirmware-srxsme-xxxx.tgz/+INSTALL the same way as step 4.

8. Modify the min_release in jfirmware-srxsme-xxxx-signed.tgz/jfirmware-srxsme-xxxx.tgz/+REQUIRE the same way as step 4

9. Re-tar and compress as necessary

10. Install package onto SRX110 as per normal "request system software add jfirmware-srxsme-xxxx-modified.tgz"

11. Check that new firmware is now available "show system firmware"

12. Flash firmware as per normal "request system firmware upgrade pic fpc-slot 1"

Any chance you could post a new, active link?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment