#!/bin/sh set -eu VERSION="${1:?usage: build_busybox.sh [output_dir]}" OUTPUT_DIR="${2:-$PWD/dist}" PREFIX_NAME="busybox-${VERSION}-linux-amd64-musl-static" mkdir -p "$OUTPUT_DIR" apk add --no-cache \ build-base \ bzip2 \ curl \ file \ linux-headers \ tar \ xz SRCDIR="${TMPDIR:-/tmp}/busybox-src-${VERSION}" rm -rf "$SRCDIR" mkdir -p "$SRCDIR" curl -fsSL "https://busybox.net/downloads/busybox-${VERSION}.tar.bz2" \ | tar -xj -C "$SRCDIR" --strip-components=1 cd "$SRCDIR" make allnoconfig >/dev/null set_kconfig() { key="$1" value="$2" if grep -q "^${key}=" .config; then sed -i "s|^${key}=.*|${key}=${value}|" .config elif grep -q "^# ${key} is not set$" .config; then sed -i "s|^# ${key} is not set$|${key}=${value}|" .config else echo "${key}=${value}" >> .config fi } set_kconfig CONFIG_STATIC y set_kconfig CONFIG_LONG_OPTS y set_kconfig CONFIG_FEATURE_VERBOSE_USAGE y set_kconfig CONFIG_FEATURE_COMPRESS_USAGE y set_kconfig CONFIG_FEATURE_SEAMLESS_GZ y set_kconfig CONFIG_FEATURE_SEAMLESS_BZ2 y set_kconfig CONFIG_FEATURE_SEAMLESS_XZ y set_kconfig CONFIG_GUNZIP y set_kconfig CONFIG_ZCAT y set_kconfig CONFIG_BUNZIP2 y set_kconfig CONFIG_BZCAT y set_kconfig CONFIG_UNLZMA y set_kconfig CONFIG_LZCAT y set_kconfig CONFIG_UNXZ y set_kconfig CONFIG_XZ y set_kconfig CONFIG_XZCAT y set_kconfig CONFIG_GZIP y set_kconfig CONFIG_TAR y set_kconfig CONFIG_FEATURE_TAR_CREATE y set_kconfig CONFIG_FEATURE_TAR_FROM y set_kconfig CONFIG_FEATURE_TAR_GNU_EXTENSIONS y set_kconfig CONFIG_FEATURE_TAR_AUTODETECT y set_kconfig CONFIG_UNZIP y yes '' | make oldconfig >/dev/null make -j"$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2)" busybox cp busybox "$OUTPUT_DIR/$PREFIX_NAME" strip "$OUTPUT_DIR/$PREFIX_NAME" 2>/dev/null || true ( cd "$OUTPUT_DIR" tar -czf "${PREFIX_NAME}.tar.gz" "$PREFIX_NAME" sha256sum "$PREFIX_NAME" "${PREFIX_NAME}.tar.gz" > "${PREFIX_NAME}.sha256" ) file "$OUTPUT_DIR/$PREFIX_NAME" ldd "$OUTPUT_DIR/$PREFIX_NAME" || true if file "$OUTPUT_DIR/$PREFIX_NAME" | grep -qi 'dynamically linked'; then echo "error: output binary is still dynamically linked" >&2 exit 1 fi echo "build OK: $OUTPUT_DIR/$PREFIX_NAME"