diff --git a/.devcontainer/post-attach.sh b/.devcontainer/post-attach.sh
index ae63051..db66bac 100755
--- a/.devcontainer/post-attach.sh
+++ b/.devcontainer/post-attach.sh
@@ -48,3 +48,4 @@ function azure-mount() {
# Second arg: Name of Azure container
azure-mount "azure-sstate-cache" "yocto-sstate-cache"
azure-mount "azure-downloads-cache" "downloads"
+azure-mount "azure-debian" "debian"
diff --git a/.gitignore b/.gitignore
index 7327afc..3ca20d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,6 +55,7 @@ poky/
# Remote sstate-cache on Azure Storage
azure-sstate-cache/
azure-downloads-cache/
+azure-*/
bitbake/
# BitBake Hash Equivalence Server database
@@ -82,3 +83,5 @@ resources/docker-snapshot/dockerfiles/leda-tests/log.html
resources/docker-snapshot/dockerfiles/leda-tests/output.xml
resources/docker-snapshot/dockerfiles/leda-tests/report.html
+resources/debian/repo-root
+resources/debian/private.pgp
diff --git a/desiredstate.json b/desiredstate.json
new file mode 100644
index 0000000..13ebe3a
--- /dev/null
+++ b/desiredstate.json
@@ -0,0 +1,121 @@
+{
+ "name": "mike_test3",
+ "specification": {
+ "baselines": [],
+ "domains": [
+ {
+ "id": "containers",
+ "components": [
+ {
+ "id": "wiper-app",
+ "version": "edge",
+ "config": [
+ {
+ "key": "image",
+ "value": "ghcr.io/softwaredefinedvehicle/wiperpoc/wiperpoc:latest"
+ },
+ {
+ "key": "env",
+ "value": "SDV_MIDDLEWARE_TYPE=native"
+ },
+ {
+ "key": "env",
+ "value": "SDV_VEHICLEDATABROKER_ADDRESS=127.0.0.1:55555"
+ },
+ {
+ "key": "env",
+ "value": "SDV_MQTT_ADDRESS=mqtt://127.0.0.1:1883"
+ },
+ {
+ "key": "env",
+ "value": "SDV_SEATSERVICE_ADDRESS=127.0.0.1:30051"
+ },
+ {
+ "key": "network",
+ "value": "host"
+ }
+ ]
+ },
+ {
+ "id": "ota-client",
+ "version": "v0.0.2",
+ "config": [
+ {
+ "key": "image",
+ "value": "ghcr.io/softwaredefinedvehicle/sdv-ota-client/ota-client:v0.0.2"
+ },
+ {
+ "key": "mount",
+ "value": "/etc/ota-client:/app/config"
+ },
+ {
+ "key": "mount",
+ "value": "/data/var/certificates:/app/config/certs"
+ },
+ {
+ "key": "mount",
+ "value": "/etc/ssl/certs:/app/config/ca-certs/"
+ },
+ {
+ "key": "mount",
+ "value": "/tmp:/tmp"
+ },
+ {
+ "key": "host",
+ "value": "mosquitto:host_ip"
+ }
+ ]
+ },
+ {
+ "id": "vehicledatabroker",
+ "version": "v0.0.2",
+ "config": [
+ {
+ "key": "image",
+ "value": "ghcr.io/boschglobal/kuksa.val/databroker:0.0.2"
+ },
+ {
+ "key": "port",
+ "value": "55555:55555"
+ }
+ ]
+ },
+ {
+ "id": "someip-feeder",
+ "version": "sha-3c4811b",
+ "config": [
+ {
+ "key": "image",
+ "value": "ghcr.io/softwaredefinedvehicle/kuksa.val.feeders.fork/someip-feeder:sha-3c4811b"
+ },
+ {
+ "key": "network",
+ "value": "host"
+ },
+ {
+ "key": "env",
+ "value": "BROKER_ADDR=127.0.0.1:55555"
+ }
+ ]
+ }
+ ],
+ "config": []
+ },
+ {
+ "id": "safetyApp",
+ "components": [],
+ "config": []
+ },
+ {
+ "id": "safetyEcu",
+ "components": [],
+ "config": []
+ },
+ {
+ "id": "selfUpdate",
+ "components": [],
+ "config": []
+ }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/kas/common-kirkstone.yaml b/kas/common-kirkstone.yaml
index 095c01f..b6547ac 100644
--- a/kas/common-kirkstone.yaml
+++ b/kas/common-kirkstone.yaml
@@ -22,6 +22,7 @@ target: sdv-image-all
local_conf_header:
meta-leda: |
INHERIT += "rm_work"
+ PACKAGE_CLASSES += " package_deb"
INHERIT:remove = " archiver"
INHERIT:remove = " cve-check"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
diff --git a/resources/README.md b/resources/README.md
index 00bb0b3..de6ac2a 100644
--- a/resources/README.md
+++ b/resources/README.md
@@ -2,6 +2,8 @@
This folder containers additional resources for building and running Leda quickstart images using QEMU and Docker.
+- `apertis`- For Leda develoeprs: Documentation how to install Leda stack onto an Apertis IoT Fixed Function image
+- `debian`- For Leda develoeprs: Experiment to install Yocto-built Debian packages of Leda components into plain Debian docker images.
- `docker`- For users: Documentation explains how to start the Leda Quickstart Docker container
- `docker-compose` - For users: Documentation and docker compose setup, which starts multiple Leda containers including an update bundle webserver
- `docker-release` - For Leda developers: Building Leda docker container based on the latest public release of Leda (requires public release)
diff --git a/resources/apertis/Dockerfile.apertis b/resources/apertis/Dockerfile.apertis
new file mode 100644
index 0000000..d8a38d1
--- /dev/null
+++ b/resources/apertis/Dockerfile.apertis
@@ -0,0 +1,84 @@
+# syntax=docker/dockerfile:1
+#
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+
+FROM debian:bullseye AS build
+
+ARG DEBIAN_FRONTEND=noninteractive
+ARG TZ=Etc/UTC
+
+LABEL name="leda-apertis-x86"
+
+RUN echo "deb http://deb.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/debian-bullseye-backports.list
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends ca-certificates curl
+RUN apt-get install -y -t bullseye-backports qemu-system-x86
+
+RUN curl -o apertis.img.gz https://images.apertis.org/release/v2023/v2023.0/amd64/iot/apertis_v2023-iot-amd64-uefi_v2023.0.img.gz
+RUN gunzip apertis.img.gz
+RUN ls -al
+RUN qemu-img convert -f raw -O qcow2 apertis.img apertis.qcow2
+
+FROM debian:bullseye AS runtime
+
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends \
+ bind9-utils \
+ ca-certificates \
+ curl \
+ dnsmasq \
+ dnsutils \
+ iproute2 \
+ iptables \
+ iputils-ping \
+ isc-dhcp-server \
+ net-tools \
+ ssh \
+ sudo \
+ uml-utilities \
+ xz-utils \
+ sshpass
+
+# Debian Bullseye contains QEMU 5.2
+# RUN apt-get install -y --no-install-recommends qemu-system-x86
+
+# Debian Bullseye-Backports contains QEMU 7.2
+RUN echo "deb http://deb.debian.org/debian bullseye-backports main" > /etc/apt/sources.list.d/debian-bullseye-backports.list
+RUN apt-get update
+RUN apt-get install -y -t bullseye-backports qemu-system-x86
+
+WORKDIR /root
+
+COPY --from=build apertis.qcow2 /root/apertis.qcow2
+COPY build/tmp/deploy/images/qemux86-64/ovmf.qcow2 /root/ovmf.qcow2
+
+# Original runner and a temporary modified one ("...-x86.sh")
+RUN mkdir -p /docker
+COPY resources/apertis/dockerfiles/leda-apertis-docker-entrypoint-x86.sh /docker/
+COPY resources/apertis/dockerfiles/leda-apertis-bootstrapper.sh /docker/
+COPY resources/apertis/dockerfiles/leda-apertis-install-sdv.sh /docker/
+RUN chmod a+x /docker/leda-apertis-docker-entrypoint-x86.sh
+RUN chmod a+x /docker/leda-apertis-bootstrapper.sh
+RUN chmod a+x /docker/leda-apertis-install-sdv.sh
+ENTRYPOINT [ "/docker/leda-apertis-docker-entrypoint-x86.sh" ]
+
+# Expose SSH access
+EXPOSE 2222
+
+# Expose MQTT broker: Eclipse Mosquitto
+EXPOSE 1883
+
+# Expose Eclipse Kuksa Databroker
+EXPOSE 30555
diff --git a/resources/apertis/README.md b/resources/apertis/README.md
new file mode 100644
index 0000000..f7b4c55
--- /dev/null
+++ b/resources/apertis/README.md
@@ -0,0 +1,223 @@
+# Running Leda Stack on Apertis
+
+
+## Preparation of the image
+
+1. Download the latest Apertis IoT image
+
+```shell
+wget https://images.apertis.org/release/v2023/v2023.0/amd64/iot/apertis_v2023-iot-amd64-uefi_v2023.0.img.gz
+```
+
+2. Run the image, e.g. in QEMU:
+
+```shell
+qemu-system-x86_64 \
+ -net nic,model=virtio \
+ -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::1880-:1880,hostfwd=tcp::1883-:1883,hostfwd=tcp::8888-:8888,hostfwd=tcp::30555-:30555 \
+ -object rng-random,filename=/dev/urandom,id=rng0 \
+ -device virtio-rng-pci,rng=rng0 \
+ -hda apertis_v2023-iot-amd64-uefi_v2023.0.img \
+ -serial mon:stdio \
+ -serial null \
+ -serial mon:vc \
+ -boot order=cd \
+ -nographic \
+ -enable-kvm \
+ -object can-bus,id=canbus0 \
+ -device kvaser_pci,canbus=canbus0 \
+ -cpu IvyBridge \
+ -drive if=pflash,format=qcow2,file=ovmf.qcow2 \
+ -machine q35 \
+ -smp 4 \
+ -m 2G
+```
+
+3. Login as `user` with password `user`
+
+4. Install the dependencies by following the *Eclipse Kanto - [Getting Started Guide](https://websites.eclipseprojects.io/kanto/docs/getting-started/install/)*
+
+ > Note: Some tools are not available on Apertis out of the box, hence the following steps will describe the differences to the Kanto guide.
+
+7. Add the `development` Apertis repository and install `containerd` Debian package:
+
+```shell
+sudo $SHELL
+echo "deb https://repositories.apertis.org/apertis/ v2023 development" >> /etc/apt/sources.list.d/apertis-development.list
+apt update
+apt-get install -y curl ca-certificates containerd
+```
+
+8. Install Kanto
+
+```shell
+# Still in sudo shell
+curl -fsSL -o kanto.deb https://github.com/eclipse-kanto/kanto/releases/download/v0.1.0-M2/kanto_0.1.0-M2_linux_x86_64.deb
+apt -o Dpkg::Options::="--force-overwrite" install ./kanto.deb
+```
+
+9. Verify Kanto Container Management is running:
+
+```shell
+systemctl status container-management
+sudo kanto-cm list
+```
+
+10. Edit the network configuration file `/etc/connman/main.conf`
+ Add `veth` to the following line:
+
+```shell
+echo "NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb,ve-,vb-,veth" >> /etc/connman/main.conf
+systemctl restart connman
+```
+
+```
+# Before
+# NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb,ve-,vb-
+
+# After
+NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb,ve-,vb-,veth
+```
+
+11. Configure IP Rules to allow network traffic in `/etc/iptables/rules.v4`
+ > Note: Add these lines before the `REJECT` statements.
+```
+-A INPUT -i kanto-cm0 -j ACCEPT
+-A FORWARD -i kanto-cm0 -j ACCEPT
+-A FORWARD -o kanto-cm0 -j ACCEPT
+```
+
+12. Add the cgroup for systemd by creating a new file `/usr/lib/systemd/user/cgroup-systemd.service`
+
+```
+[Unit]
+Description=Create cgroup mount for systemd
+DefaultDependencies=no
+#Before=sysinit.target
+#After=local-fs.target
+
+[Service]
+Type=oneshot
+ExecStartPre=/usr/bin/mkdir /sys/fs/cgroup/systemd
+ExecStart=/usr/bin/mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
+
+[Install]
+WantedBy=sysinit.target
+```
+
+13. Install the Eclipse Leda SDV core containers
+
+> Note: Leda is using a newer version of Kanto Container Management and kanto-auto-deployer to deploy containers using descriptor files.
+ This feature is not yet available on Apertis v2023, hence the containers will be created manually.
+
+14. Install Kuksa Databroker
+
+```shell
+sudo kanto-cm create --name databroker \
+ --ports=30555:55555/tcp \
+ ghcr.io/eclipse/kuksa.val/databroker:0.3.0
+
+sudo kanto-cm start --name databroker
+
+# Verify the container is up and running:
+sudo kanto-cm list
+```
+
+15. Install Vehicle Update Manager from Leda Incubator
+
+```shell
+sudo kanto-cm create --name vum \
+ --e=SELF_UPDATE_TIMEOUT=30m \
+ --e=SELF_UPDATE_ENABLE_REBOOT=true \
+ --e=THINGS_CONN_BROKER=tcp://mosquitto:1883 \
+ --e=THINGS_FEATURES=ContainerOrchestrator \
+ --mp="/proc:/proc:shared" \
+ --hosts="mosquitto:host_ip" \
+ ghcr.io/eclipse-leda/leda-contrib-vehicle-update-manager/vehicleupdatemanager:main-1d8dca55a755c4b3c7bc06eabfa06ad49e068a48
+
+sudo kanto-cm start --name vum
+```
+
+16. Install Self Update Agent from Leda Incubator
+
+```shell
+sudo mkdir -p /data/selfupdates
+
+sudo kanto-cm create --name sua \
+ --mp="/var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket:shared" \
+ --mp="/data/selfupdates:/RaucUpdate:rprivate" \
+ --mp="/etc/os-release:/etc/os-release:rprivate" \
+ --ports=30052:50052/tcp \
+ --hosts="mosquitto:host_ip" \
+ ghcr.io/eclipse-leda/leda-contrib-self-update-agent/self-update-agent:build-66
+
+sudo kanto-cm start --name sua
+```
+
+17. Install the Cloud Connector from Leda Incubator
+
+```shell
+sudo mkdir -p /data/var/certificates
+
+# Replace with your device certificates
+sudo touch /data/var/certificates/device.crt
+sudo touch /data/var/certificates/device.key
+
+sudo kanto-cm create --name cloudconnector \
+ --mp="/data/var/certificates/device.crt:/device.crt" \
+ --mp="/data/var/certificates/device.key:/device.key" \
+ --e=CERT_FILE=/device.crt \
+ --e=KEY_FILE=/device.key \
+ --e=LOCAL_ADDRESS=tcp://mosquitto:1883 \
+ --e="LOG_FILE=" \
+ --e=LOG_LEVEL=INFO \
+ --e=CA_CERT_PATH=/app/iothub.crt \
+ --e=MESSAGE_MAPPER_CONFIG=/app/message-mapper-config.json \
+ --e=ALLOWED_LOCAL_TOPICS_LIST=cloudConnector/# \
+ ghcr.io/eclipse-leda/leda-contrib-cloud-connector/cloudconnector:main-47c01227a620a3dbd85b66e177205c06c0f7a52e
+
+sudo kanto-cm start --name cloudconnector
+```
+
+18. Install examples: Seat Service
+
+```shell
+sudo kanto-cm create --name seatservice \
+ --e=BROKER_ADDR=databroker-host:30555 \
+ --e=RUST_LOG=info \
+ --e=vehicle_data_broker=info \
+ --ports="30051:50051/tcp" \
+ --hosts="databroker-host:host_ip" \
+ ghcr.io/boschglobal/kuksa.val.services/seat_service:v0.3.0
+
+sudo kanto-cm start --name seatservice
+```
+
+19. Install example: Kuksa DBC Feeder
+
+```shell
+sudo kanto-cm create --name feedercan \
+ --e=VEHICLEDATABROKER_DAPR_APP_ID=databroker \
+ --e=VDB_ADDRESS=databroker-host:30555 \
+ --e=USECASE=databroker \
+ --e=LOG_LEVEL=info \
+ --e=databroker=info \
+ --e=broker_client=info \
+ --e=dbcfeeder=info \
+ --hosts="databroker-host:host_ip" \
+ ghcr.io/eclipse/kuksa.val.feeders/dbc2val:v0.1.1
+
+sudo kanto-cm start --name feedercan
+```
+
+20. Install example: Kuksa HVAC Example
+
+```shell
+sudo kanto-cm create --name hvac \
+ --e=VEHICLEDATABROKER_DAPR_APP_ID=databroker \
+ --e=VDB_ADDRESS=databroker-host:30555 \
+ --hosts="databroker-host:host_ip" \
+ ghcr.io/eclipse/kuksa.val.services/hvac_service:v0.1.0
+
+sudo kanto-cm start --name hvac
+```
diff --git a/resources/apertis/build-docker.sh b/resources/apertis/build-docker.sh
new file mode 100755
index 0000000..cbcb81a
--- /dev/null
+++ b/resources/apertis/build-docker.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+# Build and Run the Leda SDV Core components stack on Apertis IoT (QEMU X86)
+#
+#set -e
+
+if ! command -v docker &> /dev/null
+then
+ echo "Error: Docker could not be found, please install Docker."
+ exit 1
+fi
+
+# Set the build context to "../.." to allow to access the Yocto build workspace
+# for copying the ovmf.qcow2 file
+docker build --tag ghcr.io/eclipse-leda/leda-distro/leda-apertis-x86 --file Dockerfile.apertis ../..
diff --git a/resources/apertis/dockerfiles/leda-apertis-bootstrapper.sh b/resources/apertis/dockerfiles/leda-apertis-bootstrapper.sh
new file mode 100644
index 0000000..97055b9
--- /dev/null
+++ b/resources/apertis/dockerfiles/leda-apertis-bootstrapper.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+# Install SDV Components on Apertis
+#
+#set -e
+
+# Wait for Apertis to boot and SSH to come up
+
+mkdir -p ~/.ssh/
+until ssh-keyscan -t ecdsa -p 2222 -H localhost >> ~/.ssh/known_hosts 2> /dev/null
+do
+ echo "Bootstrapper: Apertis not up yet (SSH), trying again..."
+ sleep 1
+done
+
+echo "Bootstrapper: SSH Keyscan successfull"
+
+echo "Bootstrapper: Generating SSH Keys"
+ssh-keygen -t rsa -b 2048 -N '' -f /root/.ssh/id_rsa
+
+echo "Bootstrapper: Installing SSH Keys"
+sshpass -p user ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no -p 2222 user@localhost
+
+echo "Bootstrapper: Checking remote Apertis version"
+ssh -o StrictHostKeyChecking=no -o ConnectionAttempts=30 -p 2222 user@localhost "cat /etc/os-release"
+
+echo "Bootstrapper: Executing SDV Installer script (sudo)"
+ssh -o StrictHostKeyChecking=no -o ConnectionAttempts=30 -p 2222 user@localhost "sudo -n -s \$SHELL" < /docker/leda-apertis-install-sdv.sh
+
+echo "Bootstrapper: Done, exiting."
diff --git a/resources/apertis/dockerfiles/leda-apertis-docker-entrypoint-x86.sh b/resources/apertis/dockerfiles/leda-apertis-docker-entrypoint-x86.sh
new file mode 100755
index 0000000..ba1afc9
--- /dev/null
+++ b/resources/apertis/dockerfiles/leda-apertis-docker-entrypoint-x86.sh
@@ -0,0 +1,148 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+# Run qemu with TAP network
+#
+# set -x
+
+DISK_IMAGE_FILE="apertis.qcow2"
+
+echo "Entry: Setup..."
+
+USERID="-u $(id -u)"
+GROUP="-g $(id -g)"
+TUNCTL="sudo tunctl"
+IFCONFIG="sudo ip"
+IPTABLES="sudo iptables"
+TAP=
+
+function setupTap() {
+ TAP=`$TUNCTL -b $GROUP 2>&1`
+ n=1
+ $IFCONFIG addr add 192.168.7.$n/32 broadcast 192.168.7.255 dev $TAP
+ $IFCONFIG link set dev $TAP up
+ dest=2
+ $IFCONFIG route add to 192.168.7.$dest dev $TAP
+ $IPTABLES -A POSTROUTING -t nat -j MASQUERADE -s 192.168.7.1/32
+ $IPTABLES -A POSTROUTING -t nat -j MASQUERADE -s 192.168.7.2/32
+ sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
+ sudo bash -c "echo 1 > /proc/sys/net/ipv4/conf/$TAP/proxy_arp"
+ $IPTABLES -P FORWARD ACCEPT
+ echo "Entry: Set up TAP network interface: $TAP"
+}
+
+function teardownTap() {
+ echo "Entry: Tearing down TAP network interface: $TAP"
+ $TUNCTL -d $TAP
+ $IFCONFIG link del $TAP
+ $IPTABLES -D POSTROUTING -t nat -j MASQUERADE -s 192.168.7.1/32
+ $IPTABLES -D POSTROUTING -t nat -j MASQUERADE -s 192.168.7.2/32
+}
+
+startQemuUnprivileged() {
+ echo "Entry: Starting QEMU in unprivileged mode"
+
+ qemu-system-x86_64 \
+ -net nic,model=virtio \
+ -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::1880-:1880,hostfwd=tcp::1883-:1883,hostfwd=tcp::8888-:8888,hostfwd=tcp::30555-:30555 \
+ -object rng-random,filename=/dev/urandom,id=rng0 \
+ -device virtio-rng-pci,rng=rng0 \
+ -drive id=hd,file=${DISK_IMAGE_FILE},if=virtio,format=qcow2 \
+ -serial mon:stdio \
+ -serial null \
+ -serial mon:vc \
+ -nographic \
+ -object can-bus,id=canbus0 \
+ -device kvaser_pci,canbus=canbus0 \
+ -drive if=pflash,format=qcow2,file=ovmf.qcow2 \
+ -cpu IvyBridge \
+ -machine q35 \
+ -smp 4 \
+ -m 2G
+}
+
+startQemuPrivileged() {
+ echo "Entry: Starting QEMU in privileged mode"
+
+ trap teardownTap EXIT
+
+ setupTap
+
+ # Forward network traffic for SSH to the QEMU Guest
+ iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.7.2:22
+
+ # Forward network traffic for SSH to the QEMU Guest
+ # eth0 -> docker-internal network (172.x.x.x)
+ iptables -t nat -A PREROUTING -j DNAT -i eth0 -p tcp --to-destination 192.168.7.2
+ # eth1 -> leda-network (192.168.8.x)
+ iptables -t nat -A PREROUTING -j DNAT -i eth1 -p tcp --to-destination 192.168.7.2
+
+ # Masquerade the IP Address of the sender, so that the packet will go back to the gateway
+ iptables -t nat -A POSTROUTING -j MASQUERADE
+
+ # Run the DHCP server
+ mkdir -p /var/lib/dhcp/
+ touch /var/lib/dhcp/dhcpd.leases
+ /usr/sbin/dhcpd
+ sudo /usr/sbin/dnsmasq
+
+ printf -v macaddr "52:54:%02x:%02x:%02x:%02x" $(( $RANDOM & 0xff)) $(( $RANDOM & 0xff )) $(( $RANDOM & 0xff)) $(( $RANDOM & 0xff ))
+
+ echo "Entry: Randomized MAC Address: ${macaddr}"
+
+ sudo qemu-system-x86_64 \
+ -device virtio-net-pci,netdev=net0,mac=$macaddr \
+ -netdev tap,id=net0,ifname=$TAP,script=no,downscript=no \
+ -object rng-random,filename=/dev/urandom,id=rng0 \
+ -device virtio-rng-pci,rng=rng0 \
+ -drive id=hd,file=${DISK_IMAGE_FILE},if=virtio,format=qcow2 \
+ -boot order=d,strict=on,menu=on \
+ -serial mon:stdio \
+ -serial null \
+ -serial mon:vc \
+ -nographic \
+ -object can-bus,id=canbus0 \
+ -device kvaser_pci,canbus=canbus0 \
+ -drive if=pflash,readonly=on,format=qcow2,file=ovmf.code.qcow2 \
+ -drive if=pflash,format=qcow2,file=ovmf.vars.qcow2 \
+ -cpu IvyBridge \
+ -machine q35 \
+ -smp 4 \
+ -m 2G
+}
+
+PRIVILEGED=1
+
+if [ $(id -u) != 0 ]; then
+ echo "We're not uid 0, falling back to unprivileged mode."
+ PRIVILEGED=0
+fi
+
+if [ ! -w /proc/sys/net/ipv4/ip_forward ]; then
+ echo "/proc/sys/net/ipv4/ip_forward is not writable for us, falling back to unprivileged mode."
+ PRIVILEGED=0
+fi
+
+echo "Entry: Checking QEMU Version..."
+qemu-system-x86_64 -version
+
+echo "Entry: Starting SDV Installer in background..."
+/docker/leda-apertis-bootstrapper.sh &
+
+echo "Entry: Starting QEMU with Apertis image..."
+if [ "$PRIVILEGED" == 0 ]; then
+ startQemuUnprivileged
+else
+ startQemuPrivileged
+fi
\ No newline at end of file
diff --git a/resources/apertis/dockerfiles/leda-apertis-install-sdv.sh b/resources/apertis/dockerfiles/leda-apertis-install-sdv.sh
new file mode 100644
index 0000000..4021200
--- /dev/null
+++ b/resources/apertis/dockerfiles/leda-apertis-install-sdv.sh
@@ -0,0 +1,156 @@
+#!/bin/sh
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+# Install SDV Components on Apertis
+#
+#set -e
+
+if dpkg -l kanto; then
+ echo "SDV Installer: Kanto already installed, assuming SDV core components have been installed as well. Exiting."
+ exit 0
+fi
+
+# Add the `development` Apertis repository and install `containerd` Debian package
+echo "deb https://repositories.apertis.org/apertis/ v2023 development" >> /etc/apt/sources.list.d/apertis-development.list
+apt update
+apt-get install -y curl ca-certificates git mosquitto-clients jq containerd protobuf-compiler
+
+# Install Kanto
+curl -fsSL -o kanto.deb https://github.com/eclipse-kanto/kanto/releases/download/v0.1.0-M2/kanto_0.1.0-M2_linux_x86_64.deb
+apt -o Dpkg::Options::="--force-overwrite" install ./kanto.deb
+
+# Blacklist Kanto network interfaces from Connection Manager
+# so that virtual ethernet interfaces are not used for default routes
+echo "NetworkInterfaceBlacklist = vmnet,vboxnet,virbr,ifb,ve-,vb-,veth" >> /etc/connman/main.conf
+systemctl restart connman
+
+# For building kantui and kanto-auto-deployer, we need Rust
+echo "Installing Rust"
+curl https://sh.rustup.rs -sSf | sh
+source "$HOME/.cargo/env"
+
+echo "Building kantui"
+git clone https://github.com/eclipse-leda/leda-utils.git
+pushd leda-utils/src/rust/kanto-tui
+sudo apt-get install -y gcc
+git submodule update
+cargo build --release
+strip ./target/release/kantui
+mkdir -p /etc/kantui/
+cp ./kantui_conf.toml /etc/kantui/kantui_conf.toml
+cp ./target/release/kantui /usr/bin
+
+popd
+
+until systemctl is-active container-management
+do
+ echo "SDV Installer: Kanto Container Management not up yet, trying again..."
+ sleep 1
+done
+
+until [ -S /run/container-management/container-management.sock ]
+do
+ echo "SDV Installer: Kanto Container Management not yet listening on unix domain socket, trying again..."
+ sleep 1
+done
+
+# Kuksa Databroker
+echo "SDV Installer: Kuksa Databroker"
+kanto-cm create --name databroker \
+ --ports=30555:55555/tcp \
+ ghcr.io/eclipse/kuksa.val/databroker:0.3.0
+kanto-cm start --name databroker
+
+# Leda Incubator: Vehicle Update Manager
+echo "SDV Installer: Vehicle Update Manager"
+kanto-cm create --name vum \
+ --e=SELF_UPDATE_TIMEOUT=30m \
+ --e=SELF_UPDATE_ENABLE_REBOOT=true \
+ --e=THINGS_CONN_BROKER=tcp://mosquitto:1883 \
+ --e=THINGS_FEATURES=ContainerOrchestrator \
+ --mp="/proc:/proc:shared" \
+ --hosts="mosquitto:host_ip" \
+ ghcr.io/eclipse-leda/leda-contrib-vehicle-update-manager/vehicleupdatemanager:main-1d8dca55a755c4b3c7bc06eabfa06ad49e068a48
+kanto-cm start --name vum
+
+# Leda Incubator: Self Update Agent
+echo "SDV Installer: Self Update Agent"
+sudo mkdir -p /data/selfupdates
+sudo kanto-cm create --name sua \
+ --mp="/var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket:shared" \
+ --mp="/data/selfupdates:/RaucUpdate:rprivate" \
+ --mp="/etc/os-release:/etc/os-release:rprivate" \
+ --ports=30052:50052/tcp \
+ --hosts="mosquitto:host_ip" \
+ ghcr.io/eclipse-leda/leda-contrib-self-update-agent/self-update-agent:build-66
+sudo kanto-cm start --name sua
+
+# Leda Incubator: Cloud Connector
+echo "SDV Installer: Cloud Connector (unconfigured)"
+mkdir -p /data/var/certificates
+# Replace with your device certificates
+touch /data/var/certificates/device.crt
+touch /data/var/certificates/device.key
+kanto-cm create --name cloudconnector \
+ --mp="/data/var/certificates/device.crt:/device.crt" \
+ --mp="/data/var/certificates/device.key:/device.key" \
+ --e=CERT_FILE=/device.crt \
+ --e=KEY_FILE=/device.key \
+ --e=LOCAL_ADDRESS=tcp://mosquitto:1883 \
+ --e="LOG_FILE=" \
+ --e=LOG_LEVEL=INFO \
+ --e=CA_CERT_PATH=/app/iothub.crt \
+ --e=MESSAGE_MAPPER_CONFIG=/app/message-mapper-config.json \
+ --e=ALLOWED_LOCAL_TOPICS_LIST=cloudConnector/# \
+ ghcr.io/eclipse-leda/leda-contrib-cloud-connector/cloudconnector:main-47c01227a620a3dbd85b66e177205c06c0f7a52e
+kanto-cm start --name cloudconnector
+
+# Examples: Seat Service
+echo "SDV Installer: Kuksa.VAL Seat Service Example"
+kanto-cm create --name seatservice \
+ --e=BROKER_ADDR=databroker-host:30555 \
+ --e=RUST_LOG=info \
+ --e=vehicle_data_broker=info \
+ --ports="30051:50051/tcp" \
+ --hosts="databroker-host:host_ip" \
+ ghcr.io/boschglobal/kuksa.val.services/seat_service:v0.3.0
+kanto-cm start --name seatservice
+
+# Example: Kuksa DBC Feeder
+echo "SDV Installer: Kuksa.VAL DBC CAN Feeder Example"
+kanto-cm create --name feedercan \
+ --e=VEHICLEDATABROKER_DAPR_APP_ID=databroker \
+ --e=VDB_ADDRESS=databroker-host:30555 \
+ --e=USECASE=databroker \
+ --e=LOG_LEVEL=info \
+ --e=databroker=info \
+ --e=broker_client=info \
+ --e=dbcfeeder=info \
+ --hosts="databroker-host:host_ip" \
+ ghcr.io/eclipse/kuksa.val.feeders/dbc2val:v0.1.1
+kanto-cm start --name feedercan
+
+# Example: Kuksa HVAC Example
+echo "SDV Installer: Kuksa.VAL HVAC Example"
+kanto-cm create --name hvac \
+ --e=VEHICLEDATABROKER_DAPR_APP_ID=databroker \
+ --e=VDB_ADDRESS=databroker-host:30555 \
+ --hosts="databroker-host:host_ip" \
+ ghcr.io/eclipse/kuksa.val.services/hvac_service:v0.1.0
+kanto-cm start --name hvac
+
+echo "SDV Installer done."
+echo ""
+echo "You may now login to Apertis as 'user' with password 'user'"
+echo ""
diff --git a/resources/apertis/publish-docker.sh b/resources/apertis/publish-docker.sh
new file mode 100755
index 0000000..caf4e50
--- /dev/null
+++ b/resources/apertis/publish-docker.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+# Publish Leda on Apertis on QEMU on Docker container image to container registry on ghcr.io
+#
+#set -e
+
+if ! command -v docker &> /dev/null
+then
+ echo "Docker could not be found, please install Docker."
+ exit
+fi
+
+docker push ghcr.io/eclipse-leda/leda-distro/leda-apertis-x86
diff --git a/resources/apertis/run-docker.sh b/resources/apertis/run-docker.sh
new file mode 100755
index 0000000..9dec945
--- /dev/null
+++ b/resources/apertis/run-docker.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+# Build and Run Leda on X86 and ARM64 in Docker Containers
+#
+#set -e
+
+if ! command -v docker &> /dev/null
+then
+ echo "Docker could not be found, please install Docker."
+ exit
+fi
+
+docker rm --force leda-apertis-x86
+docker run --name leda-apertis-x86 --tty --interactive ghcr.io/eclipse-leda/leda-distro/leda-apertis-x86
+
+# docker run --tty --interactive --entrypoint /bin/bash leda-apertis-x86
+# docker exec --tty --interactive leda-apertis-x86 /bin/bash
+# docker push ghcr.io/eclipse-leda/leda-distro/leda-apertis-x86
\ No newline at end of file
diff --git a/resources/debian/Dockerfile.debian b/resources/debian/Dockerfile.debian
new file mode 100644
index 0000000..afb297d
--- /dev/null
+++ b/resources/debian/Dockerfile.debian
@@ -0,0 +1,74 @@
+# syntax=docker/dockerfile:1
+#
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+#
+
+ARG BASE_IMAGE=debian:bullseye
+FROM ${BASE_IMAGE} AS build
+
+ARG DEBIAN_FRONTEND=noninteractive
+ARG TZ=Etc/UTC
+
+COPY public.key.gpg /etc/apt/trusted.gpg.d/
+
+RUN apt-get update
+RUN apt-get install -y wget ca-certificates openssh-server rauc mosquitto mosquitto-clients
+
+RUN wget https://github.com/eclipse-kanto/kanto/releases/download/v0.1.0-M2/kanto_0.1.0-M2_linux_x86_64.deb && \
+ apt-get install -y ./kanto_0.1.0-M2_linux_x86_64.deb
+RUN apt show kanto
+
+RUN wget https://github.com/eclipse-leda/leda-utils/releases/download/v0.0.1/eclipse-leda-kanto-auto-deployer_0.0.1.0.7019_amd64.deb && \
+ apt-get install -y ./eclipse-leda-kanto-auto-deployer_0.0.1.0.7019_amd64.deb
+RUN apt show eclipse-leda-kanto-auto-deployer
+
+RUN wget https://github.com/eclipse-leda/leda-utils/releases/download/v0.0.1/eclipse-leda-kantui_0.0.1.0.7019_amd64.deb && \
+ apt-get install -y ./eclipse-leda-kantui_0.0.1.0.7019_amd64.deb
+RUN apt show eclipse-leda-kantui
+
+COPY ./repo-root /repo-root
+
+RUN echo "deb file:/repo-root dracon main" > /etc/apt/sources.list.d/sdv.list
+RUN apt-get update
+
+RUN apt-get install -y leda-utils
+RUN apt-get install -y sdv-container-cloudconnector
+RUN apt-get install -y sdv-container-feedercan
+RUN apt-get install -y sdv-container-hvacservice
+RUN apt-get install -y sdv-container-seatservice
+RUN apt-get install -y sdv-container-selfupdateagent
+RUN apt-get install -y sdv-container-vehicleupdatemanager
+RUN apt-get install -y sdv-kuksa-val-databroker
+RUN apt-get install -y sdv-core-containers
+RUN apt-get install -y sdv-example-containers
+
+RUN dpkg -L sdv-container-cloudconnector
+RUN dpkg -L sdv-core-containers
+
+RUN wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
+RUN mkdir -p /usr/lib/cni
+RUN tar Cxzvf /usr/lib/cni cni-plugins-linux-amd64-v1.1.1.tgz
+
+# These fail due to libc (and more) dependency conflicts.
+# RUN apt-get install -y kantui
+# RUN apt-get install -y databroker-cli
+# RUN apt-get install -y container-management
+# RUN apt-get install -y kanto-auto-deployer
+
+# For container: Self Update Agent needs DBUS
+COPY dockerfiles/dbus-config.conf ./
+RUN apt-get install -y dbus
+
+COPY dockerfiles/leda-debian-test.sh ./
+CMD [ "./leda-debian-test.sh" ]
diff --git a/resources/debian/README.txt b/resources/debian/README.txt
new file mode 100644
index 0000000..aba4297
--- /dev/null
+++ b/resources/debian/README.txt
@@ -0,0 +1,36 @@
+Eclipse Leda - Debian packages
+
+Building Debian packages using BitBake to make packages installable on vanilla Debian distros (non-Poky based).
+
+1. Building the packages
+
+ Add to kas configuration:
+ PACKAGE_CLASSES += " package_deb"
+
+ Run a build
+ kas build kas/leda-qemux86-64.yaml
+
+2. Test the local repository
+
+ Run install-local-repo.sh, which will add the ./repo-root/ to the apt sources.list
+ Use apt search or apt install to install packages.
+ Note: This will install on your host!
+
+3. Create an Apt repository
+
+ Setup gpg using generate-gpg-key.sh or reuse existing
+ Run the repo-create.sh
+
+ Ensure ${PROJET_ROOT}/azure-debian/ is mounted, or adapt upload-repo.sh
+ Run the script to upload the Apt repository to a remote webserver.
+
+4. Test with Docker
+
+ Run the build-docker.sh which will build container images with predefined Apt remote repository.
+ The build will fail if it cannot install any of the SDV Core components.
+
+ Run the test-docker.sh to build for multiple target OS distros and run a small test script.
+ The test script runs Mosquitto, DBUS, containerd and container-management and will then create
+ the SDV core containers.
+
+ No functional testing is being done in this stage.
diff --git a/resources/debian/build-docker.sh b/resources/debian/build-docker.sh
new file mode 100755
index 0000000..6ec57c3
--- /dev/null
+++ b/resources/debian/build-docker.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+
+docker build --build-arg BASE_IMAGE=debian:bookworm --tag leda-debian -f Dockerfile.debian .
diff --git a/resources/debian/dockerfiles/dbus-config.conf b/resources/debian/dockerfiles/dbus-config.conf
new file mode 100644
index 0000000..f8b1c57
--- /dev/null
+++ b/resources/debian/dockerfiles/dbus-config.conf
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+ unix:path=/var/run/dbus/system_bus_socket
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/debian/dockerfiles/leda-debian-test.sh b/resources/debian/dockerfiles/leda-debian-test.sh
new file mode 100755
index 0000000..0c62fb8
--- /dev/null
+++ b/resources/debian/dockerfiles/leda-debian-test.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+
+function check() {
+ command -v $1 >/dev/null && return 0
+ type -P $1 >/dev/null&& return 0
+ [ -f /usr/bin/$1 ] && return 0
+ echo "ERROR: $1 missing"
+ exit 1
+}
+
+echo "Eclipse Leda - Debian Package Installation Tester"
+
+echo "- Checking packages, binaries and tools"
+check containerd
+check container-management
+check sdv-help
+check sdv-health
+check sdv-provision
+check sdv-kanto-ctl
+check sdv-ctr-exec
+check kantui
+check kanto-auto-deployer
+
+echo "- Starting containerd and container-management"
+mosquitto &
+sleep 1
+mkdir /var/lib/containerd
+mount -t tmpfs none /var/lib/containerd
+containerd config default | sed 's/snapshotter = "overlayfs"/snapshotter = "native"/g' | tee /etc/containerd/config.toml
+containerd &
+sleep 1
+container-management --cfg-file=/etc/container-management/config.json &
+sleep 1
+kanto-cm sysinfo
+
+# Prepare container: cloud-connector
+mkdir -p /data/var/certificates/
+touch /data/var/certificates/device.crt
+touch /data/var/certificates/device.key
+touch /data/var/certificates/ca.key
+
+# Prepare container: Fake folders and DBUS
+mkdir -p /data/selfupdates
+mkdir -p /var/run/dbus/
+dbus-daemon --config-file=dbus-config.conf --print-address &
+
+kanto-auto-deployer /var/containers/manifests/ || exit 1
+kanto-cm list
+echo "All checks succeeded."
diff --git a/resources/debian/fix-version.sh b/resources/debian/fix-version.sh
new file mode 100755
index 0000000..aac4d96
--- /dev/null
+++ b/resources/debian/fix-version.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+
+TARGET="$1"
+
+if ! dpkg-deb --field ${TARGET} Version; then
+ echo "Trying to fix version number for ${TARGET}"
+ TMPDIR=$(mktemp --directory --tmpdir)
+ echo ${TMPDIR}
+ dpkg-deb -R ${TARGET} ${TMPDIR}
+ VERSION="0.0.1"
+ sed -i -e "s,^Version: .*,Version: $VERSION," ${TMPDIR}/DEBIAN/control
+ dpkg-deb -b ${TMPDIR} ${TARGET}
+fi
diff --git a/resources/debian/generate-gpg-key.sh b/resources/debian/generate-gpg-key.sh
new file mode 100755
index 0000000..7b729ad
--- /dev/null
+++ b/resources/debian/generate-gpg-key.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+if [ ! -f gpg-unattended.conf ]; then
+ echo "Creating GPG Key - and forcing GPG to use SHA256"
+ echo "digest-algo sha256" >> ~/.gnupg/gpg.conf
+cat >gpg-unattended.conf < /etc/apt/sources.list.d/sdv.list"
+gpg --output public.key.gpg --export leda-dev@eclipse.org
+# gpg --output private.pgp --armor --export-secret-key leda-dev@eclipse.org
+# gpg --output public.pgp --armor --export leda-dev@eclipse.org
+sudo cp public.key.gpg /etc/apt/trusted.gpg.d/
+sudo apt update
+apt search leda
\ No newline at end of file
diff --git a/resources/debian/install-remote-repo.sh b/resources/debian/install-remote-repo.sh
new file mode 100755
index 0000000..d16c96f
--- /dev/null
+++ b/resources/debian/install-remote-repo.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+
+sudo bash -c "echo \"deb https://sdvyocto.blob.core.windows.net/debian dracon main\" > /etc/apt/sources.list.d/sdv.list"
+gpg --output public.key.gpg --export leda-dev@eclipse.org
+# gpg --output private.pgp --armor --export-secret-key leda-dev@eclipse.org
+# gpg --output public.pgp --armor --export leda-dev@eclipse.org
+sudo cp public.key.gpg /etc/apt/trusted.gpg.d/
+sudo apt update
+apt search leda
\ No newline at end of file
diff --git a/resources/debian/packagelist b/resources/debian/packagelist
new file mode 100644
index 0000000..40ab587
--- /dev/null
+++ b/resources/debian/packagelist
@@ -0,0 +1,21 @@
+../../build/tmp/deploy/deb/all/packagegroup-sdv-additions_1.0-r0_all.deb
+../../build/tmp/deploy/deb/all/packagegroup-sdv-airgap-containers_1.0-r0_all.deb
+../../build/tmp/deploy/deb/all/packagegroup-sdv-core_1.0-r0_all.deb
+../../build/tmp/deploy/deb/all/packagegroup-sdv-examples_1.0-r0_all.deb
+../../build/tmp/deploy/deb/all/packagegroup-sdv-tools_1.0-r0_all.deb
+../../build/tmp/deploy/deb/core2-64/container-management_0.1.0-git0+65e00358fa-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/databroker-cli_0.17.0.0+861b2ec674-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/kanto-auto-deployer_git.0+15ff12d9a7-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/kantui_git.0+5bcbef1054-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/kibi_0.2.2.0+2cc6bead72-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/leda-ota-client_git-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/leda-utils_git-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-container-cloudconnector_git-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-container-feedercan_0.1-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-container-hvacservice_0.1-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-container-seatservice_0.3-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-container-selfupdateagent_0.66-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-container-vehicleupdatemanager_git-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-kuksa-val-databroker_0.3-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-core-containers_1.0-r0_amd64.deb
+../../build/tmp/deploy/deb/core2-64/sdv-example-containers_1.0-r0_amd64.deb
diff --git a/resources/debian/public.key.gpg b/resources/debian/public.key.gpg
new file mode 100644
index 0000000..5b6c366
Binary files /dev/null and b/resources/debian/public.key.gpg differ
diff --git a/resources/debian/public.pgp b/resources/debian/public.pgp
new file mode 100644
index 0000000..3d6f4c5
--- /dev/null
+++ b/resources/debian/public.pgp
@@ -0,0 +1,149 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+1yrYMw==
+=mHhM
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/resources/debian/repo-create.sh b/resources/debian/repo-create.sh
new file mode 100755
index 0000000..eb25934
--- /dev/null
+++ b/resources/debian/repo-create.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+# /********************************************************************************
+# * Copyright (c) 2023 Contributors to the Eclipse Foundation
+# *
+# * See the NOTICE file(s) distributed with this work for additional
+# * information regarding copyright ownership.
+# *
+# * This program and the accompanying materials are made available under the
+# * terms of the Apache License 2.0 which is available at
+# * https://www.apache.org/licenses/LICENSE-2.0
+# *
+# * SPDX-License-Identifier: Apache-2.0
+# ********************************************************************************/
+
+# sudo apt install -y reprepro
+# sudo apt install -y devscripts
+
+# Todo: Get this from the latest package automatically
+OS_RELEASE="dracon"
+BASE_DIR="repo-root"
+
+KEY_ID=`gpg --list-secret-key --with-subkey-fingerprint | tail -2 | xargs`
+
+echo "GPG Key ID is: ${KEY_ID}"
+
+# Create folder suppoed to be Apache httpd Document Root
+# rm -rf ${BASE_DIR}
+
+mkdir -p ${BASE_DIR}/conf
+
+cat > ${BASE_DIR}/conf/distributions < ${BASE_DIR}/conf/options < ${BASE_DIR}/sdv.list <