# Changelog (Unix client)

Version is in `VERSION.md` (the same as `SYSTEM_VERSION`). The newest entry is first. Individual files also carry revision histories in their headers.

## 3.8.1 - 2026-10-19 (pending: uncommitted, not yet tagged)

- Moved into `unix/` in the repository split. The tree under `unix/` is the same as the old root layout, so installed hosts see no difference.
- `sysinfo_update` v2.1.0: `--version <v>` switches the working copy to `<root>/tags/<v>/unix` (it strips `trunk`, `testing` or `stable`, and `/unix`, from the working copy's own URL).
- No built-in release URLs: `%releaseDefaults` is gone from `installer/installer_config.pl`, and the config template and seed example carry only `example.org` examples. `sysinfo_update` takes `url` and `sha256_url` from the config or the command line only and, when one is missing, stops with a message naming the config key to set. There is no `update.svn_url`: a plain `svn update` needs no URL, and `--version` reads the repository from the working copy (`svn info`, or `--svn-url`). `setup` no longer fills an `update:` block with URLs when migrating a v3.7.1 config (it adds `method: auto` only), and a fresh install without `--seed` uses the local template.
- `configure` v2.0.0 (bug 212): now a wrapper that runs `dataserialization/dsEdit` (separate project, an `svn:externals` directory pinned to a revision; dsEdit v1.3 adds INI, `-f/--format`, `-F/--outformat` and `--delimiter`; from v1.4 it needs `DataSerialization.pm` beside it, which the same external directory provides) on the config file; parameters pass through to dsEdit, and with none it opens interactively. This replaces the old menu (and its v1.4.0 option `b` for `update.url`), so nested keys and list entries such as `tags[]:x` can be edited safely. The old merge of `server.info` and defaults into the config, run by the installer, is now `installer/mergeconfig` (`setup` calls it); v2.1.0 drops the old interactive menu and transport prompts, so it never asks a question (`--quiet` is accepted and ignored) and `--dryrun` says it did not write; the file it writes is unchanged; `installer/permissions` sets `dataserialization/dsEdit` executable. dsEdit v1.3 can also edit `server.info`, a colon-separated file with no extension, as `configure -f ini --delimiter ':' /etc/server.info`; the wrapper treats `-f`, `-F` and `--delimiter` as options that take a value.
- FreeBSD: installing the `p5-*` packages upgraded perl5 itself (5.36 to 5.42) in the middle of `setup`, so the already-running old perl could no longer load YAML::Tiny or LWP although a fresh `perl -MYAML::Tiny -e 1` worked, and the install ended with "YAML::Tiny is not available". `validateDependencies` v2.0.4 now counts a module as installed when a fresh perl can load it, and `setup` v3.0.4 restarts itself once under the perl that is installed now (guarded by `SYSINFO_SETUP_RESTARTED`).
- Installer log: `setup` v3.0.5 and `installer_shared.pm` v1.1.0 copy everything the installer prints, including the package-manager, `cpanm` and `cpan` output of `validateDependencies`, to `/tmp/sysinfo_client_install.log` (appended, mode 0600, not followed through a symlink); a restarted setup keeps writing to the same log. `validateDependencies` v2.0.5 says which method it falls back to when one fails. Prompted by a Devuan host where `cpan` ran after the package install failed and nothing was left to diagnose.
- `sysinfo_client` `$VERSION` and `SYSTEM_VERSION` raised to v3.8.1; the data version stays v3.8.0.
- `installer/server.info.sample` now lists every key with a blank value (blank values are ignored, so unset keys change nothing); the install notes in `installer/README.md` and `windows/README.md` say to fill in only the values wanted, and the sample warns that editing with dsEdit drops comments and sorts keys.
- `sysinfo_update` v2.2.0 (bug 207, reopened): the tarball method fetches the 85-byte `.sha256` file first and compares it with `update_installed.sha256` in the config directory (recorded after each successful install, or when an unrecorded host reports `nochange` on equal versions). Equal means `nochange` with no tarball download; different means install even when the version string is the same, which a content change under an unchanged version number needs. `--force` bypasses both checks. Hosts need `--force` once to receive the new updater (an old updater only compares versions).
- Bug 213: two new e-mail transports that need no `sendEmail.pl`. `transports/send_local_smtp` v1.0.0 pipes the message to the host's sendmail-compatible program (no credentials, core Perl only); `transports/send_auth_smtp` v1.0.0 sends through `Net::SMTP` with STARTTLS/TLS and `smtpUser`/`smtpPass`, and dies naming the module when `IO::Socket::SSL` or `Authen::SASL` is missing. Put them in that order in `transports` so only hosts that need authenticated SMTP carry credentials. `transports/sendEmailScript` and `transports/sendmail2sendEmail` (which needed `sendEmail.pl`) are removed; a config that still names `sendEmailScript` is logged as "Could not find transport script" and the client moves to the next transport. `sysinfoconf.pm` `%sendTypes` now lists Local SMTP and Authenticated SMTP in place of SendEmail; the config template and seed example use the new transports. New test `t/transports_smtp.t` (25 checks, using a sendmail shim and a fake SMTP server).
- Documentation: new `unix/README.md` (the Unix content of the old top README), install examples use `tags/<v>/unix`.
- Tests (in `t/` at the repository root) point at `unix/`; the whole suite passes (334 tests).

## 3.8.0 - 2026-10-14

Rewrite (r276 to r283), in beta since 2026-10-15; the contract is `../Documentation/Spec.md`.

- Framework: `sysinfo_client` runs each sensor as a subprocess and parses its tab-separated output; shared code in `library.pm` and `sysinfoconf.pm`; config and `server.info` precedence per the Spec; symlink resolved so it runs from `cron.daily` (r283).
- Sensors (was `modules/`): unified sensors for storage, SMART, identity and havirt; exit-code contract in `sensors/Documentation/README.md`.
- Transports (was `scripts/`): UTF-8 report bytes (fixes the "Wide character" error), `make_path` in place of shell calls.
- Installer: `installer/setup` with idempotent steps, dependency installation (package manager, then `cpanm`, then `cpan`; LWP for `upload_http`), and migration from v3.7.1 (dash names, `modules`/`scripts`).
- Updater: `sysinfo_update` rewritten (tarball with checksum, or svn).
- Bugs fixed during the beta: 205 (installer error when run in place), 206 (OPNsense `YAML::Tiny` fallback), 209 (missing LWP); 210 (split combined sensors) implemented, not yet tested on hosts.
