133 lines
3.1 KiB
Bash
Executable File
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"
|