archy/image-recipe/scripts/create-backend-apk.sh
2026-01-24 22:59:20 +00:00

133 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# Create Alpine APK package for Archipelago backend
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BUILD_DIR="$SCRIPT_DIR/../build"
APK_DIR="$SCRIPT_DIR/../apks"
ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}"
echo "📦 Creating Archipelago backend APK..."
echo ""
# Create APK directory
mkdir -p "$APK_DIR"
# Create temporary APK build directory
APK_BUILD_DIR=$(mktemp -d)
trap "rm -rf $APK_BUILD_DIR" EXIT
cd "$APK_BUILD_DIR"
# APK package structure
mkdir -p usr/bin
mkdir -p usr/lib/systemd/system
mkdir -p etc/archipelago
mkdir -p etc/init.d
# Copy binary
if [ -f "$BUILD_DIR/backend/archipelago" ]; then
cp "$BUILD_DIR/backend/archipelago" usr/bin/archipelago
chmod +x usr/bin/archipelago
else
echo "❌ Backend binary not found. Run build-backend.sh first."
exit 1
fi
# Create systemd service file
cat > usr/lib/systemd/system/archipelago.service <<'EOF'
[Unit]
Description=Archipelago Bitcoin Node OS Backend
After=network.target podman.service
Wants=network.target
[Service]
Type=simple
User=archipelago
Group=archipelago
WorkingDirectory=/var/lib/archipelago
ExecStart=/usr/bin/archipelago
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
# Security
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/archipelago /tmp
# Environment
Environment="RUST_LOG=info"
Environment="ARCHIPELAGO_DATA_DIR=/var/lib/archipelago"
[Install]
WantedBy=multi-user.target
EOF
# Create init.d script (for openrc)
cat > etc/init.d/archipelago <<'EOF'
#!/sbin/openrc-run
# Archipelago Bitcoin Node OS Backend
name="Archipelago"
command="/usr/bin/archipelago"
command_user="archipelago:archipelago"
command_background=true
pidfile="/var/run/archipelago.pid"
start_stop_daemon_args="--make-pidfile"
depend() {
need net
use podman
}
EOF
chmod +x etc/init.d/archipelago
# Create default config
mkdir -p etc/archipelago
cat > etc/archipelago/config.toml <<EOF
data_dir = "/var/lib/archipelago"
bind_host = "0.0.0.0"
bind_port = 5959
log_level = "info"
dev_mode = false
container_runtime = "podman"
port_offset = 0
bitcoin_simulation = "none"
EOF
# Calculate package size
PKG_SIZE=$(du -sb "$APK_BUILD_DIR" | cut -f1)
# Create .PKGINFO (Alpine package format)
cat > "$APK_BUILD_DIR/.PKGINFO" <<EOF
pkgname = archipelago-backend
pkgver = ${ARCHIPELAGO_VERSION}-r0
pkgdesc = Archipelago Bitcoin Node OS Backend
url = https://github.com/archipelago/archipelago
arch = x86_64
license = MIT
size = ${PKG_SIZE}
origin = archipelago
EOF
# Create .SIGN.RSA (placeholder - would need signing key for production)
touch "$APK_BUILD_DIR/.SIGN.RSA"
# Create tarball (Alpine APK format)
cd "$APK_BUILD_DIR"
tar -czf "$APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk" \
.PKGINFO .SIGN.RSA usr etc 2>/dev/null || {
# Fallback: create without signing
tar -czf "$APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk" \
.PKGINFO usr etc
}
echo "✅ APK created: $APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk"
ls -lh "$APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk"