Device deployments from Golden ISOs with Cisco's gisobuild
So, Cisco have an awesome python script on their github here, and at the time of writing the repo has only 5 stars (yours truly included). That's pretty underwhelming, considering how useful this tool can be for many Network Engineers. So here I will run through installing and running the Golden ISO builder, and how to deploy in production...
What is a Golden ISO, anyway?
A "Golden ISO" is a .iso image file that contains all the required config, patches and firmware required to be a one-time deployment tool. I am testing and running this on 64-bit ASR9K series devices.
There are prerequisites that you will need to have in order, however. I will have to make the following presumptions before I continue:
- You have the Mini / Full .iso for the firmware that you will be deploying
- You have your device configuration already prepared in a local file
- You have the SMU tarballs ready for all the software you wish to include in the Golden ISO
Now the full configuration file is arguably the harder part. On this site in the past I have lightly touched on aspects of programmable configuration rendering here, here and here.
While I do have Ansible and Python methods at my disposal to render full device configurations, this is all very organisation-specific stuff, containing sensitive information. As such, I'll choose to just skip the whole topic in this post. Write your ASR9K config in notepad if you must 🤣
Building a Golden ISO
First up, we will clone the repo and make the script executable:
git clone https://github.com/ios-xr/gisobuild chmod +x gisobuild/gisobuild.py
Now we can grab our desired SMU tarballs and extract into a local directory:
tar -xvf smu/asr9k-x64-6.6.2.CSCvq98968.tar tar -xvf smu/asr9k-x64-6.6.2.CSCvr51303.tar
Lastly, make sure we have our .iso and configuration files to hand (can be in any directory, of course):
Swell, let's build a Golden ISO! Here are the flags you need to pass into the script, with file paths for you to fill in:
sudo python \ path/to/gisobuild.py \ -i path/to/example.iso \ -c path/to/device.config \ -r path/to/rmp.repository
Once you have all of your paths populated, kick off the Golden ISO build by running the script:
Assuming you have not been met with any error messages, after a minute or so your Golden ISO will be ready:
We have successfully created a Golden ISO file, from which our ASR9K boot up with the all of the desired software and configuration ready. Now we will look at how to boot a Golden ISO:
So to start with, you want to get that Golden ISO onto a USB. Pop that USB into the ASR9K and make sure it can see your .iso file:
RP/0/RSP0/CPU0:ios#dir disk2: Directory of disk2: asr9k-golden.iso RP/0/RSP0/CPU0:ios#
Next, you will want to copy the .iso to the Internal Hard Drive:
RP/0/RSP0/CPU0:ios#mkdir harddisk:/giso Created dir harddisk:/giso RP/0/RSP1/CPU0:ios#copy disk2:asr9k-golden.iso harddisk:/giso/
Now we can kick off the installation:
RP/0/RSP0/CPU0:ios#install replace harddisk:/giso/asr9k-golden.iso sync ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Install operation 1 started by root:
When you see this confirmation, you're good to go:
The router will now reload using the newly installed software and configuration.
When the router has finished reloading, log into the router using the authentication methods as specificed in the Golden ISO configuration file and verify that all desired packages have been installed successfully, and that all configuration is in place:
RP/0/RSP0/CPU0:device#show install active summary Active Packages: 12 asr9k-xr-6.6.2 version=6.6.2 [Boot image] etc,etc,etc... RP/0/RSP0/CPU0:device#show running-configuration etc,etc,etc...
Voila, we have now completed the deployment and configuration of a full ASR9K router with a single Golden ISO. Success!
So this is a cool new thing we are trying out lately, and it doesn't appear to have too much documentation online, so I thought I'd pop a post up. If this was a useful or insightful read, feel free to comment below!
Thanks for reading.