* [PATCH v1] dts: add Dockerfile @ 2022-11-03 13:46 Juraj Linkeš 2022-11-04 9:16 ` Juraj Linkeš ` (2 more replies) 0 siblings, 3 replies; 17+ messages in thread From: Juraj Linkeš @ 2022-11-03 13:46 UTC (permalink / raw) Cc: dev, Juraj Linkeš The Dockerfile defines development and CI runner images. Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> --- dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ dts/Dockerfile | 38 ++++++++++++++++++++ dts/README.md | 55 +++++++++++++++++++++++++++++ 3 files changed, 123 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..41ca28fc17 --- /dev/null +++ b/dts/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +// 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", + + "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 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..9a91949eeb --- /dev/null +++ b/dts/Dockerfile @@ -0,0 +1,38 @@ +# 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 \ + python3-pexpect \ + python3-poetry \ + python3-cachecontrol \ + openssh-client +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..fd9f32595c --- /dev/null +++ b/dts/README.md @@ -0,0 +1,55 @@ +# 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. + +```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. + +### Other +Searching for '$IDE dev containers' will probably lead you in the right direction. -- 2.30.2 ^ permalink raw reply [flat|nested] 17+ messages in thread
* RE: [PATCH v1] dts: add Dockerfile 2022-11-03 13:46 [PATCH v1] dts: add Dockerfile Juraj Linkeš @ 2022-11-04 9:16 ` Juraj Linkeš 2023-02-09 16:49 ` Patrick Robb 2023-10-17 13:52 ` Paul Szczepanek 2024-01-11 21:35 ` [PATCH v2] " jspewock 2 siblings, 1 reply; 17+ messages in thread From: Juraj Linkeš @ 2022-11-04 9:16 UTC (permalink / raw) To: Honnappa Nagarahalli, Owen Hilyard, thomas, Lijuan Tu, Richardson, Bruce Cc: dev Adding folks I forgot to add. > -----Original Message----- > From: Juraj Linkeš <juraj.linkes@pantheon.tech> > Sent: Thursday, November 3, 2022 2:47 PM > Cc: dev@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech> > Subject: [PATCH v1] dts: add Dockerfile > > The Dockerfile defines development and CI runner images. > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > --- > dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ > dts/Dockerfile | 38 ++++++++++++++++++++ > dts/README.md | 55 +++++++++++++++++++++++++++++ > 3 files changed, 123 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..41ca28fc17 > --- /dev/null > +++ b/dts/.devcontainer/devcontainer.json > @@ -0,0 +1,30 @@ > +// 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/contai > +ners/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", > + > + "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 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..9a91949eeb > --- /dev/null > +++ b/dts/Dockerfile > @@ -0,0 +1,38 @@ > +# 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 \ > + python3-pexpect \ > + python3-poetry \ > + python3-cachecontrol \ > + openssh-client > +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..fd9f32595c > --- /dev/null > +++ b/dts/README.md > @@ -0,0 +1,55 @@ > +# 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. > + > +```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. > + > +### Other > +Searching for '$IDE dev containers' will probably lead you in the right > direction. > -- > 2.30.2 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v1] dts: add Dockerfile 2022-11-04 9:16 ` Juraj Linkeš @ 2023-02-09 16:49 ` Patrick Robb 2023-04-28 19:34 ` Jeremy Spewock 0 siblings, 1 reply; 17+ messages in thread From: Patrick Robb @ 2023-02-09 16:49 UTC (permalink / raw) To: Juraj Linkeš Cc: Honnappa Nagarahalli, Owen Hilyard, thomas, Lijuan Tu, Richardson, Bruce, dev [-- Attachment #1: Type: text/plain, Size: 7797 bytes --] On Fri, Nov 4, 2022 at 5:16 AM Juraj Linkeš <juraj.linkes@pantheon.tech> wrote: > Adding folks I forgot to add. > > > -----Original Message----- > > From: Juraj Linkeš <juraj.linkes@pantheon.tech> > > Sent: Thursday, November 3, 2022 2:47 PM > > Cc: dev@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech> > > Subject: [PATCH v1] dts: add Dockerfile > > > > The Dockerfile defines development and CI runner images. > > > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > > --- > > dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ > > dts/Dockerfile | 38 ++++++++++++++++++++ > > dts/README.md | 55 +++++++++++++++++++++++++++++ > > 3 files changed, 123 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..41ca28fc17 > > --- /dev/null > > +++ b/dts/.devcontainer/devcontainer.json > > @@ -0,0 +1,30 @@ > > +// 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/contai > > +ners/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", > > + > > + "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 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..9a91949eeb > > --- /dev/null > > +++ b/dts/Dockerfile > > @@ -0,0 +1,38 @@ > > +# 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 \ > > + python3-pexpect \ > > + python3-poetry \ > > + python3-cachecontrol \ > > + openssh-client > > +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..fd9f32595c > > --- /dev/null > > +++ b/dts/README.md > > @@ -0,0 +1,55 @@ > > +# 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. > > + > > +```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. > > + > > +### Other > > +Searching for '$IDE dev containers' will probably lead you in the right > > direction. > > -- > > 2.30.2 > > Tested-by: Patrick Robb <probb@iol.unh.edu> -- Patrick Robb Technical Service Manager UNH InterOperability Laboratory 21 Madbury Rd, Suite 100, Durham, NH 03824 www.iol.unh.edu [-- Attachment #2: Type: text/html, Size: 11954 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v1] dts: add Dockerfile 2023-02-09 16:49 ` Patrick Robb @ 2023-04-28 19:34 ` Jeremy Spewock 0 siblings, 0 replies; 17+ messages in thread From: Jeremy Spewock @ 2023-04-28 19:34 UTC (permalink / raw) To: Patrick Robb Cc: Juraj Linkeš, Honnappa Nagarahalli, Owen Hilyard, thomas, Lijuan Tu, Richardson, Bruce, dev [-- Attachment #1: Type: text/plain, Size: 8179 bytes --] Acked-by: Jeremy Spweock <jspweock@iol.unh.edu> On Thu, Feb 9, 2023 at 11:49 AM Patrick Robb <probb@iol.unh.edu> wrote: > > > On Fri, Nov 4, 2022 at 5:16 AM Juraj Linkeš <juraj.linkes@pantheon.tech> > wrote: > >> Adding folks I forgot to add. >> >> > -----Original Message----- >> > From: Juraj Linkeš <juraj.linkes@pantheon.tech> >> > Sent: Thursday, November 3, 2022 2:47 PM >> > Cc: dev@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech> >> > Subject: [PATCH v1] dts: add Dockerfile >> > >> > The Dockerfile defines development and CI runner images. >> > >> > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> >> > --- >> > dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ >> > dts/Dockerfile | 38 ++++++++++++++++++++ >> > dts/README.md | 55 +++++++++++++++++++++++++++++ >> > 3 files changed, 123 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..41ca28fc17 >> > --- /dev/null >> > +++ b/dts/.devcontainer/devcontainer.json >> > @@ -0,0 +1,30 @@ >> > +// 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/contai >> > +ners/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", >> > + >> > + "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 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..9a91949eeb >> > --- /dev/null >> > +++ b/dts/Dockerfile >> > @@ -0,0 +1,38 @@ >> > +# 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 \ >> > + python3-pexpect \ >> > + python3-poetry \ >> > + python3-cachecontrol \ >> > + openssh-client >> > +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..fd9f32595c >> > --- /dev/null >> > +++ b/dts/README.md >> > @@ -0,0 +1,55 @@ >> > +# 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. >> > + >> > +```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. >> > + >> > +### Other >> > +Searching for '$IDE dev containers' will probably lead you in the right >> > direction. >> > -- >> > 2.30.2 >> >> Tested-by: Patrick Robb <probb@iol.unh.edu> > > -- > > Patrick Robb > > Technical Service Manager > > UNH InterOperability Laboratory > > 21 Madbury Rd, Suite 100, Durham, NH 03824 > > www.iol.unh.edu > > > [-- Attachment #2: Type: text/html, Size: 12399 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v1] dts: add Dockerfile 2022-11-03 13:46 [PATCH v1] dts: add Dockerfile Juraj Linkeš 2022-11-04 9:16 ` Juraj Linkeš @ 2023-10-17 13:52 ` Paul Szczepanek 2023-10-26 21:56 ` Jeremy Spewock 2024-01-11 21:35 ` [PATCH v2] " jspewock 2 siblings, 1 reply; 17+ messages in thread From: Paul Szczepanek @ 2023-10-17 13:52 UTC (permalink / raw) To: Juraj Linkeš; +Cc: nd, dev On 03/11/2022 13:46, Juraj Linkeš wrote: > The Dockerfile defines development and CI runner images. > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > Acked-by: Jeremy Spweock <jspweock@iol.unh.edu> > --- > dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ > dts/Dockerfile | 38 ++++++++++++++++++++ > dts/README.md | 55 +++++++++++++++++++++++++++++ > 3 files changed, 123 insertions(+) > create mode 100644 dts/.devcontainer/devcontainer.json > create mode 100644 dts/Dockerfile > create mode 100644 dts/README.md [..] Acked-by: Paul Szczepanek <paul.szczepanek@arm.com> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v1] dts: add Dockerfile 2023-10-17 13:52 ` Paul Szczepanek @ 2023-10-26 21:56 ` Jeremy Spewock 2023-10-27 9:19 ` Juraj Linkeš 0 siblings, 1 reply; 17+ messages in thread From: Jeremy Spewock @ 2023-10-26 21:56 UTC (permalink / raw) To: Paul Szczepanek; +Cc: Juraj Linkeš, nd, dev [-- Attachment #1: Type: text/plain, Size: 973 bytes --] I recently ran into issues using the above Dockerfile because of the version of poetry. I found that installing poetry with pip3 rather than apt fixed my issue with it. On Tue, Oct 17, 2023 at 9:52 AM Paul Szczepanek <paul.szczepanek@arm.com> wrote: > > On 03/11/2022 13:46, Juraj Linkeš wrote: > > The Dockerfile defines development and CI runner images. > > > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > > Acked-by: Jeremy Spweock <jspweock@iol.unh.edu> > > --- > > dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ > > dts/Dockerfile | 38 ++++++++++++++++++++ > > dts/README.md | 55 +++++++++++++++++++++++++++++ > > 3 files changed, 123 insertions(+) > > create mode 100644 dts/.devcontainer/devcontainer.json > > create mode 100644 dts/Dockerfile > > create mode 100644 dts/README.md > [..] > > > Acked-by: Paul Szczepanek <paul.szczepanek@arm.com> > > [-- Attachment #2: Type: text/html, Size: 1572 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v1] dts: add Dockerfile 2023-10-26 21:56 ` Jeremy Spewock @ 2023-10-27 9:19 ` Juraj Linkeš 0 siblings, 0 replies; 17+ messages in thread From: Juraj Linkeš @ 2023-10-27 9:19 UTC (permalink / raw) To: Jeremy Spewock; +Cc: Paul Szczepanek, nd, dev On Thu, Oct 26, 2023 at 11:56 PM Jeremy Spewock <jspewock@iol.unh.edu> wrote: > > I recently ran into issues using the above Dockerfile because of the version of poetry. I found that installing poetry with pip3 rather than apt fixed my issue with it. This is what have in DTS docs in doc/guides/tools/dts.rst: To install Poetry, visit their `doc pages <https://python-poetry.org/docs/>`_. The recommended Poetry version is at least 1.5.1. The Docker container may need to be updated to reflect this (or the docs, but I feel what we have in docs is sufficient) - feel free to submit a new version. > > > On Tue, Oct 17, 2023 at 9:52 AM Paul Szczepanek <paul.szczepanek@arm.com> wrote: >> >> >> On 03/11/2022 13:46, Juraj Linkeš wrote: >> > The Dockerfile defines development and CI runner images. >> > >> > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> >> > Acked-by: Jeremy Spweock <jspweock@iol.unh.edu> >> > --- >> > dts/.devcontainer/devcontainer.json | 30 ++++++++++++++++ >> > dts/Dockerfile | 38 ++++++++++++++++++++ >> > dts/README.md | 55 +++++++++++++++++++++++++++++ >> > 3 files changed, 123 insertions(+) >> > create mode 100644 dts/.devcontainer/devcontainer.json >> > create mode 100644 dts/Dockerfile >> > create mode 100644 dts/README.md >> [..] >> >> >> Acked-by: Paul Szczepanek <paul.szczepanek@arm.com> >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v2] dts: add Dockerfile 2022-11-03 13:46 [PATCH v1] dts: add Dockerfile Juraj Linkeš 2022-11-04 9:16 ` Juraj Linkeš 2023-10-17 13:52 ` Paul Szczepanek @ 2024-01-11 21:35 ` jspewock 2024-01-11 22:26 ` [PATCH v3] " jspewock 2 siblings, 1 reply; 17+ messages in thread From: jspewock @ 2024-01-11 21:35 UTC (permalink / raw) To: Honnappa.Nagarahalli, juraj.linkes, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi Cc: dev, Jeremy Spewock From: Juraj Linkeš <juraj.linkes@pantheon.tech> The Dockerfile defines development and CI runner images. Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu> --- 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. -- 2.43.0 ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v3] dts: add Dockerfile 2024-01-11 21:35 ` [PATCH v2] " jspewock @ 2024-01-11 22:26 ` jspewock 2024-01-12 10:23 ` Juraj Linkeš 2024-01-16 19:18 ` [PATCH v4] " jspewock 0 siblings, 2 replies; 17+ messages in thread From: jspewock @ 2024-01-11 22:26 UTC (permalink / raw) To: Honnappa.Nagarahalli, juraj.linkes, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi Cc: dev, Jeremy Spewock From: Juraj Linkeš <juraj.linkes@pantheon.tech> The Dockerfile defines development and CI runner images. Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu> --- v3: Remove pexpect. 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 | 38 ++++++++++++++++ dts/README.md | 70 +++++++++++++++++++++++++++++ 3 files changed, 141 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..6313cd3ded --- /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..fa4c1af10e --- /dev/null +++ b/dts/Dockerfile @@ -0,0 +1,38 @@ +# 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-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..dc88ec585e --- /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. -- 2.43.0 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v3] dts: add Dockerfile 2024-01-11 22:26 ` [PATCH v3] " jspewock @ 2024-01-12 10:23 ` Juraj Linkeš 2024-01-12 14:59 ` Jeremy Spewock 2024-01-16 19:18 ` [PATCH v4] " jspewock 1 sibling, 1 reply; 17+ messages in thread From: Juraj Linkeš @ 2024-01-12 10:23 UTC (permalink / raw) To: jspewock Cc: Honnappa.Nagarahalli, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi, dev > diff --git a/dts/.devcontainer/devcontainer.json b/dts/.devcontainer/devcontainer.json > new file mode 100644 > index 0000000000..6313cd3ded > --- /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. The next line is uncommented, we should update or remove the comment. > + "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"] Should this SSH key correspond to the user below? > + > + // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. > + // "remoteUser": "vscode" > +} <snip> > diff --git a/dts/README.md b/dts/README.md > new file mode 100644 > index 0000000000..dc88ec585e > --- /dev/null > +++ b/dts/README.md > @@ -0,0 +1,70 @@ <snip> > +#### 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 We talked about possibly baking the key into the image, but this seems safer and pretty easy to use. I understand this is tailored to the lab and I'm thinking about other possible use cases, but it seems there would only be convoluted ones (possibly with some extra security considerations, which is generally not needed for testing purposes) where this doesn't do what we want it to. I'd say this is good enough. > +$ poetry install > +$ poetry shell > +``` > + ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v3] dts: add Dockerfile 2024-01-12 10:23 ` Juraj Linkeš @ 2024-01-12 14:59 ` Jeremy Spewock 2024-01-15 9:22 ` Juraj Linkeš 0 siblings, 1 reply; 17+ messages in thread From: Jeremy Spewock @ 2024-01-12 14:59 UTC (permalink / raw) To: Juraj Linkeš Cc: Honnappa.Nagarahalli, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi, dev [-- Attachment #1: Type: text/plain, Size: 3849 bytes --] On Fri, Jan 12, 2024 at 5:23 AM Juraj Linkeš <juraj.linkes@pantheon.tech> wrote: > > diff --git a/dts/.devcontainer/devcontainer.json > b/dts/.devcontainer/devcontainer.json > > new file mode 100644 > > index 0000000000..6313cd3ded > > --- /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. > > The next line is uncommented, we should update or remove the comment. > Good catch, I'll change this. > > > + "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"] > > Should this SSH key correspond to the user below? > On one hand I agree it would be better to unify the two options, but on the other we don't make a remote user in the docker image so the option below can't be used anyway. I would be more in favor of just removing the remoteUser option and leaving this the way it is as that would line up better with what you can actually do with the container image we provide. Leaving it as a stub for something that could be done isn't a bad either though, or I could also add the remote user to the container, but I don't really see the need for a non-root user for running DTS currently. > > > + > > + // Uncomment to connect as a non-root user if you've added one. > See https://aka.ms/vscode-remote/containers/non-root. > > + // "remoteUser": "vscode" > > +} > > <snip> > > > diff --git a/dts/README.md b/dts/README.md > > new file mode 100644 > > index 0000000000..dc88ec585e > > --- /dev/null > > +++ b/dts/README.md > > @@ -0,0 +1,70 @@ > <snip> > > +#### 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 > > We talked about possibly baking the key into the image, but this seems > safer and pretty easy to use. > I understand this is tailored to the lab and I'm thinking about other > possible use cases, but it seems there would only be convoluted ones > (possibly with some extra security considerations, which is generally > not needed for testing purposes) where this doesn't do what we want it > to. I'd say this is good enough. > > > +$ poetry install > > +$ poetry shell > > +``` > > + > [-- Attachment #2: Type: text/html, Size: 5988 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v3] dts: add Dockerfile 2024-01-12 14:59 ` Jeremy Spewock @ 2024-01-15 9:22 ` Juraj Linkeš 0 siblings, 0 replies; 17+ messages in thread From: Juraj Linkeš @ 2024-01-15 9:22 UTC (permalink / raw) To: Jeremy Spewock Cc: Honnappa.Nagarahalli, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi, dev On Fri, Jan 12, 2024 at 3:59 PM Jeremy Spewock <jspewock@iol.unh.edu> wrote: > > > > On Fri, Jan 12, 2024 at 5:23 AM Juraj Linkeš <juraj.linkes@pantheon.tech> wrote: >> >> > diff --git a/dts/.devcontainer/devcontainer.json b/dts/.devcontainer/devcontainer.json >> > new file mode 100644 >> > index 0000000000..6313cd3ded >> > --- /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. >> >> The next line is uncommented, we should update or remove the comment. > > > Good catch, I'll change this. > >> >> >> > + "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"] >> >> Should this SSH key correspond to the user below? > > > On one hand I agree it would be better to unify the two options, but on the other we don't make a remote user in the docker image so the option below can't be used anyway. I would be more in favor of just removing the remoteUser option and leaving this the way it is as that would line up better with what you can actually do with the container image we provide. > > Leaving it as a stub for something that could be done isn't a bad either though, or I could also add the remote user to the container, but I don't really see the need for a non-root user for running DTS currently. > Thanks for the explanation. As there is no need for it and adding things that could be done (in other tools) seems out of scope to me, let's remove it. >> >> >> > + >> > + // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. >> > + // "remoteUser": "vscode" >> > +} >> >> <snip> >> >> > diff --git a/dts/README.md b/dts/README.md >> > new file mode 100644 >> > index 0000000000..dc88ec585e >> > --- /dev/null >> > +++ b/dts/README.md >> > @@ -0,0 +1,70 @@ >> <snip> >> > +#### 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 >> >> We talked about possibly baking the key into the image, but this seems >> safer and pretty easy to use. >> I understand this is tailored to the lab and I'm thinking about other >> possible use cases, but it seems there would only be convoluted ones >> (possibly with some extra security considerations, which is generally >> not needed for testing purposes) where this doesn't do what we want it >> to. I'd say this is good enough. >> >> >> > +$ poetry install >> > +$ poetry shell >> > +``` >> > + ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4] dts: add Dockerfile 2024-01-11 22:26 ` [PATCH v3] " jspewock 2024-01-12 10:23 ` Juraj Linkeš @ 2024-01-16 19:18 ` jspewock 2024-01-17 9:00 ` Juraj Linkeš ` (2 more replies) 1 sibling, 3 replies; 17+ messages in thread From: jspewock @ 2024-01-16 19:18 UTC (permalink / raw) To: Honnappa.Nagarahalli, juraj.linkes, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi Cc: dev, Jeremy Spewock From: Juraj Linkeš <juraj.linkes@pantheon.tech> The Dockerfile defines development and CI runner images. Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu> --- v4: Remove an example from and updated a comment in the devcontainer.json and added the --no-root flag to the README to comply with the warning message and the discussion on slack. v3: Remove pexpect. 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 | 30 +++++++++++++ dts/Dockerfile | 38 ++++++++++++++++ dts/README.md | 70 +++++++++++++++++++++++++++++ 3 files changed, 138 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..4d737f1b40 --- /dev/null +++ b/dts/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +// 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": [], + + // The next line runs commands after the container is created - in our case, installing dependencies. + "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"] +} diff --git a/dts/Dockerfile b/dts/Dockerfile new file mode 100644 index 0000000000..fa4c1af10e --- /dev/null +++ b/dts/Dockerfile @@ -0,0 +1,38 @@ +# 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-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..36c8cc9a0c --- /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 --no-root +$ 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 --no-root +$ 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. -- 2.43.0 ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4] dts: add Dockerfile 2024-01-16 19:18 ` [PATCH v4] " jspewock @ 2024-01-17 9:00 ` Juraj Linkeš 2024-02-21 3:40 ` Patrick Robb [not found] ` <CAJvnSUDDpGdxe8D-GmtbVixrrrB_GRfvS985Cw1RLx79aLcXnA@mail.gmail.com> 2 siblings, 0 replies; 17+ messages in thread From: Juraj Linkeš @ 2024-01-17 9:00 UTC (permalink / raw) To: jspewock Cc: Honnappa.Nagarahalli, thomas, wathsala.vithanage, probb, paul.szczepanek, yoan.picchi, dev Reviewed-by: Juraj Linkeš <juraj.linkes@pantheon.tech> On Tue, Jan 16, 2024 at 8:18 PM <jspewock@iol.unh.edu> wrote: > > From: Juraj Linkeš <juraj.linkes@pantheon.tech> > > The Dockerfile defines development and CI runner images. > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4] dts: add Dockerfile 2024-01-16 19:18 ` [PATCH v4] " jspewock 2024-01-17 9:00 ` Juraj Linkeš @ 2024-02-21 3:40 ` Patrick Robb 2024-03-07 10:51 ` Thomas Monjalon [not found] ` <CAJvnSUDDpGdxe8D-GmtbVixrrrB_GRfvS985Cw1RLx79aLcXnA@mail.gmail.com> 2 siblings, 1 reply; 17+ messages in thread From: Patrick Robb @ 2024-02-21 3:40 UTC (permalink / raw) To: jspewock Cc: Honnappa.Nagarahalli, juraj.linkes, thomas, wathsala.vithanage, paul.szczepanek, yoan.picchi, dev [-- Attachment #1: Type: text/plain, Size: 586 bytes --] Tested-by: Patrick Robb <probb@iol.unh.edu> The approach for mounting in ssh keys and managing the test engine environment has been agreed upon by the CI group, and this patch has been tested by a few people at the Community Lab. I believe it is ready to be merged. On Tue, Jan 16, 2024 at 2:18 PM <jspewock@iol.unh.edu> wrote: > From: Juraj Linkeš <juraj.linkes@pantheon.tech> > > The Dockerfile defines development and CI runner images. > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu> > > > [-- Attachment #2: Type: text/html, Size: 1043 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4] dts: add Dockerfile 2024-02-21 3:40 ` Patrick Robb @ 2024-03-07 10:51 ` Thomas Monjalon 0 siblings, 0 replies; 17+ messages in thread From: Thomas Monjalon @ 2024-03-07 10:51 UTC (permalink / raw) To: jspewock, juraj.linkes, Patrick Robb Cc: dev, Honnappa.Nagarahalli, wathsala.vithanage, paul.szczepanek, yoan.picchi 21/02/2024 04:40, Patrick Robb: > Tested-by: Patrick Robb <probb@iol.unh.edu> > > The approach for mounting in ssh keys and managing the test engine > environment has been agreed upon by the CI group, and this patch has been > tested by a few people at the Community Lab. I believe it is ready to be > merged. Applied, thanks. Note: few minor adjustments were made in the README and devtools. ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <CAJvnSUDDpGdxe8D-GmtbVixrrrB_GRfvS985Cw1RLx79aLcXnA@mail.gmail.com>]
* Re: [PATCH v4] dts: add Dockerfile [not found] ` <CAJvnSUDDpGdxe8D-GmtbVixrrrB_GRfvS985Cw1RLx79aLcXnA@mail.gmail.com> @ 2024-02-29 16:14 ` Nicholas Pratte 0 siblings, 0 replies; 17+ messages in thread From: Nicholas Pratte @ 2024-02-29 16:14 UTC (permalink / raw) To: dev, Jeremy Spewock [-- Attachment #1: Type: text/plain, Size: 9103 bytes --] Tested-by: Nicholas Pratte <npratte@iol.unh.edu> On Thu, Feb 29, 2024 at 10:48 AM Patrick Robb <probb@iol.unh.edu> wrote: > > > ---------- Forwarded message --------- > From: <jspewock@iol.unh.edu> > Date: Tue, Jan 16, 2024 at 2:18 PM > Subject: [PATCH v4] dts: add Dockerfile > 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 <jspewock@iol.unh.edu> > > > From: Juraj Linkeš <juraj.linkes@pantheon.tech> > > The Dockerfile defines development and CI runner images. > > Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech> > Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu> > --- > v4: > > Remove an example from and updated a comment in the devcontainer.json > and added the --no-root flag to the README to comply with the warning > message and the discussion on slack. > > v3: > > Remove pexpect. > > 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 | 30 +++++++++++++ > dts/Dockerfile | 38 ++++++++++++++++ > dts/README.md | 70 +++++++++++++++++++++++++++++ > 3 files changed, 138 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..4d737f1b40 > --- /dev/null > +++ b/dts/.devcontainer/devcontainer.json > @@ -0,0 +1,30 @@ > +// 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": [], > + > + // The next line runs commands after the container is created - in > our case, installing dependencies. > + "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"] > +} > diff --git a/dts/Dockerfile b/dts/Dockerfile > new file mode 100644 > index 0000000000..fa4c1af10e > --- /dev/null > +++ b/dts/Dockerfile > @@ -0,0 +1,38 @@ > +# 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-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..36c8cc9a0c > --- /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 --no-root > +$ 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 --no-root > +$ 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. > -- > 2.43.0 > > > [-- Attachment #2: Type: text/html, Size: 11498 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2024-03-07 10:51 UTC | newest] Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-11-03 13:46 [PATCH v1] dts: add Dockerfile Juraj Linkeš 2022-11-04 9:16 ` Juraj Linkeš 2023-02-09 16:49 ` Patrick Robb 2023-04-28 19:34 ` Jeremy Spewock 2023-10-17 13:52 ` Paul Szczepanek 2023-10-26 21:56 ` Jeremy Spewock 2023-10-27 9:19 ` Juraj Linkeš 2024-01-11 21:35 ` [PATCH v2] " jspewock 2024-01-11 22:26 ` [PATCH v3] " jspewock 2024-01-12 10:23 ` Juraj Linkeš 2024-01-12 14:59 ` Jeremy Spewock 2024-01-15 9:22 ` Juraj Linkeš 2024-01-16 19:18 ` [PATCH v4] " jspewock 2024-01-17 9:00 ` Juraj Linkeš 2024-02-21 3:40 ` Patrick Robb 2024-03-07 10:51 ` Thomas Monjalon [not found] ` <CAJvnSUDDpGdxe8D-GmtbVixrrrB_GRfvS985Cw1RLx79aLcXnA@mail.gmail.com> 2024-02-29 16:14 ` Nicholas Pratte
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).