In this post I will be showing you the upgrade/downgrade process for the Cisco Catalyst 9300. In this example I will be using a 4 switch stack which currently has the same firmware running on each of the switches and is already stacked.

 

Getting Software on the Switch

In my experience I have found that the easiest way to do this is to give the switch an IP address on the network and pull the firmware from an HTTP server. This will be much faster than TFTP and more reliable than a flash drive as I have found the commands in this article fail when attempting to transfer the software from a flash drive.

Tools like MobaXterm or SecureCRT have integrated HTTP servers, if you dont have access to either of those pieces of software you can use a python script to fire up an HTTP server, you can find that script here.

Once you have your HTTP server running and have your IOS image in the directory that the server is serving issue the following command on the switch.

$ SWITCH#install add file http://<SERVER_IP_ADDRESS>/path/to/firmware.bin

SERVER_IP_ADDRESS: IP address of your http server.

/path/to/firmware.bin: this is the path to the IOSXE firmware with the root being the directory that is being served by the server.

Once you issue that command you will see output similar to below.

install_add: START Wed Jun  5 20:12:03 UTC 2019
Downloading file http://192.168.1.10/cat9k_iosxe.16.06.05.SPA.bin
Finished downloading file http://192.168.1.10/cat9k_iosxe.16.06.05.SPA.bin to flash:cat9k_iosxe.16.06.05.SPA.bin
install_add: Adding PACKAGE

--- Starting initial file syncing ---
[1]: Copying flash:cat9k_iosxe.16.06.05.SPA.bin from switch 1 to switch 2 3 4
[2 3 4]: Finished copying to switch 2 switch 3 switch 4
Info: Finished copying flash:cat9k_iosxe.16.06.05.SPA.bin to the selected switch(es)
Finished initial file syncing

--- Starting Add ---
Performing Add on all members
  [1] Add package(s) on switch 1
  [1] Finished Add on switch 1
  [2] Add package(s) on switch 2
  [2] Finished Add on switch 2
  [3] Add package(s) on switch 3
  [3] Finished Add on switch 3
  [4] Add package(s) on switch 4
  [4] Finished Add on switch 4
Checking status of Add on [1 2 3 4]
Add: Passed on [1 2 3 4]
Finished Add

SUCCESS: install_add  Wed Jun  5 20:17:04 UTC 2019
SWITCH#

 

As long as your last line shows "SUCCESS" the software has been successfully copied to the device and distributed to each of the switches in the stack.

 

Activate New Software and Reboot

At this point we are ready to activate the software and reboot the switch which will reboot into the software we just loaded onto the switch. To be clear that issuing this command will cause a reboot so be careful issuing this on a production device.

To do this it is as simple as issuing the command below.

SWITCH#install activate

Once you issue that command it will first check if you have modified unsaved configuration and if so prompt you to save which looks like below

install_activate: START Wed Jun  5 20:23:07 UTC 2019

System configuration has been modified.
Press Yes(y) to save the configuration and proceed.
Press No(n) for proceeding without saving the configuration.
Press Quit(q) to exit, you may save configuration and re-enter the command. [y/n/q]

In my case I pressed 'y' to save the config and then it proceeds to activate the new software.

Modified configuration has been saved
install_activate: Activating PACKAGE
Following packages shall be activated:
/flash/cat9k-wlc.16.06.05.SPA.pkg
/flash/cat9k-webui.16.06.05.SPA.pkg
/flash/cat9k-srdriver.16.06.05.SPA.pkg
/flash/cat9k-sipspa.16.06.05.SPA.pkg
/flash/cat9k-sipbase.16.06.05.SPA.pkg
/flash/cat9k-rpboot.16.06.05.SPA.pkg
/flash/cat9k-rpbase.16.06.05.SPA.pkg
/flash/cat9k-guestshell.16.06.05.SPA.pkg
/flash/cat9k-espbase.16.06.05.SPA.pkg
/flash/cat9k-cc_srdriver.16.06.05.SPA.pkg

This operation requires a reload of the system. Do you want to proceed? [y/n]y
--- Starting Activate ---
Performing Activate on all members
  [1] Activate package(s) on switch 1
    --- Starting list of software package changes ---
    Old files list:
      Removed cat9k-cc_srdriver.16.08.01a.SPA.pkg
      Removed cat9k-espbase.16.08.01a.SPA.pkg
      Removed cat9k-guestshell.16.08.01a.SPA.pkg
      Removed cat9k-rpbase.16.08.01a.SPA.pkg
      Removed cat9k-rpboot.16.08.01a.SPA.pkg
      Removed cat9k-sipbase.16.08.01a.SPA.pkg
      Removed cat9k-sipspa.16.08.01a.SPA.pkg
      Removed cat9k-srdriver.16.08.01a.SPA.pkg
      Removed cat9k-webui.16.08.01a.SPA.pkg
      Removed cat9k-wlc.16.08.01a.SPA.pkg
    New files list:
      Added cat9k-cc_srdriver.16.06.05.SPA.pkg
      Added cat9k-espbase.16.06.05.SPA.pkg
      Added cat9k-guestshell.16.06.05.SPA.pkg
      Added cat9k-rpbase.16.06.05.SPA.pkg
      Added cat9k-rpboot.16.06.05.SPA.pkg
      Added cat9k-sipbase.16.06.05.SPA.pkg
      Added cat9k-sipspa.16.06.05.SPA.pkg
      Added cat9k-srdriver.16.06.05.SPA.pkg
      Added cat9k-webui.16.06.05.SPA.pkg
      Added cat9k-wlc.16.06.05.SPA.pkg
    Finished list of software package changes
  [1] Finished Activate on switch 1
  [2] Activate package(s) on switch 2
    --- Starting list of software package changes ---
    Old files list:
      Removed cat9k-cc_srdriver.16.08.01a.SPA.pkg
      Removed cat9k-espbase.16.08.01a.SPA.pkg
      Removed cat9k-guestshell.16.08.01a.SPA.pkg
      Removed cat9k-rpbase.16.08.01a.SPA.pkg
      Removed cat9k-rpboot.16.08.01a.SPA.pkg
      Removed cat9k-sipbase.16.08.01a.SPA.pkg
      Removed cat9k-sipspa.16.08.01a.SPA.pkg
      Removed cat9k-srdriver.16.08.01a.SPA.pkg
      Removed cat9k-webui.16.08.01a.SPA.pkg
      Removed cat9k-wlc.16.08.01a.SPA.pkg
    New files list:
      Added cat9k-cc_srdriver.16.06.05.SPA.pkg
      Added cat9k-espbase.16.06.05.SPA.pkg
      Added cat9k-guestshell.16.06.05.SPA.pkg
      Added cat9k-rpbase.16.06.05.SPA.pkg
      Added cat9k-rpboot.16.06.05.SPA.pkg
      Added cat9k-sipbase.16.06.05.SPA.pkg
      Added cat9k-sipspa.16.06.05.SPA.pkg
      Added cat9k-srdriver.16.06.05.SPA.pkg
      Added cat9k-webui.16.06.05.SPA.pkg
      Added cat9k-wlc.16.06.05.SPA.pkg
    Finished list of software package changes
  [2] Finished Activate on switch 2
  [3] Activate package(s) on switch 3
    --- Starting list of software package changes ---
    Old files list:
      Removed cat9k-cc_srdriver.16.08.01a.SPA.pkg
      Removed cat9k-espbase.16.08.01a.SPA.pkg
      Removed cat9k-guestshell.16.08.01a.SPA.pkg
      Removed cat9k-rpbase.16.08.01a.SPA.pkg
      Removed cat9k-rpboot.16.08.01a.SPA.pkg
      Removed cat9k-sipbase.16.08.01a.SPA.pkg
      Removed cat9k-sipspa.16.08.01a.SPA.pkg
      Removed cat9k-srdriver.16.08.01a.SPA.pkg
      Removed cat9k-webui.16.08.01a.SPA.pkg
      Removed cat9k-wlc.16.08.01a.SPA.pkg
    New files list:
      Added cat9k-cc_srdriver.16.06.05.SPA.pkg
      Added cat9k-espbase.16.06.05.SPA.pkg
      Added cat9k-guestshell.16.06.05.SPA.pkg
      Added cat9k-rpbase.16.06.05.SPA.pkg
      Added cat9k-rpboot.16.06.05.SPA.pkg
      Added cat9k-sipbase.16.06.05.SPA.pkg
      Added cat9k-sipspa.16.06.05.SPA.pkg
      Added cat9k-srdriver.16.06.05.SPA.pkg
      Added cat9k-webui.16.06.05.SPA.pkg
      Added cat9k-wlc.16.06.05.SPA.pkg
    Finished list of software package changes
  [3] Finished Activate on switch 3
  [4] Activate package(s) on switch 4
    --- Starting list of software package changes ---
    Old files list:
      Removed cat9k-cc_srdriver.16.08.01a.SPA.pkg
      Removed cat9k-espbase.16.08.01a.SPA.pkg
      Removed cat9k-guestshell.16.08.01a.SPA.pkg
      Removed cat9k-rpbase.16.08.01a.SPA.pkg
      Removed cat9k-rpboot.16.08.01a.SPA.pkg
      Removed cat9k-sipbase.16.08.01a.SPA.pkg
      Removed cat9k-sipspa.16.08.01a.SPA.pkg
      Removed cat9k-srdriver.16.08.01a.SPA.pkg
      Removed cat9k-webui.16.08.01a.SPA.pkg
      Removed cat9k-wlc.16.08.01a.SPA.pkg
    New files list:
      Added cat9k-cc_srdriver.16.06.05.SPA.pkg
      Added cat9k-espbase.16.06.05.SPA.pkg
      Added cat9k-guestshell.16.06.05.SPA.pkg
      Added cat9k-rpbase.16.06.05.SPA.pkg
      Added cat9k-rpboot.16.06.05.SPA.pkg
      Added cat9k-sipbase.16.06.05.SPA.pkg
      Added cat9k-sipspa.16.06.05.SPA.pkg
      Added cat9k-srdriver.16.06.05.SPA.pkg
      Added cat9k-webui.16.06.05.SPA.pkg
      Added cat9k-wlc.16.06.05.SPA.pkg
    Finished list of software package changes
  [4] Finished Activate on switch 4
Checking status of Activate on [1 2 3 4]
Activate: Passed on [1 2 3 4]
Finished Activate

[1 2 3 4]: Performing MCU_Upgrade_Service
  SUCCESS: MCU_Upgrade_Service finished
Install will reload the system now!
SUCCESS: install_activate  Wed Jun  5 20:25:26 UTC 2019
SWITCH#

 

Looking through the command output we can see it deactivates the existing config and activates the new config that we put on. Once that has completed for all switches in the stack it automatically reboots.

 

Once the switch boots back up you can login and issue the "show version" command to validate that the switch is in fact on the expected firmware version.

 

Making Firmware Persistent Across Reboots

At this point if we were to reboot the switch it will revert back to the previous firmware version. This is because we have not commited the new software which by my best guess is a safety feature in the event that a software upgrade goes sideways once it reboots it will roll back to the previously working version.

To make the software persistent issue the following command.

SWITCH#install commit

Once you issue that command you will get output similar to below.

install_commit: START Wed Jun  5 20:29:44 UTC 2019
install_commit: Committing PACKAGE

--- Starting Commit ---
Performing Commit on all members
  [1] Commit package(s) on switch 1
  [1] Finished Commit on switch 1
  [2] Commit package(s) on switch 2
  [2] Finished Commit on switch 2
  [3] Commit package(s) on switch 3
  [3] Finished Commit on switch 3
  [4] Commit package(s) on switch 4
  [4] Finished Commit on switch 4
Checking status of Commit on [1 2 3 4]
Commit: Passed on [1 2 3 4]
Finished Commit

SUCCESS: install_commit  Wed Jun  5 20:30:01 UTC 2019
SWITCH#

Now we are safe to reboot the switch if we need to and our software will not revert back to the previous version.

 

Housekeeping

Now we have both our active firmware that we just put on the switch and the old firmware. It may be a good idea to leave that old software on the switch for a few days just in case you need to revert back for some reason, but once you are confident that you will not need to roll back it is a good idea to remove it from the file system. This process is just as easy as each step of the process earlier.

To delete the old unused files for the previous firmware issue the following command.

SWITCH#install remove inactive

You will then see output similar to below.

install_remove: START Wed Jun  5 20:32:30 UTC 2019
Cleaning up unnecessary package files
No path specified, will use booted path flash:packages.conf
Cleaning flash:
  Scanning boot directory for packages ... done.
  Preparing packages list to delete ...
    cat9k-cc_srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-espbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-guestshell.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpboot.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipspa.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-webui.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-wlc.16.06.05.SPA.pkg
      File is in use, will not delete.
    packages.conf
      File is in use, will not delete.
  done.

Cleaning up unnecessary package files
No path specified, will use booted path flash:packages.conf
Cleaning flash:
  Scanning boot directory for packages ... done.
  Preparing packages list to delete ...
hexdump: NVRAM: No such file or directory
hexdump: all input file arguments failed
    cat9k-cc_srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-espbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-guestshell.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpboot.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipspa.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-webui.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-wlc.16.06.05.SPA.pkg
      File is in use, will not delete.
    packages.conf
      File is in use, will not delete.
  done.

Cleaning up unnecessary package files
No path specified, will use booted path flash:packages.conf
Cleaning flash:
  Scanning boot directory for packages ... done.
  Preparing packages list to delete ...
hexdump: NVRAM: No such file or directory
hexdump: all input file arguments failed
    cat9k-cc_srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-espbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-guestshell.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpboot.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipspa.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-webui.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-wlc.16.06.05.SPA.pkg
      File is in use, will not delete.
    packages.conf
      File is in use, will not delete.
  done.

Cleaning up unnecessary package files
No path specified, will use booted path flash:packages.conf
Cleaning flash:
  Scanning boot directory for packages ... done.
  Preparing packages list to delete ...
    cat9k-cc_srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-espbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-guestshell.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-rpboot.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipbase.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-sipspa.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-srdriver.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-webui.16.06.05.SPA.pkg
      File is in use, will not delete.
    cat9k-wlc.16.06.05.SPA.pkg
      File is in use, will not delete.
    packages.conf
      File is in use, will not delete.
  done.

The following files will be deleted:
[switch 1]:
/flash/cat9k-cc_srdriver.16.08.01a.SPA.pkg
/flash/cat9k-espbase.16.08.01a.SPA.pkg
/flash/cat9k-guestshell.16.08.01a.SPA.pkg
/flash/cat9k-rpbase.16.08.01a.SPA.pkg
/flash/cat9k-rpboot.16.08.01a.SPA.pkg
/flash/cat9k-sipbase.16.08.01a.SPA.pkg
/flash/cat9k-sipspa.16.08.01a.SPA.pkg
/flash/cat9k-srdriver.16.08.01a.SPA.pkg
/flash/cat9k-webui.16.08.01a.SPA.pkg
/flash/cat9k-wlc.16.08.01a.SPA.pkg
/flash/cat9k_iosxe.16.06.05.SPA.conf
/flash/packages.conf.00-
[switch 2]:
/flash/cat9k-cc_srdriver.16.08.01a.SPA.pkg
/flash/cat9k-espbase.16.08.01a.SPA.pkg
/flash/cat9k-guestshell.16.08.01a.SPA.pkg
/flash/cat9k-rpbase.16.08.01a.SPA.pkg
/flash/cat9k-rpboot.16.08.01a.SPA.pkg
/flash/cat9k-sipbase.16.08.01a.SPA.pkg
/flash/cat9k-sipspa.16.08.01a.SPA.pkg
/flash/cat9k-srdriver.16.08.01a.SPA.pkg
/flash/cat9k-webui.16.08.01a.SPA.pkg
/flash/cat9k-wlc.16.08.01a.SPA.pkg
/flash/cat9k_iosxe.16.06.05.SPA.conf
/flash/packages.conf.00-
[switch 3]:
/flash/cat9k-cc_srdriver.16.08.01a.SPA.pkg
/flash/cat9k-espbase.16.08.01a.SPA.pkg
/flash/cat9k-guestshell.16.08.01a.SPA.pkg
/flash/cat9k-rpbase.16.08.01a.SPA.pkg
/flash/cat9k-rpboot.16.08.01a.SPA.pkg
/flash/cat9k-sipbase.16.08.01a.SPA.pkg
/flash/cat9k-sipspa.16.08.01a.SPA.pkg
/flash/cat9k-srdriver.16.08.01a.SPA.pkg
/flash/cat9k-webui.16.08.01a.SPA.pkg
/flash/cat9k-wlc.16.08.01a.SPA.pkg
/flash/cat9k_iosxe.16.06.05.SPA.conf
/flash/packages.conf.00-
[switch 4]:
/flash/cat9k-cc_srdriver.16.08.01a.SPA.pkg
/flash/cat9k-espbase.16.08.01a.SPA.pkg
/flash/cat9k-guestshell.16.08.01a.SPA.pkg
/flash/cat9k-rpbase.16.08.01a.SPA.pkg
/flash/cat9k-rpboot.16.08.01a.SPA.pkg
/flash/cat9k-sipbase.16.08.01a.SPA.pkg
/flash/cat9k-sipspa.16.08.01a.SPA.pkg
/flash/cat9k-srdriver.16.08.01a.SPA.pkg
/flash/cat9k-webui.16.08.01a.SPA.pkg
/flash/cat9k-wlc.16.08.01a.SPA.pkg
/flash/cat9k_iosxe.16.06.05.SPA.conf
/flash/packages.conf.00-

Then you will be asked if you want to remove the above files.

Do you want to remove the above files? [y/n]

Review the files that were listed and validate that none of them correspond to your active firmware version, which in my case they didnt so i hit the "y" key. Once you do that you will get output similar to below showing he files being deleted.

[switch 1]:
Deleting file flash:cat9k-cc_srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-espbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-guestshell.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpboot.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipspa.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-webui.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-wlc.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k_iosxe.16.06.05.SPA.conf ... done.
Deleting file flash:packages.conf.00- ... done.
SUCCESS: Files deleted.
[switch 2]:
Deleting file flash:cat9k-cc_srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-espbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-guestshell.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpboot.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipspa.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-webui.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-wlc.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k_iosxe.16.06.05.SPA.conf ... done.
Deleting file flash:packages.conf.00- ... done.
SUCCESS: Files deleted.
[switch 3]:
Deleting file flash:cat9k-cc_srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-espbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-guestshell.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpboot.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipspa.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-webui.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-wlc.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k_iosxe.16.06.05.SPA.conf ... done.
Deleting file flash:packages.conf.00- ... done.
SUCCESS: Files deleted.
[switch 4]:
Deleting file flash:cat9k-cc_srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-espbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-guestshell.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-rpboot.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipbase.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-sipspa.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-srdriver.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-webui.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k-wlc.16.08.01a.SPA.pkg ... done.
Deleting file flash:cat9k_iosxe.16.06.05.SPA.conf ... done.
Deleting file flash:packages.conf.00- ... done.
SUCCESS: Files deleted.
--- Starting Post_Remove_Cleanup ---
Performing Post_Remove_Cleanup on all members
  [1] Post_Remove_Cleanup package(s) on switch 1
  [1] Finished Post_Remove_Cleanup on switch 1
  [2] Post_Remove_Cleanup package(s) on switch 2
  [2] Finished Post_Remove_Cleanup on switch 2
  [3] Post_Remove_Cleanup package(s) on switch 3
  [3] Finished Post_Remove_Cleanup on switch 3
  [4] Post_Remove_Cleanup package(s) on switch 4
  [4] Finished Post_Remove_Cleanup on switch 4
Checking status of Post_Remove_Cleanup on [1 2 3 4]
Post_Remove_Cleanup: Passed on [1 2 3 4]
Finished Post_Remove_Cleanup

SUCCESS: install_remove  Wed Jun  5 20:33:28 UTC 2019
SWITCH#

Now our switch is in its optimal state and our work is done.

 

Thats it, just 4 commands and 1 reboot to upload and activate the new firmware, making the new firmware persist through reboots, and removing the old firmware. If you are used to the older ways of copying up a bin file to the switch and rebooting this is definately different but is very easy and reliable. I hope this was able to help you update your Cisco 9300.