ARG ROS_DISTRO FROM osrf/ros:${ROS_DISTRO}-desktop-full ARG EXT_SHELL=bash 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 # Setup environment RUN apt-get update && apt-get install -y apt-utils RUN apt-get install -y \ locales \ && sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 # Configure apt and install base packages RUN apt-get update && \ apt-get -y install --no-install-recommends \ apt-transport-https \ bat \ ca-certificates \ checkinstall \ clang-format clang-tidy clang-tools clang clangd\ cmake-curses-gui \ curl \ dbus-x11 \ dialog 2>&1 \ direnv \ gawk \ gdb \ git \ git-core \ git-lfs \ gnupg-agent \ iputils-ping \ less \ nano \ net-tools \ openssh-client \ python3-pip \ ripgrep \ software-properties-common \ trash-cli \ valgrind \ wget \ xterm # Install zsh if requested RUN if [ "$EXT_SHELL" = "zsh" ]; \ then \ apt-get -y install zsh; \ fi # Configure system to look for debian packages in the Tecnalia's artifactory repository COPY auth.conf /etc/apt/auth.conf.d/tecnalia.conf RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - # Configure rosdep 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/* ./ # 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 awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install ;\ 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 awk '/^# PIP PACKAGES/,0' ${PACKAGES} | grep -v '^#' | xargs -r -n1 pip install ;\ 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 RUN if [ -f "common_libs.txt" ]; \ then \ grep -v '^#' common_libs.txt | xargs wget \ && dpkg -i *.deb; \ fi RUN rm -rf * RUN apt-get --reinstall install -y libnotify-bin notify-osd 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';\ fi # Update this date to re-run the image final update LABEL image.date=14-10-2024 # Update final image RUN apt-get update \ && apt-get -y upgrade \ && apt-get -y autoremove \ && apt-get -y autoclean # Set entrypoint COPY ./ros_entrypoint.sh / RUN chmod a+x /ros_entrypoint.sh ENV ROS_DISTRO "${ROS_DISTRO}" 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}" ENTRYPOINT ["/ros_entrypoint.sh"] CMD $EXT_SHELL