From patchwork Thu Jan 11 21:35:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jeremy Spewock X-Patchwork-Id: 135845 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AB4E843897; Thu, 11 Jan 2024 22:35:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 26D7440269; Thu, 11 Jan 2024 22:35:59 +0100 (CET) Received: from mail-il1-f228.google.com (mail-il1-f228.google.com [209.85.166.228]) by mails.dpdk.org (Postfix) with ESMTP id 5E0C240266 for ; Thu, 11 Jan 2024 22:35:57 +0100 (CET) Received: by mail-il1-f228.google.com with SMTP id e9e14a558f8ab-36071f2181cso21672415ab.2 for ; Thu, 11 Jan 2024 13:35:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1705008956; x=1705613756; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=feKxaE8UgoiAdfBWf2UuVEa+oYURypHbUlxx8Ywssk4=; b=Fi8cv0vKJTEAkSIJ+ZMJMr8KE4VzK+WAx5bmfAY00mlMNkgb/407RBunsbVwBZKmOW jVc3EMhlgvEJwA2hycqbMjFSjfbopvah8u9fblZT70+iLeS4Rct9XnzAgziBFo18l0fh j9M4A6ATIyfTW2WXEBHP5AN+AajM4xHuzb+Xw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705008956; x=1705613756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=feKxaE8UgoiAdfBWf2UuVEa+oYURypHbUlxx8Ywssk4=; b=TDZSMro8Abtm8AC7TVAuBs3LVsflEFyjg6CnBEx5wzhJvBVsKXj8zOkXPTyUzhLxNO bPPBOHVc/qeHo7vZOfJo7eF6VLwpj8s5kV4h12ztb4dDuM/hNDtyww6wFJRktw/BPj4Z zS6ATCpmTvuay9lrFm6L1vyJU9Zb50m4LvburOPzqDA3FmEYAvONUpXG+yvJ7HlxrCh0 3WBnGYSIrr/4qfw2FnYHFoToUqZ6JmdptvhiOIP6+C2gZ73x6nmV945xurGPYT8SHluG 5bNZyWPnU8iaP3mAz59i63aWtWFMRBfuskvocDFF9eIZ3I39O7ciW6Tnx+aH81fTt8WM u+hQ== X-Gm-Message-State: AOJu0Yxv4XT3M3v38NpYPa6H5fcaGU2Zby/RafvVv20kP0lik8BpZqlQ i5asjXX5YbeIlJgc2d65NdCEuje3m1s8SCCDK/LDSCIntAVBTW1Yzkhk3z9Jywp7jSONMSNoDg= = X-Google-Smtp-Source: AGHT+IGJkkFaB66Mxtw0Inf7d/eG/Sb9b0gZs2Wuyv5ieYkIq0gKJ7Ufabwx5D5bH0TJUDzE1uNHCDGtmYOc X-Received: by 2002:a92:ddc6:0:b0:35f:ff8c:7a31 with SMTP id d6-20020a92ddc6000000b0035fff8c7a31mr302348ilr.65.1705008956556; Thu, 11 Jan 2024 13:35:56 -0800 (PST) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [2606:4100:3880:1234::84]) by smtp-relay.gmail.com with ESMTPS id l23-20020a02a897000000b0046df6bbe867sm58231jam.36.2024.01.11.13.35.56 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2024 13:35:56 -0800 (PST) X-Relaying-Domain: iol.unh.edu Received: from iol.unh.edu (unknown [IPv6:2606:4100:3880:1257::1083]) by postal.iol.unh.edu (Postfix) with ESMTP id CA6336043300; Thu, 11 Jan 2024 16:35:54 -0500 (EST) From: jspewock@iol.unh.edu To: Honnappa.Nagarahalli@arm.com, juraj.linkes@pantheon.tech, thomas@monjalon.net, wathsala.vithanage@arm.com, probb@iol.unh.edu, paul.szczepanek@arm.com, yoan.picchi@foss.arm.com Cc: dev@dpdk.org, Jeremy Spewock Subject: [PATCH v2] dts: add Dockerfile Date: Thu, 11 Jan 2024 16:35:06 -0500 Message-ID: <20240111213505.4577-2-jspewock@iol.unh.edu> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20221103134633.446646-1-juraj.linkes@pantheon.tech> References: <20221103134633.446646-1-juraj.linkes@pantheon.tech> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Juraj Linkeš The Dockerfile defines development and CI runner images. Signed-off-by: Juraj Linkeš Signed-off-by: Jeremy Spewock --- v2: This verson updates the dockerfile to instead install poetry using pipx due to the version of poetry installed using the package repositories of the distro being out of date, and to conform to documentation on installing poetry. This version also adds extra information to the README about the preference of using SSH keys, and added a way to inject them into the devcontainer for vscode. dts/.devcontainer/devcontainer.json | 33 ++++++++++++++ dts/Dockerfile | 39 ++++++++++++++++ dts/README.md | 70 +++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 dts/.devcontainer/devcontainer.json create mode 100644 dts/Dockerfile create mode 100644 dts/README.md diff --git a/dts/.devcontainer/devcontainer.json b/dts/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..7f77010428 --- /dev/null +++ b/dts/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.241.1/containers/docker-existing-dockerfile +{ + "name": "Existing Dockerfile", + + // Sets the run context to one level up instead of the .devcontainer folder. + "context": "..", + + // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. + "dockerFile": "../Dockerfile", + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Uncomment the next line to run commands after the container is created - for example installing curl. + "postCreateCommand": "poetry install --no-root", + + "extensions": [ + "ms-python.vscode-pylance", + ] + + // Uncomment when using a ptrace-based debugger like C++, Go, and Rust + // "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ], + + // Uncomment to use the Docker CLI from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker. + // "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ], + + // Uncomment to mount your SSH keys into the devcontainer used by vscode. + // "mounts": ["source=${localEnv:HOME}/.ssh,destination=/root/.ssh,type=bind,readonly"] + + // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. + // "remoteUser": "vscode" +} diff --git a/dts/Dockerfile b/dts/Dockerfile new file mode 100644 index 0000000000..46e5b1ff7e --- /dev/null +++ b/dts/Dockerfile @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2022 University of New Hampshire + +# There are two Docker images defined in this Dockerfile. +# One is to be used in CI for automated testing. +# The other provides a DTS development environment, simplifying Python dependency management. + +FROM ubuntu:22.04 AS base + +RUN apt-get -y update && apt-get -y upgrade && \ + apt-get -y install --no-install-recommends \ + python3 \ + python3-pip \ + pipx \ + python3-pexpect \ + python3-cachecontrol \ + openssh-client && \ + pipx install poetry>=1.5.1 && pipx ensurepath +WORKDIR /dpdk/dts + + +FROM base AS runner + +# This image is intended to be used as the base for automated systems. +# It bakes DTS into the image during the build. + +COPY . /dpdk/dts +RUN poetry install --no-dev + +CMD ["poetry", "run", "python", "main.py"] + +FROM base AS dev + +# This image is intended to be used as DTS development environment. It doesn't need C compilation +# capabilities, only Python dependencies. Once a container mounting DTS using this image is running, +# the dependencies should be installed using Poetry. + +RUN apt-get -y install --no-install-recommends \ + vim emacs git diff --git a/dts/README.md b/dts/README.md new file mode 100644 index 0000000000..81bd3ce120 --- /dev/null +++ b/dts/README.md @@ -0,0 +1,70 @@ +# DTS Environment +The execution and development environments for DTS are the same, a +[Docker](https://docs.docker.com/) container defined by our [Dockerfile](./Dockerfile). +Using a container for the development environment helps with a few things. + +1. It helps enforce the boundary between the DTS environment and the TG/SUT, something + which caused issues in the past. +2. It makes creating containers to run DTS inside automated tooling much easier, since + they can be based off of a known-working environment that will be updated as DTS is. +3. It abstracts DTS from the server it is running on. This means that the bare-metal os + can be whatever corporate policy or your personal preferences dictate, and DTS does + not have to try to support all distros that are supported by DPDK CI. +4. It makes automated testing for DTS easier, since new dependencies can be sent in with + the patches. +5. It fixes the issue of undocumented dependencies, where some test suites require + python libraries that are not installed. +6. Allows everyone to use the same python version easily, even if they are using a + distribution or Windows with out-of-date packages. +7. Allows you to run the tester on Windows while developing via Docker for Windows. + +## Tips for setting up a development environment + +### Getting a docker shell +These commands will give you a bash shell inside the container with all the python +dependencies installed. This will place you inside a python virtual environment. DTS is +mounted via a volume, which is essentially a symlink from the host to the container. +This enables you to edit and run inside the container and then delete the container when +you are done, keeping your work. It is also strongly recommended that you mount your SSH +keys into the container to allow you to connect to hosts without specifying a password. + +#### Start docker container with SSH keys + +```shell +docker build --target dev -t dpdk-dts . +docker run -v $(pwd)/..:/dpdk -v /home/dtsuser/.ssh:/root/.ssh:ro -it dpdk-dts bash +$ poetry install +$ poetry shell +``` + +#### Start docker container without SSH keys + +```shell +docker build --target dev -t dpdk-dts . +docker run -v $(pwd)/..:/dpdk -it dpdk-dts bash +$ poetry install +$ poetry shell +``` + +### Vim/Emacs +Any editor in the ubuntu repos should be easy to use, with vim and emacs already +installed. You can add your normal config files as a volume, enabling you to use your +preferred settings. + +```shell +docker run -v ${HOME}/.vimrc:/root/.vimrc -v $(pwd)/..:/dpdk -it dpdk-dts bash +``` + +### Visual Studio Code +VSCode has first-class support for developing with containers. You may need to run the +non-docker setup commands in the integrated terminal. DTS contains a .devcontainer +config, so if you open the folder in vscode it should prompt you to use the dev +container assuming you have the plugin installed. Please refer to +[VS Development Containers Docs](https://code.visualstudio.com/docs/remote/containers) +to set it all up. Additionally, there is a line in `.devcontainer/devcontainer.json` +that, when included, will mount the SSH keys of the user currently running vscode into +the container for you. The `source` on this line can be altered to mount any SSH keys on +the local machine into the container at the correct location. + +### Other +Searching for '$IDE dev containers' will probably lead you in the right direction.