Skip to content

🐛 Bug Report: Cannot compile Redlib on Alpine Linux (aarch64) #550

@Sparronator9999

Description

@Sparronator9999

Describe the bug

Since Redlib switched to wreq/BoringSSL, I have not been able to compile Redlib for a Raspberry Pi 5 running Alpine Linux - the build fails when Cargo tries to compile boring-sys2.

Steps to reproduce the bug

  1. Clone the Redlib repository.
  2. Install dependencies with apk add cmake ninja-build gcc clang (from what I've read, only one of gcc or clang should be needed, but the build fails regardless).
  3. Attempt to compile with cargo build --release.
  4. The compilation fails (see pasted error below).

What's the expected behavior?

For Redlib to compile successfully when running cargo build --release from within the root of the cloned repository, assuming all dependencies are installed correctly.

Additional context / screenshot

  • The Raspberry Pi is running the latest Raspberry Pi edition of Alpine Linux (v3.23) as of writing.

  • Cargo was installed from APK, and produces the following output when running cargo --version:

cargo 1.91.1 (ea2d97820 2025-10-10) (Alpine Linux Rust 1.91.1-r1)
  • When Cargo fails to compile BoringSSL (boring-sys2?), the following error is output (username is censored), despite testing with both GCC and Clang installed:
Error output by cargo (click to expand - note that it is quite long)
warning: boring-sys2@5.0.0-alpha.13: applying 44b3df6f03d85c901767250329c571db405122d5 patch to boringssl
warning: boring-sys2@5.0.0-alpha.13: Compiler family detection failed due to error: ToolNotFound: failed to find tool "c++": No such file or directory (os error 2)
error: failed to run custom build command for `boring-sys2 v5.0.0-alpha.13`

Caused by:
  process didn't exit successfully: `/home/*****/redlib/target/release/build/boring-sys2-43e2a665c86772d2/build-script-main` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=BORING_BSSL_PATH_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_PATH_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_PATH
  cargo:rerun-if-env-changed=BORING_BSSL_PATH
  cargo:rerun-if-env-changed=BORING_BSSL_INCLUDE_PATH_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_INCLUDE_PATH_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_INCLUDE_PATH
  cargo:rerun-if-env-changed=BORING_BSSL_INCLUDE_PATH
  cargo:rerun-if-env-changed=BORING_BSSL_SOURCE_PATH_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_SOURCE_PATH_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_SOURCE_PATH
  cargo:rerun-if-env-changed=BORING_BSSL_SOURCE_PATH
  cargo:rerun-if-env-changed=BORING_BSSL_ASSUME_PATCHED_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_ASSUME_PATCHED_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_ASSUME_PATCHED
  cargo:rerun-if-env-changed=BORING_BSSL_ASSUME_PATCHED
  cargo:rerun-if-env-changed=BORING_BSSL_SYSROOT_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_SYSROOT_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_SYSROOT
  cargo:rerun-if-env-changed=BORING_BSSL_SYSROOT
  cargo:rerun-if-env-changed=BORING_BSSL_COMPILER_EXTERNAL_TOOLCHAIN_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_COMPILER_EXTERNAL_TOOLCHAIN_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_COMPILER_EXTERNAL_TOOLCHAIN
  cargo:rerun-if-env-changed=BORING_BSSL_COMPILER_EXTERNAL_TOOLCHAIN
  cargo:rerun-if-env-changed=DEBUG_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=DEBUG_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_DEBUG
  cargo:rerun-if-env-changed=DEBUG
  cargo:rerun-if-env-changed=OPT_LEVEL_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=OPT_LEVEL_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_OPT_LEVEL
  cargo:rerun-if-env-changed=OPT_LEVEL
  cargo:rerun-if-env-changed=ANDROID_NDK_HOME_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=ANDROID_NDK_HOME_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_ANDROID_NDK_HOME
  cargo:rerun-if-env-changed=ANDROID_NDK_HOME
  cargo:rerun-if-env-changed=CMAKE_TOOLCHAIN_FILE_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=CMAKE_TOOLCHAIN_FILE_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_CMAKE_TOOLCHAIN_FILE
  cargo:rerun-if-env-changed=CMAKE_TOOLCHAIN_FILE
  cargo:rerun-if-env-changed=BORING_BSSL_RUST_CPPLIB_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=BORING_BSSL_RUST_CPPLIB_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_BORING_BSSL_RUST_CPPLIB
  cargo:rerun-if-env-changed=BORING_BSSL_RUST_CPPLIB
  cargo:rerun-if-env-changed=CC_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=CC_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_CC
  cargo:rerun-if-env-changed=CXX_aarch64-alpine-linux-musl
  cargo:rerun-if-env-changed=CXX_aarch64_alpine_linux_musl
  cargo:rerun-if-env-changed=HOST_CXX
  cargo:rerun-if-env-changed=DOCS_RS
  Initialized empty Git repository in /home/*****/redlib/target/release/build/boring-sys2-ed2164a8f53ecf7b/out/boringssl/.git/
  cargo:warning=applying 44b3df6f03d85c901767250329c571db405122d5 patch to boringssl
  CMAKE_TOOLCHAIN_FILE_aarch64-alpine-linux-musl = None
  CMAKE_TOOLCHAIN_FILE_aarch64_alpine_linux_musl = None
  HOST_CMAKE_TOOLCHAIN_FILE = None
  CMAKE_TOOLCHAIN_FILE = None
  CMAKE_GENERATOR_aarch64-alpine-linux-musl = None
  CMAKE_GENERATOR_aarch64_alpine_linux_musl = None
  HOST_CMAKE_GENERATOR = None
  CMAKE_GENERATOR = None
  cargo:warning=Compiler family detection failed due to error: ToolNotFound: failed to find tool "c++": No such file or directory (os error 2)
  CMAKE_PREFIX_PATH_aarch64-alpine-linux-musl = None
  CMAKE_PREFIX_PATH_aarch64_alpine_linux_musl = None
  HOST_CMAKE_PREFIX_PATH = None
  CMAKE_PREFIX_PATH = None
  CMAKE_aarch64-alpine-linux-musl = None
  CMAKE_aarch64_alpine_linux_musl = None
  HOST_CMAKE = None
  CMAKE = None
  -- Configuring incomplete, errors occurred!

  --- stderr
  hint: Using 'master' as the name for the initial branch. This default branch name
  hint: will change to "main" in Git 3.0. To configure the initial branch name
  hint: to use in all of your new repositories, which will suppress this warning,
  hint: call:
  hint:
  hint:         git config --global init.defaultBranch <name>
  hint:
  hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
  hint: 'development'. The just-created branch can be renamed via this command:
  hint:
  hint:         git branch -m <name>
  hint:
  hint: Disable this message with "git config set advice.defaultBranchName false"
  /home/*****/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/boring-sys2-5.0.0-alpha.13/patches/boringssl-44b3df6f03d85c901767250329c571db405122d5.patch:75: trailing whitespace.
      "src/crypto/fipsmodule/fips_shared_support.c",
  /home/*****/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/boring-sys2-5.0.0-alpha.13/patches/boringssl-44b3df6f03d85c901767250329c571db405122d5.patch:76: trailing whitespace.
      "src/crypto/hpke/hpke.c",
  /home/*****/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/boring-sys2-5.0.0-alpha.13/patches/boringssl-44b3df6f03d85c901767250329c571db405122d5.patch:77: trailing whitespace.
      "src/crypto/hrss/hrss.c",
  /home/*****/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/boring-sys2-5.0.0-alpha.13/patches/boringssl-44b3df6f03d85c901767250329c571db405122d5.patch:80: trailing whitespace.
      "src/crypto/kyber/kyber512.c",
  /home/*****/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/boring-sys2-5.0.0-alpha.13/patches/boringssl-44b3df6f03d85c901767250329c571db405122d5.patch:81: trailing whitespace.
      "src/crypto/kyber/kyber768.c",
  Checking patch BUILD.generated.bzl...
  Checking patch BUILD.generated_tests.bzl...
  Checking patch CMakeLists.txt...
  Checking patch sources.json...
  Checking patch src/crypto/CMakeLists.txt...
  Checking patch src/crypto/cipher_extra/e_tls.c...
  Checking patch src/crypto/kyber/internal.h...
  Checking patch src/crypto/kyber/keccak.c...
  Checking patch src/crypto/kyber/kyber.c...
  Checking patch src/crypto/kyber/kyber1024.c...
  Checking patch src/crypto/kyber/kyber512.c...
  Checking patch src/crypto/kyber/kyber768.c...
  Checking patch src/crypto/kyber/kyber_test.cc...
  Checking patch src/crypto/obj/obj_dat.h...
  Checking patch src/crypto/obj/obj_mac.num...
  Checking patch src/crypto/obj/objects.txt...
  Checking patch src/include/openssl/aead.h...
  Checking patch src/include/openssl/kyber.h...
  Checking patch src/include/openssl/nid.h...
  Checking patch src/include/openssl/ssl.h...
  Checking patch src/include/openssl/tls1.h...
  Checking patch src/sources.cmake...
  Checking patch src/ssl/extensions.cc...
  Checking patch src/ssl/handoff.cc...
  Checking patch src/ssl/handshake_client.cc...
  Checking patch src/ssl/internal.h...
  Checking patch src/ssl/ssl_cipher.cc...
  Checking patch src/ssl/ssl_key_share.cc...
  Checking patch src/ssl/ssl_lib.cc...
  Checking patch src/ssl/ssl_privkey.cc...
  Checking patch src/ssl/ssl_test.cc...
  Checking patch src/ssl/tls13_client.cc...
  Checking patch src/ssl/tls13_server.cc...
  Checking patch src/tool/speed.cc...
  Applied patch BUILD.generated.bzl cleanly.
  Applied patch BUILD.generated_tests.bzl cleanly.
  Applied patch CMakeLists.txt cleanly.
  Applied patch sources.json cleanly.
  Applied patch src/crypto/CMakeLists.txt cleanly.
  Applied patch src/crypto/cipher_extra/e_tls.c cleanly.
  Applied patch src/crypto/kyber/internal.h cleanly.
  Applied patch src/crypto/kyber/keccak.c cleanly.
  Applied patch src/crypto/kyber/kyber.c cleanly.
  Applied patch src/crypto/kyber/kyber1024.c cleanly.
  Applied patch src/crypto/kyber/kyber512.c cleanly.
  Applied patch src/crypto/kyber/kyber768.c cleanly.
  Applied patch src/crypto/kyber/kyber_test.cc cleanly.
  Applied patch src/crypto/obj/obj_dat.h cleanly.
  Applied patch src/crypto/obj/obj_mac.num cleanly.
  Applied patch src/crypto/obj/objects.txt cleanly.
  Applied patch src/include/openssl/aead.h cleanly.
  Applied patch src/include/openssl/kyber.h cleanly.
  Applied patch src/include/openssl/nid.h cleanly.
  Applied patch src/include/openssl/ssl.h cleanly.
  Applied patch src/include/openssl/tls1.h cleanly.
  Applied patch src/sources.cmake cleanly.
  Applied patch src/ssl/extensions.cc cleanly.
  Applied patch src/ssl/handoff.cc cleanly.
  Applied patch src/ssl/handshake_client.cc cleanly.
  Applied patch src/ssl/internal.h cleanly.
  Applied patch src/ssl/ssl_cipher.cc cleanly.
  Applied patch src/ssl/ssl_key_share.cc cleanly.
  Applied patch src/ssl/ssl_lib.cc cleanly.
  Applied patch src/ssl/ssl_privkey.cc cleanly.
  Applied patch src/ssl/ssl_test.cc cleanly.
  Applied patch src/ssl/tls13_client.cc cleanly.
  Applied patch src/ssl/tls13_server.cc cleanly.
  Applied patch src/tool/speed.cc cleanly.
  warning: squelched 43 whitespace errors
  warning: 28 lines applied after fixing whitespace errors.
  running: cd "/home/*****/redlib/target/release/build/boring-sys2-ed2164a8f53ecf7b/out/build" && CMAKE_BUILD_PARALLEL_LEVEL="4" CMAKE_PREFIX_PATH="" LC_ALL="C" "cmake" "/home/*****/redlib/target/release/build/boring-sys2-ed2164a8f53ecf7b/out/boringssl" "-B" "/home/*****/redlib/target/release/build/boring-sys2-ed2164a8f53ecf7b/out/build" "-DCMAKE_INSTALL_PREFIX=/home/*****/redlib/target/release/build/boring-sys2-ed2164a8f53ecf7b/out" "-DCMAKE_C_FLAGS= -ffunction-sections -fdata-sections -fPIC -w" "-DCMAKE_C_COMPILER=/usr/bin/cc" "-DCMAKE_CXX_FLAGS= -ffunction-sections -fdata-sections -fPIC -w" "-DCMAKE_CXX_COMPILER=c++" "-DCMAKE_ASM_FLAGS= -ffunction-sections -fdata-sections -fPIC -w" "-DCMAKE_ASM_COMPILER=/usr/bin/cc" "-DCMAKE_BUILD_TYPE=Release"
  CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.

  thread 'main' (27548) panicked at /home/*****/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/cmake-0.1.58/src/lib.rs:1132:5:

  command did not execute successfully, got: exit status: 1

  build script failed, must exit now
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions