Modern vehicles aren’t just engines and wheels anymore — they’re powerful, software-driven platforms with dozens of interconnected ECUs, sensors, and services. But delivering secure, reliable Over-the-Air (OTA) updates at scale? That’s still a big challenge. Update Possible invites you to take on one of the hottest technical problems in the software-defined vehicle world: designing an open, end-to-end OTA update system using cutting-edge tools like Eclipse Symphony , Eclipse uProtocol, and in-vehicle orchestrators such as Eclipse Ankaios and Eclipse Muto.
On Ubuntu:
sudo apt update
sudo apt-get -y install podman
sudo apt-get -y install jqOtherwise follow the official Podman installation instructions.
Follow the instructions in the official Install Docker Engine Guideline. Next, intall docker compose.
Install Eclipse Ankaios with a single curl command as described in the Ankaios installation guide.
Follow the Setup with script section and install version v0.6.0.
No installation is required; the cloud component is launched via Docker Compose.
To run the application start by Symphony, an MQTT broker, and a read-only Symphony portal using the provided Docker Compose file:
docker compose -f /symphony/docker-compose.yaml up -d
docker compose -f /ManagementPlatform/docker-compose.yaml up -dBefore running the Ankaios manifest [state.yaml] you must build the container images for the car apps to test the update and for the policy workflow with:
chmod +x ./scripts/build-pull-images.sh
./scripts/build-pull-images.sh Start the Ankaios server and Ankaios agent with systemd:
sudo systemctl start ank-server ank-agentTo run the over-the-air (OTA) scenario, just apply the state.yaml containing the workloads:
ank apply ankaios/state.yamlBefore you can activate a campaign, you must register it with the Symphony API.
Use the provided script to do this:
chmod +x ./scripts/register-campaigns.sh
./scripts/register-campaigns.shURL: http://localhost:8086 Purpose: Simulates the vehicle’s central HMI where the driver receives an OTA update prompt and can Accept or Reject. Behavior: Shows a pop-up only when all safety / policy conditions (battery, vehicle state, etc.) are satisfied and a campaign activation has been triggered.
URL: http://localhost:9080 Purpose: Lets an operator view campaigns, evaluate policy eligibility, and trigger a software update activation. Action: On "Trigger Campaign" it authenticates with Symphony, registers an activation, and targets eligible vehicles.
URL http://localhost:8000 Purpose: Workload that gets updated. Demonstration: After a successful activation + driver approval, the container / component redeploys to the new version.
After installing all the dependecies run this for a faster setup:
./setup.sh