Skip to content

A simple, extensible Python tool to automatically fetch the latest stable Linux ISO images based on a human-readable configuration file.

License

Notifications You must be signed in to change notification settings

WoutNerd/iso-updater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ISO Updater

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.


Features

  • 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

  • --debug mode to preview download URLs without downloading

  • Easy to add new distros without modifying the core script


Project Structure

iso-updater/
├── update-isos.py
├── distros.txt
├── requirements.txt
├── isos/
└── distros/
    ├── __init__.py
    ├── ubuntu.py
    ├── debian.py
    └── fedora.py
  • update-isos.py — main entry point
  • distros.txt — defines which ISOs to fetch
  • distros/ — per-distro URL resolution logic
  • isos/ — downloaded ISO files are stored here

Configuration (distros.txt)

Each non-empty line defines one ISO to fetch using the format:

<distro> <variant> <channel>

Lines starting with # are ignored.

Examples

# Ubuntu
ubuntu desktop lts
ubuntu server lts
ubuntu server latest

# Debian
debian netinst stable

# Fedora
fedora workstation latest
fedora server latest

Supported distros

Ubuntu

Supports Ubuntu server and dektop and all the official flavors on channels lts and latest.

Fedora

Supports Fedora workstation, kde and server on channel latest.

Debian

Supports Debian on channal stable


How to Use

Clone the repository

git clone https://github.com/WoutNerd/iso-updater
cd iso-updater

Install dependencies

It is recommended to use a virtual environment:

python3 -m venv .venv
source .venv/bin/activate

Install required packages:

python3 -m pip install -r requirements.txt

Edit distros.txt

Add or remove lines to match the ISOs you want to download.

Download ISOs

python3 update-isos.py

All ISOs will be downloaded into the isos/ directory.


Debug / Dry-Run Mode

To print the resolved download URLs without downloading anything, run:

python3 update-isos.py --debug

Example 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

Distro Behavior

Ubuntu

  • Uses GA releases only

  • LTS selection logic:

    • April releases (.04)
    • even years only
    • automatically falls back if a future LTS is not GA yet
  • Never uses:

    • snapshots
    • betas
    • daily builds
    • cdimage.ubuntu.com

Supported entries:

ubuntu desktop lts
ubuntu server lts
ubuntu desktop latest
ubuntu server latest

Debian

  • Uses the official current/ symlink
  • Always tracks stable
  • No version guessing or scraping heuristics

Supported entries:

debian netinst stable

Fedora

  • 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

Adding a New Distro

  1. Create a new Python file in distros/, for example arch.py
  2. Implement a single function:
def resolve_urls(args) -> list[str]:
...
  1. Add a corresponding line to distros.txt The main script automatically loads the new handler.

About

A simple, extensible Python tool to automatically fetch the latest stable Linux ISO images based on a human-readable configuration file.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages