5.9 KiB
Building Archipelago OS Images
This guide explains how to build bootable Alpine Linux OS images for Archipelago Bitcoin Node OS that can be flashed to x86_64 desktop computers (Dell Optiplex, HP ProDesk 400 G4 DM, etc.).
Overview
The build system creates bootable ISO or disk images containing:
- Alpine Linux base system
- Podman container runtime
- Archipelago backend (Rust)
- Archipelago frontend (Vue.js)
- Systemd services
- Network configuration
Prerequisites
macOS
- Docker Desktop: Install Docker Desktop
- Disk Space: At least 10GB free
- Memory: 8GB+ recommended
Linux (HP ProDesk 400 G4 DM)
- Alpine Linux (preferred) or any Linux with Docker
- Build Tools: See installation below
- Disk Space: At least 10GB free
Quick Start
On macOS
cd image-recipe
./build-macos.sh
This will:
- Build Docker container with all tools
- Compile backend and frontend
- Create Alpine image with Archipelago
- Output ISO to
results/directory
On Linux
cd image-recipe
./build-linux.sh
For native Alpine Linux:
cd image-recipe
./build-alpine-native.sh
Build Process
Step 1: Build Backend
The backend is compiled from Rust source:
./scripts/build-backend.sh
This creates:
build/backend/archipelago- Compiled binary
Step 2: Build Frontend
The frontend is built from Vue.js source:
./scripts/build-frontend.sh
This creates:
build/frontend/- Static files
Step 3: Create APK Package
Backend is packaged as Alpine APK:
./scripts/create-backend-apk.sh
This creates:
apks/archipelago-backend-*.apk
Step 4: Build OS Image
The main build script orchestrates everything:
./build-alpine-iso.sh
Or build specific type:
BUILD_TYPE=iso ./build-alpine-iso.sh
BUILD_TYPE=disk ./build-alpine-iso.sh
Build Types
ISO Image
Creates a bootable ISO file suitable for:
- Burning to DVD
- Writing to USB drive
- Booting in virtual machines
BUILD_TYPE=iso ./build-alpine-iso.sh
Output: results/archipelago-0.1.0-x86_64.iso
Disk Image
Creates a raw disk image suitable for:
- Direct flashing to SSD/HDD
- Using with
ddcommand - Virtual machine disk
BUILD_TYPE=disk ./build-alpine-iso.sh
Output: results/archipelago-0.1.0-x86_64.img
Flashing to Device
Using ISO (USB Boot)
-
Write ISO to USB:
# macOS sudo dd if=results/archipelago-0.1.0-x86_64.iso of=/dev/rdiskX bs=1m # Linux sudo dd if=results/archipelago-0.1.0-x86_64.iso of=/dev/sdX bs=1M -
Boot from USB on target device
-
Install to disk (if installer included) or run live
Using Disk Image (Direct Flash)
-
Connect target disk to build machine
-
Flash image:
# macOS sudo dd if=results/archipelago-0.1.0-x86_64.img of=/dev/rdiskX bs=1m # Linux sudo dd if=results/archipelago-0.1.0-x86_64.img of=/dev/sdX bs=1M -
Boot from disk on target device
⚠️ Warning: Double-check the device path! Flashing to wrong device will destroy data.
Customization
Environment Variables
# Version
ARCHIPELAGO_VERSION=0.1.0
# Alpine version
ALPINE_VERSION=3.19
# Architecture
ARCH=x86_64
# Build type
BUILD_TYPE=iso # or "disk"
# Output directory
OUTPUT_DIR=./results
Custom Profile
Edit alpine-profile/mkimg.archipelago.sh to:
- Add/remove packages
- Change kernel options
- Modify boot configuration
Overlay Files
Add files to alpine-profile/overlay/ to include in image:
- Configuration files
- Scripts
- Service files
Build Output
After successful build, you'll find:
results/
├── archipelago-0.1.0-x86_64.iso # Bootable ISO
└── archipelago-0.1.0-x86_64.img # Disk image (if disk build)
Troubleshooting
Docker Issues (macOS)
Problem: Docker daemon not running
# Start Docker Desktop application
open -a Docker
Problem: Out of disk space
# Clean Docker
docker system prune -a
Build Failures
Problem: Backend build fails
# Check Rust installation
rustc --version
# Install Rust if needed
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Problem: Frontend build fails
# Check Node.js
node --version # Need 18+
# Install dependencies
cd neode-ui
npm install
Problem: Alpine aports clone fails
# Manual clone
cd image-recipe
git clone https://gitlab.alpinelinux.org/alpine/aports.git
Image Boot Issues
Problem: Image doesn't boot
- Verify ISO/image integrity
- Check BIOS/UEFI settings
- Ensure correct architecture (x86_64)
- Try different boot mode (UEFI vs Legacy)
Problem: Services don't start
- Check logs:
journalctl -u archipelago - Verify network:
ip addr - Check Podman:
podman info
Advanced Usage
Building on Remote Linux Machine
# On macOS, copy project
scp -r Archipelago user@linux-machine:/tmp/
# SSH to Linux machine
ssh user@linux-machine
# Build
cd /tmp/Archipelago/image-recipe
./build-linux.sh
Cross-Compilation
For building on different architecture:
# Install cross-compilation tools
apk add cross-x86_64-linux-musl
# Build with target
cargo build --release --target x86_64-unknown-linux-musl
Custom Kernel
To use custom kernel options:
- Edit
alpine-profile/mkimg.archipelago.sh - Modify
kernel_flavorsorkernel_addons - Rebuild image
Next Steps
After building and flashing:
- Boot the device
- Access web UI: http://device-ip:8100
- Configure network (if needed)
- Install apps via UI
- Set up Bitcoin node (if desired)