Building L4T based Docker containers on GitHub

I have a bunch of L4T based containers I want to automate using Github Actions, they build locally on the latest Docker for Windows (via BuildKit), Xavier AGX and Jetson Nano. However, the same container fails when I try to run it on GitHub Ubuntu runner.

When running on Github I get an error related to processing libc6 package that doesn’t occur locally.

Error:

#5 42.67 debconf: delaying package configuration, since apt-utils is not installed
#5 42.90 Fetched 210 MB in 11s (18.7 MB/s)
#5 43.02 Error while loading /usr/local/cuda-10.2/bin/dpkg-split: No such file or directory
#5 43.03 Error while loading /usr/local/cuda-10.2/bin/dpkg-deb: No such file or directory
#5 43.03 dpkg: error processing archive /var/cache/apt/archives/libc6_2.27-3ubuntu1.4_arm64.deb (--unpack):
#5 43.03  dpkg-deb --control subprocess returned error exit status 1
#5 43.05 Errors were encountered while processing:
#5 43.05  /var/cache/apt/archives/libc6_2.27-3ubuntu1.4_arm64.deb
#5 43.20 E: Sub-process /usr/bin/dpkg returned an error code (1)
#5 ERROR: process "/dev/.buildkit_qemu_emulator /bin/sh -c apt-get update && apt-get -y --quiet --no-install-recommends install \t\tbzip2 \t\tbuild-essential \t\tca-certificates \t\tccache \t\tcmake \t\tcppcheck \t\tcurl \t\tdirmngr \t\tdoxygen \t\tfile \t\tgdb \t\tgit \t\tgnupg \t\tgosu \t\tlcov \t\tlibfreetype6-dev \t\tlibgtest-dev \t\tlibpng-dev \t\tlibpcap-dev \t\tlibpq-dev \t\tlibssl-dev \t\tlsb-release \t\tninja-build \t\topenjdk-8-jdk \t\topenjdk-8-jre \t\topenssh-client \t\tpkg-config \t\tpython3-dev \t\tpython3-pip \t\tpython3-matplotlib \t\trsync \t\tshellcheck \t\ttzdata \t\tunzip \t\tvalgrind \t\twget \t\txsltproc \t\tzip \t&& apt-get -y autoremove \t&& apt-get clean autoclean \t&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} /tmp/* /var/tmp/*" did not complete successfully: exit code: 100

Local build from Xavier AGX


debconf: delaying package configuration, since apt-utils is not installed
Fetched 210 MB in 29s (7213 kB/s)
(Reading database ... 29268 files and directories currently installed.)
Preparing to unpack .../libc6_2.27-3ubuntu1.4_arm64.deb ...
Unpacking libc6:arm64 (2.27-3ubuntu1.4) over (2.27-3ubuntu1.3) ...
Setting up libc6:arm64 (2.27-3ubuntu1.4) ...

Dockerfile: PX4-containers/Dockerfile_base-l4t at 18fb30e14e81ab7f842616d7ea932f8beff8cd1e · random82/PX4-containers · GitHub

Workflow:

name: Build & Publish ARM64 Docker images

on:
  workflow_dispatch:
    tags:
      - '*'
    branches:
      - '*'
  push:
    tags:
      - '*'
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  px4-dev-base-l4t:
    name: "Ubuntu L4T Base"
    runs-on: ubuntu-latest
    steps:
    - 
      name: Checkout
      uses: actions/checkout@v2
    - 
      name: Set up Docker Buildx
      id: buildx
      uses: docker/setup-buildx-action@v1
    - 
      name: Build container
      run: |
        cd docker
        make px4-dev-base-l4t
    - 
      name: Build & Publish container
      if: github.event_name == 'push' && (contains(github.ref, '/heads/master') || contains(github.ref, '/tags/'))
      uses: julianoes/Publish-Docker-Github-Action@master
      with:
        name: random82/px4-dev-base-l4t
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}
        dockerfile: Dockerfile_base-l4t
        cache: false
        tag_names: true
        workdir: docker

Hi,

Do you want to run an L4T-based container on an x86 host?
If yes, please do it with qemu virtualization.

Not sure if we understand your question correctly.
If not, please let us know.

Thanks.

Yes, that was my question. GitHub action workers are x86 machines.

I managed to build my image using BuildKit and tonistiigi/binfmt emulator (qemu based).
It passes but it takes 1 hour to build it on the GH agent (vs 3 minutes on Xavier AGX)

Hi,

Sorry that running an l4t-based docker on an x86 machine is still a beta feature.
It might take a long time to compile the app.

Thanks.