Add OpenWrt ipk packaging + split client/server binaries
Some checks failed
CI / test (push) Failing after 1m27s
Some checks failed
CI / test (push) Failing after 1m27s
OpenWrt package (deploy/openwrt/): - build-ipk.sh: creates .ipk from pre-built binary (no SDK needed) - Makefile: for OpenWrt SDK integration - ProCD init script with UCI config - Supports all architectures (x86_64, aarch64, mipsel, mips) Split binaries for embedded (src/bin/): - btest-client: client-only, no server/syslog/csv - btest-server: server-only, no client - release-small profile: opt-level=z + panic=abort Sizes (compressed .tar.gz): Full btest: ~1 MB btest-client: ~500 KB (release-small) btest-server: ~550 KB (release-small) Install on OpenWrt: opkg install btest-rs_0.6.0-1_x86_64.ipk Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
117
deploy/openwrt/build-ipk.sh
Executable file
117
deploy/openwrt/build-ipk.sh
Executable file
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build an OpenWrt .ipk package from a pre-built static binary.
|
||||
# No OpenWrt SDK needed — just packages the binary with metadata.
|
||||
#
|
||||
# Usage:
|
||||
# ./deploy/openwrt/build-ipk.sh <arch> [binary-path]
|
||||
#
|
||||
# Examples:
|
||||
# ./deploy/openwrt/build-ipk.sh x86_64 dist/btest # from cross-compiled binary
|
||||
# ./deploy/openwrt/build-ipk.sh aarch64 dist/btest # for RPi/ARM64 routers
|
||||
# ./deploy/openwrt/build-ipk.sh mipsel target/release/btest # for MIPS little-endian
|
||||
#
|
||||
# Supported architectures: x86_64, aarch64, arm_cortex-a7, mipsel_24kc, mips_24kc
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")/../.."
|
||||
|
||||
ARCH="${1:?Usage: $0 <arch> [binary-path]}"
|
||||
BINARY="${2:-dist/btest}"
|
||||
VERSION="0.6.0"
|
||||
PKG_NAME="btest-rs"
|
||||
OUTPUT_DIR="dist"
|
||||
|
||||
if [ ! -f "$BINARY" ]; then
|
||||
echo "Error: binary not found at $BINARY"
|
||||
echo "Build it first: cargo build --release --target <target>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
WORKDIR=$(mktemp -d)
|
||||
trap "rm -rf $WORKDIR" EXIT
|
||||
|
||||
echo "=== Building ${PKG_NAME}_${VERSION}_${ARCH}.ipk ==="
|
||||
|
||||
# Create package structure
|
||||
mkdir -p "$WORKDIR/data/usr/bin"
|
||||
mkdir -p "$WORKDIR/data/etc/init.d"
|
||||
mkdir -p "$WORKDIR/data/etc/config"
|
||||
mkdir -p "$WORKDIR/control"
|
||||
|
||||
# Install files
|
||||
cp "$BINARY" "$WORKDIR/data/usr/bin/btest"
|
||||
chmod 755 "$WORKDIR/data/usr/bin/btest"
|
||||
cp deploy/openwrt/files/btest.init "$WORKDIR/data/etc/init.d/btest"
|
||||
chmod 755 "$WORKDIR/data/etc/init.d/btest"
|
||||
cp deploy/openwrt/files/btest.config "$WORKDIR/data/etc/config/btest"
|
||||
|
||||
# Calculate installed size
|
||||
INSTALLED_SIZE=$(du -sk "$WORKDIR/data" | awk '{print $1}')
|
||||
|
||||
# Control file
|
||||
cat > "$WORKDIR/control/control" << EOF
|
||||
Package: ${PKG_NAME}
|
||||
Version: ${VERSION}-1
|
||||
Depends: libc
|
||||
Source: https://github.com/manawenuz/btest-rs
|
||||
License: MIT AND Apache-2.0
|
||||
Section: net
|
||||
SourceName: ${PKG_NAME}
|
||||
Maintainer: Siavash Sameni <manwe@manko.yoga>
|
||||
Architecture: ${ARCH}
|
||||
Installed-Size: ${INSTALLED_SIZE}
|
||||
Description: MikroTik Bandwidth Test server and client
|
||||
A Rust reimplementation of the MikroTik btest protocol.
|
||||
Supports TCP/UDP, EC-SRP5 and MD5 auth, IPv4/IPv6.
|
||||
EOF
|
||||
|
||||
# Post-install script
|
||||
cat > "$WORKDIR/control/postinst" << 'EOF'
|
||||
#!/bin/sh
|
||||
[ "${IPKG_NO_SCRIPT}" = "1" ] && exit 0
|
||||
/etc/init.d/btest enable 2>/dev/null || true
|
||||
exit 0
|
||||
EOF
|
||||
chmod 755 "$WORKDIR/control/postinst"
|
||||
|
||||
# Pre-remove script
|
||||
cat > "$WORKDIR/control/prerm" << 'EOF'
|
||||
#!/bin/sh
|
||||
/etc/init.d/btest stop 2>/dev/null || true
|
||||
/etc/init.d/btest disable 2>/dev/null || true
|
||||
exit 0
|
||||
EOF
|
||||
chmod 755 "$WORKDIR/control/prerm"
|
||||
|
||||
# Conffiles
|
||||
cat > "$WORKDIR/control/conffiles" << EOF
|
||||
/etc/config/btest
|
||||
EOF
|
||||
|
||||
# Build the .ipk (it's just a tar.gz of tar.gz's)
|
||||
cd "$WORKDIR"
|
||||
|
||||
# Create data.tar.gz
|
||||
(cd data && tar czf ../data.tar.gz .)
|
||||
|
||||
# Create control.tar.gz
|
||||
(cd control && tar czf ../control.tar.gz .)
|
||||
|
||||
# Create debian-binary
|
||||
echo "2.0" > debian-binary
|
||||
|
||||
# Package it all
|
||||
tar czf "${PKG_NAME}_${VERSION}-1_${ARCH}.ipk" debian-binary control.tar.gz data.tar.gz
|
||||
|
||||
cd -
|
||||
cp "$WORKDIR/${PKG_NAME}_${VERSION}-1_${ARCH}.ipk" "$OUTPUT_DIR/"
|
||||
|
||||
echo ""
|
||||
echo "Package: $OUTPUT_DIR/${PKG_NAME}_${VERSION}-1_${ARCH}.ipk"
|
||||
ls -lh "$OUTPUT_DIR/${PKG_NAME}_${VERSION}-1_${ARCH}.ipk"
|
||||
echo ""
|
||||
echo "Install on OpenWrt:"
|
||||
echo " scp $OUTPUT_DIR/${PKG_NAME}_${VERSION}-1_${ARCH}.ipk root@router:/tmp/"
|
||||
echo " ssh root@router 'opkg install /tmp/${PKG_NAME}_${VERSION}-1_${ARCH}.ipk'"
|
||||
echo " ssh root@router '/etc/init.d/btest enable && /etc/init.d/btest start'"
|
||||
Reference in New Issue
Block a user