From c9722a34f61ede272d81f386315f3f7232d01336 Mon Sep 17 00:00:00 2001 From: Dorian Date: Sun, 1 Feb 2026 02:22:02 +0000 Subject: [PATCH] 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. --- .cursor/rules/Architecture.mdc | 44 +- .gitignore | 14 + AUTH_LOGIN_FIX.md | 127 ----- AUTOBOOT_CONFIGURATION.md | 372 -------------- BACKEND_FIXES.md | 94 ---- BACKEND_STARTUP_FIX.md | 117 ----- BITCOIN_CORE_HEADLESS_FIX.md | 184 ------- BITCOIN_CORE_UI_COMPLETE.md | 183 ------- BITCOIN_STANDALONE_UI_COMPLETE.md | 112 ----- BITCOIN_UI_COMPLETE.md | 184 ------- BOOT_SEQUENCE_DIAGRAM.txt | 225 --------- BUILDING_COMPLETE_OS.md | 131 ----- BUILD_COMMANDS_REFERENCE.txt | 279 ----------- BUILD_COMPLETE.md | 85 ---- BUILD_COMPLETE_HP_PRODESK.md | 227 --------- BUILD_MACOS.md | 239 --------- BUILD_QUICK_REFERENCE.md | 135 ----- BUILD_SOLUTION.md | 83 ---- CACHE_FIX_NEEDED.md | 62 --- CODE_QUALITY_IMPROVEMENTS.md | 85 ---- COMPLETE_FIX_SUMMARY.md | 164 ------- COMPLETE_WITH_MANIFESTS.md | 279 ----------- DEPLOYMENT_CHECKLIST.md | 225 --------- DEV_MODE_2_DOCKER_FIX.md | 121 ----- DISK_SPACE_CLEANUP_REPORT.md | 266 ---------- DOCKER_DEV_SETUP.md | 302 ------------ DOCKER_HEALTH_CHECK_FIX.md | 111 ----- DOCKER_INTEGRATION_COMPLETE.md | 161 ------ DOCKER_MIGRATION_COMPLETE.md | 188 ------- DOCKER_SETUP_COMPLETE.md | 297 ----------- EMERGENCY_BOOT_COMMANDS.txt | 33 -- FINAL_FIX.md | 44 -- FIXED_BOOT_ISSUE.md | 127 ----- FRONTEND_IMPORT_FIX.md | 68 --- FULL_STACK_DOCKER_COMPLETE.md | 206 -------- GETTING_STARTED.md | 335 ------------- HP_PRODESK_BUILD_SUCCESS.md | 205 -------- HP_PRODESK_UEFI_BOOT.md | 185 ------- HYPER_014_FIXES.md | 45 -- IMPLEMENTATION_COMPLETE.md | 450 ----------------- INSTALLATION_CHECKLIST.md | 216 -------- INSTALLATION_SUCCESS.md | 160 ------ INSTALLATION_SUMMARY.md | 278 ----------- LND_UI_AND_FIXES_COMPLETE.md | 118 ----- MULTI_HARDWARE_BUILD_SYSTEM.md | 430 ---------------- MY_APPS_LIST.md | 242 --------- NEW_OVERLAY_ISO.md | 189 ------- NEXT_STEPS.md | 286 ----------- PRODUCTION_BUILD_SUMMARY.md | 423 ---------------- QEMU_TESTING_SETUP.md | 148 ------ QUICKSTART.md | 293 ----------- QUICK_REFERENCE.md | 322 ------------ QUICK_REFERENCE_DOCKER.md | 160 ------ README.md | 24 +- READY_TO_BUILD_CHECKLIST.md | 355 -------------- READY_TO_FLASH.md | 273 ----------- REAL_DOCKER_COMPLETE.md | 123 ----- SETUP_GUIDE.md | 326 ------------- START9_SERVER_PURE_BUILD.md | 415 ---------------- STARTOS_REMOVAL_COMPLETE.md | 184 ------- START_STOP_LAUNCH_COMPLETE.md | 217 --------- build-backend.sh | 91 ---- clean-rebuild.sh | 52 -- complete-setup.sh | 52 -- docs/architecture.md | 33 +- docs/building-os-images.md | 253 +++------- fix-and-build.sh | 76 --- image-recipe/BUILD_STATUS.md | 118 ----- image-recipe/COMPLETION_CHECKLIST.md | 93 ---- image-recipe/Dockerfile.alpine-base | 93 ---- image-recipe/Dockerfile.build | 41 -- image-recipe/FINAL_STATUS.md | 172 ------- image-recipe/GETTING_STARTED.md | 127 ----- image-recipe/QUICK-REFERENCE.md | 316 ------------ image-recipe/README-HARDWARE-BUILDS.md | 412 ---------------- image-recipe/README.md | 68 ++- image-recipe/SUMMARY.md | 141 ------ image-recipe/alpine-profile/README.md | 33 -- .../alpine-profile/mkimg.archipelago.sh | 24 - .../etc/archipelago/hardware-info.sh | 71 --- .../etc/archipelago/hardware.toml | 26 - .../etc/local.d/00-hardware-detect.start | 21 - .../etc/archipelago/config.toml | 38 -- .../etc/archipelago/hardware-info.sh | 71 --- .../etc/archipelago/hardware.toml | 26 - .../overlay-merged/etc/hostname | 1 - .../alpine-profile/overlay-merged/etc/hosts | 4 - .../overlay-merged/etc/init.d/archipelago | 52 -- .../etc/local.d/00-boot-services.start | 32 -- .../etc/local.d/00-hardware-detect.start | 21 - .../etc/local.d/01-network-setup.start | 88 ---- .../etc/local.d/archipelago-install.start | 44 -- .../etc/systemd/system/archipelago.service | 29 -- .../etc/archipelago/hardware-info.sh | 71 --- .../etc/archipelago/hardware.toml | 26 - .../etc/local.d/00-hardware-detect.start | 21 - .../overlay/etc/archipelago/config.toml | 38 -- .../alpine-profile/overlay/etc/hostname | 1 - image-recipe/alpine-profile/overlay/etc/hosts | 4 - .../overlay/etc/init.d/archipelago | 52 -- .../etc/local.d/00-boot-services.start | 32 -- .../etc/local.d/01-network-setup.start | 88 ---- .../etc/local.d/archipelago-install.start | 44 -- .../etc/systemd/system/archipelago.service | 29 -- image-recipe/aports | 1 - .../archipelago-scripts/archipelago-menu.sh | 311 ++++++++++++ .../archipelago-scripts/install-to-disk.sh | 273 +++++++++++ .../archipelago-scripts/setup-bitcoin.sh | 149 ++++++ image-recipe/archipelago-scripts/setup-lnd.sh | 160 ++++++ .../archipelago-scripts/simple-api-server.py | 132 +++++ .../archipelago-scripts/start-web-ui.sh | 72 +++ image-recipe/build-all-hardware.sh | 72 --- image-recipe/build-alpine-iso.sh | 75 --- image-recipe/build-alpine-native.sh | 118 ----- image-recipe/build-alpine.sh | 41 -- image-recipe/build-backend.sh | 45 -- image-recipe/build-custom-iso.sh | 461 ------------------ image-recipe/build-debian-iso.sh | 437 +++++++++++++++++ image-recipe/build-for-hardware.sh | 368 -------------- image-recipe/build-linux.sh | 57 --- image-recipe/build-macos.sh | 57 --- image-recipe/build-overlay-iso.sh | 356 -------------- image-recipe/create-bootable-usb.sh | 114 ----- image-recipe/create-fat32-usb.sh | 90 ++++ image-recipe/create-usb-boot.sh | 61 --- image-recipe/create-usb-simple.sh | 84 ---- image-recipe/scripts/README.md | 33 +- image-recipe/scripts/build-backend.sh | 74 +-- image-recipe/scripts/check-dependencies.sh | 69 +-- image-recipe/scripts/create-backend-apk.sh | 132 ----- image-recipe/scripts/harden-alpine.sh | 118 ----- image-recipe/scripts/install-archipelago.sh | 93 ---- image-recipe/scripts/setup-alpine-build.sh | 57 --- image-recipe/test-iso-qemu.sh | 50 +- image-recipe/test-start9-build.sh | 132 ----- image-recipe/write-usb-dd.sh | 69 +++ install-docker-desktop.sh | 37 -- install-docker.sh | 95 ---- rebuild-backend.sh | 49 -- ...{optimize-alpine.sh => optimize-debian.sh} | 22 +- setup-env.sh | 25 - test-docker-setup.sh | 22 - verify-install.sh | 163 ------- 143 files changed, 2036 insertions(+), 17839 deletions(-) delete mode 100644 AUTH_LOGIN_FIX.md delete mode 100644 AUTOBOOT_CONFIGURATION.md delete mode 100644 BACKEND_FIXES.md delete mode 100644 BACKEND_STARTUP_FIX.md delete mode 100644 BITCOIN_CORE_HEADLESS_FIX.md delete mode 100644 BITCOIN_CORE_UI_COMPLETE.md delete mode 100644 BITCOIN_STANDALONE_UI_COMPLETE.md delete mode 100644 BITCOIN_UI_COMPLETE.md delete mode 100644 BOOT_SEQUENCE_DIAGRAM.txt delete mode 100644 BUILDING_COMPLETE_OS.md delete mode 100644 BUILD_COMMANDS_REFERENCE.txt delete mode 100644 BUILD_COMPLETE.md delete mode 100644 BUILD_COMPLETE_HP_PRODESK.md delete mode 100644 BUILD_MACOS.md delete mode 100644 BUILD_QUICK_REFERENCE.md delete mode 100644 BUILD_SOLUTION.md delete mode 100644 CACHE_FIX_NEEDED.md delete mode 100644 CODE_QUALITY_IMPROVEMENTS.md delete mode 100644 COMPLETE_FIX_SUMMARY.md delete mode 100644 COMPLETE_WITH_MANIFESTS.md delete mode 100644 DEPLOYMENT_CHECKLIST.md delete mode 100644 DEV_MODE_2_DOCKER_FIX.md delete mode 100644 DISK_SPACE_CLEANUP_REPORT.md delete mode 100644 DOCKER_DEV_SETUP.md delete mode 100644 DOCKER_HEALTH_CHECK_FIX.md delete mode 100644 DOCKER_INTEGRATION_COMPLETE.md delete mode 100644 DOCKER_MIGRATION_COMPLETE.md delete mode 100644 DOCKER_SETUP_COMPLETE.md delete mode 100644 EMERGENCY_BOOT_COMMANDS.txt delete mode 100644 FINAL_FIX.md delete mode 100644 FIXED_BOOT_ISSUE.md delete mode 100644 FRONTEND_IMPORT_FIX.md delete mode 100644 FULL_STACK_DOCKER_COMPLETE.md delete mode 100644 GETTING_STARTED.md delete mode 100644 HP_PRODESK_BUILD_SUCCESS.md delete mode 100644 HP_PRODESK_UEFI_BOOT.md delete mode 100644 HYPER_014_FIXES.md delete mode 100644 IMPLEMENTATION_COMPLETE.md delete mode 100644 INSTALLATION_CHECKLIST.md delete mode 100644 INSTALLATION_SUCCESS.md delete mode 100644 INSTALLATION_SUMMARY.md delete mode 100644 LND_UI_AND_FIXES_COMPLETE.md delete mode 100644 MULTI_HARDWARE_BUILD_SYSTEM.md delete mode 100644 MY_APPS_LIST.md delete mode 100644 NEW_OVERLAY_ISO.md delete mode 100644 NEXT_STEPS.md delete mode 100644 PRODUCTION_BUILD_SUMMARY.md delete mode 100644 QEMU_TESTING_SETUP.md delete mode 100644 QUICKSTART.md delete mode 100644 QUICK_REFERENCE.md delete mode 100644 QUICK_REFERENCE_DOCKER.md delete mode 100644 READY_TO_BUILD_CHECKLIST.md delete mode 100644 READY_TO_FLASH.md delete mode 100644 REAL_DOCKER_COMPLETE.md delete mode 100644 SETUP_GUIDE.md delete mode 100644 START9_SERVER_PURE_BUILD.md delete mode 100644 STARTOS_REMOVAL_COMPLETE.md delete mode 100644 START_STOP_LAUNCH_COMPLETE.md delete mode 100755 build-backend.sh delete mode 100755 clean-rebuild.sh delete mode 100755 complete-setup.sh delete mode 100755 fix-and-build.sh delete mode 100644 image-recipe/BUILD_STATUS.md delete mode 100644 image-recipe/COMPLETION_CHECKLIST.md delete mode 100644 image-recipe/Dockerfile.alpine-base delete mode 100644 image-recipe/Dockerfile.build delete mode 100644 image-recipe/FINAL_STATUS.md delete mode 100644 image-recipe/GETTING_STARTED.md delete mode 100644 image-recipe/QUICK-REFERENCE.md delete mode 100644 image-recipe/README-HARDWARE-BUILDS.md delete mode 100644 image-recipe/SUMMARY.md delete mode 100644 image-recipe/alpine-profile/README.md delete mode 100755 image-recipe/alpine-profile/mkimg.archipelago.sh delete mode 100755 image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware-info.sh delete mode 100644 image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware.toml delete mode 100755 image-recipe/alpine-profile/overlay-hp-prodesk/etc/local.d/00-hardware-detect.start delete mode 100644 image-recipe/alpine-profile/overlay-merged/etc/archipelago/config.toml delete mode 100755 image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware-info.sh delete mode 100644 image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware.toml delete mode 100644 image-recipe/alpine-profile/overlay-merged/etc/hostname delete mode 100644 image-recipe/alpine-profile/overlay-merged/etc/hosts delete mode 100755 image-recipe/alpine-profile/overlay-merged/etc/init.d/archipelago delete mode 100755 image-recipe/alpine-profile/overlay-merged/etc/local.d/00-boot-services.start delete mode 100755 image-recipe/alpine-profile/overlay-merged/etc/local.d/00-hardware-detect.start delete mode 100755 image-recipe/alpine-profile/overlay-merged/etc/local.d/01-network-setup.start delete mode 100644 image-recipe/alpine-profile/overlay-merged/etc/local.d/archipelago-install.start delete mode 100644 image-recipe/alpine-profile/overlay-merged/etc/systemd/system/archipelago.service delete mode 100755 image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware-info.sh delete mode 100644 image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware.toml delete mode 100755 image-recipe/alpine-profile/overlay-start9-pure/etc/local.d/00-hardware-detect.start delete mode 100644 image-recipe/alpine-profile/overlay/etc/archipelago/config.toml delete mode 100644 image-recipe/alpine-profile/overlay/etc/hostname delete mode 100644 image-recipe/alpine-profile/overlay/etc/hosts delete mode 100755 image-recipe/alpine-profile/overlay/etc/init.d/archipelago delete mode 100755 image-recipe/alpine-profile/overlay/etc/local.d/00-boot-services.start delete mode 100755 image-recipe/alpine-profile/overlay/etc/local.d/01-network-setup.start delete mode 100644 image-recipe/alpine-profile/overlay/etc/local.d/archipelago-install.start delete mode 100644 image-recipe/alpine-profile/overlay/etc/systemd/system/archipelago.service delete mode 160000 image-recipe/aports create mode 100755 image-recipe/archipelago-scripts/archipelago-menu.sh create mode 100755 image-recipe/archipelago-scripts/install-to-disk.sh create mode 100755 image-recipe/archipelago-scripts/setup-bitcoin.sh create mode 100755 image-recipe/archipelago-scripts/setup-lnd.sh create mode 100644 image-recipe/archipelago-scripts/simple-api-server.py create mode 100755 image-recipe/archipelago-scripts/start-web-ui.sh delete mode 100755 image-recipe/build-all-hardware.sh delete mode 100755 image-recipe/build-alpine-iso.sh delete mode 100755 image-recipe/build-alpine-native.sh delete mode 100755 image-recipe/build-alpine.sh delete mode 100755 image-recipe/build-backend.sh delete mode 100755 image-recipe/build-custom-iso.sh create mode 100755 image-recipe/build-debian-iso.sh delete mode 100755 image-recipe/build-for-hardware.sh delete mode 100755 image-recipe/build-linux.sh delete mode 100755 image-recipe/build-macos.sh delete mode 100755 image-recipe/build-overlay-iso.sh delete mode 100755 image-recipe/create-bootable-usb.sh create mode 100755 image-recipe/create-fat32-usb.sh delete mode 100755 image-recipe/create-usb-boot.sh delete mode 100755 image-recipe/create-usb-simple.sh delete mode 100755 image-recipe/scripts/create-backend-apk.sh delete mode 100755 image-recipe/scripts/harden-alpine.sh delete mode 100755 image-recipe/scripts/install-archipelago.sh delete mode 100755 image-recipe/scripts/setup-alpine-build.sh delete mode 100755 image-recipe/test-start9-build.sh create mode 100755 image-recipe/write-usb-dd.sh delete mode 100755 install-docker-desktop.sh delete mode 100755 install-docker.sh delete mode 100755 rebuild-backend.sh rename scripts/{optimize-alpine.sh => optimize-debian.sh} (66%) mode change 100755 => 100644 delete mode 100755 setup-env.sh delete mode 100755 test-docker-setup.sh delete mode 100755 verify-install.sh diff --git a/.cursor/rules/Architecture.mdc b/.cursor/rules/Architecture.mdc index 49df1bb9..03980207 100644 --- a/.cursor/rules/Architecture.mdc +++ b/.cursor/rules/Architecture.mdc @@ -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) diff --git a/.gitignore b/.gitignore index f2217bfa..ab101ca1 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/AUTH_LOGIN_FIX.md b/AUTH_LOGIN_FIX.md deleted file mode 100644 index aef4624e..00000000 --- a/AUTH_LOGIN_FIX.md +++ /dev/null @@ -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!** 🔐 diff --git a/AUTOBOOT_CONFIGURATION.md b/AUTOBOOT_CONFIGURATION.md deleted file mode 100644 index d263cbb2..00000000 --- a/AUTOBOOT_CONFIGURATION.md +++ /dev/null @@ -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! 🏝️** diff --git a/BACKEND_FIXES.md b/BACKEND_FIXES.md deleted file mode 100644 index 00038e8d..00000000 --- a/BACKEND_FIXES.md +++ /dev/null @@ -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! 🚀 diff --git a/BACKEND_STARTUP_FIX.md b/BACKEND_STARTUP_FIX.md deleted file mode 100644 index aa31b2c5..00000000 --- a/BACKEND_STARTUP_FIX.md +++ /dev/null @@ -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! 🚀 diff --git a/BITCOIN_CORE_HEADLESS_FIX.md b/BITCOIN_CORE_HEADLESS_FIX.md deleted file mode 100644 index 80b83f17..00000000 --- a/BITCOIN_CORE_HEADLESS_FIX.md +++ /dev/null @@ -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 -``` - -## 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 diff --git a/BITCOIN_CORE_UI_COMPLETE.md b/BITCOIN_CORE_UI_COMPLETE.md deleted file mode 100644 index 15f81cb8..00000000 --- a/BITCOIN_CORE_UI_COMPLETE.md +++ /dev/null @@ -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! diff --git a/BITCOIN_STANDALONE_UI_COMPLETE.md b/BITCOIN_STANDALONE_UI_COMPLETE.md deleted file mode 100644 index 8a2851cf..00000000 --- a/BITCOIN_STANDALONE_UI_COMPLETE.md +++ /dev/null @@ -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! diff --git a/BITCOIN_UI_COMPLETE.md b/BITCOIN_UI_COMPLETE.md deleted file mode 100644 index b4d451c1..00000000 --- a/BITCOIN_UI_COMPLETE.md +++ /dev/null @@ -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! diff --git a/BOOT_SEQUENCE_DIAGRAM.txt b/BOOT_SEQUENCE_DIAGRAM.txt deleted file mode 100644 index 20b56a52..00000000 --- a/BOOT_SEQUENCE_DIAGRAM.txt +++ /dev/null @@ -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! 🚀 -``` diff --git a/BUILDING_COMPLETE_OS.md b/BUILDING_COMPLETE_OS.md deleted file mode 100644 index 72d026c0..00000000 --- a/BUILDING_COMPLETE_OS.md +++ /dev/null @@ -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 diff --git a/BUILD_COMMANDS_REFERENCE.txt b/BUILD_COMMANDS_REFERENCE.txt deleted file mode 100644 index b60a6e5b..00000000 --- a/BUILD_COMMANDS_REFERENCE.txt +++ /dev/null @@ -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://: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! - -═══════════════════════════════════════════════════════════════════════════ -``` diff --git a/BUILD_COMPLETE.md b/BUILD_COMPLETE.md deleted file mode 100644 index cb303a0b..00000000 --- a/BUILD_COMPLETE.md +++ /dev/null @@ -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! diff --git a/BUILD_COMPLETE_HP_PRODESK.md b/BUILD_COMPLETE_HP_PRODESK.md deleted file mode 100644 index 80825e6c..00000000 --- a/BUILD_COMPLETE_HP_PRODESK.md +++ /dev/null @@ -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://: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! 🚀 diff --git a/BUILD_MACOS.md b/BUILD_MACOS.md deleted file mode 100644 index 01c8fb97..00000000 --- a/BUILD_MACOS.md +++ /dev/null @@ -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 diff --git a/BUILD_QUICK_REFERENCE.md b/BUILD_QUICK_REFERENCE.md deleted file mode 100644 index 523692af..00000000 --- a/BUILD_QUICK_REFERENCE.md +++ /dev/null @@ -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 diff --git a/BUILD_SOLUTION.md b/BUILD_SOLUTION.md deleted file mode 100644 index 0c1dfbd1..00000000 --- a/BUILD_SOLUTION.md +++ /dev/null @@ -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, // ✅ 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! 🎯 diff --git a/CACHE_FIX_NEEDED.md b/CACHE_FIX_NEEDED.md deleted file mode 100644 index 8f0ff483..00000000 --- a/CACHE_FIX_NEEDED.md +++ /dev/null @@ -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!** diff --git a/CODE_QUALITY_IMPROVEMENTS.md b/CODE_QUALITY_IMPROVEMENTS.md deleted file mode 100644 index 3be23a8a..00000000 --- a/CODE_QUALITY_IMPROVEMENTS.md +++ /dev/null @@ -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! ✅ diff --git a/COMPLETE_FIX_SUMMARY.md b/COMPLETE_FIX_SUMMARY.md deleted file mode 100644 index 04ef8444..00000000 --- a/COMPLETE_FIX_SUMMARY.md +++ /dev/null @@ -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!** 🚀 diff --git a/COMPLETE_WITH_MANIFESTS.md b/COMPLETE_WITH_MANIFESTS.md deleted file mode 100644 index dec77b15..00000000 --- a/COMPLETE_WITH_MANIFESTS.md +++ /dev/null @@ -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! 🚀 diff --git a/DEPLOYMENT_CHECKLIST.md b/DEPLOYMENT_CHECKLIST.md deleted file mode 100644 index 54d8984b..00000000 --- a/DEPLOYMENT_CHECKLIST.md +++ /dev/null @@ -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**: _________________ diff --git a/DEV_MODE_2_DOCKER_FIX.md b/DEV_MODE_2_DOCKER_FIX.md deleted file mode 100644 index 323b6633..00000000 --- a/DEV_MODE_2_DOCKER_FIX.md +++ /dev/null @@ -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 diff --git a/DISK_SPACE_CLEANUP_REPORT.md b/DISK_SPACE_CLEANUP_REPORT.md deleted file mode 100644 index 04f07b8f..00000000 --- a/DISK_SPACE_CLEANUP_REPORT.md +++ /dev/null @@ -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. diff --git a/DOCKER_DEV_SETUP.md b/DOCKER_DEV_SETUP.md deleted file mode 100644 index 5cfb0d2e..00000000 --- a/DOCKER_DEV_SETUP.md +++ /dev/null @@ -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
` - -### 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/) diff --git a/DOCKER_HEALTH_CHECK_FIX.md b/DOCKER_HEALTH_CHECK_FIX.md deleted file mode 100644 index 13ebbf78..00000000 --- a/DOCKER_HEALTH_CHECK_FIX.md +++ /dev/null @@ -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 diff --git a/DOCKER_INTEGRATION_COMPLETE.md b/DOCKER_INTEGRATION_COMPLETE.md deleted file mode 100644 index 40b5170a..00000000 --- a/DOCKER_INTEGRATION_COMPLETE.md +++ /dev/null @@ -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` diff --git a/DOCKER_MIGRATION_COMPLETE.md b/DOCKER_MIGRATION_COMPLETE.md deleted file mode 100644 index 49be6729..00000000 --- a/DOCKER_MIGRATION_COMPLETE.md +++ /dev/null @@ -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. diff --git a/DOCKER_SETUP_COMPLETE.md b/DOCKER_SETUP_COMPLETE.md deleted file mode 100644 index 24b1797e..00000000 --- a/DOCKER_SETUP_COMPLETE.md +++ /dev/null @@ -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** diff --git a/EMERGENCY_BOOT_COMMANDS.txt b/EMERGENCY_BOOT_COMMANDS.txt deleted file mode 100644 index 2354cb39..00000000 --- a/EMERGENCY_BOOT_COMMANDS.txt +++ /dev/null @@ -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 diff --git a/FINAL_FIX.md b/FINAL_FIX.md deleted file mode 100644 index d3931af8..00000000 --- a/FINAL_FIX.md +++ /dev/null @@ -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` → `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!** diff --git a/FIXED_BOOT_ISSUE.md b/FIXED_BOOT_ISSUE.md deleted file mode 100644 index 9d191da1..00000000 --- a/FIXED_BOOT_ISSUE.md +++ /dev/null @@ -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://: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. diff --git a/FRONTEND_IMPORT_FIX.md b/FRONTEND_IMPORT_FIX.md deleted file mode 100644 index afbf7711..00000000 --- a/FRONTEND_IMPORT_FIX.md +++ /dev/null @@ -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 diff --git a/FULL_STACK_DOCKER_COMPLETE.md b/FULL_STACK_DOCKER_COMPLETE.md deleted file mode 100644 index 275c8f89..00000000 --- a/FULL_STACK_DOCKER_COMPLETE.md +++ /dev/null @@ -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! -``` diff --git a/GETTING_STARTED.md b/GETTING_STARTED.md deleted file mode 100644 index 414c7226..00000000 --- a/GETTING_STARTED.md +++ /dev/null @@ -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`! 🚀** diff --git a/HP_PRODESK_BUILD_SUCCESS.md b/HP_PRODESK_BUILD_SUCCESS.md deleted file mode 100644 index 91269045..00000000 --- a/HP_PRODESK_BUILD_SUCCESS.md +++ /dev/null @@ -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!** diff --git a/HP_PRODESK_UEFI_BOOT.md b/HP_PRODESK_UEFI_BOOT.md deleted file mode 100644 index 3df178b6..00000000 --- a/HP_PRODESK_UEFI_BOOT.md +++ /dev/null @@ -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: "** ← 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: -``` - -## 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://: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://: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! diff --git a/HYPER_014_FIXES.md b/HYPER_014_FIXES.md deleted file mode 100644 index d9259f7b..00000000 --- a/HYPER_014_FIXES.md +++ /dev/null @@ -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` instead of `Response>` - -### 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. diff --git a/IMPLEMENTATION_COMPLETE.md b/IMPLEMENTATION_COMPLETE.md deleted file mode 100644 index 0a3e3a75..00000000 --- a/IMPLEMENTATION_COMPLETE.md +++ /dev/null @@ -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!** diff --git a/INSTALLATION_CHECKLIST.md b/INSTALLATION_CHECKLIST.md deleted file mode 100644 index 1ce093bc..00000000 --- a/INSTALLATION_CHECKLIST.md +++ /dev/null @@ -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! 🚀 diff --git a/INSTALLATION_SUCCESS.md b/INSTALLATION_SUCCESS.md deleted file mode 100644 index d4b9984f..00000000 --- a/INSTALLATION_SUCCESS.md +++ /dev/null @@ -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!** 🚀 diff --git a/INSTALLATION_SUMMARY.md b/INSTALLATION_SUMMARY.md deleted file mode 100644 index 0825a019..00000000 --- a/INSTALLATION_SUMMARY.md +++ /dev/null @@ -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 diff --git a/LND_UI_AND_FIXES_COMPLETE.md b/LND_UI_AND_FIXES_COMPLETE.md deleted file mode 100644 index 3c9417a7..00000000 --- a/LND_UI_AND_FIXES_COMPLETE.md +++ /dev/null @@ -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! diff --git a/MULTI_HARDWARE_BUILD_SYSTEM.md b/MULTI_HARDWARE_BUILD_SYSTEM.md deleted file mode 100644 index ece6c81a..00000000 --- a/MULTI_HARDWARE_BUILD_SYSTEM.md +++ /dev/null @@ -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_.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!* diff --git a/MY_APPS_LIST.md b/MY_APPS_LIST.md deleted file mode 100644 index 0326963d..00000000 --- a/MY_APPS_LIST.md +++ /dev/null @@ -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 diff --git a/NEW_OVERLAY_ISO.md b/NEW_OVERLAY_ISO.md deleted file mode 100644 index d6e8c489..00000000 --- a/NEW_OVERLAY_ISO.md +++ /dev/null @@ -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://: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! diff --git a/NEXT_STEPS.md b/NEXT_STEPS.md deleted file mode 100644 index 97856cb3..00000000 --- a/NEXT_STEPS.md +++ /dev/null @@ -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! diff --git a/PRODUCTION_BUILD_SUMMARY.md b/PRODUCTION_BUILD_SUMMARY.md deleted file mode 100644 index 917cabb9..00000000 --- a/PRODUCTION_BUILD_SUMMARY.md +++ /dev/null @@ -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! diff --git a/QEMU_TESTING_SETUP.md b/QEMU_TESTING_SETUP.md deleted file mode 100644 index e422028c..00000000 --- a/QEMU_TESTING_SETUP.md +++ /dev/null @@ -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. 🚀 diff --git a/QUICKSTART.md b/QUICKSTART.md deleted file mode 100644 index 51968fe2..00000000 --- a/QUICKSTART.md +++ /dev/null @@ -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. diff --git a/QUICK_REFERENCE.md b/QUICK_REFERENCE.md deleted file mode 100644 index e02cd157..00000000 --- a/QUICK_REFERENCE.md +++ /dev/null @@ -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 -``` - -### 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 - ``` - -## 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 diff --git a/QUICK_REFERENCE_DOCKER.md b/QUICK_REFERENCE_DOCKER.md deleted file mode 100644 index 961fcb6c..00000000 --- a/QUICK_REFERENCE_DOCKER.md +++ /dev/null @@ -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)** diff --git a/README.md b/README.md index 9ce1e96f..2f46491d 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/READY_TO_BUILD_CHECKLIST.md b/READY_TO_BUILD_CHECKLIST.md deleted file mode 100644 index 3260ef11..00000000 --- a/READY_TO_BUILD_CHECKLIST.md +++ /dev/null @@ -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!** diff --git a/READY_TO_FLASH.md b/READY_TO_FLASH.md deleted file mode 100644 index 1a719dde..00000000 --- a/READY_TO_FLASH.md +++ /dev/null @@ -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 diff --git a/REAL_DOCKER_COMPLETE.md b/REAL_DOCKER_COMPLETE.md deleted file mode 100644 index 4e6f9ee6..00000000 --- a/REAL_DOCKER_COMPLETE.md +++ /dev/null @@ -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 diff --git a/SETUP_GUIDE.md b/SETUP_GUIDE.md deleted file mode 100644 index 7284f4d9..00000000 --- a/SETUP_GUIDE.md +++ /dev/null @@ -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 diff --git a/START9_SERVER_PURE_BUILD.md b/START9_SERVER_PURE_BUILD.md deleted file mode 100644 index 14cc25fb..00000000 --- a/START9_SERVER_PURE_BUILD.md +++ /dev/null @@ -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://: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!** diff --git a/STARTOS_REMOVAL_COMPLETE.md b/STARTOS_REMOVAL_COMPLETE.md deleted file mode 100644 index e11b65bf..00000000 --- a/STARTOS_REMOVAL_COMPLETE.md +++ /dev/null @@ -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 diff --git a/START_STOP_LAUNCH_COMPLETE.md b/START_STOP_LAUNCH_COMPLETE.md deleted file mode 100644 index 4cd5b161..00000000 --- a/START_STOP_LAUNCH_COMPLETE.md +++ /dev/null @@ -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 -``` diff --git a/build-backend.sh b/build-backend.sh deleted file mode 100755 index 90810695..00000000 --- a/build-backend.sh +++ /dev/null @@ -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 diff --git a/clean-rebuild.sh b/clean-rebuild.sh deleted file mode 100755 index 77bb92f3..00000000 --- a/clean-rebuild.sh +++ /dev/null @@ -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 diff --git a/complete-setup.sh b/complete-setup.sh deleted file mode 100755 index 4991953d..00000000 --- a/complete-setup.sh +++ /dev/null @@ -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 "" diff --git a/docs/architecture.md b/docs/architecture.md index 87383ee5..159df983 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -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 diff --git a/docs/building-os-images.md b/docs/building-os-images.md index d52c80d8..198683c0 100644 --- a/docs/building-os-images.md +++ b/docs/building-os-images.md @@ -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) diff --git a/fix-and-build.sh b/fix-and-build.sh deleted file mode 100755 index 71d92586..00000000 --- a/fix-and-build.sh +++ /dev/null @@ -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 diff --git a/image-recipe/BUILD_STATUS.md b/image-recipe/BUILD_STATUS.md deleted file mode 100644 index 252e8bde..00000000 --- a/image-recipe/BUILD_STATUS.md +++ /dev/null @@ -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 -``` diff --git a/image-recipe/COMPLETION_CHECKLIST.md b/image-recipe/COMPLETION_CHECKLIST.md deleted file mode 100644 index 0f95e517..00000000 --- a/image-recipe/COMPLETION_CHECKLIST.md +++ /dev/null @@ -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 diff --git a/image-recipe/Dockerfile.alpine-base b/image-recipe/Dockerfile.alpine-base deleted file mode 100644 index b61a3337..00000000 --- a/image-recipe/Dockerfile.alpine-base +++ /dev/null @@ -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"] diff --git a/image-recipe/Dockerfile.build b/image-recipe/Dockerfile.build deleted file mode 100644 index 69b1ffca..00000000 --- a/image-recipe/Dockerfile.build +++ /dev/null @@ -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"] diff --git a/image-recipe/FINAL_STATUS.md b/image-recipe/FINAL_STATUS.md deleted file mode 100644 index 6175675b..00000000 --- a/image-recipe/FINAL_STATUS.md +++ /dev/null @@ -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!** 🚀 diff --git a/image-recipe/GETTING_STARTED.md b/image-recipe/GETTING_STARTED.md deleted file mode 100644 index 6e6b26c9..00000000 --- a/image-recipe/GETTING_STARTED.md +++ /dev/null @@ -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! 🚀 diff --git a/image-recipe/QUICK-REFERENCE.md b/image-recipe/QUICK-REFERENCE.md deleted file mode 100644 index d42c97b6..00000000 --- a/image-recipe/QUICK-REFERENCE.md +++ /dev/null @@ -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 [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. diff --git a/image-recipe/README-HARDWARE-BUILDS.md b/image-recipe/README-HARDWARE-BUILDS.md deleted file mode 100644 index 27066e48..00000000 --- a/image-recipe/README-HARDWARE-BUILDS.md +++ /dev/null @@ -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 iso - ``` - -2. **Wait for build to complete** (30-60 minutes first time) - -3. **Find your ISO:** - ```bash - ls results/archipelago-*--*.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_.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://: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://: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_.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! diff --git a/image-recipe/README.md b/image-recipe/README.md index d43c5cb8..4b446a89 100644 --- a/image-recipe/README.md +++ b/image-recipe/README.md @@ -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` diff --git a/image-recipe/SUMMARY.md b/image-recipe/SUMMARY.md deleted file mode 100644 index 072cf774..00000000 --- a/image-recipe/SUMMARY.md +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/README.md b/image-recipe/alpine-profile/README.md deleted file mode 100644 index 3a885c34..00000000 --- a/image-recipe/alpine-profile/README.md +++ /dev/null @@ -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`. diff --git a/image-recipe/alpine-profile/mkimg.archipelago.sh b/image-recipe/alpine-profile/mkimg.archipelago.sh deleted file mode 100755 index 65b08534..00000000 --- a/image-recipe/alpine-profile/mkimg.archipelago.sh +++ /dev/null @@ -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" -} diff --git a/image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware-info.sh b/image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware-info.sh deleted file mode 100755 index 141b2440..00000000 --- a/image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware-info.sh +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware.toml b/image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware.toml deleted file mode 100644 index ef14ebe9..00000000 --- a/image-recipe/alpine-profile/overlay-hp-prodesk/etc/archipelago/hardware.toml +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay-hp-prodesk/etc/local.d/00-hardware-detect.start b/image-recipe/alpine-profile/overlay-hp-prodesk/etc/local.d/00-hardware-detect.start deleted file mode 100755 index 688adb4e..00000000 --- a/image-recipe/alpine-profile/overlay-hp-prodesk/etc/local.d/00-hardware-detect.start +++ /dev/null @@ -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 </dev/null) - -Runtime Detection: -$(cat /var/log/archipelago-hardware.log 2>/dev/null) -INFO diff --git a/image-recipe/alpine-profile/overlay-merged/etc/archipelago/config.toml b/image-recipe/alpine-profile/overlay-merged/etc/archipelago/config.toml deleted file mode 100644 index 1afb589c..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/archipelago/config.toml +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware-info.sh b/image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware-info.sh deleted file mode 100755 index 141b2440..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware-info.sh +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware.toml b/image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware.toml deleted file mode 100644 index ef14ebe9..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/archipelago/hardware.toml +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay-merged/etc/hostname b/image-recipe/alpine-profile/overlay-merged/etc/hostname deleted file mode 100644 index e0e05eff..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/hostname +++ /dev/null @@ -1 +0,0 @@ -archipelago diff --git a/image-recipe/alpine-profile/overlay-merged/etc/hosts b/image-recipe/alpine-profile/overlay-merged/etc/hosts deleted file mode 100644 index adabd81c..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/hosts +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/overlay-merged/etc/init.d/archipelago b/image-recipe/alpine-profile/overlay-merged/etc/init.d/archipelago deleted file mode 100755 index 93bcc9ee..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/init.d/archipelago +++ /dev/null @@ -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" -} diff --git a/image-recipe/alpine-profile/overlay-merged/etc/local.d/00-boot-services.start b/image-recipe/alpine-profile/overlay-merged/etc/local.d/00-boot-services.start deleted file mode 100755 index d1ffd0ce..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/local.d/00-boot-services.start +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay-merged/etc/local.d/00-hardware-detect.start b/image-recipe/alpine-profile/overlay-merged/etc/local.d/00-hardware-detect.start deleted file mode 100755 index 688adb4e..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/local.d/00-hardware-detect.start +++ /dev/null @@ -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 </dev/null) - -Runtime Detection: -$(cat /var/log/archipelago-hardware.log 2>/dev/null) -INFO diff --git a/image-recipe/alpine-profile/overlay-merged/etc/local.d/01-network-setup.start b/image-recipe/alpine-profile/overlay-merged/etc/local.d/01-network-setup.start deleted file mode 100755 index 7e1cf13e..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/local.d/01-network-setup.start +++ /dev/null @@ -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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" diff --git a/image-recipe/alpine-profile/overlay-merged/etc/local.d/archipelago-install.start b/image-recipe/alpine-profile/overlay-merged/etc/local.d/archipelago-install.start deleted file mode 100644 index a6b50492..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/local.d/archipelago-install.start +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay-merged/etc/systemd/system/archipelago.service b/image-recipe/alpine-profile/overlay-merged/etc/systemd/system/archipelago.service deleted file mode 100644 index 927142f4..00000000 --- a/image-recipe/alpine-profile/overlay-merged/etc/systemd/system/archipelago.service +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware-info.sh b/image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware-info.sh deleted file mode 100755 index 141b2440..00000000 --- a/image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware-info.sh +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware.toml b/image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware.toml deleted file mode 100644 index 0be7f3e0..00000000 --- a/image-recipe/alpine-profile/overlay-start9-pure/etc/archipelago/hardware.toml +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay-start9-pure/etc/local.d/00-hardware-detect.start b/image-recipe/alpine-profile/overlay-start9-pure/etc/local.d/00-hardware-detect.start deleted file mode 100755 index 688adb4e..00000000 --- a/image-recipe/alpine-profile/overlay-start9-pure/etc/local.d/00-hardware-detect.start +++ /dev/null @@ -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 </dev/null) - -Runtime Detection: -$(cat /var/log/archipelago-hardware.log 2>/dev/null) -INFO diff --git a/image-recipe/alpine-profile/overlay/etc/archipelago/config.toml b/image-recipe/alpine-profile/overlay/etc/archipelago/config.toml deleted file mode 100644 index 1afb589c..00000000 --- a/image-recipe/alpine-profile/overlay/etc/archipelago/config.toml +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay/etc/hostname b/image-recipe/alpine-profile/overlay/etc/hostname deleted file mode 100644 index e0e05eff..00000000 --- a/image-recipe/alpine-profile/overlay/etc/hostname +++ /dev/null @@ -1 +0,0 @@ -archipelago diff --git a/image-recipe/alpine-profile/overlay/etc/hosts b/image-recipe/alpine-profile/overlay/etc/hosts deleted file mode 100644 index adabd81c..00000000 --- a/image-recipe/alpine-profile/overlay/etc/hosts +++ /dev/null @@ -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 diff --git a/image-recipe/alpine-profile/overlay/etc/init.d/archipelago b/image-recipe/alpine-profile/overlay/etc/init.d/archipelago deleted file mode 100755 index 93bcc9ee..00000000 --- a/image-recipe/alpine-profile/overlay/etc/init.d/archipelago +++ /dev/null @@ -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" -} diff --git a/image-recipe/alpine-profile/overlay/etc/local.d/00-boot-services.start b/image-recipe/alpine-profile/overlay/etc/local.d/00-boot-services.start deleted file mode 100755 index d1ffd0ce..00000000 --- a/image-recipe/alpine-profile/overlay/etc/local.d/00-boot-services.start +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay/etc/local.d/01-network-setup.start b/image-recipe/alpine-profile/overlay/etc/local.d/01-network-setup.start deleted file mode 100755 index 7e1cf13e..00000000 --- a/image-recipe/alpine-profile/overlay/etc/local.d/01-network-setup.start +++ /dev/null @@ -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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" diff --git a/image-recipe/alpine-profile/overlay/etc/local.d/archipelago-install.start b/image-recipe/alpine-profile/overlay/etc/local.d/archipelago-install.start deleted file mode 100644 index a6b50492..00000000 --- a/image-recipe/alpine-profile/overlay/etc/local.d/archipelago-install.start +++ /dev/null @@ -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" diff --git a/image-recipe/alpine-profile/overlay/etc/systemd/system/archipelago.service b/image-recipe/alpine-profile/overlay/etc/systemd/system/archipelago.service deleted file mode 100644 index 927142f4..00000000 --- a/image-recipe/alpine-profile/overlay/etc/systemd/system/archipelago.service +++ /dev/null @@ -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 diff --git a/image-recipe/aports b/image-recipe/aports deleted file mode 160000 index 4315b9b9..00000000 --- a/image-recipe/aports +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 4315b9b90c1a786d04b2bc7af5649a0c4caf396a diff --git a/image-recipe/archipelago-scripts/archipelago-menu.sh b/image-recipe/archipelago-scripts/archipelago-menu.sh new file mode 100755 index 00000000..9304f4e8 --- /dev/null +++ b/image-recipe/archipelago-scripts/archipelago-menu.sh @@ -0,0 +1,311 @@ +#!/bin/bash +# +# Archipelago Main Menu +# Interactive setup wizard for Archipelago Bitcoin Node OS +# + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# Install required tools on first run (for live mode) +install_required_tools() { + if [ -f /tmp/.archipelago-tools-installed ]; then + return 0 + fi + + # Check if we need to install tools + local NEED_TOOLS=0 + for tool in parted debootstrap mkfs.ext4 mkfs.vfat; do + if ! command -v $tool >/dev/null 2>&1; then + NEED_TOOLS=1 + break + fi + done + + if [ $NEED_TOOLS -eq 1 ]; then + echo "" + echo " 📦 Installing required tools (first run)..." + echo "" + sudo apt-get update -qq 2>/dev/null + sudo apt-get install -y parted debootstrap dosfstools e2fsprogs 2>/dev/null + echo " ✅ Tools installed" + echo "" + sleep 1 + fi + + touch /tmp/.archipelago-tools-installed +} + +# Run tool installation at startup +install_required_tools + +show_banner() { + clear + echo "" + echo " ╔═══════════════════════════════════════════════════════════╗" + echo " ║ ║" + echo " ║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║" + echo " ║ ║" + echo " ║ Your sovereign Bitcoin infrastructure ║" + echo " ║ ║" + echo " ╚═══════════════════════════════════════════════════════════╝" + echo "" +} + +show_status() { + echo " System Status:" + echo " ─────────────────────────────────────────────────────────────" + + # Check if we're in live mode + if [ -d /run/live ]; then + echo " Mode: 🔴 Live (changes won't persist)" + else + echo " Mode: 🟢 Installed" + fi + + # Check Podman + if command -v podman >/dev/null 2>&1; then + echo " Podman: 🟢 Installed" + else + echo " Podman: 🔴 Not installed" + fi + + # Check Bitcoin Core + if podman ps 2>/dev/null | grep -q bitcoind; then + BLOCKS=$(podman exec bitcoind bitcoin-cli getblockcount 2>/dev/null || echo "syncing") + echo " Bitcoin: 🟢 Running (blocks: $BLOCKS)" + elif podman ps -a 2>/dev/null | grep -q bitcoind; then + echo " Bitcoin: 🟡 Stopped" + else + echo " Bitcoin: ⚪ Not configured" + fi + + # Check LND + if podman ps 2>/dev/null | grep -q lnd; then + echo " Lightning: 🟢 Running" + elif podman ps -a 2>/dev/null | grep -q lnd; then + echo " Lightning: 🟡 Stopped" + else + echo " Lightning: ⚪ Not configured" + fi + + echo "" +} + +main_menu() { + while true; do + show_banner + show_status + + # Show Web UI URL + IP=$(hostname -I 2>/dev/null | awk '{print $1}') + if [ -n "$IP" ]; then + echo " 🌐 Web UI: http://$IP" + echo "" + fi + + echo " Main Menu:" + echo " ─────────────────────────────────────────────────────────────" + echo "" + echo " w) Open Web UI - Launch graphical interface" + echo "" + echo " 1) Install to Disk - Permanently install Archipelago" + echo " 2) Setup Bitcoin Core - Configure Bitcoin full node" + echo " 3) Setup Lightning (LND) - Configure Lightning Network" + echo " 4) Setup BTCPay Server - Bitcoin payment processor" + echo " 5) View Logs - Monitor running services" + echo " 6) Network Settings - Configure networking" + echo " 7) System Info - View system information" + echo "" + echo " q) Quit" + echo "" + read -p " Select option: " choice + + case $choice in + w|W) + if [ -f "$SCRIPT_DIR/start-web-ui.sh" ]; then + sudo bash "$SCRIPT_DIR/start-web-ui.sh" 80 + else + # Try to find and start web UI + for path in /opt/archipelago/scripts /run/live/medium/archipelago/scripts; do + if [ -f "$path/start-web-ui.sh" ]; then + sudo bash "$path/start-web-ui.sh" 80 + break + fi + done + fi + ;; + 1) + if [ -f "$SCRIPT_DIR/install-to-disk.sh" ]; then + sudo bash "$SCRIPT_DIR/install-to-disk.sh" + else + echo "Installer not found. Running from: $SCRIPT_DIR" + fi + read -p "Press Enter to continue..." + ;; + 2) + if [ -f "$SCRIPT_DIR/setup-bitcoin.sh" ]; then + bash "$SCRIPT_DIR/setup-bitcoin.sh" + else + echo "Bitcoin setup script not found." + fi + read -p "Press Enter to continue..." + ;; + 3) + if [ -f "$SCRIPT_DIR/setup-lnd.sh" ]; then + bash "$SCRIPT_DIR/setup-lnd.sh" + else + echo "LND setup script not found." + fi + read -p "Press Enter to continue..." + ;; + 4) + setup_btcpay + read -p "Press Enter to continue..." + ;; + 5) + view_logs + ;; + 6) + network_settings + read -p "Press Enter to continue..." + ;; + 7) + system_info + read -p "Press Enter to continue..." + ;; + q|Q) + echo "" + echo " Goodbye! 🏝️" + echo "" + exit 0 + ;; + *) + echo "Invalid option" + sleep 1 + ;; + esac + done +} + +setup_btcpay() { + show_banner + echo " BTCPay Server Setup" + echo " ─────────────────────────────────────────────────────────────" + echo "" + echo " BTCPay Server is a self-hosted Bitcoin payment processor." + echo "" + + if ! podman ps | grep -q bitcoind; then + echo " ⚠️ Bitcoin Core must be running first." + return + fi + + read -p " Setup BTCPay Server? [y/N]: " SETUP + if [[ ! "$SETUP" =~ ^[Yy]$ ]]; then + return + fi + + echo "" + echo " 🐳 Pulling BTCPay Server image..." + podman pull docker.io/btcpayserver/btcpayserver:latest + + # Create data directory + mkdir -p ~/.btcpay + + echo "" + echo " BTCPay Server setup is more complex and typically uses docker-compose." + echo " For a full setup, visit: https://docs.btcpayserver.org" + echo "" +} + +view_logs() { + show_banner + echo " View Logs" + echo " ─────────────────────────────────────────────────────────────" + echo "" + echo " 1) Bitcoin Core logs" + echo " 2) LND logs" + echo " 3) System logs" + echo " b) Back" + echo "" + read -p " Select: " choice + + case $choice in + 1) + if podman ps -a | grep -q bitcoind; then + podman logs -f --tail 50 bitcoind + else + echo "Bitcoin Core not running" + read -p "Press Enter..." + fi + ;; + 2) + if podman ps -a | grep -q lnd; then + podman logs -f --tail 50 lnd + else + echo "LND not running" + read -p "Press Enter..." + fi + ;; + 3) + journalctl -f + ;; + esac +} + +network_settings() { + show_banner + echo " Network Settings" + echo " ─────────────────────────────────────────────────────────────" + echo "" + + # Show current IP + IP=$(hostname -I | awk '{print $1}') + echo " Current IP: $IP" + echo "" + + # Show network interfaces + echo " Network Interfaces:" + ip -br addr | grep -v "^lo" | while read line; do + echo " $line" + done + echo "" + + echo " Ports in use:" + echo " 8332 - Bitcoin RPC" + echo " 8333 - Bitcoin P2P" + echo " 9735 - Lightning P2P" + echo " 10009 - Lightning gRPC" + echo " 8080 - Lightning REST" + echo "" +} + +system_info() { + show_banner + echo " System Information" + echo " ─────────────────────────────────────────────────────────────" + echo "" + echo " Hostname: $(hostname)" + echo " Kernel: $(uname -r)" + echo " Uptime: $(uptime -p)" + echo "" + echo " CPU: $(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)" + echo " Memory: $(free -h | grep Mem | awk '{print $2}') total, $(free -h | grep Mem | awk '{print $3}') used" + echo "" + echo " Disk Usage:" + df -h / | tail -1 | awk '{print " Root: " $3 " / " $2 " (" $5 " used)"}' + if [ -d ~/.bitcoin ]; then + echo " Bitcoin: $(du -sh ~/.bitcoin 2>/dev/null | cut -f1)" + fi + echo "" + + # Container status + echo " Containers:" + if command -v podman >/dev/null 2>&1; then + podman ps --format " {{.Names}}: {{.Status}}" 2>/dev/null || echo " No containers running" + fi + echo "" +} + +# Run main menu +main_menu diff --git a/image-recipe/archipelago-scripts/install-to-disk.sh b/image-recipe/archipelago-scripts/install-to-disk.sh new file mode 100755 index 00000000..fd424235 --- /dev/null +++ b/image-recipe/archipelago-scripts/install-to-disk.sh @@ -0,0 +1,273 @@ +#!/bin/bash +# +# Archipelago Disk Installer +# Installs Archipelago Bitcoin Node OS to a disk +# + +set -e + +echo "" +echo "╔═══════════════════════════════════════════════════════════╗" +echo "║ 🏝️ ARCHIPELAGO DISK INSTALLER ║" +echo "╚═══════════════════════════════════════════════════════════╝" +echo "" + +# Check if running as root +if [ "$EUID" -ne 0 ]; then + echo "❌ Please run as root: sudo $0" + exit 1 +fi + +# Install required tools if missing +echo "📦 Checking required tools..." +NEED_INSTALL="" +for tool in parted debootstrap; do + if ! command -v $tool >/dev/null 2>&1; then + NEED_INSTALL="$NEED_INSTALL $tool" + fi +done + +if [ -n "$NEED_INSTALL" ]; then + echo "📥 Installing required tools:$NEED_INSTALL" + apt-get update + apt-get install -y $NEED_INSTALL dosfstools e2fsprogs + echo "" +fi + +# List available disks +echo "📋 Available disks:" +echo "" +lsblk -d -o NAME,SIZE,MODEL | grep -v loop | grep -v sr +echo "" + +# Get target disk +read -p "Enter target disk (e.g., sda, nvme0n1): " TARGET_DISK +TARGET_DEVICE="/dev/$TARGET_DISK" + +if [ ! -b "$TARGET_DEVICE" ]; then + echo "❌ Device $TARGET_DEVICE not found" + exit 1 +fi + +# Confirm +echo "" +echo "⚠️ WARNING: This will ERASE ALL DATA on $TARGET_DEVICE" +echo "" +read -p "Type 'yes' to continue: " CONFIRM + +if [ "$CONFIRM" != "yes" ]; then + echo "Aborted." + exit 1 +fi + +echo "" +echo "🔧 Partitioning $TARGET_DEVICE..." + +# Unmount any existing partitions +umount ${TARGET_DEVICE}* 2>/dev/null || true + +# Create GPT partition table +parted -s "$TARGET_DEVICE" mklabel gpt + +# Create partitions: +# 1. EFI System Partition (512MB) +# 2. Root partition (remaining space) +parted -s "$TARGET_DEVICE" mkpart primary fat32 1MiB 513MiB +parted -s "$TARGET_DEVICE" set 1 esp on +parted -s "$TARGET_DEVICE" mkpart primary ext4 513MiB 100% + +# Wait for partitions to appear +sleep 2 + +# Determine partition names (handle both /dev/sdX and /dev/nvmeXnYpZ naming) +if [[ "$TARGET_DISK" == nvme* ]]; then + EFI_PART="${TARGET_DEVICE}p1" + ROOT_PART="${TARGET_DEVICE}p2" +else + EFI_PART="${TARGET_DEVICE}1" + ROOT_PART="${TARGET_DEVICE}2" +fi + +echo "🗂️ Formatting partitions..." + +# Format EFI partition +mkfs.vfat -F32 -n ARCHIPELAGO "$EFI_PART" + +# Format root partition +mkfs.ext4 -L archipelago-root "$ROOT_PART" + +echo "📦 Mounting partitions..." + +# Create mount points +mkdir -p /mnt/archipelago +mount "$ROOT_PART" /mnt/archipelago +mkdir -p /mnt/archipelago/boot/efi +mount "$EFI_PART" /mnt/archipelago/boot/efi + +echo "📋 Installing base system..." + +# Install base system using debootstrap +if command -v debootstrap >/dev/null 2>&1; then + debootstrap --arch=amd64 bookworm /mnt/archipelago http://deb.debian.org/debian +else + echo "❌ debootstrap not found. Installing..." + apt-get update && apt-get install -y debootstrap + debootstrap --arch=amd64 bookworm /mnt/archipelago http://deb.debian.org/debian +fi + +echo "⚙️ Configuring system..." + +# Mount virtual filesystems +mount --bind /dev /mnt/archipelago/dev +mount --bind /proc /mnt/archipelago/proc +mount --bind /sys /mnt/archipelago/sys + +# Create fstab +cat > /mnt/archipelago/etc/fstab < /mnt/archipelago/etc/hostname + +# Configure hosts +cat > /mnt/archipelago/etc/hosts < /etc/apt/sources.list </dev/null || true + + # Install binaries + if [ -d "$BOOT_MEDIA/archipelago/bin" ]; then + cp "$BOOT_MEDIA/archipelago/bin/"* /mnt/archipelago/usr/local/bin/ 2>/dev/null || true + chmod +x /mnt/archipelago/usr/local/bin/* 2>/dev/null || true + fi + + # Install scripts + if [ -d "$BOOT_MEDIA/archipelago/scripts" ]; then + mkdir -p /mnt/archipelago/opt/archipelago/scripts + cp "$BOOT_MEDIA/archipelago/scripts/"* /mnt/archipelago/opt/archipelago/scripts/ 2>/dev/null || true + chmod +x /mnt/archipelago/opt/archipelago/scripts/*.sh 2>/dev/null || true + fi + + # Install app manifests + if [ -d "$BOOT_MEDIA/archipelago/apps" ]; then + mkdir -p /mnt/archipelago/etc/archipelago + cp -r "$BOOT_MEDIA/archipelago/apps" /mnt/archipelago/etc/archipelago/ + fi + + # Create profile.d script for auto-menu on login + mkdir -p /mnt/archipelago/etc/profile.d + cat > /mnt/archipelago/etc/profile.d/archipelago.sh <<'PROFILE_EOF' +#!/bin/bash +# Archipelago welcome message +if [ -t 0 ] && [ -z "$ARCHIPELAGO_WELCOMED" ]; then + export ARCHIPELAGO_WELCOMED=1 + IP=$(hostname -I 2>/dev/null | awk '{print $1}') + echo "" + echo " 🏝️ Welcome to Archipelago Bitcoin Node OS" + echo "" + if [ -n "$IP" ]; then + echo " Web UI: http://$IP" + fi + echo " Menu: Type 'archipelago' to open setup menu" + echo "" +fi +PROFILE_EOF + chmod +x /mnt/archipelago/etc/profile.d/archipelago.sh +fi + +echo "🧹 Cleaning up..." + +# Unmount +umount /mnt/archipelago/dev +umount /mnt/archipelago/proc +umount /mnt/archipelago/sys +umount /mnt/archipelago/boot/efi +umount /mnt/archipelago + +echo "" +echo "╔═══════════════════════════════════════════════════════════╗" +echo "║ ✅ INSTALLATION COMPLETE! ║" +echo "╚═══════════════════════════════════════════════════════════╝" +echo "" +echo "Remove the USB drive and reboot to start Archipelago." +echo "" +echo "Default login:" +echo " Username: archipelago" +echo " Password: archipelago" +echo "" +echo "⚠️ Please change the password after first login!" +echo "" diff --git a/image-recipe/archipelago-scripts/setup-bitcoin.sh b/image-recipe/archipelago-scripts/setup-bitcoin.sh new file mode 100755 index 00000000..eea31817 --- /dev/null +++ b/image-recipe/archipelago-scripts/setup-bitcoin.sh @@ -0,0 +1,149 @@ +#!/bin/bash +# +# Bitcoin Core Setup Script for Archipelago +# Sets up Bitcoin Core in a Podman container +# + +set -e + +echo "" +echo "╔═══════════════════════════════════════════════════════════╗" +echo "║ ₿ BITCOIN CORE SETUP ║" +echo "╚═══════════════════════════════════════════════════════════╝" +echo "" + +# Check if running as root +if [ "$EUID" -eq 0 ]; then + echo "⚠️ Running as root. For rootless Podman, run as regular user." +fi + +# Check for Podman +if ! command -v podman >/dev/null 2>&1; then + echo "📦 Installing Podman..." + sudo apt-get update + sudo apt-get install -y podman podman-compose +fi + +# Create data directory +BITCOIN_DATA="${HOME}/.bitcoin" +mkdir -p "$BITCOIN_DATA" + +echo "📍 Bitcoin data directory: $BITCOIN_DATA" +echo "" + +# Ask for configuration +echo "Bitcoin Core Configuration:" +echo "" +read -p "Enable pruning? (saves disk space) [y/N]: " PRUNE +read -p "Enable txindex? (required for some apps) [y/N]: " TXINDEX +read -p "RPC username [bitcoin]: " RPC_USER +RPC_USER=${RPC_USER:-bitcoin} +read -p "RPC password [randomly generated]: " RPC_PASS + +if [ -z "$RPC_PASS" ]; then + RPC_PASS=$(openssl rand -hex 16) + echo " Generated RPC password: $RPC_PASS" +fi + +# Create bitcoin.conf +cat > "$BITCOIN_DATA/bitcoin.conf" <> "$BITCOIN_DATA/bitcoin.conf" + echo " Pruning enabled (550MB)" +fi + +if [[ "$TXINDEX" =~ ^[Yy]$ ]]; then + echo "txindex=1" >> "$BITCOIN_DATA/bitcoin.conf" + echo " Transaction index enabled" +fi + +echo "" +echo "📋 Created bitcoin.conf" +echo "" + +# Pull Bitcoin Core image +echo "🐳 Pulling Bitcoin Core container image..." +podman pull docker.io/lncm/bitcoind:v27.0 + +# Create systemd user service for Bitcoin Core +mkdir -p ~/.config/systemd/user + +cat > ~/.config/systemd/user/bitcoind.service </dev/null 2>&1; then + echo "❌ Podman not found. Please run setup-bitcoin.sh first." + exit 1 +fi + +# Check if Bitcoin Core is running +if ! podman ps | grep -q bitcoind; then + echo "⚠️ Bitcoin Core is not running." + echo " LND requires a synced Bitcoin Core node." + read -p "Continue anyway? [y/N]: " CONTINUE + if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + +# Create data directory +LND_DATA="${HOME}/.lnd" +mkdir -p "$LND_DATA" + +echo "📍 LND data directory: $LND_DATA" +echo "" + +# Get Bitcoin RPC credentials +BITCOIN_CONF="${HOME}/.bitcoin/bitcoin.conf" +if [ -f "$BITCOIN_CONF" ]; then + RPC_USER=$(grep "^rpcuser=" "$BITCOIN_CONF" | cut -d= -f2) + RPC_PASS=$(grep "^rpcpassword=" "$BITCOIN_CONF" | cut -d= -f2) +else + read -p "Bitcoin RPC username: " RPC_USER + read -p "Bitcoin RPC password: " RPC_PASS +fi + +# Ask for LND configuration +echo "LND Configuration:" +echo "" +read -p "Node alias (public name): " LND_ALIAS +LND_ALIAS=${LND_ALIAS:-archipelago-node} + +# Create lnd.conf +cat > "$LND_DATA/lnd.conf" < ~/.config/systemd/user/lnd.service < 0 else b'' + + path = urlparse(self.path).path + + # Mock API responses + response = {"success": True} + + if '/api/auth' in path or '/auth' in path: + response = { + "success": True, + "token": "mock-token-12345", + "user": "archipelago" + } + elif '/api/setup' in path or '/setup' in path: + response = { + "success": True, + "status": "complete" + } + elif '/api/status' in path or '/status' in path: + response = { + "success": True, + "status": "running", + "version": "0.1.0", + "hostname": "archipelago" + } + elif '/api/apps' in path or '/apps' in path: + response = { + "success": True, + "apps": [] + } + + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + self.wfile.write(json.dumps(response).encode()) + + def do_OPTIONS(self): + """Handle CORS preflight""" + self.send_response(200) + self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS') + self.send_header('Access-Control-Allow-Headers', 'Content-Type, Authorization') + self.end_headers() + + def do_GET(self): + """Handle GET requests - serve files or API""" + path = urlparse(self.path).path + + if path.startswith('/api/'): + # Mock API GET endpoints + response = {"success": True} + + if '/status' in path: + response = { + "success": True, + "status": "running", + "version": "0.1.0" + } + elif '/apps' in path: + response = { + "success": True, + "apps": [ + {"id": "bitcoin", "name": "Bitcoin Core", "status": "available"}, + {"id": "lnd", "name": "Lightning (LND)", "status": "available"} + ] + } + + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.send_header('Access-Control-Allow-Origin', '*') + self.end_headers() + self.wfile.write(json.dumps(response).encode()) + else: + # Serve static files, default to index.html for SPA routing + if not os.path.exists(self.translate_path(self.path)) or path == '/': + self.path = '/index.html' + super().do_GET() + + def log_message(self, format, *args): + """Quieter logging""" + if '404' in str(args) or 'error' in str(args).lower(): + print(f" {args[0]}") + +print(f""" +╔═══════════════════════════════════════════════════════════╗ +║ 🏝️ ARCHIPELAGO WEB UI ║ +╚═══════════════════════════════════════════════════════════╝ + + Serving from: {WEB_DIR} + + 🌐 Open in your browser: http://localhost:{PORT} + + Press Ctrl+C to stop +""") + +with socketserver.TCPServer(("0.0.0.0", PORT), ArchipelagoHandler) as httpd: + try: + httpd.serve_forever() + except KeyboardInterrupt: + print("\nShutting down...") diff --git a/image-recipe/archipelago-scripts/start-web-ui.sh b/image-recipe/archipelago-scripts/start-web-ui.sh new file mode 100755 index 00000000..e3620a30 --- /dev/null +++ b/image-recipe/archipelago-scripts/start-web-ui.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# +# Start Archipelago Backend Server +# Serves the Vue.js UI and handles all API calls +# + +# Find archipelago binary +ARCHIPELAGO_BIN="" +for path in /usr/local/bin/archipelago /opt/archipelago/bin/archipelago /run/live/medium/archipelago/bin/archipelago; do + if [ -x "$path" ]; then + ARCHIPELAGO_BIN="$path" + break + fi +done + +# Get IP address +IP=$(hostname -I 2>/dev/null | awk '{print $1}') +if [ -z "$IP" ]; then + IP="localhost" +fi + +echo "" +echo "╔═══════════════════════════════════════════════════════════╗" +echo "║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║" +echo "╚═══════════════════════════════════════════════════════════╝" +echo "" +echo " Starting Archipelago server..." +echo "" +echo " ┌─────────────────────────────────────────────────────────┐" +echo " │ │" +echo " │ 🌐 OPEN IN YOUR BROWSER: │" +echo " │ │" +echo " │ http://$IP " +echo " │ │" +echo " └─────────────────────────────────────────────────────────┘" +echo "" + +if [ -n "$ARCHIPELAGO_BIN" ]; then + echo " Using backend: $ARCHIPELAGO_BIN" + echo " Press Ctrl+C to stop" + echo "" + + # Set environment for dev mode + export ARCHIPELAGO_DEV_MODE=true + export ARCHIPELAGO_DATA_DIR=/var/lib/archipelago + export RUST_LOG=info + + # Create data directory + sudo mkdir -p /var/lib/archipelago 2>/dev/null + + exec "$ARCHIPELAGO_BIN" +else + echo " ⚠️ Backend binary not found, using static file server" + echo "" + + # Fallback to static file server + WEB_UI_DIR="" + for path in /opt/archipelago/web-ui /run/live/medium/archipelago/web-ui; do + if [ -d "$path" ]; then + WEB_UI_DIR="$path" + break + fi + done + + if [ -n "$WEB_UI_DIR" ]; then + cd "$WEB_UI_DIR" + exec python3 -m http.server 80 --bind 0.0.0.0 + else + echo "❌ Neither backend nor web UI found" + exit 1 + fi +fi diff --git a/image-recipe/build-all-hardware.sh b/image-recipe/build-all-hardware.sh deleted file mode 100755 index 2fd23b1c..00000000 --- a/image-recipe/build-all-hardware.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash -# Quick build script - builds for all supported hardware targets - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BUILD_TYPE="${1:-iso}" - -echo "🏗️ Building Archipelago for all supported hardware" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "" - -# Array of hardware targets -TARGETS=( - "start9-pure:Start9 Server Pure" - "hp-prodesk:HP ProDesk 400 G4 DM" - "dell-optiplex:Dell OptiPlex" - "generic:Generic x86_64" -) - -SUCCESS_COUNT=0 -FAIL_COUNT=0 -FAILED_TARGETS=() - -# Build for each target -for target_info in "${TARGETS[@]}"; do - IFS=':' read -r target_name target_desc <<< "$target_info" - - echo "" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "🔨 Building for: $target_desc" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "" - - if "$SCRIPT_DIR/build-for-hardware.sh" "$target_name" "$BUILD_TYPE"; then - echo "✅ $target_desc build succeeded" - ((SUCCESS_COUNT++)) - else - echo "❌ $target_desc build failed" - ((FAIL_COUNT++)) - FAILED_TARGETS+=("$target_desc") - fi -done - -# Summary -echo "" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "📊 Build Summary" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo " Successful: $SUCCESS_COUNT" -echo " Failed: $FAIL_COUNT" - -if [ $FAIL_COUNT -gt 0 ]; then - echo "" - echo "Failed builds:" - for target in "${FAILED_TARGETS[@]}"; do - echo " - $target" - done -fi - -echo "" -echo "📦 Build output: $SCRIPT_DIR/results/" -ls -lh "$SCRIPT_DIR/results/"*.iso 2>/dev/null || echo " (no ISOs found)" - -echo "" -if [ $FAIL_COUNT -eq 0 ]; then - echo "✅ All builds completed successfully!" - exit 0 -else - echo "⚠️ Some builds failed. Check logs above." - exit 1 -fi diff --git a/image-recipe/build-alpine-iso.sh b/image-recipe/build-alpine-iso.sh deleted file mode 100755 index 5a33fd8b..00000000 --- a/image-recipe/build-alpine-iso.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash -# Build bootable Alpine Linux ISO for Archipelago Bitcoin Node OS -# Supports building on macOS (via Docker) and Linux (native) - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -# Configuration -ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}" -ALPINE_VERSION="${ALPINE_VERSION:-3.19}" -ARCH="${ARCH:-x86_64}" -BUILD_TYPE="${BUILD_TYPE:-iso}" # iso or disk -OUTPUT_DIR="${OUTPUT_DIR:-$SCRIPT_DIR/results}" - -echo "🔨 Building Archipelago Alpine Linux Image" -echo " Version: $ARCHIPELAGO_VERSION" -echo " Alpine: $ALPINE_VERSION" -echo " Architecture: $ARCH" -echo " Build Type: $BUILD_TYPE" -echo "" - -# Detect build environment -if [[ "$OSTYPE" == "darwin"* ]]; then - BUILD_ENV="macos" - USE_DOCKER=true -elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - BUILD_ENV="linux" - USE_DOCKER=false -else - echo "❌ Unsupported OS: $OSTYPE" - exit 1 -fi - -echo "🌍 Build Environment: $BUILD_ENV" -echo "" - -# Create output directory -mkdir -p "$OUTPUT_DIR" - -# Build backend first -echo "📦 Building Archipelago backend..." -"$SCRIPT_DIR/scripts/build-backend.sh" || { - echo "❌ Backend build failed" - exit 1 -} - -# Build frontend -echo "🎨 Building Archipelago frontend..." -"$SCRIPT_DIR/scripts/build-frontend.sh" || { - echo "❌ Frontend build failed" - exit 1 -} - -# Create backend APK -echo "📦 Creating backend APK package..." -"$SCRIPT_DIR/scripts/create-backend-apk.sh" || { - echo "❌ APK creation failed" - exit 1 -} - -# Build image based on environment -if [ "$USE_DOCKER" = true ]; then - echo "🐳 Building via Docker (macOS)..." - "$SCRIPT_DIR/build-macos.sh" "$BUILD_TYPE" -else - echo "🐧 Building natively (Linux)..." - "$SCRIPT_DIR/build-linux.sh" "$BUILD_TYPE" -fi - -echo "" -echo "✅ Build complete!" -echo " Output: $OUTPUT_DIR" -ls -lh "$OUTPUT_DIR"/*.{iso,img} 2>/dev/null || echo " (Check output directory for results)" diff --git a/image-recipe/build-alpine-native.sh b/image-recipe/build-alpine-native.sh deleted file mode 100755 index 099e3522..00000000 --- a/image-recipe/build-alpine-native.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/bash -# Native Alpine build script -# Must be run on Alpine Linux or in Alpine container - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" -BUILD_TYPE="${1:-iso}" - -ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}" -ALPINE_VERSION="${ALPINE_VERSION:-3.19}" -ARCH="${ARCH:-x86_64}" -OUTPUT_DIR="${OUTPUT_DIR:-$SCRIPT_DIR/results}" - -echo "🏔️ Building Alpine image natively" -echo "" - -# Install build dependencies -echo "📦 Installing build dependencies..." -apk add --no-cache \ - bash \ - git \ - alpine-sdk \ - abuild \ - alpine-conf \ - syslinux \ - xorriso \ - squashfs-tools \ - grub \ - grub-efi \ - mtools \ - dosfstools \ - e2fsprogs \ - rsync \ - || true - -# Setup abuild keys if needed -if [ ! -f ~/.abuild/abuild.conf ]; then - echo "🔑 Setting up abuild keys..." - abuild-keygen -a -n || true -fi - -# Clone Alpine aports if needed -APORTS_DIR="$SCRIPT_DIR/aports" -if [ ! -d "$APORTS_DIR" ]; then - echo "📥 Cloning Alpine aports repository..." - git clone --depth=1 --branch "${ALPINE_VERSION}-stable" \ - https://gitlab.alpinelinux.org/alpine/aports.git "$APORTS_DIR" || { - echo "⚠️ Failed to clone ${ALPINE_VERSION}-stable, trying 3.19-stable..." - git clone --depth=1 --branch "3.19-stable" \ - https://gitlab.alpinelinux.org/alpine/aports.git "$APORTS_DIR" || { - echo "⚠️ Failed to clone 3.19-stable, using master as fallback..." - git clone --depth=1 https://gitlab.alpinelinux.org/alpine/aports.git "$APORTS_DIR" - } - } -fi - -# Copy custom profile -echo "📝 Setting up custom Archipelago profile..." -# Copy profile script to Alpine scripts directory (force overwrite) -cp -f "$SCRIPT_DIR/alpine-profile/mkimg.archipelago.sh" "$APORTS_DIR/scripts/" - -# Copy overlay files -PROFILE_DIR="$APORTS_DIR/scripts/mkimg.archipelago.d" -mkdir -p "$PROFILE_DIR" -cp -r "$SCRIPT_DIR/alpine-profile/overlay" "$PROFILE_DIR/" 2>/dev/null || true - -# Build ISO or disk image -cd "$APORTS_DIR/scripts" - -if [ "$BUILD_TYPE" = "iso" ]; then - echo "💿 Building ISO image..." - ./mkimage.sh \ - --arch "$ARCH" \ - --profile archipelago \ - --repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main" \ - --repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community" \ - --outdir "$OUTPUT_DIR" \ - --tag "$ALPINE_VERSION" || { - echo "❌ ISO build failed" - exit 1 - } - - # Rename output - if [ -f "$OUTPUT_DIR/alpine-archipelago-${ALPINE_VERSION}-${ARCH}.iso" ]; then - mv "$OUTPUT_DIR/alpine-archipelago-${ALPINE_VERSION}-${ARCH}.iso" \ - "$OUTPUT_DIR/archipelago-${ARCHIPELAGO_VERSION}-${ARCH}.iso" - fi -elif [ "$BUILD_TYPE" = "disk" ]; then - echo "💾 Building disk image..." - # Build ISO first, then convert to disk image - ./mkimage.sh \ - --arch "$ARCH" \ - --profile archipelago \ - --repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main" \ - --repository "http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community" \ - --outdir "$OUTPUT_DIR" \ - --tag "$ALPINE_VERSION" || { - echo "❌ Image build failed" - exit 1 - } - - # Convert to disk image (will be done in install script) - echo "📦 Disk image will be created in install step" -else - echo "❌ Unknown build type: $BUILD_TYPE" - exit 1 -fi - -# Install Archipelago into the image -echo "🔧 Installing Archipelago components..." -"$SCRIPT_DIR/scripts/install-archipelago.sh" "$OUTPUT_DIR" || { - echo "⚠️ Archipelago installation had issues, but image was built" -} - -echo "" -echo "✅ Build complete!" diff --git a/image-recipe/build-alpine.sh b/image-recipe/build-alpine.sh deleted file mode 100755 index 47bfb297..00000000 --- a/image-recipe/build-alpine.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# Build script for Alpine Linux base image -# Supports multi-arch: ARM64 (aarch64) and x86_64 - -set -e - -ARCH="${ARCH:-$(uname -m)}" -ALPINE_VERSION="${ALPINE_VERSION:-3.19}" -IMAGE_NAME="archipelago/alpine-base" -TAG="${ALPINE_VERSION}-${ARCH}" - -echo "🔨 Building Alpine Linux base image for ${ARCH}..." - -# Map architecture names -case "$ARCH" in - aarch64|arm64) - BUILD_ARCH="arm64" - PLATFORM="linux/arm64" - ;; - x86_64|amd64) - BUILD_ARCH="amd64" - PLATFORM="linux/amd64" - ;; - *) - echo "❌ Unsupported architecture: $ARCH" - exit 1 - ;; -esac - -# Build the image -docker buildx build \ - --platform "$PLATFORM" \ - --file image-recipe/Dockerfile.alpine-base \ - --tag "${IMAGE_NAME}:${TAG}" \ - --tag "${IMAGE_NAME}:latest-${BUILD_ARCH}" \ - --load \ - . - -echo "✅ Alpine base image built successfully!" -echo " Image: ${IMAGE_NAME}:${TAG}" -echo " Platform: ${PLATFORM}" diff --git a/image-recipe/build-backend.sh b/image-recipe/build-backend.sh deleted file mode 100755 index 038400e6..00000000 --- a/image-recipe/build-backend.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# Build Archipelago backend for Alpine Linux (x86_64-musl) - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -echo "🦀 Building Archipelago Backend for Alpine Linux" -echo "" - -# Create build directory -BUILD_DIR="$SCRIPT_DIR/build/backend" -mkdir -p "$BUILD_DIR" - -# Use Docker with Rust Alpine image to build -echo "🐳 Building in Alpine Docker container..." - -docker run --rm \ - -v "$PROJECT_ROOT:/workspace" \ - -v "$BUILD_DIR:/output" \ - -w /workspace/core \ - rust:alpine \ - sh -c ' - echo "📦 Installing build dependencies..." - apk add --no-cache musl-dev openssl-dev openssl-libs-static pkgconfig gcc - - echo "🔨 Building Archipelago backend (native Alpine build)..." - cd archipelago && cargo build --release - - echo "📋 Copying binary to output..." - cp ../target/release/archipelago /output/ - - echo "✅ Build complete!" - ls -lh /output/archipelago - ' || { - echo "❌ Build failed" - exit 1 -} - -echo "" -echo "✅ Backend built successfully!" -echo " Binary: $BUILD_DIR/archipelago" -echo " Size: $(du -h "$BUILD_DIR/archipelago" | cut -f1)" -echo "" diff --git a/image-recipe/build-custom-iso.sh b/image-recipe/build-custom-iso.sh deleted file mode 100755 index b9e19171..00000000 --- a/image-recipe/build-custom-iso.sh +++ /dev/null @@ -1,461 +0,0 @@ -#!/bin/bash -# Custom ISO builder that works on ARM Mac by modifying pre-built Alpine ISO -# instead of building from scratch - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -ALPINE_VERSION="${ALPINE_VERSION:-3.19}" -ARCH="${ARCH:-x86_64}" -ISO_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/releases/${ARCH}/alpine-standard-${ALPINE_VERSION}.0-${ARCH}.iso" -WORK_DIR="$SCRIPT_DIR/build/iso-custom" -OUTPUT_DIR="$SCRIPT_DIR/results" - -echo "🏔️ Building custom Archipelago ISO from Alpine base" -echo "" -echo "📋 Configuration:" -echo " Alpine Version: $ALPINE_VERSION" -echo " Architecture: $ARCH" -echo " Base ISO URL: $ISO_URL" -echo "" - -# Create work directories -mkdir -p "$WORK_DIR" -mkdir -p "$OUTPUT_DIR" - -# Download Alpine base ISO if not exists -BASE_ISO="$WORK_DIR/alpine-base.iso" -if [ ! -f "$BASE_ISO" ]; then - echo "📥 Downloading Alpine base ISO..." - curl -L -o "$BASE_ISO" "$ISO_URL" || { - echo "❌ Failed to download Alpine ISO" - exit 1 - } - echo "✅ Downloaded base ISO" -else - echo "✅ Using cached base ISO" -fi - -# Extract ISO contents -echo "📦 Extracting ISO contents..." -CUSTOM_DIR="$WORK_DIR/custom" -rm -rf "$CUSTOM_DIR" -mkdir -p "$CUSTOM_DIR" - -# Use 7zip to extract ISO (works on both macOS and Linux) -if command -v 7z >/dev/null 2>&1; then - 7z x "$BASE_ISO" -o"$CUSTOM_DIR" -y >/dev/null || { - echo "❌ Failed to extract ISO with 7zip" - exit 1 - } -elif [[ "$OSTYPE" == "darwin"* ]]; then - # Fallback: Try mounting on macOS - MOUNT_POINT="$WORK_DIR/mnt" - mkdir -p "$MOUNT_POINT" - hdiutil attach "$BASE_ISO" -mountpoint "$MOUNT_POINT" -readonly && { - rsync -a "$MOUNT_POINT"/ "$CUSTOM_DIR"/ - hdiutil detach "$MOUNT_POINT" - } || { - echo "❌ Failed to extract ISO. Install p7zip: brew install p7zip" - exit 1 - } -else - # On Linux, mount the ISO - MOUNT_POINT="$WORK_DIR/mnt" - mkdir -p "$MOUNT_POINT" - sudo mount -o loop "$BASE_ISO" "$MOUNT_POINT" && { - cp -a "$MOUNT_POINT"/* "$CUSTOM_DIR"/ - sudo umount "$MOUNT_POINT" - } || { - echo "❌ Failed to mount ISO" - exit 1 - } -fi - -echo "✅ ISO contents extracted" - -# Add custom packages -echo "📦 Adding custom packages..." -APKS_DIR="$CUSTOM_DIR/apks/$(uname -m)" -mkdir -p "$APKS_DIR" - -# Create a custom apk repository file -cat > "$CUSTOM_DIR/archipelago.list" <<'EOF' -# Archipelago custom packages -# These will be installed during setup-alpine or via apk add - -# Container runtime -podman -crun -fuse-overlayfs -slirp4netns - -# Web server -nginx - -# SSH server -openssh - -# Networking -iptables -iproute2 -EOF - -# Create automated installation script -echo "📝 Creating installation script..." -mkdir -p "$CUSTOM_DIR/archipelago" -cat > "$CUSTOM_DIR/archipelago/install.sh" <<'INSTALL_EOF' -#!/bin/sh -# Archipelago automated installation script - -set -e - -echo "🏝️ Installing Archipelago Bitcoin Node OS" -echo "" - -# Install required packages -echo "📦 Installing packages..." -apk add --no-cache \ - podman \ - crun \ - fuse-overlayfs \ - slirp4netns \ - nginx \ - openssh \ - iptables \ - iproute2 \ - bash \ - curl - -# Create archipelago user -echo "👤 Creating archipelago user..." -if ! id archipelago >/dev/null 2>&1; then - adduser -D -s /bin/bash archipelago - echo "archipelago:archipelago" | chpasswd -fi - -# Setup Podman for archipelago user -echo "🐳 Setting up Podman..." -mkdir -p /home/archipelago/.config/containers -chown -R archipelago:archipelago /home/archipelago - -# Create data directories -echo "📁 Creating data directories..." -mkdir -p /var/lib/archipelago/{apps,secrets,logs,backups} -chown -R archipelago:archipelago /var/lib/archipelago - -# Install Archipelago backend if available -if [ -f /media/cdrom/archipelago/bin/archipelago ]; then - echo "🦀 Installing Archipelago backend..." - mkdir -p /usr/local/bin - cp /media/cdrom/archipelago/bin/archipelago /usr/local/bin/ - chmod +x /usr/local/bin/archipelago - echo "✅ Backend installed" -fi - -# Install Archipelago frontend if available -if [ -d /media/cdrom/archipelago/web ]; then - echo "🎨 Installing Archipelago web UI..." - mkdir -p /usr/share/archipelago/web - cp -r /media/cdrom/archipelago/web/* /usr/share/archipelago/web/ - - # Configure nginx - cat > /etc/nginx/http.d/archipelago.conf <<'NGINX_EOF' -server { - listen 8100; - server_name _; - - root /usr/share/archipelago/web; - index index.html; - - location / { - try_files $uri $uri/ /index.html; - } - - # Proxy API requests to backend - location /api/ { - proxy_pass http://127.0.0.1:8101/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - } -} -NGINX_EOF - - rc-update add nginx default - echo "✅ Web UI installed" -fi - -# Create Archipelago service -if [ -f /usr/local/bin/archipelago ]; then - echo "⚙️ Creating Archipelago service..." - cat > /etc/init.d/archipelago <<'SERVICE_EOF' -#!/sbin/openrc-run - -name="Archipelago" -description="Archipelago Bitcoin Node OS Backend" -command="/usr/local/bin/archipelago" -command_background=true -pidfile="/run/archipelago.pid" - -depend() { - need net - after networking -} -SERVICE_EOF - - chmod +x /etc/init.d/archipelago - rc-update add archipelago default - echo "✅ Archipelago service created" -fi - -# Install app manifests if available -if [ -d /media/cdrom/archipelago/apps ]; then - echo "📦 Installing app manifests..." - mkdir -p /var/lib/archipelago/manifests - cp -r /media/cdrom/archipelago/apps/* /var/lib/archipelago/manifests/ - chown -R archipelago:archipelago /var/lib/archipelago/manifests - echo "✅ App manifests installed" -fi - -# Configure networking (DHCP) -echo "🌐 Configuring network..." -cat > /etc/network/interfaces <<'NET_EOF' -auto lo -iface lo inet loopback - -auto eth0 -iface eth0 inet dhcp - -auto enp0s3 -iface enp0s3 inet dhcp - -auto enp0s25 -iface enp0s25 inet dhcp -NET_EOF - -# Enable services -echo "⚙️ Enabling services..." -rc-update add networking default -rc-update add sshd default -rc-update add local default - -# Set hostname -echo "archipelago" > /etc/hostname - -# Configure SSH -echo "🔐 Configuring SSH..." -sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config - -# Create welcome message -cat > /etc/motd <<'MOTD_EOF' - -╔═══════════════════════════════════════════════════════════╗ -║ ║ -║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║ -║ ║ -║ A sovereign computing platform built on Alpine Linux ║ -║ ║ -╚═══════════════════════════════════════════════════════════╝ - -Default user: archipelago -Default pass: archipelago (CHANGE THIS IMMEDIATELY!) - -To access the web UI: - http://$(hostname -i):8100 - -To start Archipelago: - sudo systemctl start archipelago - -Documentation: /usr/share/doc/archipelago/ - -MOTD_EOF - -echo "" -echo "✅ Archipelago installation complete!" -echo "" -echo "Next steps:" -echo " 1. Reboot the system" -echo " 2. Login with user: archipelago, pass: archipelago" -echo " 3. Change the default password: passwd" -echo " 4. Access web UI at http://:8100" -echo "" - -INSTALL_EOF - -chmod +x "$CUSTOM_DIR/archipelago/install.sh" - -# Create README -cat > "$CUSTOM_DIR/archipelago/README.txt" <<'README_EOF' -ARCHIPELAGO BITCOIN NODE OS -=========================== - -This is a customized Alpine Linux ISO with Archipelago packages. - -INSTALLATION: -1. Boot from this USB/ISO -2. Login as root (no password) -3. Run: setup-alpine -4. Follow the prompts to install Alpine -5. After installation, run: sh /media/*/archipelago/install.sh -6. Reboot - -QUICK INSTALL: -For automated installation on dedicated hardware: -1. Boot from USB/ISO -2. Login as root -3. Run: sh /media/*/archipelago/install.sh -4. This will set up Alpine + Archipelago automatically - -For more information, visit: -https://github.com/your-repo/archipelago - -README_EOF - -# Modify boot configuration to show Archipelago branding -if [ -f "$CUSTOM_DIR/boot/grub/grub.cfg" ]; then - echo "⚙️ Customizing boot menu..." - sed -i.bak 's/Alpine Linux/Archipelago Bitcoin Node OS/g' "$CUSTOM_DIR/boot/grub/grub.cfg" 2>/dev/null || true -fi - -if [ -f "$CUSTOM_DIR/boot/syslinux/syslinux.cfg" ]; then - sed -i.bak 's/Alpine Linux/Archipelago Bitcoin Node OS/g' "$CUSTOM_DIR/boot/syslinux/syslinux.cfg" 2>/dev/null || true -fi - -# Include Archipelago backend if available -if [ -n "$INCLUDE_BACKEND" ] && [ -f "$INCLUDE_BACKEND" ]; then - echo "🦀 Including Archipelago backend..." - mkdir -p "$CUSTOM_DIR/archipelago/bin" - cp "$INCLUDE_BACKEND" "$CUSTOM_DIR/archipelago/bin/" - chmod +x "$CUSTOM_DIR/archipelago/bin/archipelago" - echo "✅ Backend included: $(du -h "$INCLUDE_BACKEND" | cut -f1)" -fi - -# Include Archipelago frontend if available -if [ -n "$INCLUDE_FRONTEND" ] && [ -d "$INCLUDE_FRONTEND" ]; then - echo "🎨 Including Archipelago frontend..." - mkdir -p "$CUSTOM_DIR/archipelago/web" - cp -r "$INCLUDE_FRONTEND"/* "$CUSTOM_DIR/archipelago/web/" - echo "✅ Frontend included" -fi - -# Include app manifests if available -APPS_DIR="$(dirname "$0")/../apps" -if [ -d "$APPS_DIR" ]; then - echo "📦 Including app manifests..." - mkdir -p "$CUSTOM_DIR/archipelago/apps" - # Copy all app directories with manifest.yml files - find "$APPS_DIR" -maxdepth 1 -type d -exec test -f {}/manifest.yml \; -exec cp -r {} "$CUSTOM_DIR/archipelago/apps/" \; - APP_COUNT=$(find "$CUSTOM_DIR/archipelago/apps" -name "manifest.yml" | wc -l | tr -d ' ') - echo "✅ Included $APP_COUNT app manifests" -fi - -# Create the ISO -OUTPUT_ISO="$OUTPUT_DIR/archipelago-${ALPINE_VERSION}-${ARCH}.iso" -echo "" -echo "🔥 Creating final ISO..." - -if [[ "$OSTYPE" == "darwin"* ]]; then - # On macOS, use xorriso for hybrid BIOS+UEFI bootable ISO - if command -v xorriso >/dev/null 2>&1; then - # Try dual-boot (BIOS + UEFI) if EFI bootloader exists - if [ -f "$CUSTOM_DIR/boot/grub/grub.cfg" ] || [ -d "$CUSTOM_DIR/efi" ] || [ -d "$CUSTOM_DIR/EFI" ]; then - echo "🔄 Creating hybrid BIOS+UEFI bootable ISO..." - xorriso -as mkisofs -o "$OUTPUT_ISO" \ - -volid "ARCHIPELAGO" \ - -J -R \ - -c boot/syslinux/boot.cat \ - -b boot/syslinux/isolinux.bin \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -eltorito-alt-boot \ - -e boot/grub/efi.img \ - -no-emul-boot \ - -isohybrid-gpt-basdat \ - -isohybrid-mbr "$CUSTOM_DIR/boot/syslinux/isohdpfx.bin" \ - "$CUSTOM_DIR" 2>&1 | grep -v "xorriso : UPDATE" || { - echo "⚠️ Dual-boot failed, trying BIOS-only..." - xorriso -as mkisofs -o "$OUTPUT_ISO" \ - -volid "ARCHIPELAGO" \ - -J -R \ - -c boot/syslinux/boot.cat \ - -b boot/syslinux/isolinux.bin \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -isohybrid-mbr "$CUSTOM_DIR/boot/syslinux/isohdpfx.bin" \ - "$CUSTOM_DIR" 2>&1 | grep -v "xorriso : UPDATE" - } - else - echo "🔄 Creating BIOS-only bootable ISO..." - xorriso -as mkisofs -o "$OUTPUT_ISO" \ - -volid "ARCHIPELAGO" \ - -J -R \ - -c boot/syslinux/boot.cat \ - -b boot/syslinux/isolinux.bin \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -isohybrid-mbr "$CUSTOM_DIR/boot/syslinux/isohdpfx.bin" \ - "$CUSTOM_DIR" 2>&1 | grep -v "xorriso : UPDATE" || true - - # Check if ISO was created - if [ ! -f "$OUTPUT_ISO" ]; then - echo "⚠️ xorriso failed, trying without isohybrid..." - xorriso -as mkisofs -o "$OUTPUT_ISO" \ - -volid "ARCHIPELAGO" \ - -J -R \ - -c boot/syslinux/boot.cat \ - -b boot/syslinux/isolinux.bin \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - "$CUSTOM_DIR" 2>&1 | grep -v "xorriso : UPDATE" - fi - fi - else - # Fallback to hdiutil - hdiutil makehybrid -o "$OUTPUT_ISO" "$CUSTOM_DIR" \ - -iso -joliet -default-volume-name "ARCHIPELAGO" || { - echo "❌ Failed to create ISO" - exit 1 - } - fi -else - # On Linux, use genisoimage or xorriso - if command -v genisoimage >/dev/null 2>&1; then - genisoimage -o "$OUTPUT_ISO" \ - -b boot/syslinux/isolinux.bin \ - -c boot/syslinux/boot.cat \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -J -R -V "ARCHIPELAGO" \ - "$CUSTOM_DIR" - elif command -v xorriso >/dev/null 2>&1; then - xorriso -as mkisofs -o "$OUTPUT_ISO" \ - -b boot/syslinux/isolinux.bin \ - -c boot/syslinux/boot.cat \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -J -R -V "ARCHIPELAGO" \ - "$CUSTOM_DIR" - else - echo "❌ No ISO creation tool found (need genisoimage or xorriso)" - exit 1 - fi -fi - -# Make bootable (add isohybrid for USB boot) -if command -v isohybrid >/dev/null 2>&1 && [[ "$OSTYPE" != "darwin"* ]]; then - isohybrid "$OUTPUT_ISO" -fi - -echo "" -echo "✅ ISO created successfully!" -echo "" -echo "📀 Output: $OUTPUT_ISO" -echo " Size: $(du -h "$OUTPUT_ISO" | cut -f1)" -echo "" -echo "📝 To create a bootable USB:" -if [[ "$OSTYPE" == "darwin"* ]]; then - echo " 1. Insert USB drive" - echo " 2. Find device: diskutil list" - echo " 3. Unmount: diskutil unmountDisk /dev/diskN" - echo " 4. Write: sudo dd if=$OUTPUT_ISO of=/dev/rdiskN bs=1m" -else - echo " sudo dd if=$OUTPUT_ISO of=/dev/sdX bs=4M status=progress" -fi -echo "" diff --git a/image-recipe/build-debian-iso.sh b/image-recipe/build-debian-iso.sh new file mode 100755 index 00000000..e7d997a6 --- /dev/null +++ b/image-recipe/build-debian-iso.sh @@ -0,0 +1,437 @@ +#!/bin/bash +# +# Build Archipelago Bitcoin Node OS ISO - Debian Live Edition +# Based on Debian Live for reliable USB boot (like StartOS) +# +# Usage: ./build-debian-iso.sh +# + +set -e + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +WORK_DIR="$SCRIPT_DIR/build/debian-iso" +OUTPUT_DIR="$SCRIPT_DIR/results" +DEBIAN_VERSION="bookworm" +ARCH="amd64" + +echo "╔════════════════════════════════════════════════════════╗" +echo "║ Building Archipelago - Debian Live Edition ║" +echo "╚════════════════════════════════════════════════════════╝" +echo "" + +# Create directories +mkdir -p "$WORK_DIR" +mkdir -p "$OUTPUT_DIR" + +# Download Debian Live ISO if not exists +BASE_ISO="$WORK_DIR/debian-live-12-${ARCH}-standard.iso" +if [ ! -f "$BASE_ISO" ] || [ $(stat -f%z "$BASE_ISO" 2>/dev/null || echo 0) -lt 100000000 ]; then + echo "📥 Downloading Debian Live 12 (Bookworm) Standard ISO..." + rm -f "$BASE_ISO" + # Use SourceForge respin which has up-to-date Debian 12 Live + curl -L -o "$BASE_ISO" \ + "https://sourceforge.net/projects/debian-live-respin-iso/files/standard/live-image-debian12.11-standard-20250522-amd64.hybrid.iso/download" + echo "✅ Downloaded Debian Live ISO" +else + echo "✅ Using cached Debian Live ISO" +fi + +# Extract ISO +echo "" +echo "📦 Extracting Debian Live ISO..." +ISO_CUSTOM="$WORK_DIR/custom" +rm -rf "$ISO_CUSTOM" +mkdir -p "$ISO_CUSTOM" + +cd "$ISO_CUSTOM" +7z x -y "$BASE_ISO" >/dev/null 2>&1 || 7z x -y "$BASE_ISO" + +echo "✅ Extracted ISO" + +# Add Archipelago files +echo "" +echo "📋 Adding Archipelago files..." + +ARCHIPELAGO_DIR="$ISO_CUSTOM/archipelago" +mkdir -p "$ARCHIPELAGO_DIR" +mkdir -p "$ARCHIPELAGO_DIR/bin" +mkdir -p "$ARCHIPELAGO_DIR/scripts" + +# Copy the pre-built backend if it exists +if [ -d "$SCRIPT_DIR/../core/target/release" ]; then + echo "🦀 Including Archipelago backend..." + cp "$SCRIPT_DIR/../core/target/release/archipelago" "$ARCHIPELAGO_DIR/bin/" 2>/dev/null || true +fi + +# Copy the frontend build if it exists +if [ -d "$SCRIPT_DIR/../web/dist/neode-ui" ]; then + echo "🎨 Including Archipelago Web UI..." + cp -r "$SCRIPT_DIR/../web/dist/neode-ui" "$ARCHIPELAGO_DIR/web-ui" +elif [ -d "$SCRIPT_DIR/../neode-ui/dist" ]; then + echo "🎨 Including Archipelago frontend..." + cp -r "$SCRIPT_DIR/../neode-ui/dist" "$ARCHIPELAGO_DIR/web-ui" 2>/dev/null || true +fi + +# Copy app manifests +if [ -d "$SCRIPT_DIR/../apps" ]; then + echo "📦 Including app manifests..." + cp -r "$SCRIPT_DIR/../apps" "$ARCHIPELAGO_DIR/apps" 2>/dev/null || true +fi + +# Copy setup scripts +if [ -d "$SCRIPT_DIR/archipelago-scripts" ]; then + echo "📜 Including setup scripts..." + cp "$SCRIPT_DIR/archipelago-scripts/"*.sh "$ARCHIPELAGO_DIR/scripts/" 2>/dev/null || true + chmod +x "$ARCHIPELAGO_DIR/scripts/"*.sh +fi + +# Create main setup script for Archipelago +cat > "$ARCHIPELAGO_DIR/setup-archipelago.sh" <<'SETUP_EOF' +#!/bin/bash +# +# Archipelago Setup Script for Debian Live +# +echo "" +echo "╔═══════════════════════════════════════════════════════════╗" +echo "║ 🏝️ ARCHIPELAGO BITCOIN NODE OS - Debian Edition ║" +echo "╚═══════════════════════════════════════════════════════════╝" +echo "" + +# Find the boot media +BOOT_MEDIA="" +for dev in /run/live/medium /lib/live/mount/medium /cdrom /media/cdrom; do + if [ -d "$dev/archipelago" ]; then + BOOT_MEDIA="$dev" + break + fi +done + +if [ -z "$BOOT_MEDIA" ]; then + echo "❌ Could not find Archipelago files on boot media" + echo " Looking in: /run/live/medium, /lib/live/mount/medium, /cdrom" + exit 1 +fi + +echo "📍 Found Archipelago at: $BOOT_MEDIA/archipelago" +echo "" + +# Copy files to system +if [ -d "$BOOT_MEDIA/archipelago/bin" ]; then + echo "📋 Installing Archipelago binaries..." + sudo cp -r "$BOOT_MEDIA/archipelago/bin/"* /usr/local/bin/ 2>/dev/null || true +fi + +if [ -d "$BOOT_MEDIA/archipelago/apps" ]; then + echo "📋 Installing app manifests..." + sudo mkdir -p /etc/archipelago + sudo cp -r "$BOOT_MEDIA/archipelago/apps" /etc/archipelago/ 2>/dev/null || true +fi + +if [ -d "$BOOT_MEDIA/archipelago/scripts" ]; then + echo "📋 Installing setup scripts..." + sudo mkdir -p /opt/archipelago + sudo cp -r "$BOOT_MEDIA/archipelago/scripts" /opt/archipelago/ 2>/dev/null || true + sudo chmod +x /opt/archipelago/scripts/*.sh +fi + +echo "" +echo "✅ Archipelago installed!" +echo "" + +# Automatically launch the menu +sleep 1 +exec /opt/archipelago/scripts/archipelago-menu.sh +SETUP_EOF + +chmod +x "$ARCHIPELAGO_DIR/setup-archipelago.sh" + +# Create auto-start script that runs on login +cat > "$ARCHIPELAGO_DIR/auto-start.sh" <<'AUTOSTART_EOF' +#!/bin/bash +# +# Archipelago Auto-Start - Runs on first login +# + +# Find boot media +BOOT_MEDIA="" +for dev in /run/live/medium /lib/live/mount/medium /cdrom; do + if [ -d "$dev/archipelago" ]; then + BOOT_MEDIA="$dev" + break + fi +done + +# Install essential tools on first boot (required for disk installer) +if [ ! -f /tmp/.archipelago-tools-installed ]; then + clear + echo "" + echo " ╔═══════════════════════════════════════════════════════════╗" + echo " ║ 🏝️ ARCHIPELAGO - First Boot Setup ║" + echo " ╚═══════════════════════════════════════════════════════════╝" + echo "" + echo " 📦 Installing required tools..." + echo "" + + # Update and install essential tools + sudo apt-get update -qq 2>/dev/null + sudo apt-get install -y parted debootstrap dosfstools e2fsprogs 2>/dev/null + + echo " ✅ Tools installed" + touch /tmp/.archipelago-tools-installed + sleep 1 +fi + +# Get IP address +IP=$(hostname -I 2>/dev/null | awk '{print $1}') + +# Start web UI in background if not already running +if [ -n "$BOOT_MEDIA" ] && ! pgrep -f "http.server" >/dev/null; then + WEB_UI_DIR="$BOOT_MEDIA/archipelago/web-ui" + if [ -d "$WEB_UI_DIR" ]; then + cd "$WEB_UI_DIR" + nohup python3 -m http.server 80 --bind 0.0.0.0 >/dev/null 2>&1 & + fi +fi + +clear +echo "" +echo " ╔═══════════════════════════════════════════════════════════╗" +echo " ║ ║" +echo " ║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║" +echo " ║ ║" +echo " ║ Your sovereign Bitcoin infrastructure ║" +echo " ║ ║" +echo " ╚═══════════════════════════════════════════════════════════╝" +echo "" +if [ -n "$IP" ]; then +echo " ┌─────────────────────────────────────────────────────────────┐" +echo " │ 🌐 Web UI: http://$IP " +echo " └─────────────────────────────────────────────────────────────┘" +echo "" +fi +echo " Type 'archipelago' to open the setup menu" +echo "" + +# Check if already set up +if [ -f ~/.archipelago-setup-done ]; then + return 2>/dev/null || exit 0 +fi + +# First time - run setup automatically +if [ -n "$BOOT_MEDIA" ] && [ -f "$BOOT_MEDIA/archipelago/setup-archipelago.sh" ]; then + echo "" + read -p " Press Enter to continue to setup menu..." + bash "$BOOT_MEDIA/archipelago/setup-archipelago.sh" +fi +AUTOSTART_EOF + +chmod +x "$ARCHIPELAGO_DIR/auto-start.sh" + +# Create a simple 'archipelago-menu' command wrapper (don't overwrite the backend binary!) +cat > "$ARCHIPELAGO_DIR/bin/archipelago-menu" <<'CMD_EOF' +#!/bin/bash +# Archipelago menu command - launches the setup menu + +if [ -f /opt/archipelago/scripts/archipelago-menu.sh ]; then + exec /opt/archipelago/scripts/archipelago-menu.sh +else + # Find on boot media + for dev in /run/live/medium /lib/live/mount/medium /cdrom; do + if [ -f "$dev/archipelago/scripts/archipelago-menu.sh" ]; then + exec bash "$dev/archipelago/scripts/archipelago-menu.sh" + fi + done + echo "Archipelago menu not found. Run setup first:" + echo " sh /run/live/medium/archipelago/setup-archipelago.sh" +fi +CMD_EOF + +chmod +x "$ARCHIPELAGO_DIR/bin/archipelago-menu" + +# Verify the real backend binary is there +if [ -f "$ARCHIPELAGO_DIR/bin/archipelago" ]; then + echo " Backend binary: $(file "$ARCHIPELAGO_DIR/bin/archipelago" | grep -o 'ELF.*' || echo 'included')" +fi + +# Create SSH auto-start script for live environment +mkdir -p "$ISO_CUSTOM/etc/live/config.conf.d" +cat > "$ISO_CUSTOM/etc/live/config.conf.d/archipelago.conf" <<'LIVE_CONF_EOF' +# Archipelago live config +LIVE_HOSTNAME="archipelago" +LIVE_USER_DEFAULT_GROUPS="audio cdrom dip floppy video plugdev netdev powerdev scanner bluetooth sudo" +LIVE_CONF_EOF + +# Create rc.local to start SSH on boot (works in live environment) +mkdir -p "$ISO_CUSTOM/etc/rc.local.d" +cat > "$ISO_CUSTOM/etc/rc.local.d/archipelago-ssh.sh" <<'RCLOCAL_EOF' +#!/bin/bash +# Enable SSH in live environment + +# Install and start SSH if not running +if ! systemctl is-active --quiet ssh 2>/dev/null; then + # Try to start SSH (may already be installed) + systemctl start ssh 2>/dev/null || true + + # If SSH not installed, install it + if ! command -v sshd >/dev/null 2>&1; then + apt-get update -qq + apt-get install -y openssh-server + systemctl start ssh + fi +fi + +# Set password for user (live user is typically 'user' with empty password) +echo "user:archipelago" | chpasswd 2>/dev/null || true +echo "root:archipelago" | chpasswd 2>/dev/null || true + +# Allow password auth +sed -i 's/#PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config 2>/dev/null +sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config 2>/dev/null +systemctl restart ssh 2>/dev/null || true +RCLOCAL_EOF +chmod +x "$ISO_CUSTOM/etc/rc.local.d/archipelago-ssh.sh" + +# Also create a systemd service that runs early +mkdir -p "$ISO_CUSTOM/etc/systemd/system" +cat > "$ISO_CUSTOM/etc/systemd/system/archipelago-ssh.service" <<'SERVICE_EOF' +[Unit] +Description=Archipelago SSH Setup +After=network-online.target +Wants=network-online.target + +[Service] +Type=oneshot +ExecStart=/bin/bash -c 'apt-get update -qq && apt-get install -y openssh-server && echo "user:archipelago" | chpasswd && echo "root:archipelago" | chpasswd && sed -i "s/#PasswordAuthentication.*/PasswordAuthentication yes/" /etc/ssh/sshd_config && sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/" /etc/ssh/sshd_config && systemctl restart ssh' +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +SERVICE_EOF + +# Enable the service +mkdir -p "$ISO_CUSTOM/etc/systemd/system/multi-user.target.wants" +ln -sf ../archipelago-ssh.service "$ISO_CUSTOM/etc/systemd/system/multi-user.target.wants/archipelago-ssh.service" + +# Create system-wide profile script that runs on ANY login +mkdir -p "$ISO_CUSTOM/etc/profile.d" +cat > "$ISO_CUSTOM/etc/profile.d/archipelago.sh" <<'PROFILE_EOF' +#!/bin/bash +# Archipelago auto-start - runs on login + +# Only run once per session and only in interactive shells +if [ -n "$ARCHIPELAGO_STARTED" ] || [ ! -t 0 ]; then + return 0 2>/dev/null || exit 0 +fi +export ARCHIPELAGO_STARTED=1 + +# Find archipelago directory +BOOT_MEDIA="" +for dev in /run/live/medium /lib/live/mount/medium /cdrom; do + if [ -d "$dev/archipelago" ]; then + BOOT_MEDIA="$dev" + break + fi +done + +if [ -z "$BOOT_MEDIA" ]; then + return 0 2>/dev/null || exit 0 +fi + +# Install archipelago command if not present +if [ ! -f /usr/local/bin/archipelago ] && [ -f "$BOOT_MEDIA/archipelago/bin/archipelago" ]; then + sudo cp "$BOOT_MEDIA/archipelago/bin/archipelago" /usr/local/bin/ 2>/dev/null + sudo chmod +x /usr/local/bin/archipelago 2>/dev/null +fi + +# Run auto-start +if [ -f "$BOOT_MEDIA/archipelago/auto-start.sh" ]; then + source "$BOOT_MEDIA/archipelago/auto-start.sh" +fi +PROFILE_EOF + +chmod +x "$ISO_CUSTOM/etc/profile.d/archipelago.sh" + +# Modify GRUB config for Archipelago branding +echo "" +echo "⚙️ Configuring boot..." + +if [ -f "$ISO_CUSTOM/boot/grub/grub.cfg" ]; then + sed -i.bak \ + -e 's/Debian GNU\/Linux/Archipelago Bitcoin Node OS/g' \ + -e 's/Live system/Archipelago Live/g' \ + "$ISO_CUSTOM/boot/grub/grub.cfg" +fi + +if [ -f "$ISO_CUSTOM/isolinux/menu.cfg" ]; then + sed -i.bak \ + -e 's/Debian GNU\/Linux/Archipelago Bitcoin Node OS/g' \ + -e 's/Live system/Archipelago Live/g' \ + "$ISO_CUSTOM/isolinux/menu.cfg" +fi + +if [ -f "$ISO_CUSTOM/isolinux/live.cfg" ]; then + sed -i.bak \ + -e 's/Live system/Archipelago Live/g' \ + "$ISO_CUSTOM/isolinux/live.cfg" +fi + +# Create final ISO +OUTPUT_ISO="$OUTPUT_DIR/archipelago-debian-12-x86_64.iso" +echo "" +echo "🔥 Creating final bootable ISO..." + +if command -v xorriso >/dev/null 2>&1; then + # Create proper hybrid ISO with MBR for USB boot + # Need to extract MBR from isolinux or use system syslinux + + # Check for isohdpfx.bin in various locations + ISOHDPFX="" + for path in \ + "/usr/local/share/syslinux/isohdpfx.bin" \ + "/usr/share/syslinux/isohdpfx.bin" \ + "/opt/homebrew/share/syslinux/isohdpfx.bin" \ + "$ISO_CUSTOM/isolinux/isohdpfx.bin"; do + if [ -f "$path" ]; then + ISOHDPFX="$path" + break + fi + done + + if [ -z "$ISOHDPFX" ]; then + echo "⚠️ No isohdpfx.bin found, extracting from isolinux.bin..." + # Extract first 432 bytes from isolinux.bin as MBR + dd if="$ISO_CUSTOM/isolinux/isolinux.bin" of="$WORK_DIR/isohdpfx.bin" bs=432 count=1 2>/dev/null + ISOHDPFX="$WORK_DIR/isohdpfx.bin" + fi + + echo " Using MBR: $ISOHDPFX" + + xorriso -as mkisofs -o "$OUTPUT_ISO" \ + -volid "ARCHIPELAGO" \ + -J -R \ + -isohybrid-mbr "$ISOHDPFX" \ + -c isolinux/boot.cat \ + -b isolinux/isolinux.bin \ + -no-emul-boot -boot-load-size 4 -boot-info-table \ + -eltorito-alt-boot \ + -e boot/grub/efi.img \ + -no-emul-boot \ + -isohybrid-gpt-basdat \ + "$ISO_CUSTOM" +else + echo "❌ xorriso not found. Please install it: brew install xorriso" + exit 1 +fi + +echo "" +echo "✅ ISO created successfully!" +echo "" +echo "📀 Output: $OUTPUT_ISO" +echo " Size: $(du -h "$OUTPUT_ISO" | cut -f1)" +echo "" +echo "🔥 This is Debian Live-based - reliable USB boot like StartOS!" +echo "" +echo "To create USB:" +echo " 1. Use Balena Etcher to flash the ISO" +echo " 2. Or: sudo dd if=$OUTPUT_ISO of=/dev/sdX bs=4M status=progress" +echo "" diff --git a/image-recipe/build-for-hardware.sh b/image-recipe/build-for-hardware.sh deleted file mode 100755 index a1da9f9d..00000000 --- a/image-recipe/build-for-hardware.sh +++ /dev/null @@ -1,368 +0,0 @@ -#!/bin/bash -# Build Archipelago OS for specific hardware target -# Supports: start9-pure, hp-prodesk, dell-optiplex, generic - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" - -# Hardware target (default: generic) -HARDWARE_TARGET="${1:-generic}" -BUILD_TYPE="${2:-iso}" - -ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}" -ALPINE_VERSION="${ALPINE_VERSION:-3.19}" -ARCH="x86_64" # All supported hardware is x86_64 - -# Color output -GREEN='\033[0;32m' -BLUE='\033[0;34m' -YELLOW='\033[1;33m' -RED='\033[0;31m' -NC='\033[0m' # No Color - -echo -e "${BLUE}🏗️ Archipelago OS Builder${NC}" -echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━${NC}" -echo "" - -# Validate hardware target -case "$HARDWARE_TARGET" in - start9-pure|start9) - HARDWARE_NAME="Start9 Server Pure" - HARDWARE_PROFILE="start9-pure" - CPU_VENDOR="intel" - CPU_MODEL="i7-10710U" - RAM_MIN="32GB" - STORAGE_MIN="2TB" - NETWORK_INTERFACES="1x Gigabit Ethernet" - USB_PORTS="4x USB 3.0, 2x USB 2.0, 1x USB-C 3.1" - OPTIMIZATIONS="intel-graphics intel-networking nvme-ssd" - ;; - hp-prodesk|prodesk) - HARDWARE_NAME="HP ProDesk 400 G4 DM" - HARDWARE_PROFILE="hp-prodesk" - CPU_VENDOR="intel" - CPU_MODEL="varies" - RAM_MIN="8GB" - STORAGE_MIN="128GB" - NETWORK_INTERFACES="1x Gigabit Ethernet" - USB_PORTS="4x USB 3.0, 2x USB 2.0" - OPTIMIZATIONS="intel-graphics intel-networking sata-ssd" - ;; - dell-optiplex|optiplex) - HARDWARE_NAME="Dell OptiPlex" - HARDWARE_PROFILE="dell-optiplex" - CPU_VENDOR="intel" - CPU_MODEL="varies" - RAM_MIN="8GB" - STORAGE_MIN="128GB" - NETWORK_INTERFACES="1x Gigabit Ethernet" - USB_PORTS="Multiple USB ports" - OPTIMIZATIONS="intel-graphics intel-networking sata-ssd" - ;; - generic) - HARDWARE_NAME="Generic x86_64" - HARDWARE_PROFILE="generic" - CPU_VENDOR="any" - CPU_MODEL="any" - RAM_MIN="8GB" - STORAGE_MIN="128GB" - NETWORK_INTERFACES="any" - USB_PORTS="any" - OPTIMIZATIONS="generic" - ;; - *) - echo -e "${RED}❌ Unknown hardware target: $HARDWARE_TARGET${NC}" - echo "" - echo "Supported targets:" - echo " start9-pure - Start9 Server Pure (Intel i7-10710U)" - echo " hp-prodesk - HP ProDesk 400 G4 DM" - echo " dell-optiplex - Dell OptiPlex" - echo " generic - Generic x86_64 hardware" - echo "" - echo "Usage: $0 [iso|disk]" - exit 1 - ;; -esac - -echo -e "${GREEN}📋 Build Configuration${NC}" -echo -e "━━━━━━━━━━━━━━━━━━━━━━━━" -echo -e " Hardware: ${YELLOW}${HARDWARE_NAME}${NC}" -echo -e " Profile: ${HARDWARE_PROFILE}" -echo -e " CPU: ${CPU_VENDOR} ${CPU_MODEL}" -echo -e " Min RAM: ${RAM_MIN}" -echo -e " Min Storage: ${STORAGE_MIN}" -echo -e " Network: ${NETWORK_INTERFACES}" -echo -e " Build Type: ${BUILD_TYPE}" -echo -e " Architecture: ${ARCH}" -echo -e " Version: ${ARCHIPELAGO_VERSION}" -echo -e " Alpine: ${ALPINE_VERSION}" -echo "" - -# Create hardware-specific overlay -HARDWARE_OVERLAY_DIR="$SCRIPT_DIR/alpine-profile/overlay-${HARDWARE_PROFILE}" -mkdir -p "$HARDWARE_OVERLAY_DIR/etc/archipelago" - -# Create hardware detection script -cat > "$HARDWARE_OVERLAY_DIR/etc/archipelago/hardware-info.sh" <<'EOF' -#!/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 -EOF - -chmod +x "$HARDWARE_OVERLAY_DIR/etc/archipelago/hardware-info.sh" - -# Create hardware-specific config -cat > "$HARDWARE_OVERLAY_DIR/etc/archipelago/hardware.toml" < "$HARDWARE_OVERLAY_DIR/etc/local.d/00-hardware-detect.start" <<'EOF' -#!/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 </dev/null) - -Runtime Detection: -$(cat /var/log/archipelago-hardware.log 2>/dev/null) -INFO -EOF - -chmod +x "$HARDWARE_OVERLAY_DIR/etc/local.d/00-hardware-detect.start" - -# Merge with base overlay -echo -e "${BLUE}📦 Merging overlays...${NC}" -MERGED_OVERLAY="$SCRIPT_DIR/alpine-profile/overlay-merged" -rm -rf "$MERGED_OVERLAY" -mkdir -p "$MERGED_OVERLAY" - -# Copy base overlay -if [ -d "$SCRIPT_DIR/alpine-profile/overlay" ]; then - cp -a "$SCRIPT_DIR/alpine-profile/overlay/"* "$MERGED_OVERLAY/" -fi - -# Copy hardware-specific overlay (overwrites base) -if [ -d "$HARDWARE_OVERLAY_DIR" ]; then - cp -a "$HARDWARE_OVERLAY_DIR/"* "$MERGED_OVERLAY/" -fi - -echo -e "${GREEN}✓${NC} Overlays merged" -echo "" - -# Set environment variables for build -export HARDWARE_TARGET="$HARDWARE_PROFILE" -export HARDWARE_NAME="$HARDWARE_NAME" -export ARCHIPELAGO_VERSION -export ALPINE_VERSION -export ARCH -export BUILD_TYPE - -# Determine build method - use custom ISO builder -echo "" -echo -e "${BLUE}🔨 Building custom ISO from Alpine base...${NC}" -"$SCRIPT_DIR/build-custom-iso.sh" || { - echo "" - echo -e "${RED}❌ ISO build failed${NC}" - exit 1 -} - -# Rename output with hardware target -OUTPUT_DIR="$SCRIPT_DIR/results" -if [ -f "$OUTPUT_DIR/archipelago-${ALPINE_VERSION}-${ARCH}.iso" ]; then - mv "$OUTPUT_DIR/archipelago-${ALPINE_VERSION}-${ARCH}.iso" \ - "$OUTPUT_DIR/archipelago-${ALPINE_VERSION}-${HARDWARE_PROFILE}-${ARCH}.iso" - - echo "" - echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo -e "${GREEN}✅ Build Complete!${NC}" - echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" - echo "" - echo -e " ${YELLOW}Hardware:${NC} ${HARDWARE_NAME}" - echo -e " ${YELLOW}ISO File:${NC} archipelago-${ALPINE_VERSION}-${HARDWARE_PROFILE}-${ARCH}.iso" - echo -e " ${YELLOW}Location:${NC} ${OUTPUT_DIR}/" - echo "" - echo -e "${BLUE}Next Steps:${NC}" - echo -e " 1. Flash ISO to USB drive:" - echo -e " ${YELLOW}sudo dd if=${OUTPUT_DIR}/archipelago-${ALPINE_VERSION}-${HARDWARE_PROFILE}-${ARCH}.iso of=/dev/sdX bs=1M${NC}" - echo "" - echo -e " 2. Boot ${HARDWARE_NAME} from USB" - echo "" - echo -e " 3. Access Archipelago UI at: ${YELLOW}http://device-ip:8100${NC}" - echo "" -fi - -# Create build manifest -cat > "$OUTPUT_DIR/BUILD_MANIFEST_${HARDWARE_PROFILE}.txt" </dev/null 2>&1 && docker info >/dev/null 2>&1; then - echo "⚠️ Not on Alpine - using Docker" - USE_DOCKER=true -else - echo "❌ Need Alpine Linux or Docker" - echo " Install Alpine: https://alpinelinux.org/downloads/" - echo " Or install Docker: https://docs.docker.com/get-docker/" - exit 1 -fi - -if [ "$USE_DOCKER" = true ]; then - # Use Docker for build - echo "🐳 Using Docker container for build..." - echo " This may take 30-60 minutes on first build..." - echo "" - - docker run --rm -it \ - -v "$PROJECT_ROOT:/workspace" \ - -v "$OUTPUT_DIR:/results" \ - -v "$SCRIPT_DIR/build:/build" \ - -v "$SCRIPT_DIR/apks:/apks" \ - -e BUILD_TYPE="$BUILD_TYPE" \ - -e ARCHIPELAGO_VERSION="$ARCHIPELAGO_VERSION" \ - -e ALPINE_VERSION="$ALPINE_VERSION" \ - -e ARCH="$ARCH" \ - alpine:${ALPINE_VERSION} \ - sh -c " - apk add --no-cache bash git alpine-sdk abuild alpine-conf syslinux xorriso squashfs-tools grub grub-efi mtools dosfstools e2fsprogs curl rust cargo nodejs npm - cd /workspace/image-recipe - ./build-alpine-native.sh $BUILD_TYPE - " -else - # Native Alpine build - "$SCRIPT_DIR/build-alpine-native.sh" "$BUILD_TYPE" -fi diff --git a/image-recipe/build-macos.sh b/image-recipe/build-macos.sh deleted file mode 100755 index 27bbc740..00000000 --- a/image-recipe/build-macos.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -# macOS build wrapper using Docker -# Builds Alpine image in Docker container - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" -BUILD_TYPE="${1:-iso}" - -echo "🍎 Building on macOS via Docker" -echo "" - -# Check for Docker -if ! command -v docker >/dev/null 2>&1; then - echo "❌ Docker not found. Install Docker Desktop: https://www.docker.com/products/docker-desktop" - exit 1 -fi - -if ! docker info >/dev/null 2>&1; then - echo "❌ Docker daemon not running. Start Docker Desktop." - exit 1 -fi - -# Build Docker image if needed -echo "🔨 Building Docker build image..." -docker build -f "$SCRIPT_DIR/Dockerfile.build" -t archipelago-builder:latest "$SCRIPT_DIR" || { - echo "❌ Docker image build failed" - exit 1 -} - -# Run build in container -echo "🚀 Running build in container..." -echo " This may take 30-60 minutes on first build..." -echo "" - -# Check if running in TTY -if [ -t 0 ]; then - DOCKER_FLAGS="-it" -else - DOCKER_FLAGS="-t" -fi - -docker run --rm $DOCKER_FLAGS \ - -v "$PROJECT_ROOT:/workspace" \ - -v "$SCRIPT_DIR/results:/results" \ - -v "$SCRIPT_DIR/build:/build" \ - -v "$SCRIPT_DIR/apks:/apks" \ - -e BUILD_TYPE="$BUILD_TYPE" \ - -e ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}" \ - -e ALPINE_VERSION="${ALPINE_VERSION:-3.19}" \ - -e ARCH="${ARCH:-x86_64}" \ - archipelago-builder:latest \ - sh -c "cd /workspace/image-recipe && ./build-linux.sh $BUILD_TYPE" - -echo "" -echo "✅ Build complete! Check results/ directory" diff --git a/image-recipe/build-overlay-iso.sh b/image-recipe/build-overlay-iso.sh deleted file mode 100755 index aed492c3..00000000 --- a/image-recipe/build-overlay-iso.sh +++ /dev/null @@ -1,356 +0,0 @@ -#!/bin/bash -# Build proper Alpine ISO with Archipelago overlay (apkovl method) - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -ALPINE_VERSION="${ALPINE_VERSION:-3.19}" -ARCH="${ARCH:-x86_64}" -WORK_DIR="$SCRIPT_DIR/build/overlay-iso" -OUTPUT_DIR="$SCRIPT_DIR/results" - -echo "🏔️ Building Archipelago ISO using Alpine overlay method" -echo "" -echo "📋 Configuration:" -echo " Alpine Version: $ALPINE_VERSION" -echo " Architecture: $ARCH" -echo "" - -# Create work directories -mkdir -p "$WORK_DIR" -mkdir -p "$OUTPUT_DIR" - -# Download base Alpine ISO if not exists -BASE_ISO="$WORK_DIR/alpine-standard-${ALPINE_VERSION}.0-${ARCH}.iso" -if [ ! -f "$BASE_ISO" ]; then - echo "📥 Downloading Alpine base ISO..." - curl -L -o "$BASE_ISO" \ - "https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/releases/${ARCH}/alpine-standard-${ALPINE_VERSION}.0-${ARCH}.iso" - echo "✅ Downloaded base ISO" -else - echo "✅ Using cached base ISO" -fi - -# Create overlay structure -echo "📦 Creating Archipelago overlay..." -OVERLAY_DIR="$WORK_DIR/overlay" -rm -rf "$OVERLAY_DIR" -mkdir -p "$OVERLAY_DIR" - -# Create overlay root -OVERLAY_ROOT="$OVERLAY_DIR/archipelago-overlay" -mkdir -p "$OVERLAY_ROOT"/{etc,root,usr/local/bin,var/lib/archipelago,home/archipelago} - -# Copy Archipelago backend if available -BACKEND_BIN="$SCRIPT_DIR/build/backend/archipelago" -if [ -f "$BACKEND_BIN" ]; then - echo "🦀 Including Archipelago backend..." - cp "$BACKEND_BIN" "$OVERLAY_ROOT/usr/local/bin/" - chmod +x "$OVERLAY_ROOT/usr/local/bin/archipelago" -fi - -# Copy Archipelago frontend if available -FRONTEND_DIR="$SCRIPT_DIR/build/frontend" -if [ -d "$FRONTEND_DIR" ]; then - echo "🎨 Including Archipelago frontend..." - mkdir -p "$OVERLAY_ROOT/usr/share/archipelago/web" - cp -r "$FRONTEND_DIR"/* "$OVERLAY_ROOT/usr/share/archipelago/web/" -fi - -# Copy app manifests -APPS_DIR="$SCRIPT_DIR/../apps" -if [ -d "$APPS_DIR" ]; then - echo "📦 Including app manifests..." - mkdir -p "$OVERLAY_ROOT/var/lib/archipelago/manifests" - find "$APPS_DIR" -maxdepth 1 -type d -exec test -f {}/manifest.yml \; \ - -exec cp -r {} "$OVERLAY_ROOT/var/lib/archipelago/manifests/" \; -fi - -# Create installation script in overlay -cat > "$OVERLAY_ROOT/root/install-archipelago.sh" <<'INSTALL_SCRIPT' -#!/bin/sh -# Archipelago installation script - -set -e - -echo "🏝️ Installing Archipelago Bitcoin Node OS" -echo "" - -# Install required packages -echo "📦 Installing packages..." -apk add --no-cache \ - podman \ - crun \ - fuse-overlayfs \ - slirp4netns \ - nginx \ - openssh \ - iptables \ - iproute2 \ - bash \ - curl - -# Create archipelago user -echo "👤 Creating archipelago user..." -if ! id archipelago >/dev/null 2>&1; then - adduser -D -s /bin/bash archipelago - echo "archipelago:archipelago" | chpasswd -fi - -# Setup data directories -echo "📁 Creating data directories..." -mkdir -p /var/lib/archipelago/{apps,secrets,logs,backups} -chown -R archipelago:archipelago /var/lib/archipelago - -# Install backend if available -if [ -f /usr/local/bin/archipelago ]; then - echo "✅ Archipelago backend installed" -fi - -# Configure nginx for frontend -if [ -d /usr/share/archipelago/web ]; then - echo "🎨 Configuring web UI..." - cat > /etc/nginx/http.d/archipelago.conf <<'NGINX_EOF' -server { - listen 8100; - server_name _; - - root /usr/share/archipelago/web; - index index.html; - - location / { - try_files $uri $uri/ /index.html; - } - - location /api/ { - proxy_pass http://127.0.0.1:8101/; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - } -} -NGINX_EOF - - rc-update add nginx default -fi - -# Create Archipelago service -if [ -f /usr/local/bin/archipelago ]; then - cat > /etc/init.d/archipelago <<'SERVICE_EOF' -#!/sbin/openrc-run - -name="Archipelago" -description="Archipelago Bitcoin Node OS Backend" -command="/usr/local/bin/archipelago" -command_background=true -pidfile="/run/archipelago.pid" - -depend() { - need net - after networking -} -SERVICE_EOF - - chmod +x /etc/init.d/archipelago - rc-update add archipelago default -fi - -# Configure networking -echo "🌐 Configuring network..." -setup-interfaces -a - -# Enable services -rc-update add sshd default - -echo "" -echo "✅ Archipelago installation complete!" -echo "" -echo "Next steps:" -echo " 1. Reboot the system" -echo " 2. Login as: archipelago / archipelago" -echo " 3. Change password: passwd" -echo " 4. Access UI: http://:8100" -echo "" - -INSTALL_SCRIPT - -chmod +x "$OVERLAY_ROOT/root/install-archipelago.sh" - -# Create Alpine local.d boot script to show message -mkdir -p "$OVERLAY_ROOT/etc/local.d" -cat > "$OVERLAY_ROOT/etc/local.d/00-archipelago-welcome.start" <<'WELCOME_EOF' -#!/bin/sh - -cat <<'MSG' - -╔═══════════════════════════════════════════════════════════╗ -║ ║ -║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║ -║ ║ -║ To install to disk, login as root and run: ║ -║ ║ -║ # setup-alpine ║ -║ # /root/install-archipelago.sh ║ -║ ║ -╚═══════════════════════════════════════════════════════════╝ - -MSG - -WELCOME_EOF - -chmod +x "$OVERLAY_ROOT/etc/local.d/00-archipelago-welcome.start" - -# Create the overlay tarball (apkovl) -echo "📦 Creating overlay tarball..." -cd "$OVERLAY_DIR" -tar czf archipelago.apkovl.tar.gz archipelago-overlay/ -echo "✅ Overlay created: $(du -h archipelago.apkovl.tar.gz | cut -f1)" - -# Mount the base ISO and copy it with our overlay -echo "📀 Creating final ISO with overlay..." -ISO_MOUNT="$WORK_DIR/mnt" -ISO_CUSTOM="$WORK_DIR/custom" - -mkdir -p "$ISO_MOUNT" "$ISO_CUSTOM" - -# Extract base ISO -if command -v 7z >/dev/null 2>&1; then - 7z x "$BASE_ISO" -o"$ISO_CUSTOM" -y >/dev/null -elif [[ "$OSTYPE" == "darwin"* ]]; then - hdiutil attach "$BASE_ISO" -mountpoint "$ISO_MOUNT" -readonly - rsync -a "$ISO_MOUNT"/ "$ISO_CUSTOM"/ - hdiutil detach "$ISO_MOUNT" -fi - -# Copy Archipelago files directly to ISO (skip apkovl, put files in accessible location) -echo "📋 Adding Archipelago files to ISO..." -mkdir -p "$ISO_CUSTOM/archipelago" -cp "$OVERLAY_DIR/archipelago.apkovl.tar.gz" "$ISO_CUSTOM/archipelago/" - -# Also extract directly to archipelago folder for easy access -cd "$OVERLAY_DIR" -tar xzf archipelago.apkovl.tar.gz -cp -r archipelago-overlay/* "$ISO_CUSTOM/archipelago/" - -# CRITICAL: Add .boot_repository marker so Alpine's nlplug-findfs can find the boot media -# This tells the initramfs that this is a valid Alpine boot repository -echo "📍 Marking ISO as boot repository..." -touch "$ISO_CUSTOM/.boot_repository" - -# Also mark the apks directories at all levels -if [ -d "$ISO_CUSTOM/apks" ]; then - touch "$ISO_CUSTOM/apks/.boot_repository" -fi -if [ -d "$ISO_CUSTOM/apks/x86_64" ]; then - touch "$ISO_CUSTOM/apks/x86_64/.boot_repository" -fi - -# Create a simple first-boot setup script -cat > "$ISO_CUSTOM/archipelago/setup-archipelago.sh" <<'SETUP_EOF' -#!/bin/sh -# Archipelago first-boot setup - -set -e - -echo "🏝️ Setting up Archipelago overlay..." - -# Copy files from CD to root -if [ -d /media/cdrom/archipelago/archipelago-overlay ]; then - cp -r /media/cdrom/archipelago/archipelago-overlay/* / - echo "✅ Archipelago files installed" -elif [ -d /media/cdrom/archipelago/root ]; then - cp -r /media/cdrom/archipelago/* / - echo "✅ Archipelago files installed" -fi - -# Run the installer if it exists -if [ -f /root/install-archipelago.sh ]; then - echo "" - echo "Archipelago is now available!" - echo "Run: /root/install-archipelago.sh" -fi -SETUP_EOF - -chmod +x "$ISO_CUSTOM/archipelago/setup-archipelago.sh" - -# Modify boot configs (remove apkovl parameter, use normal boot) -echo "⚙️ Configuring boot..." - -# Modify boot configs to add USB delay for better hardware compatibility -# Keep Alpine's boot logic intact, just add timing parameters and better debugging -# HP ProDesk likely boots UEFI (GRUB), so we need to modify both configs -# CRITICAL: Add isofs module so Alpine can mount the ISO9660 filesystem on USB! -# CRITICAL: Add pkgs parameter to explicitly install base system packages - -if [ -f "$ISO_CUSTOM/boot/grub/grub.cfg" ]; then - # UEFI boot (GRUB) - add isofs module for ISO9660 filesystem support - sed -i.bak \ - -e 's/Alpine Linux/Archipelago Bitcoin Node OS/g' \ - -e 's/modules=loop,squashfs,sd-mod,usb-storage quiet/modules=loop,squashfs,sd-mod,usb-storage,isofs,iso9660 usbdelay=10/' \ - "$ISO_CUSTOM/boot/grub/grub.cfg" -fi - -if [ -f "$ISO_CUSTOM/boot/syslinux/syslinux.cfg" ]; then - # Legacy BIOS boot (Syslinux) - add isofs module for ISO9660 filesystem support - sed -i.bak \ - -e 's/Alpine Linux/Archipelago Bitcoin Node OS/g' \ - -e 's/quiet/usbdelay=10/' \ - -e 's/modules=loop,squashfs,sd-mod,usb-storage/modules=loop,squashfs,sd-mod,usb-storage,isofs,iso9660/' \ - "$ISO_CUSTOM/boot/syslinux/syslinux.cfg" -fi - -# Update MOTD to show Archipelago instructions -cat > "$ISO_CUSTOM/.alpine-release" <<'MOTD_EOF' -3.19.0 -MOTD_EOF - -mkdir -p "$ISO_CUSTOM/etc" -cat > "$ISO_CUSTOM/etc/motd" <<'MOTD_EOF' - -╔═══════════════════════════════════════════════════════════╗ -║ ║ -║ 🏝️ ARCHIPELAGO BITCOIN NODE OS ║ -║ ║ -║ To set up Archipelago, run: ║ -║ # sh /media/cdrom/archipelago/setup-archipelago.sh ║ -║ ║ -║ Then install to disk with: ║ -║ # setup-alpine ║ -║ ║ -╚═══════════════════════════════════════════════════════════╝ - -MOTD_EOF - -# Create final ISO -OUTPUT_ISO="$OUTPUT_DIR/archipelago-${ALPINE_VERSION}-hp-prodesk-uefi-x86_64.iso" -echo "" -echo "🔥 Creating final bootable ISO..." - -if [[ "$OSTYPE" == "darwin"* ]]; then - if command -v xorriso >/dev/null 2>&1; then - xorriso -as mkisofs -o "$OUTPUT_ISO" \ - -volid "ARCHIPELAGO" \ - -J -R \ - -c boot/syslinux/boot.cat \ - -b boot/syslinux/isolinux.bin \ - -no-emul-boot -boot-load-size 4 -boot-info-table \ - -eltorito-alt-boot \ - -e boot/grub/efi.img \ - -no-emul-boot \ - -isohybrid-gpt-basdat \ - -isohybrid-mbr "$ISO_CUSTOM/boot/syslinux/isohdpfx.bin" \ - "$ISO_CUSTOM" 2>&1 | grep -v "xorriso : UPDATE" - fi -fi - -echo "" -echo "✅ ISO created successfully!" -echo "" -echo "📀 Output: $OUTPUT_ISO" -echo " Size: $(du -h "$OUTPUT_ISO" | cut -f1)" -echo "" -echo "📝 This ISO uses Alpine's overlay system (apkovl)" -echo " The overlay will be automatically loaded at boot" -echo "" diff --git a/image-recipe/create-bootable-usb.sh b/image-recipe/create-bootable-usb.sh deleted file mode 100755 index 0951bcb9..00000000 --- a/image-recipe/create-bootable-usb.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/bash -# Create a proper bootable USB for Alpine/Archipelago -# This formats the USB and installs Alpine in a way that works on problematic hardware - -set -e - -USB_DEVICE="${1}" -ISO_FILE="${2:-/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso}" - -if [ -z "$USB_DEVICE" ]; then - echo "Usage: $0 /dev/diskN [iso-file]" - echo "" - echo "Available disks:" - diskutil list | grep "external" - exit 1 -fi - -if [ ! -f "$ISO_FILE" ]; then - echo "❌ ISO file not found: $ISO_FILE" - exit 1 -fi - -echo "╔════════════════════════════════════════════════════════╗" -echo "║ Create Bootable USB for HP ProDesk ║" -echo "╚════════════════════════════════════════════════════════╝" -echo "" -echo "⚠️ WARNING: This will ERASE all data on $USB_DEVICE" -echo "" -echo "📀 ISO: $(basename $ISO_FILE)" -echo "💾 USB: $USB_DEVICE" -echo "" -echo "Press Ctrl+C to cancel, or Enter to continue..." -read - -# Unmount -echo "🔓 Unmounting USB..." -diskutil unmountDisk "$USB_DEVICE" || true - -# Create a single FAT32 partition with MBR -echo "🗂️ Creating FAT32 partition..." -sudo diskutil eraseDisk FAT32 ALPINE MBR "$USB_DEVICE" - -# Wait for partition to settle -sleep 2 - -# Extract the ISO -echo "📦 Extracting ISO..." -ISO_MOUNT="/tmp/alpine-iso-$$" -mkdir -p "$ISO_MOUNT" - -# Use 7z to extract the ISO -if command -v 7z >/dev/null 2>&1; then - 7z x "$ISO_FILE" -o"$ISO_MOUNT" -y >/dev/null -else - echo "❌ 7z not found. Installing with brew..." - brew install p7zip - 7z x "$ISO_FILE" -o"$ISO_MOUNT" -y >/dev/null -fi - -# Find the USB mount point -USB_MOUNT=$(diskutil info "${USB_DEVICE}s1" | grep "Mount Point" | awk '{print $3}') -if [ -z "$USB_MOUNT" ]; then - echo "❌ Could not find USB mount point" - hdiutil detach "$ISO_MOUNT" - exit 1 -fi - -echo "💾 USB mounted at: $USB_MOUNT" - -# Copy all files from ISO to USB -echo "📋 Copying Alpine files to USB..." -rsync -av --progress "$ISO_MOUNT/" "$USB_MOUNT/" - -# Install syslinux bootloader -echo "🔧 Installing bootloader..." - -# Rename isolinux to syslinux for USB boot -if [ -d "$USB_MOUNT/boot/syslinux" ]; then - if [ -f "$USB_MOUNT/boot/syslinux/isolinux.bin" ]; then - mv "$USB_MOUNT/boot/syslinux/isolinux.bin" "$USB_MOUNT/boot/syslinux/syslinux.bin" 2>/dev/null || true - fi - if [ -f "$USB_MOUNT/boot/syslinux/isolinux.cfg" ]; then - mv "$USB_MOUNT/boot/syslinux/isolinux.cfg" "$USB_MOUNT/boot/syslinux/syslinux.cfg" 2>/dev/null || true - fi -fi - -# Update syslinux config to remove ISO-specific options -if [ -f "$USB_MOUNT/boot/syslinux/syslinux.cfg" ]; then - sed -i '' 's/isolinux/syslinux/g' "$USB_MOUNT/boot/syslinux/syslinux.cfg" -fi - -# Sync and clean up -echo "🔄 Syncing..." -sync -rm -rf "$ISO_MOUNT" -diskutil unmount "$USB_MOUNT" - -# Make the USB bootable by writing MBR -echo "🚀 Making USB bootable..." -if [ -f "/tmp/alpine-iso-$$/boot/syslinux/mbr.bin" ]; then - sudo dd if="/tmp/alpine-iso-$$/boot/syslinux/mbr.bin" of="$USB_DEVICE" bs=440 count=1 conv=notrunc 2>/dev/null || true -fi - -echo "" -echo "✅ Bootable USB created successfully!" -echo "" -echo "📋 Next steps:" -echo " 1. Boot HP ProDesk from USB" -echo " 2. In BIOS: Legacy mode, Secure Boot OFF" -echo " 3. Should boot to Alpine login" -echo "" -echo "🎯 If this still fails, the HP ProDesk may need Alpine installed" -echo " to internal drive first (can't boot from USB at all)" -echo "" diff --git a/image-recipe/create-fat32-usb.sh b/image-recipe/create-fat32-usb.sh new file mode 100755 index 00000000..c4181475 --- /dev/null +++ b/image-recipe/create-fat32-usb.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# +# Create bootable FAT32 USB from Archipelago ISO +# This extracts the ISO contents to FAT32 for UEFI boot +# +# Usage: ./create-fat32-usb.sh /dev/diskN +# + +set -e + +# Get absolute path of script directory +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +if [ -z "$1" ]; then + echo "Usage: $0 /dev/diskN" + echo "" + echo "Available disks:" + diskutil list external + exit 1 +fi + +USB_DISK="$1" +ISO_FILE="$SCRIPT_DIR/results/archipelago-debian-12-x86_64.iso" +WORK_DIR="$SCRIPT_DIR/build/usb-extract" + +if [ ! -f "$ISO_FILE" ]; then + echo "❌ ISO not found: $ISO_FILE" + echo "" + echo "Build the ISO first with: ./build-debian-iso.sh" + exit 1 +fi + +echo "╔════════════════════════════════════════════════════════╗" +echo "║ Create FAT32 Bootable USB ║" +echo "╚════════════════════════════════════════════════════════╝" +echo "" +echo "⚠️ WARNING: This will COMPLETELY ERASE $USB_DISK" +echo "" +echo "📀 ISO: $(basename "$ISO_FILE")" +echo "💾 USB: $USB_DISK" +echo "" +echo "Press Ctrl+C to cancel, or Enter to continue..." +read + +# Clean up work directory +rm -rf "$WORK_DIR" +mkdir -p "$WORK_DIR" + +echo "🔓 Unmounting USB..." +diskutil unmountDisk "$USB_DISK" || true + +echo "" +echo "🗂️ Formatting USB as FAT32 with MBR..." +diskutil eraseDisk FAT32 ARCHIPELAGO MBR "$USB_DISK" + +echo "" +echo "📦 Extracting ISO contents..." +cd "$WORK_DIR" +7z x -y "$ISO_FILE" + +echo "" +echo "📋 Copying files to USB (this may take a few minutes)..." +USB_MOUNT="/Volumes/ARCHIPELAGO" +if [ ! -d "$USB_MOUNT" ]; then + echo "❌ USB not mounted at $USB_MOUNT" + exit 1 +fi + +# Copy all extracted files +cp -Rv "$WORK_DIR"/* "$USB_MOUNT/" 2>/dev/null | tail -5 +echo " (showing last 5 files copied)" + +echo "" +echo "🔄 Syncing..." +sync + +echo "" +echo "✅ USB created successfully!" +echo "" +echo "Now:" +echo " 1. Eject: diskutil eject $USB_DISK" +echo " 2. Insert into target machine" +echo " 3. Boot from USB (F12 or similar for boot menu)" +echo "" +echo "Default login (live mode):" +echo " Username: user" +echo " Password: live" + +# Cleanup +rm -rf "$WORK_DIR" diff --git a/image-recipe/create-usb-boot.sh b/image-recipe/create-usb-boot.sh deleted file mode 100755 index ad240111..00000000 --- a/image-recipe/create-usb-boot.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -# Create a proper bootable USB for HP ProDesk -# This formats the USB and installs Alpine in a way that works on real hardware - -set -e - -USB_DEVICE="${1:-/dev/disk4}" -ISO_FILE="/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso" - -if [ ! -f "$ISO_FILE" ]; then - echo "❌ ISO file not found: $ISO_FILE" - exit 1 -fi - -echo "⚠️ WARNING: This will ERASE all data on $USB_DEVICE" -echo "Press Ctrl+C to cancel, or Enter to continue..." -read - -echo "📀 ISO: $ISO_FILE" -echo "💾 USB: $USB_DEVICE" -echo "" - -# Unmount -echo "🔓 Unmounting USB..." -diskutil unmountDisk "$USB_DEVICE" || true - -# Create hybrid ISO (makes it bootable from USB on both BIOS and UEFI) -echo "🔧 Creating hybrid boot support..." -if command -v isohybrid >/dev/null 2>&1; then - # If syslinux is installed - cp "$ISO_FILE" "/tmp/hybrid-archipelago.iso" - isohybrid -u "/tmp/hybrid-archipelago.iso" - ISO_FILE="/tmp/hybrid-archipelago.iso" - echo "✅ Hybrid boot support added" -else - echo "ℹ️ isohybrid not available, using direct ISO write" -fi - -# Write to USB using dd -echo "💿 Writing ISO to USB..." -echo " This will take 2-3 minutes..." -sudo dd if="$ISO_FILE" of="${USB_DEVICE/disk/rdisk}" bs=1m status=progress - -# Sync -echo "🔄 Syncing..." -sync - -# Clean up -rm -f "/tmp/hybrid-archipelago.iso" - -echo "" -echo "✅ USB boot device created successfully!" -echo "" -echo "📋 Next steps:" -echo " 1. Check HP ProDesk BIOS settings:" -echo " - Disable Secure Boot" -echo " - Enable USB Boot" -echo " - Try Legacy BIOS mode first" -echo " 2. Boot from USB" -echo " 3. Should see Alpine login prompt" -echo "" diff --git a/image-recipe/create-usb-simple.sh b/image-recipe/create-usb-simple.sh deleted file mode 100755 index c1bf25b6..00000000 --- a/image-recipe/create-usb-simple.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -# Simple script to create bootable USB from extracted ISO files - -set -e - -USB_DEVICE="${1:-/dev/disk4}" -ISO_FILE="${2:-/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso}" - -echo "╔════════════════════════════════════════════════════════╗" -echo "║ Create Bootable USB from ISO ║" -echo "╚════════════════════════════════════════════════════════╝" -echo "" -echo "📀 ISO: $(basename $ISO_FILE)" -echo "💾 USB: $USB_DEVICE" -echo "" - -# Check if USB is formatted and mounted -USB_MOUNT=$(diskutil info "${USB_DEVICE}s1" 2>/dev/null | grep "Mount Point" | awk '{print $3}' || echo "") - -if [ -z "$USB_MOUNT" ]; then - echo "❌ USB not mounted. Please format it first:" - echo " sudo diskutil eraseDisk FAT32 ALPINE MBR $USB_DEVICE" - exit 1 -fi - -echo "✅ USB mounted at: $USB_MOUNT" -echo "" - -# Extract ISO to temp directory -echo "📦 Extracting ISO..." -TEMP_DIR="/tmp/alpine-extract-$$" -mkdir -p "$TEMP_DIR" -7z x "$ISO_FILE" -o"$TEMP_DIR" -y >/dev/null - -# Copy to USB -echo "📋 Copying to USB..." -rsync -av --progress "$TEMP_DIR/" "$USB_MOUNT/" - -# Fix bootloader names for USB -echo "🔧 Configuring bootloader..." -cd "$USB_MOUNT/boot/syslinux" -if [ -f isolinux.bin ]; then - mv isolinux.bin syslinux.bin - echo " ✓ Renamed isolinux.bin → syslinux.bin" -fi -if [ -f isolinux.cfg ]; then - mv isolinux.cfg syslinux.cfg - echo " ✓ Renamed isolinux.cfg → syslinux.cfg" -fi - -# Update config file -if [ -f syslinux.cfg ]; then - sed -i '' 's/isolinux/syslinux/g' syslinux.cfg - echo " ✓ Updated syslinux.cfg" -fi - -# Sync -echo "🔄 Syncing..." -cd / -sync -sleep 2 - -# Unmount -echo "📤 Unmounting USB..." -diskutil unmount "$USB_MOUNT" - -# Install MBR -if [ -f "$TEMP_DIR/boot/syslinux/mbr.bin" ]; then - echo "🚀 Installing MBR..." - sudo dd if="$TEMP_DIR/boot/syslinux/mbr.bin" of="$USB_DEVICE" bs=440 count=1 conv=notrunc 2>/dev/null - echo " ✓ MBR installed" -fi - -# Clean up -rm -rf "$TEMP_DIR" - -echo "" -echo "✅ Bootable USB created successfully!" -echo "" -echo "📋 Next steps:" -echo " 1. Safely eject: diskutil eject $USB_DEVICE" -echo " 2. Boot HP ProDesk from USB" -echo " 3. BIOS: Legacy mode, Secure Boot OFF" -echo "" diff --git a/image-recipe/scripts/README.md b/image-recipe/scripts/README.md index c73ad373..9e667a8f 100644 --- a/image-recipe/scripts/README.md +++ b/image-recipe/scripts/README.md @@ -7,8 +7,8 @@ Helper scripts for building Archipelago OS images. ### `build-backend.sh` Compiles the Archipelago Rust backend binary. - Output: `../build/backend/archipelago` -- Requires: Rust toolchain -- Optional: musl target for static binary +- Requires: Rust toolchain (or Docker) +- Builds for Linux x86_64 ### `build-frontend.sh` Builds the Vue.js frontend for production. @@ -16,18 +16,6 @@ Builds the Vue.js frontend for production. - Requires: Node.js 18+, npm - Builds static files for serving -### `create-backend-apk.sh` -Creates Alpine APK package from backend binary. -- Output: `../apks/archipelago-backend-*.apk` -- Includes: binary, systemd service, config files -- Format: Alpine package format (tar.gz with metadata) - -### `install-archipelago.sh` -Installs Archipelago components into built image. -- Called after image is created -- Installs APK and frontend files -- Configures services - ### `convert-iso-to-disk.sh` Converts ISO image to raw disk image. - Input: ISO file @@ -36,19 +24,18 @@ Converts ISO image to raw disk image. ### `check-dependencies.sh` Checks if all build dependencies are available. -- Checks: Rust, Node.js, Docker (if needed) +- Checks: Rust, Node.js, Docker, xorriso - Provides installation instructions - Non-blocking (warns but continues) -### `setup-alpine-build.sh` -Sets up Alpine build environment. -- Installs Alpine build tools -- Configures abuild keys -- Only needed for native Alpine builds +### `install-podman.sh` +Installs Podman container runtime. +- For use inside the target system +- Configures rootless Podman ## Usage -These scripts are called automatically by the main build process. You typically don't need to run them manually, but you can for testing: +These scripts are called automatically by the main build process. You can also run them manually for testing: ```bash # Build just the backend @@ -57,6 +44,6 @@ These scripts are called automatically by the main build process. You typically # Build just the frontend ./scripts/build-frontend.sh -# Create APK package -./scripts/create-backend-apk.sh +# Check dependencies +./scripts/check-dependencies.sh ``` diff --git a/image-recipe/scripts/build-backend.sh b/image-recipe/scripts/build-backend.sh index 114e1361..a93f6bda 100755 --- a/image-recipe/scripts/build-backend.sh +++ b/image-recipe/scripts/build-backend.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Build Archipelago backend binary for Alpine Linux +# Build Archipelago backend binary for Debian Linux set -e @@ -13,39 +13,57 @@ echo " Source: $BACKEND_DIR" echo " Output: $OUTPUT_DIR" echo "" -# Check if Rust is installed -if ! command -v rustc >/dev/null 2>&1; then - echo "❌ Rust not found. Installing..." - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y - source "$HOME/.cargo/env" -fi - # Create output directory mkdir -p "$OUTPUT_DIR" -# Build backend -cd "$BACKEND_DIR" -echo "📦 Compiling backend..." -cargo build --release --target x86_64-unknown-linux-musl || { - # Try without musl target if cross-compilation not set up - echo "⚠️ Musl target not available, building for host..." - cargo build --release -} +# Check if we should use Docker +USE_DOCKER=false +if [[ "$OSTYPE" == "darwin"* ]]; then + USE_DOCKER=true + echo "🍎 macOS detected - using Docker for Linux build" +elif ! command -v rustc >/dev/null 2>&1; then + USE_DOCKER=true + echo "⚠️ Rust not found - using Docker" +fi -# Copy binary -if [ -f "target/x86_64-unknown-linux-musl/release/archipelago" ]; then - cp "target/x86_64-unknown-linux-musl/release/archipelago" "$OUTPUT_DIR/archipelago" -elif [ -f "target/release/archipelago" ]; then - cp "target/release/archipelago" "$OUTPUT_DIR/archipelago" +if [ "$USE_DOCKER" = true ]; then + echo "🐳 Building in Docker container..." + docker run --rm \ + -v "$PROJECT_ROOT:/workspace" \ + -v "$OUTPUT_DIR:/output" \ + -w /workspace/core/archipelago \ + rust:bookworm \ + sh -c ' + echo "📦 Installing build dependencies..." + apt-get update && apt-get install -y pkg-config libssl-dev + + echo "🔨 Building Archipelago backend..." + cargo build --release + + echo "📋 Copying binary to output..." + cp ../target/release/archipelago /output/ + + echo "✅ Build complete!" + ls -lh /output/archipelago + ' else - echo "❌ Binary not found after build" - exit 1 + # Native Linux build + echo "🐧 Building natively..." + cd "$BACKEND_DIR" + cargo build --release + + cp "../target/release/archipelago" "$OUTPUT_DIR/archipelago" fi # Strip binary for smaller size -if command -v strip >/dev/null 2>&1; then - strip "$OUTPUT_DIR/archipelago" +if [ -f "$OUTPUT_DIR/archipelago" ]; then + if command -v strip >/dev/null 2>&1 && [[ "$OSTYPE" != "darwin"* ]]; then + strip "$OUTPUT_DIR/archipelago" + fi + echo "" + echo "✅ Backend built: $OUTPUT_DIR/archipelago" + ls -lh "$OUTPUT_DIR/archipelago" +else + echo "❌ Build failed - binary not found" + exit 1 fi - -echo "✅ Backend built: $OUTPUT_DIR/archipelago" -ls -lh "$OUTPUT_DIR/archipelago" diff --git a/image-recipe/scripts/check-dependencies.sh b/image-recipe/scripts/check-dependencies.sh index 67c0369a..9d3abe3b 100755 --- a/image-recipe/scripts/check-dependencies.sh +++ b/image-recipe/scripts/check-dependencies.sh @@ -33,40 +33,49 @@ else MISSING_DEPS=$((MISSING_DEPS + 1)) fi -# Check Docker (for macOS or non-Alpine Linux) -if [[ "$OSTYPE" == "darwin"* ]] || [[ "$OSTYPE" == "linux-gnu"* ]]; then - if command -v docker >/dev/null 2>&1; then - if docker info >/dev/null 2>&1; then - echo "✅ Docker: $(docker --version)" - else - echo "⚠️ Docker: Installed but daemon not running" - echo " Start Docker Desktop or: sudo systemctl start docker" - fi +# Check Docker +if command -v docker >/dev/null 2>&1; then + if docker info >/dev/null 2>&1; then + echo "✅ Docker: $(docker --version)" else - echo "❌ Docker: Not found (required for macOS, optional for Linux)" - if [[ "$OSTYPE" == "darwin"* ]]; then - echo " Install: https://www.docker.com/products/docker-desktop" - MISSING_DEPS=$((MISSING_DEPS + 1)) - else - echo " Install: https://docs.docker.com/get-docker/" - fi + echo "⚠️ Docker: Installed but daemon not running" + echo " Start Docker Desktop or: sudo systemctl start docker" + fi +else + echo "❌ Docker: Not found" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo " Install: https://www.docker.com/products/docker-desktop" + MISSING_DEPS=$((MISSING_DEPS + 1)) + else + echo " Install: https://docs.docker.com/get-docker/" + echo " (Optional on Linux if building natively)" fi fi -# Check Alpine tools (for native Alpine Linux) -if [ -f /etc/alpine-release ]; then - echo "" - echo "🏔️ Alpine Linux detected - checking native tools..." - - for tool in abuild alpine-conf syslinux xorriso; do - if command -v $tool >/dev/null 2>&1; then - echo "✅ $tool: Installed" - else - echo "❌ $tool: Not found" - echo " Install: apk add alpine-sdk abuild alpine-conf syslinux xorriso" - MISSING_DEPS=$((MISSING_DEPS + 1)) - fi - done +# Check xorriso (for ISO creation) +if command -v xorriso >/dev/null 2>&1; then + echo "✅ xorriso: Installed" +else + echo "❌ xorriso: Not found (needed for ISO creation)" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo " Install: brew install xorriso" + else + echo " Install: apt-get install xorriso" + fi + MISSING_DEPS=$((MISSING_DEPS + 1)) +fi + +# Check 7z (for ISO extraction) +if command -v 7z >/dev/null 2>&1; then + echo "✅ 7z: Installed" +else + echo "❌ 7z: Not found (needed for ISO extraction)" + if [[ "$OSTYPE" == "darwin"* ]]; then + echo " Install: brew install p7zip" + else + echo " Install: apt-get install p7zip-full" + fi + MISSING_DEPS=$((MISSING_DEPS + 1)) fi echo "" diff --git a/image-recipe/scripts/create-backend-apk.sh b/image-recipe/scripts/create-backend-apk.sh deleted file mode 100755 index 07e413ff..00000000 --- a/image-recipe/scripts/create-backend-apk.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash -# Create Alpine APK package for Archipelago backend - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" -BUILD_DIR="$SCRIPT_DIR/../build" -APK_DIR="$SCRIPT_DIR/../apks" -ARCHIPELAGO_VERSION="${ARCHIPELAGO_VERSION:-0.1.0}" - -echo "📦 Creating Archipelago backend APK..." -echo "" - -# Create APK directory -mkdir -p "$APK_DIR" - -# Create temporary APK build directory -APK_BUILD_DIR=$(mktemp -d) -trap "rm -rf $APK_BUILD_DIR" EXIT - -cd "$APK_BUILD_DIR" - -# APK package structure -mkdir -p usr/bin -mkdir -p usr/lib/systemd/system -mkdir -p etc/archipelago -mkdir -p etc/init.d - -# Copy binary -if [ -f "$BUILD_DIR/backend/archipelago" ]; then - cp "$BUILD_DIR/backend/archipelago" usr/bin/archipelago - chmod +x usr/bin/archipelago -else - echo "❌ Backend binary not found. Run build-backend.sh first." - exit 1 -fi - -# Create systemd service file -cat > usr/lib/systemd/system/archipelago.service <<'EOF' -[Unit] -Description=Archipelago Bitcoin Node OS Backend -After=network.target podman.service -Wants=network.target - -[Service] -Type=simple -User=archipelago -Group=archipelago -WorkingDirectory=/var/lib/archipelago -ExecStart=/usr/bin/archipelago -Restart=always -RestartSec=10 -StandardOutput=journal -StandardError=journal - -# Security -NoNewPrivileges=true -PrivateTmp=true -ProtectSystem=strict -ProtectHome=true -ReadWritePaths=/var/lib/archipelago /tmp - -# Environment -Environment="RUST_LOG=info" -Environment="ARCHIPELAGO_DATA_DIR=/var/lib/archipelago" - -[Install] -WantedBy=multi-user.target -EOF - -# Create init.d script (for openrc) -cat > etc/init.d/archipelago <<'EOF' -#!/sbin/openrc-run -# Archipelago Bitcoin Node OS Backend - -name="Archipelago" -command="/usr/bin/archipelago" -command_user="archipelago:archipelago" -command_background=true -pidfile="/var/run/archipelago.pid" -start_stop_daemon_args="--make-pidfile" - -depend() { - need net - use podman -} -EOF -chmod +x etc/init.d/archipelago - -# Create default config -mkdir -p etc/archipelago -cat > etc/archipelago/config.toml < "$APK_BUILD_DIR/.PKGINFO" </dev/null || { - # Fallback: create without signing - tar -czf "$APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk" \ - .PKGINFO usr etc -} - -echo "✅ APK created: $APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk" -ls -lh "$APK_DIR/archipelago-backend-${ARCHIPELAGO_VERSION}-r0.apk" diff --git a/image-recipe/scripts/harden-alpine.sh b/image-recipe/scripts/harden-alpine.sh deleted file mode 100755 index 7867b72b..00000000 --- a/image-recipe/scripts/harden-alpine.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/bash -# Alpine Linux Hardening Script for Archipelago Bitcoin Node OS -# This script applies security hardening to the Alpine base image - -set -e - -echo "🔒 Starting Alpine Linux hardening..." - -# Disable unnecessary services -systemctl disable bluetooth || true -systemctl disable avahi-daemon || true - -# Configure kernel parameters for security -cat >> /etc/sysctl.conf < /etc/fail2ban/jail.local < /etc/periodic/daily/archipelago-security-updates <<'EOF' -#!/bin/sh -# Automatic security updates for Archipelago -apk update && apk upgrade -u || true -EOF -chmod +x /etc/periodic/daily/archipelago-security-updates - -# Set restrictive file permissions -chmod 700 /var/lib/archipelago/secrets -chmod 755 /var/lib/archipelago/apps -chmod 755 /var/lib/archipelago/logs - -# Create log directory with proper permissions -mkdir -p /var/log/archipelago -chmod 755 /var/log/archipelago - -# Configure log rotation for archipelago logs -cat > /etc/logrotate.d/archipelago </dev/null || true - cp -r etc/* "$IMAGE_ROOT/etc/" 2>/dev/null || true - fi - rm -rf "$TEMP_DIR" - fi - - # Install frontend - if [ -d "$BUILD_DIR/frontend" ]; then - echo "🎨 Installing frontend..." - mkdir -p "$IMAGE_ROOT/usr/share/archipelago/web" - cp -r "$BUILD_DIR/frontend/"* "$IMAGE_ROOT/usr/share/archipelago/web/" - fi -else - echo "⚠️ No image found to install into" - echo " Archipelago will be installed on first boot" -fi - -# Create first boot script -cat > "$SCRIPT_DIR/../alpine-profile/overlay/etc/local.d/archipelago-install.start" <<'EOF' -#!/bin/sh -# First boot installation script for Archipelago - -# Install backend APK if available -if [ -f /tmp/archipelago-backend.apk ]; then - apk add --allow-untrusted /tmp/archipelago-backend.apk - rm /tmp/archipelago-backend.apk -fi - -# Enable services -rc-update add archipelago default || true -systemctl enable archipelago || true - -# Create archipelago user if needed -if ! id archipelago >/dev/null 2>&1; then - adduser -D -s /bin/bash archipelago - echo "archipelago ALL=(ALL) NOPASSWD: /usr/bin/podman" >> /etc/sudoers -fi - -# Setup Podman for archipelago user -mkdir -p /home/archipelago/.config/containers -chown -R archipelago:archipelago /home/archipelago - -# Create data directories -mkdir -p /var/lib/archipelago/{apps,secrets,logs,backups} -chown -R archipelago:archipelago /var/lib/archipelago - -# Start services -rc-service archipelago start || systemctl start archipelago || true -EOF - -chmod +x "$SCRIPT_DIR/../alpine-profile/overlay/etc/local.d/archipelago-install.start" - -echo "✅ Archipelago installation configured" diff --git a/image-recipe/scripts/setup-alpine-build.sh b/image-recipe/scripts/setup-alpine-build.sh deleted file mode 100755 index b611a3e5..00000000 --- a/image-recipe/scripts/setup-alpine-build.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash -# Setup Alpine build environment -# Installs dependencies and prepares build environment - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -echo "🔧 Setting up Alpine build environment..." -echo "" - -# Detect OS -if [[ "$OSTYPE" == "darwin"* ]]; then - echo "🍎 macOS detected - Docker will be used" - echo " Make sure Docker Desktop is installed and running" - exit 0 -elif [ -f /etc/alpine-release ]; then - echo "🏔️ Alpine Linux detected - installing native tools..." - - # Install build dependencies - 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 || { - echo "❌ Failed to install dependencies" - exit 1 - } - - # Setup abuild keys - if [ ! -f ~/.abuild/abuild.conf ]; then - echo "🔑 Generating abuild keys..." - abuild-keygen -a -n - fi - - echo "✅ Alpine build environment ready!" -elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - echo "🐧 Linux detected (not Alpine) - Docker will be used" - echo " Install Docker: https://docs.docker.com/get-docker/" - exit 0 -else - echo "❌ Unsupported OS: $OSTYPE" - exit 1 -fi diff --git a/image-recipe/test-iso-qemu.sh b/image-recipe/test-iso-qemu.sh index 65934548..ac80ddc2 100755 --- a/image-recipe/test-iso-qemu.sh +++ b/image-recipe/test-iso-qemu.sh @@ -1,33 +1,69 @@ #!/bin/bash # Test Archipelago ISO in QEMU -ISO="${1:-/Users/dorian/Projects/archy/image-recipe/results/archipelago-3.19-hp-prodesk-uefi-x86_64.iso}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ISO="${1:-$SCRIPT_DIR/results/archipelago-debian-12-x86_64.iso}" if [ ! -f "$ISO" ]; then echo "❌ ISO not found: $ISO" + echo "" echo "Usage: $0 [path-to-iso]" + echo "" + echo "Build the ISO first with: ./build-debian-iso.sh" exit 1 fi echo "🧪 Testing Archipelago ISO in QEMU" echo "📀 ISO: $ISO" echo "💾 RAM: 4GB" -echo "🖥️ CPU: 4 cores" +echo "🖥️ CPU: 2 cores" echo "" echo "Press Ctrl+Alt+G to release mouse/keyboard from VM" echo "Press Ctrl+C in this terminal to stop VM" echo "" + +# Create test disk if it doesn't exist +DISK="/tmp/archipelago-test-disk.qcow2" +if [ ! -f "$DISK" ]; then + echo "Creating test disk..." + qemu-img create -f qcow2 "$DISK" 20G +fi + echo "Starting VM in 3 seconds..." sleep 3 -# Run QEMU with Legacy BIOS (simpler, more compatible) +# Run QEMU with UEFI (more modern, matches real hardware) +if [ -f "/opt/homebrew/share/qemu/edk2-x86_64-code.fd" ]; then + # macOS with Homebrew QEMU + OVMF="/opt/homebrew/share/qemu/edk2-x86_64-code.fd" +elif [ -f "/usr/share/OVMF/OVMF_CODE.fd" ]; then + # Linux with OVMF + OVMF="/usr/share/OVMF/OVMF_CODE.fd" +else + # Fall back to legacy BIOS + echo "⚠️ UEFI firmware not found, using legacy BIOS..." + qemu-system-x86_64 \ + -machine pc \ + -m 4G \ + -smp 2 \ + -boot d \ + -cdrom "$ISO" \ + -drive if=virtio,format=qcow2,file="$DISK" \ + -net nic,model=virtio -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::8100-:8100 \ + -vga virtio \ + -display default + exit 0 +fi + +# UEFI boot qemu-system-x86_64 \ - -machine pc \ - -m 2G \ + -machine q35 \ + -bios "$OVMF" \ + -m 4G \ -smp 2 \ -boot d \ -cdrom "$ISO" \ - -drive if=virtio,format=qcow2,file=/tmp/archipelago-test-disk.qcow2 \ - -net nic,model=virtio -net user \ + -drive if=virtio,format=qcow2,file="$DISK" \ + -net nic,model=virtio -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::8100-:8100 \ -vga virtio \ -display default diff --git a/image-recipe/test-start9-build.sh b/image-recipe/test-start9-build.sh deleted file mode 100755 index fb823c0e..00000000 --- a/image-recipe/test-start9-build.sh +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/bash -# Quick test build for Start9 Server Pure -# This creates a minimal build to verify the system works - -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -echo "🧪 Quick Test Build for Start9 Server Pure" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "" -echo "This will create a test build to verify the system works." -echo "A full production build takes 45-60 minutes." -echo "" - -# Check prerequisites -echo "📋 Checking prerequisites..." -echo "" - -# Check for Docker on macOS -if [ "$(uname)" = "Darwin" ]; then - if ! command -v docker >/dev/null 2>&1; then - echo "❌ Docker not found. Install Docker Desktop:" - echo " https://www.docker.com/products/docker-desktop" - exit 1 - fi - - if ! docker info >/dev/null 2>&1; then - echo "❌ Docker not running. Starting Docker Desktop..." - open -a Docker - echo "⏳ Waiting for Docker to start..." - while ! docker info >/dev/null 2>&1; do - sleep 2 - done - echo "✅ Docker is running" - else - echo "✅ Docker is running" - fi -fi - -# Check disk space -AVAILABLE_SPACE=$(df -h "$SCRIPT_DIR" | awk 'NR==2 {print $4}') -echo "✅ Available disk space: $AVAILABLE_SPACE" - -echo "" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "🚀 Starting Test Build" -echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -echo "" - -# Create test overlay to verify hardware detection works -TEST_OVERLAY="$SCRIPT_DIR/alpine-profile/overlay-start9-pure-test" -rm -rf "$TEST_OVERLAY" -mkdir -p "$TEST_OVERLAY/etc/archipelago" - -cat > "$TEST_OVERLAY/etc/archipelago/test-info.txt" <<'EOF' -This is a test build for Start9 Server Pure. - -If you can read this file after booting, the build system worked! - -Hardware Target: Start9 Server Pure -CPU: Intel i7-10710U -RAM: 32-64GB -Storage: 2-4TB NVMe - -Next steps: -1. Verify this file exists at /etc/archipelago/test-info.txt -2. Check hardware detection: cat /var/log/archipelago-hardware.log -3. View hardware config: cat /etc/archipelago/hardware.toml -4. Run a full production build: ./build-for-hardware.sh start9-pure iso -EOF - -echo "📝 Test overlay created" -echo "" - -# Show what will be built -echo "📦 Build Configuration:" -echo " Target: Start9 Server Pure" -echo " Type: ISO" -echo " Test Mode: Yes (quick verification)" -echo "" - -# Ask for confirmation -read -p "Continue with test build? (y/n) " -n 1 -r -echo "" -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo "❌ Build cancelled" - exit 1 -fi - -echo "" -echo "⏳ Building... This will take 5-10 minutes for a test build." -echo "" - -# Set test mode environment -export ARCHIPELAGO_VERSION="0.1.0-test" -export ALPINE_VERSION="3.19" -export TEST_MODE="true" - -# Run the build -"$SCRIPT_DIR/build-for-hardware.sh" start9-pure iso - -# Check if build succeeded -if [ -f "$SCRIPT_DIR/results/archipelago-0.1.0-test-start9-pure-x86_64.iso" ]; then - echo "" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "✅ Test Build Successful!" - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "" - echo "📦 Output:" - ls -lh "$SCRIPT_DIR/results/"*start9-pure*.iso - echo "" - echo "✅ The build system is working correctly!" - echo "" - echo "🎯 Next Steps:" - echo "" - echo "1. Test in a VM (optional):" - echo " qemu-system-x86_64 -m 4G -smp 2 -boot d \\" - echo " -cdrom results/archipelago-0.1.0-test-start9-pure-x86_64.iso" - echo "" - echo "2. Run a full production build:" - echo " ./build-for-hardware.sh start9-pure iso" - echo "" - echo "3. Flash to USB and install on Start9 Server Pure:" - echo " sudo dd if=results/archipelago-0.1.0-start9-pure-x86_64.iso \\" - echo " of=/dev/sdX bs=1M status=progress" - echo "" -else - echo "" - echo "❌ Test build failed. Check the logs above for errors." - exit 1 -fi diff --git a/image-recipe/write-usb-dd.sh b/image-recipe/write-usb-dd.sh new file mode 100755 index 00000000..f14b0aec --- /dev/null +++ b/image-recipe/write-usb-dd.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# +# Write Archipelago ISO to USB using dd +# +# Usage: ./write-usb-dd.sh /dev/diskN +# + +set -e + +if [ -z "$1" ]; then + echo "Usage: $0 /dev/diskN" + echo "" + echo "Available disks:" + diskutil list external + exit 1 +fi + +USB_DISK="$1" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +ISO_FILE="$SCRIPT_DIR/results/archipelago-debian-12-x86_64.iso" + +if [ ! -f "$ISO_FILE" ]; then + echo "❌ ISO not found: $ISO_FILE" + echo "" + echo "Build the ISO first with: ./build-debian-iso.sh" + exit 1 +fi + +# Get raw disk for faster writes +RAW_DISK="${USB_DISK/disk/rdisk}" + +echo "╔════════════════════════════════════════════════════════╗" +echo "║ Write Archipelago ISO to USB ║" +echo "╚════════════════════════════════════════════════════════╝" +echo "" +echo "⚠️ WARNING: This will COMPLETELY ERASE $USB_DISK" +echo "" +echo "📀 ISO: $(basename "$ISO_FILE")" +echo "💾 USB: $USB_DISK (raw: $RAW_DISK)" +echo "" +echo "Press Ctrl+C to cancel, or Enter to continue..." +read + +echo "🔓 Unmounting USB..." +diskutil unmountDisk "$USB_DISK" || true + +echo "" +echo "📝 Writing ISO with dd (this may take a few minutes)..." +echo " Using raw disk $RAW_DISK for faster write..." +echo "" + +# Use dd to write the ISO directly +sudo dd if="$ISO_FILE" of="$RAW_DISK" bs=4m status=progress + +echo "" +echo "🔄 Syncing..." +sync + +echo "" +echo "✅ Done! USB is ready." +echo "" +echo "Now:" +echo " 1. Eject the USB safely: diskutil eject $USB_DISK" +echo " 2. Insert into target machine" +echo " 3. Boot from USB (F12 or similar for boot menu)" +echo "" +echo "Default login (live mode):" +echo " Username: user" +echo " Password: live" diff --git a/install-docker-desktop.sh b/install-docker-desktop.sh deleted file mode 100755 index ff20cc42..00000000 --- a/install-docker-desktop.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# Install Docker Desktop for macOS - -echo "============================================" -echo "Installing Docker Desktop" -echo "============================================" -echo "" - -# Make sure Homebrew is in PATH -eval "$(/opt/homebrew/bin/brew shellenv)" - -echo "Installing Docker Desktop (this may take a few minutes)..." -echo "You may be prompted for your password." -echo "" - -brew install --cask docker - -echo "" -echo "============================================" -echo "Docker Desktop Installation Complete!" -echo "============================================" -echo "" -echo "Next steps:" -echo "" -echo "1. Open Docker Desktop:" -echo " - Open Finder > Applications > Docker" -echo " - Or press Cmd+Space and type 'Docker'" -echo "" -echo "2. Wait for Docker to start (whale icon in menu bar)" -echo "" -echo "3. Verify Docker is running:" -echo " docker --version" -echo " docker ps" -echo "" -echo "Note: Podman is already installed and working!" -echo "You can use either Docker or Podman for containers." -echo "" diff --git a/install-docker.sh b/install-docker.sh deleted file mode 100755 index 78bb89c7..00000000 --- a/install-docker.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -# Docker Installation Script for Archipelago -# This script installs Docker Desktop on macOS - -set -e - -echo "============================================" -echo "Docker Desktop Installation" -echo "============================================" -echo "" - -# Colors -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -RED='\033[0;31m' -NC='\033[0m' - -# Check if Homebrew is installed -echo "Checking Homebrew..." -if ! command -v brew &> /dev/null; then - echo -e "${YELLOW}Homebrew not found. Installing Homebrew first...${NC}" - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - - # Add Homebrew to PATH for Apple Silicon - if [[ $(uname -m) == 'arm64' ]]; then - echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile - eval "$(/opt/homebrew/bin/brew shellenv)" - fi - echo -e "${GREEN}✓ Homebrew installed${NC}" -else - echo -e "${GREEN}✓ Homebrew already installed${NC}" -fi - -echo "" - -# Check if Docker is already installed -echo "Checking Docker..." -if command -v docker &> /dev/null; then - echo -e "${GREEN}✓ Docker already installed ($(docker --version))${NC}" - echo "" - echo "Docker is already available. Checking if it's running..." - if docker ps &> /dev/null; then - echo -e "${GREEN}✓ Docker is running${NC}" - else - echo -e "${YELLOW}⚠ Docker is installed but not running${NC}" - echo "Please start Docker Desktop from Applications" - fi - exit 0 -fi - -echo -e "${YELLOW}Installing Docker Desktop...${NC}" -echo "This may take a few minutes..." -echo "" - -# Install Docker using Homebrew Cask -brew install --cask docker - -echo "" -echo -e "${GREEN}✓ Docker Desktop installed${NC}" -echo "" - -# Instructions to start Docker -echo "============================================" -echo "Next Steps" -echo "============================================" -echo "" -echo "1. Open Docker Desktop from Applications:" -echo " - Open Finder > Applications > Docker" -echo " - Or press Cmd+Space and type 'Docker'" -echo "" -echo "2. Docker Desktop will start and you'll see a whale icon in your menu bar" -echo "" -echo "3. Wait for Docker to finish starting (the whale icon will stop animating)" -echo "" -echo "4. Verify Docker is running:" -echo " docker --version" -echo " docker ps" -echo "" -echo "5. Then you can continue with Archipelago setup" -echo "" - -echo "============================================" -echo "Alternative: Using Podman (Recommended)" -echo "============================================" -echo "" -echo "Archipelago is designed to work with Podman, which is:" -echo " - Lighter weight than Docker" -echo " - Rootless (more secure)" -echo " - Drop-in replacement for Docker" -echo "" -echo "To install Podman instead, run:" -echo " ./INSTALL.sh" -echo "" -echo "This will install all dependencies including Podman." -echo "" diff --git a/rebuild-backend.sh b/rebuild-backend.sh deleted file mode 100755 index fbafb00e..00000000 --- a/rebuild-backend.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# Rebuild Backend After Fixes - -echo "============================================" -echo "Rebuilding 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 "Building backend..." -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 "Option 1 - Use the dev script:" - echo " ./scripts/dev-start.sh" - echo " Choose option 2 (Full stack)" - echo "" - echo "Option 2 - Manual start:" - 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 diff --git a/scripts/optimize-alpine.sh b/scripts/optimize-debian.sh old mode 100755 new mode 100644 similarity index 66% rename from scripts/optimize-alpine.sh rename to scripts/optimize-debian.sh index 66e0f20f..4139b057 --- a/scripts/optimize-alpine.sh +++ b/scripts/optimize-debian.sh @@ -1,25 +1,25 @@ #!/bin/bash -# Alpine Linux optimization script for Archipelago +# Debian Linux optimization script for Archipelago # Optimizes system settings for container workloads set -e -echo "⚡ Optimizing Alpine Linux for container workloads..." +echo "⚡ Optimizing Debian Linux for container workloads..." # CPU Governor - set to performance for better container performance if [ -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ]; then echo "performance" > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 2>/dev/null || true fi -# I/O Scheduler - use deadline or none for SSDs +# I/O Scheduler - use none for NVMe or mq-deadline for SATA if command -v lsblk >/dev/null 2>&1; then for disk in $(lsblk -d -o NAME -n); do if [ -f "/sys/block/$disk/queue/scheduler" ]; then - # Prefer none (for NVMe) or deadline (for SATA SSD) + # Prefer none (for NVMe) or mq-deadline (for SATA SSD) if grep -q "none" "/sys/block/$disk/queue/scheduler"; then echo none > "/sys/block/$disk/queue/scheduler" 2>/dev/null || true - elif grep -q "deadline" "/sys/block/$disk/queue/scheduler"; then - echo deadline > "/sys/block/$disk/queue/scheduler" 2>/dev/null || true + elif grep -q "mq-deadline" "/sys/block/$disk/queue/scheduler"; then + echo mq-deadline > "/sys/block/$disk/queue/scheduler" 2>/dev/null || true fi fi done @@ -34,8 +34,7 @@ root hard nofile 65536 EOF # Optimize network settings for container networking -cat >> /etc/sysctl.conf <> /etc/sysctl.d/99-archipelago.conf </dev/null 2>&1 || true +sysctl --system >/dev/null 2>&1 || true -echo "✅ Alpine optimization complete!" +echo "✅ Debian optimization complete!" diff --git a/setup-env.sh b/setup-env.sh deleted file mode 100755 index 2b56f962..00000000 --- a/setup-env.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# Quick fix script to set up environment for backend - -cd "$(dirname "$0")/core" - -# Create a simple .env file for development -cat > .env << 'EOF' -# Development Environment Configuration -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 -EOF - -echo "✅ Created core/.env file for development" -echo "" -echo "Environment configured:" -echo " - Data directory: /tmp/archipelago-dev" -echo " - Bind address: 127.0.0.1:5959" -echo " - Dev mode: enabled" -echo "" -echo "Now run: ./scripts/dev-start.sh" diff --git a/test-docker-setup.sh b/test-docker-setup.sh deleted file mode 100755 index b7decc06..00000000 --- a/test-docker-setup.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# Quick test script to start a few lightweight apps -# This validates the Docker setup without pulling large images - -set -e - -echo "🧪 Testing Docker setup with lightweight apps..." -echo "" - -# Start just the placeholder apps and a few small services -docker compose up -d endurain morphos grafana searxng - -echo "" -echo "✅ Test apps started!" -echo "" -echo "Test these URLs:" -echo " • Endurain: http://localhost:8084" -echo " • MorphOS: http://localhost:8081" -echo " • Grafana: http://localhost:3000" -echo " • SearXNG: http://localhost:8082" -echo "" diff --git a/verify-install.sh b/verify-install.sh deleted file mode 100755 index 23529fc9..00000000 --- a/verify-install.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/bin/bash -# Verify Archipelago Installation -# This script checks if all required dependencies are properly installed - -set -e - -# Colors -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' - -ERRORS=0 - -echo "============================================" -echo "Archipelago Installation Verification" -echo "============================================" -echo "" - -# Function to check command -check_command() { - local cmd=$1 - local name=$2 - local version_flag=${3:---version} - - if command -v "$cmd" >/dev/null 2>&1; then - local version=$($cmd $version_flag 2>&1 | head -n 1) - echo -e "${GREEN}✓${NC} $name: $version" - return 0 - else - echo -e "${RED}✗${NC} $name: NOT FOUND" - ERRORS=$((ERRORS + 1)) - return 1 - fi -} - -# Check system tools -echo "System Tools:" -check_command "rustc" "Rust Compiler" "--version" -check_command "cargo" "Cargo" "--version" -check_command "node" "Node.js" "--version" -check_command "npm" "NPM" "--version" -check_command "podman" "Podman" "--version" -check_command "psql" "PostgreSQL" "--version" - -echo "" - -# Check optional tools -echo "Optional Tools:" -check_command "brew" "Homebrew" "--version" || echo -e "${YELLOW} (Homebrew is recommended for macOS)${NC}" - -echo "" - -# Check project dependencies -echo "Project Dependencies:" - -# Check frontend dependencies -if [ -d "neode-ui/node_modules" ]; then - echo -e "${GREEN}✓${NC} Frontend dependencies installed" -else - echo -e "${RED}✗${NC} Frontend dependencies NOT installed" - echo -e "${YELLOW} Run: cd neode-ui && npm install${NC}" - ERRORS=$((ERRORS + 1)) -fi - -# Check custom app dependencies -for app in did-wallet endurain morphos-server router web5-dwn; do - if [ -d "apps/$app/node_modules" ]; then - echo -e "${GREEN}✓${NC} $app dependencies installed" - else - echo -e "${YELLOW}⚠${NC} $app dependencies NOT installed" - echo -e "${YELLOW} Run: cd apps/$app && npm install${NC}" - fi -done - -echo "" - -# Check Rust build -echo "Rust Backend:" -if [ -d "core/target" ]; then - echo -e "${GREEN}✓${NC} Backend has been built" -else - echo -e "${YELLOW}⚠${NC} Backend not built yet" - echo -e "${YELLOW} Run: cd core && cargo build${NC}" -fi - -echo "" - -# Check Podman machine -echo "Container Runtime:" -if podman machine list 2>/dev/null | grep -q "Running"; then - echo -e "${GREEN}✓${NC} Podman machine is running" -elif podman machine list 2>/dev/null | grep -q "Stopped"; then - echo -e "${YELLOW}⚠${NC} Podman machine exists but not running" - echo -e "${YELLOW} Run: podman machine start${NC}" -else - echo -e "${YELLOW}⚠${NC} Podman machine not initialized" - echo -e "${YELLOW} Run: podman machine init && podman machine start${NC}" -fi - -echo "" - -# Check PostgreSQL -echo "Database:" -if brew services list 2>/dev/null | grep postgresql | grep -q started; then - echo -e "${GREEN}✓${NC} PostgreSQL service is running" -elif psql --version >/dev/null 2>&1; then - echo -e "${YELLOW}⚠${NC} PostgreSQL installed but service not running" - echo -e "${YELLOW} Run: brew services start postgresql@15${NC}" -else - echo -e "${YELLOW}⚠${NC} PostgreSQL status unknown" -fi - -# Check if database exists -if psql -lqt 2>/dev/null | cut -d \| -f 1 | grep -qw archipelago_dev; then - echo -e "${GREEN}✓${NC} Development database 'archipelago_dev' exists" -else - echo -e "${YELLOW}⚠${NC} Development database 'archipelago_dev' not found" - echo -e "${YELLOW} Run: createdb archipelago_dev${NC}" -fi - -echo "" - -# Check environment files -echo "Configuration:" -if [ -f "core/.env" ]; then - echo -e "${GREEN}✓${NC} Backend .env file exists" -else - echo -e "${YELLOW}⚠${NC} Backend .env file not found" - echo -e "${YELLOW} Copy: cp core/.env.example core/.env${NC}" -fi - -if [ -f "neode-ui/.env" ]; then - echo -e "${GREEN}✓${NC} Frontend .env file exists" -else - echo -e "${YELLOW}⚠${NC} Frontend .env file not found" - echo -e "${YELLOW} Copy: cp neode-ui/.env.example neode-ui/.env${NC}" -fi - -echo "" -echo "============================================" - -if [ $ERRORS -eq 0 ]; then - echo -e "${GREEN}✓ All required dependencies are installed!${NC}" - echo "" - echo "You can now start the project:" - echo " 1. Terminal 1: cd core && cargo run --bin archipelago" - echo " 2. Terminal 2: cd neode-ui && npm run dev" - echo " 3. Open http://localhost:8100" -else - echo -e "${RED}✗ $ERRORS required dependencies are missing${NC}" - echo "" - echo "Please install missing dependencies:" - echo " Run: ./INSTALL.sh" - echo "" - echo "Or follow the manual installation guide:" - echo " See: SETUP_GUIDE.md" -fi - -echo "============================================" -echo "" - -exit $ERRORS