Files
..
2026-06-06 14:22:07 -04:00

Stormux x86_64 ISO Build

This directory contains the archiso profile for building a Stormux x86_64 live/install ISO image.

Overview

The x86_64 build uses archiso (Arch Linux ISO build system) and is configured for accessibility with the Fenrir screen reader. The airootfs/ tree is maintained as the x86_64 live-system overlay; shared behavior may mirror the Pi image, but files are not copied from pi4/files/ during the build.

Directory Structure

x86_64/
├── build.sh                    # Main build script
├── profiledef.sh               # Archiso profile definition
├── pacman.conf                 # Pacman config with Stormux repository
├── packages.x86_64             # Package list for installation
├── grub/                       # UEFI boot configuration
│   ├── grub.cfg
│   └── loopback.cfg
├── syslinux/                   # BIOS boot configuration
│   ├── archiso_head.cfg
│   ├── archiso_pxe.cfg
│   ├── archiso_pxe-linux.cfg
│   ├── archiso_sys.cfg
│   ├── archiso_sys-linux.cfg
│   ├── archiso_tail.cfg
│   ├── splash.png
│   └── syslinux.cfg
└── airootfs/                   # Live system overlay files
    ├── etc/                    # Live-system configuration
    ├── root/                   # x86_64-specific scripts
    ├── usr/                    # Live-system utilities and installer
    └── var/                    # Live-system variable data

Overlay Maintenance

Edit files directly under airootfs/ using the final filesystem path they should have in the live ISO. For example, live-system scripts belong under airootfs/usr/local/bin/, and systemd units belong under airootfs/etc/systemd/system/.

Some files intentionally match the Pi overlay, such as shell defaults, Fenrir support scripts, and shared Stormux helper behavior. Keep both trees in sync when a change is meant to affect both image families.

Pi hardware files remain Pi-only and should not be added to the x86_64 profile unless there is a specific PC use for them:

  • boot/cmdline.txt - Pi boot command line
  • boot/config.txt - Pi hardware configuration
  • etc/modprobe.d/brcmfmac.conf - Pi wireless driver config

Prerequisites

Building requires an Arch Linux host system with:

  • archiso package installed
  • Root privileges
  • Internet connection for package downloads and build-time helper installs

Building the ISO

cd x86_64
sudo ./build.sh

Build Options

  • -o <dir> - Output directory (default: ./out)
  • -w <dir> - Work directory (default: ./work)
  • -h - Show help

Build Process

  1. Uses the maintained airootfs/ overlay as-is
  2. Adds Stormux repository GPG key to the build host's keyring
    • Uses the included stormux_repo.pub file
    • Key fingerprint: 52ADA49000F1FF0456F8AEEFB4CDE1CD56EF8E82
  3. Runs mkarchiso to build the ISO
    • Packages from Stormux repo can be installed during build
    • The latest sas helper is installed into the live environment during image creation
  4. Renames the ISO to stormux-x86_64-YYYY-MM-DD.iso when possible and writes a matching .sha1sum

The Stormux repository key is also embedded in the ISO at /usr/share/stormux/stormux_repo.pub and automatically imported on first boot via the stormux-repo-init.service, ensuring the live environment can install additional packages from the Stormux repository.

Key Features

Accessibility

  • Fenrir screen reader starts automatically (not speakup)
  • Pipewire audio properly initialized before Fenrir starts
  • Speech-dispatcher integration for speech synthesis
  • GRUB plays an audible tune on boot for accessibility
  • Boot menu defaults to accessible entry
  • Service startup order ensures audio is ready before screen reader
  • First-login live-environment setup calibrates volume, checks networking and time, then offers to run the installer

Package Management

  • Stormux repository configured with priority over Arch repos
  • Custom packages from Stormux repo: fenrir, w3m-git, yay, etc.

Default Configuration

  • Default user: stormux / Password: stormux
  • Root password: root
  • NetworkManager for network configuration
  • Braille terminal support (brltty)
  • Multiple speech synthesizers (espeak-ng, rhvoice)

Audio and Speech Initialization

The live environment uses a carefully orchestrated startup sequence to ensure Fenrir has working audio:

  1. stormux-audio-setup.service - Runs after sound hardware is detected

    • Enables systemd user linger for the stormux user
    • Starts pipewire user services
    • Unmutes audio and sets volume to 70%
  2. stormux-speech.service - Runs after audio setup

    • Waits 2 seconds for pipewire to fully initialize
    • Starts fenrirscreenreader.service
  3. fenrirscreenreader.service - Screen reader with dependencies

    • Configured to wait for pipewire, speech-dispatcher, and sound.target
    • Uses speech-dispatcher for TTS output

This ensures Fenrir never starts without working audio, preventing system freezes or silent boot.

Live Setup and Installer Flow

On first login to tty1, the live environment runs a short setup script. It calibrates speech volume, checks for network access, updates the live environment clock, copies the detected timezone into the installer defaults, and then asks whether to run install-stormux.

The installer gives one last chance to accept or change the timezone before installation. The live setup changes are for the temporary live environment only; the installed system is configured by install-stormux.

Differences from Pi4 Build

  1. No ARM-specific packages - Uses x86_64 standard Linux kernel
  2. Fenrir instead of speakup - More feature-rich screen reader
  3. UEFI and BIOS support - Boots on both modern and legacy systems
  4. ISO format - Live/install medium instead of disk image
  5. No Pi hardware configs - Standard x86_64 PC configuration
  6. Different audio startup - Pipewire user services instead of system-wide

Testing

After building, test the ISO with:

  • QEMU/KVM virtual machine
  • VirtualBox
  • Physical hardware (USB/CD)

For VM testing with audio:

./qemu-boot.sh

After installing to the test disk, boot the installed system with:

./qemu-boot.sh -i

Customization

Adding Packages

Edit packages.x86_64 and add package names (one per line).

Modifying Boot Configuration

  • BIOS: Edit syslinux/archiso_sys-linux.cfg
  • UEFI: Edit grub/grub.cfg

Adding Overlay Files

Place files in airootfs/ following the target filesystem structure. The x86_64 build uses this overlay directly.

Troubleshooting

Build fails with GPG errors

The build script should automatically add the Stormux repository key. If it fails:

  1. Check that x86_64/stormux_repo.pub exists
  2. Manually add the key to your build host:
sudo pacman-key --add x86_64/stormux_repo.pub
sudo pacman-key --lsign-key 52ADA49000F1FF0456F8AEEFB4CDE1CD56EF8E82

Missing packages

Ensure the Stormux repository is accessible:

curl -I https://packages.stormux.org/x86_64/

Disk space issues

The build requires significant space:

  • Work directory: ~3-4 GB
  • Output ISO: ~1-2 GB

Ensure adequate free space in work and output directories.