YABS Pre-Compiled Binaries
This directory contains the compilation scripts used to build the fio and iperf3 binaries that YABS uses. The binaries themselves are no longer committed to the repository - they are built automatically by GitHub Actions workflows (build-fio.yml and build-iperf3.yml) on GitHub-hosted runners and published as release assets on this repository:
fio-*releases (e.g.fio-3.42) - containfio_x64,fio_x86,fio_aarch64,fio_armiperf3-*releases (e.g.iperf3-3.21) - containiperf3_x64,iperf3_x86,iperf3_aarch64,iperf3_armtoolchainsrelease - musl cross-compilation toolchains mirrored from musl.cc (which blocks GitHub Actions IP ranges); see the NOTICE.txt asset for licensing/source info
Each binary release includes SHA-256 checksums (*-checksums.sha256), a
VirusTotal scan summary in the release notes, and the exact upstream source
tarball the binaries were built from. Binaries are cross-compiled with musl
toolchains for maximum portability.
At runtime, yabs.sh auto-detects the latest fio-*/iperf3-* release via the
repository's releases feed and downloads the appropriate binary for the host
architecture. If the lookup fails, it falls back to a pinned release tag.
Naturally, there is a security risk to your machine and its contents by running this script since, after all, this is just a script on the internet. You'll simply have to have confidence that I don't have malicious intent and am semi-competent at writing a bash script. The script and the workflows that build the binaries are public so you can look at the code yourself. The binaries are compiled using a Holy Build Box compilation environment in order to ensure the most portability. Please open an issue if the binaries are out of date and lacking any security-related and/or performance updates - the daily scheduled workflows should pick up new upstream releases automatically.
Note: ARM compatibility is considered experimental.
Compile Notes (manual builds)
The workflows above are the canonical build path. To build manually, the same scripts can be run inside a Holy Build Box container:
Pre-reqs:
- Docker - https://www.docker.com/
Compiling 64-bit (x86_64) binaries:
docker run -t -i --rm -v `pwd`:/io phusion/holy-build-box-64:latest bash /io/compile.sh
64-bit binaries will be placed in the current directory.
Cross-compiling Notes
Compilation of 32-bit and ARM-compatible binaries requires additional environment variables to identify the proper musl toolchain and architecture to target for cross-compilation.
Compiling 32-bit x86 binaries:
docker run -t -i --rm -v `pwd`:/io --env ARCH=x86 --env CROSS=i686-linux-musl --env HOST=i686-linux-musl phusion/holy-build-box-64:latest bash /io/cross-compile.sh
Compiling ARM 64-bit binaries:
docker run -t -i --rm -v `pwd`:/io --env ARCH=aarch64 --env CROSS=aarch64-linux-musl --env HOST=aarch64-linux-gnu phusion/holy-build-box-64:latest bash /io/cross-compile.sh
Compiling ARM 32-bit binaries:
docker run -t -i --rm -v `pwd`:/io --env ARCH=arm --env CROSS=arm-linux-musleabihf --env HOST=arm-linux-gnueabihf phusion/holy-build-box-64:latest bash /io/cross-compile.sh