Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ DOCKER_PREFIX := ${LIB_NAME}
DOCKER_TAG := ${DOCKER_PREFIX}-yocto-builder
DOCKER_SUSE_TAG := ${DOCKER_PREFIX}-open-suse-env
DOCKER_PYTHON_TAG := ${DOCKER_PREFIX}-analyzer
DOCKER_YOCTO_VM_TAG := ${DOCKER_PREFIX}-yocto-vm
DOCKER_SUSE_VM_TAG := ${DOCKER_PREFIX}-suse-vm
DOCKER_BUILD_VOLUME := ${DOCKER_PREFIX}-yocto-build
DOCKER_DOWNLOADS_VOLUME := ${DOCKER_PREFIX}-yocto-downloads
DOCKER_SSTATE_VOLUME := ${DOCKER_PREFIX}-yocto-sstate
Expand Down
51 changes: 48 additions & 3 deletions docker/compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,34 @@ services:
BUILD_DIR: ${BUILD_DIR}
POKY_DIR: ${POKY_DIR}
OS_IMAGE: ${OS_IMAGE}
VM_RAM: ${QEMU_VM_RAM}
USER: ${USER}
GROUP: ${GROUP}

imgtests-yocto-vm:
build:
dockerfile: docker/vm-yocto.dockerfile
args:
USER: ${USER}
GROUP: ${GROUP}
PASSWORD: ${PASSWORD}
POKY_DIR: ${POKY_DIR}
image: ${DOCKER_YOCTO_VM_TAG}
privileged: true
devices:
- /dev/kvm
volumes:
- ${DOCKER_BUILD_VOLUME}:${BUILD_DIR}
- ${DOCKER_DOWNLOADS_VOLUME}:${POKY_DIR}/downloads
- ${DOCKER_SSTATE_VOLUME}:${POKY_DIR}/sstate-cache
- ${HOST_CONF_PATH}/local.conf:${BUILD_DIR}/conf/local.conf
- ${HOST_CONF_PATH}/packages.conf:${BUILD_DIR}/conf/packages.conf
- ${HOST_CONF_PATH}/added_packages.conf:${BUILD_DIR}/conf/added_packages.conf
- ${HOST_LAYERS_PATH}/meta-image-tests:${POKY_DIR}/meta-image-tests
- ${HOST_SCRIPTS_PATH}/add-layers.sh:${POKY_DIR}/add-layers.sh
environment:
BUILD_DIR: ${BUILD_DIR}
POKY_DIR: ${POKY_DIR}
OS_IMAGE: ${OS_IMAGE}
CPUS: ${CPUS}
USER: ${USER}
GROUP: ${GROUP}
Expand All @@ -37,6 +64,9 @@ services:
networks:
yocto-network:
ipv4_address: ${YOCTO_ADDRESS}
depends_on:
imgtests-yocto:
condition: service_completed_successfully

imgtests-suse-156:
build:
Expand All @@ -51,13 +81,28 @@ services:
environment:
S_USER: ${S_USER}
PASSWORD: ${PASSWORD}
VM_RAM: ${QEMU_VM_RAM}
CPUS: ${CPUS}
networks:
- yocto-network

imgtests-suse-vm:
build:
dockerfile: docker/vm-suse.dockerfile
args:
USER: ${USER}
image: ${DOCKER_SUSE_VM_TAG}
privileged: true
devices:
- /dev/kvm
volumes:
- ${DOCKER_OPENSUSE_VOLUME}:${SUSE_DIR}
environment:
SSH_QEMU_PORT: ${SSH_TO_QEMU_PORT}
SSH_SUSE_PORT: ${SSH_SUSE_PORT_156}
SUSE_NE_PORT: ${SUSE_156_NE_PORT}
DEFAULT_NE_PORT: ${DEFAULT_NE_PORT}
IPERF3_PORT: ${IPERF3_PORT}
VM_RAM: ${QEMU_VM_RAM}
CPUS: ${CPUS}
ports:
- ${SSH_SUSE_PORT_156}:${SSH_SUSE_PORT_156}
networks:
Expand Down
6 changes: 4 additions & 2 deletions docker/image_builder.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,14 @@ RUN groupadd -g 510 ${GROUP} && \
echo "${USER}:${PASSWORD}" | chpasswd

USER ${USER}

RUN mkdir --parents ${POKY_DIR} && \
git clone --depth 1 -b walnascar --recurse-submodules https://git.yoctoproject.org/poky ${POKY_DIR}

WORKDIR ${POKY_DIR}

COPY --chown=${USER}:${GROUP} layers ${POKY_DIR}
COPY --chown=${USER}:${GROUP} scripts/entrypoint.sh ${POKY_DIR}/
COPY --chown=${USER}:${GROUP} scripts/cmd_yocto.sh ${POKY_DIR}/
COPY --chown=${USER}:${GROUP} scripts/entrypoint.sh ${POKY_DIR}
COPY --chown=${USER}:${GROUP} scripts/cmd_yocto.sh ${POKY_DIR}

ENTRYPOINT ["/home/user/poky/entrypoint.sh"]
3 changes: 0 additions & 3 deletions docker/open-suse.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@ ENV DEBIAN_FRONTEND=noninteractive \

RUN apt-get update && \
apt-get install -y --no-install-recommends \
qemu-system \
qemu-utils \
qemu-user-static \
cloud-init \
cloud-image-utils \
wget \
Expand Down
19 changes: 19 additions & 0 deletions docker/vm-suse.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM ubuntu:24.04

ARG USER

ENV DEBIAN_FRONTEND=noninteractive \
SUSE_DIR=/home/${USER}/suse

RUN apt-get update && \
apt-get install -y --no-install-recommends \
qemu-system \
qemu-utils \
qemu-user-static

WORKDIR ${SUSE_DIR}

COPY scripts/opensuse/start-vm.sh /start-vm.sh
RUN chmod +x /start-vm.sh

ENTRYPOINT ["/start-vm.sh"]
38 changes: 38 additions & 0 deletions docker/vm-yocto.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
FROM ubuntu:22.04

ARG USER
ARG GROUP
ARG PASSWORD
ARG POKY_DIR

ENV DEBIAN_FRONTEND=noninteractive \
LANG=en_US.UTF-8

RUN apt-get update && \
apt-get install -y --no-install-recommends \
sudo wget git locales chrpath cpio diffstat gawk \
zstd liblz4-tool python3 python3-pip tar gcc make \
bzip2 file g++ patch python3-pexpect python3-git \
python3-jinja2 python3-subunit screen \
libtirpc-dev libtirpc3 pkg-config \
qemu qemu-system-x86 qemu-utils \
openssh-server && \
rm -rf /var/lib/apt/lists/* && \
locale-gen en_US.UTF-8

RUN groupadd -g 510 ${GROUP} && \
groupadd -g 993 kvm && \
useradd -rm -d /home/${USER} -s /bin/bash -g ${GROUP} -u 1010 -G sudo,kvm ${USER} && \
echo "${USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/${USER} && \
echo "${USER}:${PASSWORD}" | chpasswd

USER ${USER}

RUN git clone --depth 1 -b walnascar --recurse-submodules https://git.yoctoproject.org/poky ${POKY_DIR}

WORKDIR ${POKY_DIR}

COPY --chown=${USER}:${GROUP} layers ${POKY_DIR}
COPY --chown=${USER}:${GROUP} scripts/start-vm-yocto.sh ${POKY_DIR}

ENTRYPOINT ["/home/user/poky/start-vm-yocto.sh"]
4 changes: 0 additions & 4 deletions scripts/cmd_yocto.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,3 @@ set -e
cd "${POKY_DIR}"
./add-layers.sh
bitbake "${OS_IMAGE}"
ROOTFS_IMAGE="${POKY_DIR}/build/tmp/deploy/images/qemux86-64/${OS_IMAGE}-qemux86-64.rootfs.ext4.qcow2"

QB_SLIRP_OPT="-netdev user,id=net0,hostfwd=tcp::8080-:80,hostfwd=tcp::${SSH_QEMU_PORT}-:${SSH_TO_QEMU_PORT},hostfwd=tcp::${YOCTO_NE_PORT}-:${DEFAULT_NE_PORT},hostfwd=tcp:0.0.0.0:${IPERF3_PORT}-:${IPERF3_PORT},hostfwd=udp:0.0.0.0:${IPERF3_PORT}-:${IPERF3_PORT}" \
runqemu qemux86-64 slirp nographic "${ROOTFS_IMAGE}" qemuparams="-monitor tcp:0.0.0.0:4444,server,nowait -smp ${CPUS}"
20 changes: 20 additions & 0 deletions scripts/opensuse/start-vm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

set -e

cd "${SUSE_DIR}"

echo "Waiting for OpenSUSE image to be ready..."
while true; do
for img in open-suse-*.ready.qcow2; do
[ -f "$img" ] && IMAGE="$img" && break 2
done
sleep 10
done

exec qemu-system-x86_64 -enable-kvm -m "${VM_RAM}" -smp "${CPUS}" -nographic \
-monitor tcp:0.0.0.0:4444,server,nowait \
-drive file="$IMAGE",index=0,media=disk \
-cdrom cloud-init.iso \
-net user,hostfwd=tcp::"${SSH_SUSE_PORT}"-:"${SSH_QEMU_PORT}",hostfwd=tcp::"${SUSE_NE_PORT}"-:"${DEFAULT_NE_PORT}",hostfwd=tcp:0.0.0.0:"${IPERF3_PORT}"-:"${IPERF3_PORT}",hostfwd=udp:0.0.0.0:"${IPERF3_PORT}"-:"${IPERF3_PORT}" \
-net nic
4 changes: 1 addition & 3 deletions scripts/opensuse/suse-compose.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,4 @@ set -e

./scripts/download_images.py "$1"
./scripts/cloud-setup.sh "${S_USER}" "${PASSWORD}"
CPUS=4
qemu-system-x86_64 -m "${VM_RAM}" -smp "${CPUS}" -nographic -monitor tcp:0.0.0.0:4444,server,nowait -drive file=open-suse-"$1".ready.qcow2,index=0,media=disk \
-cdrom cloud-init.iso -net user,hostfwd=tcp::"${SSH_SUSE_PORT}"-:"${SSH_QEMU_PORT}",hostfwd=tcp::"${SUSE_NE_PORT}"-:"${DEFAULT_NE_PORT}",hostfwd=tcp:0.0.0.0:"${IPERF3_PORT}"-:"${IPERF3_PORT}",hostfwd=udp:0.0.0.0:"${IPERF3_PORT}"-:"${IPERF3_PORT}" -net nic
echo "Image is ready. VM will be started by imgtests-suse-vm container."
11 changes: 11 additions & 0 deletions scripts/start-vm-yocto.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

rm -rf /home/user/poky/meta-openjdk-temurin/recipes-java/helloworld-java

# shellcheck disable=SC1091
source "/home/user/poky/oe-init-build-env" "/home/user/poky/build"
Comment thread
Artanias marked this conversation as resolved.

ROOTFS_IMAGE="${POKY_DIR}/build/tmp/deploy/images/qemux86-64/${OS_IMAGE}-qemux86-64.rootfs.ext4.qcow2"

QB_SLIRP_OPT="-netdev user,id=net0,hostfwd=tcp::8080-:80,hostfwd=tcp::${SSH_QEMU_PORT}-:${SSH_TO_QEMU_PORT},hostfwd=tcp::${YOCTO_NE_PORT}-:${DEFAULT_NE_PORT},hostfwd=tcp:0.0.0.0:${IPERF3_PORT}-:${IPERF3_PORT},hostfwd=udp:0.0.0.0:${IPERF3_PORT}-:${IPERF3_PORT}" \
runqemu qemux86-64 kvm slirp nographic "${ROOTFS_IMAGE}" qemuparams="-monitor tcp:0.0.0.0:4444,server,nowait -smp ${CPUS}"
Loading