From eb5483d4a59fa76d74f883174d4b7da41094f328 Mon Sep 17 00:00:00 2001 From: Andres Montano <andres.montano@tecnalia.com> Date: Wed, 6 Nov 2024 14:20:46 +0100 Subject: [PATCH] Update Dorcker file to support image base and extended --- dockerfiles/devenv.Dockerfile | 184 +++++++++++++++++----------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/dockerfiles/devenv.Dockerfile b/dockerfiles/devenv.Dockerfile index 5126d7e..815f159 100644 --- a/dockerfiles/devenv.Dockerfile +++ b/dockerfiles/devenv.Dockerfile @@ -1,21 +1,27 @@ +# *********************************************************** +# * DEVENV Base Image for ROS * +# *********************************************************** + ARG ROS_DISTRO -FROM osrf/ros:${ROS_DISTRO}-desktop-full +FROM osrf/ros:${ROS_DISTRO}-desktop-full as devenv ENV ROS_DISTRO "${ROS_DISTRO}" ARG EXT_SHELL=bash +ENV EXT_SHELL "${EXT_SHELL}" +ENV SHELL="/bin/${SHELL}" RUN echo "Building devenv for ROS" $ROS_DISTRO "with shell" $EXT_SHELL # Avoid warnings by switching to noninteractive ENV DEBIAN_FRONTEND=noninteractive # Import the key in order to be able to use the packages from the repository -# RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7E72C5B4111A50084C63C9489E7A9B1D990CF897 # NOV - 2023 -RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4B63CF8FDE49746E98FA01DDAD19BAB3CBF125EA +# RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4B63CF8FDE49746E98FA01DDAD19BAB3CBF125EA # Setup environment RUN apt-get update && apt-get install -y apt-utils +# Setup locales RUN apt-get install -y \ locales \ && sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen en_US.UTF-8 @@ -59,7 +65,7 @@ RUN apt-get update && \ # Install zsh if requested RUN if [ "$EXT_SHELL" = "zsh" ]; \ then \ - apt-get -y install zsh; \ + apt-get -y install zsh; \ fi # Configure system to look for debian packages in the Tecnalia's artifactory repository @@ -70,12 +76,6 @@ RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt RUN sh -c "echo 'yaml https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/rosdistro/rosdep_tecnalia.yaml' \ >> /etc/ros/rosdep/sources.list.d/20-default.list" -# Create a virtual environment -# RUN apt-get install -y python3-venv -# ENV VIRTUAL_ENV=/opt/venv -# RUN python3 -m venv $VIRTUAL_ENV -# ENV PATH="$VIRTUAL_ENV/bin:$PATH" - # Copy the requirements.txt file into the container WORKDIR /tmp/dependencies/ COPY /distro_dependencies/* ./ @@ -83,76 +83,112 @@ COPY /distro_dependencies/* ./ # Install the packages listed in ${ROS_DISTRO}_requirements.txt RUN if [ -f "${ROS_DISTRO}_requirements.txt" ]; \ then \ - apt-get update && \ - # Install apt-get packages - awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs apt-get install -y && \ - # Install pip packages - export PIP_BREAK_SYSTEM_PACKAGES=1 && \ - awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install -U ;\ - apt-get clean; \ + apt-get update && \ + # Install apt-get packages + awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs apt-get install -y && \ + # Install pip packages + # workaround for ROS jazzy + export PIP_BREAK_SYSTEM_PACKAGES=1 && \ + awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install -U ;\ + apt-get clean; \ fi -RUN rm -rf * - -# Install extra packages ws_dependencies -ARG PACKAGES=none -COPY /ws_dependencies/* ./ -RUN echo $PACKAGES -RUN if [ "$PACKAGES" != "none" ]; \ - then \ - if [ -f "${PACKAGES}" ]; \ - then \ - # Install apt-get packages - apt-get update && \ - awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${PACKAGES} | grep -v '^#' | xargs apt-get install -y && \ - # Install pip packages - export PIP_BREAK_SYSTEM_PACKAGES=1 && \ - awk '/^# PIP PACKAGES/,0' ${PACKAGES} | grep -v '^#' | xargs -r -n1 pip install -U ;\ - apt-get clean; \ - fi \ - fi - -RUN rm -rf * - # Install extra libs from .deb files WORKDIR /tmp/srcs/ COPY /extra_libs/* ./ -# Enviroment tools based on ubuntu version +# Install the packages listed in common_libs.txt RUN if [ -f "common_libs.txt" ]; \ then \ - grep -v '^#' common_libs.txt | xargs wget \ - && dpkg -i *.deb; \ + # Download .deb files from common_libs.txt using wget + grep -v '^#' common_libs.txt | xargs wget \ + # Install .deb files + && dpkg -i *.deb; \ fi +# Install notify-osd RUN apt-get --reinstall install -y libnotify-bin notify-osd +RUN rm -rf * -# RUN PIP_BREAK_SYSTEM_PACKAGES=1 pip install git+https://github.com/isl-org/Open3D.git +# Update base image +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get -y autoremove \ + && apt-get -y autoclean + +# Copy entrypoint +COPY ./ros_entrypoint.sh / +RUN chmod a+x /ros_entrypoint.sh + +# Set running in docker for zsh powerlevel10k +ENV RUNNING_IN_DOCKER true + +# Set extra environment variables for ROS2 +ENV ROS_LOCALHOST_ONLY=1 +ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp + +# Define entrypoint and command +ENTRYPOINT ["/ros_entrypoint.sh"] +CMD $EXT_SHELL + +# Switch back to dialog for any ad-hoc use of apt-get +ENV DEBIAN_FRONTEND= + +# *********************************************************** +# * WORKSPACE EXTENDED * +# *********************************************************** + +# Use devenv as base image +FROM devenv as workspace-extended + +# Avoid warnings by switching to noninteractive +ENV DEBIAN_FRONTEND=noninteractive + +# Install extra packages ws_dependencies +ARG PACKAGES=none +WORKDIR /tmp/dependencies/ +COPY /ws_dependencies/* ./ +RUN if [ "$PACKAGES" != "none" ]; \ + then \ + if [ -f "${PACKAGES}" ]; \ + then \ + # Install apt-get packages + apt-get update && \ + awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${PACKAGES} | grep -v '^#' | xargs apt-get install -y && \ + # Install pip packages + export PIP_BREAK_SYSTEM_PACKAGES=1 && \ + awk '/^# PIP PACKAGES/,0' ${PACKAGES} | grep -v '^#' | xargs -r -n1 pip install -U ;\ + apt-get clean; \ + fi \ + fi + +# Install open3d from source workaround in jazzy RUN if [ "$ROS_DISTRO" = "jazzy" ]; \ then \ PIP_BREAK_SYSTEM_PACKAGES=1 pip install -U -f https://www.open3d.org/docs/latest/getting_started.html --only-binary open3d open3d; \ fi -ARG PEAK_DRIVER=install +# Install Peak driver +ARG PEAK_DRIVER=none RUN if [ "$PEAK_DRIVER" = "install" ]; \ then \ - apt-get update && apt-get install -y udev libpopt-dev linux-headers-$(uname -r) \ - && wget https://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.18.0.tar.gz \ - # && wget https://www.peak-system.com/quick/PEAK-Linux-Driver -O peak-linux-driver.tar.gz \ - && wget https://www.peak-system.com/quick/BasicLinux -O PCAN-Basic_Linux.tar.gz \ - && tar -xvf peak-linux-driver-8.18.0.tar.gz \ - && cd peak-linux-driver-8.18.0 \ - && make clean && make install || echo 'make failed but move forward'\ - && cd .. \ - && tar -xvf PCAN-Basic_Linux.tar.gz \ - && cd PCAN-Basic_Linux-4.9.0.7/libpcanbasic \ - && make clean && make install || echo 'make failed but move forward';\ + apt-get update && apt-get install -y udev libpopt-dev linux-headers-$(uname -r) \ + && wget https://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.18.0.tar.gz \ + # && wget https://www.peak-system.com/quick/PEAK-Linux-Driver -O peak-linux-driver.tar.gz \ + && wget https://www.peak-system.com/quick/BasicLinux -O PCAN-Basic_Linux.tar.gz \ + && tar -xvf peak-linux-driver-8.18.0.tar.gz \ + && cd peak-linux-driver-8.18.0 \ + && make clean && make install || echo 'make failed but move forward'\ + && cd .. \ + && tar -xvf PCAN-Basic_Linux.tar.gz \ + && cd PCAN-Basic_Linux-4.9.0.7/libpcanbasic \ + && make clean && make install || echo 'make failed but move forward';\ fi RUN rm -rf * # Update this date to re-run the image final update -LABEL image.date=30-10-2024 +LABEL image.date=06-11-2024 # Update final image RUN apt-get update \ @@ -160,41 +196,5 @@ RUN apt-get update \ && apt-get -y autoremove \ && apt-get -y autoclean -# Set entrypoint -COPY ./ros_entrypoint.sh / -RUN chmod a+x /ros_entrypoint.sh - -ENV EXT_SHELL "${EXT_SHELL}" -ENV RUNNING_IN_DOCKER true - # Switch back to dialog for any ad-hoc use of apt-get ENV DEBIAN_FRONTEND= - -# Enable localhost only ROS2 -ENV ROS_LOCALHOST_ONLY=1 -ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp - -ARG SHELL=/bin/bash -ENV SHELL="${SHELL}" - -# ARG USERNAME=danil -# ARG USER_UID=1000 -# ARG USER_GID=$USER_UID - -# # Delete user if it exists in container (e.g Ubuntu Noble: ubuntu) -# RUN if id -u $USER_UID ; then userdel `id -un $USER_UID` ; fi - -# # Create the user -# RUN groupadd --gid $USER_GID $USERNAME \ -# && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ -# # -# # [Optional] Add sudo support. Omit if you don't need to install software after connecting. -# && apt-get update \ -# && apt-get install -y sudo \ -# && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ -# && chmod 0440 /etc/sudoers.d/$USERNAME - -# USER ${USERNAME} - -ENTRYPOINT ["/ros_entrypoint.sh"] -CMD $EXT_SHELL -- GitLab