apertis-update-manager-ota-rollback manual
medium
- Image Types:
- minimal-armhf
- Image Deployment:
- OSTree
- Type:
- functional
Description
Test the automatic rollback and blacklist mechanism of apertis-update-manager with network updates.
Resources
- The DUT u-boot environment must be clean: in u-boot, run: `env default -a` followed by `saveenv`
- A PC must be connected to DUT serial port
- The DUT must be connected to network
Execution Steps
- Check the initial deployment
- Prepare the copy of commit and deploy to allow the upgrade to the same version
- Command below shows you an initial commit ID, for instance
- Get the Collection ID and ref
- Create the commit with changed timestamp to allow upgrade with recent update file
- Deploy the prepared commit
- Wait until the system is booted again and check the deployment
- The booted commit (started with '*') must have ID which we prepare and the initial commit ID should be marked as '(rollback)'
- Remove the initial deployment
- Reboot the system
- Check the current deployment
- Remove blacklist file if it exists
- Start the user interface agent with mode preventing automatic system reboot after update
- Enable network updates with CLI tool
- Check that the user interface agent reports the pending update
- After the update, the device does *not* reboot automatically
- Check if there is pending deployment and reboot the DUT
- In `U-Boot` console check the status of upgrade
- Restart the device by pressing the restart button before the boot finishes.
- Restart the device a second time by pressing the restart button before the boot finishes.
- Restart the device a third time by pressing the restart button before the boot finishes.
- U-Boot should be able to detect the rollback mode and boot the system in rollback mode
- Wait for system boot
- Check the update has been rolled back and that the initial deployment is still the active deployment
- Check if the file with blacklisted commit exists
- Start the user interface agent
- Enable network updates with CLI tool
- Check that the user interface agent reports the system is up to update
- Check the journal log should mention that the update ID has been blacklisted
$ sudo ostree admin status
$ export BOOTID=$(sudo ostree admin status | sed -n -e 's/^\* apertis \([0-9a-f]*\)\.[0-9]$/\1/p'); echo $BOOTID
$ export CID=$(sudo ostree refs -c | head -n 1 | tr -d '(),' | cut -f 1 -d ' '); echo COLLECTION_ID=$CID
$ export REF=$(sudo ostree refs -c | head -n 1 | tr -d '(),' | cut -f 2 -d ' '); echo REF=$REF
$ export NEWID=$(sudo ostree commit --orphan --tree=ref=$BOOTID --add-metadata-string=ostree.collection-binding=$CID --bind-ref=$REF --timestamp="1 year ago"); echo "New commit: $NEWID"
$ sudo ostree admin upgrade --allow-downgrade --deploy-only --override-commit=$NEWID --reboot
$ sudo ostree admin status
$ sudo ostree admin undeploy 1
$ sudo ostree admin status
$ sudo rm -f /var/aum_blacklist.conf
$ sudo updatectl --register-upgrade-handler &
$ sudo updatectl --check-network-updates
** Message: 21:31:26.117: Network connected: Yes
** Message: 21:31:26.123: Upgrade status: Checking
** Message: 21:31:28.057: Upgrade status: Downloading
** Message: 21:31:51.170: Upgrade status: Deploying
** Message: 21:32:11.879: An upgrade is pending
$ sudo ostree admin status
$ sudo reboot
$ printenv bootcount bootlimit
bootcount=1
bootlimit=3
Warning: Bootlimit (3) exceeded. Using altbootcmd.
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found /extlinux/extlinux-rollback.conf
Retrieving file: /extlinux/extlinux-rollback.conf
$ sudo ostree admin status
$ cat /var/aum_blacklist.conf
[blacklist]
1239e167bddff9464efd58695ea15edff6679964aee20e1b1b9d6a126bd66941=true
$ sudo updatectl &
$ sudo updatectl --check-network-updates
** Message: 21:47:11.501: Network connected: Yes
** Message: 21:47:11.508: Upgrade status: Checking
** Message: 21:47:13.079: Upgrade status: Downloading
** Message: 21:47:13.080: System is up to date
$ sudo journalctl -ef --unit apertis-update-manager
Jun 01 22:01:46 apertis apertis-update-[365]: Auto update status: active
Jun 01 22:01:46 apertis apertis-update-[365]: Ostree upgrade poll starting
Jun 01 22:01:47 apertis apertis-update-[365]: Ostree upgrade progress: 1 metadata, 0 content objects fetched
Jun 01 22:01:47 apertis apertis-update-[365]: Revision '1239e167bddff9464efd58695ea15edff6679964aee20e1b1b9d6a126bd66941' is marked as blacklisted; skipping
Jun 01 22:01:47 apertis apertis-update-[365]: Ostree already up to date
Expected
U-Boot is able to detect rollback situation
U-Boot is able to use rollback configuration for bootloader
The "failed" update is rolled back
"Failed" update is marked as blacklisted
Apertis-update-manager is able to detect blacklisted update and refuse to update the system with it