Releases: jniltinho/go-glpi-agent
Release list
v0.6.0
Windows packaging overhaul (Go + .NET agents). Both Windows packages now ship
a single binary with agent.cfg in the same folder as the executable, and both
run as a real Windows Service.
✨ New Features
- feat(windows): the Go agent now installs a Windows Service (
go-glpi-agent,
auto start, LocalSystem, runs the daemon loop with restart-on-failure) instead
of an hourly Scheduled Task. The MSI,install.ps1anduninstall.ps1manage
the service; upgrades from ≤ 0.5.x remove the legacy Scheduled Task.
🔧 Improvements
- feat(windows):
agent.cfgnow lives next to the binary for both agents
(C:\Program Files\go-glpi-agent\agent.cfgand
C:\Program Files\DotnetGlpiAgent\agent.cfg); state and logs remain under
C:\ProgramData. Existing configs are preserved on upgrade;PURGE=1removes
them. - feat(dotnet): the .NET MSI and portable zip now ship a single self-contained
executable (PublishSingleFile) instead of the multi-DLL publish layout. - ci(dotnet): drop the "Schema fixtures present" gate that asserted gitignored,
lab-generated files and made every CI run fail; assert the single-binary
publish output instead.
Full Changelog: v0.5.1...v0.6.0
v0.5.1
Native GLPI 11 protocol fix (Go + .NET agents). The native inventory flow now
works against GLPI 11, which rejected it with 400 "JSON not well formed!"
(CONTACT) and 500 "keys ignored: accountinfo" (inventory). Fixed and validated
against a live GLPI 11 server.
🔧 Improvements
- fix(server): send the native protocol as plain
application/json— GLPI 11
does not inflate a zlib CONTACT/inventory body; zlib stays on the legacy
XML/PROLOG flow. CONTACT now includes the requiredversionfield. - fix(server): send the entity
tagat the envelope root and drop
content.accountinfo(not in the native schema); do not fall back to the
legacy protocol when the server answers with a native JSON error — surface the
real GLPI message instead. - fix(dotnet): mirror the same fixes in the .NET agent — CONTACT
versionand an
uncompressed native path by default (Compression = Autono longer applies zlib
to the native flow); regression tests fortag-at-root/no-accountinfo. - test(glpi): pin the Go test compose to GLPI 11.0.8 so the native-protocol
regressions reproduce locally.
📚 Documentation
- docs: OpenSpec change
fix-glpi11-native-protocoldocumenting the fix across
the Go (linux/mac/windows) and .NET agents.
Full Changelog: v0.5.0...v0.5.1
v0.5.0
Dotnet GLPI Agent (Windows). Independent .NET 10 Windows inventory agent with
MSI packaging, Windows Service, native GLPI JSON protocol, and E2E validation on
Windows Server 2022 against GLPI 10 and 11.
✨ New Features
- feat(dotnet): new
dotnet-glpi-agent/subproject — self-containedwin-x64
agent (dotnet-glpi-agent.exe) with typed inventory model, modular collectors
(OS/BIOS/CPU/memory/storage/network/software/AppX/hotfixes/printers/monitors/
video/firewall/antivirus/…), native CONTACT/inventory JSON + legacy XML fallback. - feat(dotnet): Windows Service hosting (
DotnetGlpiAgent) via Generic Host +
WiX 4.0.6 per-machine MSI (Program Files + ProgramData, silent properties
SERVER/TAG/INSTALLDIR/STARTSERVICE/RUNNOW/PURGE, unsigned-dev marker). - feat(dotnet): Docker GLPI 10/11 lab + Vagrant Windows Server 2022 acceptance
(schema validation, dual-stack submit, MSI lifecycle, 3-agent comparison).
🔧 Improvements
- fix(dotnet): schema-safe datetime (
yyyy-MM-dd HH:mm:ss); strip illegal XML
control characters; GLPI CONTACTexpirationhours; nocontent.accountinfo
(GLPI 11); TLS custom-CA hostname validation; orchestrator isolation; session
WMI regex; MSI repair preservesserver/tag; firewall registry fallback;
per-source WMI degradation; memory synthetic fallback. - ci:
dotnet.yml(Linux tests + Windows publish/MSI); monoreporelease.yml
builds Go packages and Dotnet MSI/portable zip onv*tags.
📚 Documentation
- docs:
dotnet-glpi-agent/README.md, MSI/service/operations/parity reports,
OpenSpec changeadd-dotnet10-windows-agent(122 tasks).
Full Changelog: v0.4.0...v0.5.0
v0.4.0
macOS inventory support (Apple Silicon) + a Windows .msi. A single codebase now
builds for Linux, Windows, FreeBSD and macOS. macOS is validated on a macos-latest
(arm64) runner with exact per-section parity against the official GLPI-Agent, and
the Windows .msi is validated with a full install → verify → uninstall round-trip on
windows-latest.
✨ New Features
- feat(macos): macOS inventory support —
go-glpi-agentcollects the same
categories on macOS viagopsutilplus native sources:system_profiler -json
(SPHardwareDataTypefor model/serial/UUID/boot-ROM,SPMemoryDataType,
SPNVMeDataType/SPSerialATADataType,SPUSBDataType,SPApplicationsDataType),
sysctl machdep.cpu.*/hw.*(CPU, incl. Apple Silicon chip name),sw_vers/uname
(OS),ioreg(identity fallback),networksetup(interface typing) androute. - feat(macos): system serial/UUID resolved through the official agent's fallback
chain (Serial Number→Serial Number (system)→ioreg IOPlatformSerialNumber;
Hardware UUID→ioreg IOPlatformUUID), with a serial-of-last-resort = UUID rule
so a Mac is never reported without a serial — including on virtualized CI runners. - feat(macos): Apple Silicon distribution —
make build-macos/package-macosproduce
thedarwin/arm64binary and a.pkg+.dmginstaller (pkgbuild/productbuildhdiutil) with aLaunchDaemonfor scheduled runs;contrib/macos/holds the
daemon, pre/postinstall,uninstall.shand build driver. (Intel builds from source.)
- feat(windows): Windows
.msiinstaller for managed deployment (GPO / Intune /
SCCM / PDQ). Installs the.exe, registers the hourlygo-glpi-agentScheduled
Task (SYSTEM), seedsagent.cfg, supports silent install withSERVER/TAG
properties (msiexec /i … /qn SERVER=… TAG=…), in-place upgrades (stable
UpgradeCode), and clean uninstall by product code (PURGE=1to also drop
config). Built on Linux withwixl(msitools) — no Windows build host — via
make package-msi; acontrib/windows/msi/Dockerfilebuilds it in a container. - feat(windows): hidden
service install|uninstall|configure|purgesubcommands the
MSI's deferred (SYSTEM) custom actions call; the exe self-locates via
os.Executable()and ownsagent.cfg(writes a default only when absent, so
upgrades preserve operator edits).
🔧 Improvements
- fix(agent): when the configured
vardiris not writable (e.g. the agent is run
manually, not installed under the system prefix), fall back to a per-user cache
directory so thedeviceid/agentidstill persist across runs instead of being
regenerated — and the noisy mkdir-permission warning is gone. - ci(macos): new
macos.yml(arm64macos-latest) builds, runs a real inventory,
validates the native JSON against GLPI's schema, installs and runs the official
GLPI-Agent for a per-section comparison, asserts the serial is never empty, and
uploads the.pkg/.dmg;release.ymlpublishes the Apple Silicon installers;
go.ymladdsdarwin/amd64+arm64compile/vet checks. - ci(windows-msi): new workflow builds the
.msion Ubuntu (wixl) and runs a full
install → verify (binary + Scheduled Task + configuredagent.cfg) → inventory +
schema-validate → uninstall round-trip onwindows-latest;release.ymlpublishes
the.msialongside the existing artifacts.
Full Changelog: v0.3.0...v0.4.0
v0.3.0
FreeBSD inventory support + VirtualBox serial parity. A single codebase now
builds for Linux, Windows and FreeBSD. Validated end-to-end on FreeBSD 14.1 against
a real GLPI 10 (native JSON schema-valid, asset created), and the Linux build
cross-checked on Debian 12 against the official glpi-agent (softwares 455/455).
✨ New Features
- feat(freebsd): FreeBSD inventory support —
go-glpi-agentcollects the same
categories on FreeBSD viagopsutilplus native sources:kenv smbios.*
(BIOS/board/chassis/UUID),pkg query(software),geom/camcontrol(disks),
sysctl (CPU/OS),/var/db/zoneinfo(timezone) andusbconfig(USB). - feat(freebsd): FreeBSD distribution —
make build-freebsd/package-freebsd
produce a.tar.gz(binary +agent.cfg+rc.dservice +INSTALL.md);
release.ymlpublishes it.
🔧 Improvements
- fix(bios): on VirtualBox VMs, where the DMI/SMBIOS serial is
0, fall back to the
system UUID as the serial (matching glpi-agent'sGeneric/Dmidecode/Bios.pm), so
the host gets a stable identity in GLPI instead of an empty serial. Applies to
Linux, Windows and FreeBSD. - refactor: per-OS registration extended with
register_freebsd.go; cross-platform
generictimezone gains a FreeBSD source (/var/db/zoneinfo). - ci:
go.ymladds aGOOS=freebsdbuild/vet check.
📚 Documentation
- docs: README "FreeBSD" section + a FreeBSD column in the per-OS collector table;
AGENTS.md per-OS layout;test/vagrant-freebsd/end-to-end validation comparing
against the officialp5-FusionInventory-Agent.
Full Changelog: v0.2.0...v0.3.0
v0.2.0
Windows inventory support. A single codebase now builds for Linux and Windows;
go-glpi-agent.exe collects the same categories via WMI and the registry and sends
them to GLPI 10+. Validated end-to-end on Windows Server 2022 against a real GLPI 10
(native JSON schema-valid, computer asset created over both WinRM and SSH) and
cross-checked against the official glpi-agent 1.18.
✨ New Features
- feat(windows): Windows inventory support —
go-glpi-agent.execollects the same
categories as the Linux build (OS, CPU, memory + slots, BIOS/board/chassis, disks,
filesystems, USB, network, software, users, timezone, processes) viagopsutil,
WMI (Win32_*) and the registry, and sends them to GLPI 10+. - feat(windows): Windows distribution —
make build-windows/package-windows
produce a.zip(exe +agent.cfg+install.ps1/uninstall.ps1) built on the
Linux CI runner;install.ps1registers an hourly Scheduled Task (the analog of
the systemd timer). Software is read from the uninstall registry keys (not the
slow, side-effectingWin32_Product).
🔧 Improvements
- refactor: split the codebase per-OS with build tags (
collector/linux,
collector/windows, cross-platformcollector/generic); register collectors via
internal/agent/register_<goos>.goso adding macOS/BSD is a sibling package + one file. - refactor: OS-split logger (
logger_unix.gosyslog vslogger_windows.gostub) so
GOOS=windows go buildcompiles; OS-aware default paths (%ProgramData%on Windows). - refactor: share the DMI/WMI junk-value filter as
sysutil.CleanDMI. - ci:
go.ymladds aGOOS=windowsbuild/vet check and awindows-latestjob that
runs the agent on real Windows and validates the native JSON against GLPI's
inventory.schema.json;release.ymlpublishes the Windows.zip.
📚 Documentation
- docs: README "Windows" section + per-OS collector table; AGENTS.md per-OS layout
and WMI/registry conventions;test/vagrant-windows/for end-to-end validation
(WinRM + SSH) comparing against the official glpi-agent.
Full Changelog: v0.1.3...v0.2.0
v0.1.3
📚 Documentation
- docs: godoc comments on every function/method, type, and package (per the
golang-documentation standard) —go docnow renders the full API. - docs: add
CONTRIBUTING.md(build/test/PR flow) andllms.txt(structured
overview for AI agents).
Full Changelog: v0.1.2...v0.1.3
v0.1.2
📚 Documentation
- docs: polish the
create-releaseskill — adopt the clearer structure
(release-approaches table, commit→section categorization, monitor/verify
checklists, workflow-capabilities and adapting tables) from the go-postfixadmin
skill, while keeping this project's CHANGELOG-driven CI publishing, nfpm
.deb/.rpm/Arch packaging, and YAML frontmatter for skill discovery.
Full Changelog: v0.1.1...v0.1.2
v0.1.1
🔧 Improvements
- ci: bump GitHub Actions to Node 24 (
actions/checkout@v5,actions/setup-go@v6)
and publish releases with the nativeghCLI, removing the last Node 20 action. - ci: release notes are written from
CHANGELOG.md(--notes-file) instead of
being auto-generated from commits.
Full Changelog: v0.1.0...v0.1.1
v0.1.0
First release: a Go reimplementation of the FusionInventory/GLPI inventory agent
for Linux, distinct from the Perl fusioninventory-agent and the official
glpi-agent so the three can coexist.
✨ New Features
- feat: GLPI 10+ native protocol (primary) — CONTACT probe, JSON inventory to
/front/inventory.php,GLPI-Agent-ID(UUID v4) header, zlib compression (or
none). Validated against a real GLPI 10 with zeroinventory.schema.json
violations. - feat: automatic legacy XML/PROLOG fallback when the server is not native.
- feat: Linux collectors — CPU, memory (+ dmidecode slots), BIOS/DMI, physical
disks (lsblk), filesystems, LVM, USB, network, OS/distro, hostname, timezone,
users/groups/logged-in, processes, and software (dpkg/rpm/pacman). - feat: Cobra CLI with
run,daemon, andversionsubcommands. - feat: reads the Perl agent's
agent.cfg(INI), installed at
/opt/go-glpi-agent/agent.cfg. - feat: systemd — oneshot
.service+ hourly.timer, plus an optional daemon
unit; everything installs under/opt/go-glpi-agent. - feat: packaging —
.deb,.rpm, Arch.pkg.tar.zst(nfpm) and a.tar.gz,
plus a GitHub Actions release workflow onv*tags. - feat: persistent device ID in the Perl format and a separate
agentidUUID;
imports an existingFusionInventory-Agent.dump/GLPI-Agent.dumpon first run.
🔧 Improvements
- DMI junk-value filtering (serials of
0,None,To be filled by O.E.M., …),
so meaningless values are not reported as real data. - Validated across 16 Linux distributions (RHEL/Rocky/Alma/Oracle 8–9, CentOS
Stream 10, Fedora 42, Debian 12/13, Ubuntu 24.04/26.04, Pop!_OS 20.04,
openSUSE Leap 15, Arch Linux).