Run pre-release jobs locally for ARM architectures

Is there a way to run pre-release jobs for a package for ARM architectures (i.e. armhf or arm64) locally? I tried to change the input parameters to generate_prerelease_script.py with no luck.

It looks like we don’t have full support for that at the moment.

When you mutate the parameters to a supported platform. Such as if you want to switch to arm64 you need to switch to debian jessie as well.
It’s not caught well but you get an error like:

$ generate_prerelease_script.py   https://raw.githubusercontent.com/ros-infrastructure/ros_buildfarm_config/production/index.yaml   kinetic default ubuntu xenial arm64   angles   --level 0   --output-dir ./
Fetching buildfarm configuration...
Fetching rosdistro cache...
Evaluating job templates...
Traceback (most recent call last):
  File "/usr/bin/generate_prerelease_script.py", line 286, in <module>
    sys.exit(main())
  File "/usr/bin/generate_prerelease_script.py", line 180, in main
    build_targets=release_targets_combined)
  File "/usr/lib/python2.7/dist-packages/ros_buildfarm/devel_job.py", line 258, in configure_devel_job
    build_file.targets[os_name][os_code_name])))
ros_buildfarm.common.JobValidationError

But once that works there appears to be some files only partially templated for debian support. So debian jessie arm64 fails. I’ve ticketed it here: https://github.com/ros-infrastructure/ros_buildfarm/issues/311

But I successfully ran a prerelease on ubuntu xenial armhf.

1 Like

Thanks Tully.

My ubuntu xenial armhf pre-release jobs fail after some initial progress with the following [docker] error:

rpc error: code = 2 desc = "oci runtime error: exec format error"

I tested the pre-release job on two different hosts (both running 64 bit Ubuntu Trusty) and got the same error. The error shows up when osrf/ubuntu_armhf is being pulled:

Build step 7
+ sleep 1
+ python3 -u /tmp/prerelease_job/ros_buildfarm/scripts/subprocess_reaper.py 8221 --cid-file /tmp/prerelease_job/docker_build_and_install/docker.cid
+ echo # BEGIN SECTION: Build Dockerfile - build and install
# BEGIN SECTION: Build Dockerfile - build and install
+ cd /tmp/prerelease_job/docker_build_and_install
+ python3 -u /tmp/prerelease_job/ros_buildfarm/scripts/misc/docker_pull_baseimage.py
Get base image name from Dockerfile 'Dockerfile': osrf/ubuntu_armhf:xenial
Check docker base image for updates: docker pull osrf/ubuntu_armhf:xenial
xenial: Pulling from osrf/ubuntu_armhf
672333315f72: Pulling fs layer
0bc83d369be1: Pulling fs layer
0bc83d369be1: Verifying Checksum
0bc83d369be1: Download complete
672333315f72: Verifying Checksum
672333315f72: Download complete
672333315f72: Pull complete
0bc83d369be1: Pull complete
Digest: sha256:453c7f833907ee9f3fa875d7ad246e9694485332cef9b507120720e03f6e8942
Status: Downloaded newer image for osrf/ubuntu_armhf:xenial
+ docker build --force-rm -t devel_build_and_install.kinetic_prerelease .
Sending build context to Docker daemon 16.38 kB
Step 1 : FROM osrf/ubuntu_armhf:xenial
 ---> 821da8bb09e7
Step 2 : MAINTAINER (removed)
 ---> Running in 13cec68abb49
 ---> 835447f1563e
Removing intermediate container 13cec68abb49
Step 3 : VOLUME /var/cache/apt/archives
 ---> Running in a3a310ea801f
 ---> 679cd5230b7b
Removing intermediate container a3a310ea801f
Step 4 : ENV DEBIAN_FRONTEND noninteractive
 ---> Running in c668b4661cbc
 ---> 0913c51e48e4
Removing intermediate container c668b4661cbc
Step 5 : RUN locale-gen en_US.UTF-8
 ---> Running in af587de0db33
Removing intermediate container af587de0db33
rpc error: code = 2 desc = "oci runtime error: exec format error"

I was seeing that error as well when I didn’t have the ‘qemu-user-static’ package installed.
Try adding the static qemu:
apt-get install qemu-user-static

1 Like

Thanks @mdhorn. It solved the issue.