• v0.5.0 8df213082a

    v0.5.0
    All checks were successful
    release / release (push) Successful in 27s
    Stable

    Ghost released this 2026-07-02 14:56:32 +00:00 | 26 commits to main since this release

    Added

    • Linux Netinstall. Each RouterOS version now mirrors the Linux Netinstall CLI
      (netinstall-<ver>.tar.gz) alongside the Windows tool (netinstall-<ver>.zip). The two are marked
      distinctly in the listing and the legend — netinstall · win (amber) and netinstall · linux
      (orange). Versions that predate the Linux tool simply skip it (the missing file 404s and is ignored).
    • --force reinstall. sudo ./src/deploy.sh --force rebuilds the images and force-recreates the
      containers for the version you're already on — no version change, no prompt, no host/config/./data
      changes.

    Changed

    • update is a no-op when already current. On the latest release with no target given, update no
      longer prompts or rebuilds — it reports "already on the latest version", exits 0, and prints a visible
      note pointing at --force to rebuild the current version.
    Downloads
  • v0.4.4 78ef5a1f1f

    v0.4.4
    All checks were successful
    release / release (push) Successful in 17s
    Stable

    Ghost released this 2026-07-02 14:21:35 +00:00 | 28 commits to main since this release

    Added

    • update shows the version transition. It now prints the installed version and an explicit
      upgrading vX → vY line (or re-installing vX / switching to <branch>) before rebuilding, so it's
      clear what you're moving from and to.
    • Clickable source link. download.mikrotik.com in the page footer is now a link to
      https://download.mikrotik.com (opens in a new tab).
    Downloads
  • v0.4.3 cad65656bb

    v0.4.3
    All checks were successful
    release / release (push) Successful in 16s
    Stable

    Ghost released this 2026-07-02 14:14:20 +00:00 | 29 commits to main since this release

    Changed

    • Landing page: soft centred spotlight. Added a subtle fixed radial-gradient behind the content — a
      gentle lift down the centre column that fades into the darker edges — to draw focus to the centre.
    Downloads
  • v0.4.2 e02ef7ef30

    v0.4.2
    All checks were successful
    release / release (push) Successful in 28s
    Stable

    Ghost released this 2026-07-02 13:32:19 +00:00 | 30 commits to main since this release

    Fixed

    • --all left fail2ban installed but not running. fail2ban aborts the entire server (exit 255) if
      any enabled jail's logpath is missing, and two were: the recidive jail's /var/log/fail2ban.log
      never exists on Rocky (fail2ban logs to the journal), and on a fresh install Caddy's access log doesn't
      exist yet when hardening runs (before the stack is built). Hardening now pre-creates both — sets
      logtarget to a real file for recidive and touches the access log (owned by the rootless container
      uid) — and verifies the service actually started, warning instead of falsely reporting ok.
    Downloads
  • v0.4.1 865b10c2ae

    v0.4.1
    All checks were successful
    release / release (push) Successful in 27s
    Stable

    Ghost released this 2026-07-02 12:33:07 +00:00 | 31 commits to main since this release

    Added

    • update marks the installed version in the version list (e.g. v0.4.1 (latest, current)), so
      it's clear which one is running.
    • update refuses downgrades. Selecting a release tag older than the installed version stops with
      guidance rather than rolling back — same-version re-installs, forward moves, and branch refs still
      work. Documented in doc/UPDATES.md (with the manual, unsupported bypass).

    Fixed

    • Ambiguous vX.Y.Z ref / wrong checkout. update and the installer now check out release tags via
      refs/tags/<tag>, so a same-named local branch (e.g. a stray heads/v0.4.0 left by an earlier
      git checkout DWIM) can no longer shadow the tag or emit warning: refname '…' is ambiguous. Release
      tags always check out detached at the tagged commit.
    Downloads
  • v0.4.0 2d37948c23

    v0.4.0
    All checks were successful
    release / release (push) Successful in 17s
    Stable

    Ghost released this 2026-07-02 12:07:19 +00:00 | 32 commits to main since this release

    Added

    • set-operator command — set or clear the operator/org name + contact email (shown in the PUBLIC
      page footer and the outbound User-Agent) without editing YAML. Blank a field to clear it; blank both to
      drop the footer credit. Unattended via PM_OPERATOR_NAME / PM_OPERATOR_EMAIL.
    • Version selection for updateupdate now fetches all branches + tags and lists the 5 most
      recent releases to choose from (Enter = latest). Also accepts update <tag|branch>,
      update --ref <ref>, or PM_REF. Tags check out detached; branches fast-forward to the remote.
    • Install from a release tag — the installer builds from the latest release tag by default
      (checkout + re-exec so the whole install and every image come from that version). Override with
      --ref <tag|branch> (e.g. --ref main to track a branch) or PM_REF.

    Changed

    • Operator identity is empty by default. The installer no longer prompts for operator name/email, so
      a personal address can't land in a public footer by accident — set it deliberately via set-operator,
      PM_OPERATOR_*, or an operator: block in packagemini.yml. Example-config note expanded (PUBLIC).

    Fixed

    • Garbled "already configured" hint. The status footer hint passed ANSI color codes as printf %s
      arguments, which are printed literally (\033[0m…); moved the colors into the format string so they
      render. The hint now points at ./src/deploy.sh update.
    Downloads
  • v0.3.0 7422796923

    v0.3.0
    All checks were successful
    release / release (push) Successful in 15s
    Stable

    Ghost released this 2026-07-01 20:43:11 +00:00 | 33 commits to main since this release

    Added

    • update commandsudo ./src/deploy.sh update pulls the latest source (git pull --ff-only),
      rebuilds the container images, recreates the stack, and prints status. An in-place application
      upgrade path that never runs dnf, never reboots, and never touches packagemini.yml/.env/./data.
    • uptime in the status System box (host uptime, e.g. 5d 2h).
    • Double-entry password confirmation when setting credentials — set-goaccess-creds,
      set-mirror-creds, and set-mirror-auth on now prompt for the password twice and re-prompt on
      mismatch. Preset env vars (PM_GOACCESS_PASS, PM_BASICAUTH_PASS) still skip the prompt so
      unattended installs are unaffected.
    • doc/UPDATES.md — documents the three update layers: install-time dnf upgrade, hourly
      dnf-automatic security auto-updates with when-needed auto-reboot, and deploy.sh update.

    Changed

    • Auto-update reboot policy is now enforced. The harden dnf-automatic setup replaces any
      existing reboot_command (stock Rocky ships shutdown -r +5 with a generic message) with
      packagemini's shutdown -r +2 + wall message, instead of leaving the vendor value in place when the
      key already exists.
    Downloads
  • v0.2.6 57712e552d

    v0.2.6
    All checks were successful
    release / release (push) Successful in 16s
    Stable

    Ghost released this 2026-06-20 19:20:44 +00:00 | 34 commits to main since this release

    Changed

    • Coherent status colors. One rule everywhere: dim keys, white facts (versions, names,
      counts, sizes, URLs, dates), green good-states (on/enabled/running/applied/enforcing/key-only),
      yellow caution, dim secondary notes only (parentheticals, uptime, commit ref). Removes the cyan
      sprinkled on some numbers/URLs and un-dims the Content/Sync values. Refreshed status screenshot.
    Downloads
  • v0.2.5 fd144fa7b4

    v0.2.5
    All checks were successful
    release / release (push) Successful in 18s
    Stable

    Ghost released this 2026-06-20 18:59:05 +00:00 | 37 commits to main since this release

    Validated end-to-end on a clean Rocky 9 re-provision, which surfaced and fixed several latent bugs
    the long-running deployment had been masking, and a full install/status UX overhaul.

    Fixed

    • bcrypt hash corruption: the compose $-escaping used ${h//$/$$}, where $$ expands to the
      shell PID — corrupting every basic-auth hash and crash-looping the web container. Now sed-based.
    • Status Sync box dropped before the first sweep completed: an unguarded grep under
      set -euo pipefail aborted the render. Status is now set +e (read-only reporting can't abort).
    • stderr noise from firewalld (ALREADY_ENABLED) and compose recreates is captured/suppressed.

    Changed

    • Unified, high-contrast CLI: install and status now share one visual language — green
      numbered [n] stage headers, bright text, indented / rows (no boxes, no red banners, no
      [packagemini] prefix). --verbose/PM_VERBOSE=1 streams raw tooling output; failures show the
      captured output. Timestamps render in RFC 5322 with the operator's timezone offset.
    • Timezone no longer prompted on every --all — the host zone is kept automatically (preset
      PM_TIMEZONE to change), so a re-run is fully non-interactive.

    Added

    • set-timezone <zone> command (sets host tz + .env TZ, reloads sync for release dates).
    • Refreshed documentation screenshots (status dashboard + deploy.sh --all install run).
    Downloads
  • v0.2.4 e9c42f51f1

    v0.2.4
    All checks were successful
    release / release (push) Successful in 17s
    Stable

    Ghost released this 2026-06-20 15:33:17 +00:00 | 48 commits to main since this release

    Supersedes 0.2.3 (whose release did not publish due to the workflow bug below). Carries the full
    supply-chain pinning from 0.2.3 plus the fix.

    Security

    • Supply-chain pinning. Base images by @sha256 digest (python:3.12-slim, caddy:2,
      caddy:2-builder, alpine:3); Caddy v2.11.4 + xcaddy modules caddy-dns/desec@v1.1.0 and
      mholt/caddy-ratelimit@v0.1.0; Python deps exact + pip --require-hashes; the caddy image for
      hash-password; lazydocker v0.25.2 with SHA-256 verification; release-workflow image + deps.
      See DESIGN.md → Supply chain.

    Fixed

    • Release workflow: the hashed requirements-dev.txt was missing pytest 9's pygments
      dependency, so pip --require-hashes failed in CI; added pygments==2.20.0. Verified in a clean venv.
    Downloads