linuxOS_AP05/buildroot/package/rockchip/ros2/sysroot.Dockerfile

141 lines
4.5 KiB
Docker
Raw Permalink Normal View History

2025-06-02 05:59:07 +00:00
# This file describes an image that has everything necessary installed to build a target ROS workspace
# It uses QEmu user-mode emulation to perform dependency installation and build
# Assumptions: qemu-user-static directory is present in docker build context
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
ARG ROS_VERSION
ARG ROS_DISTRO
SHELL ["/bin/bash", "-c"]
# Set timezone
RUN echo 'Etc/UTC' > /etc/timezone && \
ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime
RUN apt-get update && apt-get install --no-install-recommends -y \
tzdata \
locales \
vim \
&& rm -rf /var/lib/apt/lists/*
# Set locale
RUN echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && \
locale-gen && \
update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL C.UTF-8
# Add the ros apt repo
RUN apt-get update && apt-get install --no-install-recommends -y \
ca-certificates \
curl wget git \
dirmngr \
gnupg2 \
lsb-release \
&& rm -rf /var/lib/apt/lists/*
RUN if [[ "${ROS_VERSION}" == "ros2" ]]; then \
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg; \
echo "deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/${ROS_VERSION}/ubuntu `lsb_release -cs` main" | \
tee /etc/apt/sources.list.d/ros2.list > /dev/null; \
else \
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - ; \
echo "deb http://packages.ros.org/${ROS_VERSION}/ubuntu `lsb_release -cs` main" \
> /etc/apt/sources.list.d/${ROS_VERSION}-latest.list; \
fi
# ROS dependencies
RUN apt-get update && apt-get install --no-install-recommends -y \
build-essential \
cmake libpcre2-dev \
python3-colcon-common-extensions \
python3-colcon-mixin \
python3-dev \
python3-pip \
python3-lark-parser \
&& rm -rf /var/lib/apt/lists/*
RUN python3 -m pip install -U \
setuptools
# Install some pip packages needed for testing ROS 2
RUN if [[ "${ROS_VERSION}" == "ros2" ]]; then \
python3 -m pip install -U \
flake8 \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest \
pytest-cov \
pytest-runner \
; fi
# Install Fast-RTPS dependencies for ROS 2
RUN if [[ "${ROS_VERSION}" == "ros2" ]]; then \
apt-get update && apt-get install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev \
&& rm -rf /var/lib/apt/lists/* \
; fi
RUN python3 -m pip install -U vcstool colcon-common-extensions numpy
# Run arbitrary user setup (copy data and run script)
# COPY user-custom-data/ custom-data/
# COPY user-custom-setup .
# RUN chmod +x ./user-custom-setup && \
# ./user-custom-setup && \
# rm -rf /var/lib/apt/lists/*
# mixins defines building environments
COPY mixins /root
RUN mkdir -p /buildroot /opt/ros/${ROS_DISTRO}/src
WORKDIR /opt/ros/${ROS_DISTRO}
# Disable packages
# - rviz, X11/desktop required, if you want rviz, trying arm Ubuntu 18.04
# - turtlesim, QT5 required
RUN wget https://raw.githubusercontent.com/ros2/ros2/${ROS_DISTRO}/ros2.repos && \
vcs-import src < ros2.repos
RUN git clone https://github.com/ros2/cross_compile.git -b 0.9.0 /tmp/cross_compile && \
cp /tmp/cross_compile/ros_cross_compile/qemu/qemu-aarch64-static /usr/bin && \
cp /tmp/cross_compile/ros_cross_compile/qemu/qemu-arm-static /usr/bin && \
rm -rf /tmp/cross_compile
RUN if [[ -e src/ros-visualization ]]; then \
touch src/ros-visualization/COLCON_IGNORE ; \
echo "IGNORE ros-visualization"; \
fi
RUN if [[ -e src/ros2/rviz ]]; then \
touch src/ros2/rviz/COLCON_IGNORE ; \
echo "IGNORE ros2/rviz"; \
fi
RUN if [[ -e src/ros/ros_tutorials/turtlesim ]]; then \
touch src/ros/ros_tutorials/turtlesim/COLCON_IGNORE; \
echo "IGNORE ros_tutorials/turtlesim"; \
fi
RUN if [[ -e src/eclipse-iceoryx ]]; then \
touch src/eclipse-iceoryx/COLCON_IGNORE; \
echo "IGNORE eclipse-iceoryx"; \
fi
RUN if [[ -e src/eclipse-cyclonedds ]]; then \
touch src/eclipse-cyclonedds/COLCON_IGNORE; \
echo "IGNORE eclipse-cyclonedds"; \
fi
COPY build_ros2.sh /opt/ros/${ROS_DISTRO}
RUN ln -s /opt/ros/${ROS_DISTRO}/build_ros2.sh /root
RUN sed -i "s/^ROS_DISTRO=.*$/ROS_DISTRO=${ROS_DISTRO}/" /root/build_ros2.sh
ENTRYPOINT ["/root/build_ros2.sh"]