Files

85 lines
2.1 KiB
Bash
Raw Permalink Normal View History

2026-05-08 00:04:34 +00:00
#!/bin/sh
set -eu
VERSION="${1:?usage: build_busybox.sh <version> [output_dir]}"
OUTPUT_DIR="${2:-$PWD/dist}"
PREFIX_NAME="busybox-${VERSION}-linux-amd64-musl-static"
mkdir -p "$OUTPUT_DIR"
2026-05-08 00:18:12 +00:00
apk add --no-cache \
build-base \
bzip2 \
curl \
file \
linux-headers \
tar \
xz
2026-05-08 00:04:34 +00:00
SRCDIR="${TMPDIR:-/tmp}/busybox-src-${VERSION}"
rm -rf "$SRCDIR"
mkdir -p "$SRCDIR"
2026-05-08 00:18:12 +00:00
curl -fsSL "https://busybox.net/downloads/busybox-${VERSION}.tar.bz2" \
| tar -xj -C "$SRCDIR" --strip-components=1
2026-05-08 00:04:34 +00:00
cd "$SRCDIR"
2026-05-08 00:18:12 +00:00
make allnoconfig >/dev/null
2026-05-08 00:04:34 +00:00
set_kconfig() {
key="$1"
value="$2"
if grep -q "^${key}=" .config; then
2026-05-08 00:18:12 +00:00
sed -i "s|^${key}=.*|${key}=${value}|" .config
2026-05-08 00:04:34 +00:00
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
2026-05-08 00:18:12 +00:00
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
2026-05-08 00:04:34 +00:00
set_kconfig CONFIG_FEATURE_SEAMLESS_BZ2 y
2026-05-08 00:18:12 +00:00
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
2026-05-08 00:04:34 +00:00
set_kconfig CONFIG_UNXZ y
set_kconfig CONFIG_XZ y
2026-05-08 00:18:12 +00:00
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
2026-05-08 00:04:34 +00:00
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"