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 | https://opam.ocaml.org#63faea6c
# 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: https://pastebin.com/4krEV76k
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 <
[email protected]>"
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 https://raw.githubusercontent.com/ocaml/opam/2.0.2/shell/install.sh --output /tmp/opam_install.sh && \
sed -i 's/read BINDIR/BINDIR=""/' /tmp/opam_install.sh && sh /tmp/opam_install.sh && \
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