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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions