Automated management of Ubuntu spin distributions (Kubuntu, Xubuntu, Lubuntu, Ubuntu MATE, Ubuntu Budgie, Edubuntu) for netboot.xyz's boot-via-ISO method.
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.
| 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.
pip install -r requirements.txt# 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-runInstead 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"
donepython3 scripts/generate_iso_json.py --output-dir output/βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
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
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 -vFetches 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"
doneAggregates 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/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
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
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:
- Downloads the Ubuntu mini-ISO (pinned via
MINI_ISO_URL, currently 26.10) - Extracts vmlinuz and initrd
- Embeds all spin JSON files into the initrd
- Repackages everything into a standalone bootable ISO
- Creates draft release with:
ubuntu-netbootxyz-mini.iso- Complete bootable ISOvmlinuz+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
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"Maps Ubuntu versions to release codenames.
release_codenames:
"24.04":
codename: "Noble Numbat"
release: "noble"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: 4560015360When Ubuntu announces a new version:
- Update
config/release_codenames.yaml:
release_codenames:
"26.10":
codename: "Stonking Stingray"
release: "stonking"- Run version checker:
python3 scripts/check_new_versions.py --version 26.10- Update
MINI_ISO_URLin.github/workflows/process-iso.ymlif the mini-ISO should move to the new 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.
To add a new Ubuntu flavor (e.g., Ubuntu Cinnamon):
- 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"- Run version checker to detect all available versions:
python3 scripts/check_new_versions.pyCause: 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).
Cause: Version is too old or was removed from Ubuntu's CDN.
Solution: These versions are no longer downloadable. Consider removing the version config.
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.yamlCause: Missing Python dependencies.
Solution: Ensure workflow uses pip install -r requirements.txt.
- Missing versions: Check if ISOs exist on Ubuntu CDN
- Script errors: Run with
-vflag and include full output - New spin requests: Provide official Ubuntu CDN URL
git clone https://github.com/netbootxyz/ubuntu-spins.git
cd ubuntu-spins
pip install -r requirements.txt# 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 -50This project is maintained by the netboot.xyz team for automated Ubuntu spin management.
- netboot.xyz - Main project
- Ubuntu CDN - ISO source
- Issue Tracker - Report problems
- β 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.ymlnow usesfetch_checksums.py - π§Ή Removed unused
ubuntu-release/ubuntu-server-releasespin entries, duplicateiso-menu-session, and stale report docs
- β¨ NEW: Complete bootable ISO now included in releases (
ubuntu-netbootxyz-mini.iso) - β¨ Added
fetch_checksums.pyfor fast checksum fetching (100x faster) - β¨ Complete rewrite of
check_new_versions.pywith 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.ymlworkflow - π§Ή Removed deprecated
generate_version_template.pyscript - π Created comprehensive documentation (README, claude.md, VALIDATION.md)
- π Fixed initrd repacking to handle variable directory structures
- Initial project structure
- Basic version management
- GitHub Actions automation