6 Available Docker Images
Several Docker images are available to build Racket distributions for different platforms, especially for cross-compiling to different operating systems and architectures. These images are available from DockerHub as "racket/distro-build" plus a tag indicating the target platform.
To use one of these images, supply #:docker to machine or similar functions as shown below. For cross-build images, additional configuration arguments are needed as shown. See Cross-Build via Docker for an example.
To use many of these images to build a set of distributions like the ones on the main Racket download side, see distro-build/main-distribution.
Unless otherwise noted, each image is available for two architectures: linux/amd64 and linux/arm64 (i.e., to run on those hosts, independent of the target machine in the case of cross-compilation).
"racket/distro-build:latest": A Debian 9 environment for creating a relatively generic Linux build, available for three architectures: linux/386, linux/amd64, and linux/arm64.
#:docker "racket/distro-build"
The images are intended for a non-cross build from the perspective of the container, but using an image for an architecture other than the host’s architecture cross-builds for the image’s archiecture.
The "racket/distro-build:i386-linux", "racket/distro-build:x86_64-linux", and "racket/distro-build:aarch64-linux" images are the same as "racket/distro-build:latest", but specific to linux/386, linux/amd64, or linux/arm64 (as opposed to a multi-architecture image). These tags can be useful in an environment where you want to specify an architecture other than the host’s default and have multiple such images available.
"racket/distro-build:debian10": Like "racket/distro-build:latest", but for Debian 10.
#:docker "racket/distro-build:debian10"
The "racket/distro-build:debian10-i386-linux", "racket/distro-build:debian10-x86_64-linux", and "racket/distro-build:debian10-aarch64-linux" images are the same as "racket/distro-build:debian10", but specific to linux/386, linux/amd64, or linux/arm64.
"racket/distro-build:crosslinux-i386": For cross-building to Linux (Debian 10) for i386.
#:docker "racket/distro-build:crosslinux-i386" #:cross-target-machine "ti3le" #:cross-target "i686-linux-gnu" "racket/distro-build:crosslinux-x86_64": For cross-building to Linux (Debian 10) for x86_64.
#:docker "racket/distro-build:crosslinux-x86_64" #:cross-target-machine "ta6le" #:cross-target "x86_64-linux-gnu" "racket/distro-build:crosslinux-aarch64": For cross-building to Linux (Debian 10) for AArch64.
#:docker "racket/distro-build:crosslinux-aarch64" #:cross-target-machine "tarm64le" #:cross-target "aarch64-linux-gnu" "racket/distro-build:crosslinux-arm": For cross-building to Linux (Raspbian 10) for 32-bit ARMv6 VFP.
#:docker "racket/distro-build:crosslinux-arm" #:cross-target-machine "tarm32le" #:cross-target "arm-linux-gnueabihf" "racket/distro-build:crosslinux-arm-debian7": For cross-building to Linux (Raspbian 7) for 32-bit ARMv6 VFP. This image is available only for linux/amd64.
#:docker "racket/distro-build:crosslinux-arm-debian7" #:cross-target-machine "tarm32le" #:cross-target "arm-linux-gnueabihf" "racket/distro-build:crosslinux-riscv64": For cross-building to Linux (Debian 12) for RISC-V (RV64G).
#:docker "racket/distro-build:crosslinux-riscv64" #:cross-target-machine "trv64le" #:cross-target "riscv64-linux-gnu" "racket/distro-build:crosswin": For cross-building Windows distributions, either 32-bit x86, 64-bit x64, or 64-bit Arm. Pick the specific Windows architecture through additional configuration as shown below.
#:docker "racket/distro-build:crosswin" #:cross-target-machine "ti3nt" #:cross-target "i686-w64-mingw32" #:docker "racket/distro-build:crosswin" #:cross-target-machine "ta6nt" #:cross-target "x86_64-w64-mingw32" ; no `-g` to avoid compiler bug when building BC: #:configure '("CFLAGS=-O2") #:docker "racket/distro-build:crosswin" #:cross-target-machine "tarm64nt" #:cross-target "aarch64-w64-mingw32" "racket/distro-build:osxcross-x86_64": For cross-building Mac OS 10.9 (and up) distributions for 64-bit Intel.
#:docker "racket/distro-build:osxcross-x86_64" #:cross-target-machine "ta6osx" #:cross-target "x86_64-apple-darwin13" #:configure '("CC=x86_64-apple-darwin13-cc") ; to enable code signing: #:sign-cert-config (hash 'p12-dir ‹path_to_files› 'p12-file ‹cert_key_pair_filename› 'p12-password-file ‹cert_key_pair_filename›) ; to enable notarization: #:notarization-config (hash 'app-specific-password-dir ‹path_to_file› 'api-key-file ‹api_key_filename›) Beware that if #:sign-cert-config or #:notarization-config is added to a configuration, the Docker container will need to be recreated so that it mounts the relevant directories.
"racket/distro-build:osxcross-aarch64": For cross-building Mac OS 11 (and up) distributions for Apple Silicon.
#:docker "racket/distro-build:osxcross-aarch64" #:cross-target-machine "tarm64osx" #:cross-target "aarch64-apple-darwin20.2" #:configure '("CC=aarch64-apple-darwin20.2-cc") ; to enable code signing: #:sign-cert-config (hash 'p12-dir ‹path_to_files› 'p12-file ‹cert_key_pair_filename› 'p12-password-file ‹cert_key_pair_filename›) ; to enable notarization: #:notarization-config (hash 'app-specific-password-dir ‹path_to_file› 'api-key-file ‹api_key_filename›) Beware that if #:sign-cert-config or #:notarization-config is added to a configuration, the Docker container will need to be recreated so that it mounts the relevant directories.
"racket/distro-build:osxcross-i386": For cross-building Mac OS 10.6 (and up) distributions for 32-bit Intel.
#:docker "racket/distro-build:osxcross-i386" #:cross-target-machine "ti3osx" #:cross-target "i386-apple-darwin10" #:configure '("CC=i386-apple-darwin10-cc" ; FIXME: needed when host is x86_64: "--build=x86_64-pc-linux-gnu" ; recommended for a smaller distribution: "--disable-embedfw") "racket/distro-build:osxcross-ppc": For cross-building Mac OS 10.5 (and up) distributions for 32-bit PowerPC.
#:docker "racket/distro-build:osxcross-ppc" #:cross-target-machine "tppc32osx" #:cross-target "powerpc-apple-darwin9" ; recommended for a smaller distribution: #:configure '("--disable-embedfw")