- 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.
373 lines
7.7 KiB
Markdown
373 lines
7.7 KiB
Markdown
# 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! 🏝️**
|