mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 07:51:21 +00:00 
			
		
		
		
	tools/docker: Add Docker image support for devlib
Introduce a Dockerfile in order to create Docker image for devlib and ``run_tests.sh`` script to test Android, Linux, LocalLinux, and QEMU targets on the Docker image. The Dockerfile forks from ``Ubuntu-22.04``, installs required system packages, checks out ``master`` branch of devlib, installs devlib, creates Android virtual devices via ``tools/android/install_base.sh``, and QEMU images for aarch64 and x86_84 architectures. Note that Android command line tools version, buildroot and devlib branches can be customized via environment variables. Signed-off-by: Metin Kaya <metin.kaya@arm.com>
This commit is contained in:
		@@ -83,3 +83,27 @@ system, you may want to run commands similar to these:
 | 
			
		||||
 | 
			
		||||
See https://buildroot.org/downloads/manual/manual.html for details.
 | 
			
		||||
 | 
			
		||||
Docker support
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
A Docker image for devlib can be created via ``tools/docker/Dockerfile``.
 | 
			
		||||
 | 
			
		||||
Once the Docker image is run, ``tools/docker/run_tests.sh`` script can execute
 | 
			
		||||
tests for Android, Linux, LocalLinux, and QEMU targets.
 | 
			
		||||
 | 
			
		||||
The Dockerfile forks from ``Ubuntu-22.04``, installs required system packages,
 | 
			
		||||
checks out ``master`` branch of devlib, installs devlib, creates Android
 | 
			
		||||
virtual devices via ``tools/android/install_base.sh``, and QEMU images for
 | 
			
		||||
aarch64 and x86_84 architectures.
 | 
			
		||||
 | 
			
		||||
Version Android command line tools (``CMDLINE_VERSION``), buildroot
 | 
			
		||||
(``BUILDROOT_VERSION``) and devlib (``DEVLIB_REF``) branches can be customized
 | 
			
		||||
for the Docker image via aforementioned environment variables.
 | 
			
		||||
 | 
			
		||||
.. code:: shell
 | 
			
		||||
 | 
			
		||||
   cd tools/docker
 | 
			
		||||
   docker build -t devlib .
 | 
			
		||||
   docker run -it --privileged devlib
 | 
			
		||||
   /devlib/tools/docker/run_tests.sh
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										77
									
								
								tools/docker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								tools/docker/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
# SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2024, ARM Limited and contributors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
# not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
# http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
#
 | 
			
		||||
# This Dockerfile creates an image to run devlib CI tests.
 | 
			
		||||
#
 | 
			
		||||
# Running ``docker build -t devlib .`` command in ``tools/docker`` directory
 | 
			
		||||
# creates the docker image.
 | 
			
		||||
#
 | 
			
		||||
# The image can be runned via ``docker run -it --privileged devlib`` command.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
FROM ubuntu:22.04
 | 
			
		||||
 | 
			
		||||
ENV DEBIAN_FRONTEND noninteractive
 | 
			
		||||
 | 
			
		||||
ENV DEVLIB_REF master
 | 
			
		||||
 | 
			
		||||
RUN apt-get update && \
 | 
			
		||||
    apt-get install -y --no-install-recommends \
 | 
			
		||||
    aapt \
 | 
			
		||||
    bc \
 | 
			
		||||
    bison \
 | 
			
		||||
    build-essential \
 | 
			
		||||
    cmake \
 | 
			
		||||
    cpio \
 | 
			
		||||
    file \
 | 
			
		||||
    flex \
 | 
			
		||||
    git \
 | 
			
		||||
    libelf-dev \
 | 
			
		||||
    libncurses5-dev \
 | 
			
		||||
    libssl-dev \
 | 
			
		||||
    locales \
 | 
			
		||||
    python3-pip \
 | 
			
		||||
    qemu-system-arm \
 | 
			
		||||
    qemu-system-x86 \
 | 
			
		||||
    rsync \
 | 
			
		||||
    sudo \
 | 
			
		||||
    unzip \
 | 
			
		||||
    wget \
 | 
			
		||||
    vim \
 | 
			
		||||
    xz-utils
 | 
			
		||||
 | 
			
		||||
RUN apt-get -y autoremove && \
 | 
			
		||||
    apt-get -y autoclean && \
 | 
			
		||||
    apt-get clean && \
 | 
			
		||||
    rm -rf /var/cache/apt
 | 
			
		||||
 | 
			
		||||
RUN git clone -b ${DEVLIB_REF} -v https://github.com/ARM-software/devlib.git /devlib
 | 
			
		||||
RUN cd /devlib && \
 | 
			
		||||
    pip install --upgrade pip setuptools wheel && \
 | 
			
		||||
    pip install .[full]
 | 
			
		||||
 | 
			
		||||
# Set CMDLINE_VERSION environment variable if you want to use a specific
 | 
			
		||||
# version of Android command line tools rather than default which is
 | 
			
		||||
# ``11076708`` as of writing this comment.
 | 
			
		||||
RUN cd /devlib/tools/android && ./install_base.sh
 | 
			
		||||
 | 
			
		||||
# Set BUILDROOT_VERSION environment variable if you want to use a specific
 | 
			
		||||
# branch of buildroot rather than default which is ``2023.11.1`` as of
 | 
			
		||||
# writing this comment.
 | 
			
		||||
RUN cd /devlib/tools/buildroot && \
 | 
			
		||||
    ./generate-kernel-initrd.sh && \
 | 
			
		||||
    ./generate-kernel-initrd.sh -a x86_64
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										41
									
								
								tools/docker/run_tests.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								tools/docker/run_tests.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2024, ARM Limited and contributors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
# not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
# http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
#
 | 
			
		||||
# Prepare the groundwork and run tests/test_target.py on the Docker image.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
set -eu
 | 
			
		||||
 | 
			
		||||
ANDROID_HOME="/devlib/tools/android/android-sdk-linux"
 | 
			
		||||
export ANDROID_HOME
 | 
			
		||||
export ANDROID_USER_HOME="${ANDROID_HOME}/.android"
 | 
			
		||||
export ANDROID_EMULATOR_HOME="${ANDROID_HOME}/.android"
 | 
			
		||||
export PATH=${ANDROID_HOME}/platform-tools/:${PATH}
 | 
			
		||||
 | 
			
		||||
EMULATOR="${ANDROID_HOME}/emulator/emulator"
 | 
			
		||||
EMULATOR_ARGS="-no-window -no-snapshot -memory 2048"
 | 
			
		||||
${EMULATOR} -avd devlib-p6-12 ${EMULATOR_ARGS} &
 | 
			
		||||
${EMULATOR} -avd devlib-p6-14 ${EMULATOR_ARGS} &
 | 
			
		||||
${EMULATOR} -avd devlib-chromeos ${EMULATOR_ARGS} &
 | 
			
		||||
 | 
			
		||||
echo "Waiting 30 seconds for Android virtual devices to finish boot up..."
 | 
			
		||||
sleep 30
 | 
			
		||||
 | 
			
		||||
cd /devlib
 | 
			
		||||
cp -f tools/docker/target_configs.yaml tests/
 | 
			
		||||
python3 -m pytest --log-cli-level DEBUG ./tests/test_target.py
 | 
			
		||||
							
								
								
									
										43
									
								
								tools/docker/target_configs.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								tools/docker/target_configs.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
AndroidTarget:
 | 
			
		||||
  # Android-12, Pixel-6
 | 
			
		||||
  entry-0:
 | 
			
		||||
    timeout: 60
 | 
			
		||||
    connection_settings:
 | 
			
		||||
      device: 'emulator-5554'
 | 
			
		||||
 | 
			
		||||
  # Android-14, Pixel-6
 | 
			
		||||
  entry-1:
 | 
			
		||||
    connection_settings:
 | 
			
		||||
      device: 'emulator-5556'
 | 
			
		||||
 | 
			
		||||
  # Android-13, Pixel tablet
 | 
			
		||||
  entry-2:
 | 
			
		||||
    connection_settings:
 | 
			
		||||
      device: 'emulator-5558'
 | 
			
		||||
 | 
			
		||||
LocalLinuxTarget:
 | 
			
		||||
  entry-0:
 | 
			
		||||
    connection_settings:
 | 
			
		||||
      unrooted: True
 | 
			
		||||
 | 
			
		||||
QEMUTargetRunner:
 | 
			
		||||
  entry-0:
 | 
			
		||||
    qemu_settings:
 | 
			
		||||
      kernel_image: '/devlib/tools/buildroot/buildroot-v2023.11.1-aarch64/output/images/Image'
 | 
			
		||||
 | 
			
		||||
    ChromeOsTarget:
 | 
			
		||||
      connection_settings:
 | 
			
		||||
        device: 'emulator-5558'
 | 
			
		||||
 | 
			
		||||
  entry-1:
 | 
			
		||||
    connection_settings:
 | 
			
		||||
      port: 8023
 | 
			
		||||
 | 
			
		||||
    qemu_settings:
 | 
			
		||||
      kernel_image: '/devlib/tools/buildroot/buildroot-v2023.11.1-x86_64/output/images/bzImage'
 | 
			
		||||
      arch: 'x86_64'
 | 
			
		||||
      cmdline: 'console=ttyS0'
 | 
			
		||||
 | 
			
		||||
    ChromeOsTarget:
 | 
			
		||||
      connection_settings:
 | 
			
		||||
        device: 'emulator-5558'
 | 
			
		||||
		Reference in New Issue
	
	Block a user