Repository navigation
v3.1.0
Device-server features from classic ser2net, MQTT 5 with Modbus pulses and safe values, trace
files and TLS files handled from the browser and the REST API, xterm.js 6 in the web console,
and signed RPM packages.
Upgrading from 3.0.x: nothing has to change; every new feature is off until it is turned on.
dnf / zypper users of the package repository: with this release every .rpm there is
signed, which changes each file once. If dnf or zypper says a package doesn't match what it
downloaded, run sudo dnf clean metadata (or add --refresh) or sudo zypper refresh. To have
each package's signature checked too, fetch ser2netweb.repo again (zypper: remove the
repository and add it again); the old file keeps working with the signed metadata checked.
Going back to 3.0.x: delete cert-notices.json from the data folder first; 3.0.x drops the
new settings on its next save (backups/ keeps the file).
Device server (#120)
- Packing for raw TCP and UDP mappings: the device's output goes out as frames (a gap, a
delimiter or a size), one datagram per frame over UDP. - One writer, read-only listeners (
network.writer_client_ips): only those clients send to
the device; the others only listen, and a listener can never push a writer out. - Open the serial port only while a client is connected (
network.open_on_connect), so
another program can use it in between. - Port pools (classic ser2net's rotators): one TCP port hands each client to the first free
mapping of a pool. - Connect-out failover over
network.remote_targets, with an optional return to the first. - The classic ser2net import carries UDP remote addresses,
chardelayand rotators over.
MQTT and Modbus (#118)
- MQTT 5 per mapping (3.1.1 stays the default): clean start, session and message expiry,
the broker's reason codes in the log and the status. - Modbus pulses: a coil with
pulse_msswitches itself off again. - Modbus safe values: a point with
safe_value/safe_after_sis written to that value
once the broker (or the Sparkplug primary host) has been away that long, once per outage.
Operations (#119)
- Trace files in the REST API (list, download, delete; operator tokens) and timed
recordings of 15 min, 1 h or 24 h that end by themselves. - TLS certificate about to expire notification and metric.
- Upload TLS files in the browser (admins), checked before they are kept.
- Clock-step watch: a clock set while ser2netweb runs is logged, audited, marked in traces
and counted.
Web console (#102)
- xterm.js 6.0.0 with
@xterm/addon-fit0.11.0; the console's scrollbar now fades when not
in use.
Packaging (#117)
- Signed RPM packages in the package repository, checked by dnf and zypper.
- Packages built from the recipes in
packaging/know they are distribution packages
(--about, data directory, install hints). - EPEL 10 builds, a conda-forge recipe, and the reverse-proxy examples of
docs/REVERSE-PROXY.mdrun behind real nginx in CI.
Fixed
- Windows: a save no longer fails with "Could not save config.json" (a 400 in the web UI)
while config.json is open for a moment, e.g. during an antivirus scan. - A serial port at a baud rate without a termios constant (250000, 74880, …) got the input
speed 38400 on musl systems (Alpine) (#117). - A mapping's TLS key that is a copy of the admin UI's is refused too; a
!!note is written
as text in a hex trace.
REST API 1.2.0; the snap is now released to every channel. Everything, with the upgrade notes
in full: CHANGELOG.md.
Assets
| File | |
|---|---|
ser2netweb-linux-x64 |
Linux x86_64 executable (glibc ≥ 2.28) |
ser2netweb-linux-arm64 |
Linux arm64 executable (glibc ≥ 2.28; Raspberry Pi 3/4/5 with a 64-bit OS) |
ser2netweb-windows-x64.exe |
Windows x64 executable; --install-service runs it as a service |
ser2netweb_3.1.0_amd64.deb |
package for Debian, Ubuntu and other .deb systems, x86_64 |
ser2netweb_3.1.0_arm64.deb |
package for Debian, Ubuntu and other .deb systems, arm64 |
ser2netweb-3.1.0-1.x86_64.rpm |
package for Fedora, RHEL, AlmaLinux and other .rpm systems, x86_64 |
ser2netweb-3.1.0-1.aarch64.rpm |
package for Fedora, RHEL, AlmaLinux and other .rpm systems, arm64 |
ser2netweb-install.sh |
installs a Linux executable as a systemd service, checked against SHA256SUMS |
ser2netweb-standalone.service |
systemd unit for the Linux executables (data in /var/lib/ser2netweb) |
ser2netweb-*.cdx.json |
CycloneDX SBOM of each executable (3 files) |
ser2netweb-*.THIRD-PARTY-LICENSES.txt |
licence texts of the components inside each executable (3 files) |
SHA256SUMS |
SHA-256 checksums of all of the above |
The .rpm files attached here are not signed themselves; the copies in the package repository
are. SHA256SUMS and the build provenance cover both.
PyPI: pipx install ser2netweb, or pipx install "ser2netweb[all]" for MQTT, LDAP, OIDC and in-process certificates (pypi.org/project/ser2netweb, uploaded by trusted publishing with PyPI's attestations).
Docker image: ghcr.io/haliskilic/ser2netweb:3.1.0 (also 3.1 and latest), and its copy docker.io/haliskilic/ser2netweb, for linux/amd64, linux/arm64 and linux/arm/v7.
Also through: the signed APT/DNF/zypper repositories at https://haliskilic.github.io/ser2netweb/, Homebrew (brew install haliskilic/tap/ser2netweb), Scoop (scoop bucket add haliskilic https://github.com/haliskilic/scoop-bucket), winget, Chocolatey and the snap (sudo snap install ser2netweb).
Verify a download: sha256sum -c SHA256SUMS --ignore-missing, and the build provenance with gh attestation verify ser2netweb-linux-x64 -R haliskilic/ser2netweb (the image: gh attestation verify oci://ghcr.io/haliskilic/ser2netweb:3.1.0 -R haliskilic/ser2netweb). The Windows executable is not code-signed.