diff --git a/docker/Dockerfile.base b/docker/Dockerfile.base index 9cccc35..b3006b5 100644 --- a/docker/Dockerfile.base +++ b/docker/Dockerfile.base @@ -31,53 +31,53 @@ SHELL ["/bin/bash", "-c"] # Ensure we have universe RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ - software-properties-common \ -&& add-apt-repository universe \ -&& apt-get update + apt-get update && apt-get install -y \ + software-properties-common \ + && add-apt-repository universe \ + && apt-get update # Fundamentals RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ - apt-transport-https \ - apt-utils \ - bash-completion \ - build-essential \ - ca-certificates \ - clang-format \ - cmake \ - curl \ - git \ - git-lfs \ - gnupg2 \ - iputils-ping \ - libgoogle-glog-dev \ - locales \ - lsb-release \ - mlocate \ - rsync \ - tar \ - unzip \ - vim \ - wget \ - zlib1g-dev + apt-get update && apt-get install -y \ + apt-transport-https \ + apt-utils \ + bash-completion \ + build-essential \ + ca-certificates \ + clang-format \ + cmake \ + curl \ + git \ + git-lfs \ + gnupg2 \ + iputils-ping \ + libgoogle-glog-dev \ + locales \ + lsb-release \ + mlocate \ + rsync \ + tar \ + unzip \ + vim \ + wget \ + zlib1g-dev # Python basics RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ - python3-dev \ - python3-distutils \ - python3-flake8 \ - python3-pip \ - python3-pybind11 \ - python3-pytest \ - python3-pytest-repeat \ - python3-pytest-rerunfailures \ - python3-pytest-cov \ - python3-venv \ - python3-zmq \ - python3.10 \ - python3.10-venv + apt-get update && apt-get install -y \ + python3-dev \ + python3-distutils \ + python3-flake8 \ + python3-pip \ + python3-pybind11 \ + python3-pytest \ + python3-pytest-repeat \ + python3-pytest-rerunfailures \ + python3-pytest-cov \ + python3-venv \ + python3-zmq \ + python3.10 \ + python3.10-venv # Set Python3 as default RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 @@ -91,104 +91,103 @@ RUN --mount=type=cache,target=/var/cache/apt \ # Core dev libraries RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ - ffmpeg \ - gfortran \ - graphicsmagick-libmagick-dev-compat \ - jq \ - kmod \ - lcov \ - libasio-dev \ - libassimp-dev \ - libatlas3-base \ - libatlas-base-dev \ - libblas3 \ - libboost-all-dev \ - libboost-dev \ - libbullet-dev \ - libceres-dev \ - libcunit1-dev \ - libffi7 \ - libfreetype6 \ - libgraphicsmagick++1-dev \ - libhidapi-libusb0 \ - libinput10 \ - libjpeg8 \ - liblapack3 \ - libmnl0 \ - libmnl-dev \ - libncurses5-dev \ - libode-dev \ - libopenblas0 \ - libopencv-dev=4.5.4+dfsg-9ubuntu4 \ - libopenmpi3 \ - libpcap-dev \ - libpcl-dev \ - libpython3.10 \ - libsuitesparse-dev \ - libtinyxml2-dev \ - libturbojpeg \ - libunwind8 \ - libv4l-0 \ - libv4l-dev \ - libx264-dev \ - libxaw7-dev \ - libyaml-cpp-dev \ - linuxptp \ - llvm-14 \ - nlohmann-json3-dev \ - patchelf \ - python3-opencv=4.5.4+dfsg-9ubuntu4 \ - python3-scipy + apt-get update && apt-get install -y \ + gfortran \ + graphicsmagick-libmagick-dev-compat \ + jq \ + kmod \ + lcov \ + libasio-dev \ + libassimp-dev \ + libatlas3-base \ + libatlas-base-dev \ + libblas3 \ + libboost-all-dev \ + libboost-dev \ + libbullet-dev \ + libceres-dev \ + libcunit1-dev \ + libffi7 \ + libfreetype6 \ + libgraphicsmagick++1-dev \ + libhidapi-libusb0 \ + libinput10 \ + libjpeg8 \ + liblapack3 \ + libmnl0 \ + libmnl-dev \ + libncurses5-dev \ + libode-dev \ + libopenblas0 \ + libopencv-dev=4.5.4+dfsg-9ubuntu4 \ + libopenmpi3 \ + libpcap-dev \ + libpcl-dev \ + libpython3.10 \ + libsuitesparse-dev \ + libtinyxml2-dev \ + libturbojpeg \ + libunwind8 \ + libv4l-0 \ + libv4l-dev \ + libx264-dev \ + libxaw7-dev \ + libyaml-cpp-dev \ + linuxptp \ + llvm-14 \ + nlohmann-json3-dev \ + patchelf \ + python3-opencv=4.5.4+dfsg-9ubuntu4 \ + python3-scipy # Downgrade to setuptools < 70.0.0 # https://github.com/pypa/setuptools/issues/4483 RUN python3 -m pip install -U \ -setuptools==65.7.0 + setuptools==65.7.0 # Python3 PIP buildtools RUN python3 -m pip install -U \ - Cython \ - ninja \ - wheel + Cython \ + ninja \ + wheel # Python3 PIP packages RUN python3 -m pip install -U \ - argcomplete \ - autopep8 \ - flake8 \ - flake8-blind-except \ - flake8-builtins \ - flake8-class-newline \ - flake8-comprehensions \ - flake8-deprecated \ - flake8-docstrings \ - flake8-import-order \ - flake8-quotes \ - gpustat==0.6.0 \ - importlib_resources \ - networkx \ - "numpy>=1.24.4,<2" \ - numpy-quaternion \ - onnx \ - pydocstyle \ - pymongo \ - pyyaml \ - "scipy>=1.7.0" \ - scikit-image \ - scikit-learn \ - "setuptools_scm>=6.2" \ - tqdm \ - trimesh \ - "warp-lang>=0.9.0" \ - "yourdfpy>=0.0.53" + argcomplete \ + autopep8 \ + flake8 \ + flake8-blind-except \ + flake8-builtins \ + flake8-class-newline \ + flake8-comprehensions \ + flake8-deprecated \ + flake8-docstrings \ + flake8-import-order \ + flake8-quotes \ + gpustat==0.6.0 \ + importlib_resources \ + networkx \ + "numpy>=1.24.4,<2" \ + numpy-quaternion \ + onnx \ + pydocstyle \ + pymongo \ + pyyaml \ + "scipy>=1.7.0" \ + scikit-image \ + scikit-learn \ + "setuptools_scm>=6.2" \ + tqdm \ + trimesh \ + "warp-lang>=0.9.0" \ + "yourdfpy>=0.0.53" # Add MQTT binaries and libraries RUN --mount=type=cache,target=/var/cache/apt \ -apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \ -&& apt-get update && apt-get install -y \ - mosquitto \ - mosquitto-clients + apt-add-repository ppa:mosquitto-dev/mosquitto-ppa \ + && apt-get update && apt-get install -y \ + mosquitto \ + mosquitto-clients # Install Node.js RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ @@ -207,32 +206,32 @@ RUN python3 -m pip install -U \ # Setup Jetson debian repositories RUN --mount=type=cache,target=/var/cache/apt \ -apt-key adv --fetch-key https://repo.download.nvidia.com/jetson/jetson-ota-public.asc ; \ -if [[ ${PLATFORM} == 'arm64' ]]; then \ + apt-key adv --fetch-key https://repo.download.nvidia.com/jetson/jetson-ota-public.asc ; \ + if [[ ${PLATFORM} == 'arm64' ]]; then \ echo 'deb https://repo.download.nvidia.com/jetson/common r36.4 main' > /etc/apt/sources.list.d/nvidia-l4t-apt-source.list \ && echo 'deb https://repo.download.nvidia.com/jetson/t234 r36.4 main' >> /etc/apt/sources.list.d/nvidia-l4t-apt-source.list ; \ -elif [[ ${PLATFORM} == 'amd64' ]]; then \ + elif [[ ${PLATFORM} == 'amd64' ]]; then \ add-apt-repository "deb http://repo.download.nvidia.com/jetson/x86_64/$(lsb_release -cs) r36.4 main" ; \ -else \ + else \ echo "Unrecognized platform: ${PLATFORM}" && exit 1 ; \ -fi ; \ -apt-get update + fi ; \ + apt-get update # Setup CUDA repositories RUN --mount=type=cache,target=/var/cache/apt \ -if [[ ${PLATFORM} == 'arm64' ]]; then \ + if [[ ${PLATFORM} == 'arm64' ]]; then \ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/arm64/cuda-keyring_1.1-1_all.deb ; \ -elif [[ ${PLATFORM} == 'amd64' ]]; then \ + elif [[ ${PLATFORM} == 'amd64' ]]; then \ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb ; \ -else \ + else \ echo "Unrecognized platform: ${PLATFORM}" && exit 1 ; \ -fi ; \ -dpkg -i cuda-keyring_1.1-1_all.deb && rm -Rf cuda-keyring_1.1-1_all.deb ; \ -apt-get update + fi ; \ + dpkg -i cuda-keyring_1.1-1_all.deb && rm -Rf cuda-keyring_1.1-1_all.deb ; \ + apt-get update # Install VPI RUN --mount=type=cache,target=/var/cache/apt \ -if [[ ${PLATFORM} == 'arm64' ]]; then \ + if [[ ${PLATFORM} == 'arm64' ]]; then \ # This is a temporary workaround required to install pva-allow-2 in docker which will not be necessary next release apt-get install pva-allow-2 || true ; \ rm /var/lib/dpkg/info/pva-allow-2.post* ; \ @@ -244,26 +243,26 @@ if [[ ${PLATFORM} == 'arm64' ]]; then \ && dpkg -i libnvvpi3_3.2.4_arm64.deb \ && dpkg -i vpi3-dev_3.2.4_arm64.deb \ && cd /tmp && rm -Rf /tmp/vpi_dev ; \ -fi ; \ -apt-get update && apt-get install -y \ + fi ; \ + apt-get update && apt-get install -y \ libnvvpi3 \ vpi3-dev # Install cuDSS RUN --mount=type=cache,target=/var/cache/apt \ -if [[ ${PLATFORM} == 'arm64' ]]; then \ + if [[ ${PLATFORM} == 'arm64' ]]; then \ wget https://developer.download.nvidia.com/compute/cudss/redist/libcudss/linux-aarch64/libcudss-linux-aarch64-0.3.0.9_cuda12-archive.tar.xz && \ tar -xvf libcudss-linux-aarch64-0.3.0.9_cuda12-archive.tar.xz -C /usr/local && \ rm libcudss-linux-aarch64-0.3.0.9_cuda12-archive.tar.xz && \ cp -r /usr/local/libcudss-linux-aarch64-0.3.0.9_cuda12-archive /usr/local/libcudss-linux-0.3.0.9_cuda12-archive ; \ -elif [[ ${PLATFORM} == 'amd64' ]]; then \ + elif [[ ${PLATFORM} == 'amd64' ]]; then \ wget https://developer.download.nvidia.com/compute/cudss/redist/libcudss/linux-x86_64/libcudss-linux-x86_64-0.3.0.9_cuda12-archive.tar.xz && \ tar -xvf libcudss-linux-x86_64-0.3.0.9_cuda12-archive.tar.xz -C /usr/local && \ rm libcudss-linux-x86_64-0.3.0.9_cuda12-archive.tar.xz && \ cp -r /usr/local/libcudss-linux-x86_64-0.3.0.9_cuda12-archive /usr/local/libcudss-linux-0.3.0.9_cuda12-archive ; \ -else \ + else \ echo "Unrecognized platform: ${PLATFORM}" && exit 1 ; \ -fi + fi # Based on cuDSS version (0.3.0.9) and architecture which is not expected to change frequently ENV CUDSS_DIR=/usr/local/libcudss-linux-0.3.0.9_cuda12-archive @@ -272,20 +271,20 @@ ENV LD_LIBRARY_PATH=$CUDSS_DIR/lib:$LD_LIBRARY_PATH # Install CV-CUDA RUN --mount=type=cache,target=/var/cache/apt \ -cd /tmp ; \ -if [[ ${PLATFORM} == 'arm64' ]]; then \ + cd /tmp ; \ + if [[ ${PLATFORM} == 'arm64' ]]; then \ wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-lib-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \ dpkg -i nvcv-lib-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \ wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-dev-0.5.0_beta_DP-cuda12-aarch64-linux.deb && \ dpkg -i nvcv-dev-0.5.0_beta_DP-cuda12-aarch64-linux.deb ; \ -elif [[ ${PLATFORM} == 'amd64' ]]; then \ + elif [[ ${PLATFORM} == 'amd64' ]]; then \ wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-lib-0.5.0_beta-cuda12-x86_64-linux.deb && \ dpkg -i nvcv-lib-0.5.0_beta-cuda12-x86_64-linux.deb && \ wget https://github.com/CVCUDA/CV-CUDA/releases/download/v0.5.0-beta/nvcv-dev-0.5.0_beta-cuda12-x86_64-linux.deb && \ dpkg -i nvcv-dev-0.5.0_beta-cuda12-x86_64-linux.deb ; \ -else \ + else \ echo "Unrecognized platform: ${PLATFORM}" && exit 1 ; \ -fi + fi # -------------------------------------------------------------------------------------------------- @@ -303,7 +302,7 @@ ENV PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/src/tensorrt/bin:${PATH # Install CUDA packages RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y --no-install-recommends --force-yes \ + apt-get update && apt-get install -y --no-install-recommends --force-yes \ cuda-cudart-12-6 \ cuda-libraries-12-6 \ cuda-nvml-dev-12-6 \ @@ -316,7 +315,7 @@ apt-get update && apt-get install -y --no-install-recommends --force-yes \ # Install TensorRT RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ + apt-get update && apt-get install -y \ libnvinfer10 \ libnvinfer-plugin10 \ libnvonnxparsers10 \ @@ -329,21 +328,21 @@ ENV TRT_INCLUDE_PATH="/usr/include/aarch64-linux-gnu" # Install pva-allow-2 as a workaround RUN --mount=type=cache,target=/var/cache/apt \ - mkdir -p /tmp/pva && cd /tmp/pva \ - && wget https://repo.download.nvidia.com/jetson/common/pool/main/p/pva-allow-2/pva-allow-2_2.0.0~rc3_all.deb \ - && dpkg -i pva-allow-2_2.0.0~rc3_all.deb || true \ - && rm /var/lib/dpkg/info/pva-allow-2.post* \ - && dpkg --configure pva-allow-2 \ - && cd /tmp && rm -Rf /tmp/pva + mkdir -p /tmp/pva && cd /tmp/pva \ + && wget https://repo.download.nvidia.com/jetson/common/pool/main/p/pva-allow-2/pva-allow-2_2.0.0~rc3_all.deb \ + && dpkg -i pva-allow-2_2.0.0~rc3_all.deb || true \ + && rm /var/lib/dpkg/info/pva-allow-2.post* \ + && dpkg --configure pva-allow-2 \ + && cd /tmp && rm -Rf /tmp/pva # PyTorch (NV CUDA edition) # https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html RUN python3 -m pip install --no-cache \ - https://developer.download.nvidia.cn/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl + https://developer.download.nvidia.cn/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y --no-install-recommends \ + apt-get update && apt-get install -y --no-install-recommends \ libb64-0d \ libre2-9 \ rapidjson-dev \ @@ -361,6 +360,9 @@ RUN --mount=type=cache,target=/var/cache/apt \ && chmod 644 /opt/tritonserver/backends/tensorflow/libtensorflow_framework.so.2 \ && rm tritonserver2.49.0-igpu.tar.gz +# Remove security vulnerability in Java examples +RUN rm -rf /opt/tritonserver/clients/java/examples + ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/tritonserver/lib" # Install boost version >= 1.78 for boost::span @@ -379,6 +381,12 @@ RUN --mount=type=cache,target=/var/cache/apt \ RUN python3 -m pip install -U \ jetson-stats +# Compile ffmpeg without gpl and nonfree +RUN apt-get install yasm && wget https://ffmpeg.org/releases/ffmpeg-4.4.2.tar.bz2 && tar xjvf ffmpeg-4.4.2.tar.bz2 && cd ffmpeg-4.4.2 && \ + ./configure --prefix=/usr --toolchain=hardened --enable-shared \ + --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 \ + --disable-stripping && make -j 4 && make install + # -------------------------------------------------------------------------------------------------- FROM common AS extended-amd64 @@ -390,20 +398,26 @@ ENV TRT_INC_PATH="/usr/include/x86_64-linux-gnu" # Install nvv4l2 for GXF Multimedia h264 codec RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ - nvv4l2 \ -&& ln -s /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so \ -&& ln -s /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so + apt-get update && apt-get install -y \ + nvv4l2 \ + && ln -s /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so \ + && ln -s /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so # Pytorch RUN python3 -m pip install -U --extra-index-url https://download.pytorch.org/whl/cu121 \ - torch \ - torchvision \ - torchaudio + torch \ + torchvision \ + torchaudio # Update environment ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/opt/tritonserver/lib" +# Compile a ffmpeg without gpl and nonfree +RUN apt-get install -y yasm && wget https://ffmpeg.org/releases/ffmpeg-4.4.2.tar.bz2 && tar xjvf ffmpeg-4.4.2.tar.bz2 && cd ffmpeg-4.4.2 && \ + ./configure --prefix=/usr --toolchain=hardened --enable-shared \ + --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 \ + --disable-stripping && make -j 4 && make install + # -------------------------------------------------------------------------------------------------- FROM extended-${PLATFORM} AS base @@ -441,10 +455,10 @@ ENV USERNAME=${USERNAME} # Install prerequisites RUN --mount=type=cache,target=/var/cache/apt \ -apt-get update && apt-get install -y \ - gosu \ - sudo \ - udev + apt-get update && apt-get install -y \ + gosu \ + sudo \ + udev # Copy scripts RUN mkdir -p /usr/local/bin/scripts diff --git a/docker/Dockerfile.ros2_humble b/docker/Dockerfile.ros2_humble index 22ca57e..e8bc073 100644 --- a/docker/Dockerfile.ros2_humble +++ b/docker/Dockerfile.ros2_humble @@ -299,12 +299,13 @@ RUN sudo sed -i '917i #ifdef GTEST_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL' /usr/ # Install MCAP CLI ARG TARGETPLATFORM +ARG MCAP_VERSION=v0.0.51 RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \ - wget https://github.com/foxglove/mcap/releases/download/releases%2Fmcap-cli%2Fv0.0.47/mcap-linux-amd64 && \ + wget https://github.com/foxglove/mcap/releases/download/releases%2Fmcap-cli%2F${MCAP_VERSION}/mcap-linux-amd64 && \ chmod +x mcap-linux-amd64 && \ mv mcap-linux-amd64 /opt/ros/humble/bin/mcap; \ elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ - wget https://github.com/foxglove/mcap/releases/download/releases%2Fmcap-cli%2Fv0.0.47/mcap-linux-arm64 && \ + wget https://github.com/foxglove/mcap/releases/download/releases%2Fmcap-cli%2F${MCAP_VERSION}/mcap-linux-arm64 && \ chmod +x mcap-linux-arm64 && \ mv mcap-linux-arm64 /opt/ros/humble/bin/mcap; \ else \