How does the last 2-3 lines of your /config/config.boot file look like?
There should be something like this which is used by the migrate-script to know which sections should be migrated (updated) to newer syntax and which has already been processed:
// Warning: Do not remove the following line.
// vyos-config-version: "bgp@4:broadcast-relay@1:cluster@1:config-management@1:conntrack@3:conntrack-sync@2:container@1:dhcp-relay@2:dhcp-server@6:dhcpv6-server@1:dns-dynamic@1:dns-forwarding@4:firewall@10:flow-accounting@1:https@4:ids@1:interfaces@29:ipoe-server@1:ipsec@12:isis@3:l2tp@4:lldp@1:mdns@1:monitoring@1:nat@5:nat66@1:ntp@2:openconnect@2:ospf@2:policy@5:pppoe-server@6:pptp@2:qos@2:quagga@11:rip@1:rpki@1:salt@1:snmp@3:ssh@2:sstp@4:system@26:vrf@3:vrrp@4:vyos-accel-ppp@2:wanloadbalance@3:webproxy@2"
// Release version: 1.4-rolling-202307250317
There is this script that create this “magical” string for you:
/usr/libexec/vyos/system-versions-foot.py
It uses information based on:
/boot/rw/usr/share/vyos/component-version.json
and its purpose seems to be to keep track which section of the config has which current version and by that if the migration-script should touch that section during boot or not. That is if loading and finding out that current ntp section is version 9 and the one in the config is version 8 then migration will be runned on the ntp-section so it becomes version 9 syntax.
If this string is completely missing then migration-script will be runned for all sections within the config.
So in your case I think best would be if you created a script so that once you uploaded your config.boot you also append the output of /usr/libexec/vyos/system-versions-foot.py to it at the bottom before rebooting.
I would boot back to the older version, remove the “current” (latest whatever you had installed) and install it again through “system upgrade” and then reboot.
The thing is that each installed version have its own directory in the persistence path.
So when you upgrade files will be copied from current storage to the one you are installing.
Then when the new image boots (its set to default to the latest installed, you can overrule that in the boot menu) then migration scripts will be runned for each section who differs (that “magic” last line informs the migration scripts which version each section is configured with).
There were a change of the cp command this summer (forgot exact date but I think it was late july or early august) thats supposed to fix those random errors during copy.
Another method would be to find out the persistence path of the old installation and very with “tail” that the end of that file is correct. Then attempt to copy that config.boot to the current /config/config.boot (overwrite your current file). Verify again that the content in /config/config.boot is now correct (using tail and/or diff).
When attempting to reboot it will complain that you didnt save the config (just ignore that) and the box will reboot and the migration scripts should now run properly on your configuration.
Once booted make sure to go into confi-mode and commit and save current configuration. I would reboot again just to verify that everything went ok.