Skip to content

About

Ubuntu Spins - mini-iso expanded

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Ubuntu Spins for netboot.xyz

Automated management of Ubuntu spin distributions (Kubuntu, Xubuntu, Lubuntu, Ubuntu MATE, Ubuntu Budgie, Edubuntu) for netboot.xyz's boot-via-ISO method.

What This Does

This repository automatically:

  • Discovers new Ubuntu spin releases
  • Fetches SHA256 checksums and file sizes
  • Generates JSON metadata files
  • Packages everything for netboot.xyz's mini-ISO

Users can then boot any Ubuntu flavor directly from netboot.xyz without pre-downloading ISOs.

Supported Distributions

Distribution Versions Status
Kubuntu 22.04.5, 24.04.5, 26.04.1, 26.10 βœ… Active
Xubuntu 22.04.5, 24.04.5, 26.04.1, 26.10 βœ… Active
Lubuntu 22.04.5, 24.04.5, 26.04.1, 26.10 βœ… Active
Ubuntu MATE 22.04.5, 24.04.5, 26.10 βœ… Active
Ubuntu Budgie 22.04.5, 24.04.5, 26.04.1, 26.10 βœ… Active
Edubuntu 24.04.5, 26.04.1, 26.10 βœ… Active
Ubuntu Studio 26.04.1, 26.10 βœ… Active
Ubuntu Cinnamon 24.04.5, 26.04.1, 26.10 βœ… Active

Note: Only the latest point release of each supported series is tracked (e.g., 24.04.5 replaces 24.04.3). The version checker skips superseded point releases and end-of-life series.

Quick Start

Requirements

pip install -r requirements.txt

Check for New Versions

# Discover all new versions
python3 scripts/check_new_versions.py

# Check specific version
python3 scripts/check_new_versions.py --version 26.10

# Dry run (preview only)
python3 scripts/check_new_versions.py --dry-run

Fetch Checksums (Fast!)

Instead of downloading multi-GB ISOs, fetch checksums from Ubuntu's published SHA256SUMS files:

# Update checksums for a specific version
python3 scripts/fetch_checksums.py --config config/versions/26.10.yaml

# Update all versions
for file in config/versions/*.yaml; do
  python3 scripts/fetch_checksums.py --config "$file"
done

Generate JSON Files

python3 scripts/generate_iso_json.py --output-dir output/

How It Works

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 1. Version Discovery                                            β”‚
β”‚    check_new_versions.py                                        β”‚
β”‚    β”œβ”€ Scrapes cdimage.ubuntu.com for version directories       β”‚
β”‚    β”œβ”€ Compares against existing configs                        β”‚
β”‚    └─ Creates YAML templates (empty checksums)                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 2. Checksum Fetching                                            β”‚
β”‚    fetch_checksums.py                                           β”‚
β”‚    β”œβ”€ Fetches SHA256SUMS from Ubuntu CDN                       β”‚
β”‚    β”œβ”€ Extracts checksums and file sizes                        β”‚
β”‚    └─ Updates YAML files (no ISO download needed!)             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 3. JSON Generation                                              β”‚
β”‚    generate_iso_json.py                                         β”‚
β”‚    β”œβ”€ Aggregates all version YAMLs                             β”‚
β”‚    β”œβ”€ Groups by spin (kubuntu.json, xubuntu.json, etc.)        β”‚
β”‚    └─ Outputs in netboot.xyz format                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 4. Mini-ISO Packaging                                           β”‚
β”‚    process-iso.yml (GitHub Actions)                             β”‚
β”‚    β”œβ”€ Downloads Ubuntu mini-ISO                                β”‚
β”‚    β”œβ”€ Extracts vmlinuz/initrd                                  β”‚
β”‚    β”œβ”€ Embeds JSON files in initrd                              β”‚
β”‚    β”œβ”€ Repackages complete bootable ISO                         β”‚
β”‚    └─ Releases ISO + vmlinuz/initrd + checksums                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Project Structure

ubuntu-spins/
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ spins.yaml                # Spin definitions (URLs, content IDs)
β”‚   β”œβ”€β”€ release_codenames.yaml    # Version β†’ codename mapping
β”‚   └── versions/                 # Per-version configs
β”‚       β”œβ”€β”€ 22.04.5.yaml
β”‚       β”œβ”€β”€ 24.04.5.yaml
β”‚       β”œβ”€β”€ 26.04.1.yaml
β”‚       └── 26.10.yaml
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ check_new_versions.py     # Version discovery & template creation
β”‚   β”œβ”€β”€ fetch_checksums.py        # Checksum fetching from SHA256SUMS
β”‚   β”œβ”€β”€ generate_iso_json.py      # JSON aggregator
β”‚   └── validate_json.py          # JSON output validation
β”œβ”€β”€ output/
β”‚   β”œβ”€β”€ kubuntu.json              # Generated JSON files
β”‚   β”œβ”€β”€ xubuntu.json
β”‚   └── ... (one per spin)
└── .github/workflows/
    β”œβ”€β”€ check-versions.yml        # Daily automation
    β”œβ”€β”€ update-iso-info.yml       # Manual checksum updates
    └── process-iso.yml           # Mini-ISO builder

Scripts Reference

check_new_versions.py

Discovers new Ubuntu versions and creates templates.

Features:

  • Scrapes Ubuntu CDN for available versions
  • Verifies ISO availability with HEAD requests
  • Creates version templates automatically
  • Skips versions without available ISOs
  • Skips superseded point releases and end-of-life series

Examples:

# Check for all new versions
python3 scripts/check_new_versions.py

# Check specific version
python3 scripts/check_new_versions.py --version 26.10

# Dry run
python3 scripts/check_new_versions.py --dry-run

# Verbose output
python3 scripts/check_new_versions.py -v

fetch_checksums.py

Fetches SHA256 checksums from Ubuntu's published files (no ISO download needed).

Why this is better:

  • 100x faster than downloading ISOs
  • Fetches from official SHA256SUMS files
  • Uses HEAD requests for file sizes
  • Perfect for automation

Examples:

# Update single version
python3 scripts/fetch_checksums.py --config config/versions/26.10.yaml

# Dry run
python3 scripts/fetch_checksums.py --config config/versions/26.10.yaml --dry-run

# Update all versions
for file in config/versions/*.yaml; do
  python3 scripts/fetch_checksums.py --config "$file"
done

generate_iso_json.py

Aggregates version YAMLs into JSON format for netboot.xyz.

Features:

  • Combines all versions per spin
  • Only includes entries with valid checksums
  • Outputs in netboot.xyz products:1.0 format
  • Supports version aliases (e.g., "24.04" and "noble")

Examples:

python3 scripts/generate_iso_json.py --output-dir output/

GitHub Actions

Daily Version Checker

Workflow: .github/workflows/check-versions.yml Trigger: Daily at 00:00 UTC or manual

Automatically discovers new versions and creates a PR with templates.

Manual triggers:

  • version: Check specific version (e.g., "26.10")
  • dry_run: Preview without creating PR

Manual Checksum Updater

Workflow: .github/workflows/update-iso-info.yml Trigger: Manual only

Runs fetch_checksums.py across version configs, regenerates the JSON output, and opens a PR.

Manual inputs:

  • version: Update specific version

Mini-ISO Builder

Workflow: .github/workflows/process-iso.yml Trigger: Push to master, daily, or manual

Builds the netboot.xyz mini-ISO with embedded JSON files.

What it does:

  1. Downloads the Ubuntu mini-ISO (pinned via MINI_ISO_URL, currently 26.10)
  2. Extracts vmlinuz and initrd
  3. Embeds all spin JSON files into the initrd
  4. Repackages everything into a standalone bootable ISO
  5. Creates draft release with:
    • ubuntu-netbootxyz-mini.iso - Complete bootable ISO
    • vmlinuz + initrd - For PXE/network boot
    • SHA256 and MD5 checksums for verification

Usage:

  • Boot the ISO directly on any system (BIOS or UEFI)
  • Or use vmlinuz/initrd for network booting via netboot.xyz

Configuration Files

config/spins.yaml

Defines each Ubuntu spin with URL patterns and identifiers.

spins:
  kubuntu:
    name: Kubuntu
    content_id: "org.kubuntu:kubuntu"
    url_base: https://cdimage.ubuntu.com/kubuntu/releases/
    path_template: "{{ release }}/release/kubuntu-{{ version }}-desktop-amd64.iso"

config/release_codenames.yaml

Maps Ubuntu versions to release codenames.

release_codenames:
  "24.04":
    codename: "Noble Numbat"
    release: "noble"

config/versions/{version}.yaml

Per-version configuration with all spins and their checksums.

version: 24.04.5
spin_groups:
  kubuntu:
    spins:
      - name: kubuntu
        version: 24.04.5
        release: noble
        files:
          iso:
            sha256: "..."
            size: 4560015360

Maintenance

Adding a New Ubuntu Release Codename

When Ubuntu announces a new version:

  1. Update config/release_codenames.yaml:
release_codenames:
  "26.10":
    codename: "Stonking Stingray"
    release: "stonking"
  1. Run version checker:
python3 scripts/check_new_versions.py --version 26.10
  1. Update MINI_ISO_URL in .github/workflows/process-iso.yml if the mini-ISO should move to the new release.

Removing an End-of-Life Release

Delete its config/versions/*.yaml file and its entry in release_codenames.yaml, then regenerate the JSON. The version checker will not re-add a series older than the newest one tracked.

Adding a New Spin

To add a new Ubuntu flavor (e.g., Ubuntu Cinnamon):

  1. Add to config/spins.yaml:
spins:
  ubuntu-cinnamon:
    name: Ubuntu Cinnamon
    content_id: "org.ubuntucinnamon:ubuntu-cinnamon"
    url_base: https://cdimage.ubuntu.com/ubuntu-cinnamon/releases/
    path_template: "{{ release }}/release/ubuntu-cinnamon-{{ version }}-desktop-amd64.iso"
  1. Run version checker to detect all available versions:
python3 scripts/check_new_versions.py

Troubleshooting

"No ISOs available for version X"

Cause: Ubuntu hasn't published ISOs for that version yet, or removed them.

Solution: Wait for release, or check if a newer point release exists (e.g., use 24.04.5 instead of 24.04.3).

"SHA256SUMS file not found"

Cause: Version is too old or was removed from Ubuntu's CDN.

Solution: These versions are no longer downloadable. Consider removing the version config.

Empty checksums in JSON output

Cause: Version YAML has empty sha256 or size: 0.

Solution: Run fetch_checksums.py to update:

python3 scripts/fetch_checksums.py --config config/versions/26.10.yaml

Workflow fails with "module not found"

Cause: Missing Python dependencies.

Solution: Ensure workflow uses pip install -r requirements.txt.

Contributing

Reporting Issues

  • Missing versions: Check if ISOs exist on Ubuntu CDN
  • Script errors: Run with -v flag and include full output
  • New spin requests: Provide official Ubuntu CDN URL

Development Setup

git clone https://github.com/netbootxyz/ubuntu-spins.git
cd ubuntu-spins
pip install -r requirements.txt

Testing Changes

# Test version discovery
python3 scripts/check_new_versions.py --dry-run -v

# Test checksum fetching
python3 scripts/fetch_checksums.py --config config/versions/26.10.yaml --dry-run

# Test JSON generation
python3 scripts/generate_iso_json.py --output-dir output/
jq . output/kubuntu.json | head -50

License

This project is maintained by the netboot.xyz team for automated Ubuntu spin management.

Links

Changelog

2026-10-18

  • βœ… Added Ubuntu 26.10 "Stonking Stingray", 26.04.1 and 24.04.5
  • 🧹 Removed 24.04.2 and 25.04 (ISOs gone), 25.10 (EOL), and superseded 24.04.3 / 26.04
  • πŸ”§ Version checker now skips superseded point releases and EOL series
  • πŸ”§ Mini-ISO builder now uses the 26.10 release mini-ISO (daily-live path was removed upstream)
  • 🧹 Removed update_iso_info.py (broken URL construction); update-iso-info.yml now uses fetch_checksums.py
  • 🧹 Removed unused ubuntu-release/ubuntu-server-release spin entries, duplicate iso-menu-session, and stale report docs

2025-10-11

  • ✨ NEW: Complete bootable ISO now included in releases (ubuntu-netbootxyz-mini.iso)
  • ✨ Added fetch_checksums.py for fast checksum fetching (100x faster)
  • ✨ Complete rewrite of check_new_versions.py with automatic template generation
  • βœ… Added Ubuntu 25.10 "Questing Quokka" support with 8 spins
  • βœ… Added Ubuntu Studio and Ubuntu Cinnamon flavors
  • βœ… Added Ubuntu 24.04.3 support
  • πŸ”§ Fixed missing Xubuntu 24.04.2 checksum (ISO removed by Ubuntu)
  • πŸ”§ Fixed broken update-iso-info.yml workflow
  • 🧹 Removed deprecated generate_version_template.py script
  • πŸ“ Created comprehensive documentation (README, claude.md, VALIDATION.md)
  • πŸ› Fixed initrd repacking to handle variable directory structures

Earlier

  • Initial project structure
  • Basic version management
  • GitHub Actions automation

About

Ubuntu Spins - mini-iso expanded

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages