your own private MikroTik stash — firmware hoarding, but make it idempotent 📦
  • Shell 98%
  • Dockerfile 2%
Find a file
holm / Christian Müller 6bb33ef1c6
Merge dev: Release v0.1.0
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 01:45:14 +02:00
.gitignore chore: Standard-Dateien ergänzen 2026-08-16 01:19:22 +02:00
CHANGELOG.md chore(release): v0.1.0 2026-08-16 01:45:06 +02:00
CLAUDE.md chore: Standard-Dateien ergänzen 2026-08-16 01:19:22 +02:00
cliff.toml chore: Standard-Dateien ergänzen 2026-08-16 01:19:22 +02:00
Dockerfile feat: daemon-Modus — eingebauter Tages-Timer statt Host-Cron 2026-08-16 01:30:45 +02:00
LICENSE chore: Standard-Dateien ergänzen 2026-08-16 01:19:22 +02:00
mtmirror.sh feat: daemon-Modus — eingebauter Tages-Timer statt Host-Cron 2026-08-16 01:30:45 +02:00
pemmikan.md docs: pemmikan initial 2026-08-16 01:44:59 +02:00
README.md feat: daemon-Modus — eingebauter Tages-Timer statt Host-Cron 2026-08-16 01:30:45 +02:00

mtmirror

Bash Docker Lizenz

Lokaler MikroTik-Firmware-Mirror — lädt einen definierten Scope an RouterOS-Versionen (NPK, all_packages, CHR-Images, netinstall) idempotent von download.mikrotik.com in eine lokale Ablage. Diff-Download: vorhandene, vollständige Dateien werden übersprungen.

Features

  • Idempotent: erneuter Lauf lädt nur Fehlendes/Unvollständiges nach (Size-Check via HEAD)
  • Scope-gepinnt: feste Versionslisten für v7 (stable + LTS-Milestones) und v6 (LTS-Ast) im Script
  • Resume: abgebrochene Downloads werden fortgesetzt (curl -C -)
  • Konfiguration komplett via Env — containertauglich ohne Umbau
  • Pro Version: NPK je Architektur (v7), all_packages-Zip, CHANGELOG, netinstall, CHR (img + ova)

Aufruf

mtmirror fetch            # kompletten Scope laden (idempotent)
mtmirror fetch 7.23       # konkrete Version laden
mtmirror daemon           # fetch-Schleife: sofort + alle MIRROR_INTERVAL (24h)
mtmirror                  # Hilfe

list, verify, pin, prune sind Stubs (Roadmap, siehe Issues).

Konfiguration (Env)

Variable Default Bedeutung
MIRROR_ROOT $HOME/share/mikrotik-mirror Wurzelpfad der Ablage
MIRROR_ARCHS_V7 arm arm64 mipsbe mmips v7-Architekturen
MIRROR_ARCHS_V6 arm mipsbe mmips v6-Architekturen
MIRROR_INCLUDE_PACKAGES 1 all_packages-Zips mitladen
MIRROR_INCLUDE_CHR 1 CHR-Images (img.zip + ova) mitladen
MIRROR_INCLUDE_NETINSTALL 1 netinstall-Archive mitladen
MIRROR_INTERVAL 24h daemon: Schlafzeit zwischen fetch-Läufen

Voraussetzungen

bash, curl, coreutils (stat) — sonst nichts.

Installation

git clone https://forgejo.mueller.network/holm.tools.public/mtmirror.git
ln -s "$(pwd)/mtmirror/mtmirror.sh" ~/bin/mtmirror

Container

Das Image läuft als Daemon: sofortiger Abgleich, danach alle MIRROR_INTERVAL (Default 24h) erneut — kein Host-Cron nötig. SIGTERM beendet sauber.

docker build -t mtmirror .
docker run -d -v /pfad/zum/mirror:/mirror --restart unless-stopped mtmirror
docker run --rm -v /pfad/zum/mirror:/mirror mtmirror fetch 7.23   # One-Shot

Beispiel compose-Service:

services:
  mtmirror:
    build: .
    restart: unless-stopped
    volumes:
      - ./mirror:/mirror
    environment:
      MIRROR_INCLUDE_CHR: "0"

Hinweis

Die heruntergeladenen Dateien sind Eigentum von MikroTik — siehe mikrotik.com für Lizenzinformationen. Dieses Tool verteilt keine Firmware, es befüllt ausschließlich deine eigene, private Ablage.

Changelog

Siehe CHANGELOG.md — generiert via git-cliff.

Lizenz

MIT — siehe LICENSE.