Skip to content

v2.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Nov 08:31
· 3 commits to main since this release
030c6cd

ser2net v2.8.0 — Turkish web UI, Linux arm64, Windows service, Docker image, notifications, Modbus write + Sparkplug B, classic ser2net import (#28–#32)

Upgrading from 2.7.x

Nothing to migrate: replace the program (or pull the new image) and restart. config.json and data/ are used as they are.

  • Backups: the first configuration change keeps the old config.json in data/backups/.
  • Trace paths: a trace path in an old config becomes a file name under data/traces/, and the start-up log names the move. This is a security fix (below).
  • Docker: the image runs as an unprivileged user (uid 10001). A /data volume written by the old root image is taken over on its first start. The image is now on GHCR: ghcr.io/haliskilic/ser2net:2.8.0 (also 2.8 and latest), for amd64 + arm64. docker-compose.yml uses it.
  • Web UI language: English or Turkish, by the browser's language, unless a visitor picks TR / EN or the admin sets Settings → Web UI access → Default language.
  • Import: importing now shows a preview first. Scripts that post the 2.7-style one-step import still replace every mapping, as before.

Security

  • Updating is recommended: v2.7.1 ships dependency versions with known vulnerabilities. They are fixed here:
  • Traces can no longer write outside the data directory. A mapping's trace was a free file path, so an operator (not only an admin) could have network bytes appended to any file the service may write: config.json, a startup script, and as root in Docker. Traces now always go to <data>/traces/<mapping id>-<file name>.
  • The Docker image no longer runs as root.
  • Audit records can't be forged with control characters in a user-supplied name.

Added

  • Turkish web UI next to English. Logs, the audit log and the REST API stay English; notifications use the admin's default language.

  • USB identity: a mapping can find its device by VID:PID + serial number, so re-plugging an adapter as another ttyUSB* / COM* keeps it working.

    • The port list shows /dev/serial/by-id names, and they can be selected.
    • The kernel's placeholder ttyS ports without hardware are hidden.
  • Notifications by webhook (JSON, Slack/Mattermost, Microsoft Teams, Discord, Telegram) and/or e-mail (SMTP) when:

    • a serial device is lost or comes back;
    • a mapping fails to start;
    • clients connect or disconnect;
    • a sign-in fails.

    Repeats are suppressed and the rate is limited; Settings → Notifications can send a test message.

  • Dashboard: search, state filter, sort, and start / stop / restart of the selected mappings. The table is redrawn only when it changed, so it no longer flickers or loses the selection.

  • Traces in the UI: download a mapping's trace files (current + rotated), and a live hex view in the console with both directions and timestamps.

  • Modbus write from MQTT: points with "writable": true take values from <topic>/<point>/set.

    • Coils use FC5/FC15, holding registers FC6/FC16. The result goes to …/set/result.
    • Coils and discrete inputs (FC1/FC2) can be polled too.
  • Sparkplug B: a Modbus-polling mapping can be an edge node whose devices are the Modbus units it polls (unit1, unit2, …).

    • NBIRTH/NDEATH carry bdSeq; DBIRTH/DDATA carry seq.
    • Points are written through DCMD; NCMD triggers a rebirth.
    • No protobuf dependency.
  • Import from the classic ser2net: ser2net.yaml (4.x) and ser2net.conf (3.x) go through the import preview. Options without an equivalent are listed as warnings.

    • ser2net opens a device only while a client is connected, but a mapping here keeps it open. So of several ports on one device, the first comes in enabled and the others disabled.
  • Configuration backups (newest 50, download / restore; a restore can be undone), an import preview (merge or replace) and an audit log viewer (search, filters, CSV) in Settings.

  • Linux arm64 executable (ser2net-linux-arm64, glibc ≥ 2.28): Raspberry Pi 3/4/5 with a 64-bit OS, ARM gateways.

  • Windows service with no extra software: ser2net.exe --install-service / --uninstall-service.

    • It starts at boot and restarts after a failure; --service-name allows several instances.
  • Release integrity: SHA256SUMS, a CycloneDX SBOM per executable, and GitHub build-provenance and SBOM attestations.

  • --about: component versions for bug reports.

  • --licenses: the license texts of every bundled component.

  • --healthcheck: used by the Docker HEALTHCHECK.

  • SER2NET_LIB_OVERRIDE: loads a replacement ldap3 (LGPL).

Fixed

  • The session lifetime setting now takes effect: sessions always lasted 8 hours before. It is under Settings → Web UI access.
  • Writing a trace no longer blocks the event loop, and trace files rotate at a size limit (default 10 MB, 3 old files kept).
  • The Docker HEALTHCHECK no longer reports a fresh container unhealthy while it waits for the first-run setup.

Changed

  • Dependencies updated: starlette 1.10.0, uvicorn 0.54.0, websockets 17.4, python-multipart 0.0.33, anyio 4.16.0.
    • Python 3.10 keeps the last releases that support it.
    • The offline wheels in vendor/wheels/ match.
  • CI adds mypy, pip-audit, coverage and Dependabot, and main is protected.
  • New repository files: SECURITY.md, CONTRIBUTING.md, CHANGELOG.md.

Tested before publishing

  • Every PR runs the test suite on Linux and Windows × Python 3.10–3.13.
  • The executables are built and tested before they are attached. That includes the arm64 one, in 9 clean distributions each, and a real Windows service install / restart-after-crash / stop / uninstall.
  • The dashboard, the mapping views and the settings page are checked in a browser at 1440 → 390 px, in English and Turkish.
  • The Docker image is smoke-tested on amd64 and arm64, including the upgrade from a v2.7.1 volume.

Verify a download

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify ser2net-linux-x64 --repo haliskilic/ser2net

Türkçe özet

  • Türkçe arayüz: üst menüde TR / EN; seçilmemişse tarayıcının dili ya da admin'in varsayılan dili. Log'lar, audit log ve REST API İngilizce kalıyor.
  • Güncellemen önerilir: v2.7.1'deki starlette ve anyio sürümlerinde bilinen güvenlik açıkları var, bu sürümde kapandı.
  • Trace güvenlik düzeltmesi: trace dosyaları artık yalnızca data/traces/ altına yazılabiliyor. Eskiden bir operator herhangi bir dosyaya yazdırabiliyordu.
  • Yeni özellikler:
    • USB kimliğiyle cihaz bulma;
    • webhook ve e-posta bildirimleri;
    • panoda arama, filtre ve toplu işlem;
    • trace indirme ve canlı hex görünümü;
    • MQTT'den Modbus yazma;
    • Sparkplug B (her Modbus unit'i bir cihaz);
    • klasik ser2net.yaml / ser2net.conf içe aktarma;
    • config yedekleri ve geri yükleme;
    • içe aktarma önizlemesi;
    • audit log ekranı.
  • Dağıtım:
    • Linux arm64 binary'si;
    • ek program gerektirmeyen Windows servisi;
    • GHCR'de amd64 + arm64 Docker imajı (root olmayan kullanıcıyla);
    • SHA256SUMS, SBOM ve build provenance.
  • Yükseltme: v2.7.x'ten geçişte bir şey yapmana gerek yok. config.json ve data/ olduğu gibi kullanılıyor; ilk değişiklikte eski config data/backups/ içine yedekleniyor.

Downloads: ser2net-windows-x64.exe (Windows 10/11, Server 2016+) · ser2net-linux-x64 (x86_64, glibc ≥ 2.28) · ser2net-linux-arm64 (aarch64, glibc ≥ 2.28). They are standalone: nothing else to install. Docker: docker pull ghcr.io/haliskilic/ser2net:2.8.0.