Skip to content

Deploying sample applications in containers

Use the quadlet_radio_engine.aib.yml manifest to build a virtual machine OS image that includes containerized sample applications.

The sample applications include two SOME/IP services:

  • radio-service, which simulates a radio
  • engine-service that simulates other parts of the car.

There is also a command line application radio-client, which talks to the services displaying the current status and allowing you to control the radio. For more information, see the sample-apps README.

The image uses the COVESA vsomeip implementation of SOME/IP as packaged in Fedora, and rebuilt in COPR. In particular, the image starts the vsomeip routing manager (non-contained), using systemd socket activation with a custom SELinux policy that controls access.

After you boot the OS image, two container-based systemd sample services are running: radio.service and engine.service.

Prerequisites

Procedure

  1. Create and go to a new directory called sample-auto-apps:

    $ mkdir sample-auto-apps && cd sample-auto-apps
    
  2. Create and save a file called radio.container that contains the following code:

    [Unit]
    Description=Demo radio service container
    Requires=routingmanagerd.socket
    After=routingmanagerd.socket
    Wants=engine.service
    
    [Container]
    Image=localhost/auto-apps
    Exec=/usr/bin/radio-service
    Volume=/run/vsomeip:/run/vsomeip
    
    [Service]
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
  3. Create and save a file called engine.container that contains the following code:

    [Unit]
    Description=Demo engine service container
    Requires=routingmanagerd.socket
    After=routingmanagerd.socket
    
    [Container]
    Image=localhost/auto-apps
    Exec=/usr/bin/engine-service
    Volume=/run/vsomeip:/run/vsomeip
    
    [Service]
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
  4. Create and go to a new subdirectory called quadlet_radio_engine:

    $ mkdir quadlet_radio_engine && cd quadlet_radio_engine
    
  5. Create and save a build manifest file named quadlet_radio_engine.aib.yml, that contains the following YAML code:

    name: quadlet_radio_engine
    
    content:
      repos:
        - id: copr-sample-apps
          baseurl: https://download.copr.fedorainfracloud.org/results/alexl/cs9-sample-images/centos-stream-9-$arch/
      rpms:
        - podman
        - containernetworking-plugins
        - vsomeip3-routingmanager
        - dlt-daemon
        # For testing the image only:
        - openssh-server
        - openssh-clients
    
      container_images:
        # Get the auto-apps container image from gitlab
        - source: registry.gitlab.com/centos/automotive/sample-images/demo/auto-apps
          tag: latest
          name: localhost/auto-apps
    
      add_files:
        - path: /etc/containers/systemd/radio.container
          source_path: ../radio.container
        - path: /etc/containers/systemd/engine.container
          source_path: ../engine.container
    
      # Required for testing the image only:
      systemd:
        enabled_services:
          # Enable ssh daemon
          - sshd.service
          # Enable the dlt daemon
          - dlt
    
    auth:
      # "password"
      root_password: $6$xoLqEUz0cGGJRx01$H3H/bFm0myJPULNMtbSsOFd/2BnHqHkMD92Sfxd.EKM9hXTWSmELG8cf205l6dktomuTcgKGGtGDgtvHVXSWU.
      # Required for testing the image only:
      sshd_config:
        PasswordAuthentication: true
        PermitRootLogin: true
    
  6. Export the current system’s CPU architecture as a variable:

    $ arch=$(arch)
    
  7. Run the following command to build the OS image:

       automotive-image-builder --verbose \
        --include=.. \
        build \
        --distro autosd9 \
        --target qemu \
        --mode image \
        --build-dir=_build \
        --export image \
        quadlet_radio_engine.aib.yml \
        quadlet_radio_engine.$arch.img
    
  8. Boot the OS image as a virtual machine (VM) in QEMU:

    $ sudo automotive-image-runner --nographics quadlet_radio_engine.x86_64.img
    
  9. Log in to the VM as the root user with the password password.

  10. Verify that the auto-apps container exists:

    # podman image list
    
  11. Verify that the radio service is running:

    # systemctl status radio.service
    
  12. Verify that the engine service is running:

    # systemctl status engine.service
    
  13. When you are done, run the following command to shut down the VM and return to your local terminal:

    # poweroff
    

© Red Hat