Page MenuHomeVyOS Platform

Unable to build for ocaml/dune for armhf on docker and chroot
Closed, WontfixPublicENHANCEMENT


For quite som time i've tried to build ocaml/dune (required for building the docker image) using armhf on qemu and pi4.

The process failes with :

#=== ERROR while compiling dune.1.11.0 ========================================#
# context     2.0.0~rc3 | linux/arm32 | ocaml-base-compiler.4.07.0 |
# path        /opt/opam/4.07.0/.opam-switch/build/dune.1.11.0
# command     /opt/opam/4.07.0/.opam-switch/build/dune.1.11.0/./boot.exe --release -j 3
# exit-code   1
# env-file    /opt/opam/log/dune-7008-58a9f1.env
# output-file /opt/opam/log/dune-7008-58a9f1.out
### output ###
# [...]
# File "caml_startup", line 1:
# Error: Error during linking
# -> required by src/ocaml-syntax-shims/pp.exe
# -> required by install bin/ocaml-syntax-shims
# -> required by bin/.merlin
# -> required by bin/.merlin-exists
# -> required by bin/.main.objs/byte/main.cmi
# -> required by bin/.main.objs/native/main.cmx
# -> required by bin/main.a
# -> required by bin/main/main_dune.exe
# -> required by install bin/dune
# -> required by dune.install

output file:

this output is from a chroot, but it also failes on docker.

example compacted dockerfile to reproduce:

FROM multiarch/debian-debootstrap:armhf-buster-slim
#FROM multiarch/debian-debootstrap:arm64-buster-slim
LABEL authors="VyOS Maintainers <>"
ENV DEBIAN_FRONTEND noninteractive
RUN echo "dash dash/sh boolean false" | debconf-set-selections && dpkg-reconfigure dash
RUN apt-get update && apt-get install -y dialog apt-utils locales
RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
ENV LANG en_US.utf8
RUN apt-get update && apt-get install -y vim git curl make sudo devscripts autoconf automake lsb-release libtool pkg-config
#Apply fix for https in curl
RUN echo "cacert=/etc/ssl/certs/ca-certificates.crt" >> ~/.curlrc
# Building libvyosconf requires a full configured OPAM/OCaml setup
RUN apt-get update && apt-get install -y libffi-dev libpcre3-dev
RUN curl --output /tmp/ && \
    sed -i 's/read BINDIR/BINDIR=""/' /tmp/ && sh /tmp/ && \
    opam init --root=/opt/opam --comp=4.07.0 --disable-sandboxing
RUN eval $(opam env --root=/opt/opam --set-root) && opam install -y oasis
RUN eval $(opam env --root=/opt/opam --set-root) && opam install -y dune

To build for different env's replace the FROM statement in the Dockerfile
This is tested on these env's:

  • Docker on x86-64 - Works
  • Docker on Qemu-static for armhf - Fails
  • Docker on Qemu-static for arm64 - Works
  • Natively on raspbian buster (armhf) - Works
  • Docker on raspbian running armhf - Fails
  • chroot on raspbian running armhf - Fails
  • Docker on Qemu-static for armhf with jessie base - Works

This is also tested using a buster chroot (schroot) on a pi4 with raspbian.

For me it looks like it failes whenever i try to build using anything other than real-root on real-arch when building and it only occurs on buster base images. whenever i try to build inside docker or chroot it failes.
building on jessie as a base image on the other hand works quite well and i've never seen the issue there.
Also building for x86-64 or arm64 works like a charm.

Compilation is tested using ocaml 4.07.0, 4.07.1 and 4.08.0 all with the same result


Difficulty level
Unknown (require assessment)
Why the issue appeared?
Will be filled on close

Event Timeline

runar triaged this task as Normal priority.Aug 8 2019, 9:23 PM
runar created this task.

I've also tested this on the newly released dune1.11.1 with the same result

hagbard claimed this task.
hagbard added a subscriber: hagbard.

For now, it has been decided not to support arm officially, due to lack of resources.