- Rewrite setup.sh to use system Python instead of pyenv - Add Python version check (3.11-3.14 supported) - Remove jpegio build steps (jpeglib installs cleanly via pip) - Simplify prebuilt tarball (just venv, no pyenv) - Reduce install time: 5-10 min from source (was 15-20 min) - Update README.md and BUILD_IMAGE.md accordingly Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
178 lines
4.4 KiB
Markdown
178 lines
4.4 KiB
Markdown
# Stegasoo Pi Image Build Workflow
|
|
|
|
> **Note:** This guide is for developers building custom Pi images.
|
|
> **End users:** Just download the pre-built `.img.zst` from [Releases](https://github.com/adlee-was-taken/stegasoo/releases), flash it, and boot. No build process needed.
|
|
|
|
Quick reference for building a distributable SD card image.
|
|
|
|
## Step 1: Flash Fresh Raspbian
|
|
|
|
Use rpi-imager with these settings:
|
|
- **OS**: Raspberry Pi OS Lite (64-bit)
|
|
- **Hostname**: `stegasoo`
|
|
- **Enable SSH**: Yes (password auth)
|
|
- **Username**: `admin`
|
|
- **Password**: `stegasoo`
|
|
- **WiFi**: Configure for your network (sanitize script removes it later)
|
|
|
|
## Step 2: Boot & SSH In
|
|
|
|
```bash
|
|
# Wait for Pi to boot (~60 seconds), then:
|
|
ssh admin@stegasoo.local
|
|
# or use IP from router DHCP list
|
|
```
|
|
|
|
## Step 3: Pre-Setup
|
|
|
|
```bash
|
|
# Take ownership of /opt
|
|
sudo chown admin:admin /opt
|
|
|
|
# Install git (not included in Lite image)
|
|
sudo apt-get update && sudo apt-get install -y git
|
|
```
|
|
|
|
## Step 4: Clone Repo
|
|
|
|
```bash
|
|
cd /opt
|
|
git clone -b 4.2 https://github.com/adlee-was-taken/stegasoo.git stegasoo
|
|
```
|
|
|
|
## Step 5: Run Setup
|
|
|
|
```bash
|
|
cd /opt/stegasoo
|
|
./rpi/setup.sh
|
|
```
|
|
|
|
The setup script:
|
|
- Verifies Python 3.11+ (system Python, no pyenv needed)
|
|
- Installs dependencies via apt and pip
|
|
- jpeglib installs cleanly (no ARM patching like jpegio)
|
|
- Creates and enables systemd service
|
|
|
|
Install time: **5-10 minutes** (from source)
|
|
|
|
### Pre-built Venv (optional)
|
|
|
|
For faster installs, you can provide a pre-built venv tarball:
|
|
|
|
```bash
|
|
# On your host machine:
|
|
scp rpi/stegasoo-rpi-venv-arm64.tar.zst admin@stegasoo.local:/opt/stegasoo/rpi/
|
|
|
|
# Then on Pi:
|
|
cd /opt/stegasoo && ./rpi/setup.sh # Detects local tarball, skips pip build
|
|
```
|
|
|
|
Install time with pre-built: **~2 minutes**
|
|
|
|
## Step 6: Test It Works
|
|
|
|
```bash
|
|
sudo systemctl start stegasoo
|
|
curl -k https://localhost:5000
|
|
# Should return HTML
|
|
```
|
|
|
|
## Step 7: Sanitize for Distribution
|
|
|
|
```bash
|
|
# Full sanitize (for final image - removes WiFi, shuts down)
|
|
sudo /opt/stegasoo/rpi/sanitize-for-image.sh
|
|
|
|
# Or soft reset (for testing - keeps WiFi, reboots)
|
|
sudo /opt/stegasoo/rpi/sanitize-for-image.sh --soft
|
|
```
|
|
|
|
This removes:
|
|
- WiFi credentials (unless `--soft`)
|
|
- SSH host keys (regenerate on boot)
|
|
- SSH authorized keys
|
|
- Bash history
|
|
- Stegasoo auth database
|
|
- Logs and temp files
|
|
|
|
The script validates all cleanup steps before finishing.
|
|
|
|
## Step 8: Pull the Image
|
|
|
|
Remove SD card, insert into your Linux machine:
|
|
|
|
```bash
|
|
# Find the SD card device (CAREFUL!)
|
|
lsblk
|
|
|
|
# Pull image (auto-resizes to 16GB, compresses with zstd)
|
|
sudo ./rpi/pull-image.sh /dev/sdX stegasoo-rpi-4.2.0.img.zst
|
|
```
|
|
|
|
The script automatically resizes rootfs to 16GB (for smaller download), preserves auto-expand, and compresses.
|
|
|
|
## Step 9: Distribute
|
|
|
|
Upload `.img.zst` to GitHub Releases.
|
|
|
|
Users can flash with:
|
|
```bash
|
|
# Option 1: rpi-imager CLI (supports .zst.zip directly)
|
|
sudo rpi-imager --cli --disable-verify stegasoo-rpi-*.img.zst.zip /dev/sdX
|
|
|
|
# Option 2: flash-image.sh (auto-detects SD card, shows progress)
|
|
sudo ./rpi/flash-image.sh stegasoo-rpi-*.img.zst.zip
|
|
|
|
# Option 3: Manual dd
|
|
zstdcat stegasoo-rpi-*.img.zst | sudo dd of=/dev/sdX bs=4M status=progress
|
|
```
|
|
|
|
---
|
|
|
|
## Creating the Pre-built Venv Tarball
|
|
|
|
After a successful from-source build, create the pre-built tarball for future installs:
|
|
|
|
```bash
|
|
# On the Pi after successful setup:
|
|
cd /opt/stegasoo
|
|
|
|
# Strip caches and tests from venv (saves ~100MB)
|
|
find venv/ -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null
|
|
find venv/ -type d -name 'tests' -exec rm -rf {} + 2>/dev/null
|
|
find venv/ -type d -name 'test' -exec rm -rf {} + 2>/dev/null
|
|
|
|
# Create venv tarball
|
|
tar -cf - venv/ | zstd -19 -T0 > /tmp/stegasoo-rpi-venv-arm64.tar.zst
|
|
|
|
# Check size (should be ~40-50MB)
|
|
ls -lh /tmp/stegasoo-rpi-venv-arm64.tar.zst
|
|
```
|
|
|
|
Pull to host and upload to GitHub releases:
|
|
```bash
|
|
# On host:
|
|
scp admin@stegasoo.local:/tmp/stegasoo-rpi-venv-arm64.tar.zst ./rpi/
|
|
# Upload to GitHub releases as stegasoo-rpi-venv-arm64.tar.zst
|
|
```
|
|
|
|
---
|
|
|
|
## Quick Command Summary
|
|
|
|
```bash
|
|
# On Pi (after SSH):
|
|
sudo chown admin:admin /opt
|
|
sudo apt-get update && sudo apt-get install -y git
|
|
cd /opt && git clone -b 4.2 https://github.com/adlee-was-taken/stegasoo.git stegasoo
|
|
|
|
# Run setup:
|
|
cd /opt/stegasoo && ./rpi/setup.sh
|
|
sudo systemctl start stegasoo
|
|
curl -k https://localhost:5000
|
|
sudo /opt/stegasoo/rpi/sanitize-for-image.sh
|
|
|
|
# On host (pull image - auto-resizes to 16GB):
|
|
sudo ./rpi/pull-image.sh /dev/sdX stegasoo-rpi-4.2.0.img.zst
|
|
```
|