A simple, extensible Python tool to automatically fetch the latest stable Linux ISO images based on a human-readable configuration file.
The project is designed to be:
- easy to understand
- easy to extend
- safe (no betas, snapshots, or daily builds)
- deterministic and predictable
It is intended for users who regularly download Linux ISOs and want a repeatable, scriptable way to keep them up to date.
-
Update multiple Linux distro ISOs with one command
-
Human-readable configuration file (
distros.txt) -
Clean separation between:
- distro logic
- variants (desktop, server, etc.)
- channels (lts, latest)
-
Snapshot-, beta-, and daily-build safe
-
--debugmode to preview download URLs without downloading -
Easy to add new distros without modifying the core script
iso-updater/
├── update-isos.py
├── distros.txt
├── requirements.txt
├── isos/
└── distros/
├── __init__.py
├── ubuntu.py
├── debian.py
└── fedora.py
update-isos.py— main entry pointdistros.txt— defines which ISOs to fetchdistros/— per-distro URL resolution logicisos/— downloaded ISO files are stored here
Each non-empty line defines one ISO to fetch using the format:
<distro> <variant> <channel>
Lines starting with # are ignored.
# Ubuntu
ubuntu desktop lts
ubuntu server lts
ubuntu server latest
# Debian
debian netinst stable
# Fedora
fedora workstation latest
fedora server latestSupports Ubuntu server and dektop and all the official flavors on channels lts and latest.
Supports Fedora workstation, kde and server on channel latest.
Supports Debian on channal stable
git clone https://github.com/WoutNerd/iso-updater
cd iso-updaterIt is recommended to use a virtual environment:
python3 -m venv .venv
source .venv/bin/activateInstall required packages:
python3 -m pip install -r requirements.txtAdd or remove lines to match the ISOs you want to download.
python3 update-isos.pyAll ISOs will be downloaded into the isos/ directory.
To print the resolved download URLs without downloading anything, run:
python3 update-isos.py --debugExample output:
[DEBUG] https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso
[DEBUG] https://download.fedoraproject.org/pub/fedora/linux/releases/40/Server/x86_64/iso/Fedora-Server-dvd-x86_64-40-1.14.iso
This is useful for:
- verifying logic
- testing new distro handlers
- scripting or logging
-
Uses GA releases only
-
LTS selection logic:
- April releases (
.04) - even years only
- automatically falls back if a future LTS is not GA yet
- April releases (
-
Never uses:
- snapshots
- betas
- daily builds
cdimage.ubuntu.com
Supported entries:
ubuntu desktop lts
ubuntu server lts
ubuntu desktop latest
ubuntu server latest- Uses the official
current/symlink - Always tracks stable
- No version guessing or scraping heuristics
Supported entries:
debian netinst stable- Uses GA releases only
- Avoids Rawhide and Branched automatically
- Supports both Workstation (Live ISO) and Server (DVD ISO)
Supported entries:
fedora workstation latest
fedora server latest- Create a new Python file in
distros/, for examplearch.py - Implement a single function:
def resolve_urls(args) -> list[str]:
...- Add a corresponding line to
distros.txtThe main script automatically loads the new handler.