Streamlining Software Environment for Automated Vehicles: A Guide to Factory Setup
Tags: devops, technology, softwaredevelopment, architecture
Published: 2024-01-19 17:50:52

## Overview
There are many components forming the automated vehicle system: Compute, storage, networking, sensors & calibrations, mapping and physical architecture.
<br/>Today, we concentrate on a fundamental aspect: the setup of the computational infrastructure at the factory level for [ADASTEC](https://www.adastec.com/), a leader in Level-4 Automated Driving Software. This process is pivotal, as it establishes the groundwork for complex operations, including code development and the implementation of system updates..

Few articles talk about the niche yet crucial process of setting up servers from scratch, particularly at the operating system level for mission-critical systems like automated vehicles. The necessity for a setup process that is secure, easy to install, and as uniform and consistent as possible is crucial in this context.

The context & requirements:
- Multiple servers with GPUs. This is a problem at the installation stage, as it includes some configuration and custom drivers.
- Factory staff should have the least amount of work. No error tolerance on the process.
- Dependence on ROS and Ubuntu LTS for some servers.
- Factory internet connection can be unstable or slow.
- Need for a streamlined, secure version of Ubuntu.
- Network and security configurations tailored to our architecture.   
- Secure key management for system access and vehicle registration.
- Some stable version of the driving software and base programs to check the configuration of the system.
- Vehicle registration mechanism.

Any other elements are out of this solution right now. Like switch config, router, sensors, calibrations, cabling, physical installation...

## Distribution: The ISO
We need to install the operating system. So we have to boot the system from the BIOS. There are other network boot technologies like Canonical MAAS out there but with our scale of few servers per vehicle, booting them up manually is good enough. This leads to a basic solution. Boot the Ubuntu Server and run a bash script to clear the bloat, install required base packages, install applications, etc... But this leads to inconsistent deployments simply because of the apt package maintenance complexity. Plus we don't want the factory employee to enter the operating system and do manual work at all. Here comes the fabulous tool Cubic.

### Creating custom ISO: with the help of Cubic

![Cubic](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fm1yln38x1uchgkycref.png)
To quote the project’s homepage:

> Cubic permits effortless navigation through the ISO customization steps and features an integrated virtual command line environment to customize the Linux file system. You can create new customization projects or modify existing projects. Important parameters are dynamically populated with intelligent defaults to simplify the customization process.

With Cubic, we can streamline the process of customizing Ubuntu Server. By embedding automated scripts, credentials, OS adjustments and more within the ISO, we minimize manual intervention. This not only ensures a consistent setup across all servers but also adheres to our strict security protocols. 
The customized ISO automatically configures network settings, firewalls, kernel settings, installs essential drivers and software, and removes all unused packages. It also includes the first set of credentials that is used to authenticate, register vehicles, pull initial software and further credentials. This initial credential embedding is crucial since every developer once asked themselves the question, "how do I put the keys to securely get other keys in the first place!". 
Installing the initial packages and libraries also is crucial. It ensures only the tested versions get installed first and creates a 0 point of the working products environment even with poor internet connection conditions.

## Conclusion
The factory setup for the Automated Vehicle compute system is a finely tuned process, balancing efficiency, consistency, and security. As we continue to refine ADASTEC's factory setup, we aim to integrate more automated processes and explore advanced OS solutions. Our commitment is to evolve with technology, ensuring ADASTEC stays at the cutting edge of automated vehicle technology.