Enhance README and build scripts for hardware-specific optimizations
- Updated README.md to clarify development setup for macOS/Docker and added production build instructions for specific hardware. - Introduced new build scripts for optimized OS images targeting Start9 Server Pure, HP ProDesk 400 G4 DM, and Dell OptiPlex. - Enhanced Dockerfile to specify platform compatibility and improved Alpine profile for Archipelago builds. - Updated configuration files and init scripts to support new hardware profiles and ensure proper service management.
This commit is contained in:
@@ -0,0 +1,372 @@
|
||||
# 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! 🏝️**
|
||||
Reference in New Issue
Block a user