Update .gitignore and remove obsolete documentation files

- Added new entries to .gitignore for build artifacts and macOS output directories to streamline the build process.
- Deleted outdated documentation files: AUTH_LOGIN_FIX.md, AUTBOOT_CONFIGURATION.md, BACKEND_FIXES.md, BACKEND_STARTUP_FIX.md, BITCOIN_CORE_HEADLESS_FIX.md, BITCOIN_CORE_UI_COMPLETE.md, BITCOIN_STANDALONE_UI_COMPLETE.md, BITCOIN_UI_COMPLETE.md, BOOT_SEQUENCE_DIAGRAM.txt, and BUILD_COMMANDS_REFERENCE.txt to declutter the repository and remove unnecessary content.
This commit is contained in:
Dorian 2026-02-01 02:22:02 +00:00
parent 8f0b080e73
commit c9722a34f6
143 changed files with 2036 additions and 17839 deletions

View File

@ -6,16 +6,16 @@ alwaysApply: true
## Overview
Archipelago is a next-generation Bitcoin Node OS built on Alpine Linux with Podman containerization, combining the modularity of Parmanode with the security and efficiency of a minimal server OS.
Archipelago is a next-generation Bitcoin Node OS built on Debian Linux with Podman containerization, combining the modularity of Parmanode with the security and reliability of a proven server OS. Similar to StartOS, we use Debian Live for reliable USB boot and installation.
## System Architecture
```
┌─────────────────────────────────────────────────────────┐
Alpine Linux Base (130MB)
│ - Minimal kernel
│ - Hardened security
│ - Read-only root filesystem
Debian Linux Base (Bookworm)
│ - Stable, well-supported kernel
│ - Systemd service management
│ - Extensive hardware support
└─────────────────────────────────────────────────────────┘
┌───────────────┼───────────────┐
@ -29,10 +29,10 @@ Archipelago is a next-generation Bitcoin Node OS built on Alpine Linux with Podm
┌───────────▼───────────┐
│ Container Orchestration│
│ Layer (new)
│ Layer
│ - Manifest parser │
│ - Podman client │
│ - Dependency resolver
│ - Dependency resolver │
│ - Health monitor │
└───────────┬───────────┘
@ -49,10 +49,11 @@ Archipelago is a next-generation Bitcoin Node OS built on Alpine Linux with Podm
## Key Components
### 1. Alpine Linux Base
### 1. Debian Linux Base
- **Size**: ~130MB (vs 1.5GB+ for Umbrel)
- **Security**: Hardened kernel, minimal attack surface
- **Distribution**: Debian 12 (Bookworm) - stable, LTS support
- **Init System**: Systemd for service management
- **Security**: AppArmor, standard Debian hardening
- **Multi-arch**: ARM64 (Raspberry Pi) and x86_64 support
- **Hardware Profiles**: Optimized builds for specific hardware
- Start9 Server Pure (Intel i7-10710U, NVMe)
@ -103,7 +104,7 @@ Located in `core/parmanode/`:
### 7. Security Modules
Located in `core/security/`:
- **container_policies.rs**: Generates AppArmor/SELinux profiles
- **container_policies.rs**: Generates AppArmor profiles
- **secrets_manager.rs**: Encrypted secrets storage
- **image_verifier.rs**: Cosign signature verification
@ -111,7 +112,7 @@ Located in `core/security/`:
Located in `core/performance/`:
- **resource_manager.rs**: CPU/memory/disk allocation
- **optimize-alpine.sh**: OS-level optimizations
- **optimize-debian.sh**: OS-level optimizations
## App Categories
@ -143,12 +144,12 @@ Located in `core/performance/`:
## Security Model
1. **OS Level**: Hardened Alpine, read-only root, minimal kernel
1. **OS Level**: Debian hardening, AppArmor, minimal installed packages
2. **Container Level**: Rootless Podman, capability dropping, network isolation
3. **Secrets**: Encrypted storage, runtime injection only
4. **Supply Chain**: Signed images (Cosign), SBOM generation
5. **Network**: Firewall, rate limiting, Tor integration
6. **Audit**: Immutable logs, configuration tracking
5. **Network**: Firewall (nftables/iptables), rate limiting, Tor integration
6. **Audit**: Journald logging, configuration tracking
## Networking
@ -165,6 +166,19 @@ Located in `core/performance/`:
- **Logs**: `/var/lib/archipelago/logs/{app-id}/`
- **Backups**: `/var/lib/archipelago/backups/`
## Build System
### ISO Creation
- **build-debian-iso.sh**: Creates bootable Debian Live ISO
- **install-to-disk.sh**: Installs Archipelago to target disk via debootstrap
- Uses Debian Live for reliable USB boot (same approach as StartOS)
### Installation Methods
1. **Live USB**: Boot from USB, run in live mode or install to disk
2. **Disk Install**: Full installation with persistence via `install-to-disk.sh`
## Future Enhancements
- Time-travel snapshots (ZFS/BTRFS)

14
.gitignore vendored
View File

@ -46,3 +46,17 @@ coverage/
# Temporary files
*.tmp
*.temp
# Build artifacts
*.iso
*.img
*.dmg
*.app
# macOS build output
build/macos/
# Image recipe output
image-recipe/output/
image-recipe/*.iso
image-recipe/*.img

View File

@ -1,127 +0,0 @@
# Auth Login Fix ✅
## Problem
When trying to login, got error: **"Unknown method: auth.login"**
## Root Cause
The `auth.login` method was defined in the code, but the `config` field was prefixed with `_` (marking it unused), which prevented the auth logic from accessing dev_mode settings.
## Fix Applied
**File:** `core/archipelago/src/api/rpc.rs`
Changed:
```rust
pub struct RpcHandler {
_config: Config, // ❌ Marked as unused
...
}
```
To:
```rust
pub struct RpcHandler {
config: Config, // ✅ Now accessible
...
}
```
This allows the auth handler to check if we're in dev mode and accept the default password.
## How Auth Works Now
### Dev Mode (default)
- **Password:** `password123`
- No setup required
- Works immediately for development
### Production Mode
- Requires user setup first
- Uses bcrypt password hashing
- Stored in data directory
## Rebuild & Test
```bash
cd /Users/dorian/Projects/archy
# 1. Rebuild backend
./clean-rebuild.sh
# 2. Start dev server
./scripts/dev-start.sh
```
Choose option 2 (Full stack)
### Login
**URL:** http://localhost:8100
**Password:** `password123`
Should log you in successfully! 🎉
## Available RPC Methods
The backend now supports:
**Auth:**
- `auth.login` - Login with password
- `auth.logout` - Logout
**Containers:**
- `container-install` - Install a container
- `container-start` - Start a container
- `container-stop` - Stop a container
- `container-remove` - Remove a container
- `container-list` - List all containers
- `container-status` - Get container status
- `container-logs` - Get container logs
- `container-health` - Get health status
**Packages:**
- `package.start` - Start docker-compose app
- `package.stop` - Stop docker-compose app
- `package.restart` - Restart docker-compose app
**Testing:**
- `echo` or `server.echo` - Echo back message
## Testing Auth
You can test the auth endpoint directly:
```bash
curl -X POST http://localhost:5959/rpc/v1 \
-H "Content-Type: application/json" \
-d '{
"method": "auth.login",
"params": {
"password": "password123"
}
}'
```
**Expected response:**
```json
{
"result": null,
"error": null
}
```
## Next Steps
Now that auth is working, you can:
1. **Navigate the UI** - All routes should work
2. **Install containers** - Try installing Bitcoin Core or Lightning
3. **Manage apps** - Start/stop containerized services
4. **View logs** - Monitor container output
---
**Auth is now fully functional!** 🔐

View File

@ -1,372 +0,0 @@
# Archipelago Auto-Boot Configuration
## Overview
The Archipelago OS is configured to automatically:
1. ✅ Connect to internet via Ethernet (DHCP)
2. ✅ Start the Archipelago backend server
3. ✅ Serve the web UI on port 8100
## Boot Sequence
### 1. System Init (sysinit level)
- Hardware detection
- Device filesystem setup
- Kernel modules loading
### 2. Boot Services (boot level)
```
00-boot-services.start → Configures all boot services
├── networking → Network stack initialization
├── hostname → Set hostname to "archipelago-node"
├── syslog → System logging
└── hwclock → Hardware clock sync
```
### 3. Network Configuration (boot level)
```
01-network-setup.start → Automatic network configuration
├── Configure /etc/network/interfaces (DHCP)
├── Start networking service
├── Wait for IP address assignment
├── Configure DNS (Google/Cloudflare)
├── Test internet connectivity
└── Display access information
```
**Ethernet Interfaces Supported:**
- `eth0` - Standard Ethernet
- `enp0s3` - VirtualBox/VMware
- `enp0s25` - Intel Ethernet (HP ProDesk)
- `ens0` - Modern naming convention
**Network Configuration:**
- DHCP automatic IP assignment
- DNS: 8.8.8.8, 8.8.4.4, 1.1.1.1
- Hostname: archipelago-node
### 4. Default Services (default level)
```
archipelago service → Main backend server
├── Waits for network to be ready
├── Creates data directories
├── Starts Rust backend on port 8100
├── Serves Vue.js UI
└── Manages container orchestration
```
**Service Configuration:**
- User: `archipelago` (unprivileged)
- Port: `8100` (HTTP)
- Data: `/var/lib/archipelago/`
- Logs: `/var/lib/archipelago/logs/`
- Auto-restart on failure
### 5. Hardware Detection
```
00-hardware-detect.start → Hardware optimization
├── Detect CPU vendor and model
├── Detect RAM capacity
├── Detect storage devices (NVMe/SATA)
├── Load appropriate drivers
├── Apply hardware-specific optimizations
└── Log to /var/log/archipelago-hardware.log
```
## Service Files
### OpenRC Init Script
**Location:** `/etc/init.d/archipelago`
```sh
#!/sbin/openrc-run
name="Archipelago"
command="/usr/bin/archipelago-backend"
command_user="archipelago:archipelago"
depend() {
need net # Requires network
need localmount # Requires filesystems
use podman docker # Uses containers if available
}
```
**Features:**
- Waits for network to be ready (pings 8.8.8.8)
- Creates required directories
- Sets proper permissions
- Displays access URL on start
### Network Configuration
**Location:** `/etc/network/interfaces`
```
auto eth0
iface eth0 inet dhcp
hostname archipelago-node
```
**Features:**
- Automatic DHCP configuration
- Multiple interface support
- Hostname broadcast
### Server Configuration
**Location:** `/etc/archipelago/config.toml`
```toml
[server]
host = "0.0.0.0" # Listen on all interfaces
port = 8100
[network]
auto_configure = true
dhcp = true
dns_servers = ["8.8.8.8", "8.8.4.4", "1.1.1.1"]
[ui]
enabled = true
path = "/usr/share/archipelago/web"
```
## First Boot Experience
### What Happens
1. **System boots** from USB or internal drive
2. **Network starts** automatically
- DHCP requests IP address
- Waits up to 30 seconds for network
- Tests connectivity (ping 8.8.8.8)
3. **Hardware detected**
- CPU, RAM, storage identified
- Optimizations applied
4. **Archipelago starts**
- Backend server launches
- UI becomes available
- Containers ready
### Console Output
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🏝️ Archipelago Bitcoin Node OS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Network Configuration:
IP Address: 192.168.1.100/24
Access the Archipelago UI at:
http://192.168.1.100:8100
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
## Accessing the UI
### From Local Network
1. **Find the IP address:**
- Check router's DHCP leases
- Look for "archipelago-node"
- Or check console output on first boot
2. **Open browser:**
```
http://192.168.1.100:8100
```
(Replace with your device's IP)
3. **Access the UI:**
- No login required on first boot
- Configure system
- Install apps
### From Same Machine
If you have a monitor and keyboard connected:
```
http://localhost:8100
```
## Troubleshooting
### No Network Connection
**Check network status:**
```bash
# Check if interface is up
ip addr show
# Check routing
ip route show
# Test connectivity
ping -c 4 8.8.8.8
# Restart networking
rc-service networking restart
```
### Service Not Starting
**Check service status:**
```bash
# Check if service is enabled
rc-status
# Start service manually
rc-service archipelago start
# View logs
tail -f /var/lib/archipelago/logs/archipelago.log
# Check system logs
dmesg | grep -i archipelago
```
### Can't Access UI
**Check server is running:**
```bash
# Check if port is listening
netstat -tlnp | grep 8100
# Check process
ps aux | grep archipelago
# Test locally
curl http://localhost:8100
```
## Manual Configuration
### Set Static IP (Optional)
Edit `/etc/network/interfaces`:
```
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
hostname archipelago-node
```
Then restart networking:
```bash
rc-service networking restart
```
### Change Server Port
Edit `/etc/archipelago/config.toml`:
```toml
[server]
port = 8080 # Change to desired port
```
Then restart service:
```bash
rc-service archipelago restart
```
### Enable SSH Access
SSH is enabled by default. Connect with:
```bash
ssh archipelago@192.168.1.100
```
Default credentials will be set during first boot.
## Security Notes
### First Boot
- Authentication disabled for initial setup
- All network interfaces accessible
- HTTP only (no HTTPS yet)
### After Setup
- Enable authentication in config
- Set strong passwords
- Consider firewall rules
- Enable HTTPS (optional)
## Service Management
### Start/Stop/Restart
```bash
# Start service
rc-service archipelago start
# Stop service
rc-service archipelago stop
# Restart service
rc-service archipelago restart
# Check status
rc-service archipelago status
```
### Enable/Disable Auto-Start
```bash
# Enable auto-start
rc-update add archipelago default
# Disable auto-start
rc-update del archipelago default
# List all services
rc-update show
```
## File Locations
### Configuration
- `/etc/archipelago/config.toml` - Main config
- `/etc/archipelago/hardware.toml` - Hardware profile
- `/etc/network/interfaces` - Network config
### Data
- `/var/lib/archipelago/` - Main data directory
- `/var/lib/archipelago/apps/` - App data
- `/var/lib/archipelago/secrets/` - Encrypted secrets
- `/var/lib/archipelago/logs/` - Log files
### Binaries
- `/usr/bin/archipelago-backend` - Backend server
- `/usr/share/archipelago/web/` - UI files
### Logs
- `/var/log/archipelago-hardware.log` - Hardware detection
- `/var/lib/archipelago/logs/` - Service logs
## Summary
✅ **Automatic Ethernet Connection**
- DHCP configuration
- Multiple interface support
- DNS auto-configuration
- Internet connectivity test
✅ **Automatic Server Start**
- Backend launches on boot
- Waits for network readiness
- Auto-restarts on failure
- Proper user permissions
✅ **Accessible Web UI**
- Available on port 8100
- Accessible from local network
- No setup required
- Ready to use immediately
**Your Archipelago node is fully automated and ready to run! 🏝️**

View File

@ -1,94 +0,0 @@
# Backend Build Errors - FIXED! ✅
## Summary
The backend build was failing due to Rust compilation errors. **I've fixed all the code issues!**
## What Was Wrong
1. **Type Error**: `http_body_util::Incoming` doesn't exist - should be `hyper::body::Incoming`
2. **Type Inference Errors**: The compiler couldn't infer types for body collection
3. **Unused Imports**: Many unused imports causing warnings
## What I Fixed
### Fixed Files:
1. **`core/archipelago/src/api/handler.rs`**
- Changed `http_body_util::Incoming``hyper::body::Incoming`
- Fixed body collection type inference
- Removed unused `hyper_util::rt::TokioIo` import
2. **`core/archipelago/src/main.rs`**
- Removed unused `error` import
3. **`core/archipelago/src/api/rpc.rs`**
- Removed unused `BodyExt` and `RwLock` imports
4. **`core/archipelago/src/api/mod.rs`**
- Removed unused `RpcHandler` re-export
5. **`core/archipelago/src/container/data_manager.rs`**
- Removed unused `Path` import
6. **`core/archipelago/src/container/dev_orchestrator.rs`**
- Removed unused imports
- Prefixed unused parameter with underscore: `_manifest_path`
7. **`core/archipelago/src/container/mod.rs`**
- Removed unused `DevDataManager` re-export
8. **`core/archipelago/src/server.rs`**
- Removed unused `info` import
## How to Build Now
**Run this command in your terminal:**
```bash
cd /Users/dorian/Projects/archy
./rebuild-backend.sh
```
This will:
1. ✅ Compile the backend with all fixes
2. ✅ Show you success message
3. ✅ Give you instructions to run the app
## Expected Result
The build should now complete successfully! You'll see:
```
Compiling archipelago v0.1.0 (/Users/dorian/Projects/archy/core/archipelago)
Finished `dev` profile [unoptimized + debuginfo] target(s) in X.XXs
✅ Backend Build SUCCESS!
```
## After Successful Build
Run the full stack:
```bash
./scripts/dev-start.sh
```
Choose option 2 (Full stack), and this time the backend will start properly!
Or run manually:
- **Terminal 1**: `cd core && cargo run --bin archipelago`
- **Terminal 2**: `cd neode-ui && npm run dev`
Then open: **http://localhost:8100**
## Current Status
- ✅ **Rust installed** and configured
- ✅ **Node.js installed** with all dependencies
- ✅ **Podman installed** and running
- ✅ **PostgreSQL installed** and running
- ✅ **All code fixes applied**
- ⏳ **Ready to build!**
Just run `./rebuild-backend.sh` and you're good to go! 🚀

View File

@ -1,117 +0,0 @@
# Backend Startup Fix ✅
## Problems Found
1. **Last Warning**: One more unused `HashMap` import in `container/src/podman_client.rs`
2. **Backend Crash**: Permission denied when trying to create `/var/lib/archipelago`
## Root Cause
The backend default configuration tries to create `/var/lib/archipelago` which requires root permissions. In development, we need to use `/tmp/archipelago-dev` instead.
## Fixes Applied
### 1. Removed Last Warning ✅
**File:** `core/container/src/podman_client.rs`
- Removed unused `std::collections::HashMap` import
**Result:** ZERO warnings now! 🎉
### 2. Fixed Backend Startup ✅
**File:** `scripts/dev-start.sh`
- Added environment variable exports before starting backend
- Sets `ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev`
- Sets dev mode and other required configs
**Also Created:** `setup-env.sh` (optional script to create `.env` file)
## How to Run Now
### Quick Start (Automatic)
```bash
cd /Users/dorian/Projects/archy
./scripts/dev-start.sh
```
Choose option **2** (Full stack)
The script now automatically:
- Sets all required environment variables
- Uses `/tmp/archipelago-dev` (no permissions needed)
- Starts backend with correct config
- Waits for backend to be ready
- Starts frontend
### Alternative: Manual Setup (Optional)
If you want a persistent `.env` file:
```bash
./setup-env.sh
./scripts/dev-start.sh
```
## Environment Variables Set
```bash
ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev
ARCHIPELAGO_DEV_DATA_DIR=/tmp/archipelago-dev
ARCHIPELAGO_DEV_MODE=true
ARCHIPELAGO_BIND=127.0.0.1:5959
ARCHIPELAGO_LOG_LEVEL=debug
ARCHIPELAGO_PORT_OFFSET=10000
ARCHIPELAGO_BITCOIN_SIMULATION=mock
```
## Test It
1. **Rebuild (to remove last warning):**
```bash
./clean-rebuild.sh
```
Expected: **ZERO warnings!**
2. **Start dev server:**
```bash
./scripts/dev-start.sh
```
Choose option 2
3. **Check backend log:**
```bash
tail -f /tmp/archipelago-backend.log
```
Should see:
```
🚀 Starting Archipelago Bitcoin Node OS
📁 Data directory: /tmp/archipelago-dev
🌐 Server listening on http://127.0.0.1:5959
📡 RPC API: http://127.0.0.1:5959/rpc/v1
🔌 WebSocket: ws://127.0.0.1:5959/ws
```
4. **Open browser:**
```
http://localhost:8100
```
## What Changed
### Before ❌
- Backend tried to use `/var/lib/archipelago` (permission denied)
- Crashed immediately on startup
- Dev server hung waiting for port 5959
### After ✅
- Backend uses `/tmp/archipelago-dev` (always writable)
- Starts successfully in ~1 second
- Dev server detects backend and starts frontend
- Full stack is live!
---
**All issues resolved!** Your Bitcoin Node OS is ready to run! 🚀

View File

@ -1,184 +0,0 @@
# Bitcoin Core Launch Fix + Quiet Docker Downloads
## Issues Fixed
### 1. Bitcoin Core "Launch" Confusion
**Problem**: Bitcoin Core is a **headless node** with no web interface. It only exposes an RPC API on port 18443.
**Solution**: Changed the launch button to show connection details instead of trying to open a non-existent web UI.
### 2. Noisy Docker Downloads
**Problem**: First-run Docker image downloads were extremely verbose, showing detailed progress for each of 13+ images.
**Solution**: Made downloads quiet with a simple spinner. Users can still monitor progress in Docker Desktop if needed.
### 3. Backend WebSocket Disconnects
**Not actually a problem**: The logs show the backend is working fine. WebSocket disconnects happen naturally when you refresh the page. The backend reconnects automatically.
## What Changed
### `/Users/dorian/Projects/archy/neode-ui/src/views/Apps.vue`
**Before**: Tried to open `/bitcoin-core.html` in a new tab
**After**: Shows an alert with RPC connection details:
```
✅ Bitcoin Core is running!
🔗 RPC Endpoint: http://localhost:18443
👤 User: bitcoin
🔑 Password: bitcoinpass
💡 Use bitcoin-cli or an RPC client to interact.
📊 View blockchain data in Mempool: http://localhost:4080
```
### `/Users/dorian/Projects/archy/start-docker-apps.sh`
**Before**: Verbose output showing every image download
**After**: Quiet mode with spinner:
```
📦 Pulling Docker images (this will take a while)...
💡 Tip: You can monitor progress in Docker Desktop
Downloading images... ✅
✅ All images downloaded!
```
### Deleted: `/Users/dorian/Projects/archy/neode-ui/public/bitcoin-core.html`
Removed because Bitcoin Core doesn't have a web UI.
## How Bitcoin Core Works Now
1. **Status**: Shows "Running" in My Apps
2. **Start/Stop**: Works via the action buttons
3. **Launch**: Shows connection info popup (can't launch a headless node)
4. **Access**: Use bitcoin-cli or connect via RPC at `localhost:18443`
5. **Blockchain Explorer**: Use Mempool at `http://localhost:4080` (once you start it)
## RPC Usage Examples
### Using bitcoin-cli (from within container)
```bash
docker exec -it archy-bitcoin bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoinpass getblockchaininfo
```
### Using curl (from host)
```bash
curl -u bitcoin:bitcoinpass \
-X POST http://localhost:18443 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"1.0","id":"test","method":"getblockchaininfo","params":[]}'
```
### Using a GUI wallet/tool
Configure any Bitcoin wallet or tool to connect to:
- **Host**: localhost
- **Port**: 18443
- **Network**: regtest
- **RPC User**: bitcoin
- **RPC Password**: bitcoinpass
## About Regtest Mode
Bitcoin Core is running in **regtest** (regression test) mode:
- ✅ No blockchain sync required (instant start)
- ✅ Full Bitcoin functionality
- ✅ Create blocks on demand
- ✅ Perfect for development/testing
- ❌ Not connected to mainnet/testnet
### Generate test blocks
```bash
docker exec -it archy-bitcoin bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoinpass generatetoaddress 101 <your-address>
```
## Understanding "Headless" Apps
Some apps in Archipelago don't have web UIs:
| App | Type | Access |
|-----|------|--------|
| Bitcoin Core | Headless | RPC only (port 18443) |
| LND | Headless + API | gRPC/REST API (port 8080) |
| BTCPay Server | Web UI | http://localhost:14142 ✅ |
| Mempool | Web UI | http://localhost:4080 ✅ |
| Home Assistant | Web UI | http://localhost:8123 ✅ |
| Grafana | Web UI | http://localhost:3000 ✅ |
For headless apps, the "Launch" button will show connection info instead of opening a browser.
## Backend Status (It's Fine!)
The WebSocket errors you saw are **normal behavior**:
1. ✅ Backend is running on port 5959
2. ✅ Scanning Docker containers every 5 seconds
3. ✅ Detecting Bitcoin Core correctly
4. ✅ WebSocket reconnects after page refresh
The log shows:
```
[INFO] Detected container: Bitcoin Core (running)
[DEBUG] Data model updated to revision 25
[INFO] WebSocket /ws/db connected
```
Everything is working as expected!
## Next Steps
### To Start Mempool Explorer (for Bitcoin blockchain viewing)
```bash
docker compose up -d mempool-web mempool-api
```
### To Start Other Apps
```bash
docker compose up -d btcpay # BTCPay Server
docker compose up -d lnd # Lightning Network
docker compose up -d grafana # Metrics dashboard
docker compose up -d homeassistant # Home automation
```
### To See All Running Apps
```bash
docker compose ps
```
### To Stop Everything
```bash
./stop-docker-apps.sh
# or
docker compose down
```
## Architecture Clarification
```
User clicks "Launch" on Bitcoin Core
Apps.vue checks app ID
if (id === 'bitcoin')
Show alert with RPC connection details
User can use bitcoin-cli, curl, or GUI wallet to connect
```
For apps with web UIs (BTCPay, Mempool, Grafana):
```
User clicks "Launch"
Apps.vue gets lanAddress from package
window.open(lanAddress, '_blank')
Opens app in new browser tab ✅
```
## Summary
- ✅ Bitcoin Core launch now shows connection info (not broken HTML page)
- ✅ Docker downloads are now quiet with spinner
- ✅ Backend is working perfectly (WebSocket disconnects are normal)
- ✅ Bitcoin Core is a headless node - this is correct behavior
- ✅ Use Mempool or bitcoin-cli to interact with the blockchain

View File

@ -1,183 +0,0 @@
# Bitcoin Core UI - Umbrel-Style with Archipelago Design
## What Was Built
A **full custom Bitcoin Core UI** matching your onboarding screen design language:
- ✅ Glassmorphism style from `OnboardingOptions.vue`
- ✅ Logo with gradient border like onboarding
- ✅ Grid layout with clickable cards
- ✅ Settings modal
- ✅ Logs viewer modal
- ✅ Real-time status updates
- ✅ Connection info display
## Design Features
### Matches Onboarding Screens
- **Same glass-card style**: `rgba(0, 0, 0, 0.65)` background with `blur(18px)`
- **Same logo treatment**: Gradient border wrapper
- **Same layout pattern**: Centered content with max-width
- **Same button style**: glass-button with hover effects
- **Same grid system**: Responsive cards that hover and lift
### Umbrel-Inspired Functionality
- **Stats grid**: Network, RPC Port, P2P Port, Block height
- **Connection panel**: Shows RPC credentials
- **Settings panel**: Configure Bitcoin Core
- **Logs panel**: View container logs
- **Status badge**: Running/Stopped indicator
## File Structure
```
neode-ui/src/
├── views/
│ ├── apps/
│ │ └── BitcoinCore.vue ← NEW: Full custom UI
│ └── Apps.vue ← UPDATED: Routes to BitcoinCore
└── router/
└── index.ts ← Already had route at /dashboard/apps/bitcoin-core
```
## How It Works
### Launch Flow
```
User clicks "Launch" on Bitcoin Core
Apps.vue detects id === 'bitcoin'
router.push('/dashboard/apps/bitcoin-core')
BitcoinCore.vue component loads
Shows full UI with your glassmorphism style
```
### UI Sections
1. **Header**
- Logo with gradient border (like onboarding)
- Title: "Bitcoin Core"
- Subtitle: "Full Node - Regtest Mode"
- Status badge (Running/Stopped)
2. **Stats Grid** (4 columns)
- Network: Regtest
- RPC Port: 18443
- P2P Port: 18444
- Blocks: Real-time count
3. **Action Cards** (3 columns)
- **Connection**: Shows RPC credentials
- **Settings**: Opens modal with configuration
- **Logs**: Opens modal with container logs
4. **Footer Actions**
- Back to My Apps
- RPC Documentation (external link)
### Modal Features
**Settings Modal:**
- Network mode (Regtest)
- RPC server status
- Transaction index status
- ZMQ notifications status
**Logs Modal:**
- Real-time container logs
- Refresh button
- Terminal-style display
## Styling Details
All styling matches your onboarding screens:
```css
/* Glass card - same as onboarding */
background-color: rgba(0, 0, 0, 0.65);
backdrop-filter: blur(18px);
border: 1px solid rgba(255, 255, 255, 0.18);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
/* Logo gradient border - same as onboarding */
background: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0.1) 100%);
padding: 3px;
border-radius: 24px;
/* Hover effect - same as onboarding cards */
hover:-translate-y-1 hover:shadow-glass
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.6), 0 0 30px rgba(255, 255, 255, 0.2);
```
## Test It Now
1. **Start dev server** (if not running):
```bash
./scripts/dev-start.sh
# Choose: 2 (Full stack)
```
2. **Navigate to My Apps**
3. **Click "Launch" on Bitcoin Core**
4. **You'll see**:
- Full-screen Bitcoin Core UI
- Matching your onboarding design
- Stats, connection info, settings, logs
- All in your glassmorphism style
## Next Steps (Future Enhancements)
### Real Data Integration
- [ ] Fetch actual block height from RPC
- [ ] Real-time logs from Docker API
- [ ] Live status updates every 5 seconds
- [ ] Actual RPC calls for stats
### Additional Features
- [ ] Generate blocks button (regtest)
- [ ] Wallet management
- [ ] Transaction history
- [ ] Peer connections list
- [ ] Mempool stats
### Settings Panel
- [ ] Change RPC credentials
- [ ] Switch network mode
- [ ] Configure data directory
- [ ] Enable/disable features
## Comparison
### Before (What You Didn't Want)
```
alert('Bitcoin Core is running...')
```
### After (What You Asked For)
```
Full Umbrel-style UI with:
- Glassmorphism design
- Stats grid
- Connection info
- Settings modal
- Logs viewer
- Your onboarding screen aesthetic
```
## Key Design Principles Used
From your onboarding screens:
1. ✅ **Centered layout** with max-width container
2. ✅ **Logo with gradient border** at top
3. ✅ **Large, bold title** with subtitle
4. ✅ **Grid of glass cards** that hover/lift
5. ✅ **Dark glass aesthetic** (not white glass)
6. ✅ **Consistent spacing** (gap-6, p-8, mb-8)
7. ✅ **Proper button styling** (glass-button)
8. ✅ **Modal transitions** (fade in/out)
This is **exactly like your "Choose Your Setup" onboarding screen** but for Bitcoin Core!

View File

@ -1,112 +0,0 @@
# Bitcoin Core Standalone UI - Complete
## What Was Built
A beautiful, standalone Bitcoin Core UI that opens in a **separate browser tab** on its own port (18445), just like the other apps.
## Features
### Layout & Design
- **Improved Layout**: Better organized with distinct sections
- **Header Section**: Logo with animated gradient border, title, subtitle, and live status badge
- **Stats Grid**: 4-card responsive grid showing Network, RPC Port, P2P Port, and Block Height
- **Action Cards**: 3 interactive cards for Connection, Settings, and Logs
- **Connection Details**: Expandable section with copy-to-clipboard functionality
- **Modals**: Beautiful glass-morphism modals for Settings and Logs
### Styling
- Full glassmorphism design matching your onboarding screens
- Gradient backgrounds and borders
- Smooth animations and hover effects
- Responsive design for all screen sizes
- Purple/blue gradient theme (#667eea to #764ba2)
### Functionality
- **Connection Details**: Toggle to show/hide RPC credentials
- **Copy to Clipboard**: One-click copy for all connection strings
- **Live Block Height**: Simulated updates every 5 seconds
- **Settings Modal**: View node configuration
- **Logs Modal**: View node logs
- **Status Badge**: Shows running/stopped state
## Files Created/Modified
### New Files
1. `/Users/dorian/Projects/archy/docker/bitcoin-ui/index.html`
- Standalone HTML page with all CSS and JavaScript
- Self-contained, no external dependencies
- Beautiful Bitcoin logo (embedded SVG)
- Fully functional UI with modals and interactions
### Modified Files
1. `/Users/dorian/Projects/archy/docker-compose.yml`
- Added `bitcoin-ui` service using nginx:alpine
- Serves the UI on port 18445
- Maps to `./docker/bitcoin-ui` directory
2. `/Users/dorian/Projects/archy/neode-ui/src/views/Apps.vue`
- Updated `launchApp()` to open Bitcoin Core in new tab on port 18445
- Removed internal routing logic
3. `/Users/dorian/Projects/archy/neode-ui/src/router/index.ts`
- Removed the `/apps/bitcoin-core` route (no longer needed)
4. `/Users/dorian/Projects/archy/start-docker-apps.sh`
- Updated to show Bitcoin Core UI URL in the service list
### Deleted Files
1. `/Users/dorian/Projects/archy/neode-ui/src/views/apps/BitcoinCore.vue`
- No longer needed since we have standalone UI
## How It Works
1. **Docker Container**: Nginx serves the static HTML page on port 18445
2. **Launch Flow**: Click Bitcoin Core → Opens `http://localhost:18445` in new tab
3. **UI Updates**: JavaScript simulates block height updates and manages modals
4. **Connection Info**: Shows RPC credentials for connecting other apps
## Access Points
- **Main UI**: http://localhost:18445
- **RPC Endpoint**: localhost:18443
- **P2P Port**: 18444
- **ZMQ Blocks**: tcp://localhost:28332
- **ZMQ Transactions**: tcp://localhost:28333
## Credentials
```
RPC User: bitcoin
RPC Password: bitcoinpass
```
## Testing
1. **Restart Docker containers** (if already running):
```bash
cd /Users/dorian/Projects/archy
docker compose down
docker compose up -d
```
2. **Access the UI**:
```bash
open http://localhost:18445
```
3. **Test from Neode UI**:
- Go to My Apps
- Click Bitcoin Core
- Should open in new browser tab with beautiful UI
## What You'll See
- Large Bitcoin logo with animated glow effect
- "Bitcoin Core" title with gradient text
- Green "Running" status badge
- 4 stat cards showing network info and ports
- 3 action cards that open modals or toggle sections
- Connection details with copy buttons
- Full glassmorphism styling matching your design language
Perfect integration with your existing glassmorphism aesthetic!

View File

@ -1,184 +0,0 @@
# ✅ BITCOIN CORE GLASSMORPHISM UI COMPLETE
## Summary
Created a beautiful custom UI for Bitcoin Core with glassmorphism design that opens when you click "Launch" in My Apps. Also fixed the port extraction bug that was causing invalid URLs.
## What Was Fixed
### 1. Port Extraction Bug
**Problem:** Port range `18443-18444` was being used in URL as `http://localhost:18443-18444/`
**Solution:** Modified `extract_lan_address()` to extract only the first port from ranges
```rust
// Before: "18443-18444" → http://localhost:18443-18444/
// After: "18443-18444" → http://localhost:18443
let single_port = port_part.split('-').next().unwrap_or(port_part);
```
### 2. Custom Bitcoin Core UI
**Created:** `/Users/dorian/Projects/archy/neode-ui/src/views/apps/BitcoinCore.vue`
**Features:**
- ✅ Glassmorphism card design with backdrop blur
- ✅ Gradient background matching Archipelago theme
- ✅ Real-time status badge (running/stopped)
- ✅ Stats grid showing network, ports, status
- ✅ Connection details with RPC/P2P endpoints
- ✅ Action buttons (RPC Docs, Logs, Back to Apps)
- ✅ Fully responsive design
- ✅ Uses Archipelago's visual style (dark blues, Bitcoin orange)
## UI Design
### Glassmorphism Effect
```css
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow:
0 8px 32px 0 rgba(31, 38, 135, 0.37),
inset 0 0 80px rgba(255, 255, 255, 0.03);
```
### Gradient Background
```css
background: linear-gradient(135deg,
#1a1a2e 0%,
#0f3460 50%,
#16213e 100%
);
```
### Color Scheme
- **Primary**: Bitcoin Orange (#f7931a)
- **Background**: Dark Blue Gradients
- **Glass**: Semi-transparent white with blur
- **Text**: White with varying opacity
- **Status**: Green (running), Red (stopped)
## How It Works
### Launch Flow
1. **User clicks "Launch" on Bitcoin Core**
2. **Apps.vue `launchApp()` detects `id === 'bitcoin'`**
3. **Routes to `/dashboard/apps/bitcoin-core`**
4. **BitcoinCore.vue component loads**
5. **Displays glassmorphism UI with live data**
### Data Binding
```typescript
const bitcoinPackage = computed(() => store.packages['bitcoin'])
const statusText = computed(() => {
const state = bitcoinPackage.value?.state
return state === 'running' ? 'Running' : 'Stopped'
})
```
The UI automatically updates when container state changes (via WebSocket).
## UI Components
### Header
- Bitcoin icon with shadow
- Title: "Bitcoin Core"
- Subtitle: "Full Bitcoin Node - Regtest Mode"
- Status badge with color coding
### Stats Grid (4 cards)
1. **Network**: Regtest
2. **RPC Port**: 18443
3. **P2P Port**: 18444
4. **Status**: Container status from backend
### Info Section
- Description of Bitcoin Core
- Connection details with copy-able endpoints
- Data directory location
### Action Buttons
1. **RPC Documentation** - Opens Bitcoin Core API docs
2. **View Logs** - (Coming soon)
3. **Back to My Apps** - Returns to apps list
## Files Modified
1. **`core/archipelago/src/container/docker_packages.rs`**
- Fixed port range extraction
2. **`neode-ui/src/views/apps/BitcoinCore.vue`** (NEW)
- Complete glassmorphism UI component
3. **`neode-ui/src/router/index.ts`**
- Added route: `/dashboard/apps/bitcoin-core`
4. **`neode-ui/src/views/Apps.vue`**
- Modified `launchApp()` to route to custom UI for Bitcoin
## Testing
### Start Backend
```bash
cd core
ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev \
ARCHIPELAGO_DEV_MODE=true \
ARCHIPELAGO_CONTAINER_RUNTIME=docker \
./target/release/archipelago
```
### Start Frontend
```bash
cd neode-ui
npm run dev
```
### Test Flow
1. Navigate to http://localhost:8101
2. Go to "My Apps"
3. See Bitcoin Core running
4. Click "Launch"
5. **Result**: Custom glassmorphism UI opens
6. See stats, connection details, status badge
7. All data updates live from backend
## Screenshots Description
**The UI features:**
- Dark blue gradient background
- Semi-transparent glass card with blur effect
- Bitcoin orange accent colors
- Clean, modern layout
- Real-time status updates
- Professional typography
- Responsive grid layout
- Hover effects on interactive elements
## Responsive Design
- **Desktop**: 3-4 column stats grid, horizontal buttons
- **Tablet**: 2 column stats grid
- **Mobile**: Single column layout, stacked buttons
## Future Enhancements
- [ ] Real-time blockchain stats (block height, connections)
- [ ] Interactive RPC console
- [ ] Log viewer with search/filter
- [ ] Charts for bandwidth/CPU usage
- [ ] Generate new addresses
- [ ] Send/receive test coins in regtest
---
**Current Status:**
✅ Port extraction fixed
✅ Custom UI created
✅ Routing configured
✅ Launch working
✅ Live data binding active
✅ Glassmorphism design complete
**Test it now:**
Click "Launch" on Bitcoin Core in My Apps!

View File

@ -1,225 +0,0 @@
```
┌─────────────────────────────────────────────────────────────────────────┐
│ ARCHIPELAGO BOOT SEQUENCE │
│ Automatic Network Connection & Server Startup │
└─────────────────────────────────────────────────────────────────────────┘
POWER ON
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 1: SYSTEM INIT (sysinit) │
├─────────────────────────────────────────────────────────────────────────┤
│ ✓ Load kernel modules │
│ ✓ Initialize device filesystem (/dev) │
│ ✓ Detect hardware (CPU, RAM, Storage, Network) │
│ ✓ Mount filesystems │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 2: BOOT SERVICES (boot) │
├─────────────────────────────────────────────────────────────────────────┤
│ 00-boot-services.start │
│ ├─ Enable networking service │
│ ├─ Enable hostname service │
│ ├─ Enable syslog service │
│ └─ Enable archipelago service │
│ │
│ ✓ Set hostname: "archipelago-node" │
│ ✓ Start system logging │
│ ✓ Sync hardware clock │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 3: NETWORK CONFIGURATION (boot) │
├─────────────────────────────────────────────────────────────────────────┤
│ 01-network-setup.start │
│ │
│ Step 1: Configure Network Interfaces │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ auto eth0 │ │
│ │ iface eth0 inet dhcp │ │
│ │ hostname archipelago-node │ │
│ │ │ │
│ │ # Also configures: enp0s3, enp0s25, ens0 │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ Step 2: Start Networking Service │
│ ✓ Bring up Ethernet interface │
│ ✓ Send DHCP request │
│ ✓ Wait for IP address (max 30 seconds) │
│ ✓ Configure default route │
│ │
│ Step 3: Configure DNS │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ nameserver 8.8.8.8 # Google DNS │ │
│ │ nameserver 8.8.4.4 # Google DNS backup │ │
│ │ nameserver 1.1.1.1 # Cloudflare DNS │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ Step 4: Test Internet Connectivity │
│ → ping -c 2 8.8.8.8 │
│ ✓ Internet connection established │
│ │
│ Step 5: Display Network Information │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Network Configuration: │ │
│ │ IP Address: 192.168.1.100/24 │ │
│ │ │ │
│ │ Access the Archipelago UI at: │ │
│ │ http://192.168.1.100:8100 │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 4: HARDWARE OPTIMIZATION (default) │
├─────────────────────────────────────────────────────────────────────────┤
│ 00-hardware-detect.start │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ CPU Detection │ │ Storage Detection │ │
│ ├──────────────────────┤ ├──────────────────────┤ │
│ │ • Intel i7-10710U │ │ • NVMe SSD detected │ │
│ │ • 6 cores, 12 threads│ │ • Set I/O scheduler │ │
│ │ • Load microcode │ │ • Enable TRIM │ │
│ └──────────────────────┘ └──────────────────────┘ │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ Graphics Detection │ │ Memory Detection │ │
│ ├──────────────────────┤ ├──────────────────────┤ │
│ │ • Intel UHD Graphics │ │ • 32GB RAM detected │ │
│ │ • Load i915 driver │ │ • Configure caching │ │
│ │ • Enable accel │ │ • Set limits │ │
│ └──────────────────────┘ └──────────────────────┘ │
│ │
│ ✓ Hardware profile: hp-prodesk (or start9-pure, dell-optiplex) │
│ ✓ Log saved to: /var/log/archipelago-hardware.log │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ STAGE 5: ARCHIPELAGO SERVER START (default) │
├─────────────────────────────────────────────────────────────────────────┤
│ /etc/init.d/archipelago start │
│ │
│ Pre-Start Checks: │
│ ✓ Network is ready (verified) │
│ ✓ Create data directories │
│ - /var/lib/archipelago/ │
│ - /var/lib/archipelago/apps/ │
│ - /var/lib/archipelago/secrets/ │
│ - /var/lib/archipelago/logs/ │
│ - /var/lib/archipelago/backups/ │
│ ✓ Set permissions (archipelago:archipelago) │
│ │
│ Start Backend Server: │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ $ /usr/bin/archipelago-backend │ │
│ │ │ │
│ │ Environment: │ │
│ │ RUST_LOG=info │ │
│ │ ARCHIPELAGO_DATA_DIR=/var/lib/archipelago │ │
│ │ ARCHIPELAGO_PORT=8100 │ │
│ │ │ │
│ │ User: archipelago (unprivileged) │ │
│ │ PID: [written to /var/run/archipelago.pid] │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ Backend Components: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Rust API │◄────►│ Vue.js UI │ │ │
│ │ │ Server │ │ (Static) │ │ │
│ │ │ :8100 │ │ │ │ │
│ │ └──────┬───────┘ └──────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ Container Orchestration │ │ │
│ │ │ (Podman Client) │ │ │
│ │ └──────┬───────────────────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ App Management │ │ │
│ │ │ - Bitcoin Core │ │ │
│ │ │ - Lightning Network │ │ │
│ │ │ - Self-hosted apps │ │ │
│ │ └──────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Post-Start: │
│ ✓ Service running │
│ ✓ Web UI accessible │
│ ✓ Display access URL │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ READY! 🏝️ │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ✅ Ethernet connected via DHCP │
│ ✅ Internet connectivity verified │
│ ✅ Hardware optimized │
│ ✅ Archipelago backend running │
│ ✅ Web UI available │
│ │
│ Access: http://192.168.1.100:8100 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════════════
TIMING (Approximate)
═══════════════════════════════════════════════════════════════════════════
Stage 1: System Init → 5-10 seconds
Stage 2: Boot Services → 2-5 seconds
Stage 3: Network Configuration → 5-30 seconds (DHCP timeout)
Stage 4: Hardware Optimization → 2-5 seconds
Stage 5: Archipelago Server → 5-10 seconds
Total Boot Time: 20-60 seconds (depends on DHCP)
═══════════════════════════════════════════════════════════════════════════
WHAT RUNS AUTOMATICALLY
═══════════════════════════════════════════════════════════════════════════
ON EVERY BOOT:
✅ Ethernet connection via DHCP
✅ DNS configuration (Google, Cloudflare)
✅ Internet connectivity test
✅ Hardware detection and optimization
✅ Archipelago backend server (port 8100)
✅ Web UI serving
✅ Container runtime (Podman) ready
NO MANUAL INTERVENTION REQUIRED!
═══════════════════════════════════════════════════════════════════════════
ACCESSING THE UI
═══════════════════════════════════════════════════════════════════════════
From Local Network:
1. Boot the device
2. Wait 30-60 seconds
3. Find IP address:
• Check router DHCP leases
• Look for "archipelago-node"
• Or check console output
4. Open browser: http://[IP-ADDRESS]:8100
Example:
http://192.168.1.100:8100
http://192.168.0.50:8100
http://10.0.0.100:8100
═══════════════════════════════════════════════════════════════════════════
RESULT: Plug in, power on, and access your node! 🚀
```

View File

@ -1,131 +0,0 @@
# Building Complete Archipelago Node OS
## Status: In Progress
Currently building the Rust backend for Alpine Linux. Once complete, we'll have a fully functional Archipelago Bitcoin Node OS.
## What's Been Completed
### ✅ ISO Build System
- Custom ISO builder using pre-built Alpine Linux
- Hardware-specific builds (HP ProDesk, Start9, Dell OptiPlex, Generic)
- Fast builds (~2 seconds)
- No cross-compilation issues on ARM Mac
### ✅ Frontend (Vue.js)
- Production build complete
- Location: `image-recipe/build/frontend/`
- Size: ~14MB compressed
- Includes: Dashboard, Apps, Marketplace, Container management, Settings
### ⏳ Backend (Rust)
- Currently compiling in Alpine Docker container
- Native musl build for Alpine Linux
- Will output single binary: `archipelago`
- Includes: Container orchestration, RPC API, WebSocket support
### ✅ Integration Scripts
- `build-backend.sh` - Builds Rust backend in Docker
- `build-frontend.sh` - Builds Vue.js frontend
- `integrate-archipelago.sh` - Combines everything into ISO
- `build-custom-iso.sh` - Updated to include backend/frontend
## What Will Happen Next
Once the backend compiles:
1. **Integration Build**
```bash
./integrate-archipelago.sh
```
This will:
- Take the compiled backend binary
- Take the built frontend files
- Create new ISO with both included
- Configure nginx to serve UI
- Create OpenRC service for backend
- Set up auto-start on boot
2. **Result**
You'll have: `archipelago-3.19-hp-prodesk-x86_64.iso`
Which includes:
- Alpine Linux 3.19 base
- Podman + container tools
- Archipelago backend (`/usr/local/bin/archipelago`)
- Archipelago web UI (`/usr/share/archipelago/web/`)
- nginx configured on port 8100
- Backend API on port 8101
- Auto-start services
- DHCP networking
3. **Boot Experience**
- Boot from USB
- Login as root
- Run `/media/cdrom/archipelago/install.sh`
- System installs everything automatically
- Reboot
- Backend starts automatically
- Web UI accessible at `http://device-ip:8100`
## Features in the Complete OS
### Container Management
- Install containerized apps (Bitcoin Core, LND, etc.)
- Start/stop/remove containers
- View logs and status
- Resource monitoring
### Web UI
- Dashboard with system stats
- App marketplace
- Container app management
- Settings and configuration
- Onboarding flow
### Backend API
- RPC endpoints for all operations
- WebSocket for real-time updates
- Container orchestration
- App manifest parsing
- Dependency resolution
### Security
- Rootless Podman containers
- Separate user account (archipelago)
- SSH access
- Firewall ready
- Encrypted secrets storage (planned)
## File Sizes
- **Base ISO**: 208 MB (Alpine + packages)
- **Backend binary**: ~50-80 MB (estimated, includes all deps)
- **Frontend**: ~14 MB
- **Final ISO**: ~300 MB (estimated total)
## Next Session
If the backend build completes:
1. Run `./integrate-archipelago.sh`
2. Flash to USB
3. Boot on HP ProDesk
4. Test full system
If it doesn't complete:
- Resume the build
- Docker container maintains build cache
- Won't need to recompile dependencies
## Build Time Estimates
- Frontend: 3-4 seconds ✅ DONE
- Backend (first time): 5-10 minutes ⏳ IN PROGRESS
- Backend (incremental): 30-60 seconds
- ISO integration: 2-3 seconds
- Total: ~10-15 minutes for complete build
---
**Current Time**: Building backend...
**Estimated Completion**: 5-10 minutes from start

View File

@ -1,279 +0,0 @@
```
┌─────────────────────────────────────────────────────────────────────────┐
│ ARCHIPELAGO BUILD SYSTEM │
│ Multi-Hardware Support │
└─────────────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════════════
QUICK START COMMANDS
═══════════════════════════════════════════════════════════════════════════
🚀 BUILD FOR START9 SERVER PURE (NEW!)
┌─────────────────────────────────────────────────────────────────────────┐
│ cd image-recipe │
│ ./build-for-hardware.sh start9-pure iso │
│ │
│ Output: archipelago-0.1.0-start9-pure-x86_64.iso │
│ Time: ~45-60 minutes (first build) │
└─────────────────────────────────────────────────────────────────────────┘
🖥️ BUILD FOR HP PRODESK (PRESERVED)
┌─────────────────────────────────────────────────────────────────────────┐
│ cd image-recipe │
│ ./build-for-hardware.sh hp-prodesk iso │
│ │
│ Output: archipelago-0.1.0-hp-prodesk-x86_64.iso │
│ Time: ~45-60 minutes (first build) │
└─────────────────────────────────────────────────────────────────────────┘
🖥️ BUILD FOR DELL OPTIPLEX (PRESERVED)
┌─────────────────────────────────────────────────────────────────────────┐
│ cd image-recipe │
│ ./build-for-hardware.sh dell-optiplex iso │
│ │
│ Output: archipelago-0.1.0-dell-optiplex-x86_64.iso │
│ Time: ~45-60 minutes (first build) │
└─────────────────────────────────────────────────────────────────────────┘
🌐 BUILD FOR GENERIC x86_64 (FALLBACK)
┌─────────────────────────────────────────────────────────────────────────┐
│ cd image-recipe │
│ ./build-for-hardware.sh generic iso │
│ │
│ Output: archipelago-0.1.0-generic-x86_64.iso │
│ Time: ~45-60 minutes (first build) │
└─────────────────────────────────────────────────────────────────────────┘
🎯 BUILD ALL HARDWARE TARGETS AT ONCE
┌─────────────────────────────────────────────────────────────────────────┐
│ cd image-recipe │
│ ./build-all-hardware.sh iso │
│ │
│ Builds: start9-pure, hp-prodesk, dell-optiplex, generic │
│ Time: ~3-4 hours (first build) │
└─────────────────────────────────────────────────────────────────────────┘
🧪 QUICK TEST BUILD (VERIFY SYSTEM)
┌─────────────────────────────────────────────────────────────────────────┐
│ cd image-recipe │
│ ./test-start9-build.sh │
│ │
│ Purpose: Verify build system works │
│ Time: ~5-10 minutes │
└─────────────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════════════
HARDWARE SPECIFICATIONS
═══════════════════════════════════════════════════════════════════════════
┌─────────────────────┬──────────────────────────────────────────────────┐
│ START9 SERVER PURE │ - Intel i7-10710U (6 cores, 12 threads) │
│ (NEW!) │ - 32-64GB DDR4-3200 RAM │
│ │ - 2-4TB NVMe SSD (7,300 MB/s) │
│ Target: start9-pure │ - Intel UHD Graphics │
│ │ - 1x Gigabit Ethernet │
│ │ - Coreboot firmware │
│ │ │
│ Optimizations: │ • Intel i7-10710U microcode │
│ │ • NVMe I/O scheduler (none/noop) │
│ │ • Intel UHD Graphics acceleration (i915) │
│ │ • High-performance tuning (64GB RAM) │
│ │ • Professional-grade configurations │
└─────────────────────┴──────────────────────────────────────────────────┘
┌─────────────────────┬──────────────────────────────────────────────────┐
│ HP PRODESK 400 G4 │ - Various Intel processors │
│ (PRESERVED) │ - 8GB+ DDR4 RAM │
│ │ - 128GB+ SATA/NVMe SSD │
│ Target: hp-prodesk │ - Desktop Mini form factor │
│ │ - 1x Gigabit Ethernet │
│ │ - Intel Graphics │
│ │ │
│ Optimizations: │ • Generic Intel microcode │
│ │ • SATA/NVMe auto-detection │
│ │ • Compact form factor tuning │
│ │ • HP firmware compatibility │
└─────────────────────┴──────────────────────────────────────────────────┘
┌─────────────────────┬──────────────────────────────────────────────────┐
│ DELL OPTIPLEX │ - Various Intel processors │
│ (PRESERVED) │ - 8GB+ DDR4 RAM │
│ │ - 128GB+ SATA/NVMe SSD │
│ Target: │ - Multiple models (3050, 7050, 9020, etc.) │
│ dell-optiplex │ - 1x Gigabit Ethernet │
│ │ - Intel/AMD Graphics │
│ │ │
│ Optimizations: │ • Multi-model support │
│ │ • Dell firmware compatibility │
│ │ • Business-class features │
│ │ • Legacy hardware support │
└─────────────────────┴──────────────────────────────────────────────────┘
┌─────────────────────┬──────────────────────────────────────────────────┐
│ GENERIC x86_64 │ - Any x86_64 processor (Intel/AMD) │
│ (FALLBACK) │ - 8GB+ RAM recommended │
│ │ - 128GB+ HDD/SSD │
│ Target: generic │ - Any form factor │
│ │ - Any network adapter │
│ │ - Any graphics │
│ │ │
│ Optimizations: │ • Universal drivers │
│ │ • Intel & AMD support │
│ │ • Maximum compatibility │
│ │ • Generic firmware │
└─────────────────────┴──────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════════════
INSTALLATION STEPS
═══════════════════════════════════════════════════════════════════════════
STEP 1: FLASH ISO TO USB DRIVE
┌─────────────────────────────────────────────────────────────────────────┐
│ macOS: │
│ diskutil list # Find device │
│ diskutil unmountDisk /dev/diskX # Unmount │
│ sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \ │
│ of=/dev/rdiskX bs=1m status=progress │
│ │
│ Linux: │
│ lsblk # Find device │
│ sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \ │
│ of=/dev/sdX bs=1M status=progress │
│ │
│ GUI Tools: │
│ • balenaEtcher (recommended): https://www.balena.io/etcher/ │
│ • Rufus (Windows): https://rufus.ie/ │
└─────────────────────────────────────────────────────────────────────────┘
STEP 2: BOOT FROM USB
┌─────────────────────────────────────────────────────────────────────────┐
│ 1. Insert USB drive into target hardware │
│ 2. Power on the device │
│ 3. Press boot menu key: │
│ • Start9 Pure: F12 │
│ • HP ProDesk: F9 │
│ • Dell OptiPlex: F12 │
│ 4. Select USB drive from boot menu │
│ 5. Follow installation prompts │
└─────────────────────────────────────────────────────────────────────────┘
STEP 3: FIRST BOOT
┌─────────────────────────────────────────────────────────────────────────┐
│ 1. Remove USB drive │
│ 2. Reboot system │
│ 3. Hardware detection runs automatically │
│ 4. Services start (backend, containers) │
│ 5. Access UI at: http://<device-ip>:8100 │
└─────────────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════════════
BUILD OUTPUT FILES
═══════════════════════════════════════════════════════════════════════════
results/
├── archipelago-0.1.0-start9-pure-x86_64.iso [~350MB] 🆕
├── archipelago-0.1.0-hp-prodesk-x86_64.iso [~340MB] ✓
├── archipelago-0.1.0-dell-optiplex-x86_64.iso [~340MB] ✓
├── archipelago-0.1.0-generic-x86_64.iso [~360MB] ✓
├── BUILD_MANIFEST_start9-pure.txt 🆕
├── BUILD_MANIFEST_hp-prodesk.txt ✓
├── BUILD_MANIFEST_dell-optiplex.txt ✓
└── BUILD_MANIFEST_generic.txt ✓
═══════════════════════════════════════════════════════════════════════════
DOCUMENTATION MAP
═══════════════════════════════════════════════════════════════════════════
📖 START HERE
└── START9_SERVER_PURE_BUILD.md Start9 quick start guide
📖 QUICK REFERENCE
└── image-recipe/QUICK-REFERENCE.md Commands & troubleshooting
📖 DETAILED GUIDES
├── image-recipe/README-HARDWARE-BUILDS.md Comprehensive guide
└── MULTI_HARDWARE_BUILD_SYSTEM.md System design
📖 TECHNICAL DOCS
├── docs/building-os-images.md OS build details
└── docs/architecture.md System architecture
📖 COMPLETION SUMMARY
└── IMPLEMENTATION_COMPLETE.md This implementation
═══════════════════════════════════════════════════════════════════════════
ENVIRONMENT VARIABLES
═══════════════════════════════════════════════════════════════════════════
# Customize builds with environment variables:
export ARCHIPELAGO_VERSION="1.0.0" # Set version (default: 0.1.0)
export ALPINE_VERSION="3.20" # Alpine version (default: 3.19)
export ARCH="x86_64" # Architecture (default: x86_64)
export BUILD_TYPE="iso" # Build type: iso or disk
# Then build:
./build-for-hardware.sh start9-pure iso
═══════════════════════════════════════════════════════════════════════════
TROUBLESHOOTING
═══════════════════════════════════════════════════════════════════════════
❌ BUILD FAILS
┌─────────────────────────────────────────────────────────────────────────┐
│ # Clean everything │
│ rm -rf results/ build/ apks/ aports/ │
│ │
│ # Retry │
│ ./build-for-hardware.sh start9-pure iso │
└─────────────────────────────────────────────────────────────────────────┘
❌ DOCKER NOT RUNNING (macOS)
┌─────────────────────────────────────────────────────────────────────────┐
│ # Start Docker Desktop │
│ open -a Docker │
│ │
│ # Wait for it to start, then retry │
│ ./build-for-hardware.sh start9-pure iso │
└─────────────────────────────────────────────────────────────────────────┘
❌ OUT OF DISK SPACE
┌─────────────────────────────────────────────────────────────────────────┐
│ # Clean Docker (macOS) │
│ docker system prune -a │
│ │
│ # Clean build artifacts │
│ rm -rf build/ results/ apks/ │
└─────────────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════════════
BUILD TIMES
═══════════════════════════════════════════════════════════════════════════
┌───────────────────────┬─────────────────┬────────────────────┐
│ Build Type │ First Build │ Cached Build │
├───────────────────────┼─────────────────┼────────────────────┤
│ Single Target │ 45-60 minutes │ 10-15 minutes │
│ All Targets │ 3-4 hours │ 40-60 minutes │
│ Test Build │ 5-10 minutes │ 2-5 minutes │
└───────────────────────┴─────────────────┴────────────────────┘
═══════════════════════════════════════════════════════════════════════════
SUPPORT & RESOURCES
═══════════════════════════════════════════════════════════════════════════
📧 GitHub Issues : Report bugs and request features
💬 Discussions : Ask questions and share ideas
📚 Documentation : See docs/ folder
🌐 Community : Discord (coming soon)
═══════════════════════════════════════════════════════════════════════════
🏝️ ARCHIPELAGO - YOUR SOVEREIGN BITCOIN NODE OS
Now supporting Start9 Server Pure with optimizations!
ProDesk and OptiPlex builds fully preserved!
═══════════════════════════════════════════════════════════════════════════
```

View File

@ -1,85 +0,0 @@
# ✅ BACKEND BUILD COMPLETE - SUMMARY
## 🎯 Mission Accomplished!
Your Archipelago backend is **fully fixed** and **production-ready**!
## What Was Fixed
### 1. Hyper 0.14 Compatibility (The Root Cause!)
- **handler.rs** - Changed to use `hyper::Body` instead of Hyper 1.x types
- **rpc.rs** - Use `hyper::body::to_bytes()` for body reading
- **server.rs** - Replaced `hyper-util` (Hyper 1.x) with `hyper::server::conn::Http` (Hyper 0.14)
### 2. Code Quality - Zero Warnings!
- Removed 15+ unused imports across all modules
- Prefixed unused fields with `_` (reserved for future use)
- Added `#[allow(dead_code)]` to planned-but-not-yet-used code
- **Result: Clean build with ZERO warnings!**
## Files Changed
### Core Fixes (Hyper 0.14)
1. `core/archipelago/src/api/handler.rs`
2. `core/archipelago/src/api/rpc.rs`
3. `core/archipelago/src/server.rs`
### Code Quality (Dependencies)
4. `core/performance/src/resource_manager.rs`
5. `core/security/src/container_policies.rs`
6. `core/security/src/secrets_manager.rs`
7. `core/container/src/podman_client.rs`
8. `core/container/src/health_monitor.rs`
9. `core/parmanode/src/script_runner.rs`
### Code Quality (Main Binary)
10. `core/archipelago/src/auth.rs`
11. `core/archipelago/src/container/data_manager.rs`
12. `core/archipelago/src/container/dev_orchestrator.rs`
## 🚀 How to Build
```bash
cd /Users/dorian/Projects/archy
./clean-rebuild.sh
```
**Expected:** Clean build in ~20 seconds with **ZERO warnings**!
## 🎮 How to Run
```bash
./scripts/dev-start.sh
```
Choose **option 2** (Full stack with real backend)
Then open: **http://localhost:8100**
## 📊 Build Statistics
- **Total crates compiled:** ~170
- **Build time:** ~21 seconds (clean build)
- **Warnings:** 0 (was 8+ before fixes)
- **Errors:** 0 (was failing completely)
## 🎉 What This Means
Your backend now:
- ✅ Compiles successfully
- ✅ Uses correct Hyper 0.14 APIs
- ✅ Has zero compiler warnings
- ✅ Follows Rust best practices
- ✅ Is production-ready!
## Documentation Created
1. `HYPER_014_FIXES.md` - Technical details of Hyper fixes
2. `CODE_QUALITY_IMPROVEMENTS.md` - All warning fixes
3. `BUILD_COMPLETE.md` - This file!
---
**Everything is ready to go! 🚀**
Start the dev servers and your Bitcoin Node OS is live!

View File

@ -1,227 +0,0 @@
# ✅ BUILD COMPLETE - HP ProDesk Ready!
**Date**: January 31, 2026
**Status**: ✅ SUCCESS
**Build Time**: ~2 seconds
**ISO Size**: 208 MB
## 🎉 What We Accomplished
Successfully fixed the build system after encountering cross-architecture emulation issues on ARM Mac. The solution was to:
1. **Stop trying to build from scratch** on ARM Mac with x86_64 target
2. **Download pre-built Alpine ISO** (native x86_64)
3. **Extract and customize** using native macOS tools (7zip)
4. **Repackage as bootable ISO** with Archipelago branding and installer
## 📀 Your ISO is Ready!
**Location**: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso`
**File Info**:
- Format: ISO 9660 CD-ROM filesystem
- Label: ARCHIPELAGO
- Bootable: ✅ Yes (BIOS + UEFI)
- Size: 208 MB
## 💾 Installation Instructions
### Option 1: Create Bootable USB
```bash
# 1. Insert USB drive (minimum 512MB)
# 2. Find the device
diskutil list
# 3. Unmount the USB (replace diskN with your device, e.g., disk2)
diskutil unmountDisk /dev/diskN
# 4. Write ISO to USB (⚠️ This will ERASE the USB drive!)
sudo dd if=/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso of=/dev/rdiskN bs=1m
# 5. Eject when done
diskutil eject /dev/diskN
```
### Option 2: Boot HP ProDesk
1. Insert USB drive into HP ProDesk
2. Power on and press **F9** for boot menu
3. Select USB drive
4. Alpine Linux will boot with Archipelago branding
### Option 3: Test in Virtual Machine First
```bash
# Install QEMU if not already installed
brew install qemu
# Test boot the ISO
qemu-system-x86_64 \
-cdrom /Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso \
-m 2048 \
-boot d \
-enable-kvm
```
## 🚀 First Boot Setup
When the system boots:
1. **Login as root** (no password)
2. **Run the Archipelago installer**:
```bash
sh /media/cdrom/archipelago/install.sh
```
3. **What the installer does**:
- Installs Podman + container tools
- Creates `archipelago` user (password: archipelago)
- Configures DHCP networking (auto IP)
- Sets up data directories
- Configures SSH access
- Creates welcome message
4. **After installation**:
- Login with: `archipelago` / `archipelago`
- Change password: `passwd`
- System will get IP via DHCP automatically
- Access UI at: `http://<ip-address>:8100` (when backend is added)
## 📦 What's Included
### System Packages
- ✅ **Podman** - Rootless container runtime
- ✅ **crun** - Fast OCI-compatible runtime
- ✅ **fuse-overlayfs** - Overlay filesystem for rootless containers
- ✅ **slirp4netns** - User-mode networking
- ✅ **nginx** - Web server for UI
- ✅ **openssh** - Remote access
- ✅ **iptables & iproute2** - Network management
### Archipelago Components
- ✅ Installation script at `/media/cdrom/archipelago/install.sh`
- ✅ Auto-DHCP networking on all Ethernet interfaces
- ✅ Default user: `archipelago` / `archipelago`
- ✅ Data directories: `/var/lib/archipelago/{apps,secrets,logs,backups}`
- ✅ Custom MOTD with instructions
### Boot Configuration
- ✅ Custom branding: "Archipelago Bitcoin Node OS"
- ✅ Alpine Linux 3.19 LTS kernel
- ✅ GRUB + Syslinux bootloaders (BIOS + UEFI)
## 🔧 Technical Details
### Build Method Evolution
**❌ Original Approach (Failed)**:
- Custom Alpine `mkimage` profile
- Built entire system from scratch
- Required running x86_64 binaries under ARM emulation
- Failed with "Illegal instruction" error
**✅ New Approach (Success)**:
- Download pre-built Alpine x86_64 ISO
- Extract with 7zip (native tool)
- Add custom scripts and configuration
- Repackage as bootable ISO
- **No emulation, no cross-compilation!**
### Build Scripts
```bash
# Quick build for HP ProDesk
cd image-recipe
./build-for-hardware.sh hp-prodesk iso
# Build for other hardware
./build-for-hardware.sh start9 iso
./build-for-hardware.sh dell-optiplex iso
./build-for-hardware.sh generic iso
# Direct custom ISO build
./build-custom-iso.sh
```
### Files Modified
- ✅ `image-recipe/build-custom-iso.sh` - **NEW** (main build script)
- ✅ `image-recipe/build-for-hardware.sh` - Updated to use custom ISO method
- ✅ `image-recipe/alpine-profile/mkimg.archipelago.sh` - Simplified (not used anymore)
## 🎯 Next Steps
### Immediate Testing
- [ ] Test boot in VirtualBox/QEMU
- [ ] Verify installation script works
- [ ] Test network connectivity (DHCP)
- [ ] Test Podman container operations
### Hardware Testing
- [ ] Flash to USB drive
- [ ] Boot on HP ProDesk 400 G4 DM
- [ ] Verify hardware compatibility
- [ ] Test performance
### Integration
- [ ] Build Archipelago Rust backend as Alpine APK
- [ ] Include backend in ISO
- [ ] Configure backend to start automatically
- [ ] Add Vue.js UI files
- [ ] Test full stack (backend + UI + containers)
### Additional Hardware
- [ ] Build for Start9 Server Pure
- [ ] Build for Dell OptiPlex 7040 Micro
- [ ] Test on each hardware platform
## 📚 Documentation Created
- ✅ `HP_PRODESK_BUILD_SUCCESS.md` - Detailed success report
- ✅ `BUILD_COMPLETE_HP_PRODESK.md` - This file
- ✅ Updated `build-for-hardware.sh` comments
- ✅ Installation instructions in ISO
## 🐛 Issues Resolved
1. **❌ Issue**: "Illegal instruction" during mkimage
**✅ Fix**: Switched to pre-built ISO customization
2. **❌ Issue**: "tar: boot: Not found in archive"
**✅ Fix**: No longer building from scratch
3. **❌ Issue**: Cross-architecture emulation failures
**✅ Fix**: No emulation needed with new approach
4. **❌ Issue**: Complex mkimage profile syntax errors
**✅ Fix**: Profile not used anymore
5. **❌ Issue**: 30+ minute build times
**✅ Fix**: Now builds in ~2 seconds!
## 💡 Lessons Learned
1. **Don't fight the tools** - When cross-compilation is painful, customize pre-built artifacts instead
2. **Native is better** - Using native tools (7zip) avoids emulation issues
3. **Simpler is better** - The new approach is 1/10th the code and 100x faster
4. **ISO customization >> ISO building** - For our use case, we don't need to build from scratch
## 🎊 Success Metrics
- ✅ Build works on ARM Mac
- ✅ ISO is bootable (verified format)
- ✅ Hardware-specific builds supported
- ✅ Build time: **2 seconds** (vs 30+ minutes trying to build from scratch)
- ✅ ISO size: **208 MB** (compact!)
- ✅ No Docker/emulation issues
- ✅ Includes installation automation
- ✅ Custom Archipelago branding
- ✅ Ready for HP ProDesk hardware
## 🚢 Ready to Ship!
Your Archipelago OS ISO for HP ProDesk is complete and ready to test!
**Next**: Flash to USB and boot on hardware! 🚀

View File

@ -1,239 +0,0 @@
# Archipelago macOS Production Build
## Overview
This guide explains how to create a production-ready macOS application bundle (.app) and DMG installer for Archipelago Bitcoin Node OS.
## Prerequisites
- macOS 10.15 (Catalina) or later
- Xcode Command Line Tools: `xcode-select --install`
- Rust toolchain: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`
- Node.js 18+: `brew install node`
- Docker Desktop (for running containerized apps)
## Quick Build
```bash
./build-macos-production.sh
```
This will:
1. Build the Rust backend in release mode
2. Build the Vue.js frontend for production
3. Create a macOS app bundle structure
4. Generate app metadata (Info.plist)
5. Create app icon from your logo
6. Package everything into a DMG installer
## Build Output
The build creates:
- `build/macos/Archipelago.app` - macOS application bundle
- `build/macos/Archipelago-[version]-macOS.dmg` - DMG installer
## Installation
### For Testing
```bash
open build/macos/Archipelago.app
```
### For System-Wide Installation
```bash
cp -R build/macos/Archipelago.app /Applications/
```
### For Distribution
Share the DMG file: `build/macos/Archipelago-[version]-macOS.dmg`
Users can drag the app to their Applications folder.
## App Bundle Structure
```
Archipelago.app/
├── Contents/
│ ├── Info.plist # App metadata
│ ├── PkgInfo # Package type
│ ├── MacOS/
│ │ ├── launch.sh # Launch script
│ │ └── archipelago # Rust backend binary
│ ├── Resources/
│ │ ├── AppIcon.icns # App icon
│ │ ├── frontend/ # Vue.js production build
│ │ ├── docker-ui/ # Docker app UIs (Bitcoin Core, LND)
│ │ └── env.template # Configuration template
│ └── Frameworks/ # (Reserved for future use)
```
## Data Directories
The app stores data in standard macOS locations:
```
~/Library/Application Support/Archipelago/
├── data/ # Application data
└── logs/ # Log files
```
## Configuration
On first run, the app uses default settings. To customize:
1. Edit the configuration:
```bash
~/Library/Application Support/Archipelago/.env
```
2. Available settings:
- `ARCHIPELAGO_PORT` - Web UI port (default: 8100)
- `ARCHIPELAGO_BACKEND_PORT` - Backend API port (default: 3030)
- `RUST_LOG` - Log level (info, debug, trace)
## Docker Integration
Archipelago requires Docker Desktop for running Bitcoin Core, LND, and other containerized apps.
### First-Time Setup
1. Install Docker Desktop: https://www.docker.com/products/docker-desktop
2. Start Docker Desktop
3. Launch Archipelago
4. Open http://localhost:8100
5. Navigate to "My Apps" to start containers
### Docker Compose File
The app uses the included `docker-compose.yml` for container orchestration:
- Bitcoin Core (regtest mode)
- LND (Lightning Network)
- BTCPay Server
- Mempool Explorer
- Penpot (Design)
- Nextcloud (Cloud Storage)
- And more...
## Code Signing (Optional but Recommended)
For distribution outside the App Store, sign the app with your Developer ID:
```bash
# Sign the app
codesign --deep --force --verify --verbose \
--sign "Developer ID Application: Your Name" \
build/macos/Archipelago.app
# Verify signature
codesign --verify --verbose build/macos/Archipelago.app
```
## Notarization (Required for macOS 10.15+)
To distribute on macOS Catalina and later:
```bash
# Create a zip for notarization
ditto -c -k --keepParent build/macos/Archipelago.app Archipelago.zip
# Submit for notarization (requires Apple Developer account)
xcrun notarytool submit Archipelago.zip \
--apple-id "your@email.com" \
--team-id "TEAMID" \
--password "app-specific-password" \
--wait
# Staple the notarization ticket
xcrun stapler staple build/macos/Archipelago.app
```
## Troubleshooting
### App won't open - "damaged or can't be verified"
This happens with unsigned apps. Users can:
1. Right-click → Open (first time only)
2. Or remove quarantine: `xattr -cr /Applications/Archipelago.app`
### Backend fails to start
Check logs: `~/Library/Application Support/Archipelago/logs/archipelago.log`
### Docker containers won't start
Ensure Docker Desktop is running: `docker info`
### Port conflicts
Edit port in `~/Library/Application Support/Archipelago/.env`
## Building for Distribution
### Universal Binary (Intel + Apple Silicon)
```bash
# Build for both architectures
rustup target add x86_64-apple-darwin
rustup target add aarch64-apple-darwin
# Build Intel
cd core
cargo build --release --target x86_64-apple-darwin
# Build Apple Silicon
cargo build --release --target aarch64-apple-darwin
# Create universal binary
lipo -create \
target/x86_64-apple-darwin/release/archipelago \
target/aarch64-apple-darwin/release/archipelago \
-output target/release/archipelago
# Then run build script
cd ..
./build-macos-production.sh
```
## Automated Release Pipeline
For CI/CD (GitHub Actions, etc.):
```yaml
- name: Build macOS Release
run: |
./build-macos-production.sh
- name: Upload DMG
uses: actions/upload-artifact@v3
with:
name: Archipelago-macOS
path: build/macos/*.dmg
```
## Size Optimization
The production build is optimized:
- Rust backend: Strip symbols, LTO optimization
- Frontend: Minified, tree-shaken, compressed
- Total size: ~50-100MB (without Docker images)
To further reduce size:
```bash
cd core
cargo build --release
strip target/release/archipelago # Remove debug symbols
```
## Security Considerations
1. **Code Signing**: Required for Gatekeeper
2. **Notarization**: Required for macOS 10.15+
3. **Sandboxing**: Consider for Mac App Store
4. **Hardened Runtime**: Enable for notarization
5. **Secrets**: Never bundle private keys or passwords
## Support
For issues or questions:
- GitHub: https://github.com/archipelago/archipelago
- Docs: See `/docs` directory
---
Built with ❤️ by the Archipelago team

View File

@ -1,135 +0,0 @@
# 🚀 Archipelago Build Quick Reference
## ✅ Working Build Commands
### HP ProDesk 400 G4 DM
```bash
cd image-recipe
./build-for-hardware.sh hp-prodesk iso
```
**Output**: `results/archipelago-3.19-hp-prodesk-x86_64.iso` (208 MB)
### Start9 Server Pure
```bash
cd image-recipe
./build-for-hardware.sh start9 iso
```
**Output**: `results/archipelago-3.19-start9-pure-x86_64.iso`
### Dell OptiPlex 7040 Micro
```bash
cd image-recipe
./build-for-hardware.sh dell-optiplex iso
```
**Output**: `results/archipelago-3.19-dell-optiplex-x86_64.iso`
### Generic x86_64
```bash
cd image-recipe
./build-for-hardware.sh generic iso
```
**Output**: `results/archipelago-3.19-generic-x86_64.iso`
## 💿 Create Bootable USB (macOS)
```bash
# Find USB device
diskutil list
# Unmount (replace diskN with your device)
diskutil unmountDisk /dev/diskN
# Write ISO (⚠️ ERASES USB!)
sudo dd if=image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso of=/dev/rdiskN bs=1m
# Eject
diskutil eject /dev/diskN
```
## 🧪 Test in VM
```bash
# Install QEMU first
brew install qemu
# Test boot
qemu-system-x86_64 \
-cdrom image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso \
-m 2048 \
-boot d
```
## 🏝️ First Boot Setup
```bash
# Login as root (no password)
# Then run:
sh /media/cdrom/archipelago/install.sh
# Or for full Alpine install:
setup-alpine
# ... follow prompts ...
reboot
# After reboot:
sh /media/cdrom/archipelago/install.sh
```
## 🔧 Build System Status
| Component | Status | Notes |
|-----------|--------|-------|
| HP ProDesk Build | ✅ WORKING | Tested & verified |
| Start9 Build | ⚠️ UNTESTED | Should work (same method) |
| Dell OptiPlex Build | ⚠️ UNTESTED | Should work (same method) |
| Generic Build | ⚠️ UNTESTED | Should work (same method) |
| ARM Mac Compatibility | ✅ WORKING | No emulation issues! |
| Build Speed | ✅ ~2 seconds | Lightning fast! |
| ISO Size | ✅ 208 MB | Compact & portable |
## 📁 File Locations
```
image-recipe/
├── build-custom-iso.sh # Main build script ✅
├── build-for-hardware.sh # Hardware wrapper ✅
├── results/
│ ├── archipelago-3.19-hp-prodesk-x86_64.iso # Your ISO! ✅
│ └── BUILD_MANIFEST_hp-prodesk.txt
├── build/
│ └── iso-custom/
│ ├── alpine-base.iso # Cached Alpine ISO
│ └── custom/ # Modified contents
└── alpine-profile/ # Old method (deprecated)
```
## ⚡ Quick Rebuild
```bash
# Clean build (removes cache)
cd image-recipe
rm -rf build/ results/
./build-for-hardware.sh hp-prodesk iso
# Incremental build (uses cached Alpine ISO)
./build-for-hardware.sh hp-prodesk iso
```
## 🎯 Build Time Comparison
| Method | Time | Status |
|--------|------|--------|
| Old (mkimage from scratch) | 30+ min | ❌ Failed (emulation issues) |
| New (customize pre-built ISO) | ~2 sec | ✅ Success! |
## 📊 Build Success Summary
**HP ProDesk ISO**: Ready to flash!
**Build System**: Fixed & working
**ARM Mac**: Fully compatible
**Documentation**: Complete
**Next Step**: Test on hardware!
---
**Last Updated**: January 31, 2026
**Build Status**: ✅ PRODUCTION READY

View File

@ -1,83 +0,0 @@
# Backend Build Issue - SOLUTION
## The Problem
The backend keeps failing to build with the same errors, even after running `./fix-and-build.sh` twice.
## Why It's Failing
Looking at the error, the issue is that **my code fixes ARE in the files**, but cargo might be caching intermediate compilation artifacts. The error shows:
```
error[E0425]: cannot find type `Incoming` in crate `http_body_util`
```
But when I check the actual file, it shows the CORRECT code:
```rust
use hyper::body::{Bytes, Incoming}; // ✅ CORRECT!
...
req: Request<Incoming>, // ✅ CORRECT!
```
## The Solution: Clean Rebuild
Run this command to force cargo to recompile everything from scratch:
```bash
cd /Users/dorian/Projects/archy
./clean-rebuild.sh
```
This script will:
1. ✅ Clean all cached build artifacts (`cargo clean`)
2. ✅ Rebuild from scratch
3. ✅ Show success or failure
## Alternative Manual Steps
If the script doesn't work, run these commands manually:
```bash
cd /Users/dorian/Projects/archy/core
source ~/.cargo/env
cargo clean
cargo build --bin archipelago
```
## After Successful Build
Once the build completes successfully, you can run:
```bash
cd /Users/dorian/Projects/archy
./scripts/dev-start.sh
```
Choose option 2 (Full stack), and the **real backend** will start!
---
## Summary of All Fixes Applied
I've already fixed these files:
1. ✅ `core/archipelago/src/api/handler.rs` - Changed to `hyper::body::Incoming`
2. ✅ `core/archipelago/src/main.rs` - Removed unused imports
3. ✅ `core/archipelago/src/api/rpc.rs` - Cleaned up imports
4. ✅ `core/archipelago/src/api/mod.rs` - Removed unused re-export
5. ✅ `core/archipelago/src/container/data_manager.rs` - Fixed imports
6. ✅ `core/archipelago/src/container/dev_orchestrator.rs` - Fixed unused variable
7. ✅ `core/archipelago/src/container/mod.rs` - Cleaned up re-exports
8. ✅ `core/archipelago/src/server.rs` - Removed unused imports
**The code is ready - we just need a clean rebuild!**
---
## Run This Now
```bash
./clean-rebuild.sh
```
This should build successfully! 🎯

View File

@ -1,62 +0,0 @@
# BROWSER CACHE ISSUE - QUICK FIX
## Problem
The browser has cached the OLD JavaScript that still tries to use `window.open()` before checking for Bitcoin.
## Solution
### Option 1: Hard Refresh (Fastest)
1. Open http://localhost:8100
2. Press **Cmd+Shift+R** (Mac) or **Ctrl+Shift+R** (Windows/Linux)
3. This forces the browser to reload all JavaScript
4. Navigate to My Apps
5. Click Launch on Bitcoin Core
6. ✅ Should now open the custom UI!
### Option 2: Clear Cache (Most Thorough)
1. Open DevTools (F12)
2. Right-click the refresh button
3. Select "Empty Cache and Hard Reload"
4. Or: Go to Application > Clear Storage > Clear site data
### Option 3: Incognito/Private Window
1. Open a new incognito/private window
2. Go to http://localhost:8100
3. Test the launch button
4. Will use fresh JavaScript without cache
## What Changed
**OLD CODE** (line 192 in error):
```typescript
function launchApp(id: string) {
const lanAddress = pkg?.installed?.['interface-addresses']?.main?.['lan-address']
if (lanAddress) {
window.open(lanAddress, '_blank') // <-- Error here with 18443-18444
return
}
}
```
**NEW CODE** (current):
```typescript
function launchApp(id: string) {
// Special handling for Bitcoin Core - open custom UI
if (id === 'bitcoin') {
router.push('/dashboard/apps/bitcoin-core') // <-- Opens custom UI
return
}
// ... rest of code
}
```
## Verification
After hard refresh, check browser console:
- ✅ No more "Unable to open a window with invalid URL" error
- ✅ Clicking Launch routes to `/dashboard/apps/bitcoin-core`
- ✅ Beautiful glassmorphism UI appears
---
**The code is correct. Just need to clear browser cache!**

View File

@ -1,85 +0,0 @@
# Code Quality Improvements ✨
## Summary
All compiler warnings have been fixed! The codebase is now cleaner and follows Rust best practices.
## Changes Made
### 1. Removed Unused Imports
**performance/src/resource_manager.rs**
- Removed unused `warn` from `tracing` imports
**security/src/container_policies.rs**
- Removed unused `HashMap` import
**security/src/secrets_manager.rs**
- Removed unused `HashMap` import
- Prefixed unused `key` parameter with `_`
- Prefixed unused `encryption_key` field with `_`
**container/src/podman_client.rs**
- Removed unused `PortMapping`, `Volume`, and `Stdio` imports
- Removed unused `HashMap` import
- Added `#[allow(dead_code)]` to `podman_command()` (will be used later)
**container/src/health_monitor.rs**
- Removed unused `sleep` import
**parmanode/src/script_runner.rs**
- Removed unused `AppManifest` import
- Prefixed unused `podman` and `scripts_dir` fields with `_`
- Prefixed unused `container_name` variable with `_`
### 2. Fixed Unused Field Warnings in Main Binary
**archipelago/src/api/handler.rs**
- Prefixed `config` field with `_` (will be used for future features)
**archipelago/src/api/rpc.rs**
- Prefixed `config` field with `_`
**archipelago/src/server.rs**
- Prefixed `config` field with `_`
**archipelago/src/auth.rs**
- Added `#[allow(dead_code)]` to entire auth module (authentication not yet implemented)
**archipelago/src/container/data_manager.rs**
- Added `#[allow(dead_code)]` to `list_app_data_dirs()` (will be used for UI listing)
**archipelago/src/container/dev_orchestrator.rs**
- Added `#[allow(dead_code)]` to `get_port_mapping()` and `bitcoin_simulator()` (API methods for future use)
## Build Status
Run this to rebuild with all improvements:
```bash
cd /Users/dorian/Projects/archy
./clean-rebuild.sh
```
**Expected result:** Clean build with **ZERO warnings**! 🎉
## Why These Changes Matter
1. **Cleaner output** - No noise in build logs
2. **Better code quality** - Follows Rust conventions
3. **Intent clarity** - `_` prefix shows "unused for now but keeping for future"
4. **Professional** - Production-ready codebase
## Next Steps
Start the development servers:
```bash
./scripts/dev-start.sh
```
Choose option 2 for full stack!
---
**All code quality improvements complete!** The backend is production-ready! ✅

View File

@ -1,164 +0,0 @@
# 🎉 ALL ISSUES FIXED - READY TO RUN!
## Summary
Your Archipelago Bitcoin Node OS backend is now:
- ✅ Fully compiled (Hyper 0.14 compatible)
- ✅ Zero warnings (production-ready code)
- ✅ Properly configured (dev environment)
- ✅ Ready to run!
## Quick Start
```bash
cd /Users/dorian/Projects/archy
# 1. Rebuild (to apply last fix)
./clean-rebuild.sh
# 2. Start everything
./scripts/dev-start.sh
```
Choose **option 2** (Full stack)
Then open: **http://localhost:8100**
## All Fixes Applied
### Phase 1: Hyper 0.14 Compatibility ✅
- Fixed `handler.rs` - Use `hyper::Body`
- Fixed `rpc.rs` - Use `hyper::body::to_bytes()`
- Fixed `server.rs` - Use `hyper::server::conn::Http`
### Phase 2: Code Quality (Zero Warnings) ✅
- Removed 16 unused imports across all modules
- Prefixed unused fields/parameters with `_`
- Added `#[allow(dead_code)]` to future-use code
### Phase 3: Backend Startup Fix ✅
- Fixed permission error (use `/tmp/archipelago-dev`)
- Updated `dev-start.sh` with environment variables
- Created `setup-env.sh` for optional `.env` file
## Files Changed
**Total: 16 files modified + 4 docs created**
### Core Fixes (3 files)
1. `core/archipelago/src/api/handler.rs`
2. `core/archipelago/src/api/rpc.rs`
3. `core/archipelago/src/server.rs`
### Code Quality (13 files)
4. `core/performance/src/resource_manager.rs`
5. `core/security/src/container_policies.rs`
6. `core/security/src/secrets_manager.rs`
7. `core/container/src/podman_client.rs` (2 fixes)
8. `core/container/src/health_monitor.rs`
9. `core/parmanode/src/script_runner.rs`
10. `core/archipelago/src/auth.rs`
11. `core/archipelago/src/container/data_manager.rs`
12. `core/archipelago/src/container/dev_orchestrator.rs`
### Startup Fix (1 file + 1 script)
13. `scripts/dev-start.sh`
14. `setup-env.sh` (new)
### Documentation (4 files)
15. `HYPER_014_FIXES.md`
16. `CODE_QUALITY_IMPROVEMENTS.md`
17. `BACKEND_STARTUP_FIX.md`
18. `BUILD_COMPLETE.md`
## Expected Behavior
### Build
```bash
./clean-rebuild.sh
```
- **Time:** ~22 seconds
- **Warnings:** 0 (was 8+)
- **Errors:** 0
### Startup
```bash
./scripts/dev-start.sh
```
Choose option 2
**Backend log** (`tail -f /tmp/archipelago-backend.log`):
```
🚀 Starting Archipelago Bitcoin Node OS
📁 Data directory: /tmp/archipelago-dev
🌐 Server listening on http://127.0.0.1:5959
📡 RPC API: http://127.0.0.1:5959/rpc/v1
🔌 WebSocket: ws://127.0.0.1:5959/ws
```
**Frontend:** Starts automatically after backend is ready
**Browser:** http://localhost:8100
## Troubleshooting
### If backend still hangs:
1. **Check the log:**
```bash
cat /tmp/archipelago-backend.log
```
2. **Verify environment:**
```bash
./setup-env.sh # Creates core/.env
./scripts/dev-start.sh
```
3. **Manual start (for debugging):**
```bash
cd core
export ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev
export ARCHIPELAGO_DEV_MODE=true
cargo run --bin archipelago
```
### If build has warnings:
Run the rebuild script:
```bash
./clean-rebuild.sh
```
Should show **0 warnings**.
## What's Next?
Your development environment is ready! You can now:
1. **Develop the UI** - Edit files in `neode-ui/src/`
2. **Add backend features** - Edit files in `core/archipelago/src/`
3. **Add new apps** - Create new app manifests in `apps/`
4. **Build for production** - See `image-recipe/` for OS image builds
## Support
If you encounter any issues:
1. Check the backend log: `tail -f /tmp/archipelago-backend.log`
2. Check the docs: `docs/` directory
3. Review the architecture: `docs/architecture.md`
---
**🎊 Congratulations!**
Your Archipelago Bitcoin Node OS is fully operational!
Built with:
- Rust backend (Hyper 0.14, Tokio)
- Vue.js frontend (Vite, TanStack)
- Podman for containers
- Zero compiler warnings
**Ready for development!** 🚀

View File

@ -1,279 +0,0 @@
# 🎉 COMPLETE ARCHIPELAGO NODE OS - WITH APP MANIFESTS!
**Final Build**: January 31, 2026
**ISO**: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso`
**Size**: 278 MB
**Status**: ✅ PRODUCTION READY
---
## 📦 What's Included
### Core System
- ✅ Alpine Linux 3.19 LTS
- ✅ Podman (container runtime)
- ✅ nginx web server (port 8100)
- ✅ OpenSSH server
- ✅ DHCP auto-networking
### Archipelago Software
- ✅ **Rust Backend** (5.7 MB)
- RPC API (port 8101)
- Container orchestration
- WebSocket support
- ✅ **Vue.js Frontend** (14 MB)
- Dashboard
- App marketplace
- Container management UI
- ✅ **21 App Manifests** (ready to install)
---
## 🚀 The 21 Apps Ready to Install
### Bitcoin & Lightning (5 apps)
1. **Bitcoin Core** - Full Bitcoin node
2. **LND** - Lightning Network Daemon
3. **Core Lightning** - Alternative Lightning implementation
4. **BTCPay Server** - Bitcoin payment processor
5. **Mempool** - Bitcoin blockchain explorer
### Decentralized Web (6 apps)
6. **Nostr RS Relay** - Nostr relay (Rust)
7. **Strfry** - High-performance Nostr relay
8. **Web5 DWN** - Decentralized Web Node
9. **DID Wallet** - Decentralized Identity wallet
10. **Endurain** - Fitness tracking
11. **MorphOS Server** - Decentralized storage
### Mesh & Networking (2 apps)
12. **Meshtastic** - LoRa mesh networking
13. **Router** - Network routing & discovery
### Self-Hosted Services (8 apps)
14. **Home Assistant** - Smart home automation
15. **Grafana** - Metrics & monitoring
16. **SearXNG** - Private metasearch engine
17. **Ollama** - Local AI models
18. **OnlyOffice** - Office suite
19. **Penpot** - Design & prototyping
20. **Fedimint** - Federated Chaumian e-cash
21. **Lightning Stack** - Combined Lightning tools
---
## 💡 How It Works
### What Happens When You Boot
1. **Alpine Linux boots** from USB
2. **Installation script available** at `/media/cdrom/archipelago/install.sh`
3. **Run installer** → copies everything to disk
4. **System reboots** → services auto-start
5. **Web UI accessible** at `http://device-ip:8100`
### What Happens When You Install an App
**Example: Installing Bitcoin Core**
1. **Open Web UI** → Navigate to Apps/Marketplace
2. **Click "Bitcoin Core"** → Shows manifest details
- Description
- Resource requirements (RAM, disk, CPU)
- Network ports
- Dependencies
3. **Click "Install"**
- Backend reads `/var/lib/archipelago/manifests/bitcoin-core/manifest.yml`
- Pulls Docker image: `lncm/bitcoind:v27.0` (~500 MB download)
- Creates Podman container with correct config
- Mounts data volumes
- Configures networking
- Starts the container
4. **Status updates** via WebSocket to UI
5. **Bitcoin Core running!**
---
## 📋 App Manifest System
Each app has a `manifest.yml` that defines:
```yaml
name: bitcoin-core
version: 27.0
image: lncm/bitcoind:v27.0
resources:
min_ram: 2GB
min_disk: 600GB
cpu_priority: high
ports:
- 8332:8332 # RPC
- 8333:8333 # P2P
volumes:
- bitcoin-data:/data
environment:
- BITCOIN_DATA=/data
dependencies: []
```
The **backend reads these manifests** and:
- Validates requirements
- Pulls container images
- Creates containers
- Manages lifecycle
---
## 🎯 User Experience Flow
### First Boot
```
1. Boot from USB
2. Login as root
3. Run: sh /media/cdrom/archipelago/install.sh
4. Reboot
5. Login as archipelago/archipelago
6. Open browser → http://device-ip:8100
```
### Installing Apps
```
Web UI → Apps → Bitcoin Core → Install
Backend pulls image (shows progress)
Container created & started
Dashboard shows Bitcoin Core running ✅
```
### The Apps DON'T Pre-Download Because:
1. **Size** - Would make ISO 10+ GB instead of 278 MB
2. **Choice** - Users may not want all apps
3. **Updates** - Pulling fresh ensures latest versions
4. **Storage** - Saves 500+ GB for user data
---
## 📊 Size Comparison
| Item | Size | When Downloaded |
|------|------|----------------|
| **ISO (total)** | **278 MB** | **Pre-included** |
| Alpine base | 130 MB | ✅ Pre-included |
| Backend | 6 MB | ✅ Pre-included |
| Frontend | 14 MB | ✅ Pre-included |
| App manifests | <1 MB | Pre-included |
| | | |
| **Container Images** | **Varies** | **On-demand** |
| Bitcoin Core | 500 MB | When you install it |
| LND | 100 MB | When you install it |
| BTCPay Server | 800 MB | When you install it |
| Mempool | 200 MB | When you install it |
| All 21 apps | ~5 GB | If you install all |
| | | |
| **Data Storage** | **Grows** | **During use** |
| Bitcoin blockchain | 500+ GB | Syncs over days |
| Lightning channels | 1-10 GB | As you use it |
| App data | Varies | As you use apps |
---
## 🔧 Technical Details
### Manifest Storage
After installation, manifests are at:
```
/var/lib/archipelago/manifests/
├── bitcoin-core/
│ ├── manifest.yml
│ └── Dockerfile
├── lnd/
│ ├── manifest.yml
│ └── Dockerfile
└── ... (19 more apps)
```
### Backend Integration
The Rust backend:
1. Scans `/var/lib/archipelago/manifests/` on startup
2. Loads all manifest files
3. Makes them available via API
4. Web UI fetches list and displays in marketplace
5. When user clicks "Install":
- Backend validates manifest
- Checks resources
- Pulls image via Podman
- Creates container
- Updates database
- Sends status to UI
### Container Management
```bash
# List running containers
podman ps
# View Bitcoin Core logs
podman logs bitcoin-core
# Stop Bitcoin Core
podman stop bitcoin-core
# Start Bitcoin Core
podman start bitcoin-core
```
Or do it all from the Web UI! 🎨
---
## 🚀 Flash & Boot
### Create Bootable USB
```bash
# Find USB
diskutil list
# Unmount
diskutil unmountDisk /dev/diskN
# Flash
sudo dd if=/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso of=/dev/rdiskN bs=1m
# Eject
diskutil eject /dev/diskN
```
### Boot HP ProDesk
1. Insert USB
2. Power on, press F9
3. Select USB
4. Run installer
5. Enjoy! 🎉
---
## ✅ Summary
**You now have a complete Bitcoin Node OS that**:
✅ Boots from USB in 30 seconds
✅ Installs in 2 minutes
✅ Auto-starts backend & UI
✅ Shows 21 apps ready to install
✅ Pulls images on-demand
✅ Manages containers automatically
✅ Provides beautiful web interface
✅ Uses minimal resources
✅ Is production-ready!
**The manifests are included** → Apps show up in UI
**The images are NOT included** → Downloaded when you install
**This is the best of both worlds** → Small ISO, full functionality!
---
**Next**: Flash to USB and boot! 🚀

View File

@ -1,225 +0,0 @@
# Archipelago v0.1.0 - macOS Production Deployment
## Pre-Deployment Checklist
### 1. Code Preparation
- [ ] All features complete and tested
- [ ] No debug code or console.logs in production
- [ ] All TODOs resolved or documented
- [ ] Git repository clean (`git status`)
- [ ] Version bumped in:
- [ ] `core/archipelago/Cargo.toml`
- [ ] `neode-ui/package.json`
- [ ] `build-macos-production.sh` (ARCHIPELAGO_VERSION)
### 2. Security Review
- [ ] No hardcoded secrets or API keys
- [ ] Production `.env` template created
- [ ] Secure default configurations
- [ ] Authentication enabled
- [ ] CORS configured properly
- [ ] Rate limiting enabled
- [ ] Input validation on all endpoints
### 3. Testing
- [ ] Backend builds successfully: `cd core && cargo build --release`
- [ ] Frontend builds successfully: `cd neode-ui && npm run build`
- [ ] All Docker containers start: `docker-compose up -d`
- [ ] Web UI accessible on http://localhost:8100
- [ ] Bitcoin Core UI accessible on http://localhost:18445
- [ ] LND UI accessible on http://localhost:8085
- [ ] Penpot launches correctly
- [ ] Endurain launches correctly
- [ ] Morphos launches correctly
- [ ] Nextcloud launches correctly
- [ ] No console errors in browser
- [ ] WebSocket connection stable
- [ ] App restart works correctly
### 4. Build Preparation
- [ ] Dependencies up to date:
- [ ] `cd neode-ui && npm audit fix`
- [ ] `cd core && cargo update`
- [ ] Build scripts executable:
- [ ] `chmod +x build-macos-production.sh`
- [ ] `chmod +x manage-docker.sh`
- [ ] Icon prepared (`logo.png` in `neode-ui/public/assets/img/`)
- [ ] Build directory clean: `rm -rf build/macos`
### 5. Documentation
- [ ] README.md updated
- [ ] BUILD_MACOS.md reviewed
- [ ] CHANGELOG.md created with release notes
- [ ] Installation instructions tested
- [ ] Troubleshooting guide updated
## Build Process
### 1. Run Production Build
```bash
export ARCHIPELAGO_VERSION="0.1.0"
./build-macos-production.sh
```
Expected output:
```
✅ Production build complete!
📦 Build artifacts:
• App Bundle: build/macos/Archipelago.app
• DMG Installer: build/macos/Archipelago-0.1.0-macOS.dmg
📋 Build summary:
• Backend: [size] (Rust)
• Frontend: [size] (Vue.js)
• Total Bundle: [size]
```
### 2. Test the Build
```bash
# Test app launch
open build/macos/Archipelago.app
# Check it opens on http://localhost:8100
# Verify all features work
```
### 3. Code Signing (Required for Distribution)
```bash
# Sign the app
codesign --deep --force --verify --verbose \
--sign "Developer ID Application: Your Name (TEAMID)" \
--options runtime \
build/macos/Archipelago.app
# Verify signature
codesign --verify --verbose build/macos/Archipelago.app
spctl --assess --verbose build/macos/Archipelago.app
```
### 4. Notarization (macOS 10.15+)
```bash
# Create signed zip
ditto -c -k --keepParent build/macos/Archipelago.app Archipelago.zip
# Submit for notarization
xcrun notarytool submit Archipelago.zip \
--apple-id "your@email.com" \
--team-id "TEAMID" \
--password "app-specific-password" \
--wait
# Get submission status
xcrun notarytool info SUBMISSION_ID \
--apple-id "your@email.com" \
--team-id "TEAMID" \
--password "app-specific-password"
# Staple the ticket
xcrun stapler staple build/macos/Archipelago.app
# Create notarized DMG
hdiutil create -volname "Archipelago $ARCHIPELAGO_VERSION" \
-srcfolder build/macos/Archipelago.app \
-ov -format UDZO \
build/macos/$DMG_NAME
xcrun stapler staple build/macos/$DMG_NAME
```
### 5. Final Verification
```bash
# Verify notarization
spctl --assess --type execute --verbose build/macos/Archipelago.app
# Test DMG
hdiutil attach build/macos/Archipelago-0.1.0-macOS.dmg
# Verify contents
hdiutil detach /Volumes/Archipelago*
```
## Distribution
### Direct Distribution
Upload `Archipelago-0.1.0-macOS.dmg` to:
- [ ] GitHub Releases
- [ ] Your website download page
- [ ] Update download links
### GitHub Release
```bash
# Tag the release
git tag -a v0.1.0 -m "Archipelago v0.1.0 - Initial macOS Release"
git push origin v0.1.0
# Create GitHub release
gh release create v0.1.0 \
build/macos/Archipelago-0.1.0-macOS.dmg \
--title "Archipelago v0.1.0" \
--notes "See CHANGELOG.md for details"
```
## Post-Deployment
### 1. Monitoring
- [ ] Set up analytics/crash reporting (optional)
- [ ] Monitor GitHub issues for bugs
- [ ] Check installation feedback
### 2. Documentation
- [ ] Update website with new version
- [ ] Announce on social media
- [ ] Update documentation links
### 3. Support
- [ ] Create installation video tutorial
- [ ] Prepare FAQ document
- [ ] Set up support channels (Discord, GitHub Discussions)
## Rollback Plan
If critical issues are discovered:
1. **Remove from download page immediately**
2. **Post warning on GitHub releases**
3. **Prepare hotfix release**
4. **Communicate with users**
## Known Limitations - v0.1.0
- Requires Docker Desktop (not native containers)
- Ollama removed due to size constraints
- Manual Docker configuration required
- No auto-updates (yet)
- Single-user mode only
## Future Improvements
- [ ] Auto-updater integration
- [ ] Native container runtime (no Docker Desktop required)
- [ ] Multi-user support
- [ ] Mac App Store distribution
- [ ] Homebrew formula: `brew install --cask archipelago`
- [ ] Background service mode (launch daemon)
## Team Sign-off
Before release:
- [ ] Developer approval
- [ ] QA approval
- [ ] Security review
- [ ] Legal review (licenses, copyright)
- [ ] Release manager approval
---
**Build Date**: _________________
**Built By**: _________________
**Tested By**: _________________
**Approved By**: _________________

View File

@ -1,121 +0,0 @@
# Dev Mode 2 - Docker Integration Fix
## Problem
When running `scripts/dev-start.sh` and selecting option 2 (Full stack), the Docker containers (including Bitcoin Core) were not automatically started. The script only started the Rust backend and Vue frontend.
## Solution
Updated `scripts/dev-start.sh` to automatically call `start-docker-apps.sh` before starting the backend and frontend.
## What Changed
### `/Users/dorian/Projects/archy/scripts/dev-start.sh`
**Mode 2 (Full stack) now:**
1. ✅ Starts Docker containers first (`start-docker-apps.sh`)
2. ✅ Starts Rust backend with Docker runtime enabled
3. ✅ Starts Vue frontend
4. ✅ Shows helpful message that Docker containers keep running
**Manual instructions (option 6) now:**
- Shows Docker startup as Terminal 1
- Shows correct environment variables
- Shows how to stop Docker apps
## How to Use
### Automatic (Recommended)
```bash
cd /Users/dorian/Projects/archy
./scripts/dev-start.sh
# Choose option 2: Full stack
```
This will now:
1. Start all 13 Docker apps (Bitcoin Core, BTCPay, LND, Mempool, etc.)
2. Start the Rust backend with Docker scanning enabled
3. Start the Vue frontend
4. Open http://localhost:8100
### Manual (Advanced)
```bash
# Terminal 1: Docker Apps
cd /Users/dorian/Projects/archy
./start-docker-apps.sh
# Terminal 2: Backend
cd /Users/dorian/Projects/archy/core
export ARCHIPELAGO_CONTAINER_RUNTIME=docker
export ARCHIPELAGO_DEV_MODE=true
cargo run --bin archipelago
# Terminal 3: Frontend
cd /Users/dorian/Projects/archy/neode-ui
npm run dev
```
## Docker Container Management
### View running containers
```bash
docker ps
```
### View logs
```bash
docker compose logs -f bitcoin
docker compose logs -f btcpay
```
### Stop all containers
```bash
cd /Users/dorian/Projects/archy
./stop-docker-apps.sh
# OR
docker compose down
```
### Restart a specific container
```bash
docker compose restart bitcoin
```
## Bitcoin Core Status
Bitcoin Core is now:
- ✅ Running in Docker container `archy-bitcoin`
- ✅ Accessible on RPC port 18443
- ✅ In regtest mode (no blockchain sync)
- ✅ Scanned by Rust backend every 5 seconds
- ✅ Displayed in "My Apps" section
- ✅ Launch button opens custom glassmorphism UI in new tab
## Architecture Flow
```
dev-start.sh (mode 2)
start-docker-apps.sh
docker-compose.yml (starts all 13 apps)
Rust backend (scans Docker containers)
Vue frontend (displays apps with real status)
```
## Notes
- Docker containers keep running even after Ctrl+C
- This is intentional for faster restarts
- Use `docker compose down` or `./stop-docker-apps.sh` to stop them
- First run will download ~3-5GB of Docker images
- Subsequent runs are instant
## Related Files
- `/Users/dorian/Projects/archy/scripts/dev-start.sh` - Main dev launcher
- `/Users/dorian/Projects/archy/start-docker-apps.sh` - Docker startup
- `/Users/dorian/Projects/archy/stop-docker-apps.sh` - Docker shutdown
- `/Users/dorian/Projects/archy/docker-compose.yml` - All 13 apps
- `/Users/dorian/Projects/archy/core/archipelago/src/container/docker_packages.rs` - Docker scanner
- `/Users/dorian/Projects/archy/neode-ui/public/bitcoin-core.html` - Bitcoin Core UI

View File

@ -1,266 +0,0 @@
# Disk Space Cleanup Report
**Date:** January 28, 2026
**Project:** Archipelago Bitcoin Node OS
## Executive Summary
**Successfully cleaned up 2.1GB of build artifacts**
**Reduced project size from 2.8GB to 710MB** (75% reduction)
**All applications remain functional**
⚠️ **Build artifacts WILL continue growing** - mitigation strategy provided below
---
## Initial State
| Component | Size | % of Total |
|-----------|------|------------|
| **Total Project** | **2.8GB** | **100%** |
| Rust build artifacts (`core/target/`) | 1.7GB | 61% |
| Node modules (multiple locations) | 433MB | 15% |
| Vue.js UI (`neode-ui/`) | 246MB | 9% |
| Apps directory | 434MB | 15% |
| Docker images (external) | 26.75GB | N/A |
### Breakdown of Build Artifacts
**Rust Debug Builds (1.4GB):**
- `deps/`: 1.1GB (594 intermediate files - `.rlib`, `.rmeta`)
- `incremental/`: 213MB (incremental compilation cache)
- `build/`: 24MB (build scripts)
**Rust Release Builds:** 341MB
**Node Modules:**
- `neode-ui/node_modules`: 181MB
- `apps/did-wallet/node_modules`: 168MB
- `apps/web5-dwn/node_modules`: 168MB
- `apps/router/node_modules`: 33MB
- `apps/morphos-server/node_modules`: 32MB
- `apps/endurain/node_modules`: 32MB
---
## Actions Taken
### 1. Cleaned Rust Build Artifacts
```bash
cargo clean
```
**Result:** Removed 12,287 files, freed 2.1GB
### 2. Removed Unused Node Modules
```bash
rm -rf apps/*/node_modules
```
**Result:** Freed 433MB (these were only needed for Docker image builds, not currently in use)
### 3. Updated `.gitignore`
Added missing critical entries:
- `node_modules/` and `**/node_modules/`
- `package-lock.json`
- Build outputs (`dist/`, `build/`)
- Log files
- Additional temporary files
**Why this matters:** Without proper `.gitignore`, build artifacts could be accidentally committed to Git, causing:
- Massive repository bloat
- Slow clone/push/pull operations
- Merge conflicts in generated files
- Wasted CI/CD time
---
## Final State
| Component | Size | Change |
|-----------|------|--------|
| **Total Project** | **710MB** | **-75%** |
| Rust source (`core/`) | 3.5MB | ✅ Clean |
| Vue.js UI (`neode-ui/`) | 246MB | ⚠️ Includes `node_modules` |
| Apps directory | 644KB | ✅ Clean |
| Docker images (external) | 26.75GB | ⚠️ Separate system |
---
## Will This Be an Ongoing Issue?
### YES - Build Artifacts Will Keep Growing
**Why:**
1. **Rust Incremental Compilation:** Every `cargo build` creates intermediate files in `target/debug/` or `target/release/`
2. **Dependencies:** Each dependency compiles to multiple files (`.rlib`, `.rmeta`, `.o`)
3. **Multiple Build Profiles:** Debug + Release = 2x the artifacts
4. **Incremental State:** The `incremental/` directory grows with each partial rebuild
**Growth Pattern:**
- First build: ~1.5GB
- After 10 rebuilds: +200-500MB (incremental state)
- After 100 rebuilds: +1-2GB (accumulated artifacts)
### Mitigation Strategy
#### Option 1: Manual Cleanup (Recommended for Development)
```bash
# Clean all build artifacts
cargo clean
# Clean only debug builds (keeps release)
cargo clean --target-dir target/debug
# Clean specific package
cargo clean -p archipelago
```
**When to run:**
- Weekly during active development
- Before committing large changes
- When disk space is low
#### Option 2: Automated Cleanup Script
Create `scripts/cleanup.sh`:
```bash
#!/bin/bash
# Clean Rust artifacts older than 7 days
find /Users/dorian/Projects/archy/core/target -type f -mtime +7 -delete
# Keep only last 2 release builds
cd /Users/dorian/Projects/archy/core
cargo clean --release
```
#### Option 3: CI/CD Best Practices (For Production)
- Use Docker layer caching for builds
- Mount `target/` as a cache volume (not in final image)
- Use `cargo-chef` for efficient dependency caching
---
## Docker System Considerations
### Current Docker Usage
```
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 22 16 26.75GB 22.89GB (85%)
Containers 18 17 617.5MB 4KB (0%)
Local Volumes 24 21 1.286GB 68MB (5%)
```
**⚠️ Docker is using 26.75GB** - but this is **separate from the project directory**
### Docker Cleanup Commands
```bash
# Remove unused images (will free ~22.89GB)
docker image prune -a
# Remove all stopped containers
docker container prune
# Remove unused volumes
docker volume prune
# Nuclear option: clean everything
docker system prune -a --volumes
```
**⚠️ WARNING:** Don't run Docker prune commands unless you want to re-download all images!
---
## Recommendations
### Immediate Actions
**Done:** Build artifacts cleaned
**Done:** `.gitignore` updated
**Done:** Unused `node_modules` removed
### Ongoing Maintenance
**Weekly:**
```bash
# Clean Rust artifacts
cd /Users/dorian/Projects/archy/core && cargo clean --target-dir target/debug
```
**Monthly:**
```bash
# Full cleanup
cd /Users/dorian/Projects/archy/core && cargo clean
# Docker cleanup (if needed)
docker image prune -a -f --filter "until=720h" # Remove images older than 30 days
```
**Before Releases:**
```bash
# Clean everything
cargo clean
rm -rf apps/*/node_modules
rm -rf neode-ui/dist neode-ui/dev-dist
```
### CI/CD Configuration
If you set up CI/CD:
1. Cache `target/` between builds (but clean weekly)
2. Use separate cache keys for debug/release
3. Limit cache size to 2GB max
4. Use `cargo-sweep` to remove old artifacts
---
## What's Normal vs. Abnormal
### Normal Growth Pattern
- **After fresh build:** 1-2GB in `target/`
- **After 10 rebuilds:** +200-500MB
- **After 100 rebuilds:** +1-2GB
- **Node modules:** 100-200MB per JS project
### Abnormal Growth (Investigate!)
- `target/` > 5GB after a few builds → Possible duplicate dependencies
- `node_modules` > 500MB for a simple project → Audit dependencies
- Log files > 1GB → Configure log rotation
- Docker images > 50GB → Clean up old images
---
## Verification
### ✅ Application Health Check
```bash
# All Docker containers running
docker ps
> 17/18 containers running (1 restarting - expected)
# Rust project compiles
cargo build --release
> ✅ Compiling successfully
# No functionality lost
- Bitcoin Core: Running (regtest)
- LND: Running
- BTCPay Server: Running
- Mempool: Running
- Grafana: Running
- All UI services: Running
```
### ✅ No Data Loss
- Configuration files: Intact
- Docker volumes: Intact (1.286GB)
- Source code: Intact
- Git history: Intact
---
## Conclusion
**Problem:** Project grew to 2.8GB due to accumulated Rust build artifacts (1.7GB) and unused Node modules (433MB).
**Solution:** Cleaned 2.1GB of artifacts, reducing project to 710MB. Updated `.gitignore` to prevent future commits of build artifacts.
**Ongoing:** Build artifacts will continue growing during development. Run `cargo clean` weekly or when disk space is tight. This is **normal for Rust projects** and not a bug or issue.
**Docker:** Separately uses 26.75GB for images. Consider cleaning unused images monthly with `docker image prune -a` (but be aware you'll need to re-download).
**Status:** ✅ All applications working, no data lost, cleanup successful.

View File

@ -1,302 +0,0 @@
# Archipelago Docker Development Environment
This setup provides a complete development environment with all apps running in Docker containers, mimicking the production environment as closely as possible.
## Overview
All apps from the "My Apps" page are prepackaged and run as Docker containers:
- **Bitcoin Core** (regtest mode - no blockchain sync)
- **BTCPay Server** (Bitcoin payment processor)
- **Endurain** (placeholder)
- **Fedimint** (federated Bitcoin mint)
- **Grafana** (monitoring/analytics)
- **Home Assistant** (home automation)
- **Lightning Stack** (LND - Lightning Network)
- **Mempool** (blockchain explorer)
- **MorphOS Server** (placeholder)
- **Ollama** (local LLM)
- **OnlyOffice** (office suite)
- **Penpot** (design platform)
- **SearXNG** (privacy-respecting search)
## Quick Start
### Prerequisites
- Docker Desktop installed and running
- Node.js 18+ installed
- ~4GB of free disk space for Docker images
### Starting Development Environment
From the `neode-ui` directory:
```bash
npm start
```
This will:
1. Check and start Docker Desktop if needed
2. Start all Docker containers with apps
3. Start the mock backend API server (port 5959)
4. Start the Vite dev server (port 8100)
### Stopping Everything
From the `neode-ui` directory:
```bash
npm stop
```
This stops all Node processes and Docker containers.
## Manual Docker Control
### Start all Docker apps
```bash
./start-docker-apps.sh
```
### Stop all Docker apps
```bash
./stop-docker-apps.sh
```
### View logs for a specific app
```bash
docker compose logs -f [service-name]
# Examples:
docker compose logs -f bitcoin
docker compose logs -f btcpay
docker compose logs -f lnd
```
### Restart a specific app
```bash
docker compose restart [service-name]
```
### View all running containers
```bash
docker compose ps
```
## App URLs
All apps are accessible on localhost with unique ports:
| App | URL | Notes |
|-----|-----|-------|
| Bitcoin Core | http://localhost:18443 | RPC only (regtest) |
| BTCPay Server | http://localhost:14142 | Full UI |
| Endurain | http://localhost:8084 | Placeholder |
| Fedimint | http://localhost:8173 | API |
| Grafana | http://localhost:3000 | UI (admin/admin) |
| Home Assistant | http://localhost:8123 | Full UI |
| Lightning (REST) | http://localhost:8080 | REST API |
| Lightning (gRPC) | localhost:10009 | gRPC |
| Mempool | http://localhost:4080 | Full UI |
| MorphOS | http://localhost:8081 | Placeholder |
| Ollama | http://localhost:11434 | API |
| OnlyOffice | http://localhost:8083 | Full UI |
| Penpot | http://localhost:9001 | Full UI |
| SearXNG | http://localhost:8082 | Full UI |
## Architecture
### Docker Compose Structure
The `docker-compose.yml` file orchestrates all services:
- **Networking**: All services run on a shared `archy-net` bridge network
- **Volumes**: Persistent data stored in Docker volumes
- **Dependencies**: Services with dependencies (e.g., BTCPay depends on Bitcoin Core) start in the correct order
### Bitcoin & Lightning
- **Bitcoin Core** runs in regtest mode (no mainnet/testnet sync)
- **LND** connects to Bitcoin Core for Lightning functionality
- Both are pre-configured to work together without blockchain sync
- Generate test blocks with: `docker exec archy-bitcoin bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoinpass generatetoaddress 101 <address>`
### Database Services
Some apps require databases:
- BTCPay Server → PostgreSQL
- Mempool → MariaDB
- Penpot → PostgreSQL + Redis
These are automatically started as supporting services.
## Development Workflow
### Starting Development
```bash
cd neode-ui
npm start
```
The UI will be available at http://localhost:8100
### Testing App Launch
1. Open http://localhost:8100 in your browser
2. Navigate to "My Apps"
3. Apps appear alphabetically and stay in order regardless of state
4. Click "Launch" on any running app to open it in a new tab
### Stop/Start Apps
Use the UI buttons or manually:
```bash
# Stop an app
docker compose stop bitcoin
# Start an app
docker compose start bitcoin
# Restart an app
docker compose restart bitcoin
```
### Viewing Logs
Monitor app logs:
```bash
# All logs
docker compose logs -f
# Specific app
docker compose logs -f bitcoin
# Last 50 lines
docker compose logs --tail=50 bitcoin
```
### Resetting Data
Remove all app data and start fresh:
```bash
./stop-docker-apps.sh
docker compose down -v # Remove volumes
./start-docker-apps.sh
```
## Configuration
### Bitcoin Core (Regtest)
Configuration is in `docker-compose.yml`:
- RPC user: `bitcoin`
- RPC password: `bitcoinpass`
- Ports: 18443 (RPC), 18444 (P2P)
### Grafana
Default credentials:
- Username: `admin`
- Password: `admin`
### App Icons
Icons are loaded from `/assets/img/app-icons/` in the UI.
## Troubleshooting
### Docker not starting
```bash
# Check if Docker is running
docker ps
# Start Docker Desktop manually
open -a Docker
```
### Port conflicts
If a port is already in use, modify `docker-compose.yml`:
```yaml
services:
bitcoin:
ports:
- "18443:18443" # Change left side to a free port
```
### App won't start
Check logs:
```bash
docker compose logs [service-name]
```
Restart the container:
```bash
docker compose restart [service-name]
```
### Out of disk space
Clean up unused Docker data:
```bash
docker system prune -a --volumes
```
### Reset everything
```bash
npm stop
docker compose down -v
docker system prune -a
npm start
```
## Production vs Development
### Development
- Bitcoin Core in regtest (no blockchain)
- LND without real channels
- All services on localhost
- Placeholder apps for unimplemented services
### Production (Future)
- Bitcoin Core syncing mainnet
- LND with real Lightning channels
- Services behind reverse proxy
- All apps fully functional
- Tor integration
- Hardware security
## Next Steps
- Implement real start/stop functionality in the UI
- Connect backend API to Docker API
- Add health checks and status monitoring
- Implement backup/restore for Docker volumes
- Add app configuration UI
- Integrate with Tor for privacy
## Resources
- [Docker Compose Documentation](https://docs.docker.com/compose/)
- [Bitcoin Core Documentation](https://bitcoin.org/en/bitcoin-core/)
- [LND Documentation](https://docs.lightning.engineering/)
- [BTCPay Server Documentation](https://docs.btcpayserver.org/)

View File

@ -1,111 +0,0 @@
# Docker Health Check Fix - Complete
## Problem
The `start-docker-apps.sh` script was failing because:
1. Health checks were too impatient (only 5 seconds wait)
2. The script exited with error if services weren't ready immediately
3. Services like Grafana and SearXNG need 30-60 seconds to fully start
4. Fedimint image had a platform mismatch warning on ARM64 Macs
## Solutions Applied
### 1. Improved Health Check Logic (`start-docker-apps.sh`)
**Before:**
```bash
# Wait 5 seconds, check once, fail if not ready
sleep 5
check_service "Grafana" "http://localhost:3000"
check_service "SearXNG" "http://localhost:8082"
# If not ready, exit with error
```
**After:**
```bash
# Wait up to 60 seconds with retries
MAX_ATTEMPTS=30
ATTEMPT=0
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
READY_COUNT=0
check_service "Grafana" "http://localhost:3000" && ((READY_COUNT++)) || true
check_service "SearXNG" "http://localhost:8082" && ((READY_COUNT++)) || true
check_service "Endurain" "http://localhost:8084" && ((READY_COUNT++)) || true
check_service "MorphOS" "http://localhost:8081" && ((READY_COUNT++)) || true
if [ $READY_COUNT -ge 2 ]; then
echo " ✅ Core services are ready!"
break
fi
sleep 2
((ATTEMPT++))
done
# Non-blocking - informational only
if [ $READY_COUNT -lt 2 ]; then
echo " Some services are still starting (this is normal)"
echo " 💡 They will be available shortly. Check with: docker compose ps"
fi
```
**Key improvements:**
- Retries up to 30 times (60 seconds total)
- Non-blocking (doesn't fail if services aren't ready)
- Informational messages to reassure users
- Continues startup even if services are still initializing
### 2. Fixed Fedimint Platform Warning (`docker-compose.yml`)
**Before:**
```yaml
fedimint:
image: fedimint/fedimintd:v0.3.0
container_name: archy-fedimint
ports:
- "8173:8173"
```
**After:**
```yaml
fedimint:
image: fedimint/fedimintd:v0.3.0
container_name: archy-fedimint
platform: linux/amd64 # Emulate x86 on ARM Macs
ports:
- "8173:8173"
```
This tells Docker to use x86 emulation for Fedimint on ARM Macs, eliminating the warning.
## Testing
Run the dev server again:
```bash
cd scripts
bash dev-start.sh
# Choose option 2 (Full stack)
```
**Expected behavior:**
1. Docker containers create and start successfully
2. Health check waits patiently for services
3. Script continues even if some services are still initializing
4. No platform mismatch warnings
5. Backend and frontend start without errors
## Files Modified
- `/Users/dorian/Projects/archy/start-docker-apps.sh` - Improved health check logic
- `/Users/dorian/Projects/archy/docker-compose.yml` - Added platform specification for Fedimint
## Next Steps
Once you confirm this works:
1. Bitcoin Core should appear in the My Apps section
2. You should be able to launch it and see the custom UI
3. Stop/Start functionality should work
4. All 13 Docker apps should be running in the background

View File

@ -1,161 +0,0 @@
# Real Docker Integration Complete
## Summary
The mock backend now queries real Docker containers instead of returning dummy data. When you start the dev server, it will show actual running Docker containers in the "My Apps" section.
## Changes Made
### 1. Mock Backend (`mock-backend.js`)
- ✅ Added `dockerode` package for Docker API access
- ✅ Added `getDockerContainers()` function to query running containers
- ✅ Mapcontainer names to app IDs (archy-bitcoin → bitcoin, etc.)
- ✅ Initialize package data from Docker on startup
- ✅ Poll Docker every 5 seconds and broadcast updates via WebSocket
- ✅ Removed hardcoded dummy Bitcoin data
### 2. Apps View (`Apps.vue`)
- ✅ Removed all dummy app logic
- ✅ Removed dummyApps import
- ✅ Removed external API fetching (Start9 registry, GitHub)
- ✅ Now uses only real packages from store
- ✅ Clean console logs - no more "Returning dummy apps"
### 3. Package Dependencies
- ✅ Installed `dockerode` for Docker API integration
## How It Works
### Backend Startup
```
1. Mock backend starts
2. Connects to Docker API
3. Queries running containers
4. Maps container names to app IDs
5. Builds package data from containers
6. Broadcasts to connected UI clients
```
### Live Updates
```
Every 5 seconds:
1. Query Docker containers
2. Update package data
3. Broadcast changes via WebSocket
4. UI automatically updates
```
### Container Detection
The backend looks for containers with these names:
- `archy-bitcoin` → bitcoin
- `archy-btcpay` → btcpay-server
- `archy-homeassistant` → homeassistant
- `archy-grafana` → grafana
- `archy-endurain` → endurain
- `archy-fedimint` → fedimint
- `archy-morphos` → morphos-server
- `archy-lnd` → lightning-stack
- `archy-mempool-web` → mempool
- `archy-ollama` → ollama
- `archy-searxng` → searxng
- `archy-onlyoffice` → onlyoffice
- `archy-penpot-frontend` → penpot
## Testing
### Start Backend
```bash
cd neode-ui
npm run backend:mock
```
**Expected Output:**
```
[Docker] Querying running containers...
[Docker] Found 0 containers (0 running)
[Docker] No containers found. Start docker-compose to see apps.
```
### Start Bitcoin Core
```bash
docker compose up -d bitcoin
```
### Check Backend Logs
Within 5 seconds, you should see:
```
[Docker] Found 1 containers (1 running)
[Docker] Apps detected:
- Bitcoin Core (running) → http://localhost:18443
```
### Start UI
```bash
cd neode-ui
npm run dev
```
Open http://localhost:8100 and navigate to "My Apps"
**Expected Result:**
- ✅ Bitcoin Core appears in the list
- ✅ Shows as "running"
- ✅ Has correct icon and description
- ✅ Launch button appears
- ✅ Clicking launch opens http://localhost:18443
## Console Output
### Before (Dummy Apps)
```
[Apps] Real packages from store: 0 apps: []
[Apps] Dummy apps available: 13 apps: ['bitcoin', 'btcpay-server', ...]
[Apps] Returning dummy apps
```
### After (Real Docker)
```
[Apps] Real packages from store: 1 apps
```
No more dummy app noise!
## Start All Apps
To see all apps:
```bash
# Start specific apps
docker compose up -d bitcoin btcpay homeassistant grafana
# Or start everything
docker compose up -d
```
Each container will automatically appear in "My Apps" within 5 seconds.
## App States
The backend correctly detects:
- ✅ **Running** containers → state: "running", Launch button enabled
- ✅ **Stopped** containers → state: "stopped", Start button shown
- ✅ **Ports** → Extracted from Docker and shown in interface-addresses
- ✅ **Metadata** → Title, description, icon from predefined mapping
## Future Enhancements
- [ ] Add start/stop/restart actions via Docker API
- [ ] Add resource usage (CPU, memory) from Docker stats
- [ ] Add container logs viewer
- [ ] Add health check status
- [ ] Support docker-compose scale operations
## File Changes
1. `neode-ui/package.json` - Added dockerode dependency
2. `neode-ui/mock-backend.js` - Docker integration
3. `neode-ui/src/views/Apps.vue` - Removed dummy app logic
---
**Status**: ✅ Complete - Dev server now shows real Docker containers
**Testing**: Start with `npm run backend:mock` and `docker compose up -d bitcoin`

View File

@ -1,188 +0,0 @@
# Console Errors Fixed - Docker Focus Complete
## Issues Resolved
### ✅ 1. External API Call Spam
**Problem**: Console flooded with 403/404 errors from Start9 registry and GitHub API
- `registry.start9.com` returning 404
- `api.github.com` rate limiting with 403 errors
- 20+ failed network requests on every page load
**Solution**:
- Disabled external API calls in development mode (`import.meta.env.DEV`)
- Apps.vue now skips registry/GitHub fetches and uses local data
- Marketplace.vue directly loads curated list without external calls
- Changed log levels from `warn` to `debug` for expected failures
### ✅ 2. StartOS Package References Removed
**Problem**: App used StartOS-specific packages (.s9pk files) instead of standard Docker images
**Solution**:
- Removed all Start9Labs wrapper repo references
- Updated `dummyApps.ts` to point to official upstream repos:
- Bitcoin Core → bitcoin/bitcoin
- BTCPay Server → btcpayserver/btcpayserver
- Home Assistant → home-assistant/core
- LND → lightningnetwork/lnd
- Mempool → mempool/mempool
- Marketplace now lists Docker Hub images instead of `.s9pk` URLs
- Install function changed from `manifestUrl` to `dockerImage` parameter
### ✅ 3. Docker-First Architecture
**Complete shift to Docker-based deployment**:
**Development**:
- All apps run in Docker containers via docker-compose
- Standard images from Docker Hub
- No StartOS wrappers needed
**Production** (future):
- Same Docker images packaged in Alpine Linux
- Podman instead of Docker
- Standard containers, not proprietary formats
## Files Modified
### `/neode-ui/src/views/Apps.vue`
```typescript
// Before: Tried to fetch from registry and GitHub
watch(() => Object.keys(store.packages).length, async () => {
await fetch('https://registry.start9.com/api/v1/packages')
await fetch('https://api.github.com/users/Start9Labs/repos')
// etc...
})
// After: Skip external calls in dev
const isDev = import.meta.env.DEV
if (isDev) {
console.log('[Apps] Using local app data (dev mode, external API calls disabled)')
return
}
```
### `/neode-ui/src/views/Marketplace.vue`
```typescript
// Before: Complex fallback chain to Start9 packages
async function loadCommunityMarketplace() {
await fetch('https://registry.start9.com/api/v1/packages')
await fetch('https://api.github.com/users/Start9Labs/repos')
// Returns .s9pk download URLs
}
// After: Direct Docker image list
async function loadCommunityMarketplace() {
console.log('📦 Loading Docker-based app marketplace')
communityApps.value = getCuratedAppList() // Returns dockerImage field
}
```
### `/neode-ui/src/utils/dummyApps.ts`
```typescript
// Before:
'wrapper-repo': 'https://github.com/Start9Labs/bitcoind-startos'
// After:
'wrapper-repo': 'https://github.com/bitcoin/bitcoin'
```
## New App Structure
Each app now includes:
```typescript
{
id: 'bitcoin',
title: 'Bitcoin Core',
version: '27.0.0',
description: 'Run a full Bitcoin node',
icon: '/assets/img/app-icons/bitcoin.svg',
author: 'Bitcoin Core',
dockerImage: 'lncm/bitcoind:v27.0', // ← NEW
manifestUrl: null, // ← No more .s9pk files
repoUrl: 'https://github.com/bitcoin/bitcoin'
}
```
## Console Output Now
### Before (Noisy):
```
[Apps] Fetching app info from Start9 registry...
registry.start9.com/api/v1/packages:1 Failed to load resource: 404
Could not connect to Start9 registry... HTTP 404
[Apps] Fetching GitHub info for dummy apps...
api.github.com/users/Start9Labs/repos:1 Failed to load resource: 403
[GitHub] Failed to fetch repo Start9Labs/bitcoind-startos: 403
[GitHub] Failed to fetch repo Start9Labs/btcpayserver-startos: 403
... 20+ more errors ...
```
### After (Clean):
```
[Apps] Using local app data (dev mode, external API calls disabled)
[Apps] Real packages from store: 0 apps
[Apps] Dummy apps available: 13 apps
[Apps] Returning dummy apps
📦 Loading Docker-based app marketplace
📦 Loaded 20 Docker-based apps
```
## Marketplace Apps (20 Docker Images)
All apps now reference standard Docker images:
1. **Bitcoin Core** - `lncm/bitcoind:v27.0`
2. **BTCPay Server** - `btcpayserver/btcpayserver:1.13.5`
3. **LND** - `lightninglabs/lnd:v0.17.4-beta`
4. **Mempool** - `mempool/frontend:v2.5.0`
5. **Home Assistant** - `homeassistant/home-assistant:2024.1`
6. **Grafana** - `grafana/grafana:10.2.0`
7. **SearXNG** - `searxng/searxng:latest`
8. **Ollama** - `ollama/ollama:latest`
9. **OnlyOffice** - `onlyoffice/documentserver:7.5.1`
10. **Penpot** - `penpotapp/frontend:latest`
11. **Nextcloud** - `nextcloud:28`
12. **Vaultwarden** - `vaultwarden/server:1.30.0-alpine`
13. **Jellyfin** - `jellyfin/jellyfin:10.8.13`
14. **PhotoPrism** - `photoprism/photoprism:latest`
15. **Immich** - `ghcr.io/immich-app/immich-server:release`
16. **File Browser** - `filebrowser/filebrowser:v2.27.0`
17. **Nginx Proxy Manager** - `jc21/nginx-proxy-manager:latest`
18. **Portainer** - `portainer/portainer-ce:2.19.4`
19. **Uptime Kuma** - `louislam/uptime-kuma:1.23.11`
20. **Fedimint** - `fedimint/fedimintd:v0.3.0`
## Testing
Reload the page and check console:
- ✅ No 403/404 errors
- ✅ Clean log output
- ✅ Apps display correctly
- ✅ Marketplace shows Docker-based apps
- ✅ No StartOS references
## Architecture Benefits
### Development
- Use official Docker images directly
- No proprietary package format
- Easy to add new apps (just specify Docker image)
- Standard docker-compose workflow
### Production
- Same Docker images, different runtime (Podman)
- Alpine Linux base (130MB vs 1.5GB+)
- Security: rootless containers, AppArmor profiles
- No vendor lock-in
## Next Steps
1. ✅ Console is clean
2. ✅ Docker images specified
3. 🔄 Backend needs Docker integration
4. 🔄 Install button should pull and run containers
5. 🔄 Start/Stop should control Docker containers
---
**Summary**: App is now 100% Docker-focused with no StartOS dependencies. Console is clean. Ready for backend Docker integration.

View File

@ -1,297 +0,0 @@
# Development Environment Setup - Complete
## ✅ What's Been Accomplished
### 1. Docker Compose Configuration ✓
Created `docker-compose.yml` with all 13 apps:
**Bitcoin & Lightning:**
- Bitcoin Core (regtest mode, port 18443)
- LND Lightning Network (ports 8080, 9735, 10009)
- BTCPay Server (port 14142)
- Mempool Explorer (port 4080)
- Fedimint (port 8173)
**Self-Hosted Services:**
- Home Assistant (port 8123)
- Grafana (port 3000)
- SearXNG (port 8082)
- Ollama AI (port 11434)
**Collaboration:**
- OnlyOffice (port 8083)
- Penpot (port 9001)
**Placeholders:**
- Endurain (port 8084)
- MorphOS Server (port 8081)
### 2. App Definitions Updated ✓
Updated `neode-ui/src/utils/dummyApps.ts`:
- Corrected ports for all Docker containers
- All apps configured with proper LAN addresses
- Apps sorted alphabetically in the UI
### 3. UI Improvements ✓
Updated `neode-ui/src/views/Apps.vue`:
- Apps always display alphabetically by title
- Order stable regardless of running/stopped state
- Launch button opens apps at correct Docker ports
- Reads `lan-address` from app manifest
### 4. Startup Scripts ✓
**Main startup:** `neode-ui/start-dev.sh`
- Checks Docker status
- Starts all Docker containers
- Starts mock backend
- Starts Vite dev server
- All in one command: `npm start`
**Main stop:** `neode-ui/stop-dev.sh`
- Stops Vite and backend
- Stops all Docker containers
- All in one command: `npm stop`
**Docker management scripts:**
- `start-docker-apps.sh` - Start all containers with progress
- `stop-docker-apps.sh` - Stop all containers
- `test-docker-setup.sh` - Test with lightweight apps
### 5. Placeholder Apps ✓
Created placeholder pages for apps without direct images:
- `docker/endurain-placeholder/index.html`
- `docker/morphos-placeholder/index.html`
### 6. Documentation ✓
**Getting Started Guide:** `GETTING_STARTED.md`
- Step-by-step setup instructions
- Common tasks and troubleshooting
- Quick reference for all apps
**Detailed Docs:** `DOCKER_DEV_SETUP.md`
- Complete architecture explanation
- Configuration details
- Advanced usage
- Development workflow
## 🚀 How to Use
### First Time Setup
```bash
cd neode-ui
npm install
npm start
```
This will:
1. Start Docker Desktop (if needed)
2. Download all images (~3-5GB, 10-30 min first time)
3. Start all 13 apps in Docker
4. Start the UI dev server
### Daily Development
```bash
cd neode-ui
npm start # Start everything
npm stop # Stop everything
```
### Access Apps
**UI Dashboard:**
http://localhost:8100
**Direct Access Examples:**
- Grafana: http://localhost:3000
- Home Assistant: http://localhost:8123
- Mempool: http://localhost:4080
- Penpot: http://localhost:9001
See GETTING_STARTED.md for complete list.
## 📊 Architecture
```
┌─────────────────────────────────────────────┐
│ Neode UI (Vue.js) │
│ http://localhost:8100 │
└─────────────┬───────────────────────────────┘
├─► Mock Backend (Node.js, port 5959)
└─► Docker Containers
├─► Bitcoin Core (regtest)
├─► LND (Lightning)
├─► BTCPay Server
├─► Mempool
├─► Home Assistant
├─► Grafana
├─► And 7 more apps...
└─► All on archy-net network
```
## 🎯 Key Features
### ✅ Alphabetical Sorting
Apps in "My Apps" always display A-Z, regardless of state:
- Bitcoin Core
- BTCPay Server
- Endurain
- Fedimint
- Grafana
- Home Assistant
- Lightning Stack
- Mempool
- MorphOS Server
- Ollama
- OnlyOffice
- Penpot
- SearXNG
### ✅ No Blockchain Sync
- Bitcoin Core runs in regtest mode
- LND connects without real blockchain
- Can generate test blocks instantly
- Saves ~500GB+ of storage
- Perfect for development
### ✅ Production-Like
- Same apps as production will use
- Docker containers (like Podman in prod)
- All services isolated
- Proper networking
- Can test dependencies
### ✅ Start/Stop Control
**From UI:**
- Launch button opens apps
- Start/Stop buttons (UI ready, backend TBD)
**From CLI:**
```bash
docker compose stop bitcoin # Stop one app
docker compose start bitcoin # Start one app
docker compose restart lnd # Restart an app
```
### ✅ Easy Development
- Hot reload for UI changes
- View logs: `docker compose logs -f [app]`
- Reset data: `docker compose down -v`
- Update images: `docker compose pull`
## 📝 Files Changed/Created
### New Files
- `docker-compose.yml` - All app definitions
- `start-docker-apps.sh` - Docker startup script
- `stop-docker-apps.sh` - Docker stop script
- `test-docker-setup.sh` - Testing script
- `GETTING_STARTED.md` - User guide
- `DOCKER_DEV_SETUP.md` - Technical docs
- `docker/endurain-placeholder/index.html`
- `docker/morphos-placeholder/index.html`
### Modified Files
- `neode-ui/src/views/Apps.vue` - Added sorting, launch logic
- `neode-ui/src/utils/dummyApps.ts` - Updated ports
- `neode-ui/start-dev.sh` - Added Docker integration
- `neode-ui/stop-dev.sh` - Added Docker cleanup
## 🔄 Development Workflow
### Start Working
```bash
cd archy/neode-ui
npm start
```
### Make Changes
Edit files in `src/`, browser auto-reloads
### View Logs
```bash
docker compose logs -f bitcoin
```
### Stop Working
```bash
npm stop
```
### Fresh Start
```bash
docker compose down -v
npm start
```
## 🎉 Next Steps
### Immediate
1. ✅ Test the setup: `npm start`
2. ✅ Open http://localhost:8100
3. ✅ Navigate to "My Apps"
4. ✅ Click "Launch" on apps
### Short Term
- Connect backend API to Docker API
- Implement real start/stop from UI
- Add health check indicators
- Show container logs in UI
### Medium Term
- Add app configuration UI
- Implement backup/restore
- Add resource monitoring
- Create app marketplace
### Long Term
- Build Alpine Linux image
- Integrate Podman
- Add Tor support
- Production deployment
## 📚 Documentation
- **Quick Start**: See [GETTING_STARTED.md](GETTING_STARTED.md)
- **Technical Details**: See [DOCKER_DEV_SETUP.md](DOCKER_DEV_SETUP.md)
- **Architecture**: See [.cursor/rules/Architecture.mdc](.cursor/rules/Architecture.mdc)
## 🐛 Known Issues
### First Run
- Image download takes 10-30 minutes
- Some apps need time to initialize
- Fedimint needs guardian setup (not implemented yet)
### Current Limitations
- Start/Stop buttons in UI don't call Docker yet (need backend)
- No health monitoring yet
- No log viewing in UI yet
- Bitcoin/Lightning not fully configured for channels
### Workarounds
- Use `docker compose` commands for now
- Check logs with `docker compose logs -f`
- Restart manually if apps don't respond
## ✨ What's Working
✅ All 13 apps defined in docker-compose
✅ Apps display alphabetically in UI
✅ Launch button opens correct ports
✅ Placeholder pages for incomplete apps
✅ One-command startup: `npm start`
✅ One-command shutdown: `npm stop`
✅ Bitcoin in regtest (no sync needed)
✅ LND connected to Bitcoin
✅ Complete documentation
✅ Development workflow established
---
**🎊 Ready to develop! Run `npm start` and open http://localhost:8100**

View File

@ -1,33 +0,0 @@
# Emergency Boot Commands for HP ProDesk
# Type these at the "# _" prompt
# 1. Mount the USB
mkdir -p /media/cdrom
mount -t iso9660 /dev/sda1 /media/cdrom
# 2. Verify modloop exists
ls -l /media/cdrom/boot/modloop-lts
# 3. Setup modloop
modprobe loop
modprobe squashfs
mkdir -p /.modloop
mount -o loop /media/cdrom/boot/modloop-lts /.modloop
# 4. Setup the overlay system
ln -s /.modloop/modules /lib/modules
ln -s /.modloop/firmware /lib/firmware
# 5. Start udev for device detection
/sbin/mdev -s
# 6. Setup Alpine repositories
mkdir -p /etc/apk
echo "/media/cdrom/apks" > /etc/apk/repositories
# 7. Start networking
setup-interfaces -a
# 8. You should now have a working shell!
# Login as root and run the installer:
sh /media/cdrom/archipelago/install.sh

View File

@ -1,44 +0,0 @@
# Backend Build - FINAL FIX! ✅
## The Real Problem
The project uses **Hyper 0.14** (not Hyper 1.x), which has completely different body types!
In Hyper 0.14:
- Body type is `hyper::Body` (not `hyper::body::Incoming`)
- No `http_body_util::Incoming`
- Use `hyper::body::to_bytes()` to read body
## What I Fixed (Just Now)
### 1. `core/archipelago/src/api/handler.rs`
- Changed from `hyper::body::Incoming``hyper::Body`
- Changed from `Full<Bytes>``hyper::Body`
- Use `hyper::body::to_bytes()` instead of `body.collect()`
### 2. `core/archipelago/src/api/rpc.rs`
- Removed `http_body_util::Full` import
- Changed request/response types to `hyper::Body`
- Use `hyper::body::to_bytes()` instead of collect/BodyExt
## Now Rebuild
```bash
cd /Users/dorian/Projects/archy
./clean-rebuild.sh
```
This should NOW build successfully because I've fixed it for Hyper 0.14! 🎯
## After Success
Run:
```bash
./scripts/dev-start.sh
```
Choose option 2 and the REAL backend will start!
---
**The fixes are complete and correct for Hyper 0.14!**

View File

@ -1,127 +0,0 @@
# Boot Issue Fixed - Alpine Live Boot Parameters
## What Was Wrong
The custom ISO was missing critical Alpine Linux live boot parameters:
- ❌ No `modloop` parameter (Alpine's module overlay system)
- ❌ No `alpine_dev` parameter (tells Alpine where to find itself)
- ❌ Missing boot device hints
Result: System booted into emergency shell because it couldn't find `/sbin/init`
## What I Fixed
### Updated Boot Configurations:
#### 1. GRUB Config (`/boot/grub/grub.cfg`)
```
linux /boot/vmlinuz-lts modules=loop,squashfs,sd-mod,usb-storage modloop=/boot/modloop-lts alpine_dev=sda1:iso9660 quiet console=tty0
```
#### 2. Syslinux Config (`/boot/syslinux/syslinux.cfg`)
```
APPEND modules=loop,squashfs,sd-mod,usb-storage modloop=/boot/modloop-lts alpine_dev=cdrom:iso9660 quiet console=tty0
```
### Key Parameters Added:
| Parameter | Purpose |
|-----------|---------|
| `modloop=/boot/modloop-lts` | Points to Alpine's compressed module filesystem |
| `alpine_dev=cdrom:iso9660` | Tells Alpine where to find the live system (on ISO9660 filesystem) |
| `console=tty0` | Ensures output goes to the screen |
| `modules=loop,squashfs,sd-mod,usb-storage` | Loads required kernel modules early |
## New ISO Ready
**Location**: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso`
**Size**: 278MB
**Created**: Jan 31, 2026 21:51
## How to Flash
### Method 1: Balena Etcher
1. Open Balena Etcher
2. Select the new ISO
3. Select your USB drive
4. Flash!
### Method 2: dd (Terminal)
```bash
diskutil list
diskutil unmountDisk /dev/diskN
sudo dd if=/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso of=/dev/rdiskN bs=1m status=progress
diskutil eject /dev/diskN
```
## How to Boot HP ProDesk
1. **Disable Secure Boot** in BIOS (F10 → Security → Secure Boot → Disabled)
2. **Insert USB** and reboot
3. **Press F9** for boot menu
4. **Select**: "UEFI - General UDISK"
5. System should now boot properly to Alpine login prompt
## What You'll See After Booting
```
🏔️ Archipelago Bitcoin Node OS
Booting...
Welcome to Alpine Linux 3.19
Kernel 6.6.x-lts on an x86_64
localhost login: _
```
### Login:
- **Username**: `root`
- **Password**: *(just press Enter)*
### Run Installer:
```bash
sh /media/cdrom/archipelago/install.sh
```
Or if that path doesn't work:
```bash
sh /media/usb/archipelago/install.sh
```
## What the Installer Does
1. ✅ Installs Alpine Linux 3.19 to internal disk
2. ✅ Installs Archipelago backend (5.7MB Rust binary)
3. ✅ Installs Vue.js web UI (port 8100)
4. ✅ Configures Podman container runtime
5. ✅ Sets up 21 app manifests (Bitcoin, Lightning, Web5, etc.)
6. ✅ Configures DHCP networking on Ethernet
7. ✅ Sets up nginx, SSH, and all services
8. ✅ Creates `archipelago` user
## After Installation
1. **Reboot** and remove USB
2. **Login**: `archipelago` / `archipelago`
3. **Change password**: `passwd`
4. **Access web UI**: `http://<your-ip>:8100`
---
**This ISO should now boot properly without dropping to emergency shell!** 🚀
## Technical Notes
The issue was that we were extracting and repackaging an Alpine ISO without understanding Alpine's live boot requirements. Alpine Linux uses:
1. **modloop**: A compressed SquashFS file containing kernel modules and system files
2. **alpine_dev**: Boot parameter telling the system where to find the live environment
3. **Special initramfs hooks**: That detect and mount the live media
By adding these parameters back, the boot process now works as expected.
## If You Still Have Issues
Try the **Safe Mode** boot option (second menu entry), which adds `nomodeset` for better hardware compatibility.

View File

@ -1,68 +0,0 @@
# Frontend Import Fix - Complete
## Problem
The frontend crashed on startup with this error:
```
Failed to resolve import "@/store/app" from "src/views/apps/BitcoinCore.vue". Does the file exist?
```
The Bitcoin Core UI couldn't load because of this import error.
## Root Cause
The `BitcoinCore.vue` component had an incorrect import path:
- **Wrong**: `import { useAppStore } from '@/store/app'`
- **Correct**: `import { useAppStore } from '@/stores/app'`
The directory is named `stores` (plural), not `store` (singular).
## Fix Applied
Updated the import statement in `/Users/dorian/Projects/archy/neode-ui/src/views/apps/BitcoinCore.vue`:
```typescript
// Before
import { useAppStore } from '@/store/app'
// After
import { useAppStore } from '@/stores/app'
```
## Docker Health Check - Success!
The Docker containers are now starting perfectly with the improved health check logic:
- All 17 services running ✅
- Health checks pass with patient retry logic ✅
- Fedimint platform warning suppressed ✅
- Bitcoin Core running on ports 18443-18444 ✅
## What Should Work Now
1. **Frontend should start without errors**
2. **Bitcoin Core UI accessible** at `/dashboard/apps/bitcoin-core`
3. **Launch button works** - clicking Bitcoin Core in My Apps will route to the custom UI
4. **All Docker containers running** in the background
## Next Steps
The dev server should now start cleanly. Try:
```bash
# If the server is still running, it should hot-reload automatically
# If not, restart:
cd /Users/dorian/Projects/archy/scripts
bash dev-start.sh
# Choose option 2 (Full stack)
```
Then:
1. Go to `http://localhost:8100`
2. Navigate to My Apps
3. Click on Bitcoin Core
4. You should see the custom glassmorphism UI with network stats, connection details, and action cards
## Files Modified
- `/Users/dorian/Projects/archy/neode-ui/src/views/apps/BitcoinCore.vue` - Fixed store import path

View File

@ -1,206 +0,0 @@
# ✅ FULL STACK DOCKER INTEGRATION COMPLETE
## Summary
The **full stack** (Rust backend + Vue.js frontend) now displays real Docker containers in the "My Apps" section. Both mode 1 (mock backend) and mode 2 (full stack) are fully functional.
## What's Working
### Mode 2: Full Stack (Rust Backend)
```bash
./scripts/dev-start.sh
# Choose option 2
```
**Backend Features:**
- ✅ Connects to Docker API on startup
- ✅ Scans running containers every 5 seconds
- ✅ Maps `archy-*` containers to app IDs
- ✅ Extracts ports automatically
- ✅ Broadcasts updates via WebSocket
- ✅ Works on macOS (fixed hardcoded `/home` paths)
**Console Output:**
```
🚀 Starting Archipelago Bitcoin Node OS
📁 Data directory: /tmp/archipelago-dev
🐳 Scanning Docker containers...
Found 1 containers
Detected container: Bitcoin Core (running)
Data model updated to revision 1
```
### Mode 1: Mock Backend (Node.js)
```bash
cd neode-ui
npm run dev:mock
```
Also has Docker integration via `dockerode`.
## Files Modified
### Rust Backend
1. **`core/archipelago/src/container/docker_packages.rs`** (NEW)
- Scans Docker containers
- Maps container names to app IDs
- Extracts ports and builds package data
- Includes metadata for all 13 apps
2. **`core/archipelago/src/server.rs`**
- Initializes Docker scanner on startup
- Spawns background task to scan every 5 seconds
- Updates state manager with package data
3. **`core/container/src/runtime.rs`**
- Fixed hardcoded `/home/` paths → uses `$HOME` env var
- Fixed Docker `list_containers()` to parse NDJSON format
- Now extracts ports from container JSON
4. **`core/container/src/podman_client.rs`**
- Fixed hardcoded `/home/` paths for macOS compatibility
5. **`scripts/dev-start.sh`**
- Added `ARCHIPELAGO_CONTAINER_RUNTIME=docker` env var
### Mock Backend
6. **`neode-ui/mock-backend.js`**
- Added `dockerode` integration
- Queries Docker API every 5 seconds
- Maps containers to package data
### Frontend
7. **`neode-ui/src/views/Apps.vue`**
- Removed all dummy app logic
- Now uses only real packages from store
## Testing
### Start Bitcoin Core
```bash
cd /Users/dorian/Projects/archy
docker ps | grep archy-bitcoin
# Should show: archy-bitcoin Up X minutes
```
### Check Backend Logs
```bash
tail -f /tmp/archipelago-backend.log
```
**Expected:**
```
Detected container: Bitcoin Core (running)
```
### Check Frontend
1. Open http://localhost:8100
2. Navigate to "My Apps"
3. See Bitcoin Core with green "running" badge
4. Click Launch → opens http://localhost:18443
## App Container Mapping
The backend recognizes these containers:
| Container Name | App ID | Port |
|---|---|---|
| `archy-bitcoin` | bitcoin | 18443 |
| `archy-btcpay` | btcpay-server | 23000 |
| `archy-homeassistant` | homeassistant | 8123 |
| `archy-grafana` | grafana | 3000 |
| `archy-endurain` | endurain | 8084 |
| `archy-fedimint` | fedimint | 8174 |
| `archy-morphos` | morphos-server | 8085 |
| `archy-lnd` | lightning-stack | 8080 |
| `archy-mempool-web` | mempool | 8083 |
| `archy-ollama` | ollama | 11434 |
| `archy-searxng` | searxng | 8082 |
| `archy-onlyoffice` | onlyoffice | 8081 |
| `archy-penpot-frontend` | penpot | 9001 |
## Start More Apps
```bash
# Start all apps defined in docker-compose.yml
docker compose up -d
# Or start specific apps
docker compose up -d grafana homeassistant mempool
```
Apps appear in "My Apps" within 5 seconds.
## Architecture
```
┌─────────────────────────────────────────┐
│ Vue.js Frontend (localhost:8100) │
│ - Displays apps from WebSocket data │
│ - Launch buttons use lan-address │
└─────────────┬───────────────────────────┘
│ HTTP + WebSocket
┌─────────────▼───────────────────────────┐
│ Rust Backend (localhost:5959) │
│ - RPC API │
│ - WebSocket broadcasts │
│ - Docker scanner (every 5s) │
└─────────────┬───────────────────────────┘
│ Docker API
┌─────────────▼───────────────────────────┐
│ Docker Engine │
│ - archy-bitcoin │
│ - archy-grafana │
│ - archy-* (all apps) │
└──────────────────────────────────────────┘
```
## Key Fixes Applied
### 1. macOS Path Issue
**Problem:** Hardcoded `/home/{user}` in Docker/Podman clients
**Solution:** Use `std::env::var("HOME")` instead
### 2. Docker JSON Parsing
**Problem:** Expected JSON array, got NDJSON (newline-delimited)
**Solution:** Parse line-by-line with `json.lines()`
### 3. Port Extraction
**Problem:** Ports not being extracted from Docker output
**Solution:** Parse `Ports` field from JSON and split by `, `
### 4. Dummy App Removal
**Problem:** Frontend showing fake data
**Solution:** Removed all dummy logic from `Apps.vue`
## Current Status
**Full Stack Mode (Mode 2)**: Working perfectly
**Mock Backend Mode (Mode 1)**: Working perfectly
**Docker Integration**: Complete for both modes
**Live Updates**: 5-second polling active
**Port Mapping**: Extracted and displayed
**Launch Functionality**: Working with correct URLs
## Next Steps
To see more apps in "My Apps":
```bash
docker compose up -d
```
All containers will automatically appear in the UI!
---
**Test Command:**
```bash
./scripts/dev-start.sh
# Choose 2 (Full stack)
# Open http://localhost:8100
# Navigate to "My Apps"
# See Bitcoin Core running!
```

View File

@ -1,335 +0,0 @@
# Getting Started with Archipelago Docker Development
This guide will help you get the full Archipelago development environment running with all apps containerized.
## What You'll Get
A complete Bitcoin node OS with 13+ apps running in Docker:
- Bitcoin Core (regtest - no blockchain download)
- Lightning Network (LND)
- BTCPay Server
- Mempool Explorer
- Home Assistant
- Grafana
- Ollama (local AI)
- SearXNG
- OnlyOffice
- Penpot
- And more...
## Prerequisites
1. **Docker Desktop** - [Download here](https://www.docker.com/products/docker-desktop/)
- Mac: 4GB RAM minimum, 8GB recommended
- Disk space: ~5GB for all images
2. **Node.js 18+** - [Download here](https://nodejs.org/)
3. **Git** (you probably have this)
## Installation Steps
### Step 1: Start Docker Desktop
Make sure Docker Desktop is running:
- Mac: Look for the Docker icon in your menu bar
- If not running, open Docker Desktop from Applications
### Step 2: Clone and Setup
```bash
cd ~/Projects
git clone [your-repo] archy
cd archy
```
### Step 3: Install UI Dependencies
```bash
cd neode-ui
npm install
```
### Step 4: Start Everything
```bash
npm start
```
This will:
1. Check if Docker is running
2. Download all Docker images (first time only, ~10-30 minutes)
3. Start all containers
4. Start the development UI server
**First Time?** You'll be prompted to confirm the image download. Type `y` and press Enter.
### Step 5: Open the UI
Once everything starts, open your browser to:
**http://localhost:8100**
Navigate to "My Apps" to see all your apps running!
## What's Running?
After startup, you'll have these services:
### Bitcoin & Lightning Network
- **Bitcoin Core** - Full node in regtest mode (no mainnet sync)
- **LND** - Lightning Network daemon
- **BTCPay Server** - Accept Bitcoin payments
- **Mempool** - Blockchain explorer
- **Fedimint** - Federated Bitcoin mint
### Self-Hosted Apps
- **Home Assistant** - Home automation
- **Grafana** - Monitoring and analytics
- **SearXNG** - Private search engine
- **Ollama** - Run AI models locally
### Collaboration Tools
- **OnlyOffice** - Office suite (docs, spreadsheets, presentations)
- **Penpot** - Design and prototyping (like Figma)
### Placeholders
- **Endurain** - Coming soon
- **MorphOS** - Coming soon
## Using the Apps
### From the UI
1. Go to http://localhost:8100
2. Click "My Apps" in the sidebar
3. All apps are listed alphabetically
4. Click "Launch" on any running app
### Direct Access
All apps have unique ports:
| App | URL |
|-----|-----|
| Grafana | http://localhost:3000 |
| Home Assistant | http://localhost:8123 |
| SearXNG | http://localhost:8082 |
| Mempool | http://localhost:4080 |
| Penpot | http://localhost:9001 |
| OnlyOffice | http://localhost:8083 |
| BTCPay Server | http://localhost:14142 |
See [DOCKER_DEV_SETUP.md](DOCKER_DEV_SETUP.md) for the complete list.
## Managing Apps
### Start/Stop Individual Apps
```bash
# Stop an app
docker compose stop bitcoin
# Start an app
docker compose start bitcoin
# Restart an app
docker compose restart bitcoin
```
### View Logs
```bash
# All logs
docker compose logs -f
# Specific app
docker compose logs -f bitcoin
docker compose logs -f btcpay
docker compose logs -f lnd
```
### Check Status
```bash
docker compose ps
```
## Stopping Everything
### Stop All Apps
```bash
cd neode-ui
npm stop
```
This stops the UI and all Docker containers.
### Stop Just Docker Apps
```bash
cd .. # Go to project root
./stop-docker-apps.sh
```
### Remove All Data (Fresh Start)
```bash
docker compose down -v
```
**Warning:** This deletes all app data!
## Troubleshooting
### Docker not starting
```bash
# Check if Docker is running
docker ps
# If not, start Docker Desktop
open -a Docker
```
### Port conflicts
If you see port errors:
1. Check what's using the port: `lsof -i :PORT`
2. Stop that service or change the port in `docker-compose.yml`
### App won't load
1. Check if container is running: `docker compose ps`
2. View logs: `docker compose logs [app-name]`
3. Restart the container: `docker compose restart [app-name]`
### Out of disk space
Clean up Docker:
```bash
docker system prune -a
```
### Complete reset
```bash
cd neode-ui
npm stop
cd ..
docker compose down -v
docker system prune -a
cd neode-ui
npm start
```
## Development Tips
### Making Changes
The UI hot-reloads automatically. Just edit files in `neode-ui/src/` and refresh your browser.
### Testing Bitcoin Stuff
Bitcoin Core runs in regtest mode - you can generate blocks instantly:
```bash
# Get a new address
docker exec archy-bitcoin bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoinpass getnewaddress
# Generate blocks to that address
docker exec archy-bitcoin bitcoin-cli -regtest -rpcuser=bitcoin -rpcpassword=bitcoinpass generatetoaddress 101 [address]
```
### Using Lightning
LND connects to Bitcoin Core automatically. Access the REST API at http://localhost:8080.
### Adding New Apps
1. Add service to `docker-compose.yml`
2. Add entry to `neode-ui/src/utils/dummyApps.ts`
3. Restart: `npm stop && npm start`
## File Structure
```
archy/
├── docker-compose.yml # All app definitions
├── start-docker-apps.sh # Start all Docker apps
├── stop-docker-apps.sh # Stop all Docker apps
├── DOCKER_DEV_SETUP.md # Detailed documentation
├── docker/ # Placeholder app HTML
│ ├── endurain-placeholder/
│ └── morphos-placeholder/
└── neode-ui/ # Vue.js UI
├── package.json
├── start-dev.sh # Main dev startup (npm start)
├── stop-dev.sh # Stop everything (npm stop)
└── src/
├── views/Apps.vue # My Apps page
└── utils/dummyApps.ts # App definitions
```
## Next Steps
1. **Explore the apps** - Try opening different services
2. **Check the logs** - See what's happening: `docker compose logs -f`
3. **Read the docs** - See [DOCKER_DEV_SETUP.md](DOCKER_DEV_SETUP.md) for details
4. **Start building** - The UI and backend are ready for development!
## Common Tasks
### Update all images
```bash
cd ~/Projects/archy
docker compose pull
docker compose up -d
```
### Backup data
```bash
docker compose down
cp -r /var/lib/docker/volumes ~/docker-backup
```
### Check resource usage
```bash
docker stats
```
### See all containers
```bash
docker ps -a
```
## Getting Help
- **Documentation**: See [DOCKER_DEV_SETUP.md](DOCKER_DEV_SETUP.md)
- **Logs**: `docker compose logs -f [service-name]`
- **Status**: `docker compose ps`
- **Docker issues**: Check Docker Desktop logs
## Architecture
This setup mimics production as closely as possible:
- **Production**: Alpine Linux + Podman + Real apps
- **Development**: macOS/Linux + Docker + Same app images
Key differences:
- Bitcoin in regtest (no blockchain sync)
- All on localhost (no Tor)
- Simpler networking (single bridge network)
See [Architecture.md](.cursor/rules/Architecture.mdc) for the full production architecture.
---
**Ready to build a Bitcoin node OS? Start with `npm start`! 🚀**

View File

@ -1,205 +0,0 @@
# HP ProDesk Build Success
## Summary
Successfully created a custom Archipelago Bitcoin Node OS ISO for HP ProDesk 400 G4 DM!
## Build Details
**Date**: January 31, 2026
**Build Method**: Custom ISO creation from Alpine Linux base
**Target Hardware**: HP ProDesk 400 G4 DM (and other x86_64 systems)
**Base OS**: Alpine Linux 3.19
**Output ISO**: `archipelago-3.19-x86_64.iso` (208MB)
## What Changed
### Problem Encountered
The original approach of building a completely custom Alpine ISO from scratch failed on ARM Mac due to:
1. Cross-architecture emulation issues (ARM64 → x86_64)
2. "Illegal instruction" errors when running x86_64 build tools under emulation
3. Boot directory structure issues with custom mkimage profiles
### Solution Implemented
Created a new build approach that:
1. Downloads the pre-built Alpine Linux standard ISO
2. Extracts it using 7zip (cross-platform compatible)
3. Adds custom Archipelago installation scripts and configuration
4. Repackages it as a bootable ISO with custom branding
5. **Works perfectly on ARM Mac** - no cross-compilation needed!
## Installation on HP ProDesk
### Method 1: USB Boot (Recommended)
1. **Create bootable USB**:
```bash
# Find your USB device
diskutil list
# Unmount it (replace diskN with your device, e.g., disk2)
diskutil unmountDisk /dev/diskN
# Write ISO to USB (WARNING: This erases the USB drive!)
sudo dd if=image-recipe/results/archipelago-3.19-x86_64.iso of=/dev/rdiskN bs=1m
```
2. **Boot HP ProDesk**:
- Insert USB drive
- Power on and press F9 for boot menu
- Select USB drive
- Alpine Linux will boot
3. **Install Archipelago**:
```bash
# Login as root (no password)
# Run the Archipelago installer
sh /media/cdrom/archipelago/install.sh
# Or for manual Alpine install first:
setup-alpine # Follow prompts
reboot
# Then after reboot:
sh /media/cdrom/archipelago/install.sh
```
### Method 2: Virtual Machine Testing
Before burning to USB, test in a VM:
```bash
# Using QEMU
qemu-system-x86_64 -cdrom archipelago-3.19-x86_64.iso -m 2048 -boot d
# Using VirtualBox
# Create new VM, select ISO as boot media
```
## What's Included
### System Packages
- **Podman**: Rootless container runtime
- **crun**: Fast OCI-compatible runtime
- **fuse-overlayfs**: Overlay filesystem for rootless containers
- **slirp4netns**: User-mode networking for containers
- **nginx**: Web server for Archipelago UI
- **openssh**: Remote access
- **iptables & iproute2**: Network management
### Archipelago Components
- Installation script at `/media/cdrom/archipelago/install.sh`
- Pre-configured networking (DHCP on eth0/enp0s3/enp0s25)
- Archipelago user account (user: `archipelago`, pass: `archipelago`)
- Data directories: `/var/lib/archipelago/{apps,secrets,logs,backups}`
- Custom MOTD with instructions
### Boot Configuration
- Custom branding: "Archipelago Bitcoin Node OS"
- Standard Alpine Linux kernel (LTS)
- GRUB and Syslinux boot loaders
## File Structure
```
image-recipe/
├── build-custom-iso.sh # New build script (works on ARM Mac!)
├── build-for-hardware.sh # Hardware-specific wrapper (to be updated)
├── results/
│ └── archipelago-3.19-x86_64.iso # Your bootable ISO (208MB)
└── build/
└── iso-custom/
├── alpine-base.iso # Cached Alpine ISO
└── custom/ # Modified ISO contents
└── archipelago/
├── install.sh # Installation script
└── README.txt # Installation instructions
```
## Next Steps
### 1. Test the ISO
Boot it in a VM or on actual hardware to verify:
- [ ] System boots correctly
- [ ] Network connectivity (DHCP)
- [ ] Installation script runs
- [ ] Podman works
- [ ] Can pull container images
### 2. Add Archipelago Backend
Once the base system works, we need to:
- Build the Rust backend as an Alpine APK
- Include it in the ISO
- Configure it to start automatically
- Expose the web UI on port 8100
### 3. Hardware-Specific Optimizations
For HP ProDesk 400 G4 DM:
- Intel graphics drivers
- Intel network drivers
- Power management settings
- Hardware monitoring (lm_sensors)
### 4. Build for Other Hardware
Update `build-for-hardware.sh` to use the new custom ISO approach for:
- Start9 Server Pure (Intel i7-10710U)
- Dell OptiPlex 7040 Micro
- Generic x86_64
## Build Commands
```bash
# Quick build (current method)
cd image-recipe
./build-custom-iso.sh
# Hardware-specific builds (to be integrated)
./build-for-hardware.sh hp-prodesk iso
./build-for-hardware.sh start9 iso
./build-for-hardware.sh dell-optiplex iso
./build-for-hardware.sh generic iso
```
## Technical Notes
### Why This Approach Works
1. **No cross-compilation**: We download native x86_64 Alpine ISO
2. **No emulation issues**: Only file manipulation on host
3. **Portable**: 7zip works on macOS, Linux, Windows
4. **Fast**: ~3 seconds vs 5+ minutes of failed builds
5. **Maintainable**: Simple shell script, easy to customize
### Boot Process
1. BIOS/UEFI loads bootloader (GRUB or Syslinux)
2. Bootloader loads Linux kernel + initramfs
3. Initramfs mounts squashfs root filesystem
4. System boots into Alpine Linux
5. User runs installation script
6. Script installs packages and configures Archipelago
### Customization Points
- `archipelago/install.sh`: Main installation logic
- `boot/grub/grub.cfg`: GRUB boot menu
- `boot/syslinux/syslinux.cfg`: Syslinux boot menu
- Package list in install script
## Success Criteria Met
- [x] Built ISO on ARM Mac without emulation issues
- [x] ISO is bootable (verified with `file` command)
- [x] Includes Archipelago installation script
- [x] Custom branding applied
- [x] Works for HP ProDesk and any x86_64 system
- [ ] Tested on actual hardware (pending)
- [ ] Archipelago backend included (pending)
- [ ] Auto-boot to UI configured (pending)
## Conclusion
**The build system now works!** We successfully worked around the ARM Mac cross-compilation limitations by:
1. Using pre-built x86_64 Alpine ISOs
2. Extracting and customizing with native tools
3. Repackaging without running x86_64 binaries
This approach is faster, more reliable, and easier to maintain than building from scratch.
**Ready to test on HP ProDesk hardware!**

View File

@ -1,185 +0,0 @@
# HP ProDesk UEFI Boot - Complete Guide
## ✅ New ISO Created with UEFI Support
**Location**: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso`
**Size**: 278MB
**Boot Support**:
- ✅ UEFI (modern firmware)
- ✅ Legacy BIOS (older systems)
- ✅ Hybrid bootable (works on both)
## Verified UEFI Boot Files
The ISO contains:
- `/efi/boot/bootx64.efi` - UEFI bootloader (688KB)
- `/boot/grub/efi.img` - GRUB EFI image (1.4MB)
- `/boot/grub/grub.cfg` - GRUB configuration
- `/boot/syslinux/` - Legacy BIOS boot
## How to Flash to USB
### Method 1: Balena Etcher (Recommended)
1. Launch Balena Etcher
2. Select ISO: `archipelago-3.19-hp-prodesk-uefi-x86_64.iso`
3. Select your USB drive
4. Click "Flash!"
### Method 2: Terminal (dd)
```bash
# Find USB
diskutil list
# Unmount (replace diskN with your USB)
diskutil unmountDisk /dev/diskN
# Flash
sudo dd if=/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso of=/dev/rdiskN bs=1m status=progress
# Eject
diskutil eject /dev/diskN
```
## How to Boot HP ProDesk in UEFI Mode
### Step 1: Insert USB and Power On
### Step 2: Access Boot Menu
- **Press F9** immediately after power on
- You should now see your USB drive listed as:
- **"UEFI: <USB Drive Name>"** ← Select this one!
- Or just the USB drive name (it will boot UEFI automatically)
### Step 3: If USB Still Not Visible
#### Check UEFI Boot Order in BIOS:
1. Press **F10** to enter BIOS Setup
2. Navigate to **"Boot Options"**
3. Look for **"UEFI Boot Order"** (separate section from Legacy)
4. Your USB should appear here
5. Move it to the top
6. Save and Exit (F10)
#### Ensure Secure Boot is Disabled:
1. In BIOS (F10)
2. Go to **"Security"** → **"Secure Boot Configuration"**
3. Set **"Secure Boot"** to **"Disabled"**
4. Save and Exit
## What You'll See When Booting
### UEFI Boot:
```
🏔️ Archipelago Bitcoin Node OS
GRUB bootloader
Loading kernel...
```
### After Boot:
```
Welcome to Alpine Linux 3.19
Kernel 6.6.x-lts on an x86_64
localhost login: root
Password: <just press Enter>
```
## First-Time Installation
Once logged in as root:
```bash
# Run the automated installer
sh /media/*/archipelago/install.sh
# This will:
# - Install Alpine to the internal disk
# - Install Archipelago backend (5.7MB Rust binary)
# - Install Archipelago frontend (Vue.js web UI)
# - Install 21 app manifests (Bitcoin, Lightning, Web5, etc.)
# - Configure networking (DHCP on Ethernet)
# - Set up nginx, Podman, SSH
# - Create archipelago user
# After installation completes:
reboot
# Remove USB drive during reboot
# Login to installed system:
# Username: archipelago
# Password: archipelago (CHANGE THIS!)
# Change password immediately:
passwd
# Access web UI:
# http://<your-ip>:8100
```
## Troubleshooting
### USB Not Appearing in Boot Menu
1. Reflash USB with dd method (more reliable than Etcher)
2. Try different USB port (back panel USB 2.0 ports work best)
3. Try a different USB drive (some USBs don't work well for booting)
### Keyboard Not Working in BIOS
1. Use USB 2.0 port (black, not blue)
2. Try back panel USB ports
3. Try different keyboard
4. Reset BIOS (remove CMOS battery for 30 seconds)
### "Secure Boot Violation" Error
- Disable Secure Boot in BIOS (see steps above)
### Black Screen After Booting
- The system might be loading, wait 30 seconds
- Try pressing Enter to see login prompt
- If still black, try different video output (HDMI vs DisplayPort)
## System Information
### Hardware Support
- **CPU**: Intel Core i7-10710U (6 cores, 12 threads)
- **Architecture**: x86_64
- **Firmware**: UEFI
- **Network**: Automatic DHCP on Ethernet
### Included Components
- **Base OS**: Alpine Linux 3.19
- **Backend**: Archipelago Rust server (5.7MB)
- **Frontend**: Vue.js web UI (served on port 8100)
- **Container Runtime**: Podman (rootless)
- **App Manifests**: 21 pre-configured apps
- Bitcoin Core
- LND & Core Lightning
- BTCPay Server
- Nostr relays (nostr-rs-relay, strfry)
- Web5 DWN & DID Wallet
- Meshtastic & Router
- Home Assistant
- Grafana, SearXNG, Ollama
- And more...
### Network Configuration
- **Default**: DHCP on all Ethernet interfaces
- **Management UI**: Port 8100
- **Backend API**: Port 8101
- **SSH**: Port 22 (enabled by default)
## Next Steps After Installation
1. **Access Web UI**: Browse to `http://<your-ip>:8100`
2. **Install Apps**: Use the web UI to install containerized apps
3. **Configure Bitcoin**: Set up Bitcoin Core node
4. **Set up Lightning**: Install LND or Core Lightning
5. **Explore**: Check out the 21 pre-configured app manifests
---
**ISO Ready to Flash!** 🚀
Flash this ISO to USB and boot your HP ProDesk - it will now work with UEFI!

View File

@ -1,45 +0,0 @@
# Backend Fixed for Hyper 0.14! ✅
## The Root Cause
The project uses **Hyper 0.14**, but the code was written for Hyper 1.x APIs. These are **completely incompatible**.
## All Fixes Applied
### 1. `core/archipelago/src/api/handler.rs`
- Changed from `hyper::body::Incoming``hyper::Body`
- Use `hyper::body::to_bytes()` instead of `collect()`
- Return type: `Response<hyper::Body>` instead of `Response<Full<Bytes>>`
### 2. `core/archipelago/src/api/rpc.rs`
- Removed `http_body_util::Full` import
- Changed request/response to use `hyper::Body`
- Use `hyper::body::to_bytes()` for reading body
### 3. `core/archipelago/src/server.rs`
- Removed `hyper-util` imports (that's for Hyper 1.x!)
- Use `hyper::server::conn::Http` (Hyper 0.14 API)
- Direct `serve_connection()` without TokioIo wrapper
## Build It Now
```bash
cd /Users/dorian/Projects/archy
./clean-rebuild.sh
```
**This will now build successfully!** All code is now compatible with Hyper 0.14! 🎉
## After Success
Start the development servers:
```bash
./scripts/dev-start.sh
```
Choose option 2 for full stack with the real backend!
---
**All fixes complete!** The backend is now fully compatible with Hyper 0.14.

View File

@ -1,450 +0,0 @@
# Multi-Hardware Build System - Complete Implementation
## ✅ Implementation Complete
Successfully implemented a comprehensive multi-hardware build system for Archipelago that supports:
- **Start9 Server Pure** (NEW)
- **HP ProDesk 400 G4 DM** (PRESERVED)
- **Dell OptiPlex** (PRESERVED)
- **Generic x86_64** (FALLBACK)
## 📁 Files Created/Modified
### Build Scripts (6 files)
1. **`image-recipe/build-for-hardware.sh`** ⭐ NEW
- Main hardware-aware build script
- Supports all 4 hardware targets
- Auto-detects macOS vs Linux
- Creates hardware-specific overlays
- Generates hardware detection scripts
- Produces optimized ISOs
2. **`image-recipe/build-all-hardware.sh`** ⭐ NEW
- Builds for all hardware targets
- Sequential build process
- Success/failure tracking
- Build summary report
3. **`image-recipe/test-start9-build.sh`** ⭐ NEW
- Quick test build for Start9
- Verifies build system works
- Checks prerequisites
- ~5-10 minute test build
4. **`image-recipe/build-macos.sh`** ✓ EXISTING
- macOS Docker build wrapper
- Works with new hardware system
5. **`image-recipe/build-alpine-native.sh`** ✓ EXISTING
- Native Alpine build
- Compatible with hardware system
6. **`image-recipe/build-linux.sh`** ✓ IMPLIED
- Linux build wrapper
- Used by hardware build system
### Documentation (5 files)
1. **`image-recipe/QUICK-REFERENCE.md`** ⭐ NEW
- Quick start guide
- Command reference
- Hardware table
- Flash instructions
- Troubleshooting
2. **`image-recipe/README-HARDWARE-BUILDS.md`** ⭐ NEW
- Comprehensive hardware build guide
- Each hardware target detailed
- Build process explained
- Installation steps
- Advanced usage
3. **`MULTI_HARDWARE_BUILD_SYSTEM.md`** ⭐ NEW
- System architecture
- Design decisions
- File structure
- Workflow diagrams
- Technical details
4. **`START9_SERVER_PURE_BUILD.md`** ⭐ NEW
- Start9-specific guide
- Build instructions
- Installation process
- Optimization details
- Verification steps
5. **`README.md`** ✏️ MODIFIED
- Updated build section
- Added hardware targets
- Links to new docs
### Architecture Documentation (1 file)
1. **`.cursor/rules/Architecture.mdc`** ✏️ MODIFIED
- Added hardware profiles section
- Updated Alpine Linux base description
- Documented new capabilities
### Hardware Profile System
Creates dynamic overlays for each build:
```
alpine-profile/
├── overlay/ # Base (all hardware)
├── overlay-start9-pure/ # Start9-specific ⭐ AUTO-GENERATED
├── overlay-hp-prodesk/ # HP-specific ⭐ AUTO-GENERATED
├── overlay-dell-optiplex/ # Dell-specific ⭐ AUTO-GENERATED
├── overlay-generic/ # Generic ⭐ AUTO-GENERATED
└── overlay-merged/ # Final merged ⭐ TEMPORARY
```
Each overlay includes:
- `etc/archipelago/hardware.toml` - Hardware config
- `etc/archipelago/hardware-info.sh` - Detection script
- `etc/local.d/00-hardware-detect.start` - First-boot detection
## 🎯 Hardware Targets
### 1. Start9 Server Pure (NEW) ⭐
```bash
./build-for-hardware.sh start9-pure iso
```
**Specifications:**
- CPU: Intel i7-10710U (6C/12T)
- RAM: 32-64GB DDR4-3200
- Storage: 2-4TB NVMe SSD
- Graphics: Intel UHD
- Network: 1x Gigabit Ethernet
**Optimizations:**
- Intel i7-10710U microcode
- NVMe I/O scheduler (none/noop)
- Intel UHD Graphics (i915)
- High-performance tuning
- Coreboot firmware support
### 2. HP ProDesk 400 G4 DM (PRESERVED) ✓
```bash
./build-for-hardware.sh hp-prodesk iso
```
**Specifications:**
- CPU: Various Intel
- RAM: 8GB+ DDR4
- Storage: 128GB+ SATA/NVMe
- Form: Desktop Mini
**Optimizations:**
- Generic Intel microcode
- SATA/NVMe auto-detect
- Intel graphics
- Compact form factor tuning
### 3. Dell OptiPlex (PRESERVED) ✓
```bash
./build-for-hardware.sh dell-optiplex iso
```
**Specifications:**
- CPU: Various Intel
- RAM: 8GB+ DDR4
- Storage: 128GB+ SATA/NVMe
- Models: Multiple
**Optimizations:**
- Multi-model support
- Dell firmware compatibility
- Business features
### 4. Generic x86_64 (FALLBACK) ✓
```bash
./build-for-hardware.sh generic iso
```
**Specifications:**
- CPU: Any x86_64
- RAM: 8GB+
- Storage: 128GB+
**Optimizations:**
- Maximum compatibility
- Intel & AMD support
- Universal drivers
## 🔧 Build System Features
### Hardware Detection
Each image includes runtime detection:
- CPU vendor, model, cores
- Available RAM
- Storage devices (NVMe, SATA, HDD)
- Network interfaces
- Graphics hardware
- USB controllers
### Automatic Optimization
First boot runs optimization:
- Load CPU microcode
- Set I/O scheduler
- Enable graphics acceleration
- Configure power management
- Tune network buffers
### Build Artifacts
Each build produces:
- **ISO File**: `archipelago-{version}-{hardware}-{arch}.iso`
- **Build Manifest**: `BUILD_MANIFEST_{hardware}.txt`
- **Hardware Config**: Embedded in ISO
## 📊 Usage Examples
### Build for Start9 Server Pure
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
Output:
```
results/archipelago-0.1.0-start9-pure-x86_64.iso
results/BUILD_MANIFEST_start9-pure.txt
```
### Build for All Hardware
```bash
cd image-recipe
./build-all-hardware.sh iso
```
Output:
```
results/archipelago-0.1.0-start9-pure-x86_64.iso
results/archipelago-0.1.0-hp-prodesk-x86_64.iso
results/archipelago-0.1.0-dell-optiplex-x86_64.iso
results/archipelago-0.1.0-generic-x86_64.iso
+ Build manifests for each
```
### Test Build (Quick Verification)
```bash
cd image-recipe
./test-start9-build.sh
```
## 🚀 Quick Start for Start9 Users
### 1. Build the Image
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
### 2. Flash to USB
```bash
# macOS
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/rdiskX bs=1m status=progress
# Linux
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/sdX bs=1M status=progress
```
### 3. Install on Start9 Server Pure
1. Insert USB into Start9 Server Pure
2. Power on, press F12 for boot menu
3. Select USB drive
4. Follow installation prompts
5. Reboot and remove USB
6. Access UI at `http://device-ip:8100`
## 📖 Documentation Structure
```
Archipelago/
├── START9_SERVER_PURE_BUILD.md # Start9 quick start ⭐
├── MULTI_HARDWARE_BUILD_SYSTEM.md # System design ⭐
├── README.md # Main docs (updated) ✏️
└── image-recipe/
├── QUICK-REFERENCE.md # Quick reference ⭐
├── README-HARDWARE-BUILDS.md # Detailed guide ⭐
├── build-for-hardware.sh # Main build script ⭐
├── build-all-hardware.sh # Build all targets ⭐
├── test-start9-build.sh # Quick test ⭐
└── docs/
└── building-os-images.md # OS build docs (existing) ✓
```
## 🎯 Key Benefits
### For Users
✅ Download image optimized for their specific hardware
✅ Better performance out-of-box
✅ Correct drivers automatically
✅ Hardware detection on boot
✅ Clear documentation per platform
### For Development
✅ Easy to add new hardware targets
✅ Clean separation of profiles
✅ Reusable components
✅ Automated build process
✅ Maintainable codebase
### For Start9 Server Pure
✅ Intel i7-10710U optimizations
✅ NVMe SSD performance tuning
✅ Intel UHD Graphics acceleration
✅ 32-64GB RAM efficiency
✅ Professional-grade stability
## 🔬 Technical Implementation
### Hardware Profile Generation
```bash
1. User runs: ./build-for-hardware.sh start9-pure iso
2. Script creates overlay-start9-pure/
3. Generates hardware.toml with specs
4. Creates hardware-info.sh detection script
5. Adds first-boot optimization script
6. Merges with base overlay
7. Passes to Alpine mkimage
8. Builds ISO with embedded profile
```
### Runtime Detection
```bash
1. System boots from ISO
2. First-boot script runs: /etc/local.d/00-hardware-detect.start
3. Executes: /etc/archipelago/hardware-info.sh
4. Detects actual hardware
5. Compares with expected profile
6. Applies optimizations
7. Logs results to /var/log/archipelago-hardware.log
8. Creates /etc/archipelago/system-info.txt
```
### Build Time Optimizations
```bash
# Caching (after first build)
- Docker layers cached
- Alpine aports cached
- Built backend cached
- Built frontend cached
# Result: 45-60min first build → 10-15min subsequent
```
## ✅ Testing Checklist
Before deploying to Start9 Server Pure:
- [ ] Run test build: `./test-start9-build.sh`
- [ ] Verify ISO created
- [ ] Test in QEMU/VirtualBox
- [ ] Check hardware detection works
- [ ] Verify optimizations applied
- [ ] Test UI accessibility
- [ ] Full production build
- [ ] Flash to USB
- [ ] Install on actual hardware
- [ ] Verify all services start
- [ ] Test container operations
- [ ] Benchmark performance
## 🐛 Known Limitations
1. **Build Time**: First build takes 45-60 minutes
- *Mitigation*: Use caching, subsequent builds ~10-15 min
2. **Disk Space**: Needs ~10GB for build
- *Mitigation*: Clean old builds, use SSD
3. **macOS Requires Docker**: Can't build natively on macOS
- *Mitigation*: Docker Desktop works well
4. **Hardware Detection**: Runtime detection needed
- *Mitigation*: First-boot scripts handle this
## 🚀 Future Enhancements
### Short Term
- [ ] Add ARM64 support (Raspberry Pi)
- [ ] Create bootable USB creator GUI
- [ ] Add build verification tests
- [ ] Optimize build caching
### Medium Term
- [ ] CI/CD for automatic builds
- [ ] Release ISOs on GitHub
- [ ] Add more hardware profiles
- [ ] Hardware compatibility checker
### Long Term
- [ ] Native macOS builder (no Docker)
- [ ] Live USB mode (no installation)
- [ ] Over-the-air updates
- [ ] Hardware attestation
## 📞 Support
### Documentation
- **Quick Start**: `START9_SERVER_PURE_BUILD.md`
- **System Design**: `MULTI_HARDWARE_BUILD_SYSTEM.md`
- **Quick Reference**: `image-recipe/QUICK-REFERENCE.md`
- **Detailed Guide**: `image-recipe/README-HARDWARE-BUILDS.md`
### Troubleshooting
- Check build logs for errors
- Verify prerequisites (Docker, disk space)
- Try test build first
- Review BUILD_MANIFEST_{hardware}.txt
### Community
- GitHub Issues for bugs
- Discussions for questions
- Discord (coming soon)
## 🎉 Summary
### What We Accomplished
✅ **Complete multi-hardware build system**
**Start9 Server Pure support** with optimizations
**Preserved ProDesk and OptiPlex** builds
**Generic x86_64 fallback** for other hardware
**Automated hardware detection** and optimization
**Comprehensive documentation** (5 new docs)
✅ **Easy-to-use build commands**
**Test build script** for verification
### Ready to Use
The build system is **production-ready** and can be used immediately to:
1. Build optimized images for Start9 Server Pure
2. Build for HP ProDesk 400 G4 DM (preserved)
3. Build for Dell OptiPlex (preserved)
4. Build generic images for other hardware
5. Build all targets at once
### Next Steps
1. **Test the system**:
```bash
cd image-recipe
./test-start9-build.sh
```
2. **Build for Start9 Server Pure**:
```bash
./build-for-hardware.sh start9-pure iso
```
3. **Deploy to hardware** and enjoy your sovereign Bitcoin node!
---
**Status**: ✅ **COMPLETE AND READY FOR USE**
**Date**: January 31, 2026
**Built with ❤️ for the Archipelago community**
🏝️ **Your Sovereign Server, Your Hardware, Your Choice!**

View File

@ -1,216 +0,0 @@
# Archipelago Installation Checklist
Use this checklist to track your installation progress.
## Pre-Installation
- [ ] macOS system (Darwin)
- [ ] Terminal access
- [ ] Internet connection
- [ ] Administrator privileges
## Installation Steps
### Step 1: Run Installation Script
```bash
./INSTALL.sh
```
**Progress:**
- [ ] Homebrew installed
- [ ] Rust installed
- [ ] Node.js installed
- [ ] Podman installed
- [ ] PostgreSQL installed
- [ ] Frontend dependencies installed
- [ ] Custom app dependencies installed
- [ ] Backend compiled
### Step 2: Verify Installation
```bash
./verify-install.sh
```
**Verify:**
- [ ] All checks pass (✓ green checkmarks)
- [ ] No critical errors (✗ red X marks)
- [ ] Warnings resolved if any (⚠ yellow warnings)
### Step 3: Configure Environment
```bash
cp core/.env.example core/.env
cp neode-ui/.env.example neode-ui/.env
```
**Configuration:**
- [ ] `core/.env` file created
- [ ] `neode-ui/.env` file created
- [ ] Environment variables reviewed
### Step 4: Initialize Services
```bash
# Initialize Podman (if not done by script)
podman machine init
podman machine start
# Create database
createdb archipelago_dev
```
**Services:**
- [ ] Podman machine initialized
- [ ] Podman machine running
- [ ] PostgreSQL service running
- [ ] Development database created
### Step 5: Start Development Servers
**Terminal 1 - Backend:**
```bash
cd core
cargo run --bin archipelago
```
**Terminal 2 - Frontend:**
```bash
cd neode-ui
npm run dev
```
**Running:**
- [ ] Backend server started (port 5959)
- [ ] Frontend server started (port 8100)
- [ ] No errors in terminal output
### Step 6: Verify in Browser
Open: http://localhost:8100
**Browser:**
- [ ] Frontend loads successfully
- [ ] UI is responsive
- [ ] No console errors
- [ ] Can navigate pages
## Post-Installation
### Optional: Build Apps
```bash
cd apps
./build.sh
```
**Apps:**
- [ ] Apps built successfully
- [ ] Can install apps via UI
- [ ] Apps run correctly
### Optional: Setup Dev Tools
```bash
# Install cargo-watch for auto-reload
cargo install cargo-watch
# Add useful aliases to ~/.zshrc
```
**Dev Tools:**
- [ ] `cargo-watch` installed
- [ ] Aliases configured
- [ ] IDE/editor setup
## Troubleshooting Checklist
If something doesn't work:
- [ ] Run `./verify-install.sh`
- [ ] Check terminal error messages
- [ ] Verify all services are running:
- [ ] PostgreSQL: `brew services list`
- [ ] Podman: `podman machine list`
- [ ] Check ports are available:
- [ ] Port 5959 (backend): `lsof -i :5959`
- [ ] Port 8100 (frontend): `lsof -i :8100`
- [ ] Review [SETUP_GUIDE.md](SETUP_GUIDE.md)
- [ ] Check [QUICK_REFERENCE.md](QUICK_REFERENCE.md) troubleshooting
## Success Criteria
You're ready to develop when:
- [x] ✓ `rustc --version` works
- [x] ✓ `cargo --version` works
- [x] ✓ `node --version` shows v18+
- [x] ✓ `npm --version` works
- [x] ✓ `podman --version` works
- [x] ✓ `psql --version` works
- [x] ✓ Backend starts without errors
- [x] ✓ Frontend loads in browser
- [x] ✓ Can access http://localhost:8100
## Quick Commands Reference
```bash
# Verify installation
./verify-install.sh
# Start backend
cd core && cargo run --bin archipelago
# Start frontend
cd neode-ui && npm run dev
# Start with mock backend (no PostgreSQL needed)
cd neode-ui && npm run dev:mock
# Check service status
brew services list
podman machine list
# Build apps
cd apps && ./build.sh
```
## Documentation Checklist
Files to read:
- [ ] [GETTING_STARTED.md](GETTING_STARTED.md) - Quick start
- [ ] [README.md](README.md) - Project overview
- [ ] [QUICK_REFERENCE.md](QUICK_REFERENCE.md) - Commands
- [ ] [SETUP_GUIDE.md](SETUP_GUIDE.md) - Detailed setup
- [ ] [docs/development-setup.md](docs/development-setup.md) - Development
- [ ] [docs/architecture.md](docs/architecture.md) - Architecture
- [ ] [apps/QUICKSTART.md](apps/QUICKSTART.md) - Building apps
## Notes
Use this space to track any custom configuration or issues:
```
Date installed: _____________
Custom configuration:
-
-
-
Issues encountered:
-
-
-
Resolution:
-
-
-
```
---
**Installation Complete?** Start developing! 🚀

View File

@ -1,160 +0,0 @@
# Installation Complete! 🎉
The installation was **successful**! Here's what was installed:
## ✅ Installed Components
### System Tools
- **Homebrew** - macOS package manager
- **Rust 1.93.0** - Backend programming language
- **Cargo** - Rust package manager
- **Node.js v24.13.0** - JavaScript runtime
- **npm** - Node package manager
- **Podman 5.7.1** - Container runtime (running)
- **PostgreSQL 15** - Database (service started)
### Project Dependencies
#### Frontend (neode-ui)
- ✅ 554 packages installed
- ✅ No vulnerabilities
- Ready to run
#### Custom Apps
- ✅ **did-wallet** - 238 packages
- ✅ **endurain** - 100 packages
- ✅ **morphos-server** - 100 packages
- ✅ **router** - 126 packages
- ✅ **web5-dwn** - 238 packages
All custom app dependencies installed!
## 🔧 Final Step Required
The Rust backend needs to be built. Run this in your terminal:
```bash
cd /Users/dorian/Projects/archy
./complete-setup.sh
```
This will:
1. Verify Rust installation
2. Build the backend (takes a few minutes)
3. Show you next steps
## 🚀 How to Start the Project
### Option 1: Full Stack (After building backend)
**Terminal 1 - Backend:**
```bash
cd /Users/dorian/Projects/archy/core
cargo run --bin archipelago
```
**Terminal 2 - Frontend:**
```bash
cd /Users/dorian/Projects/archy/neode-ui
npm run dev
```
**Open:** http://localhost:8100
### Option 2: Mock Backend (Works Now!)
You can start the frontend with a mock backend immediately:
```bash
cd /Users/dorian/Projects/archy/neode-ui
npm run dev:mock
```
**Open:** http://localhost:8100
### Option 3: Interactive Script
```bash
cd /Users/dorian/Projects/archy
./scripts/dev-start.sh
```
Choose option 1 for mock backend (fastest).
## 📋 What's Running
- **PostgreSQL** - Running on port 5432 (auto-starts on boot)
- **Podman Machine** - Running (for containers)
## 🔍 Verify Installation
Run this to check everything:
```bash
cd /Users/dorian/Projects/archy
./verify-install.sh
```
## 📚 Documentation
- **GETTING_STARTED.md** - Quick start guide
- **SETUP_GUIDE.md** - Detailed setup
- **QUICK_REFERENCE.md** - Command reference
- **README.md** - Project overview
## ⚡ Quick Commands
```bash
# Complete setup (build backend)
./complete-setup.sh
# Start with mock backend (fastest)
cd neode-ui && npm run dev:mock
# Check installation status
./verify-install.sh
# Start PostgreSQL
brew services start postgresql@15
# Start Podman machine
podman machine start
```
## 🎯 Next Steps
1. **Build the backend:**
```bash
./complete-setup.sh
```
2. **Or try the UI immediately:**
```bash
cd neode-ui
npm run dev:mock
```
3. **Then explore the docs:**
- Read GETTING_STARTED.md
- Check out the apps in `/apps`
- Build containerized apps with `cd apps && ./build.sh`
## 💡 Notes
- Rust was installed but needs the backend built
- All Node.js dependencies are ready
- Some apps have security vulnerabilities (run `npm audit` to see)
- Podman is configured in rootless mode (more secure)
- PostgreSQL is running as a background service
## 🐛 If Something Goes Wrong
1. Run `./verify-install.sh`
2. Check services:
- PostgreSQL: `brew services list`
- Podman: `podman machine list`
3. Read SETUP_GUIDE.md for troubleshooting
---
**You're almost ready! Just run `./complete-setup.sh` to build the backend, or start the mock backend right away!** 🚀

View File

@ -1,278 +0,0 @@
# Installation Files Summary
This document lists all the installation and setup files created for the Archipelago project.
## Created Files
### 1. **INSTALL.sh** (Main Installation Script)
- Automated installation of all dependencies
- Installs: Homebrew, Rust, Node.js, Podman, PostgreSQL
- Installs all project dependencies
- Builds the backend
- **Run:** `./INSTALL.sh`
### 2. **verify-install.sh** (Verification Script)
- Checks if all dependencies are installed
- Validates configuration
- Provides helpful error messages
- **Run:** `./verify-install.sh`
### 3. **GETTING_STARTED.md** (Quick Start Guide)
- Step-by-step installation guide
- Multiple development modes
- Troubleshooting tips
- Success checklist
### 4. **SETUP_GUIDE.md** (Detailed Setup Documentation)
- Comprehensive installation instructions
- Manual installation steps
- Environment configuration
- Common issues and solutions
- Development workflow
### 5. **QUICK_REFERENCE.md** (Command Cheatsheet)
- All common commands
- Configuration examples
- Troubleshooting commands
- Useful aliases
### 6. **core/.env.example** (Backend Config Template)
- Example environment variables for backend
- Copy to `core/.env` to use
### 7. **neode-ui/.env.example** (Frontend Config Template)
- Example environment variables for frontend
- Copy to `neode-ui/.env` to use
### 8. **README.md** (Updated)
- Added links to new installation guides
- Updated quick start section
- Fixed paths to use current project structure
## Installation Flow
```
┌─────────────────────────┐
│ Start Installation │
└───────────┬─────────────┘
┌─────────────────────────┐
│ Run ./INSTALL.sh │
│ │
│ ├─ Install Homebrew │
│ ├─ Install Rust │
│ ├─ Install Node.js │
│ ├─ Install Podman │
│ ├─ Install PostgreSQL │
│ ├─ Install npm deps │
│ └─ Build backend │
└───────────┬─────────────┘
┌─────────────────────────┐
│ Run ./verify-install.sh │
│ │
│ Check all dependencies │
│ are properly installed │
└───────────┬─────────────┘
┌─────────────────────────┐
│ Configure (Optional) │
│ │
│ cp core/.env.example │
│ core/.env │
│ │
│ cp neode-ui/.env.ex... │
│ neode-ui/.env │
└───────────┬─────────────┘
┌─────────────────────────┐
│ Start Development │
│ │
│ Terminal 1: Backend │
│ cd core && cargo run │
│ │
│ Terminal 2: Frontend │
│ cd neode-ui && npm dev │
└───────────┬─────────────┘
┌─────────────────────────┐
│ Open Browser │
│ http://localhost:8100 │
└─────────────────────────┘
```
## File Purposes
| File | Purpose | Run/Use |
|------|---------|---------|
| `INSTALL.sh` | Install all dependencies | `./INSTALL.sh` |
| `verify-install.sh` | Verify installation | `./verify-install.sh` |
| `GETTING_STARTED.md` | Quick start guide | Read first |
| `SETUP_GUIDE.md` | Detailed setup docs | Reference |
| `QUICK_REFERENCE.md` | Command cheatsheet | Reference |
| `core/.env.example` | Backend config template | Copy to `.env` |
| `neode-ui/.env.example` | Frontend config template | Copy to `.env` |
## What Each Script Does
### INSTALL.sh
```bash
✓ Checks if Homebrew is installed
✓ Installs Homebrew if needed
✓ Installs Rust via rustup
✓ Installs Node.js via Homebrew
✓ Installs Podman via Homebrew
✓ Initializes Podman machine
✓ Installs PostgreSQL via Homebrew
✓ Starts PostgreSQL service
✓ Installs frontend dependencies (neode-ui)
✓ Installs custom app dependencies
✓ Builds Rust backend
✓ Displays next steps
```
### verify-install.sh
```bash
✓ Checks Rust compiler and Cargo
✓ Checks Node.js and NPM
✓ Checks Podman installation
✓ Checks PostgreSQL installation
✓ Verifies frontend dependencies
✓ Verifies custom app dependencies
✓ Checks backend build status
✓ Checks Podman machine status
✓ Checks PostgreSQL service status
✓ Checks environment files
✓ Reports missing dependencies
✓ Provides fix suggestions
```
## Required vs Optional Dependencies
### Required (Must Install)
- ✅ **Rust** - Backend compilation
- ✅ **Node.js** - Frontend and custom apps
- ✅ **npm** - JavaScript package manager
### Recommended (For Full Features)
- ⚠️ **Podman** - Container runtime for apps
- ⚠️ **PostgreSQL** - Database for backend
### Optional (Can Install Later)
- 💡 **Homebrew** - Package manager (makes installation easier)
- 💡 **cargo-watch** - Auto-reload for backend development
## Minimum Requirements
To run the project with minimal setup:
```bash
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Install Node.js (download from nodejs.org)
# Or use version manager like nvm
# Install dependencies
cd neode-ui && npm install
# Run with mock backend (no PostgreSQL needed)
npm run dev:mock
```
## Full Setup (All Features)
For full functionality including containers and database:
```bash
# Run the full installation
./INSTALL.sh
# Verify everything
./verify-install.sh
# Start development
cd core && cargo run --bin archipelago # Terminal 1
cd neode-ui && npm run dev # Terminal 2
```
## Usage Examples
### First Time Setup
```bash
# Clone the repository
cd ~/Projects/archy
# Install everything
./INSTALL.sh
# Verify installation
./verify-install.sh
# Copy environment files
cp core/.env.example core/.env
cp neode-ui/.env.example neode-ui/.env
# Start development
cd core && cargo run --bin archipelago
```
### Checking What's Installed
```bash
# Run verification
./verify-install.sh
# Output will show:
# ✓ Installed and working
# ⚠ Installed but needs configuration
# ✗ Not installed
```
### Quick Frontend Development
```bash
# No backend needed
cd neode-ui
npm run dev:mock
# Open http://localhost:8100
```
## Platform Support
Currently tested on:
- ✅ **macOS** (Darwin) - Intel and Apple Silicon
- 🚧 **Linux** - Coming soon
- 🚧 **Windows** - Coming soon (WSL recommended)
## Next Steps After Installation
1. **Read** [GETTING_STARTED.md](GETTING_STARTED.md)
2. **Run** `./verify-install.sh`
3. **Configure** environment files
4. **Start** development servers
5. **Open** http://localhost:8100
6. **Build** apps in `apps/` directory
7. **Read** documentation in `docs/`
## Troubleshooting
If installation fails:
1. Check `./verify-install.sh` output
2. Read error messages carefully
3. Consult [SETUP_GUIDE.md](SETUP_GUIDE.md)
4. Check [QUICK_REFERENCE.md](QUICK_REFERENCE.md) troubleshooting section
## Resources
- [GETTING_STARTED.md](GETTING_STARTED.md) - Start here
- [SETUP_GUIDE.md](SETUP_GUIDE.md) - Detailed guide
- [QUICK_REFERENCE.md](QUICK_REFERENCE.md) - Commands
- [README.md](README.md) - Project overview
- [docs/development-setup.md](docs/development-setup.md) - Development info
- [apps/QUICKSTART.md](apps/QUICKSTART.md) - Building apps

View File

@ -1,118 +0,0 @@
# LND UI & App Fixes - Complete
## Changes Made
### 1. ✅ Added LND UI
Created a custom Lightning Network Daemon interface matching Archipelago's design:
- **Location**: `/Users/dorian/Projects/archy/docker/lnd-ui/index.html`
- **Port**: http://localhost:8085
- **Features**:
- Node status (Network, Channels, Ports)
- Connection details (REST API, gRPC, P2P)
- Settings modal
- Logs modal
- Purple/lightning-themed design
- Same glass-morphism style as Bitcoin Core UI
### 2. ✅ Added LND UI Service to Docker
- Added `lnd-ui` service to `docker-compose.yml`
- Serves static HTML on port 8085 via nginx
- Excluded from "My Apps" list (backend service)
### 3. ✅ Fixed Backend Filtering
Updated `/Users/dorian/Projects/archy/core/archipelago/src/container/docker_packages.rs`:
- Excluded `bitcoin-ui` from showing as app
- Excluded `lnd-ui` from showing as app
- These are UI services, not standalone apps
### 4. ✅ Updated Launch Logic
Modified `/Users/dorian/Projects/archy/neode-ui/src/views/Apps.vue`:
- Bitcoin Core launches → http://localhost:18445
- LND launches → http://localhost:8085
- Both open in new browser tabs
### 5. ✅ Updated Startup Script
Modified `/Users/dorian/Projects/archy/start-docker-apps.sh`:
- Shows Bitcoin Core UI at port 18445
- Shows LND UI at port 8085
- Shows Lightning REST API at port 8080
## About Endurain & MorphOS
**Yes, they are placeholder apps!**
From `docker-compose.yml`:
```yaml
# Placeholder services for apps without direct Docker images
# These will show "coming soon" pages or simple status pages
endurain:
image: nginx:alpine
ports:
- "8084:80"
volumes:
- ./docker/endurain-placeholder:/usr/share/nginx/html:ro
morphos:
image: nginx:alpine
ports:
- "8081:80"
volumes:
- ./docker/morphos-placeholder:/usr/share/nginx/html:ro
```
They're serving simple HTML placeholders because there are no real Docker images for these apps yet. You can either:
1. **Remove them** from docker-compose.yml if you don't need them
2. **Replace them** with real app implementations when available
3. **Keep them** as placeholders for future development
## Penpot Launch Issue - Fixed
The issue was that Penpot's container name is `archy-penpot-frontend`, which gets detected as app ID `penpot-frontend`. The backend metadata already handles this with:
```rust
"penpot" | "penpot-frontend" => AppMetadata { ... }
```
Penpot should now launch correctly at **http://localhost:9001**.
However, note that Penpot requires initial setup:
1. First visit creates an admin account
2. You'll need to register/login
3. It's a multi-container app (frontend + backend + postgres + redis)
## Testing
Restart Docker to apply all changes:
```bash
cd /Users/dorian/Projects/archy
docker compose down
docker compose up -d
```
Then test:
- **Bitcoin Core**: Click in My Apps → Opens http://localhost:18445
- **LND**: Click in My Apps → Opens http://localhost:8085
- **Penpot**: Click in My Apps → Opens http://localhost:9001
## Apps Summary
### Real Docker Apps (Fully Functional)
1. ✅ Bitcoin Core (+ custom UI)
2. ✅ LND (+ custom UI)
3. ✅ BTCPay Server
4. ✅ Mempool
5. ✅ Home Assistant
6. ✅ Grafana
7. ✅ Fedimint
8. ✅ Ollama
9. ✅ SearXNG
10. ✅ OnlyOffice
11. ✅ Penpot
### Placeholder Apps (HTML Only)
12. ⚠️ Endurain (placeholder)
13. ⚠️ MorphOS (placeholder)
All real apps are now properly integrated with working Docker containers and launch functionality!

View File

@ -1,430 +0,0 @@
# Archipelago Multi-Hardware Build System
## Overview
Archipelago now supports building optimized OS images for multiple hardware targets, including **Start9 Server Pure**, while maintaining support for HP ProDesk and Dell OptiPlex.
## Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Archipelago Build System │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌────────────────┐ ┌──────────────┐
│ Source Code │ │ Build Scripts │ │ Hardware │
│ │ │ │ │ Profiles │
│ - Rust Core │ │ - Backend │ │ │
│ - Vue.js UI │ │ - Frontend │ │ start9-pure │
│ - Apps │ │ - Alpine ISO │ │ hp-prodesk │
│ - Manifests │ │ - APK Package │ │ dell-optiplex│
└───────────────┘ └────────────────┘ │ generic │
└──────────────┘
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌────────────────┐ ┌──────────────┐
│ Start9 Pure │ │ HP ProDesk │ │ Dell │
│ │ │ │ │ OptiPlex │
│ i7-10710U │ │ Various Intel │ │ Various Intel│
│ 32-64GB RAM │ │ 8GB+ RAM │ │ 8GB+ RAM │
│ 2-4TB NVMe │ │ 128GB+ SSD │ │ 128GB+ SSD │
│ │ │ │ │ │
│ ✓ Intel ucode │ │ ✓ Generic Intel│ │ ✓ Dell FW │
│ ✓ NVMe optim │ │ ✓ SATA/NVMe │ │ ✓ Multi-model│
│ ✓ UHD Graphics│ │ ✓ Compact FF │ │ ✓ Business │
└───────────────┘ └────────────────┘ └──────────────┘
```
## Hardware Targets
### 1. Start9 Server Pure (NEW)
**Specifications:**
- CPU: Intel Core i7-10710U (6C/12T)
- RAM: 32GB or 64GB DDR4-3200
- Storage: 2TB or 4TB NVMe SSD
- Network: 1x Gigabit Ethernet
- Graphics: Intel UHD Graphics
- Ports: 4x USB 3.0, 2x USB 2.0, 1x USB-C 3.1
**Optimizations:**
```
- Intel microcode (i7-10710U specific)
- Intel UHD Graphics drivers and acceleration
- NVMe SSD I/O scheduler (none/noop)
- Power management tuning
- Coreboot firmware support
- Intel ME disabled (respected)
```
**Build Command:**
```bash
./build-for-hardware.sh start9-pure iso
```
**Output:**
```
archipelago-0.1.0-start9-pure-x86_64.iso
BUILD_MANIFEST_start9-pure.txt
```
### 2. HP ProDesk 400 G4 DM (EXISTING)
**Specifications:**
- CPU: Various Intel processors
- RAM: 8GB+ DDR4
- Storage: 128GB+ SATA/NVMe SSD
- Form Factor: Desktop Mini
- Network: Gigabit Ethernet
**Optimizations:**
```
- Generic Intel microcode
- Intel graphics support
- SATA/NVMe auto-detection
- HP firmware compatibility
- Compact form factor tuning
```
**Build Command:**
```bash
./build-for-hardware.sh hp-prodesk iso
```
**Output:**
```
archipelago-0.1.0-hp-prodesk-x86_64.iso
BUILD_MANIFEST_hp-prodesk.txt
```
### 3. Dell OptiPlex (EXISTING)
**Specifications:**
- CPU: Various Intel processors
- RAM: 8GB+ DDR4
- Storage: 128GB+ SATA/NVMe SSD
- Models: 3050, 7050, 9020, etc.
- Network: Gigabit Ethernet
**Optimizations:**
```
- Generic Intel microcode
- Intel/AMD graphics support
- Multi-model compatibility
- Dell firmware support
- Business-class features
```
**Build Command:**
```bash
./build-for-hardware.sh dell-optiplex iso
```
**Output:**
```
archipelago-0.1.0-dell-optiplex-x86_64.iso
BUILD_MANIFEST_dell-optiplex.txt
```
### 4. Generic x86_64 (FALLBACK)
**Specifications:**
- CPU: Any x86_64 (Intel/AMD)
- RAM: 8GB+ recommended
- Storage: 128GB+ HDD/SSD
- Network: Any Ethernet
**Optimizations:**
```
- Universal drivers
- Intel and AMD support
- Maximum compatibility
- Generic firmware
```
**Build Command:**
```bash
./build-for-hardware.sh generic iso
```
## Build System Features
### Hardware Detection
Each image includes automatic hardware detection on first boot:
```bash
/etc/archipelago/hardware-info.sh
```
This script detects:
- CPU vendor, model, cores
- Available RAM
- Storage devices (NVMe, SATA SSD, HDD)
- Network interfaces
- Graphics hardware
- USB controllers
### Hardware-Specific Files
Each build creates:
```
/etc/archipelago/
├── hardware.toml # Hardware profile config
├── hardware-info.sh # Detection script
└── system-info.txt # Runtime info (created on boot)
/var/log/
└── archipelago-hardware.log # Detection results
```
### Optimization Scripts
Hardware-specific optimizations run on boot:
```bash
# Intel CPU microcode
modprobe intel_rapl_common
modprobe intel_powerclamp
# Intel Graphics acceleration
modprobe i915
# NVMe optimization (Start9 Pure)
echo none > /sys/block/nvme0n1/queue/scheduler
# SATA SSD optimization (ProDesk/OptiPlex)
echo deadline > /sys/block/sda/queue/scheduler
```
## Build Workflow
### Single Hardware Build
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
**Process:**
1. Detect build environment (macOS/Linux)
2. Create hardware-specific overlay
3. Generate hardware detection scripts
4. Create hardware.toml config
5. Merge with base Alpine profile
6. Build Alpine ISO with mkimage
7. Package Archipelago backend (Rust)
8. Package Archipelago frontend (Vue.js)
9. Create installation scripts
10. Generate ISO with all components
11. Create build manifest
**Time:** ~45-60 minutes (first build)
### All Hardware Builds
```bash
cd image-recipe
./build-all-hardware.sh iso
```
**Process:**
- Builds for: start9-pure, hp-prodesk, dell-optiplex, generic
- Runs builds sequentially
- Creates separate ISO for each target
- Generates individual manifests
**Time:** ~3-4 hours (first build)
## File Structure
```
image-recipe/
├── build-for-hardware.sh # Main hardware build script
├── build-all-hardware.sh # Build all targets
├── build-macos.sh # macOS Docker build
├── build-alpine-native.sh # Native Alpine build
├── alpine-profile/
│ ├── mkimg.archipelago.sh # Alpine profile definition
│ ├── overlay/ # Base system files (all hardware)
│ │ ├── etc/
│ │ │ ├── archipelago/
│ │ │ │ └── config.toml
│ │ │ ├── systemd/system/
│ │ │ │ └── archipelago.service
│ │ │ └── init.d/
│ │ │ └── archipelago
│ │ └── ...
│ │
│ ├── overlay-start9-pure/ # Start9-specific files
│ │ └── etc/archipelago/
│ │ ├── hardware.toml
│ │ └── hardware-info.sh
│ │
│ ├── overlay-hp-prodesk/ # HP-specific files
│ ├── overlay-dell-optiplex/ # Dell-specific files
│ ├── overlay-generic/ # Generic files
│ └── overlay-merged/ # Final merged (temporary)
├── scripts/
│ ├── build-backend.sh # Compile Rust backend
│ ├── build-frontend.sh # Build Vue.js UI
│ ├── create-backend-apk.sh # Package as Alpine APK
│ ├── install-archipelago.sh # Install into image
│ └── harden-alpine.sh # Security hardening
├── build/ # Build artifacts (temp)
│ ├── backend/
│ └── frontend/
├── apks/ # Alpine packages (temp)
│ └── archipelago-backend-*.apk
└── results/ # Final ISOs
├── archipelago-0.1.0-start9-pure-x86_64.iso
├── archipelago-0.1.0-hp-prodesk-x86_64.iso
├── archipelago-0.1.0-dell-optiplex-x86_64.iso
├── archipelago-0.1.0-generic-x86_64.iso
├── BUILD_MANIFEST_start9-pure.txt
├── BUILD_MANIFEST_hp-prodesk.txt
├── BUILD_MANIFEST_dell-optiplex.txt
└── BUILD_MANIFEST_generic.txt
```
## Usage Examples
### Building for Start9 Server Pure
```bash
cd image-recipe
# Standard build
./build-for-hardware.sh start9-pure iso
# Custom version
export ARCHIPELAGO_VERSION="1.0.0"
./build-for-hardware.sh start9-pure iso
# Disk image instead of ISO
./build-for-hardware.sh start9-pure disk
```
### Installing on Start9 Server Pure
```bash
# 1. Flash ISO to USB drive
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/sdX \
bs=1M \
status=progress
# 2. Insert USB into Start9 Server Pure
# 3. Boot from USB (Press F12 during boot)
# 4. Follow installation prompts
# 5. Access UI at http://device-ip:8100
```
### Verifying Hardware Detection
After installation, SSH into the device:
```bash
# View hardware profile
cat /etc/archipelago/hardware.toml
# View detection results
cat /var/log/archipelago-hardware.log
# View system info
cat /etc/archipelago/system-info.txt
# Check optimizations
dmesg | grep -i archipelago
```
## Benefits
### Hardware-Specific
- ✅ Optimized performance for each platform
- ✅ Correct drivers and firmware
- ✅ Platform-specific tuning
- ✅ Reduced image size (no unnecessary drivers)
### Development
- ✅ Easy to add new hardware targets
- ✅ Clean separation of profiles
- ✅ Reusable base components
- ✅ Automated build process
### Users
- ✅ Download correct image for their hardware
- ✅ Optimal out-of-box experience
- ✅ Clear documentation per platform
- ✅ Hardware verification on boot
## Adding New Hardware
To add a new hardware target:
1. **Create hardware profile** in `build-for-hardware.sh`:
```bash
my-hardware)
HARDWARE_NAME="My Hardware Name"
HARDWARE_PROFILE="my-hardware"
CPU_VENDOR="intel"
# ... other specs
;;
```
2. **Create overlay directory**:
```bash
mkdir -p alpine-profile/overlay-my-hardware/etc/archipelago
```
3. **Add hardware-specific configs**:
```bash
# Create hardware.toml, hardware-info.sh, etc.
```
4. **Build**:
```bash
./build-for-hardware.sh my-hardware iso
```
## Next Steps
1. ✅ **Test Start9 Pure build** on actual hardware
2. ✅ **Verify hardware detection** scripts work correctly
3. ✅ **Document installation process** for Start9 users
4. ✅ **Create release ISOs** for all hardware targets
5. ✅ **Set up CI/CD** to build all targets automatically
## Documentation
- **Quick Reference**: `image-recipe/QUICK-REFERENCE.md`
- **Hardware Builds**: `image-recipe/README-HARDWARE-BUILDS.md`
- **OS Images**: `docs/building-os-images.md`
- **Architecture**: `docs/architecture.md`
## Support
For hardware-specific issues:
1. Check `BUILD_MANIFEST_<target>.txt`
2. Review `/var/log/archipelago-hardware.log` on device
3. Verify hardware matches target profile
4. Try generic build as fallback
---
**Built with ❤️ by the Archipelago team**
*Now supporting Start9 Server Pure, HP ProDesk, Dell OptiPlex, and more!*

View File

@ -1,242 +0,0 @@
# My Apps - Complete List (Alphabetical Order)
This document shows all apps exactly as they appear in the "My Apps" section of the Neode UI.
## Apps List (A-Z)
### 1. Bitcoin Core ⚡
- **Port**: 18443 (RPC)
- **Status**: Running
- **Type**: Full Bitcoin node (regtest mode)
- **Description**: Bitcoin Core reference implementation
- **Launch**: RPC only (no web UI)
- **Docker**: `archy-bitcoin`
### 2. BTCPay Server 💰
- **Port**: 14142
- **Status**: Running
- **Type**: Bitcoin payment processor
- **Description**: Self-hosted Bitcoin payment processor
- **Launch**: http://localhost:14142
- **Docker**: `archy-btcpay`
### 3. Endurain 🚧
- **Port**: 8084
- **Status**: Stopped
- **Type**: Application platform
- **Description**: Decentralized application platform
- **Launch**: http://localhost:8084 (placeholder)
- **Docker**: `archy-endurain`
### 4. Fedimint 🔐
- **Port**: 8173
- **Status**: Running
- **Type**: Federated Bitcoin mint
- **Description**: Federated Bitcoin minting service
- **Launch**: http://localhost:8173 (API only)
- **Docker**: `archy-fedimint`
### 5. Grafana 📊
- **Port**: 3000
- **Status**: Running
- **Type**: Analytics and monitoring
- **Description**: Analytics and monitoring platform
- **Launch**: http://localhost:3000
- **Docker**: `archy-grafana`
- **Credentials**: admin/admin
### 6. Home Assistant 🏠
- **Port**: 8123
- **Status**: Running
- **Type**: Home automation
- **Description**: Open source home automation platform
- **Launch**: http://localhost:8123
- **Docker**: `archy-homeassistant`
### 7. Lightning Stack ⚡
- **Ports**: 8080 (REST), 9735 (P2P), 10009 (gRPC)
- **Status**: Running
- **Type**: Lightning Network
- **Description**: Complete Lightning Network implementation (LND)
- **Launch**: http://localhost:8080 (REST API)
- **Docker**: `archy-lnd`
### 8. Mempool 🔍
- **Port**: 4080
- **Status**: Running
- **Type**: Blockchain explorer
- **Description**: Bitcoin mempool and blockchain explorer
- **Launch**: http://localhost:4080
- **Docker**: `archy-mempool-web`, `archy-mempool-api`
### 9. MorphOS Server 🚧
- **Port**: 8081
- **Status**: Running
- **Type**: Server platform
- **Description**: Flexible server platform
- **Launch**: http://localhost:8081 (placeholder)
- **Docker**: `archy-morphos`
### 10. Ollama 🤖
- **Port**: 11434
- **Status**: Running
- **Type**: Local AI
- **Description**: Run large language models locally
- **Launch**: http://localhost:11434 (API only)
- **Docker**: `archy-ollama`
### 11. OnlyOffice 📝
- **Port**: 8083
- **Status**: Running
- **Type**: Office suite
- **Description**: Office suite and document collaboration
- **Launch**: http://localhost:8083
- **Docker**: `archy-onlyoffice`
### 12. Penpot 🎨
- **Port**: 9001
- **Status**: Running
- **Type**: Design platform
- **Description**: Open-source design and prototyping
- **Launch**: http://localhost:9001
- **Docker**: `archy-penpot-frontend`, `archy-penpot-backend`
### 13. SearXNG 🔎
- **Port**: 8082
- **Status**: Running
- **Type**: Search engine
- **Description**: Privacy-respecting metasearch engine
- **Launch**: http://localhost:8082
- **Docker**: `archy-searxng`
## Summary
- **Total Apps**: 13
- **Running by Default**: 12
- **Stopped by Default**: 1 (Endurain)
- **With Web UI**: 11
- **API Only**: 2 (Bitcoin Core RPC, Ollama)
- **Placeholders**: 2 (Endurain, MorphOS)
## Categories
### Bitcoin & Lightning (5 apps)
1. Bitcoin Core
2. BTCPay Server
3. Fedimint
4. Lightning Stack
5. Mempool
### Self-Hosted Services (4 apps)
6. Grafana
7. Home Assistant
8. Ollama
9. SearXNG
### Collaboration (2 apps)
10. OnlyOffice
11. Penpot
### Placeholders (2 apps)
12. Endurain
13. MorphOS Server
## App Dependencies
### Bitcoin Core Dependencies
- **Dependent apps**: BTCPay Server, Lightning Stack, Mempool
- **Must start first**: Yes
### Database Dependencies
- **BTCPay Server** → PostgreSQL (auto-started)
- **Mempool** → MariaDB (auto-started)
- **Penpot** → PostgreSQL + Redis (auto-started)
## Port Map (sorted by port)
| Port | App |
|------|-----|
| 3000 | Grafana |
| 4080 | Mempool |
| 8080 | Lightning Stack (REST) |
| 8081 | MorphOS Server |
| 8082 | SearXNG |
| 8083 | OnlyOffice |
| 8084 | Endurain |
| 8123 | Home Assistant |
| 8173 | Fedimint |
| 9001 | Penpot |
| 9735 | Lightning Stack (P2P) |
| 10009 | Lightning Stack (gRPC) |
| 11434 | Ollama |
| 14142 | BTCPay Server |
| 18443 | Bitcoin Core (RPC) |
| 18444 | Bitcoin Core (P2P) |
## UI Display Order
Apps display alphabetically in the "My Apps" grid:
```
Row 1 (3 apps):
┌─────────────────┬─────────────────┬─────────────────┐
│ Bitcoin Core │ BTCPay Server │ Endurain │
└─────────────────┴─────────────────┴─────────────────┘
Row 2 (3 apps):
┌─────────────────┬─────────────────┬─────────────────┐
│ Fedimint │ Grafana │ Home Assistant │
└─────────────────┴─────────────────┴─────────────────┘
Row 3 (3 apps):
┌─────────────────┬─────────────────┬─────────────────┐
│ Lightning Stack │ Mempool │ MorphOS Server │
└─────────────────┴─────────────────┴─────────────────┘
Row 4 (3 apps):
┌─────────────────┬─────────────────┬─────────────────┐
│ Ollama │ OnlyOffice │ Penpot │
└─────────────────┴─────────────────┴─────────────────┘
Row 5 (1 app):
┌─────────────────┐
│ SearXNG │
└─────────────────┘
```
**Note**: Order remains stable whether apps are running or stopped.
## Launch Behavior
### Click "Launch" Button
- Opens app in new browser tab
- Uses `lan-address` from app manifest
- All running apps with UI are launchable
### Click "Start" Button
- Currently shows in UI
- Will start Docker container (implementation pending)
### Click "Stop" Button
- Currently shows in UI
- Will stop Docker container (implementation pending)
## Development Status
### ✅ Working Now
- All apps defined in docker-compose
- Apps sorted alphabetically
- Launch button opens correct URL
- Docker containers start/stop via CLI
### 🚧 In Progress
- Backend API connection to Docker
- Start/Stop from UI buttons
- Health status monitoring
- Log viewing in UI
### 📋 Planned
- App configuration UI
- Resource usage display
- Backup/restore functionality
- App marketplace integration

View File

@ -1,189 +0,0 @@
# ✅ NEW APPROACH: Alpine Overlay ISO (apkovl)
## What Changed
**Previous method**: Modified Alpine ISO contents directly → broke boot process
**New method**: Use Alpine's **apkovl (Alpine Package Overlay)** system → proper Alpine boot
## How It Works
1. ✅ **Base Alpine ISO**: Untouched, boots normally
2. ✅ **Overlay tarball**: `archipelago.apkovl.tar.gz` on ISO root
3. ✅ **Boot parameter**: `apkovl=/archipelago.apkovl.tar.gz` tells Alpine to load it
4. ✅ **Auto-extracted**: Alpine automatically extracts overlay at boot
## What's Included
### In the Overlay (59MB):
- **Archipelago backend** (5.7MB Rust binary)
- **Vue.js frontend** (web UI)
- **21 app manifests** (Bitcoin, Lightning, Web5, etc.)
- **Installation script**: `/root/install-archipelago.sh`
- **Welcome message**: Shows at login
## New ISO Details
**Location**: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso`
**Size**: 267MB (smaller than before!)
**Created**: Jan 31, 2026 22:03
**Boot support**:
- ✅ UEFI
- ✅ Legacy BIOS
- ✅ Hybrid bootable
## How to Flash
### Method 1: Balena Etcher
1. Open Etcher
2. Select the new ISO
3. Flash to USB
### Method 2: Terminal (dd)
```bash
diskutil list
diskutil unmountDisk /dev/diskN
sudo dd if=/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso of=/dev/rdiskN bs=1m status=progress
diskutil eject /dev/diskN
```
## Expected Boot Sequence
### 1. Boot from USB
- **F9** → Select "UEFI - General UDISK"
- Alpine boots normally ✅
- Overlay auto-loaded ✅
### 2. Login Prompt
```
Welcome to Alpine Linux 3.19
╔═══════════════════════════════════════════════════════════╗
║ ║
║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║
║ ║
║ To install to disk, login as root and run: ║
║ ║
║ # setup-alpine ║
║ # /root/install-archipelago.sh ║
║ ║
╚═══════════════════════════════════════════════════════════╝
localhost login: _
```
### 3. Login as root
- **Username**: `root`
- **Password**: *(just press Enter)*
### 4. Install to Disk
#### Option A: Quick Install (Recommended)
```bash
# Run automated installer
/root/install-archipelago.sh
```
This will:
- Install all required packages (Podman, nginx, etc.)
- Create `archipelago` user
- Configure networking (DHCP)
- Set up all services
- Install backend, frontend, and app manifests
#### Option B: Manual Install
```bash
# First, install Alpine to disk
setup-alpine
# Answer the prompts:
# - Keyboard layout: us
# - Hostname: archipelago
# - Network: dhcp
# - Root password: (set one)
# - Timezone: (your timezone)
# - Disk: sda (your internal disk)
# - Mode: sys (install to disk)
# After Alpine is installed, run:
/root/install-archipelago.sh
# Reboot
reboot
```
### 5. After Reboot
1. Remove USB drive
2. Login as `archipelago` / `archipelago`
3. Change password: `passwd`
4. Access web UI: `http://<your-ip>:8100`
## Why This Works
Alpine Linux has a built-in overlay system called **apkovl** for customizing live systems:
1. **Preserved boot flow**: Base Alpine ISO boots normally
2. **Automatic overlay**: Alpine detects and loads `archipelago.apkovl.tar.gz`
3. **No manual mounting**: Everything just works
4. **Standard Alpine**: Uses official Alpine mechanisms, not hacks
## Troubleshooting
### If you still get emergency shell:
1. Type: `ls /`
2. You should see `archipelago.apkovl.tar.gz` in the root
3. Type: `exit` - Alpine should continue booting
### If overlay doesn't load:
At the boot prompt, ensure you see:
```
apkovl=/archipelago.apkovl.tar.gz
```
### To manually load overlay:
```bash
cd /
tar xzf archipelago.apkovl.tar.gz
mv archipelago-overlay/* /
/root/install-archipelago.sh
```
---
**This is the proper Alpine Linux way to do it!** Flash the new ISO and try booting. 🚀
## Technical Details
### Overlay Structure:
```
archipelago.apkovl.tar.gz
└── archipelago-overlay/
├── etc/
│ └── local.d/
│ └── 00-archipelago-welcome.start
├── root/
│ └── install-archipelago.sh
├── usr/
│ ├── local/bin/
│ │ └── archipelago
│ └── share/archipelago/web/
│ └── (Vue.js files)
└── var/lib/archipelago/
└── manifests/
└── (21 app manifests)
```
### Boot Parameters:
- **GRUB**: `apkovl=/archipelago.apkovl.tar.gz`
- **Syslinux**: `apkovl=/archipelago.apkovl.tar.gz`
Alpine's initramfs automatically:
1. Detects the boot media
2. Finds `archipelago.apkovl.tar.gz`
3. Extracts it to `/` (root)
4. Continues normal boot
This is the **official Alpine Linux way** to create custom live systems!

View File

@ -1,286 +0,0 @@
# 🎯 Archipelago Next Steps
## ✅ What's Complete
- [x] Build system fixed and working on ARM Mac
- [x] HP ProDesk 400 G4 DM ISO created (208 MB)
- [x] Custom Alpine ISO builder (`build-custom-iso.sh`)
- [x] Hardware-specific build wrapper (`build-for-hardware.sh`)
- [x] Automated installation script included in ISO
- [x] DHCP networking configured
- [x] Podman + container tools included
- [x] Base system packages (nginx, openssh, etc.)
- [x] Custom Archipelago branding
- [x] Documentation complete
## 🧪 Testing Required
### Virtual Machine Testing
- [ ] Boot ISO in VirtualBox
- [ ] Boot ISO in QEMU
- [ ] Test installation script
- [ ] Verify Podman works
- [ ] Test container pull/run
- [ ] Check network connectivity
### Hardware Testing (HP ProDesk)
- [ ] Flash ISO to USB drive
- [ ] Boot HP ProDesk from USB
- [ ] Verify BIOS/UEFI boot
- [ ] Test installation on real hardware
- [ ] Verify network (DHCP)
- [ ] Test Podman performance
- [ ] Check CPU/RAM/disk usage
### Other Hardware
- [ ] Test on Start9 Server Pure
- [ ] Test on Dell OptiPlex 7040 Micro
- [ ] Test on generic x86_64 PC
## 🔨 Backend Integration
### Build Rust Backend
- [ ] Compile Archipelago backend for Alpine Linux (musl)
- [ ] Create Alpine APK package
- [ ] Include APK in ISO at build time
- [ ] Configure backend to start on boot
- [ ] Test RPC endpoints
- [ ] Verify container management works
### Current Backend Status
Location: `/Users/dorian/Projects/archy/core/`
- `archipelago/` - Main server binary
- `container/` - Container orchestration
- `models/` - Data models
- `security/` - Security policies
- `performance/` - Resource management
**Build Command Needed**:
```bash
cd core/archipelago
cargo build --release --target x86_64-unknown-linux-musl
```
**Package as APK**:
```bash
# Create APKBUILD file
# Build with abuild
# Copy to image-recipe/build/iso-custom/custom/apks/
```
## 🎨 Frontend Integration
### Vue.js UI
- [ ] Build frontend for production
- [ ] Include in ISO at `/usr/share/archipelago/web/`
- [ ] Configure nginx to serve UI
- [ ] Test UI loads at boot
- [ ] Verify WebSocket/API connections
### Current Frontend Status
Location: `/Users/dorian/Projects/archy/neode-ui/`
**Build Command**:
```bash
cd neode-ui
npm run build
# Copy dist/ to ISO
```
## 🐳 Container Apps Integration
### App Manifests
Location: `/Users/dorian/Projects/archy/apps/`
Apps ready to integrate:
- [ ] Bitcoin Core
- [ ] LND
- [ ] Core Lightning
- [ ] BTCPay Server
- [ ] Mempool
- [ ] Nostr relays (nostr-rs-relay, strfry)
- [ ] Web5 DWN
- [ ] Meshtastic
- [ ] Router
- [ ] Home Assistant
- [ ] Grafana
- [ ] SearXNG
- [ ] Ollama
- [ ] OnlyOffice
- [ ] Penpot
**Integration Steps**:
1. Parse `manifest.yml` files
2. Pre-pull Docker images (optional)
3. Include manifests in ISO
4. Test install/start/stop via backend
## 🌐 Networking & Auto-Boot
### Auto-Connect on Boot
Current status:
- [x] DHCP configured for common interfaces (eth0, enp0s3, enp0s25)
- [x] DNS configured (8.8.8.8, 1.1.1.1)
- [ ] Test internet connectivity on first boot
- [ ] Test DNS resolution
- [ ] Add fallback interfaces if needed
### Backend Auto-Start
- [ ] Create OpenRC init script for archipelago backend
- [ ] Enable service on boot
- [ ] Configure to start after network
- [ ] Add health check
- [ ] Configure restart on failure
### UI Auto-Start
- [ ] Configure nginx to start on boot
- [ ] Test UI accessible at http://device-ip:8100
- [ ] Add boot splash screen (optional)
- [ ] Display IP address on console at boot
## 🔐 Security Hardening
### Current Security Status
- [x] Rootless Podman (non-root containers)
- [x] Separate user account (archipelago)
- [ ] SSH key-only authentication
- [ ] Firewall rules (iptables)
- [ ] AppArmor/SELinux profiles
- [ ] Secrets encryption
- [ ] SSL/TLS for web UI
- [ ] Signed images (Cosign)
### Secrets Management
- [ ] Implement encrypted secrets storage
- [ ] Bitcoin Core wallet encryption
- [ ] LND wallet password management
- [ ] API key storage
- [ ] Certificate management
## 📦 Additional Features
### System Management
- [ ] Automatic updates
- [ ] Backup/restore functionality
- [ ] Monitoring dashboard
- [ ] Log aggregation
- [ ] Health checks
- [ ] Resource usage graphs
### User Experience
- [ ] First-boot wizard
- [ ] Welcome screen
- [ ] Quick setup guide
- [ ] Hardware detection display
- [ ] Network status indicator
- [ ] Container status dashboard
### Hardware Optimization
- [ ] Intel GPU drivers (HP ProDesk, Start9)
- [ ] Power management
- [ ] Temperature monitoring
- [ ] Fan control (if applicable)
- [ ] Storage optimization (TRIM, etc.)
## 🚀 Deployment Options
### USB Boot
- [x] Create bootable USB from ISO
- [ ] Persistent storage on USB
- [ ] Live mode vs Install mode
### Dedicated Installation
- [ ] Install to internal storage
- [ ] Partition scheme
- [ ] Encrypted disk support
- [ ] RAID support (optional)
### Network Boot (PXE)
- [ ] PXE boot server setup
- [ ] Network installation
- [ ] Automatic provisioning
## 📚 Documentation Needed
### User Documentation
- [ ] Installation guide
- [ ] Quick start guide
- [ ] App installation guide
- [ ] Troubleshooting guide
- [ ] FAQ
### Developer Documentation
- [ ] Architecture overview ✅ (exists)
- [ ] Build system guide
- [ ] Contributing guide
- [ ] API documentation
- [ ] Container manifest spec ✅ (exists)
### Hardware-Specific Guides
- [ ] HP ProDesk setup guide
- [ ] Start9 Server Pure guide
- [ ] Dell OptiPlex guide
- [ ] Generic x86_64 guide
## 🎯 Priority Order
### Phase 1: Core Functionality (Next)
1. **Test current ISO in VM** ✨ START HERE
2. Build Rust backend for Alpine Linux
3. Include backend in ISO
4. Test backend starts and runs
### Phase 2: UI Integration
1. Build Vue.js frontend
2. Include in ISO
3. Configure nginx
4. Test full stack (backend + UI)
### Phase 3: Hardware Testing
1. Flash to USB
2. Test on HP ProDesk
3. Verify all hardware works
4. Optimize performance
### Phase 4: Container Apps
1. Integrate Bitcoin Core
2. Test container lifecycle
3. Add remaining apps
4. Test app dependencies
### Phase 5: Polish & Security
1. Security hardening
2. Auto-boot configuration
3. User experience improvements
4. Documentation finalization
## 📊 Project Status
| Component | Status | Priority |
|-----------|--------|----------|
| **Build System** | ✅ Complete | - |
| **Base ISO** | ✅ Complete | - |
| **Backend Build** | ⚠️ Needed | 🔴 High |
| **Frontend Build** | ⚠️ Needed | 🟡 Medium |
| **VM Testing** | 🔵 Ready | 🔴 High |
| **Hardware Testing** | 🔵 Ready | 🔴 High |
| **Container Integration** | ⏸️ Pending | 🟡 Medium |
| **Security** | ⏸️ Pending | 🟡 Medium |
| **Documentation** | 🟢 Partial | 🟢 Low |
## 🎉 Immediate Win
**You can now**:
1. ✅ Boot Archipelago on any x86_64 machine
2. ✅ Get a working Alpine Linux system
3. ✅ Have Podman + container tools ready
4. ✅ Run the installation script
5. ✅ Start pulling and running containers manually
**Next milestone**: Backend integration so the web UI can manage containers!
---
**Last Updated**: January 31, 2026
**Current Phase**: Testing & Backend Integration
**Blocker**: None - ready to proceed!

View File

@ -1,423 +0,0 @@
# Production Build System - Complete Summary
## 📦 What We've Created
A complete production build system for Archipelago macOS application, ready for distribution via DMG installer with proper code signing and notarization.
## 🎯 Key Components
### 1. Build Scripts
#### `build-macos-production.sh`
The main production build script that:
- ✅ Builds Rust backend in release mode (optimized)
- ✅ Builds Vue.js frontend in production mode (minified)
- ✅ Creates macOS .app bundle structure
- ✅ Copies all necessary assets (frontend, Docker UIs, configs)
- ✅ Generates Info.plist with proper metadata
- ✅ Creates app icon from logo
- ✅ Packages everything into a DMG installer
- ✅ Provides detailed output and next steps
**Usage**:
```bash
export ARCHIPELAGO_VERSION="0.1.0"
./build-macos-production.sh
```
**Output**:
- `build/macos/Archipelago.app` - macOS application bundle
- `build/macos/Archipelago-0.1.0-macOS.dmg` - DMG installer
#### `verify-build.sh`
Comprehensive verification script that checks:
- ✅ Bundle structure and required files
- ✅ Executable permissions
- ✅ Binary architecture (Intel/Apple Silicon)
- ✅ Info.plist validity
- ✅ Code signature status
- ✅ Notarization status
- ✅ Common build issues
- ✅ Bundle size reporting
**Usage**:
```bash
./verify-build.sh build/macos/Archipelago.app
```
#### `manage-docker.sh`
Docker management utility for production:
- ✅ Start/stop/restart all containers
- ✅ View container status
- ✅ Access logs
- ✅ Clean up containers and volumes
**Usage**:
```bash
./manage-docker.sh start # Start containers
./manage-docker.sh status # Check status
./manage-docker.sh logs # View logs
```
### 2. Configuration Files
#### `core/.env.production`
Production environment configuration:
- Server ports and binding
- Data directory paths
- Security settings
- Docker configuration
- External API toggles
#### `core/archipelago/src/config.rs`
Enhanced config loader that:
- ✅ Auto-detects macOS bundle environment
- ✅ Uses `~/Library/Application Support/Archipelago` for data
- ✅ Supports environment variable overrides
- ✅ Creates necessary directories automatically
#### `neode-ui/package.json`
Added production build command:
```json
"build:production": "NODE_ENV=production vue-tsc -b && vite build --mode production"
```
### 3. Documentation
#### `BUILD_MACOS.md` (9 KB)
Complete build documentation covering:
- Prerequisites and setup
- Build process step-by-step
- App bundle structure
- Code signing instructions
- Notarization workflow
- Distribution methods
- Universal binary creation
- CI/CD integration
- Size optimization
- Security considerations
#### `QUICKSTART.md` (15 KB)
User-friendly getting started guide:
- Installation steps
- First login
- Core features walkthrough
- Common tasks
- Configuration
- Troubleshooting
- System requirements
#### `DEPLOYMENT_CHECKLIST.md` (12 KB)
Production deployment checklist:
- Pre-deployment verification
- Build process
- Code signing steps
- Notarization procedure
- Distribution checklist
- Post-deployment tasks
- Rollback plan
- Known limitations
- Future improvements
#### `CHANGELOG.md` (6 KB)
Version history and release notes:
- v0.1.0 initial release details
- Feature list
- Architecture overview
- System requirements
- Known limitations
- Future roadmap
#### `README.md` (12 KB)
Updated project README:
- Feature highlights
- Quick start instructions
- Project structure
- Docker apps table
- Security best practices
- Contributing guidelines
- Community links
- Roadmap
### 4. CI/CD Automation
#### `.github/workflows/build-macos.yml`
GitHub Actions workflow for automated builds:
- ✅ Triggered on tags (v*) or manual dispatch
- ✅ Builds on macOS runners
- ✅ Compiles Rust backend
- ✅ Builds Vue.js frontend
- ✅ Creates app bundle
- ✅ Code signing (if credentials provided)
- ✅ Notarization (if credentials provided)
- ✅ Creates GitHub Release with DMG
- ✅ Generates checksums
- ✅ Test builds on push (no artifacts)
**Usage**:
```bash
# Tag a release
git tag -a v0.1.0 -m "Release v0.1.0"
git push origin v0.1.0
# Or trigger manually via GitHub UI
```
### 5. App Bundle Structure
```
Archipelago.app/
├── Contents/
│ ├── Info.plist # App metadata
│ ├── PkgInfo # Package type (APPLARCH)
│ ├── MacOS/
│ │ ├── launch.sh # Launch wrapper script
│ │ ├── archipelago # Rust backend binary
│ │ └── manage-docker.sh # Docker management
│ ├── Resources/
│ │ ├── AppIcon.icns # App icon
│ │ ├── frontend/ # Vue.js production build
│ │ │ ├── index.html
│ │ │ ├── assets/
│ │ │ └── ...
│ │ ├── docker-ui/ # Standalone UIs
│ │ │ ├── bitcoin-ui/
│ │ │ └── lnd-ui/
│ │ ├── docker-compose.yml # Container orchestration
│ │ ├── env.template # Config template
│ │ └── env.production # Production defaults
│ └── Frameworks/ # (Reserved for future)
```
### 6. Data Directory Structure (User's System)
```
~/Library/Application Support/Archipelago/
├── data/ # Application data
│ ├── packages/ # Package metadata
│ ├── config/ # User configurations
│ └── state/ # Runtime state
├── logs/ # Application logs
│ └── archipelago.log # Main log file
└── .env # User configuration (created on first run)
```
## 🔐 Security & Distribution
### Code Signing
The build can be code signed with a Developer ID certificate:
```bash
codesign --deep --force --verify --verbose \
--sign "Developer ID Application: Your Name (TEAMID)" \
--options runtime \
build/macos/Archipelago.app
```
### Notarization
For macOS 10.15+ compatibility:
```bash
# Create zip
ditto -c -k --keepParent build/macos/Archipelago.app Archipelago.zip
# Submit to Apple
xcrun notarytool submit Archipelago.zip \
--apple-id "your@email.com" \
--team-id "TEAMID" \
--password "app-specific-password" \
--wait
# Staple ticket
xcrun stapler staple build/macos/Archipelago.app
```
### Distribution Channels
1. **GitHub Releases** - Primary distribution
2. **Direct download** - From project website
3. **Homebrew Cask** - Future consideration
4. **Mac App Store** - Future consideration (requires sandboxing)
## 📊 Build Characteristics
### Size Estimates
- **Rust Backend**: ~10-20 MB (release, stripped)
- **Vue.js Frontend**: ~5-10 MB (minified, gzipped)
- **Docker UIs**: ~2-5 MB (static HTML/CSS/JS)
- **Total Bundle**: ~50-100 MB (without Docker images)
- **DMG Installer**: ~50-80 MB (compressed)
### Performance
- **Backend**: Native performance (Rust compiled)
- **Frontend**: Optimized with Vite (code splitting, tree shaking)
- **Startup Time**: < 2 seconds on modern Mac
- **Memory Usage**: ~50-100 MB idle, ~200-500 MB with containers
### Optimization
- ✅ Rust release mode (opt-level = 3)
- ✅ Strip debug symbols
- ✅ Frontend minification
- ✅ Asset compression
- ✅ Tree shaking (unused code removal)
- ✅ Code splitting (lazy loading routes)
- ✅ Image optimization
## 🚀 Release Workflow
### 1. Pre-Release
```bash
# Update version numbers
vim core/archipelago/Cargo.toml # version = "0.1.0"
vim neode-ui/package.json # "version": "0.1.0"
# Update CHANGELOG.md
vim CHANGELOG.md
# Commit changes
git add -A
git commit -m "Bump version to 0.1.0"
git push
```
### 2. Build
```bash
# Set version
export ARCHIPELAGO_VERSION="0.1.0"
# Run production build
./build-macos-production.sh
# Verify build
./verify-build.sh build/macos/Archipelago.app
```
### 3. Sign & Notarize
```bash
# Code sign
codesign --deep --force --verify --verbose \
--sign "Developer ID Application: Your Name" \
--options runtime \
build/macos/Archipelago.app
# Notarize
ditto -c -k --keepParent build/macos/Archipelago.app Archipelago.zip
xcrun notarytool submit Archipelago.zip --wait ...
xcrun stapler staple build/macos/Archipelago.app
# Recreate DMG with signed app
hdiutil create -volname "Archipelago 0.1.0" \
-srcfolder build/macos/Archipelago.app \
-ov -format UDZO \
build/macos/Archipelago-0.1.0-macOS.dmg
```
### 4. Release
```bash
# Tag the release
git tag -a v0.1.0 -m "Archipelago v0.1.0"
git push origin v0.1.0
# Create GitHub release (or use Actions)
gh release create v0.1.0 \
build/macos/Archipelago-0.1.0-macOS.dmg \
--title "Archipelago v0.1.0" \
--notes-file CHANGELOG.md
```
## 🧪 Testing Checklist
Before releasing:
- [ ] Build succeeds on clean system
- [ ] App launches without errors
- [ ] Dashboard accessible on http://localhost:8100
- [ ] Login works with default credentials
- [ ] Docker containers start correctly
- [ ] Bitcoin Core UI opens (http://localhost:18445)
- [ ] LND UI opens (http://localhost:8085)
- [ ] All apps in "My Apps" launch correctly
- [ ] WebSocket connection stable
- [ ] No console errors in browser
- [ ] App restarts cleanly
- [ ] Data persists across restarts
- [ ] Docker management script works
- [ ] Unsigned app warning (first run)
- [ ] Signed app opens without warning
- [ ] Notarized app passes Gatekeeper
## 🎓 User Experience
### First Launch
1. User downloads DMG
2. Opens DMG, drags to Applications
3. Launches app (right-click → Open for unsigned)
4. App starts backend in background
5. Browser opens to http://localhost:8100
6. User logs in (admin/password123)
7. Dashboard shows "My Apps"
8. User can start containers with one click
### Daily Use
1. Launch Archipelago from Applications
2. Access http://localhost:8100
3. Manage Bitcoin node, Lightning channels
4. Use self-hosted apps (Nextcloud, Penpot, etc.)
5. Monitor system via dashboard
6. Quit app when done (containers keep running)
## 📈 Future Enhancements
### Short Term (v0.2.0)
- Auto-update mechanism (Sparkle framework)
- Menu bar app (status icon)
- Launch at login option
- Better error messages
- Onboarding improvements
### Medium Term (v0.3.0)
- Native container runtime (no Docker Desktop)
- Multi-user support
- Enhanced backup/restore
- Hardware wallet integration
- iOS companion app
### Long Term (v1.0.0)
- Mac App Store release
- Windows and Linux builds
- Plugin system
- Decentralized app marketplace
- Zero-knowledge backups
## 📝 Notes
### Secrets Required for Full Release
Store in GitHub Secrets:
- `MACOS_CERTIFICATE` - Developer ID certificate (base64)
- `MACOS_CERTIFICATE_PWD` - Certificate password
- `KEYCHAIN_PWD` - Temporary keychain password
- `APPLE_ID` - Apple ID for notarization
- `APPLE_TEAM_ID` - Developer team ID
- `APPLE_APP_PASSWORD` - App-specific password
### Apple Developer Account
Required for:
- Code signing certificate
- Notarization
- Mac App Store (optional)
Cost: $99/year
### Best Practices
1. **Always test unsigned build first**
2. **Verify on clean Mac before distributing**
3. **Keep build logs for debugging**
4. **Maintain changelog for every release**
5. **Use semantic versioning (semver)**
6. **Tag releases in git**
7. **Archive signed builds**
8. **Test upgrade path from previous version**
---
**Status**: ✅ Production build system complete and ready for use
**Next Step**: Run `./build-macos-production.sh` to create your first production build!

View File

@ -1,148 +0,0 @@
# ✅ QEMU Testing Setup Complete!
## What We Installed
- **QEMU 10.2.0** (full x86_64 emulation)
- **20GB virtual disk** (`/tmp/archipelago-test-disk.qcow2`)
- **Test script** (`test-iso-qemu.sh`)
## How to Test ISOs
### Quick Test:
```bash
cd /Users/dorian/Projects/archy/image-recipe
./test-iso-qemu.sh
```
A QEMU window will open showing the VM booting from your ISO!
### Test Specific ISO:
```bash
./test-iso-qemu.sh /path/to/your.iso
```
## VM Specs
- **RAM**: 2GB
- **CPU**: 2 cores
- **Disk**: 20GB virtual disk
- **Network**: NAT (automatically configured)
- **Display**: VirtIO GPU
## Controls
- **Release mouse/keyboard**: Ctrl+Alt+G
- **Stop VM**: Close window or Ctrl+C in terminal
- **Fullscreen**: Ctrl+Alt+F
## What to Test
### 1. Boot Sequence
- Does it boot to Alpine login? ✅ or ❌
- Any emergency shell? ❌ (should NOT appear with overlay ISO!)
- Does overlay load automatically?
### 2. Login Test
```
Username: root
Password: (just press Enter)
```
### 3. Check Overlay Loaded
```bash
# Check if overlay files are present
ls -la /root/install-archipelago.sh
ls -la /usr/local/bin/archipelago
ls -la /usr/share/archipelago/web
```
### 4. Test Installer
```bash
/root/install-archipelago.sh
```
### 5. Test Alpine Installation (Optional)
```bash
setup-alpine
```
## Expected Boot Flow
```
1. QEMU starts
2. BIOS/GRUB loads
3. Alpine kernel starts
4. Overlay (archipelago.apkovl.tar.gz) detected
5. Overlay extracted to /
6. Welcome message appears
7. Login prompt
```
## Current Test Status
**QEMU is currently running!** Check for the QEMU window on your screen.
You should see:
- Either Alpine boot messages scrolling by
- Or a login prompt with the Archipelago welcome message
## Stopping the VM
To stop the VM:
```bash
# Press Ctrl+C in the terminal where you ran the script
# Or close the QEMU window
```
## Advantages of QEMU Testing
**Fast**: No USB flashing needed
**Repeatable**: Test as many times as you want
**Safe**: No risk to physical hardware
**Debugging**: Easy to see boot messages
**Quick iteration**: Rebuild ISO → Test in seconds
## Workflow for Future Builds
```bash
# 1. Build new ISO
cd /Users/dorian/Projects/archy/image-recipe
./build-overlay-iso.sh
# 2. Test in QEMU
./test-iso-qemu.sh
# 3. If it works, flash to USB for real hardware
diskutil list
diskutil unmountDisk /dev/diskN
sudo dd if=results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso of=/dev/rdiskN bs=1m
```
## Troubleshooting
### VM doesn't start
Check the terminal output:
```bash
tail -50 /Users/dorian/.cursor/projects/Users-dorian-Projects-archy/terminals/68354.txt
```
### Black screen
- Wait 30 seconds (VM might be loading)
- Press Enter to see if login prompt appears
### Can't see QEMU window
- Check your Dock for QEMU icon
- Check Mission Control (Cmd+Up) for windows
### VM is too slow
This is normal - QEMU emulation (not virtualization) is slow on ARM Mac. It's still faster than flashing USB drives though!
---
**Look for the QEMU window on your screen now!** You should see Alpine booting. 🚀

View File

@ -1,293 +0,0 @@
# Archipelago - Quick Start Guide
Welcome to Archipelago! This guide will help you get started in minutes.
## 📥 Installation
### Step 1: Download
Download the latest release:
- **macOS**: `Archipelago-[version]-macOS.dmg`
### Step 2: Install Docker Desktop
Archipelago requires Docker Desktop to run containerized apps.
1. Download: https://www.docker.com/products/docker-desktop
2. Install and launch Docker Desktop
3. Wait for Docker to fully start (whale icon in menu bar)
### Step 3: Install Archipelago
1. Open the downloaded DMG file
2. Drag **Archipelago** to your **Applications** folder
3. Eject the DMG
### Step 4: First Launch
1. Open **Applications** folder
2. Right-click **Archipelago****Open** (first time only)
3. Click **Open** if you see a security warning
4. The app will start in the background
## 🚀 Getting Started
### Access the Dashboard
Open your web browser and go to:
```
http://localhost:8100
```
### First Login
**Default Credentials (Dev Mode)**:
- Username: `admin`
- Password: `password123`
⚠️ **Change this password immediately in production!**
## 🎯 Core Features
### 1. My Apps
View and manage all your containerized applications:
- Bitcoin Core (Full Node)
- LND (Lightning Network)
- BTCPay Server (Payments)
- Penpot (Design)
- Nextcloud (Cloud Storage)
- And more...
**To start an app**:
1. Navigate to **My Apps**
2. Click on any app card
3. Click **Start** if not already running
4. Click **Launch** to open the app's UI
### 2. Bitcoin Core
Your personal Bitcoin full node in regtest mode (no blockchain sync required for testing).
**Access**: http://localhost:18445
Features:
- Node status and sync progress
- Network information
- Block explorer
- Configuration settings
### 3. Lightning Network (LND)
Lightning Network Daemon for instant Bitcoin payments.
**Access**: http://localhost:8085
Features:
- Channel management
- Balance overview
- Payment routing
- Network graph
### 4. Cloud Storage
Manage your files by type (Documents, Photos, Videos, Music).
**Features**:
- Click "Open Nextcloud" to access full cloud interface
- Upload and organize files
- Share files securely
- Access from any device
### 5. Web5
Decentralized identity and data management.
**Coming soon**: DID wallet, DWN nodes, decentralized apps
## 📱 Common Tasks
### Starting All Containers
```bash
# From Terminal
cd /Applications/Archipelago.app/Contents/MacOS
./manage-docker.sh start
```
### Stopping All Containers
```bash
./manage-docker.sh stop
```
### Viewing Logs
```bash
./manage-docker.sh logs
# Or for specific service:
./manage-docker.sh logs bitcoin
```
### Checking Status
```bash
./manage-docker.sh status
```
## 🔧 Configuration
### Data Location
All data is stored in:
```
~/Library/Application Support/Archipelago/
├── data/ # Application data
└── logs/ # Log files
```
### Environment Variables
Edit configuration:
```bash
nano ~/Library/Application\ Support/Archipelago/.env
```
Key settings:
```bash
ARCHIPELAGO_PORT=8100 # Web UI port
ARCHIPELAGO_BACKEND_PORT=3030 # Backend API port
RUST_LOG=info # Log level (debug, info, warn)
```
### Docker Compose
The main Docker configuration is at:
```
/Applications/Archipelago.app/Contents/Resources/docker-compose.yml
```
## 🐛 Troubleshooting
### App Won't Open
**Problem**: "Archipelago is damaged and can't be opened"
**Solution**:
```bash
xattr -cr /Applications/Archipelago.app
```
Then try opening again.
### Docker Containers Won't Start
**Check Docker is running**:
```bash
docker info
```
**If Docker is not running**:
1. Open Docker Desktop
2. Wait for it to fully start
3. Try again
### Port Already in Use
**Error**: Port 8100 already in use
**Solution**:
```bash
# Find what's using the port
lsof -i :8100
# Kill the process or change Archipelago's port
nano ~/Library/Application\ Support/Archipelago/.env
# Change ARCHIPELAGO_PORT=8100 to another port
```
### Web UI Shows "Connection Failed"
**Check backend is running**:
```bash
# Check if backend process is running
ps aux | grep archipelago
# Check logs
tail -f ~/Library/Application\ Support/Archipelago/logs/archipelago.log
```
### Bitcoin Core UI Not Loading
1. Check if container is running: `./manage-docker.sh status`
2. Restart Bitcoin Core: `docker restart archy-bitcoin`
3. Check logs: `./manage-docker.sh logs bitcoin`
### Out of Disk Space
Docker images can be large. Clean up:
```bash
# Remove unused containers and images
docker system prune -a
# Check disk usage
docker system df
```
## 📊 System Requirements
### Minimum
- macOS 10.15 (Catalina)
- 8GB RAM
- 20GB free disk space
- Docker Desktop 23.0+
### Recommended
- macOS 12.0 (Monterey) or later
- 16GB RAM
- 50GB+ free disk space (for blockchain data)
- SSD storage
- Fast internet connection
## 🔐 Security
### Best Practices
1. **Change default password** immediately
2. **Enable firewall** in System Preferences
3. **Keep Docker updated** for security patches
4. **Backup data** regularly from `~/Library/Application Support/Archipelago/`
5. **Don't expose ports** to the internet without VPN/firewall
### Network Security
By default, all services are only accessible on localhost (127.0.0.1).
To access from other devices on your network (not recommended):
- Edit `docker-compose.yml`
- Change bind addresses from `127.0.0.1:PORT` to `0.0.0.0:PORT`
- Ensure firewall is properly configured
## 🆘 Getting Help
### Resources
- **Documentation**: `/Applications/Archipelago.app/Contents/Resources/docs/`
- **GitHub Issues**: https://github.com/[your-repo]/archipelago/issues
- **Community**: [Discord/Telegram link]
### Logs Location
```bash
# Application logs
~/Library/Application Support/Archipelago/logs/archipelago.log
# Docker logs
./manage-docker.sh logs
```
### Reporting Bugs
When reporting issues, include:
1. macOS version: `sw_vers`
2. Docker version: `docker --version`
3. Archipelago version: Check "About" in app
4. Error message or log excerpt
5. Steps to reproduce
## 🎓 Next Steps
### Learn More
- **Architecture**: Read `docs/architecture.md`
- **Building from Source**: See `BUILD_MACOS.md`
- **Contributing**: Check `CONTRIBUTING.md`
### Explore Apps
1. **Set up Bitcoin Core** for mainnet (requires blockchain sync)
2. **Create Lightning channels** with LND
3. **Install BTCPay Server** for accepting payments
4. **Design in Penpot** (open-source Figma alternative)
5. **Track fitness with Endurain**
6. **Store files in Nextcloud**
### Join the Community
- Share your setup
- Report bugs
- Request features
- Contribute code
---
**Welcome to the Archipelago!** 🏝️
Your sovereign personal server awaits.

View File

@ -1,322 +0,0 @@
# Archipelago Quick Reference
## Installation
```bash
# Install all dependencies
./INSTALL.sh
# Verify installation
./verify-install.sh
```
## Development
### Start Development Servers
```bash
# Quick start (mock backend)
./scripts/dev.sh
# Interactive start
./scripts/dev-start.sh
# Manual start
# Terminal 1:
cd core && cargo run --bin archipelago
# Terminal 2:
cd neode-ui && npm run dev
```
### URLs
- Frontend: http://localhost:8100
- Backend API: http://localhost:5959
- Backend RPC: http://localhost:5959/rpc/v1
## Common Commands
### Rust Backend
```bash
cd core
# Run in development mode
cargo run --bin archipelago
# Run in release mode (faster)
cargo run --bin archipelago --release
# Build only
cargo build
# Run tests
cargo test
# Auto-reload on changes
cargo install cargo-watch
cargo watch -x 'run --bin archipelago'
# Check for errors without building
cargo check
```
### Frontend (Vue.js)
```bash
cd neode-ui
# Install dependencies
npm install
# Development server
npm run dev
# With mock backend
npm run dev:mock
# Build for production
npm run build
# Type checking
npm run type-check
# Preview production build
npm run preview
```
### Apps (Containerized)
```bash
cd apps
# Build all apps
./build.sh
# Build specific app
./build.sh router
./build.sh bitcoin-core
./build.sh did-wallet
# Install app dependencies (for custom apps)
cd apps/router && npm install
cd apps/did-wallet && npm install
cd apps/web5-dwn && npm install
```
### Container Management (Podman)
```bash
# Check Podman status
podman --version
podman info
# Manage Podman machine
podman machine list
podman machine start
podman machine stop
podman machine ssh
# List containers
podman ps
podman ps -a
# List images
podman images
# Remove all stopped containers
podman container prune
# Remove unused images
podman image prune
```
### Database (PostgreSQL)
```bash
# Start/stop PostgreSQL service
brew services start postgresql@15
brew services stop postgresql@15
brew services restart postgresql@15
# Check service status
brew services list | grep postgresql
# Create database
createdb archipelago_dev
# Drop database
dropdb archipelago_dev
# Connect to database
psql archipelago_dev
# List databases
psql -l
```
## Configuration
### Backend Configuration
File: `core/.env`
```bash
DATADIR=/tmp/archipelago-dev
RPC_BIND=127.0.0.1:5959
LOG_LEVEL=debug
DATABASE_URL=postgresql://localhost/archipelago_dev
ARCHIPELAGO_DEV_MODE=true
```
### Frontend Configuration
File: `neode-ui/.env`
```bash
VITE_BACKEND_URL=http://localhost:5959
VITE_API_BASE=/rpc/v1
VITE_DEV_MODE=true
```
## Troubleshooting
### Ports Already in Use
```bash
# Find process using port
lsof -i :5959
lsof -i :8100
# Kill process
kill -9 <PID>
```
### PostgreSQL Issues
```bash
# Check if running
pg_isready
# View logs
tail -f /opt/homebrew/var/log/postgresql@15.log
# Restart service
brew services restart postgresql@15
```
### Podman Issues
```bash
# Restart machine
podman machine stop
podman machine start
# Reset machine (WARNING: destroys all containers/images)
podman machine rm
podman machine init
podman machine start
```
### Rust Compilation Issues
```bash
# Update Rust
rustup update
# Clean and rebuild
cd core
cargo clean
cargo build
```
### Node/NPM Issues
```bash
# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm cache clean --force
npm install
```
## Project Structure
```
archy/
├── INSTALL.sh # Installation script
├── verify-install.sh # Verify installation
├── SETUP_GUIDE.md # Detailed setup guide
├── README.md # Main documentation
├── core/ # Rust backend
│ ├── .env # Backend config (create from .env.example)
│ ├── archipelago/ # Main binary
│ ├── container/ # Container management
│ ├── parmanode/ # Parmanode integration
│ ├── security/ # Security modules
│ └── performance/ # Performance optimization
├── neode-ui/ # Vue.js frontend
│ ├── .env # Frontend config (create from .env.example)
│ └── src/ # Source files
├── apps/ # Containerized applications
│ ├── build.sh # Build apps
│ ├── bitcoin-core/ # Bitcoin node
│ ├── router/ # Custom router app
│ ├── did-wallet/ # Web5 DID wallet
│ └── web5-dwn/ # Web5 DWN server
├── docs/ # Documentation
├── scripts/ # Development scripts
└── image-recipe/ # OS image build files
```
## Useful Aliases
Add to your `~/.zshrc` or `~/.bashrc`:
```bash
# Archipelago aliases
alias archy-backend='cd ~/Projects/archy/core && cargo run --bin archipelago'
alias archy-frontend='cd ~/Projects/archy/neode-ui && npm run dev'
alias archy-verify='cd ~/Projects/archy && ./verify-install.sh'
alias archy-apps='cd ~/Projects/archy/apps'
alias archy-docs='cd ~/Projects/archy/docs'
```
## Development Workflow
1. **Start backend** (Terminal 1)
```bash
cd core && cargo run --bin archipelago
```
2. **Start frontend** (Terminal 2)
```bash
cd neode-ui && npm run dev
```
3. **Make changes** to code
4. **See changes live:**
- Frontend: Auto-reloads with Vite HMR
- Backend: Restart cargo or use cargo-watch
5. **Build apps** when needed:
```bash
cd apps && ./build.sh <app-name>
```
## Resources
- [Development Setup Guide](docs/development-setup.md)
- [Architecture Documentation](docs/architecture.md)
- [App Manifest Specification](docs/app-manifest-spec.md)
- [Apps Quick Start](apps/QUICKSTART.md)
- [Apps Development Guide](apps/DEVELOPMENT.md)
## Getting Help
1. Check [SETUP_GUIDE.md](SETUP_GUIDE.md) for detailed instructions
2. Run `./verify-install.sh` to diagnose issues
3. Review error messages carefully
4. Check service status (PostgreSQL, Podman)
5. Look in `docs/` for specific topics

View File

@ -1,160 +0,0 @@
# Archipelago Docker Dev - Quick Reference
## 🚀 Quick Start
```bash
cd neode-ui
npm start # Start everything (Docker + UI)
```
Open: **http://localhost:8100**
## 🛑 Stop Everything
```bash
cd neode-ui
npm stop # Stop all containers + UI
```
## 📱 App URLs
| App | URL | Default Creds |
|-----|-----|---------------|
| **Neode UI** | http://localhost:8100 | - |
| Grafana | http://localhost:3000 | admin/admin |
| Home Assistant | http://localhost:8123 | (create on first run) |
| Mempool | http://localhost:4080 | - |
| SearXNG | http://localhost:8082 | - |
| Penpot | http://localhost:9001 | (create account) |
| OnlyOffice | http://localhost:8083 | - |
| BTCPay Server | http://localhost:14142 | (setup on first run) |
| Ollama API | http://localhost:11434 | - |
| Endurain | http://localhost:8084 | (placeholder) |
| MorphOS | http://localhost:8081 | (placeholder) |
## 🐳 Docker Commands
```bash
# View all containers
docker compose ps
# View logs
docker compose logs -f # All logs
docker compose logs -f bitcoin # Specific app
# Control containers
docker compose stop bitcoin # Stop one app
docker compose start bitcoin # Start one app
docker compose restart lnd # Restart one app
# Status check
docker compose ps # Running containers
docker stats # Resource usage
# Fresh start
docker compose down -v # Delete all data
docker compose up -d # Start everything
```
## 🔧 Troubleshooting
### App won't load
```bash
docker compose ps # Check if running
docker compose logs bitcoin # Check logs
docker compose restart bitcoin # Try restart
```
### Port conflict
```bash
lsof -i :8123 # Find what's using port
docker compose stop # Stop all containers
```
### Out of space
```bash
docker system prune -a # Clean up everything
```
### Complete reset
```bash
npm stop
docker compose down -v
docker system prune -a
npm start
```
## 💡 Development Tips
### First run
- Takes 10-30 min to download images
- ~3-5GB of images
- You'll be prompted to confirm
### Making UI changes
- Files auto-reload on save
- Edit in `neode-ui/src/`
### Testing Bitcoin
```bash
# Generate regtest blocks
docker exec archy-bitcoin bitcoin-cli -regtest \
-rpcuser=bitcoin -rpcpassword=bitcoinpass \
generatetoaddress 101 [address]
```
### View specific logs
```bash
docker compose logs -f --tail=100 bitcoin
```
### Check resource usage
```bash
docker stats
```
## 📁 Project Structure
```
archy/
├── docker-compose.yml # All apps defined here
├── start-docker-apps.sh # Start script
├── stop-docker-apps.sh # Stop script
├── GETTING_STARTED.md # Full guide
├── DOCKER_DEV_SETUP.md # Technical docs
└── neode-ui/
├── start-dev.sh # npm start
├── stop-dev.sh # npm stop
└── src/
├── views/Apps.vue # My Apps page
└── utils/dummyApps.ts # App definitions
```
## 📚 Documentation
- **Setup Guide**: [GETTING_STARTED.md](GETTING_STARTED.md)
- **Technical Details**: [DOCKER_DEV_SETUP.md](DOCKER_DEV_SETUP.md)
- **What's Done**: [DOCKER_SETUP_COMPLETE.md](DOCKER_SETUP_COMPLETE.md)
## ⚡ Common Tasks
### Update images
```bash
docker compose pull
docker compose up -d
```
### Backup data
```bash
docker compose down
cp -r /var/lib/docker/volumes ~/docker-backup
```
### Add new app
1. Edit `docker-compose.yml`
2. Edit `neode-ui/src/utils/dummyApps.ts`
3. Run `npm stop && npm start`
---
**Need help? See [GETTING_STARTED.md](GETTING_STARTED.md)**

View File

@ -94,33 +94,25 @@ brew install node
### Production Builds for Hardware
Archipelago supports building optimized OS images for specific hardware:
Archipelago supports building bootable Debian-based OS images:
```bash
cd image-recipe
# Build for Start9 Server Pure
./build-for-hardware.sh start9-pure iso
# Build bootable ISO
./build-debian-iso.sh
# Build for HP ProDesk 400 G4 DM
./build-for-hardware.sh hp-prodesk iso
# Build for Dell OptiPlex
./build-for-hardware.sh dell-optiplex iso
# Build for all hardware targets
./build-all-hardware.sh iso
# Write to USB
./write-usb-dd.sh /dev/diskN
```
**Supported Hardware:**
- 🖥️ **Start9 Server Pure** - Intel i7-10710U, 32-64GB RAM, 2-4TB NVMe
- 🖥️ **HP ProDesk 400 G4 DM** - Intel varies, 8GB+ RAM, 128GB+ SSD
- 🖥️ **Dell OptiPlex** - Intel varies, 8GB+ RAM, 128GB+ SSD
- 🖥️ **Generic x86_64** - Any x86_64 hardware
- 🖥️ **Generic x86_64** - Any x86_64 hardware with UEFI
Each build includes hardware-specific optimizations, drivers, and firmware.
See [image-recipe/QUICK-REFERENCE.md](image-recipe/QUICK-REFERENCE.md) for detailed build instructions.
See [image-recipe/README.md](image-recipe/README.md) for detailed build instructions.
## 📖 Documentation
@ -265,7 +257,7 @@ Built with amazing open-source projects:
- [Docker](https://www.docker.com/) - Container runtime
- [Bitcoin Core](https://bitcoin.org/) - Bitcoin full node
- [LND](https://lightning.engineering/) - Lightning Network
- [Alpine Linux](https://alpinelinux.org/) - Minimal Linux (inspiration)
- [Debian](https://www.debian.org/) - Stable Linux foundation
- And many more...
## 💖 Support the Project

View File

@ -1,355 +0,0 @@
# Start9 Server Pure Build - Ready to Use Checklist
## ✅ IMPLEMENTATION STATUS: COMPLETE
All files created and ready for building Archipelago OS for Start9 Server Pure, while preserving HP ProDesk and Dell OptiPlex support.
---
## 📝 Created Files Checklist
### Build Scripts ✅
- [x] `image-recipe/build-for-hardware.sh` - Main hardware build script
- [x] `image-recipe/build-all-hardware.sh` - Build all hardware targets
- [x] `image-recipe/test-start9-build.sh` - Quick test build script
- [x] All scripts made executable (`chmod +x`)
### Documentation ✅
- [x] `START9_SERVER_PURE_BUILD.md` - Start9 quick start guide
- [x] `MULTI_HARDWARE_BUILD_SYSTEM.md` - System architecture
- [x] `IMPLEMENTATION_COMPLETE.md` - Implementation summary
- [x] `BUILD_COMMANDS_REFERENCE.txt` - Visual command reference
- [x] `image-recipe/QUICK-REFERENCE.md` - Quick reference guide
- [x] `image-recipe/README-HARDWARE-BUILDS.md` - Detailed hardware guide
- [x] `README.md` - Updated main documentation
- [x] `.cursor/rules/Architecture.mdc` - Updated architecture rules
### Hardware Support ✅
- [x] Start9 Server Pure (NEW)
- [x] HP ProDesk 400 G4 DM (PRESERVED)
- [x] Dell OptiPlex (PRESERVED)
- [x] Generic x86_64 (FALLBACK)
---
## 🚀 READY TO BUILD
### Option 1: Quick Test (Recommended First)
```bash
cd image-recipe
./test-start9-build.sh
```
**Time**: 5-10 minutes
**Purpose**: Verify build system works
### Option 2: Full Start9 Pure Build
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
**Time**: 45-60 minutes (first build)
**Output**: `results/archipelago-0.1.0-start9-pure-x86_64.iso`
### Option 3: Build All Hardware
```bash
cd image-recipe
./build-all-hardware.sh iso
```
**Time**: 3-4 hours (first build)
**Output**: ISOs for all 4 hardware targets
---
## 📋 Pre-Build Checklist
Before starting a build:
### macOS Users
- [ ] Docker Desktop installed
- [ ] Docker Desktop running
- [ ] At least 10GB free disk space
- [ ] At least 8GB RAM available
### Linux Users
- [ ] Docker or Alpine Linux
- [ ] Build tools installed
- [ ] At least 10GB free disk space
- [ ] Root/sudo access if needed
### All Users
- [ ] Internet connection (for downloading Alpine packages)
- [ ] Time available (first build is slow)
- [ ] Coffee/tea ready ☕
---
## 🎯 What Gets Built
### For Start9 Server Pure
```
results/
├── archipelago-0.1.0-start9-pure-x86_64.iso
│ ├── Alpine Linux 3.19 base
│ ├── Podman container runtime
│ ├── Archipelago backend (Rust)
│ ├── Archipelago UI (Vue.js)
│ ├── Intel i7-10710U microcode
│ ├── Intel UHD Graphics drivers
│ ├── NVMe optimizations
│ ├── Hardware detection scripts
│ └── First-boot setup
└── BUILD_MANIFEST_start9-pure.txt
└── Complete build information
```
### Hardware-Specific Optimizations
- ✅ CPU microcode (Intel i7-10710U)
- ✅ Graphics acceleration (Intel UHD)
- ✅ Storage optimization (NVMe SSD)
- ✅ Network tuning (Gigabit Ethernet)
- ✅ Power management
- ✅ Memory efficiency (32-64GB)
---
## 📦 Post-Build Checklist
After build completes:
- [ ] ISO file exists: `results/archipelago-0.1.0-start9-pure-x86_64.iso`
- [ ] Manifest exists: `results/BUILD_MANIFEST_start9-pure.txt`
- [ ] ISO size ~350MB (reasonable)
- [ ] No build errors in output
- [ ] Review manifest for correctness
---
## 💾 Installation Checklist
### Prepare USB Drive
- [ ] USB drive available (4GB+ capacity)
- [ ] Backup any data on USB (will be erased!)
- [ ] Know device path (/dev/diskX or /dev/sdX)
### Flash ISO
- [ ] Use `dd` command or balenaEtcher
- [ ] Verify flash completed successfully
- [ ] Safely eject USB drive
### Install on Start9 Server Pure
- [ ] Insert USB into Start9 Server Pure
- [ ] Power on device
- [ ] Press F12 for boot menu
- [ ] Select USB drive
- [ ] Follow installation prompts
- [ ] Remove USB after installation
- [ ] Reboot device
### Verify Installation
- [ ] System boots without USB
- [ ] Hardware detection runs: `/var/log/archipelago-hardware.log`
- [ ] Hardware config correct: `/etc/archipelago/hardware.toml`
- [ ] Services running: `systemctl status archipelago`
- [ ] UI accessible: `http://device-ip:8100`
- [ ] Containers work: `podman ps`
---
## 🔍 Verification Commands
After installation, SSH into device and run:
```bash
# Check hardware detection
cat /etc/archipelago/hardware.toml
cat /var/log/archipelago-hardware.log
# Verify optimizations
dmesg | grep -i archipelago
lsmod | grep -E "i915|nvme"
# Check services
systemctl status archipelago
podman info
# View system info
cat /etc/archipelago/system-info.txt
uname -a
cat /proc/cpuinfo | grep "model name" | head -1
free -h
df -h
```
---
## 📖 Documentation Access
All documentation created:
### Quick Start
- `START9_SERVER_PURE_BUILD.md` - Your main guide
- `BUILD_COMMANDS_REFERENCE.txt` - Visual command reference
### Detailed Guides
- `image-recipe/QUICK-REFERENCE.md` - Command reference
- `image-recipe/README-HARDWARE-BUILDS.md` - Complete hardware guide
### Technical Details
- `MULTI_HARDWARE_BUILD_SYSTEM.md` - System design
- `IMPLEMENTATION_COMPLETE.md` - Implementation summary
- `docs/architecture.md` - Architecture details
---
## 🎯 Success Criteria
You'll know everything works when:
✅ **Build Phase**
- [ ] Build completes without errors
- [ ] ISO file created successfully
- [ ] Build manifest generated
- [ ] File sizes reasonable (~350MB)
✅ **Installation Phase**
- [ ] USB boots on Start9 Server Pure
- [ ] Installation completes successfully
- [ ] System boots from internal drive
- [ ] No kernel panics or errors
✅ **Runtime Phase**
- [ ] Hardware detection succeeds
- [ ] Correct hardware profile loaded
- [ ] All services start
- [ ] UI accessible at port 8100
- [ ] Containers can be created
✅ **Performance Phase**
- [ ] NVMe SSD performs well
- [ ] Intel graphics accelerated
- [ ] All 6 cores utilized
- [ ] RAM properly managed
- [ ] Network at gigabit speed
---
## 🚦 Current Status
### ✅ COMPLETE
- [x] Build scripts created and tested
- [x] Hardware profiles implemented
- [x] Documentation complete
- [x] Start9 Pure support added
- [x] ProDesk support preserved
- [x] OptiPlex support preserved
- [x] Generic x86_64 support added
- [x] Hardware detection implemented
- [x] Optimization scripts created
- [x] All files committed to repo
### 🎯 READY FOR
- [ ] Test build execution
- [ ] Full build execution
- [ ] USB creation
- [ ] Hardware installation
- [ ] Production deployment
---
## 🔄 Next Actions
### Immediate (Now)
1. **Run test build** to verify system:
```bash
cd image-recipe
./test-start9-build.sh
```
### Short Term (Today)
2. **Run full Start9 build**:
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
3. **Flash to USB** and prepare for installation
### Medium Term (This Week)
4. **Install on Start9 Server Pure**
5. **Verify all features work**
6. **Document any issues**
7. **Iterate if needed**
### Long Term (This Month)
8. **Build for all hardware targets**
9. **Set up CI/CD for automatic builds**
10. **Release ISOs on GitHub**
11. **Create release notes**
---
## 🐛 Known Issues & Workarounds
### None Currently Known
All implementation complete and ready to use.
### If Issues Arise
1. Check build logs
2. Verify prerequisites
3. Review documentation
4. Clean and rebuild
5. Open GitHub issue if needed
---
## 💡 Tips for Success
### Building
- ☕ First build is slow - be patient
- 💾 Ensure enough disk space (10GB+)
- 🔄 Subsequent builds are much faster (caching)
- 📝 Check BUILD_MANIFEST after build
### Installing
- 🔍 Verify USB device path carefully
- ⚡ Use `rdiskX` on macOS for faster flashing
- 🎯 Press F12 at right time for boot menu
- 📊 Watch for hardware detection on first boot
### Troubleshooting
- 🧹 Clean builds if stuck: `rm -rf results/ build/`
- 🐳 Restart Docker if issues on macOS
- 📖 Check docs - answers are there
- 🆘 Open issue if truly stuck
---
## 🎉 You're Ready!
Everything is implemented and ready to use. The build system supports:
- ✅ Start9 Server Pure (with optimizations)
- ✅ HP ProDesk 400 G4 DM (preserved)
- ✅ Dell OptiPlex (preserved)
- ✅ Generic x86_64 (fallback)
**Time to build your sovereign Bitcoin node OS! 🏝️**
---
## 📞 Support
If you need help:
1. Read `START9_SERVER_PURE_BUILD.md`
2. Check `BUILD_COMMANDS_REFERENCE.txt`
3. Review troubleshooting in docs
4. Open GitHub issue
---
**Status**: ✅ **READY TO BUILD**
**Date**: January 31, 2026
**Your Hardware**: Start9 Server Pure
🚀 **Let's go!**

View File

@ -1,273 +0,0 @@
# ✅ COMPLETE ARCHIPELAGO NODE OS - READY TO FLASH!
**Date**: January 31, 2026
**Status**: ✅ PRODUCTION READY
**Build Type**: Full Archipelago Bitcoin Node OS
---
## 📀 Your ISO is Ready!
**Location**: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso`
**Size**: 277 MB
**Format**: ISO 9660 (bootable)
**Target**: HP ProDesk 400 G4 DM (and any x86_64 PC)
---
## 🎯 What's Included
### System Base
- ✅ Alpine Linux 3.19 LTS
- ✅ Podman (rootless containers)
- ✅ nginx web server
- ✅ OpenSSH server
- ✅ DHCP networking (auto-configure)
### Archipelago Components
- ✅ **Rust Backend** (5.7 MB)
- Container orchestration
- RPC API
- WebSocket support
- App manifest parsing
- ✅ **Vue.js Frontend** (14 MB)
- Dashboard
- App marketplace
- Container management
- Settings & configuration
### Auto-Configuration
- ✅ Backend service (auto-start on boot)
- ✅ Web UI on port 8100
- ✅ API on port 8101
- ✅ nginx reverse proxy
- ✅ User account: archipelago/archipelago
---
## 🔥 Flash to USB with Balena Etcher
### Step 1: Install Balena Etcher
```bash
brew install --cask balenaetcher
```
### Step 2: Flash
1. Launch **Balena Etcher**
2. Click **"Flash from file"**
3. Select: `/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-x86_64.iso`
4. Insert USB drive (512MB minimum)
5. Click **"Select target"** → choose your USB
6. Click **"Flash!"**
7. Wait 1-2 minutes
8. Done! Safely eject USB
---
## 🚀 Boot & Install on HP ProDesk
### Boot from USB
1. Insert USB drive into HP ProDesk
2. Power on
3. Press **F9** for boot menu
4. Select USB drive
5. System boots into Alpine Linux
### Install Archipelago
```bash
# Login as root (no password)
# Run the installer
sh /media/cdrom/archipelago/install.sh
```
### What the Installer Does
- Installs all packages (Podman, nginx, openssh, tools)
- Copies backend to `/usr/local/bin/archipelago`
- Copies frontend to `/usr/share/archipelago/web/`
- Configures nginx (port 8100 for UI)
- Creates OpenRC service for backend
- Sets up auto-start on boot
- Configures DHCP networking
- Creates archipelago user account
### After Installation
```bash
# Reboot
reboot
# Login with:
# Username: archipelago
# Password: archipelago
# Change password immediately
passwd
# Check services
rc-status
# Check if backend is running
ps aux | grep archipelago
# Get your IP address
ip addr show
```
### Access Web UI
- Open browser to: `http://device-ip:8100`
- Backend API: `http://device-ip:8101`
---
## 📊 System Specs
### Minimum Requirements
- **CPU**: Intel/AMD x86_64
- **RAM**: 8 GB
- **Storage**: 128 GB
- **Network**: Ethernet (DHCP)
### Optimized For
- HP ProDesk 400 G4 DM
- Start9 Server Pure
- Dell OptiPlex 7040 Micro
- Generic x86_64 PCs
---
## 🔧 Build System
All components built successfully:
```bash
# Backend build
./image-recipe/build-backend.sh
✅ 5.7 MB Rust binary (musl static)
# Frontend build
./image-recipe/build-frontend.sh
✅ 14 MB Vue.js production bundle
# ISO integration
./image-recipe/integrate-archipelago.sh
✅ Combined into bootable ISO
# Hardware-specific
./image-recipe/build-for-hardware.sh hp-prodesk iso
✅ 277 MB bootable ISO
```
---
## 🎮 What You Can Do
Once booted and installed:
### Container Management
- Pull and run Docker images
- Install Bitcoin Core, LND, Lightning
- Deploy containerized apps
- Manage app lifecycle (start/stop/logs)
### Web Interface
- Dashboard with system stats
- Browse app marketplace
- Install apps with one click
- Configure settings
- View logs and status
### Command Line
```bash
# Pull Bitcoin Core
podman pull lncm/bitcoind:v27.0
# Run Bitcoin Core
podman run -d --name bitcoin \
-v bitcoin-data:/data \
lncm/bitcoind:v27.0
# Check status
podman ps
```
---
## 🐛 Troubleshooting
### If UI doesn't load
```bash
# Check nginx
rc-service nginx status
rc-service nginx start
# Check backend
rc-service archipelago status
rc-service archipelago start
# View logs
tail -f /var/log/archipelago.log
```
### If network doesn't work
```bash
# Check interfaces
ip addr show
# Restart networking
rc-service networking restart
# Test connectivity
ping -c 3 8.8.8.8
```
### If Balena Etcher has issues
```bash
# Alternative: use dd command
diskutil list
diskutil unmountDisk /dev/diskN
sudo dd if=archipelago-3.19-hp-prodesk-x86_64.iso of=/dev/rdiskN bs=1m
```
---
## 📚 Next Steps
### After Basic Setup
1. Change default password
2. Configure firewall
3. Set up SSH keys
4. Install Bitcoin Core
5. Install LND or Core Lightning
6. Configure backup system
### Add Apps
- Bitcoin Core (full node)
- LND (Lightning Network)
- BTCPay Server (merchant)
- Mempool (explorer)
- Nostr relay
- Web5 DWN
- And more...
---
## 🎉 Success!
You now have a **complete, working Archipelago Bitcoin Node OS** ready to:
- Flash to USB ✅
- Boot on HP ProDesk ✅
- Auto-configure networking ✅
- Run backend automatically ✅
- Access web UI ✅
- Manage containers ✅
**This is the real deal - not just a base system!**
---
**Built**: January 31, 2026
**Version**: 0.1.0
**Alpine**: 3.19 LTS
**Architecture**: x86_64

View File

@ -1,123 +0,0 @@
# ✅ DOCKER INTEGRATION COMPLETE
## What Changed
The development environment now uses **real Docker containers** instead of dummy data.
### Before
```
[Apps] Dummy apps available: 13 apps
[Apps] Returning dummy apps
```
**Result**: Fake data, no real apps
### After
```
[Docker] Found 1 containers (1 running)
[Docker] Apps detected:
- Bitcoin Core (running) → http://localhost:18443
[Apps] Real packages from store: 1 apps
```
**Result**: Real Docker containers shown in UI
## How to Use
### 1. Start Mock Backend
```bash
cd neode-ui
npm run backend:mock
```
**Output:**
```
[Docker] Querying running containers...
[Docker API: ✅ Connected
```
### 2. Start Docker Containers
```bash
# Start Bitcoin Core
docker compose up -d bitcoin
# Or start multiple
docker compose up -d bitcoin grafana homeassistant
```
### 3. Start UI
```bash
cd neode-ui
npm run dev
```
### 4. View in Browser
Open http://localhost:8100 → "My Apps"
**You'll see:**
- ✅ Real containers from docker-compose
- ✅ Correct status (running/stopped)
- ✅ Launch buttons that work
- ✅ Live updates every 5 seconds
## What Works Now
### Real Container Detection
- Backend queries Docker API every 5 seconds
- Detects all `archy-*` containers
- Shows real state (running/stopped)
- Extracts ports automatically
- Broadcasts updates via WebSocket
### App Display
- Bitcoin Core appears when `archy-bitcoin` runs
- Grafana appears when `archy-grafana` runs
- All 13 apps supported (see docker-compose.yml)
- Alphabetically sorted
- Status badges (green=running, gray=stopped)
### Launch Functionality
- Launch button enabled when app is running
- Opens correct port (http://localhost:18443 for Bitcoin)
- All ports mapped correctly
## Console is Clean
**No more:**
- ❌ "Dummy apps available"
- ❌ "Returning dummy apps"
- ❌ External API errors (Start9, GitHub)
**Now shows:**
- ✅ "Real packages from store"
- ✅ Actual container count
- ✅ Clean logs
## Files Modified
1. **neode-ui/package.json** - Added `dockerode`
2. **neode-ui/mock-backend.js** - Docker API integration
3. **neode-ui/src/views/Apps.vue** - Removed dummy logic
## Testing Completed
✅ Backend connects to Docker API
✅ Detects running Bitcoin container
✅ Shows correct app data in UI
✅ Live updates work (5-second poll)
✅ Launch button opens correct URL
✅ Console output is clean
## Next: Start All Apps
To see the full app list:
```bash
cd /Users/dorian/Projects/archy
docker compose up -d
```
This starts all 13+ apps defined in docker-compose.yml. They'll automatically appear in "My Apps" within 5 seconds.
---
**Status**: ✅ COMPLETE - Real Docker integration working
**No more dummy data** - Only real containers shown

View File

@ -1,326 +0,0 @@
# Archipelago Setup Guide
This guide will walk you through setting up your development environment for Archipelago.
## Prerequisites
- macOS (Darwin)
- Terminal access
- Administrator privileges (for some installations)
- Internet connection
## Quick Installation
Run the automated installation script:
```bash
./INSTALL.sh
```
This script will install and configure:
- ✓ Homebrew (macOS package manager)
- ✓ Rust (latest stable)
- ✓ Node.js 18+
- ✓ Podman (container runtime)
- ✓ PostgreSQL 15
- ✓ All project dependencies
## Manual Installation
If you prefer to install components individually:
### 1. Install Homebrew
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
For Apple Silicon Macs, add to your shell profile:
```bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```
### 2. Install Rust
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
```
Verify installation:
```bash
rustc --version
cargo --version
```
### 3. Install Node.js
```bash
brew install node
```
Verify installation:
```bash
node --version # Should be v18 or higher
npm --version
```
### 4. Install Podman
```bash
brew install podman
```
Initialize Podman machine:
```bash
podman machine init
podman machine start
```
Verify installation:
```bash
podman --version
podman info
```
### 5. Install PostgreSQL
```bash
brew install postgresql@15
brew services start postgresql@15
```
Create development database:
```bash
createdb archipelago_dev
```
### 6. Install Project Dependencies
#### Frontend Dependencies
```bash
cd neode-ui
npm install
```
#### Custom App Dependencies
```bash
cd apps/did-wallet && npm install && cd ../..
cd apps/endurain && npm install && cd ../..
cd apps/morphos-server && npm install && cd ../..
cd apps/router && npm install && cd ../..
cd apps/web5-dwn && npm install && cd ../..
```
#### Build Rust Backend
```bash
cd core
cargo build
```
## Environment Configuration
### Backend Configuration
Create `core/.env`:
```bash
DATADIR=/tmp/archipelago-dev
RPC_BIND=127.0.0.1:5959
LOG_LEVEL=debug
DATABASE_URL=postgresql://localhost/archipelago_dev
```
### Frontend Configuration
Create `neode-ui/.env`:
```bash
VITE_BACKEND_URL=http://localhost:5959
VITE_API_BASE=/rpc/v1
```
## Running the Project
### Option 1: Quick Start Scripts
Use the convenience scripts:
```bash
# Full stack with interactive prompts
./scripts/dev-start.sh
# Or use the quick dev script (mock backend)
./scripts/dev.sh
```
### Option 2: Manual Start
#### Terminal 1: Backend
```bash
cd core
cargo run --bin archipelago
```
Backend will be available at: http://localhost:5959
#### Terminal 2: Frontend
```bash
cd neode-ui
npm run dev
```
Frontend will be available at: http://localhost:8100
### Option 3: Mock Backend (UI Development Only)
For frontend-only development:
```bash
cd neode-ui
npm run dev:mock
```
This starts a mock backend server and Vite dev server together.
## Verifying Installation
Run these commands to verify everything is installed correctly:
```bash
# Check Rust
rustc --version
cargo --version
# Check Node.js
node --version
npm --version
# Check Podman
podman --version
podman machine list
# Check PostgreSQL
psql --version
brew services list | grep postgresql
# Check project dependencies
cd neode-ui && npm list --depth=0
cd ../core && cargo tree --depth=0
```
## Building Apps
To build the containerized apps:
```bash
cd apps
./build.sh # Build all apps
./build.sh router # Build specific app
```
## Common Issues
### Podman Machine Not Running
```bash
podman machine start
```
### PostgreSQL Not Running
```bash
brew services start postgresql@15
```
### Port Already in Use
If ports 5959 or 8100 are in use, you can change them:
Backend (in `core/.env`):
```bash
RPC_BIND=127.0.0.1:5958
```
Frontend (in `neode-ui/vite.config.ts`):
```typescript
server: { port: 8101 }
```
### Rust Compilation Issues
Make sure you have the latest stable Rust:
```bash
rustup update
```
### Node Module Issues
Clear node modules and reinstall:
```bash
rm -rf node_modules package-lock.json
npm install
```
## Development Workflow
1. **Make code changes** in `core/` or `neode-ui/`
2. **Backend**: Cargo will auto-rebuild on `cargo run`
3. **Frontend**: Vite provides hot module replacement (HMR)
4. **Test changes** in browser at http://localhost:8100
For backend auto-reload, install cargo-watch:
```bash
cargo install cargo-watch
cd core
cargo watch -x 'run --bin archipelago'
```
## Project Structure
```
archy/
├── core/ # Rust backend
│ ├── archipelago/ # Main binary
│ ├── container/ # Container management
│ ├── parmanode/ # Parmanode integration
│ ├── security/ # Security modules
│ └── performance/ # Performance optimization
├── neode-ui/ # Vue.js frontend
├── apps/ # Containerized applications
├── docs/ # Documentation
└── scripts/ # Development scripts
```
## Next Steps
- Read [docs/development-setup.md](docs/development-setup.md) for detailed development info
- Check [docs/architecture.md](docs/architecture.md) for system architecture
- See [apps/QUICKSTART.md](apps/QUICKSTART.md) for building and running apps
- Review [docs/app-manifest-spec.md](docs/app-manifest-spec.md) for creating apps
## Resources
- [Rust Documentation](https://doc.rust-lang.org/)
- [Vue.js 3 Documentation](https://vuejs.org/)
- [Podman Documentation](https://docs.podman.io/)
- [PostgreSQL Documentation](https://www.postgresql.org/docs/)
## Getting Help
If you encounter issues:
1. Check the [docs/](docs/) directory for detailed documentation
2. Review error messages carefully
3. Check that all services are running (PostgreSQL, Podman)
4. Verify all dependencies are installed correctly
## License
MIT

View File

@ -1,415 +0,0 @@
# Start9 Server Pure - Build Summary
## ✅ What We Built
A complete **multi-hardware build system** for Archipelago that creates optimized OS images for different hardware targets, including your **Start9 Server Pure**.
## 🎯 Key Features
### 1. Multi-Hardware Support
- ✅ **Start9 Server Pure** - Intel i7-10710U, 32-64GB RAM, 2-4TB NVMe
- ✅ **HP ProDesk 400 G4 DM** - Existing support maintained
- ✅ **Dell OptiPlex** - Existing support maintained
- ✅ **Generic x86_64** - Fallback for other hardware
### 2. Hardware-Specific Optimizations
Each build includes:
- CPU-specific microcode and tuning
- Graphics drivers (Intel UHD for Start9)
- Storage optimization (NVMe for Start9, SATA for others)
- Firmware compatibility
- Platform-specific features
### 3. Automated Build System
Simple commands to build for any hardware:
```bash
# Build for Start9 Server Pure
./build-for-hardware.sh start9-pure iso
# Build for HP ProDesk
./build-for-hardware.sh hp-prodesk iso
# Build for Dell OptiPlex
./build-for-hardware.sh dell-optiplex iso
# Build for all hardware
./build-all-hardware.sh iso
```
## 📦 Files Created
### Build Scripts
- **`image-recipe/build-for-hardware.sh`** - Main hardware-aware build script
- **`image-recipe/build-all-hardware.sh`** - Build all targets at once
- Both scripts work on macOS (via Docker) and Linux
### Documentation
- **`image-recipe/QUICK-REFERENCE.md`** - Quick start guide
- **`image-recipe/README-HARDWARE-BUILDS.md`** - Comprehensive hardware build guide
- **`MULTI_HARDWARE_BUILD_SYSTEM.md`** - System architecture and design
- **Updated `README.md`** - Main project documentation
### Hardware Profiles
The system automatically creates hardware-specific overlays:
- `alpine-profile/overlay-start9-pure/` - Start9 optimizations
- `alpine-profile/overlay-hp-prodesk/` - HP optimizations
- `alpine-profile/overlay-dell-optiplex/` - Dell optimizations
Each includes:
- Hardware detection scripts
- Configuration files
- Optimization scripts
- First-boot setup
## 🚀 How to Build for Start9 Server Pure
### Quick Start (macOS)
```bash
# 1. Navigate to build directory
cd image-recipe
# 2. Build for Start9 Server Pure
./build-for-hardware.sh start9-pure iso
# 3. Wait 45-60 minutes (first build)
# 4. Find your ISO
ls results/archipelago-0.1.0-start9-pure-x86_64.iso
```
### What Gets Built
The build creates:
1. **ISO File**: `archipelago-0.1.0-start9-pure-x86_64.iso`
2. **Build Manifest**: `BUILD_MANIFEST_start9-pure.txt`
3. **Hardware Config**: Embedded in ISO at `/etc/archipelago/hardware.toml`
### Start9 Pure Optimizations
Your Start9 image includes:
#### CPU Optimizations
```
- Intel i7-10710U microcode
- Intel RAPL (power management)
- Intel Powerclamp
- 6 cores / 12 threads tuning
```
#### Storage Optimizations
```
- NVMe detection
- I/O scheduler: none/noop (best for NVMe)
- Write caching optimization
- TRIM support
```
#### Graphics
```
- Intel UHD Graphics drivers (i915)
- Hardware acceleration
- Display output support
```
#### Firmware
```
- Coreboot compatibility
- Intel ME disabled (respected)
- UEFI boot support
```
## 📋 Installation on Start9 Server Pure
### Step 1: Flash ISO to USB
**macOS:**
```bash
# Find USB device
diskutil list
# Unmount
diskutil unmountDisk /dev/diskX
# Flash
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/rdiskX \
bs=1m \
status=progress
```
**Linux:**
```bash
# Find USB device
lsblk
# Flash
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/sdX \
bs=1M \
status=progress
```
**GUI Tool (Recommended):**
- Download [balenaEtcher](https://www.balena.io/etcher/)
- Select ISO file
- Select USB drive
- Flash!
### Step 2: Boot Start9 Server Pure
1. **Insert USB drive** into Start9 Server Pure
2. **Power on** the device
3. **Press F12** during boot to enter boot menu
4. **Select USB drive** from boot menu
5. **Follow installation prompts**
### Step 3: Complete Installation
The installer will:
1. Detect hardware (Start9 Server Pure)
2. Optimize settings for your hardware
3. Install Archipelago OS
4. Configure networking
5. Set up Podman container runtime
6. Create initial user
### Step 4: First Boot
After installation:
1. **Remove USB drive**
2. **Reboot system**
3. **Hardware detection runs** automatically
4. **Services start** (backend, containers)
5. **Access UI** at `http://<device-ip>:8100`
## 🔍 Verification
After installation, verify hardware detection:
```bash
# SSH into the device
ssh archipelago@device-ip
# View hardware profile
cat /etc/archipelago/hardware.toml
# View detection results
cat /var/log/archipelago-hardware.log
# Check optimizations
dmesg | grep -i archipelago
# View system info
cat /etc/archipelago/system-info.txt
```
Expected output in `hardware.toml`:
```toml
[hardware]
target = "start9-pure"
name = "Start9 Server Pure"
cpu_vendor = "intel"
cpu_model = "i7-10710U"
min_ram = "32GB"
min_storage = "2TB"
architecture = "x86_64"
[optimizations]
enabled = "intel-graphics intel-networking nvme-ssd"
```
## 🎨 What's Different from Generic Build
### Start9 Pure Build
- ✅ Intel i7-10710U specific microcode
- ✅ NVMe SSD optimization
- ✅ Intel UHD Graphics acceleration
- ✅ High-performance tuning (64GB RAM)
- ✅ Professional-grade configurations
- ✅ Coreboot firmware support
### Generic Build
- ⚠️ Universal microcode
- ⚠️ Generic storage optimization
- ⚠️ Basic graphics support
- ⚠️ Conservative tuning
- ⚠️ Broad compatibility focus
**Result**: Start9 Pure build is ~30% faster for Bitcoin Core sync and container operations!
## 📂 Output Structure
After building, you'll have:
```
results/
├── archipelago-0.1.0-start9-pure-x86_64.iso # Bootable ISO
├── BUILD_MANIFEST_start9-pure.txt # Build details
├── archipelago-0.1.0-hp-prodesk-x86_64.iso # HP build (if built)
├── archipelago-0.1.0-dell-optiplex-x86_64.iso # Dell build (if built)
└── archipelago-0.1.0-generic-x86_64.iso # Generic build (if built)
```
## 🔧 Build Customization
### Custom Version
```bash
export ARCHIPELAGO_VERSION="1.0.0"
./build-for-hardware.sh start9-pure iso
```
### Custom Alpine Version
```bash
export ALPINE_VERSION="3.20"
./build-for-hardware.sh start9-pure iso
```
### Disk Image (instead of ISO)
```bash
./build-for-hardware.sh start9-pure disk
```
## 🐛 Troubleshooting
### Build Fails
```bash
# Clean everything
rm -rf results/ build/ apks/ aports/
# Retry
./build-for-hardware.sh start9-pure iso
```
### Docker Not Running (macOS)
```bash
# Start Docker Desktop
open -a Docker
# Wait for it to start, then retry
```
### Out of Disk Space
```bash
# Clean Docker
docker system prune -a
# Clean build artifacts
rm -rf build/ results/ apks/
```
## 📖 Documentation
Detailed documentation:
- **Quick Reference**: `image-recipe/QUICK-REFERENCE.md`
- **Hardware Builds**: `image-recipe/README-HARDWARE-BUILDS.md`
- **System Design**: `MULTI_HARDWARE_BUILD_SYSTEM.md`
- **Architecture**: `docs/architecture.md`
## 🎯 Next Steps
1. **Build the Start9 Pure image**:
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
2. **Flash to USB drive** using balenaEtcher or `dd`
3. **Install on Start9 Server Pure**:
- Boot from USB (F12)
- Follow prompts
- Reboot
4. **Access Archipelago UI**: `http://device-ip:8100`
5. **Install apps**:
- Bitcoin Core (optimized for NVMe)
- Lightning Network (LND or CLN)
- BTCPay Server
- Nostr relays
- And more!
## ✨ Benefits for Start9 Server Pure
### Performance
- 🚀 NVMe-optimized Bitcoin Core sync
- 🚀 Fast container startup (i7-10710U)
- 🚀 Efficient memory usage (32-64GB)
- 🚀 Hardware-accelerated graphics
### Security
- 🔒 Coreboot firmware support
- 🔒 Intel ME disabled respect
- 🔒 Hardened Alpine Linux
- 🔒 Rootless Podman containers
### Reliability
- ✅ Hardware detection on boot
- ✅ Automatic optimization
- ✅ Professional-grade stability
- ✅ Enterprise features
### Sovereignty
- 💎 Your hardware, your OS
- 💎 No proprietary software
- 💎 Full control
- 💎 Open source
## 🤝 Maintaining Both Systems
**Good news**: You can keep building for ALL your hardware!
```bash
# Build for Start9 Server Pure
./build-for-hardware.sh start9-pure iso
# Build for HP ProDesk
./build-for-hardware.sh hp-prodesk iso
# Build for Dell OptiPlex
./build-for-hardware.sh dell-optiplex iso
# Or build all at once
./build-all-hardware.sh iso
```
Each build is independent and optimized for its target hardware. The original ProDesk and OptiPlex builds are **fully preserved and maintained**.
## 📊 Build Stats
| Hardware | Image Size | Build Time | Boot Time |
|----------|-----------|------------|-----------|
| Start9 Pure | ~350MB | 45-60 min | ~30 sec |
| HP ProDesk | ~340MB | 45-60 min | ~35 sec |
| Dell OptiPlex | ~340MB | 45-60 min | ~35 sec |
| Generic | ~360MB | 45-60 min | ~40 sec |
## 🎉 Summary
You now have a complete build system that:
- ✅ Supports Start9 Server Pure with optimizations
- ✅ Maintains HP ProDesk support
- ✅ Maintains Dell OptiPlex support
- ✅ Includes generic x86_64 fallback
- ✅ Hardware detection and auto-optimization
- ✅ Easy-to-use build commands
- ✅ Comprehensive documentation
**Your Start9 Server Pure is ready to run Archipelago! 🏝️**
---
**Questions?**
- Check `image-recipe/QUICK-REFERENCE.md`
- Review `MULTI_HARDWARE_BUILD_SYSTEM.md`
- Read hardware-specific docs
**Ready to build?**
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
🚀 **Let's build your sovereign Bitcoin node OS!**

View File

@ -1,184 +0,0 @@
# StartOS References Removed - Complete
## Summary
All StartOS references have been removed from the Archipelago project. The project now has a clean, independent identity focused on standard Docker containers and open-source principles.
## Files Updated
### 1. Architecture Documentation
**File**: `.cursor/rules/Architecture.mdc`
- ✅ Removed "vs Umbrel/StartOS" comparison → "vs Umbrel"
- ✅ Changed `core/startos/src/container/``core/archipelago/src/container/`
- ✅ Updated RPC endpoint descriptions
### 2. Coding Rules
**File**: `.cursor/rules/coding-rules.mdc`
- ✅ Removed entire "StartOS Independence" section
- ✅ Replaced with "Docker & Podman Architecture" section
- ✅ Removed "Build Archipelago-native, not StartOS" warnings
- ✅ Updated "NEVER DO" and "ALWAYS DO" lists
- ✅ Changed final message from "not StartOS" to positive statement
- ✅ Removed temporary phase references
**New focus:**
- Docker for development
- Podman for production
- Standard Docker Hub images
- No proprietary formats
### 3. Main README
**File**: `README.md`
- ✅ Added clear overview focusing on Docker/Podman
- ✅ Removed StartOS mentions
- ✅ Updated project structure
- ✅ Linked to Docker quick reference
### 4. Application Code
**Files**:
- `neode-ui/src/views/Apps.vue`
- `neode-ui/src/views/Marketplace.vue`
- `neode-ui/src/utils/dummyApps.ts`
- ✅ Removed Start9Labs repository references
- ✅ Changed to official upstream repos (bitcoin/bitcoin, etc.)
- ✅ Removed .s9pk package format references
- ✅ Added dockerImage field to all apps
- ✅ Disabled external API calls in development
## New Architecture Identity
### Development
```
Docker Compose
Standard Docker Images (Docker Hub)
localhost:PORT
```
### Production
```
Alpine Linux
Podman (rootless)
Same Docker Images
Hardened Security
```
## What Archipelago Is Now
**Archipelago** is an independent, open-source Bitcoin Node OS that:
1. **Uses Standard Containers**
- Docker Hub images in development
- Same images with Podman in production
- No proprietary package formats
2. **Minimal & Secure**
- Alpine Linux base (130MB)
- Rootless containers
- AppArmor/SELinux policies
- Read-only filesystems
3. **Multi-Architecture**
- ARM64 (Raspberry Pi)
- x86_64 (PC/Server)
- Same codebase, different targets
4. **Developer Friendly**
- Standard docker-compose workflow
- Hot reload for UI
- Mock backend for rapid development
- Clear documentation
5. **Production Ready**
- Security hardened from day one
- Comprehensive monitoring
- Health checks
- Automated backups
## Removed References
### Patterns Removed
- ❌ "StartOS alternative"
- ❌ "Built from StartOS foundation"
- ❌ `.s9pk` package format
- ❌ Start9Labs repositories
- ❌ Start9 registry API calls
- ❌ "wrapper-repo" pointing to Start9
- ❌ StartOS-specific patterns
- ❌ Temporary StartOS backend usage
### Replaced With
- ✅ "Bitcoin Node OS"
- ✅ "Standard Docker containers"
- ✅ Docker Hub images
- ✅ Official upstream repositories
- ✅ Docker-first architecture
- ✅ Clean Archipelago implementation
- ✅ Independent development path
## Documentation Updated
All project documentation now reflects the new identity:
1. **Architecture.mdc** - System design and components
2. **coding-rules.mdc** - Development standards
3. **README.md** - Project overview
4. **GETTING_STARTED.md** - User onboarding
5. **DOCKER_DEV_SETUP.md** - Technical details
6. **DOCKER_MIGRATION_COMPLETE.md** - Migration summary
## Code Quality
### Console Output
**Before**: 20+ StartOS/Start9 API errors
**After**: Clean logs, no external dependencies
### Architecture
**Before**: Mixed StartOS patterns and Archipelago code
**After**: Pure Archipelago with standard containers
### Dependencies
**Before**: StartOS registries and packages
**After**: Docker Hub and official images
## Next Steps
With StartOS references removed, the project is now:
1. ✅ **Independent** - No external dependencies
2. ✅ **Standard** - Uses Docker/Podman conventions
3. ✅ **Open** - All standard open-source tools
4. ✅ **Clean** - No legacy baggage
5. ✅ **Ready** - For community contribution
## Future Development
All new development follows these principles:
- **Standard first**: Use Docker Hub images
- **Security by default**: Hardened containers
- **Documentation**: Clear, comprehensive
- **Testing**: Comprehensive coverage
- **Community**: Open to contributions
## Identity Statement
**Archipelago** is a modern, secure, minimal Bitcoin Node OS built on:
- Alpine Linux
- Docker (development) / Podman (production)
- Standard container images
- Open-source principles
- Community collaboration
We are not based on any other project. We are Archipelago.
---
**Status**: ✅ Complete - All StartOS references removed
**Date**: January 27, 2026
**Impact**: Project now has clean, independent identity

View File

@ -1,217 +0,0 @@
# ✅ START/STOP/LAUNCH COMPLETE
## Summary
Bitcoin Core and all docker-compose apps can now be controlled from the "My Apps" UI. Start, stop, and launch buttons are fully functional with the Rust backend.
## What Was Added
### Backend RPC Methods
Added three new RPC endpoints to `/Users/dorian/Projects/archy/core/archipelago/src/api/rpc.rs`:
1. **`package.start`** - Starts a docker-compose container
2. **`package.stop`** - Stops a docker-compose container
3. **`package.restart`** - Restarts a docker-compose container
These methods:
- Take a package `id` (e.g., `"bitcoin"`)
- Convert it to container name (e.g., `"archy-bitcoin"`)
- Execute Docker CLI commands directly
- Return success/error to frontend
## Testing
### Stop Bitcoin
```bash
curl -X POST http://localhost:5959/rpc/v1 \
-H "Content-Type: application/json" \
-d '{"method": "package.stop", "params": {"id": "bitcoin"}}'
```
**Result:**
```json
{"result":null,"error":null}
```
**Docker status:**
```
archy-bitcoin Exited (0) 4 seconds ago
```
### Start Bitcoin
```bash
curl -X POST http://localhost:5959/rpc/v1 \
-H "Content-Type: application/json" \
-d '{"method": "package.start", "params": {"id": "bitcoin"}}'
```
**Result:**
```json
{"result":null,"error":null}
```
**Docker status:**
```
archy-bitcoin Up 2 seconds
```
## How It Works
### 1. Frontend Button Click
User clicks "Stop" button in "My Apps"
### 2. RPC Call
Frontend sends:
```json
{
"method": "package.stop",
"params": {"id": "bitcoin"}
}
```
### 3. Backend Processing
```rust
async fn handle_package_stop(params) {
let package_id = params.get("id"); // "bitcoin"
let container_name = format!("archy-{}", package_id); // "archy-bitcoin"
// Execute: docker stop archy-bitcoin
tokio::process::Command::new("docker")
.arg("stop")
.arg(&container_name)
.output()
.await?;
}
```
### 4. Docker Execution
```bash
docker stop archy-bitcoin
```
### 5. Live Update
Backend's 5-second poll detects the stopped container and broadcasts the state change via WebSocket to the UI.
## UI Behavior
### My Apps Page
**Running State:**
- Green badge showing "running"
- "Stop" button enabled
- "Launch" button enabled
**Stopped State:**
- Gray badge showing "stopped"
- "Start" button enabled
- "Launch" button disabled
### Launch Functionality
When "Launch" is clicked:
1. Opens `lan-address` from package data
2. For Bitcoin Core: `http://localhost:18443`
3. Opens in new browser tab
## Supported Apps
All docker-compose apps support start/stop/launch:
| App | Container Name | Port | Status |
|-----|----------------|------|--------|
| Bitcoin Core | `archy-bitcoin` | 18443 | ✅ Tested |
| BTCPay Server | `archy-btcpay` | 23000 | ✅ Ready |
| Home Assistant | `archy-homeassistant` | 8123 | ✅ Ready |
| Grafana | `archy-grafana` | 3000 | ✅ Ready |
| All others | `archy-*` | Various | ✅ Ready |
## Architecture Flow
```
┌─────────────────────────────────────────┐
│ Vue.js UI │
│ - Stop/Start buttons │
│ - Launch button │
└─────────────┬───────────────────────────┘
│ RPC: package.start/stop
┌─────────────▼───────────────────────────┐
│ Rust Backend │
│ - Receives RPC call │
│ - Converts package ID to container name │
│ - Executes Docker command │
└─────────────┬───────────────────────────┘
│ docker start/stop
┌─────────────▼───────────────────────────┐
│ Docker Engine │
│ - Stops/starts container │
│ - Container state changes │
└─────────────┬───────────────────────────┘
│ Poll every 5s
┌─────────────▼───────────────────────────┐
│ Docker Scanner │
│ - Detects state change │
│ - Updates package-data │
│ - Broadcasts via WebSocket │
└─────────────┬───────────────────────────┘
│ WebSocket update
┌─────────────▼───────────────────────────┐
│ Vue.js UI (auto-updates) │
│ - Button states update │
│ - Badge color changes │
└──────────────────────────────────────────┘
```
## Development Testing
### Start Full Stack
```bash
./scripts/dev-start.sh
# Choose option 2 (Full stack)
```
### Open UI
```
http://localhost:8101 (or 8100 if available)
```
### Navigate to My Apps
1. See Bitcoin Core running
2. Click "Stop" → Status changes to "stopped" within 5 seconds
3. Click "Start" → Status changes to "running" within 5 seconds
4. Click "Launch" → Opens http://localhost:18443
## Files Modified
1. **`core/archipelago/src/api/rpc.rs`**
- Added `package.start`, `package.stop`, `package.restart` endpoints
- Direct Docker CLI integration
- Parameter parsing and error handling
## Current Status
**Start/Stop**: Fully functional
**Launch**: Working with correct URLs
**Live Updates**: 5-second polling active
**Error Handling**: Proper error messages
**All Apps**: Every docker-compose app supported
## Next: Start All Apps
To see more apps in "My Apps":
```bash
docker compose up -d
```
All will be controllable from the UI!
---
**Backend must be running for controls to work:**
```bash
cd /Users/dorian/Projects/archy/core
ARCHIPELAGO_DATA_DIR=/tmp/archipelago-dev \
ARCHIPELAGO_DEV_MODE=true \
ARCHIPELAGO_CONTAINER_RUNTIME=docker \
./target/release/archipelago
```

View File

@ -1,91 +0,0 @@
#!/bin/bash
# Build Archipelago Rust Backend
echo "============================================"
echo "Building Archipelago Backend"
echo "============================================"
echo ""
# Check if Rust is installed
if ! command -v rustc &> /dev/null; then
echo "❌ Rust is not installed or not in PATH"
echo ""
echo "Installing Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
# Source the cargo environment
source "$HOME/.cargo/env"
echo "✅ Rust installed"
else
echo "✅ Rust is already installed ($(rustc --version))"
fi
echo ""
# Check if rustup default is set
if ! rustc --version &> /dev/null 2>&1; then
echo "⚙️ Configuring Rust default toolchain..."
source "$HOME/.cargo/env"
rustup default stable
echo "✅ Rust configured"
fi
echo ""
echo "Rust version: $(rustc --version)"
echo "Cargo version: $(cargo --version)"
echo ""
# Navigate to core directory
cd "$(dirname "$0")/core" || exit 1
echo "============================================"
echo "Building Backend"
echo "============================================"
echo ""
echo "This will take 5-10 minutes on first build..."
echo ""
# Build the backend
cargo build --bin archipelago
if [ $? -eq 0 ]; then
echo ""
echo "============================================"
echo "✅ Backend Built Successfully!"
echo "============================================"
echo ""
echo "You can now run the full stack:"
echo ""
echo "1. Start backend (Terminal 1):"
echo " cd core"
echo " cargo run --bin archipelago"
echo ""
echo "2. Start frontend (Terminal 2):"
echo " cd neode-ui"
echo " npm run dev"
echo ""
echo "3. Or use the dev script:"
echo " ./scripts/dev-start.sh"
echo " Choose option 2 (Full stack)"
echo ""
else
echo ""
echo "============================================"
echo "❌ Backend Build Failed"
echo "============================================"
echo ""
echo "Check the error messages above."
echo ""
echo "Common fixes:"
echo "1. Make sure Rust is in PATH:"
echo " source ~/.cargo/env"
echo ""
echo "2. Update Rust:"
echo " rustup update"
echo ""
echo "3. Clean and rebuild:"
echo " cargo clean"
echo " cargo build --bin archipelago"
echo ""
fi

View File

@ -1,52 +0,0 @@
#!/bin/bash
# Force Clean Rebuild of Backend
echo "============================================"
echo "Clean Rebuild of Archipelago Backend"
echo "============================================"
echo ""
# Ensure Rust is in PATH
export PATH="$HOME/.cargo/bin:$PATH"
# Navigate to core directory
cd "$(dirname "$0")/core" || exit 1
echo "Cleaning previous build..."
cargo clean
echo ""
echo "Building backend from scratch..."
echo ""
# Build the backend
cargo build --bin archipelago
if [ $? -eq 0 ]; then
echo ""
echo "============================================"
echo "✅ Backend Build SUCCESS!"
echo "============================================"
echo ""
echo "The backend is now ready to run!"
echo ""
echo "To start the full stack:"
echo ""
echo " ./scripts/dev-start.sh"
echo " Choose option 2 (Full stack)"
echo ""
echo "Or manually:"
echo " Terminal 1: cd core && cargo run --bin archipelago"
echo " Terminal 2: cd neode-ui && npm run dev"
echo ""
echo "Then open: http://localhost:8100"
echo ""
else
echo ""
echo "============================================"
echo "❌ Build Failed"
echo "============================================"
echo ""
echo "Check the error messages above."
echo ""
fi

View File

@ -1,52 +0,0 @@
#!/bin/bash
# Complete Rust Setup and Build Backend
echo "============================================"
echo "Completing Rust Setup"
echo "============================================"
echo ""
# Add Rust to PATH for current shell
export PATH="$HOME/.cargo/bin:$PATH"
# Verify Rust is working
echo "Checking Rust installation..."
rustc --version
cargo --version
echo ""
echo "============================================"
echo "Building Rust Backend"
echo "============================================"
echo ""
cd core
# Build the backend
echo "Building backend (this may take a few minutes)..."
cargo build
echo ""
echo "============================================"
echo "Installation Complete!"
echo "============================================"
echo ""
echo "✓ All dependencies installed"
echo "✓ Backend built successfully"
echo ""
echo "Next steps:"
echo ""
echo "1. Start the backend (Terminal 1):"
echo " cd core"
echo " cargo run --bin archipelago"
echo ""
echo "2. Start the frontend (Terminal 2):"
echo " cd neode-ui"
echo " npm run dev"
echo ""
echo "3. Open your browser:"
echo " http://localhost:8100"
echo ""
echo "Or use the quick start script:"
echo " ./scripts/dev-start.sh"
echo ""

View File

@ -2,16 +2,16 @@
## Overview
Archipelago is a next-generation Bitcoin Node OS built on Alpine Linux with Podman containerization, combining the modularity of Parmanode with the security and efficiency of a minimal server OS.
Archipelago is a next-generation Bitcoin Node OS built on Debian Linux with Podman containerization, combining the modularity of Parmanode with the security and reliability of a proven server OS. Similar to StartOS, we use Debian Live for reliable USB boot and installation.
## System Architecture
```
┌─────────────────────────────────────────────────────────┐
Alpine Linux Base (130MB)
│ - Minimal kernel
│ - Hardened security
│ - Read-only root filesystem
Debian Linux Base (Bookworm)
│ - Stable, well-supported kernel
│ - Systemd service management
│ - Extensive hardware support
└─────────────────────────────────────────────────────────┘
┌───────────────┼───────────────┐
@ -25,10 +25,10 @@ Archipelago is a next-generation Bitcoin Node OS built on Alpine Linux with Podm
┌───────────▼───────────┐
│ Container Orchestration│
│ Layer (new)
│ Layer
│ - Manifest parser │
│ - Podman client │
│ - Dependency resolver
│ - Dependency resolver │
│ - Health monitor │
└───────────┬───────────┘
@ -45,10 +45,11 @@ Archipelago is a next-generation Bitcoin Node OS built on Alpine Linux with Podm
## Key Components
### 1. Alpine Linux Base
### 1. Debian Linux Base
- **Size**: ~130MB (vs 1.5GB+ for Umbrel/StartOS)
- **Security**: Hardened kernel, minimal attack surface
- **Distribution**: Debian 12 (Bookworm) - stable, LTS support
- **Init System**: Systemd for service management
- **Security**: AppArmor, standard Debian hardening
- **Multi-arch**: ARM64 (Raspberry Pi) and x86_64 support
### 2. Container Orchestration Layer
@ -61,7 +62,7 @@ Located in `core/container/`:
### 3. Backend API Extensions
New RPC endpoints in `core/startos/src/container/`:
New RPC endpoints in `core/archipelago/src/container/`:
- `container-install`: Install app from manifest
- `container-start/stop/remove`: Container lifecycle
- `container-status/logs`: Status and debugging
@ -94,7 +95,7 @@ Located in `core/parmanode/`:
### 7. Security Modules
Located in `core/security/`:
- **container_policies.rs**: Generates AppArmor/SELinux profiles
- **container_policies.rs**: Generates AppArmor profiles
- **secrets_manager.rs**: Encrypted secrets storage
- **image_verifier.rs**: Cosign signature verification
@ -102,7 +103,7 @@ Located in `core/security/`:
Located in `core/performance/`:
- **resource_manager.rs**: CPU/memory/disk allocation
- **optimize-alpine.sh**: OS-level optimizations
- **optimize-debian.sh**: OS-level optimizations
## App Categories
@ -134,12 +135,12 @@ Located in `core/performance/`:
## Security Model
1. **OS Level**: Hardened Alpine, read-only root, minimal kernel
1. **OS Level**: Debian hardening, AppArmor, minimal installed packages
2. **Container Level**: Rootless Podman, capability dropping, network isolation
3. **Secrets**: Encrypted storage, runtime injection only
4. **Supply Chain**: Signed images (Cosign), SBOM generation
5. **Network**: Firewall, rate limiting, Tor integration
6. **Audit**: Immutable logs, configuration tracking
5. **Network**: Firewall (nftables/iptables), rate limiting, Tor integration
6. **Audit**: Journald logging, configuration tracking
## Networking

View File

@ -1,64 +1,54 @@
# 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.).
This guide explains how to build bootable Debian Linux OS images for Archipelago Bitcoin Node OS that can be flashed to x86_64 desktop computers (Dell OptiPlex, HP ProDesk 400 G4 DM, Start9 Server Pure, etc.).
## Overview
The build system creates bootable ISO or disk images containing:
- Alpine Linux base system
The build system creates bootable ISO images containing:
- Debian Linux 12 (Bookworm) base system
- Podman container runtime
- Archipelago backend (Rust)
- Archipelago frontend (Vue.js)
- Systemd services
- Network configuration
- Network configuration via NetworkManager
## Prerequisites
### macOS
- **Docker Desktop**: [Install Docker Desktop](https://www.docker.com/products/docker-desktop)
- **xorriso**: `brew install xorriso`
- **7zip**: `brew install p7zip`
- **Disk Space**: At least 10GB free
- **Memory**: 8GB+ recommended
### Linux (HP ProDesk 400 G4 DM)
### Linux
- **Alpine Linux** (preferred) or any Linux with Docker
- **Build Tools**: See installation below
- **Docker** (optional, for building backend)
- **xorriso**: `apt-get install xorriso`
- **7zip**: `apt-get install p7zip-full`
- **Disk Space**: At least 10GB free
## Quick Start
### On macOS
```bash
cd image-recipe
./build-macos.sh
./build-debian-iso.sh
```
This will:
1. Build Docker container with all tools
2. Compile backend and frontend
3. Create Alpine image with Archipelago
4. Output ISO to `results/` directory
1. Download Debian Live ISO (if not cached)
2. Extract and customize the ISO
3. Add Archipelago components
4. Create final bootable ISO
### On Linux
```bash
cd image-recipe
./build-linux.sh
```
For native Alpine Linux:
```bash
cd image-recipe
./build-alpine-native.sh
```
Output: `results/archipelago-debian-12-x86_64.iso`
## Build Process
### Step 1: Build Backend
### Step 1: Build Backend (Optional)
The backend is compiled from Rust source:
If you have local changes to the backend:
```bash
./scripts/build-backend.sh
@ -67,9 +57,9 @@ The backend is compiled from Rust source:
This creates:
- `build/backend/archipelago` - Compiled binary
### Step 2: Build Frontend
### Step 2: Build Frontend (Optional)
The frontend is built from Vue.js source:
If you have local changes to the frontend:
```bash
./scripts/build-frontend.sh
@ -78,137 +68,87 @@ The frontend is built from Vue.js source:
This creates:
- `build/frontend/` - Static files
### Step 3: Create APK Package
Backend is packaged as Alpine APK:
### Step 3: Build OS Image
```bash
./scripts/create-backend-apk.sh
./build-debian-iso.sh
```
This creates:
- `apks/archipelago-backend-*.apk`
## Flashing to USB
### Step 4: Build OS Image
The main build script orchestrates everything:
### Using dd (Recommended)
```bash
./build-alpine-iso.sh
```
# macOS
./write-usb-dd.sh /dev/diskN
Or build specific type:
# Or manually:
sudo dd if=results/archipelago-debian-12-x86_64.iso of=/dev/rdiskX bs=4m status=progress
```
```bash
BUILD_TYPE=iso ./build-alpine-iso.sh
BUILD_TYPE=disk ./build-alpine-iso.sh
# Linux
sudo dd if=results/archipelago-debian-12-x86_64.iso of=/dev/sdX bs=4M status=progress
```
## Build Types
### Using Balena Etcher
### ISO Image
Creates a bootable ISO file suitable for:
- Burning to DVD
- Writing to USB drive
- Booting in virtual machines
```bash
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 `dd` command
- Virtual machine disk
```bash
BUILD_TYPE=disk ./build-alpine-iso.sh
```
Output: `results/archipelago-0.1.0-x86_64.img`
## Flashing to Device
### Using ISO (USB Boot)
1. **Write ISO to USB**:
```bash
# 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
```
2. **Boot from USB** on target device
3. **Install to disk** (if installer included) or run live
### Using Disk Image (Direct Flash)
1. **Connect target disk** to build machine
2. **Flash image**:
```bash
# 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
```
3. **Boot from disk** on target device
1. Download [Balena Etcher](https://www.balena.io/etcher/)
2. Select the ISO file
3. Select target USB drive
4. Click Flash
⚠️ **Warning**: Double-check the device path! Flashing to wrong device will destroy data.
## Installation Methods
### 1. Live USB Boot
Boot from the USB to run Archipelago in live mode:
- Test the system without installing
- Changes don't persist after reboot
### 2. Full Disk Installation
From the live environment:
```bash
sudo /archipelago/install-to-disk.sh
```
This will:
1. Partition the target disk (GPT with EFI)
2. Install Debian via debootstrap
3. Install Archipelago components
4. Configure bootloader (GRUB)
## Default Credentials
### Live Mode
- Username: `user`
- Password: `live`
### After Installation
- Username: `archipelago`
- Password: `archipelago`
⚠️ **Change passwords immediately after installation!**
## Customization
### Environment Variables
```bash
# Version
ARCHIPELAGO_VERSION=0.1.0
# Alpine version
ALPINE_VERSION=3.19
# Debian version
DEBIAN_VERSION=bookworm
# Architecture
ARCH=x86_64
# Build type
BUILD_TYPE=iso # or "disk"
ARCH=amd64
# 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)
@ -246,17 +186,10 @@ cd neode-ui
npm install
```
**Problem**: Alpine aports clone fails
```bash
# 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
- Verify ISO integrity
- Check BIOS/UEFI settings
- Ensure correct architecture (x86_64)
- Try different boot mode (UEFI vs Legacy)
@ -266,42 +199,6 @@ git clone https://gitlab.alpinelinux.org/alpine/aports.git
- Verify network: `ip addr`
- Check Podman: `podman info`
## Advanced Usage
### Building on Remote Linux Machine
```bash
# 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:
```bash
# 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:
1. Edit `alpine-profile/mkimg.archipelago.sh`
2. Modify `kernel_flavors` or `kernel_addons`
3. Rebuild image
## Next Steps
After building and flashing:
@ -314,6 +211,6 @@ After building and flashing:
## Resources
- [Alpine Linux mkimage Documentation](https://wiki.alpinelinux.org/wiki/How_to_make_a_custom_ISO_image)
- [Debian Live Manual](https://live-team.pages.debian.net/live-manual/)
- [Archipelago Architecture](./architecture.md)
- [Development Setup](./development-setup.md)

View File

@ -1,76 +0,0 @@
#!/bin/bash
# Fix Rust Installation and Build Backend
echo "============================================"
echo "Fixing Rust Installation"
echo "============================================"
echo ""
# Add Cargo to PATH permanently
echo "Adding Rust to your shell configuration..."
if [ -f "$HOME/.zshrc" ]; then
if ! grep -q '.cargo/env' "$HOME/.zshrc"; then
echo '' >> "$HOME/.zshrc"
echo '# Rust (Cargo)' >> "$HOME/.zshrc"
echo 'source "$HOME/.cargo/env"' >> "$HOME/.zshrc"
echo "✅ Added Rust to ~/.zshrc"
else
echo "✅ Rust already in ~/.zshrc"
fi
fi
# Source it for current shell
export PATH="$HOME/.cargo/bin:$PATH"
# Check if rustup exists, if not install Rust
if ! command -v rustup &> /dev/null; then
echo ""
echo "Installing Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
source "$HOME/.cargo/env"
fi
# Set default toolchain
rustup default stable
echo ""
echo "✅ Rust Configuration Complete"
echo ""
echo "Rust version: $(rustc --version)"
echo "Cargo version: $(cargo --version)"
echo ""
# Now build the backend
echo "============================================"
echo "Building Backend"
echo "============================================"
echo ""
cd core
echo "Building... (this takes 5-10 minutes on first build)"
cargo build --bin archipelago
if [ $? -eq 0 ]; then
echo ""
echo "============================================"
echo "✅ SUCCESS! Backend Built"
echo "============================================"
echo ""
echo "Next steps:"
echo ""
echo "1. Restart your terminal (or run: source ~/.zshrc)"
echo ""
echo "2. Start the full stack:"
echo " ./scripts/dev-start.sh"
echo " Choose option 2"
echo ""
echo "Or manually:"
echo " Terminal 1: cd core && cargo run --bin archipelago"
echo " Terminal 2: cd neode-ui && npm run dev"
echo ""
else
echo ""
echo "❌ Build failed. Check errors above."
fi

View File

@ -1,118 +0,0 @@
# Build Status and Implementation Summary
## ✅ Completed Implementation
### Core Build System
- ✅ Main build script (`build-alpine-iso.sh`)
- ✅ macOS build wrapper (`build-macos.sh`)
- ✅ Linux build wrapper (`build-linux.sh`)
- ✅ Native Alpine build (`build-alpine-native.sh`)
- ✅ Docker build image (`Dockerfile.build`)
- ✅ Dependency checker (`scripts/check-dependencies.sh`)
### Component Build Scripts
- ✅ Backend build (`scripts/build-backend.sh`)
- ✅ Frontend build (`scripts/build-frontend.sh`)
- ✅ APK creation (`scripts/create-backend-apk.sh`)
- ✅ Installation script (`scripts/install-archipelago.sh`)
- ✅ ISO to disk converter (`scripts/convert-iso-to-disk.sh`)
### Alpine Profile
- ✅ Custom profile (`alpine-profile/mkimg.archipelago.sh`)
- ✅ Systemd service (`alpine-profile/overlay/etc/systemd/system/archipelago.service`)
- ✅ OpenRC init script (`alpine-profile/overlay/etc/init.d/archipelago`)
- ✅ First boot script (`alpine-profile/overlay/etc/local.d/archipelago-install.start`)
- ✅ Configuration files (`alpine-profile/overlay/etc/archipelago/config.toml`)
- ✅ Hostname and hosts files
### Documentation
- ✅ Building OS Images guide (`docs/building-os-images.md`)
- ✅ Quick start guide (`QUICKSTART.md`)
- ✅ Updated README (`README.md`)
- ✅ Profile documentation (`alpine-profile/README.md`)
## 🚧 Known Limitations
### Alpine mkimage Integration
The build system uses Alpine's `mkimage.sh` which requires:
- Alpine aports repository clone
- Proper profile structure matching Alpine's expectations
- May need adjustments based on Alpine version
### First Build
- First build will clone Alpine aports (large download)
- May take 30-60 minutes depending on system
- Subsequent builds are faster
### Cross-Compilation
- Backend builds for host by default
- Musl target recommended for static binaries
- Install with: `rustup target add x86_64-unknown-linux-musl`
## 📋 Next Steps for Testing
1. **Test on macOS**:
```bash
cd image-recipe
./build-macos.sh
```
2. **Test on Linux** (HP ProDesk 400 G4 DM):
```bash
cd image-recipe
./build-linux.sh
```
3. **Verify Output**:
- Check `results/` directory for ISO/image
- Verify file size (should be 100MB-500MB for ISO)
- Test in virtual machine first
4. **Flash to Device**:
- Use `dd` to flash ISO to USB
- Boot from USB on target device
- Verify first boot setup works
## 🔧 Potential Issues and Fixes
### Issue: Alpine aports clone fails
**Fix**: Manual clone or check network connection
### Issue: mkimage.sh not found
**Fix**: Ensure aports repository was cloned correctly
### Issue: Profile not recognized
**Fix**: Check profile is in `aports/scripts/mkimg.archipelago/`
### Issue: Backend build fails
**Fix**: Install Rust and musl target, check dependencies
### Issue: Frontend build fails
**Fix**: Install Node.js 18+, run `npm install` first
## 📝 Build Output Structure
```
results/
├── archipelago-0.1.0-x86_64.iso # Bootable ISO
└── archipelago-0.1.0-x86_64.img # Disk image (if disk build)
build/
├── backend/
│ └── archipelago # Compiled binary
└── frontend/ # Static files
apks/
└── archipelago-backend-0.1.0-r0.apk # Alpine package
```
## ✨ Ready to Build!
The system is ready for building. Start with:
```bash
cd image-recipe
./build-macos.sh # On macOS
# or
./build-linux.sh # On Linux
```

View File

@ -1,93 +0,0 @@
# Implementation Completion Checklist
## ✅ Core Build System
- [x] Main build orchestrator (`build-alpine-iso.sh`)
- [x] macOS build wrapper (`build-macos.sh`)
- [x] Linux build wrapper (`build-linux.sh`)
- [x] Native Alpine build (`build-alpine-native.sh`)
- [x] Docker build image (`Dockerfile.build`)
- [x] Docker Compose config (`docker-compose.build.yml`)
- [x] Makefile for convenience commands
## ✅ Component Build Scripts
- [x] Backend build script (`scripts/build-backend.sh`)
- [x] Frontend build script (`scripts/build-frontend.sh`)
- [x] APK creation script (`scripts/create-backend-apk.sh`)
- [x] Installation script (`scripts/install-archipelago.sh`)
- [x] ISO to disk converter (`scripts/convert-iso-to-disk.sh`)
- [x] Dependency checker (`scripts/check-dependencies.sh`)
- [x] Setup script (`scripts/setup-alpine-build.sh`)
## ✅ Alpine Profile
- [x] Custom profile definition (`alpine-profile/mkimg.archipelago.sh`)
- [x] Systemd service file
- [x] OpenRC init script
- [x] First boot script
- [x] Configuration files (config.toml, hostname, hosts)
- [x] Profile documentation
## ✅ Integration Files
- [x] Systemd service unit
- [x] OpenRC init script
- [x] First boot installation script
- [x] Default configuration
- [x] Hostname and network config
## ✅ Documentation
- [x] Building OS Images guide (`docs/building-os-images.md`)
- [x] Quick Start guide (`QUICKSTART.md`)
- [x] Updated README (`README.md`)
- [x] Build Status (`BUILD_STATUS.md`)
- [x] Implementation Summary (`SUMMARY.md`)
- [x] Profile README (`alpine-profile/README.md`)
- [x] Scripts README (`scripts/README.md`)
## ✅ Build Infrastructure
- [x] Directory structure created
- [x] .gitignore for build artifacts
- [x] All scripts made executable
- [x] Volume mounts configured for Docker
- [x] Error handling in scripts
## 🎯 Ready to Test
The implementation is complete! You can now:
1. **Test on macOS**:
```bash
cd image-recipe
./build-macos.sh
```
2. **Test on Linux** (HP ProDesk 400 G4 DM):
```bash
cd image-recipe
./build-linux.sh
```
3. **Check dependencies first**:
```bash
./scripts/check-dependencies.sh
```
## 📝 Notes
- First build will download Alpine aports repository (~500MB)
- Build time: 30-60 minutes on first run, faster on subsequent builds
- Output: ISO file in `results/` directory
- Can be flashed to USB or disk using `dd` command
## 🔍 What to Verify
After first build:
- [ ] ISO file exists in `results/`
- [ ] ISO file size is reasonable (200-500MB)
- [ ] Can boot ISO in virtual machine
- [ ] Services start on first boot
- [ ] Web UI accessible at http://device-ip:8100

View File

@ -1,93 +0,0 @@
# Alpine Linux Base Image for Archipelago Bitcoin Node OS
# Multi-arch support: ARM64 (Raspberry Pi) and x86_64
ARG ALPINE_VERSION=3.19
FROM alpine:${ALPINE_VERSION}
# Install essential packages
RUN apk add --no-cache \
bash \
curl \
wget \
ca-certificates \
openssl \
sudo \
shadow \
systemd \
systemd-openrc \
dbus \
udev \
util-linux \
e2fsprogs \
dosfstools \
parted \
gptfdisk \
rsync \
git \
vim \
nano \
htop \
iotop \
net-tools \
iproute2 \
iputils \
tcpdump \
tzdata \
logrotate \
fail2ban \
ufw \
&& rm -rf /var/cache/apk/*
# Install Podman and dependencies
RUN apk add --no-cache \
podman \
podman-compose \
crun \
fuse-overlayfs \
slirp4netns \
&& rm -rf /var/cache/apk/*
# Create archipelago user for rootless containers
RUN adduser -D -s /bin/bash archipelago && \
echo "archipelago ALL=(ALL) NOPASSWD: /usr/bin/podman, /usr/bin/podman-compose" >> /etc/sudoers
# Configure Podman for rootless operation
RUN mkdir -p /home/archipelago/.config/containers && \
echo 'driver = "overlay"' > /home/archipelago/.config/containers/storage.conf && \
echo 'rootless_storage_path = "/home/archipelago/.local/share/containers/storage"' >> /home/archipelago/.config/containers/storage.conf
# Set up systemd for container management
RUN systemctl enable systemd-resolved && \
systemctl enable dbus
# Create necessary directories
RUN mkdir -p \
/var/lib/archipelago \
/var/lib/archipelago/apps \
/var/lib/archipelago/secrets \
/var/lib/archipelago/logs \
/var/lib/archipelago/backups \
/etc/archipelago
# Copy hardening scripts
COPY scripts/harden-alpine.sh /usr/local/bin/
COPY scripts/install-podman.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/harden-alpine.sh /usr/local/bin/install-podman.sh
# Run hardening script
RUN /usr/local/bin/harden-alpine.sh
# Set timezone to UTC
RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime
# Configure log rotation
COPY configs/logrotate.conf /etc/logrotate.d/archipelago
# Set up firewall defaults (will be configured on first boot)
RUN ufw --force enable || true
# Expose common ports (will be managed by firewall rules)
EXPOSE 22 80 443 8332 8333 9735 10009 8080 8443
# Default command
CMD ["/bin/bash"]

View File

@ -1,41 +0,0 @@
# Docker build image for Archipelago OS image building
# Can be used on macOS or Linux
FROM --platform=linux/amd64 alpine:3.19
# Install build dependencies
RUN apk add --no-cache \
bash \
git \
alpine-sdk \
abuild \
alpine-conf \
syslinux \
xorriso \
squashfs-tools \
grub \
grub-efi \
mtools \
dosfstools \
e2fsprogs \
rsync \
curl \
wget \
ca-certificates \
&& rm -rf /var/cache/apk/*
# Install Rust for backend compilation
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"
# Install Node.js for frontend build
RUN apk add --no-cache nodejs npm
# Setup abuild
RUN abuild-keygen -a -n || true
# Set working directory
WORKDIR /workspace
# Default command
CMD ["/bin/bash"]

View File

@ -1,172 +0,0 @@
# ✅ Implementation Complete: Bootable OS Image Builder
## Summary
A complete system for building bootable Alpine Linux OS images for Archipelago Bitcoin Node OS has been implemented. The system supports building on both macOS (via Docker) and Linux (native or Docker), and produces bootable ISO and disk images ready for flashing to x86_64 desktop computers.
## ✅ What's Been Created
### Build System (9 files)
- `build-alpine-iso.sh` - Main orchestrator
- `build-macos.sh` - macOS wrapper
- `build-linux.sh` - Linux wrapper
- `build-alpine-native.sh` - Native Alpine build
- `Dockerfile.build` - Docker build environment
- `docker-compose.build.yml` - Docker Compose config
- `Makefile` - Build shortcuts
- `.gitignore` - Build artifact exclusions
### Build Scripts (7 files)
- `scripts/build-backend.sh` - Compiles Rust backend
- `scripts/build-frontend.sh` - Builds Vue.js frontend
- `scripts/create-backend-apk.sh` - Creates Alpine APK
- `scripts/install-archipelago.sh` - Installs into image
- `scripts/convert-iso-to-disk.sh` - Converts ISO to disk image
- `scripts/check-dependencies.sh` - Checks build prerequisites
- `scripts/setup-alpine-build.sh` - Sets up Alpine environment
### Alpine Profile (6+ files)
- `alpine-profile/mkimg.archipelago.sh` - Profile definition
- `alpine-profile/overlay/etc/systemd/system/archipelago.service`
- `alpine-profile/overlay/etc/init.d/archipelago`
- `alpine-profile/overlay/etc/local.d/archipelago-install.start`
- `alpine-profile/overlay/etc/archipelago/config.toml`
- `alpine-profile/overlay/etc/hostname`
- `alpine-profile/overlay/etc/hosts`
### Documentation (8 files)
- `docs/building-os-images.md` - Complete build guide
- `README.md` - Updated with new build process
- `QUICKSTART.md` - Quick reference
- `GETTING_STARTED.md` - Getting started guide
- `BUILD_STATUS.md` - Implementation status
- `SUMMARY.md` - Implementation summary
- `COMPLETION_CHECKLIST.md` - Completion checklist
- `alpine-profile/README.md` - Profile documentation
- `scripts/README.md` - Scripts documentation
## 🎯 Ready to Use
### On macOS (Your Current Machine)
```bash
cd image-recipe
./build-macos.sh
```
**Requirements**:
- Docker Desktop installed and running
- 10GB+ disk space
- 30-60 minutes for first build
### On Linux (HP ProDesk 400 G4 DM)
```bash
cd image-recipe
./build-linux.sh
```
**Requirements**:
- Alpine Linux (preferred) OR Docker
- 10GB+ disk space
- 20-60 minutes depending on setup
## 📦 Build Output
After successful build:
```
results/
└── archipelago-0.1.0-x86_64.iso # Bootable ISO (~200-500MB)
```
For disk images:
```
results/
└── archipelago-0.1.0-x86_64.img # Disk image (~4GB)
```
## 🔄 Build Process
1. **Dependency Check** → Verifies Rust, Node.js, Docker
2. **Backend Build** → Compiles Rust → `build/backend/archipelago`
3. **Frontend Build** → Builds Vue.js → `build/frontend/`
4. **APK Creation** → Packages backend → `apks/archipelago-backend-*.apk`
5. **Alpine Build** → Creates base Alpine image
6. **Integration** → Installs Archipelago components
7. **Output** → Creates ISO/image file
## 💾 Flashing to Device
### From macOS
```bash
# List disks
diskutil list
# Flash ISO to USB (replace X)
sudo dd if=results/archipelago-0.1.0-x86_64.iso of=/dev/rdiskX bs=1m
```
### From Linux
```bash
# List disks
lsblk
# Flash ISO to USB (replace X)
sudo dd if=results/archipelago-0.1.0-x86_64.iso of=/dev/sdX bs=1M
```
## 🎉 First Boot
After flashing and booting:
1. System boots Alpine Linux
2. First boot script runs automatically
3. Archipelago services start
4. Access web UI: **http://device-ip:8100**
5. Or API: **http://device-ip:5959**
## 📋 What's Included in the Image
- **Alpine Linux 3.19** - Minimal base OS
- **Podman** - Container runtime (rootless)
- **Systemd** - Service management
- **NetworkManager** - Network configuration
- **Archipelago Backend** - Rust API server
- **Archipelago Frontend** - Vue.js web interface
- **First Boot Setup** - Automatic configuration
## 🔧 Customization
Edit these files to customize:
- **Packages**: `alpine-profile/mkimg.archipelago.sh` (apks variable)
- **Services**: `alpine-profile/overlay/etc/systemd/system/archipelago.service`
- **Config**: `alpine-profile/overlay/etc/archipelago/config.toml`
- **First Boot**: `alpine-profile/overlay/etc/local.d/archipelago-install.start`
## ✨ Status: READY TO BUILD
All components are implemented and ready for testing. Start building with:
```bash
cd image-recipe
./build-macos.sh # On macOS
# or
./build-linux.sh # On Linux
```
First build will take longer (downloads Alpine aports). Subsequent builds are faster.
## 📚 Documentation
- [Getting Started](GETTING_STARTED.md) - Quick start guide
- [Building OS Images](../docs/building-os-images.md) - Full detailed guide
- [Build Status](BUILD_STATUS.md) - Implementation details
- [Summary](SUMMARY.md) - What's implemented
---
**You're ready to build your first Archipelago OS image!** 🚀

View File

@ -1,127 +0,0 @@
# Getting Started: Building Your First Archipelago OS Image
## 🎯 Goal
Build a bootable Alpine Linux OS image that includes Archipelago Bitcoin Node OS, ready to flash to a Dell Optiplex or HP ProDesk 400 G4 DM.
## ✅ What's Ready
The complete build system is implemented and ready to use:
- ✅ Build scripts for macOS and Linux
- ✅ Docker support for cross-platform building
- ✅ Backend and frontend compilation
- ✅ Alpine profile with Archipelago integration
- ✅ ISO and disk image generation
- ✅ First boot automation
## 🚀 Quick Start (macOS)
```bash
# 1. Navigate to image recipe directory
cd image-recipe
# 2. Check dependencies
./scripts/check-dependencies.sh
# 3. Build the image
./build-macos.sh
```
**Expected time**: 30-60 minutes on first build (downloads Alpine aports)
**Output**: `results/archipelago-0.1.0-x86_64.iso`
## 🚀 Quick Start (Linux - HP ProDesk 400 G4 DM)
```bash
# 1. Navigate to image recipe directory
cd image-recipe
# 2. Build (auto-detects Alpine or Docker)
./build-linux.sh
```
**Expected time**: 20-40 minutes on Alpine, 30-60 minutes with Docker
**Output**: `results/archipelago-0.1.0-x86_64.iso`
## 📋 What Gets Built
1. **Backend Binary**: Rust backend compiled for x86_64
2. **Frontend**: Vue.js app built as static files
3. **APK Package**: Backend packaged as Alpine APK
4. **Alpine Image**: Base Alpine Linux with:
- Podman container runtime
- Systemd services
- Network configuration
- Archipelago backend and frontend
## 💾 Flashing the Image
### Option 1: ISO to USB (Recommended)
```bash
# 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
```
### Option 2: Disk Image Direct Flash
```bash
# Build disk image
BUILD_TYPE=disk ./build-macos.sh
# Flash directly
sudo dd if=results/archipelago-0.1.0-x86_64.img of=/dev/sdX bs=1M
```
⚠️ **WARNING**: Replace `X` with your actual device. Wrong device = data loss!
## 🎉 After Flashing
1. **Boot from USB/disk** on target device
2. **Wait for first boot** (automatic setup)
3. **Access web UI**: http://device-ip:8100
4. **Or API**: http://device-ip:5959
## 🔧 Troubleshooting
### Build Fails
- **Check dependencies**: `./scripts/check-dependencies.sh`
- **Check disk space**: Need 10GB+ free
- **Check Docker**: `docker info` should work (macOS)
- **Check logs**: Look for error messages in build output
### Image Doesn't Boot
- **Verify ISO**: `file results/*.iso` should show "ISO 9660"
- **Try different USB port**
- **Check BIOS/UEFI settings**
- **Verify architecture**: Must be x86_64
### Services Don't Start
- **Check logs**: `journalctl -u archipelago` (on device)
- **Check network**: `ip addr` (on device)
- **Check Podman**: `podman info` (on device)
## 📚 More Information
- [Building OS Images](../docs/building-os-images.md) - Full detailed guide
- [Build Status](BUILD_STATUS.md) - Implementation status
- [Summary](SUMMARY.md) - What's been implemented
## 🎯 Next Steps
1. **Test build** on your macOS machine
2. **Test build** on HP ProDesk 400 G4 DM
3. **Flash to USB** and test boot
4. **Flash to device** and verify functionality
5. **Customize** profile if needed
Happy building! 🚀

View File

@ -1,316 +0,0 @@
# Archipelago Hardware Build System - Quick Reference
## 🚀 Quick Start
### Build for Start9 Server Pure
```bash
cd image-recipe
./build-for-hardware.sh start9-pure iso
```
### Build for HP ProDesk
```bash
cd image-recipe
./build-for-hardware.sh hp-prodesk iso
```
### Build for Dell OptiPlex
```bash
cd image-recipe
./build-for-hardware.sh dell-optiplex iso
```
### Build for All Hardware
```bash
cd image-recipe
./build-all-hardware.sh iso
```
## 📋 Supported Hardware
| Hardware | Target Name | CPU | RAM | Storage |
|----------|-------------|-----|-----|---------|
| Start9 Server Pure | `start9-pure` | Intel i7-10710U | 32-64GB | 2-4TB NVMe |
| HP ProDesk 400 G4 DM | `hp-prodesk` | Intel varies | 8GB+ | 128GB+ SSD |
| Dell OptiPlex | `dell-optiplex` | Intel varies | 8GB+ | 128GB+ SSD |
| Generic x86_64 | `generic` | Any x86_64 | 8GB+ | 128GB+ |
## 🔧 Build Commands
### Single Hardware Target
```bash
./build-for-hardware.sh <target> [iso|disk]
```
**Examples:**
```bash
# ISO image (recommended)
./build-for-hardware.sh start9-pure iso
# Disk image (advanced)
./build-for-hardware.sh start9-pure disk
# Default is ISO
./build-for-hardware.sh hp-prodesk
```
### All Hardware Targets
```bash
./build-all-hardware.sh [iso|disk]
```
Builds optimized images for all supported hardware in one command.
## 📦 Output Files
After build completes:
```
results/
├── archipelago-0.1.0-start9-pure-x86_64.iso
├── archipelago-0.1.0-hp-prodesk-x86_64.iso
├── archipelago-0.1.0-dell-optiplex-x86_64.iso
├── archipelago-0.1.0-generic-x86_64.iso
├── BUILD_MANIFEST_start9-pure.txt
├── BUILD_MANIFEST_hp-prodesk.txt
├── BUILD_MANIFEST_dell-optiplex.txt
└── BUILD_MANIFEST_generic.txt
```
## 🔍 What's Different Per Hardware?
Each build includes **hardware-specific optimizations**:
### Start9 Server Pure
- ✅ Intel i7-10710U microcode
- ✅ Intel UHD Graphics drivers
- ✅ NVMe SSD optimizations
- ✅ Coreboot firmware support
- ✅ IME-disabled configurations
- ✅ High-performance tuning
### HP ProDesk 400 G4 DM
- ✅ Intel graphics support
- ✅ HP firmware compatibility
- ✅ SATA/NVMe detection
- ✅ Compact form factor optimizations
- ✅ Low-power configurations
### Dell OptiPlex
- ✅ Multi-model support
- ✅ Dell firmware compatibility
- ✅ Legacy hardware support
- ✅ Business-class features
### Generic
- ✅ Broad hardware compatibility
- ✅ Intel & AMD CPU support
- ✅ Generic drivers
- ✅ Maximum portability
## 💾 Flash to USB Drive
### macOS
```bash
# Find device
diskutil list
# Unmount
diskutil unmountDisk /dev/diskX
# Flash
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/rdiskX bs=1m status=progress
```
### Linux
```bash
# Find device
lsblk
# Flash
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/sdX bs=1M status=progress
```
### GUI Tools
- **balenaEtcher** (Recommended): https://www.balena.io/etcher/
- **Rufus** (Windows): https://rufus.ie/
## 🎯 Installation Steps
1. **Flash ISO to USB** (see above)
2. **Insert USB into target hardware**
3. **Boot from USB**:
- Start9 Pure: Press F12
- HP ProDesk: Press F9
- Dell OptiPlex: Press F12
4. **Follow installation prompts**
5. **Remove USB and reboot**
6. **Access UI**: http://device-ip:8100
## 🔬 Verification
### Check ISO
```bash
# View build manifest
cat results/BUILD_MANIFEST_start9-pure.txt
# Check file size
ls -lh results/*.iso
# Verify checksum
sha256sum results/archipelago-0.1.0-start9-pure-x86_64.iso
```
### Test in VM
```bash
qemu-system-x86_64 \
-m 4G \
-smp 2 \
-boot d \
-cdrom results/archipelago-0.1.0-start9-pure-x86_64.iso \
-enable-kvm
```
## 🛠️ Environment Variables
Customize builds:
```bash
# Set version
export ARCHIPELAGO_VERSION="0.2.0"
# Set Alpine version
export ALPINE_VERSION="3.19"
# Build with custom settings
./build-for-hardware.sh start9-pure iso
```
## 📂 Directory Structure
```
image-recipe/
├── build-for-hardware.sh # Main build script
├── build-all-hardware.sh # Build all targets
├── alpine-profile/
│ ├── overlay/ # Base system files
│ ├── overlay-start9-pure/ # Start9-specific
│ ├── overlay-hp-prodesk/ # HP-specific
│ ├── overlay-dell-optiplex/ # Dell-specific
│ └── overlay-merged/ # Final merged (auto)
├── scripts/
│ ├── build-backend.sh
│ ├── build-frontend.sh
│ └── install-archipelago.sh
└── results/ # Build output
```
## 🐛 Troubleshooting
### Build Fails
```bash
# Clean everything
rm -rf results/ build/ apks/ aports/
# Rebuild
./build-for-hardware.sh start9-pure iso
```
### Docker Issues (macOS)
```bash
# Start Docker Desktop
open -a Docker
# Wait for Docker to start, then retry
./build-for-hardware.sh start9-pure iso
```
### Out of Disk Space
```bash
# Clean Docker (macOS)
docker system prune -a
# Clean build artifacts
rm -rf build/ results/ apks/
```
## 📖 Full Documentation
For detailed information:
- **Hardware Builds**: `README-HARDWARE-BUILDS.md`
- **OS Images**: `docs/building-os-images.md`
- **Architecture**: `docs/architecture.md`
## 🎯 Common Use Cases
### Build for production Start9 Server Pure
```bash
export ARCHIPELAGO_VERSION="1.0.0"
./build-for-hardware.sh start9-pure iso
```
### Build test images for all hardware
```bash
export ARCHIPELAGO_VERSION="dev"
./build-all-hardware.sh iso
```
### Build for your specific hardware
```bash
# Start9 Server Pure users
./build-for-hardware.sh start9-pure iso
# HP ProDesk users
./build-for-hardware.sh hp-prodesk iso
# Dell OptiPlex users
./build-for-hardware.sh dell-optiplex iso
# Other x86_64 hardware
./build-for-hardware.sh generic iso
```
## ⏱️ Build Times
Approximate build times (first build):
| Hardware | macOS (Docker) | Linux (Native) |
|----------|---------------|----------------|
| Start9 Pure | 45-60 min | 30-45 min |
| HP ProDesk | 45-60 min | 30-45 min |
| Dell OptiPlex | 45-60 min | 30-45 min |
| Generic | 45-60 min | 30-45 min |
| All Targets | 3-4 hours | 2-3 hours |
Subsequent builds are much faster (~10-15 minutes) due to caching.
## 💡 Tips
- **First build is slow**: Docker needs to download Alpine base, build tools, etc.
- **Use SSD**: Dramatically speeds up builds
- **Close apps**: Free up RAM and CPU for faster builds
- **Build overnight**: For all-hardware builds, run overnight
- **Check logs**: Build output shows progress and any issues
## 🚀 Next Steps
After building:
1. Flash ISO to USB drive
2. Boot your hardware from USB
3. Install Archipelago
4. Access UI at http://device-ip:8100
5. Install Bitcoin Core and apps
6. Enjoy your sovereign server!
## 📞 Support
Need help?
- **Issues**: Open GitHub issue
- **Docs**: Check `docs/` folder
- **Community**: Discord (coming soon)
---
**Remember**: Keep your ProDesk and OptiPlex builds! The system supports all hardware targets simultaneously.

View File

@ -1,412 +0,0 @@
# Building Archipelago for Specific Hardware
Archipelago supports building optimized OS images for specific hardware targets. Each build includes hardware-specific optimizations, drivers, and configurations.
## Supported Hardware
### 🖥️ Start9 Server Pure
```bash
./build-for-hardware.sh start9-pure iso
```
**Specifications:**
- **CPU**: Intel Core i7-10710U (6 cores, 12 threads)
- **RAM**: 32GB or 64GB DDR4-3200
- **Storage**: 2TB or 4TB NVMe SSD
- **Network**: 1x Gigabit Ethernet
- **Graphics**: Intel UHD Graphics
- **Ports**: 4x USB 3.0, 2x USB 2.0, 1x USB-C 3.1, HDMI, DisplayPort
**Optimizations:**
- Intel microcode updates
- Intel graphics acceleration
- NVMe SSD optimizations
- Power management tuning
### 🖥️ HP ProDesk 400 G4 DM
```bash
./build-for-hardware.sh hp-prodesk iso
```
**Specifications:**
- **CPU**: Various Intel processors
- **RAM**: 8GB+ DDR4
- **Storage**: 128GB+ SATA/NVMe SSD
- **Network**: 1x Gigabit Ethernet
- **Form Factor**: Desktop Mini
**Optimizations:**
- Intel graphics drivers
- SATA/NVMe detection and optimization
- HP-specific firmware support
### 🖥️ Dell OptiPlex
```bash
./build-for-hardware.sh dell-optiplex iso
```
**Specifications:**
- **CPU**: Various Intel processors
- **RAM**: 8GB+ DDR4
- **Storage**: 128GB+ SATA/NVMe SSD
- **Network**: 1x Gigabit Ethernet
- **Models**: 3050, 7050, 9020, etc.
**Optimizations:**
- Intel graphics drivers
- Dell firmware support
- Multi-model compatibility
### 🖥️ Generic x86_64
```bash
./build-for-hardware.sh generic iso
```
**Specifications:**
- **CPU**: Any x86_64 processor (Intel/AMD)
- **RAM**: 8GB+ recommended
- **Storage**: 128GB+ HDD/SSD
- **Network**: Any Ethernet adapter
**Optimizations:**
- Broad hardware compatibility
- Generic drivers for maximum coverage
- Both Intel and AMD support
## Build Process
### Quick Start
1. **Choose your hardware target:**
```bash
cd image-recipe
./build-for-hardware.sh <target> iso
```
2. **Wait for build to complete** (30-60 minutes first time)
3. **Find your ISO:**
```bash
ls results/archipelago-*-<target>-*.iso
```
### Build Types
#### ISO Image (Recommended)
```bash
./build-for-hardware.sh start9-pure iso
```
- Bootable from USB drive
- Live system or installation
- Easy to flash with tools
#### Disk Image
```bash
./build-for-hardware.sh start9-pure disk
```
- Raw disk image
- For direct disk flashing
- Advanced users only
## Hardware-Specific Features
### Start9 Server Pure
- **Coreboot Support**: Optimized for Start9's Coreboot firmware
- **No Intel ME**: Respects disabled Intel Management Engine
- **NVMe Performance**: Tuned for high-speed NVMe SSDs
- **Professional Grade**: Enterprise-level reliability
### HP ProDesk 400 G4 DM
- **Compact Form Factor**: Optimized for small desktop
- **Business Features**: Enterprise management support
- **Low Power**: Efficient power management
- **Silent Operation**: Thermal optimizations
### Dell OptiPlex
- **Wide Model Support**: Works across many OptiPlex models
- **Legacy Support**: Compatible with older hardware
- **Enterprise Ready**: Business-class features
- **Proven Reliability**: Battle-tested hardware
### Generic Build
- **Maximum Compatibility**: Works on most x86_64 hardware
- **Fallback Option**: When specific profile unavailable
- **DIY Builds**: Perfect for custom hardware
- **Virtual Machines**: Works in VirtualBox, VMware, etc.
## What Gets Customized
Each hardware build includes:
### 1. Hardware Detection
Automatically detects and optimizes for:
- CPU vendor and model
- Available RAM
- Storage type (NVMe, SATA SSD, HDD)
- Network interfaces
- Graphics hardware
- USB controllers
### 2. Kernel Modules
Includes specific drivers for:
- Storage controllers
- Network adapters
- Graphics cards
- USB devices
- Audio hardware
### 3. Firmware
Loads appropriate firmware for:
- CPU microcode (Intel/AMD)
- Network adapters
- Graphics cards
- Wireless (if applicable)
### 4. Performance Tuning
Optimizes:
- I/O scheduler (NVMe vs SATA)
- CPU governor (performance vs power)
- Memory management
- Network buffers
- Disk caching
### 5. System Configuration
Sets defaults for:
- Boot parameters
- Service startup order
- Power management
- Thermal management
- Network configuration
## Build Output
After successful build, you'll get:
```
results/
├── archipelago-0.1.0-start9-pure-x86_64.iso
├── archipelago-0.1.0-hp-prodesk-x86_64.iso
├── archipelago-0.1.0-dell-optiplex-x86_64.iso
├── archipelago-0.1.0-generic-x86_64.iso
└── BUILD_MANIFEST_<target>.txt
```
Each ISO includes:
- Hardware-specific optimizations
- Appropriate drivers and firmware
- Custom boot configuration
- Installation scripts
- Hardware detection tools
## Installation
### 1. Flash ISO to USB
**macOS:**
```bash
# Find USB device
diskutil list
# Unmount
diskutil unmountDisk /dev/diskX
# Flash ISO
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/rdiskX \
bs=1m \
status=progress
```
**Linux:**
```bash
# Find USB device
lsblk
# Flash ISO
sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \
of=/dev/sdX \
bs=1M \
status=progress
```
**GUI Tools:**
- [balenaEtcher](https://www.balena.io/etcher/) (macOS/Linux/Windows)
- [Rufus](https://rufus.ie/) (Windows)
- [Raspberry Pi Imager](https://www.raspberrypi.com/software/) (All platforms)
### 2. Boot from USB
1. Insert USB drive into target hardware
2. Power on and enter boot menu:
- **Start9 Pure**: Press F12 during boot
- **HP ProDesk**: Press F9 during boot
- **Dell OptiPlex**: Press F12 during boot
3. Select USB drive from boot menu
4. Follow installation prompts
### 3. First Boot
After installation:
1. Remove USB drive
2. Reboot system
3. Hardware detection runs automatically
4. Services start automatically
5. Access UI at `http://<device-ip>:8100`
## Verification
After flashing, verify the build:
```bash
# Check ISO integrity
sha256sum results/archipelago-0.1.0-start9-pure-x86_64.iso
# View build manifest
cat results/BUILD_MANIFEST_start9-pure.txt
# Mount ISO to inspect (Linux)
sudo mount -o loop archipelago-0.1.0-start9-pure-x86_64.iso /mnt
ls -la /mnt
cat /mnt/etc/archipelago/hardware.toml
sudo umount /mnt
```
## Troubleshooting
### Build Fails
```bash
# Clean build artifacts
rm -rf results/ build/ apks/ aports/
# Try again
./build-for-hardware.sh start9-pure iso
```
### Wrong Hardware Detected
Check hardware profile after boot:
```bash
cat /etc/archipelago/hardware.toml
cat /var/log/archipelago-hardware.log
```
### Boot Issues
- Verify ISO checksum
- Try different USB port
- Check BIOS/UEFI settings:
- Enable UEFI boot
- Disable Secure Boot (for now)
- Enable USB boot
- Set boot order
### Performance Issues
View hardware optimization log:
```bash
cat /var/log/archipelago-hardware.log
dmesg | grep -i archipelago
journalctl -u archipelago
```
## Advanced Usage
### Custom Hardware Profile
Create custom profile for your hardware:
1. Copy generic profile:
```bash
cp -r alpine-profile/overlay alpine-profile/overlay-myserver
```
2. Edit hardware config:
```bash
vim alpine-profile/overlay-myserver/etc/archipelago/hardware.toml
```
3. Build with custom profile:
```bash
HARDWARE_TARGET=myserver ./build-for-hardware.sh myserver iso
```
### Build All Targets
Build for all supported hardware:
```bash
#!/bin/bash
for target in start9-pure hp-prodesk dell-optiplex generic; do
echo "Building for $target..."
./build-for-hardware.sh $target iso
done
```
### Automated Testing
Test ISO in QEMU:
```bash
qemu-system-x86_64 \
-m 4G \
-smp 2 \
-boot d \
-cdrom results/archipelago-0.1.0-start9-pure-x86_64.iso \
-enable-kvm
```
## Hardware Requirements
### Minimum Requirements
- **CPU**: 64-bit x86_64 processor
- **RAM**: 4GB (8GB recommended)
- **Storage**: 64GB (128GB recommended)
- **Network**: Ethernet adapter
- **Boot**: UEFI or Legacy BIOS
### Recommended Requirements
- **CPU**: Intel i5/i7 or AMD Ryzen 5/7
- **RAM**: 16GB+
- **Storage**: 256GB+ SSD (NVMe preferred)
- **Network**: Gigabit Ethernet
- **Boot**: UEFI with GPT
### Start9 Server Pure (Optimal)
- **CPU**: Intel i7-10710U (6 cores, 12 threads)
- **RAM**: 32GB or 64GB
- **Storage**: 2TB or 4TB NVMe SSD
- **Network**: Gigabit Ethernet
- **Ports**: Multiple USB 3.0, USB-C
## Next Steps
After installation:
1. Access web UI: `http://<device-ip>:8100`
2. Complete setup wizard
3. Install Bitcoin Core
4. Add Lightning Network (LND or CLN)
5. Install additional apps
6. Configure backups
7. Secure your node
## Support
Need help?
- **Documentation**: `docs/`
- **Issues**: GitHub Issues
- **Community**: Discord (coming soon)
- **Hardware-Specific**: Check `BUILD_MANIFEST_<target>.txt`
## Building Multiple Targets
To build for all your hardware:
```bash
# Build Start9 Server Pure image
./build-for-hardware.sh start9-pure iso
# Build HP ProDesk image
./build-for-hardware.sh hp-prodesk iso
# Build Dell OptiPlex image
./build-for-hardware.sh dell-optiplex iso
# You'll get separate ISOs optimized for each
```
Each ISO is independent and optimized for its target hardware!

View File

@ -1,46 +1,78 @@
# Archipelago OS Image Recipes
Build scripts and profiles for creating bootable Alpine Linux OS images for Archipelago Bitcoin Node OS.
Build scripts for creating bootable Debian Linux OS images for Archipelago Bitcoin Node OS.
## Quick Start
### On macOS
### Build the ISO
```bash
./build-macos.sh
./build-debian-iso.sh
```
### On Linux
This creates a bootable Debian Live ISO with Archipelago pre-installed.
### Write to USB
```bash
./build-linux.sh
# Using dd (recommended)
./write-usb-dd.sh /dev/diskN
# Or use Balena Etcher to flash the ISO
```
See [Building OS Images](../../docs/building-os-images.md) for detailed instructions.
See the Architecture documentation for detailed system information.
## What's Included
- **Alpine Linux Base**: Minimal, secure Linux distribution
- **Podman**: Container runtime for apps
- **Debian Linux Base**: Stable Debian 12 (Bookworm) distribution
- **Podman**: Container runtime for apps (rootless by default)
- **Archipelago Backend**: Rust-based API server
- **Archipelago Frontend**: Vue.js web interface
- **Systemd Services**: Automatic service management
- **Network Configuration**: Ready for network setup
- **Network Configuration**: NetworkManager for easy setup
## Build Output
- `archipelago-{version}-x86_64.iso` - Bootable ISO image
- `archipelago-{version}-x86_64.img` - Disk image for flashing
- `results/archipelago-debian-12-x86_64.iso` - Bootable hybrid ISO image
## Supported Platforms
- **x86_64**: Dell Optiplex, HP ProDesk 400 G4 DM, and other x86_64 desktops
- **Build Systems**: macOS (via Docker) and Linux (native or Docker)
- **x86_64**: Dell OptiPlex, HP ProDesk 400 G4 DM, Start9 Server Pure, and other x86_64 machines
- **Build Systems**: macOS (requires Docker) and Linux (native or Docker)
## Legacy StartOS Build
## Installation Methods
The original StartOS build scripts are still available:
- `build.sh` - StartOS Debian-based image builder
- `run-local-build.sh` - StartOS build helper
### 1. Live USB Boot
Boot from USB, run in live mode to test, or install to disk.
See [Building OS Images](../../docs/building-os-images.md) for Archipelago-specific builds.
### 2. Full Disk Installation
From the live environment, run:
```bash
sudo /archipelago/install-to-disk.sh
```
This installs Archipelago to a target disk using debootstrap.
## Directory Structure
```
image-recipe/
├── build-debian-iso.sh # Main ISO builder
├── write-usb-dd.sh # Write ISO to USB with dd
├── create-fat32-usb.sh # Alternative USB creation
├── archipelago-scripts/ # Scripts included in ISO
│ ├── install-to-disk.sh # Disk installer
│ └── setup-bitcoin.sh # Bitcoin Core setup
├── scripts/ # Build helper scripts
│ ├── build-backend.sh # Compile Rust backend
│ ├── build-frontend.sh # Build Vue.js frontend
│ └── check-dependencies.sh # Verify build requirements
└── results/ # Built ISO output
```
## Requirements
- Docker (for macOS builds)
- xorriso (for ISO creation): `brew install xorriso`
- 7zip (for ISO extraction): `brew install p7zip`

View File

@ -1,141 +0,0 @@
# Archipelago OS Image Builder - Implementation Summary
## ✅ What's Been Implemented
A complete system for building bootable Alpine Linux OS images for Archipelago Bitcoin Node OS, supporting both macOS and Linux build environments.
## 🎯 Key Features
1. **Multi-Platform Build Support**
- ✅ macOS via Docker
- ✅ Linux native (Alpine)
- ✅ Linux via Docker (fallback)
2. **Complete Build Pipeline**
- ✅ Backend compilation (Rust)
- ✅ Frontend build (Vue.js)
- ✅ APK package creation
- ✅ Alpine image generation
- ✅ ISO and disk image output
3. **Alpine Profile System**
- ✅ Custom mkimage profile
- ✅ Systemd and OpenRC support
- ✅ First boot automation
- ✅ Service configuration
4. **Integration**
- ✅ Backend service installation
- ✅ Frontend file deployment
- ✅ Podman configuration
- ✅ Network setup
## 📁 File Structure
```
image-recipe/
├── build-alpine-iso.sh # Main orchestrator
├── build-macos.sh # macOS wrapper
├── build-linux.sh # Linux wrapper
├── build-alpine-native.sh # Native Alpine build
├── Dockerfile.build # Build container
├── docker-compose.build.yml # Docker Compose config
├── Makefile # Build shortcuts
├── alpine-profile/ # Custom Alpine profile
│ ├── mkimg.archipelago.sh # Profile definition
│ └── overlay/ # Files to include
│ └── etc/ # System configs
├── scripts/ # Build helpers
│ ├── build-backend.sh
│ ├── build-frontend.sh
│ ├── create-backend-apk.sh
│ ├── install-archipelago.sh
│ ├── convert-iso-to-disk.sh
│ └── check-dependencies.sh
└── docs/ # Documentation
└── building-os-images.md
```
## 🚀 Quick Start
### On Your macOS Machine
```bash
cd image-recipe
./build-macos.sh
```
### On HP ProDesk 400 G4 DM (Linux)
```bash
cd image-recipe
./build-linux.sh
```
## 📦 Build Output
After successful build:
- **ISO Image**: `results/archipelago-0.1.0-x86_64.iso`
- Bootable from USB/DVD
- ~200-500MB
- **Disk Image** (optional): `results/archipelago-0.1.0-x86_64.img`
- Ready for `dd` flashing
- ~4GB (expandable)
## 🔧 What Happens During Build
1. **Dependency Check**: Verifies Rust, Node.js, Docker
2. **Backend Build**: Compiles Rust binary → `build/backend/archipelago`
3. **Frontend Build**: Builds Vue.js → `build/frontend/`
4. **APK Creation**: Packages backend → `apks/archipelago-backend-*.apk`
5. **Alpine Build**:
- Clones Alpine aports (first time only)
- Creates custom profile
- Builds base Alpine image
6. **Integration**: Installs Archipelago components
7. **Output**:** Creates ISO/image file
## ⚙️ Configuration
Environment variables:
```bash
ARCHIPELAGO_VERSION=0.1.0 # Version
ALPINE_VERSION=3.19 # Alpine version
ARCH=x86_64 # Architecture
BUILD_TYPE=iso # iso or disk
OUTPUT_DIR=./results # Output location
```
## 📋 Prerequisites
### macOS
- Docker Desktop
- 10GB+ disk space
- 8GB+ RAM recommended
### Linux
- Alpine Linux (preferred) OR Docker
- 10GB+ disk space
- Build tools (auto-installed)
## 🎉 Ready to Build!
The system is complete and ready for testing. Start building with:
```bash
cd image-recipe
./build-macos.sh # On macOS
# or
./build-linux.sh # On Linux
```
First build will take 30-60 minutes (downloads Alpine aports). Subsequent builds are faster.
## 📚 Documentation
- [Building OS Images](../docs/building-os-images.md) - Full guide
- [Quick Start](QUICKSTART.md) - Quick reference
- [Build Status](BUILD_STATUS.md) - Implementation status

View File

@ -1,33 +0,0 @@
# Archipelago Alpine Profile
Custom Alpine Linux mkimage profile for Archipelago Bitcoin Node OS.
## Profile Structure
- `mkimg.archipelago.sh` - Main profile definition
- `overlay/` - Files to overlay into the image
- `etc/` - System configuration files
- `etc/systemd/system/` - Systemd service files
- `etc/init.d/` - OpenRC init scripts
- `etc/local.d/` - Local startup scripts
## Customization
To modify the profile:
1. **Add packages**: Edit `mkimg.archipelago.sh` and add to `apks` variable
2. **Add files**: Place files in `overlay/` directory with desired path structure
3. **Modify kernel**: Change `kernel_flavors` or `initfs_features`
4. **Change bootloader**: Modify `boot_addons`
## Profile Variables
- `apks` - List of Alpine packages to install
- `kernel_flavors` - Kernel version (lts, edge, etc.)
- `boot_addons` - Bootloader components
- `initfs_features` - Initramfs features
- `initfs_modules` - Kernel modules to include
## Build Integration
This profile is automatically copied to Alpine's aports repository during build and used by `mkimage.sh`.

View File

@ -1,24 +0,0 @@
#!/bin/sh
# Alpine mkimage profile for Archipelago Bitcoin Node OS
profile_archipelago() {
profile_standard
title="Archipelago Bitcoin Node OS"
desc="A Bitcoin and sovereign computing node OS built on Alpine Linux"
profile_abbrev="arch"
arch="x86_64"
# Additional packages for Archipelago
apks="$apks
podman
crun
fuse-overlayfs
slirp4netns
openssh
nginx
"
# Kernel flavor
kernel_flavors="lts"
kernel_addons="xtables-addons"
}

View File

@ -1,71 +0,0 @@
#!/bin/sh
# Hardware detection and optimization script
# Auto-generated for specific hardware target
detect_hardware() {
echo "=== Hardware Detection ==="
# CPU info
if [ -f /proc/cpuinfo ]; then
echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d':' -f2 | xargs)"
echo "Cores: $(grep -c processor /proc/cpuinfo)"
fi
# Memory
if [ -f /proc/meminfo ]; then
echo "Memory: $(grep MemTotal /proc/meminfo | awk '{printf "%.1f GB", $2/1024/1024}')"
fi
# Storage
if command -v lsblk >/dev/null 2>&1; then
echo "Storage:"
lsblk -d -o NAME,SIZE,TYPE | grep disk
fi
# Network
if command -v ip >/dev/null 2>&1; then
echo "Network interfaces:"
ip -br link show | grep -v lo
fi
# PCI devices (for hardware identification)
if command -v lspci >/dev/null 2>&1; then
echo "PCI devices:"
lspci | grep -E "VGA|Ethernet|Network"
fi
}
optimize_for_hardware() {
echo "=== Hardware Optimization ==="
# Load Intel microcode if Intel CPU
if grep -q Intel /proc/cpuinfo; then
echo "Intel CPU detected, loading microcode..."
modprobe intel_rapl_common 2>/dev/null || true
modprobe intel_powerclamp 2>/dev/null || true
fi
# Enable hardware acceleration for graphics
if lspci | grep -q "Intel.*Graphics"; then
echo "Intel Graphics detected"
modprobe i915 2>/dev/null || true
fi
# Optimize for NVMe if present
if [ -e /dev/nvme0n1 ]; then
echo "NVMe SSD detected, optimizing..."
echo none > /sys/block/nvme0n1/queue/scheduler 2>/dev/null || true
fi
# Optimize for SATA SSD if present
if [ -e /dev/sda ]; then
if hdparm -I /dev/sda 2>/dev/null | grep -q "Solid State"; then
echo "SATA SSD detected, optimizing..."
echo deadline > /sys/block/sda/queue/scheduler 2>/dev/null || true
fi
fi
}
# Run detection
detect_hardware
optimize_for_hardware

View File

@ -1,26 +0,0 @@
# Hardware profile for HP ProDesk 400 G4 DM
# Auto-generated during build
[hardware]
target = "hp-prodesk"
name = "HP ProDesk 400 G4 DM"
cpu_vendor = "intel"
cpu_model = "varies"
min_ram = "8GB"
min_storage = "128GB"
architecture = "x86_64"
[optimizations]
enabled = intel-graphics intel-networking sata-ssd
[network]
interfaces = "1x Gigabit Ethernet"
[usb]
ports = "4x USB 3.0, 2x USB 2.0"
[build]
version = "0.1.0"
alpine_version = "3.19"
build_date = "2026-01-31T20:40:39Z"
build_type = "iso"

View File

@ -1,21 +0,0 @@
#!/bin/sh
# First boot hardware detection and optimization
HARDWARE_INFO="/etc/archipelago/hardware-info.sh"
if [ -x "$HARDWARE_INFO" ]; then
echo "🔍 Detecting hardware..."
$HARDWARE_INFO > /var/log/archipelago-hardware.log 2>&1
echo "✓ Hardware detection complete"
fi
# Create system info file
cat > /etc/archipelago/system-info.txt <<INFO
Archipelago OS System Information
Generated: $(date)
$(cat /etc/archipelago/hardware.toml 2>/dev/null)
Runtime Detection:
$(cat /var/log/archipelago-hardware.log 2>/dev/null)
INFO

View File

@ -1,38 +0,0 @@
# Archipelago Node OS Configuration
[server]
# Server listening configuration
host = "0.0.0.0" # Listen on all interfaces
port = 8100
data_dir = "/var/lib/archipelago"
[network]
# Automatic Ethernet configuration
auto_configure = true
dhcp = true
dns_servers = ["8.8.8.8", "8.8.4.4", "1.1.1.1"]
[containers]
# Container runtime (Podman)
runtime = "podman"
rootless = true
auto_start = true
[apps]
# App directory
apps_dir = "/var/lib/archipelago/apps"
auto_start_enabled = true
[security]
# Security settings
require_auth = false # Disable for first boot, enable after setup
secrets_dir = "/var/lib/archipelago/secrets"
[logging]
level = "info"
dir = "/var/lib/archipelago/logs"
[ui]
# Web UI settings
enabled = true
path = "/usr/share/archipelago/web"

View File

@ -1,71 +0,0 @@
#!/bin/sh
# Hardware detection and optimization script
# Auto-generated for specific hardware target
detect_hardware() {
echo "=== Hardware Detection ==="
# CPU info
if [ -f /proc/cpuinfo ]; then
echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d':' -f2 | xargs)"
echo "Cores: $(grep -c processor /proc/cpuinfo)"
fi
# Memory
if [ -f /proc/meminfo ]; then
echo "Memory: $(grep MemTotal /proc/meminfo | awk '{printf "%.1f GB", $2/1024/1024}')"
fi
# Storage
if command -v lsblk >/dev/null 2>&1; then
echo "Storage:"
lsblk -d -o NAME,SIZE,TYPE | grep disk
fi
# Network
if command -v ip >/dev/null 2>&1; then
echo "Network interfaces:"
ip -br link show | grep -v lo
fi
# PCI devices (for hardware identification)
if command -v lspci >/dev/null 2>&1; then
echo "PCI devices:"
lspci | grep -E "VGA|Ethernet|Network"
fi
}
optimize_for_hardware() {
echo "=== Hardware Optimization ==="
# Load Intel microcode if Intel CPU
if grep -q Intel /proc/cpuinfo; then
echo "Intel CPU detected, loading microcode..."
modprobe intel_rapl_common 2>/dev/null || true
modprobe intel_powerclamp 2>/dev/null || true
fi
# Enable hardware acceleration for graphics
if lspci | grep -q "Intel.*Graphics"; then
echo "Intel Graphics detected"
modprobe i915 2>/dev/null || true
fi
# Optimize for NVMe if present
if [ -e /dev/nvme0n1 ]; then
echo "NVMe SSD detected, optimizing..."
echo none > /sys/block/nvme0n1/queue/scheduler 2>/dev/null || true
fi
# Optimize for SATA SSD if present
if [ -e /dev/sda ]; then
if hdparm -I /dev/sda 2>/dev/null | grep -q "Solid State"; then
echo "SATA SSD detected, optimizing..."
echo deadline > /sys/block/sda/queue/scheduler 2>/dev/null || true
fi
fi
}
# Run detection
detect_hardware
optimize_for_hardware

View File

@ -1,26 +0,0 @@
# Hardware profile for HP ProDesk 400 G4 DM
# Auto-generated during build
[hardware]
target = "hp-prodesk"
name = "HP ProDesk 400 G4 DM"
cpu_vendor = "intel"
cpu_model = "varies"
min_ram = "8GB"
min_storage = "128GB"
architecture = "x86_64"
[optimizations]
enabled = intel-graphics intel-networking sata-ssd
[network]
interfaces = "1x Gigabit Ethernet"
[usb]
ports = "4x USB 3.0, 2x USB 2.0"
[build]
version = "0.1.0"
alpine_version = "3.19"
build_date = "2026-01-31T20:40:39Z"
build_type = "iso"

View File

@ -1 +0,0 @@
archipelago

View File

@ -1,4 +0,0 @@
127.0.0.1 localhost archipelago
::1 localhost archipelago ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

View File

@ -1,52 +0,0 @@
#!/sbin/openrc-run
# Archipelago Bitcoin Node OS Backend
name="Archipelago"
description="Archipelago Bitcoin Node OS Backend Server"
command="/usr/bin/archipelago-backend"
command_user="archipelago:archipelago"
command_background=true
pidfile="/var/run/archipelago.pid"
start_stop_daemon_args="--make-pidfile"
# Working directory and environment
directory="/var/lib/archipelago"
export RUST_LOG="${RUST_LOG:-info}"
export ARCHIPELAGO_DATA_DIR="/var/lib/archipelago"
export ARCHIPELAGO_PORT="${ARCHIPELAGO_PORT:-8100}"
depend() {
need net
need localmount
after firewall
use podman docker
}
start_pre() {
# Ensure directories exist
checkpath --directory --mode 0755 --owner archipelago:archipelago \
/var/lib/archipelago \
/var/lib/archipelago/apps \
/var/lib/archipelago/secrets \
/var/lib/archipelago/logs \
/var/lib/archipelago/backups
# Wait for network to be fully ready
local retries=30
while [ $retries -gt 0 ]; do
if ping -c 1 -W 1 8.8.8.8 >/dev/null 2>&1; then
einfo "Network is ready"
return 0
fi
retries=$((retries - 1))
sleep 1
done
ewarn "Network may not be fully ready"
return 0
}
start_post() {
einfo "Archipelago backend started"
einfo "Access the UI at: http://$(hostname -I | awk '{print $1}'):8100"
}

View File

@ -1,32 +0,0 @@
#!/bin/sh
# Alpine Linux boot configuration for Archipelago
# This runs early in the boot process
# Enable essential services
rc-update add devfs sysinit 2>/dev/null || true
rc-update add dmesg sysinit 2>/dev/null || true
rc-update add mdev sysinit 2>/dev/null || true
rc-update add hwdrivers sysinit 2>/dev/null || true
# Enable boot services
rc-update add bootmisc boot 2>/dev/null || true
rc-update add hostname boot 2>/dev/null || true
rc-update add hwclock boot 2>/dev/null || true
rc-update add modules boot 2>/dev/null || true
rc-update add swap boot 2>/dev/null || true
rc-update add sysctl boot 2>/dev/null || true
rc-update add syslog boot 2>/dev/null || true
rc-update add networking boot 2>/dev/null || true
rc-update add urandom boot 2>/dev/null || true
# Enable default services
rc-update add local default 2>/dev/null || true
rc-update add sshd default 2>/dev/null || true
rc-update add archipelago default 2>/dev/null || true
# Enable shutdown services
rc-update add killprocs shutdown 2>/dev/null || true
rc-update add mount-ro shutdown 2>/dev/null || true
rc-update add savecache shutdown 2>/dev/null || true
echo "✓ Archipelago boot services configured"

View File

@ -1,21 +0,0 @@
#!/bin/sh
# First boot hardware detection and optimization
HARDWARE_INFO="/etc/archipelago/hardware-info.sh"
if [ -x "$HARDWARE_INFO" ]; then
echo "🔍 Detecting hardware..."
$HARDWARE_INFO > /var/log/archipelago-hardware.log 2>&1
echo "✓ Hardware detection complete"
fi
# Create system info file
cat > /etc/archipelago/system-info.txt <<INFO
Archipelago OS System Information
Generated: $(date)
$(cat /etc/archipelago/hardware.toml 2>/dev/null)
Runtime Detection:
$(cat /var/log/archipelago-hardware.log 2>/dev/null)
INFO

View File

@ -1,88 +0,0 @@
#!/bin/sh
# First boot network and service setup for Archipelago
# Configure hostname
if [ ! -f /etc/hostname.configured ]; then
echo "archipelago-node" > /etc/hostname
hostname archipelago-node
touch /etc/hostname.configured
fi
# Configure networking - Ethernet with DHCP
if [ ! -f /etc/network/interfaces.configured ]; then
cat > /etc/network/interfaces <<'NETEOF'
auto lo
iface lo inet loopback
# Automatic Ethernet configuration (DHCP)
auto eth0
iface eth0 inet dhcp
hostname archipelago-node
# Fallback for other ethernet names
auto enp0s3
iface enp0s3 inet dhcp
hostname archipelago-node
auto enp0s25
iface enp0s25 inet dhcp
hostname archipelago-node
auto ens0
iface ens0 inet dhcp
hostname archipelago-node
NETEOF
touch /etc/network/interfaces.configured
fi
# Enable and start networking
rc-update add networking boot 2>/dev/null || true
rc-service networking start 2>/dev/null || true
# Wait for network to be ready
echo "Waiting for network..."
retries=30
while [ $retries -gt 0 ]; do
if ip route | grep -q default; then
echo "✓ Network is ready"
ip addr show | grep "inet " | grep -v "127.0.0.1"
break
fi
retries=$((retries - 1))
sleep 1
done
# Enable DNS
if [ ! -f /etc/resolv.conf.configured ]; then
cat > /etc/resolv.conf <<'DNSEOF'
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
DNSEOF
touch /etc/resolv.conf.configured
fi
# Test internet connectivity
echo "Testing internet connectivity..."
if ping -c 2 8.8.8.8 >/dev/null 2>&1; then
echo "✓ Internet connection established"
else
echo "⚠ Warning: No internet connection detected"
fi
# Enable Archipelago service
rc-update add archipelago default 2>/dev/null || true
# Display access information
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🏝️ Archipelago Bitcoin Node OS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Network Configuration:"
ip -4 addr show | grep inet | grep -v 127.0.0.1 | awk '{print " IP Address: " $2}'
echo ""
echo "Access the Archipelago UI at:"
ip -4 addr show | grep inet | grep -v 127.0.0.1 | awk '{print " http://" $2}' | sed 's|/.*|:8100|'
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

View File

@ -1,44 +0,0 @@
#!/bin/sh
# First boot installation script for Archipelago
# This script runs on first boot to complete Archipelago setup
set -e
echo "🚀 Archipelago first boot setup..."
# Install backend APK if available
if [ -f /tmp/archipelago-backend.apk ]; then
echo "📦 Installing Archipelago backend..."
apk add --allow-untrusted /tmp/archipelago-backend.apk || true
rm -f /tmp/archipelago-backend.apk
fi
# Create archipelago user if needed
if ! id archipelago >/dev/null 2>&1; then
echo "👤 Creating archipelago user..."
adduser -D -s /bin/bash archipelago || true
echo "archipelago ALL=(ALL) NOPASSWD: /usr/bin/podman" >> /etc/sudoers || true
fi
# Setup Podman for archipelago user
echo "🐳 Configuring Podman..."
mkdir -p /home/archipelago/.config/containers
chown -R archipelago:archipelago /home/archipelago || true
# Create data directories
echo "📁 Creating data directories..."
mkdir -p /var/lib/archipelago/{apps,secrets,logs,backups}
chown -R archipelago:archipelago /var/lib/archipelago || true
# Enable services
echo "⚙️ Enabling services..."
rc-update add archipelago default 2>/dev/null || true
systemctl enable archipelago 2>/dev/null || true
# Start services
echo "🚀 Starting services..."
rc-service archipelago start 2>/dev/null || systemctl start archipelago 2>/dev/null || true
echo "✅ Archipelago setup complete!"
echo " Web UI: http://$(hostname -I | awk '{print $1}'):8100"
echo " API: http://$(hostname -I | awk '{print $1}'):5959"

View File

@ -1,29 +0,0 @@
[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

View File

@ -1,71 +0,0 @@
#!/bin/sh
# Hardware detection and optimization script
# Auto-generated for specific hardware target
detect_hardware() {
echo "=== Hardware Detection ==="
# CPU info
if [ -f /proc/cpuinfo ]; then
echo "CPU: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d':' -f2 | xargs)"
echo "Cores: $(grep -c processor /proc/cpuinfo)"
fi
# Memory
if [ -f /proc/meminfo ]; then
echo "Memory: $(grep MemTotal /proc/meminfo | awk '{printf "%.1f GB", $2/1024/1024}')"
fi
# Storage
if command -v lsblk >/dev/null 2>&1; then
echo "Storage:"
lsblk -d -o NAME,SIZE,TYPE | grep disk
fi
# Network
if command -v ip >/dev/null 2>&1; then
echo "Network interfaces:"
ip -br link show | grep -v lo
fi
# PCI devices (for hardware identification)
if command -v lspci >/dev/null 2>&1; then
echo "PCI devices:"
lspci | grep -E "VGA|Ethernet|Network"
fi
}
optimize_for_hardware() {
echo "=== Hardware Optimization ==="
# Load Intel microcode if Intel CPU
if grep -q Intel /proc/cpuinfo; then
echo "Intel CPU detected, loading microcode..."
modprobe intel_rapl_common 2>/dev/null || true
modprobe intel_powerclamp 2>/dev/null || true
fi
# Enable hardware acceleration for graphics
if lspci | grep -q "Intel.*Graphics"; then
echo "Intel Graphics detected"
modprobe i915 2>/dev/null || true
fi
# Optimize for NVMe if present
if [ -e /dev/nvme0n1 ]; then
echo "NVMe SSD detected, optimizing..."
echo none > /sys/block/nvme0n1/queue/scheduler 2>/dev/null || true
fi
# Optimize for SATA SSD if present
if [ -e /dev/sda ]; then
if hdparm -I /dev/sda 2>/dev/null | grep -q "Solid State"; then
echo "SATA SSD detected, optimizing..."
echo deadline > /sys/block/sda/queue/scheduler 2>/dev/null || true
fi
fi
}
# Run detection
detect_hardware
optimize_for_hardware

View File

@ -1,26 +0,0 @@
# Hardware profile for Start9 Server Pure
# Auto-generated during build
[hardware]
target = "start9-pure"
name = "Start9 Server Pure"
cpu_vendor = "intel"
cpu_model = "i7-10710U"
min_ram = "32GB"
min_storage = "2TB"
architecture = "x86_64"
[optimizations]
enabled = intel-graphics intel-networking nvme-ssd
[network]
interfaces = "1x Gigabit Ethernet"
[usb]
ports = "4x USB 3.0, 2x USB 2.0, 1x USB-C 3.1"
[build]
version = "0.1.0"
alpine_version = "3.19"
build_date = "2026-01-31T20:20:26Z"
build_type = "iso"

View File

@ -1,21 +0,0 @@
#!/bin/sh
# First boot hardware detection and optimization
HARDWARE_INFO="/etc/archipelago/hardware-info.sh"
if [ -x "$HARDWARE_INFO" ]; then
echo "🔍 Detecting hardware..."
$HARDWARE_INFO > /var/log/archipelago-hardware.log 2>&1
echo "✓ Hardware detection complete"
fi
# Create system info file
cat > /etc/archipelago/system-info.txt <<INFO
Archipelago OS System Information
Generated: $(date)
$(cat /etc/archipelago/hardware.toml 2>/dev/null)
Runtime Detection:
$(cat /var/log/archipelago-hardware.log 2>/dev/null)
INFO

View File

@ -1,38 +0,0 @@
# Archipelago Node OS Configuration
[server]
# Server listening configuration
host = "0.0.0.0" # Listen on all interfaces
port = 8100
data_dir = "/var/lib/archipelago"
[network]
# Automatic Ethernet configuration
auto_configure = true
dhcp = true
dns_servers = ["8.8.8.8", "8.8.4.4", "1.1.1.1"]
[containers]
# Container runtime (Podman)
runtime = "podman"
rootless = true
auto_start = true
[apps]
# App directory
apps_dir = "/var/lib/archipelago/apps"
auto_start_enabled = true
[security]
# Security settings
require_auth = false # Disable for first boot, enable after setup
secrets_dir = "/var/lib/archipelago/secrets"
[logging]
level = "info"
dir = "/var/lib/archipelago/logs"
[ui]
# Web UI settings
enabled = true
path = "/usr/share/archipelago/web"

View File

@ -1 +0,0 @@
archipelago

View File

@ -1,4 +0,0 @@
127.0.0.1 localhost archipelago
::1 localhost archipelago ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

View File

@ -1,52 +0,0 @@
#!/sbin/openrc-run
# Archipelago Bitcoin Node OS Backend
name="Archipelago"
description="Archipelago Bitcoin Node OS Backend Server"
command="/usr/bin/archipelago-backend"
command_user="archipelago:archipelago"
command_background=true
pidfile="/var/run/archipelago.pid"
start_stop_daemon_args="--make-pidfile"
# Working directory and environment
directory="/var/lib/archipelago"
export RUST_LOG="${RUST_LOG:-info}"
export ARCHIPELAGO_DATA_DIR="/var/lib/archipelago"
export ARCHIPELAGO_PORT="${ARCHIPELAGO_PORT:-8100}"
depend() {
need net
need localmount
after firewall
use podman docker
}
start_pre() {
# Ensure directories exist
checkpath --directory --mode 0755 --owner archipelago:archipelago \
/var/lib/archipelago \
/var/lib/archipelago/apps \
/var/lib/archipelago/secrets \
/var/lib/archipelago/logs \
/var/lib/archipelago/backups
# Wait for network to be fully ready
local retries=30
while [ $retries -gt 0 ]; do
if ping -c 1 -W 1 8.8.8.8 >/dev/null 2>&1; then
einfo "Network is ready"
return 0
fi
retries=$((retries - 1))
sleep 1
done
ewarn "Network may not be fully ready"
return 0
}
start_post() {
einfo "Archipelago backend started"
einfo "Access the UI at: http://$(hostname -I | awk '{print $1}'):8100"
}

Some files were not shown because too many files have changed in this diff Show More