Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker Image to build InfiniSim #171

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

kon-foo
Copy link

@kon-foo kon-foo commented Feb 24, 2025

This PR adds a Dockerfile that allows to build InfiniSim in a pre-configured, separate environment. It follows the structure and idea of the InfiniTime Dockerfile. Furthermore instructions are added to the README.md.

@dariusarnold
Copy link

I think a devcontainer.json would increase developer benefit even more since it allows you to use the container as an pre-setup development environment (for example in VsCode or IDEs). A minimal initial version would look like this:

// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile
{
	"name": "InfiniSim Dev Container",
	"build": {
		"dockerfile": "Dockerfile"
	},

	// Configure tool-specific properties.
	"customizations": {
		"vscode": {
			// Add the IDs of extensions you want installed when the container is created.
			"extensions": [
				"ms-vscode.cpptools",
				"ms-vscode.cmake-tools",
				"marus25.cortex-debug",
				"notskm.clang-tidy",
				"mjohns.clang-format",
				"timonwong.shellcheck"
			]
		}
	},

	"mounts": [
		// Local volume to store bash history across rebuilds
		"source=projectname-bashhistory,target=/commandhistory,type=volume"
		// Uncomment and modify path to mount external InfiniTime source into the container
		//,"source=/home/example/InfiniTime,target=/workspaces/InfiniTime,type=bind,consistency=cached"
	],

	// Sudo password "it"
	"remoteUser": "infinitime"
}

I took the liberty of adapting the Dockerfile from your PR to be better suited for interactive use. This is mainly adding a non-root user with sudo password (infinitime:it) as well as git. I also added a volume to persist bash history across container rebuilds.

FROM ubuntu:22.04

# Install dependencies
ARG DEBIAN_FRONTEND=noninteractive
ARG NODE_MAJOR=20
RUN apt-get update -qq && \
    apt-get install -y \
    curl \
    cmake \
    ccache \
    libsdl2-dev \
    g++ \
    git \
    libpng-dev \
    ninja-build \
    sudo \
    python3-pip \
    python3-venv \
    && rm -rf /var/cache/apt/* /var/lib/apt/lists/* \
    && curl -sL https://deb.nodesource.com/setup_${NODE_MAJOR}.x -o nodesource_setup.sh \
    && bash nodesource_setup.sh \
    && apt-get install -y nodejs \
    && npm install -g [email protected] \
    && pip install wheel Pillow

# Add the infinitime user with sudo password "it" for developing in devcontainer
RUN adduser infinitime && echo "infinitime:it" | chpasswd && usermod -aG sudo infinitime

# Persist bash history across container rebuilds
# Reference: https://code.visualstudio.com/remote/advancedcontainers/persist-bash-history
ARG USERNAME=infinitime
RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \
    && mkdir /commandhistory \
    && touch /commandhistory/.bash_history \
    && chown -R $USERNAME /commandhistory \
    && echo "$SNIPPET" >> "/home/$USERNAME/.bashrc"

WORKDIR /sources
# Build configuration environment variables
ENV INFITIME_DIR="/sources/InfiniTime"
ENV BUILD_FLAGS=""

CMD ["bash", "-c", "cmake -S . -B build -DInfiniTime_DIR=${INFITIME_DIR} ${BUILD_FLAGS} && cmake --build build -j4"]

Both files are to be placed in the following layout:

.devcontainer/
|-- Dockerfile
`-- devcontainer.json

I tested this with VsCode and it works very well. You can open the repo in a dev container and build with CMake. With VsCode under Linux I am able to run the infinisim executable directly inside the Docker dev container.

Feel free to add any of this to your PR if you and the maintainers would like to. I like projects providing a dev environment ready with all requirements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants