Files
stegasoo/rpi
Aaron D. Lee 93420704e8 Add personality to the codebase (comments that don't suck)
The code now explains itself like a friend teaching you crypto:
- DCT module: Why mid-frequency? What's QIM? Why is scipy being weird?
- Steganography: How LSB actually works with visual examples
- Crypto: The multi-factor security model with ASCII art diagrams

Also adds kickoff-pi-test.sh - one command to flash, wait, setup, test.
No more manual steps between flashing and seeing if it works.

Comments should teach, not just describe. If you're reading the code
trying to understand how DCT steganography works, these comments
should actually help. Novel concept, I know.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 23:53:26 -05:00
..
2026-01-06 17:51:00 -05:00

Stegasoo Raspberry Pi

Scripts and resources for deploying Stegasoo on Raspberry Pi.

Quick Install

On a fresh Raspberry Pi OS Lite (64-bit) installation:

# Pre-setup (git not included in Lite image)
sudo chown $USER:$USER /opt
sudo apt-get update && sudo apt-get install -y git

# Clone and run setup
cd /opt
git clone -b 4.1 https://github.com/adlee-was-taken/stegasoo.git stegasoo
cd stegasoo
./rpi/setup.sh

What the Setup Script Does

  1. Installs system dependencies - build tools, libraries
  2. Installs Python 3.12 - via pyenv (Pi OS ships with 3.13 which is incompatible)
  3. Builds jpegio for ARM - patches x86-specific flags
  4. Installs Stegasoo - with web UI and all dependencies
  5. Creates systemd service - auto-starts on boot
  6. Enables the service - ready to start

Requirements

  • Raspberry Pi 4 or 5
  • Raspberry Pi OS Lite (64-bit) - Bookworm or later
  • 4GB+ RAM recommended (2GB minimum)
  • ~2GB free disk space
  • Internet connection

Performance

On a Pi 4 at 2GHz with USB 3.0 NVMe, expect ~60 seconds to encode/decode a 10MB JPEG with full encryption (passphrase + PIN + reference photo).

Pre-built Image Defaults

If using a pre-built image from GitHub Releases:

  • Default login: admin / stegasoo
  • Hostname: stegasoo.local
  • First boot: A setup wizard runs on first SSH login

Security note: Change the default password after setup with passwd

After Installation

Start the Service

sudo systemctl start stegasoo

Check Status

sudo systemctl status stegasoo

View Logs

journalctl -u stegasoo -f

Access Web UI

Open in browser: http://<pi-ip>:5000

On first access, you'll create an admin account.

Configuration

Edit the systemd service to change settings:

sudo systemctl edit stegasoo

Add overrides:

[Service]
Environment="STEGASOO_AUTH_ENABLED=true"
Environment="STEGASOO_HTTPS_ENABLED=true"
Environment="STEGASOO_HOSTNAME=stegasoo.local"

Then reload:

sudo systemctl daemon-reload
sudo systemctl restart stegasoo

Uninstall

sudo systemctl stop stegasoo
sudo systemctl disable stegasoo
sudo rm /etc/systemd/system/stegasoo.service
rm -rf /opt/stegasoo

Pre-built Images

Check GitHub Releases for pre-built SD card images.


Building Your Own Image

To create a distributable SD card image:

1. Flash Fresh Raspberry Pi OS

Use rpi-imager to flash Raspberry Pi OS (64-bit) to an SD card.

In advanced settings, set:

  • Hostname: stegasoo
  • Enable SSH (password auth for initial setup)
  • Username/password (temporary, will work for any user)
  • Skip WiFi for distributable image

2. Boot and Run Setup

# SSH into the Pi
ssh admin@stegasoo.local

# Pre-setup
sudo chown admin:admin /opt
sudo apt-get update && sudo apt-get install -y git

# Clone and run setup
cd /opt
git clone -b 4.1 https://github.com/adlee-was-taken/stegasoo.git stegasoo
cd stegasoo
./rpi/setup.sh

3. Test It Works

sudo systemctl start stegasoo
curl -k https://localhost:5000  # Should return HTML

4. Sanitize for Distribution

# Full sanitize (removes WiFi, shuts down for imaging)
sudo /opt/stegasoo/rpi/sanitize-for-image.sh

# Or soft reset (keeps WiFi for testing, 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 (users create their own admin)
  • Logs and temp files

The script validates cleanup and reports any issues.

5. Create the Image

After Pi shuts down, remove SD card and on another Linux machine:

# Find SD card device (BE CAREFUL - wrong device = data loss!)
lsblk

# Copy (replace sdX with your SD card)
sudo dd if=/dev/sdX of=stegasoo-rpi-$(date +%Y%m%d).img bs=4M status=progress

# Shrink the image (optional but recommended)
wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
chmod +x pishrink.sh
sudo ./pishrink.sh stegasoo-rpi-*.img

# Compress (zstd is faster than xz with similar compression)
zstd -19 -T0 stegasoo-rpi-*.img

6. Distribute

Upload the .img.zst file to GitHub Releases.

Users flash with:

# 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