Cisco 9800: Wrong Boot Variable After Upgrade to 17.12.6a

I ran into an issue on a Cisco 9800 WLC after upgrading to 17.12.6a with the standard install workflow.

The installation itself completed successfully, but the controller did not boot cleanly on the first reload.

What happened

I started the upgrade with this command:

WLC# install add file flash:C9800-40-universalk9_wlc.17.12.06a.SPA.bin activate commit prompt-level none

The install process completed without obvious errors:

install_add_activate_commit: START Fri May  8 10:39:14 MEST 2026
install_add_activate_commit: Adding PACKAGE

--- Starting initial file syncing ---
Info: Finished copying flash:C9800-40-universalk9_wlc.17.12.06a.SPA.bin to the selected chassis
Finished initial file syncing

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

Image added. Version: 17.12.06a.0.25
install_add_activate_commit: Activating PACKAGE
Following packages shall be activated:
/bootflash/C9800-rpboot.17.12.06a.SPA.pkg
/bootflash/C9800-mono-universalk9_wlc.17.12.06a.SPA.pkg
--- Starting Activate ---
Performing Activate on all members
  [1] Activate package(s) on chassis 1
  [1] Finished Activate on chassis 1
Checking status of Activate on [1]
Activate: Passed on [1]
Finished Activate

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

Install will reload the system now!
SUCCESS: install_add_activate_commit  Fri May  8 10:43:54 MEST 2026

After the reload, the controller tried to boot from harddisk: and failed:

Initializing Hardware ...

System Bootstrap, Version 16.10(2r), RELEASE SOFTWARE

Directory C9800-40-universalk9_wlc.17.12.06a.SPA.bin not found
Unable to locate C9800-40-universalk9_wlc.17.12.06a.SPA.bin directory
Unable to load C9800-40-universalk9_wlc.17.12.06a.SPA.bin
boot: error executing "boot harddisk:C9800-40-universalk9_wlc.17.12.06a.SPA.bin"
autoboot: boot failed, restarting...

Key finding

The boot variable was wrong after the upgrade.

It still referenced harddisk: instead of the correct install-mode boot target.

This is what I saw:

WLC(config)# do show boot
BOOT variable = harddisk:C9800-40-universalk9_wlc.17.12.06a.SPA.bin,12;bootflash:/C9800-40-universalk9_wlc.16.10.01.SPA.bin,12;
CONFIG_FILE variable does not exist
BOOTLDR variable does not exist
Configuration register is 0x102

For an install-mode Cisco 9800, I expected this boot target instead:

boot system bootflash:packages.conf

What fixed it

I removed the incorrect boot statements, saved the configuration, and then set the correct boot target to packages.conf.

WLC# conf t
WLC(config)# no boot system
WLC(config)# end
WLC# write memory

WLC# conf t
WLC(config)# boot system bootflash:packages.conf
WLC(config)# end
WLC# write memory

After that, the running configuration looked correct:

WLC# show run | include ^boot
boot-start-marker
boot system bootflash:packages.conf
boot-end-marker

Important detail

write memory mattered.

The most important lesson for me was that changing the boot statements alone was not enough for verification.

Until I saved the configuration with write memory, show boot still showed the previous state and was misleading.

My validation flow was this:

  1. Remove or correct the boot statements.
  2. Save with write memory.
  3. Check again with show boot.
  4. Check again with show run | include ^boot.

Without the save, it looked as if the change had not taken effect.

Successful reboot

After setting bootflash:packages.conf and saving the configuration, the controller booted normally:

Initializing Hardware ...

System Bootstrap, Version 16.10(2r), RELEASE SOFTWARE

File size is 0x000015b6
Located packages.conf
Image size 5558 inode num 1455330, bks cnt 2 blk size 8*512

File size is 0x025d6b8a
Located C9800-rpboot.17.12.06a.SPA.pkg
Boot image size = 39676810 (0x25d6b8a) bytes

RSA Signed RELEASE Image Signature Verification Successful.
Image validated

The final software version confirmed the successful boot:

WLC# show version
Cisco IOS XE Software, Version 17.12.06a
Cisco IOS Software [Dublin], C9800 Software (C9800_IOSXE-K9), Version 17.12.6a, RELEASE SOFTWARE (fc2)

Takeaway

If a Cisco 9800 fails to boot after an upgrade even though install add file ... activate commit completed successfully, I would check the boot variable first.

In my case, the root cause was simple:

  1. The boot variable pointed to the wrong location.
  2. write memory was required before the boot-related show commands reflected the corrected state.

If the controller is running in install mode, bootflash:packages.conf is the value I would expect to see.

Samuel Heinrich
Senior Network Engineer at Selution AG (Switzerland)
Arbeitet in Raum Basel (Switzerland) als Senior Network Engineer mit über 15 Jahren Erfahrung im Bereich Netzwerk

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.