FROM ubuntu:24.04 ENV PIP_BREAK_SYSTEM_PACKAGES=1 \ SHELL=/bin/bash ARG USERNAME=ft_analytics ARG USER_UID=1000 ARG USER_GID=${USER_UID} RUN if id -u "${USER_UID}" >/dev/null 2>&1; then \ userdel "$(id -un "${USER_UID}")"; \ fi \ && groupadd --gid "${USER_GID}" "${USERNAME}" \ && useradd --uid "${USER_UID}" --gid "${USER_GID}" -m "${USERNAME}" \ && apt-get update \ && apt-get install -y --no-install-recommends sudo \ && echo "${USERNAME} ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/${USERNAME} \ && chmod 0440 /etc/sudoers.d/${USERNAME} RUN apt-get update \ && apt-get install -y --no-install-recommends curl gnupg lsb-release ca-certificates RUN echo "deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list \ && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | gpg --dearmor -o /usr/share/keyrings/ros-archive-keyring.gpg RUN apt-get update \ && apt-get install -y --no-install-recommends \ ros-jazzy-ros-core \ python3-colcon-common-extensions \ python3-pip \ nano \ iproute2 \ can-utils \ python3-rosdep \ build-essential \ cmake \ kmod \ && rm -rf /var/lib/apt/lists/* RUN pip3 install --no-cache-dir --upgrade --break-system-package \ python-can cantools RUN echo "source /opt/ros/jazzy/setup.bash" >> /home/${USERNAME}/.bashrc \ && echo "source /workspaces/ft_analytics/install/setup.bash" >> /home/${USERNAME}/.bashrc WORKDIR /workspaces/ft_analytics RUN mkdir -p /workspaces/ft_analytics/ros2_ws/src COPY --chown=${USERNAME}:${USERNAME} ros2_ws/src ros2_ws/src RUN rosdep init \ && apt-get update \ && rosdep update \ && rosdep install -r --rosdistro jazzy --from-paths ros2_ws/src --ignore-src -y USER ${USERNAME} CMD ["/bin/bash"]