
Asset inventory only works when the agent can run across the entire fleet, identify the machine in a stable way and deliver data that GLPI understands. The go-glpi-agent is a Go reimplementation of the FusionInventory/GLPI ecosystem inventory agent: a static binary that collects local hardware and software and sends the result to GLPI 10+ — without Perl runtime, module tree, or SSH access to the endpoint.
What is go-glpi-agent
The project is not the official agent glpi-agent, nor does it try to overwrite it. It is a separate implementation, designed to coexist with the official agent and with the old fusioninventory-agent. The compatibility point is deliberate: it reads the format agent.cfg already used by the Perl agent and reuses existing identifiers, reducing the risk of a machine reappearing in GLPI as another asset after a migration.
The flow is straightforward:
- the binary discovers local hardware, system, and software data;
- assembles the inventory in the project's internal model;
- attempts to send it to
/front/inventory.phpusing GLPI's native JSON protocol; - when necessary, it automatically falls back to the legacy OCS/FusionInventory XML flow;
- GLPI associates the inventory with the computer identified by the agent.
There is also a local mode: go-glpi-agent run --local DIRETÓRIO saves the XML without sending it. This is the best first step to check what will be collected before pointing a fleet to production.
Why a Go binary changes operations
- Simple deployment: the project publishes native packages for Linux, plus files for Windows, FreeBSD, and macOS. For an infrastructure team, this reduces dependencies on the host.
- One code, four systems: the same codebase covers Linux amd64, Windows amd64, FreeBSD amd64 and macOS 13+ on Apple Silicon; Intel Mac requires compilation on an Intel host.
- Predictable schedule: on Linux, the package installs a timer systemd per hour with random delay. On Windows, version 0.6.0 switched to using a Windows service instead of the previous scheduled task.
- Operational compatibility: the configuration file and the import of identity dumps make the switch less disruptive for existing installations.
Don't confuse “single binary” with “magic inventory.” The agent still needs permissions, the correct endpoint, valid TLS, and a verification routine in GLPI.
What it collects
Coverage depends on the operating system, because each platform exposes the hardware differently. On Linux, the agent uses sources such as /sys, /proc, dmidecode, lsblk, lvs and the package managers". dpkg, rpm and pacman. On Windows, it combines WMI, Registry, and gopsutil; on FreeBSD, it uses kenv, pkg, geom, sysctl and usbconfig; on macOS, it uses system_profiler, ioreg, sysctl and sw_vers.
| Category | Data examples | Note |
|---|---|---|
| Identity and system | hostname, domain, distribution/version, timezone | Serial values known as junk are filtered out; in some VMs the UUID may become a fallback. |
| Hardware | CPU, memory and slots, BIOS, motherboard, chassis, disks, file systems, LVM, USB and network | Some fields, such as memory slots and disk serial, require administrative privileges. |
| Software | dpkg/rpm/pacman packages on Linux; uninstall keys on Windows; pkg on FreeBSD |
on Windows, the project avoids Win32_Product, which is slow and can trigger MSI repair. |
| Optional inventory | running processes | disabled by default; enable only if it makes sense for your inventory policy. |
Installation on Ubuntu and Debian
Use a package from the release v0.6.0. The example below is for amd64; confirm the architecture with dpkg --print-architecture before downloading.
sudo apt update
sudo apt install -y curl
VER=0.6.0
curl -fLO "https://github.com/jniltinho/go-glpi-agent/releases/download/v${VER}/go-glpi-agent_${VER}_amd64.deb"
sudo apt install "./go-glpi-agent_${VER}_amd64.deb"
/opt/go-glpi-agent/go-glpi-agent version
systemctl cat go-glpi-agent.service
The package places the binary and configuration in /opt/go-glpi-agent/ and the units in /lib/systemd/system/. Do not copy over the agent.cfg during an upgrade: the package was designed to preserve the operator's configuration.
Configure the destination and test without sending anything
Edit /opt/go-glpi-agent/agent.cfg. The minimum is your GLPI inventory endpoint. Use HTTPS in production and keep certificate validation enabled.
# /opt/go-glpi-agent/agent.cfg
server = https://glpi.exemplo.com/front/inventory.php
tag = datacenter-sp
# Estado persistente: não apague sem planejar a consequência no inventário.
vardir = /opt/go-glpi-agent/var
# Opcional: limita o inventário de processos e categorias.
scan-processes = 0
# no-category = printer,software
# Se a CA for interna, informe a CA; não desative TLS em produção.
# ca-cert-file = /etc/ssl/certs/minha-ca.pem
# proxy = http://proxy.exemplo.com:3128
Before the first upload, generate a local inventory. It allows you to open the XML, check hostname, serial, disks, and program list without creating or modifying a remote asset.
sudo install -d -m 0750 /var/tmp/go-glpi-agent-inventory
sudo /opt/go-glpi-agent/go-glpi-agent run --local /var/tmp/go-glpi-agent-inventory
sudo find /var/tmp/go-glpi-agent-inventory -maxdepth 1 -type f -printf '%f\n'
When the output looks right, run it once against GLPI with debugging. Then verify the creation or update of the computer in the GLPI interface.
sudo /opt/go-glpi-agent/go-glpi-agent run \
--conf-file /opt/go-glpi-agent/agent.cfg \
--debug
Avoid no-ssl-check = 1 in production. If a private CA fails, install the correct chain or use ca-cert-file/ca-cert-dir. Disabling verification turns a certificate error into an interception risk.
Schedule with systemd
The recommended mode for Linux is a one-shot hourly execution, triggered by the timer. The unit uses a random delay of up to ten minutes to prevent all hosts from calling GLPI at the same second.
sudo systemctl enable --now go-glpi-agent.timer
systemctl status go-glpi-agent.timer --no-pager
systemctl list-timers go-glpi-agent.timer
journalctl -u go-glpi-agent.service -n 100 --no-pager
There is also go-glpi-agent-daemon.service, for the long-running process that respects delaytime the configuration file. Choose timer or daemon for the same purpose; enabling both can duplicate inventories and load the server unnecessarily.
How to maintain asset identity
The biggest mistake in a migration is making GLPI see a known computer as a new machine. The project adopts the device ID format of the Perl agent and, on first run, can import existing dumps from FusionInventory/GLPI Agent. Also preserve the directory vardir: state and persistent identifiers are kept there.
In a controlled swap, run a pilot: select a few hosts, compare the asset before and after in GLPI, validate serial/UUID/hostname, and only then enable the timer on the rest. In virtual machines, extra attention to generic serial; the project documents fallback to UUID when SMBIOS returns values like 0.
Useful settings and their values
| Name | Value/example | Use |
|---|---|---|
server |
https://glpi.exemplo.com/front/inventory.php |
remote inventory destination. |
local |
/var/tmp/inventario |
writes XML locally instead of sending. |
tag |
datacenter-sp |
classifies assets in GLPI. |
delaytime |
3600 |
interval in seconds used by daemon mode. |
lazy |
1 |
does not send if the server does not request. |
force |
1 |
forces sending; use only when you know the operational effect. |
scan-processes |
0 or 1 |
includes processes in the inventory; evaluate privacy and volume. |
no-category |
printer,software |
skips categories separated by comma. |
backend-collect-timeout |
180 |
limit per collector, in seconds. |
ca-cert-file |
/etc/ssl/certs/minha-ca.pem |
Private CA for TLS. |
Other operating systems
- RHEL, Rocky, Alma, Fedora, and openSUSE: the release includes an amd64 RPM; install it using the distribution's package manager.
- Arch Linux: a package is available
.pkg.tar.zstfor installation withpacman -U. - Windows: the release provides ZIP and MSI. Since v0.6.0, the installer registers the service
go-glpi-agent, started automatically under LocalSystem; configuration and executable are inC:\Program Files\go-glpi-agent, while state and logs are stored inC:\ProgramData. - FreeBSD 14 amd64: use the tarball and the
INSTALL.mdincluded; there is an option for rc.d or cron. - macOS 13+ Apple Silicon: the release includes
.pkgand.dmg. For Mac Intel, the documentation guides compiling on the Intel host itself.
Known limits: where not to overpromise
The project covers local inventory, not the entire Perl agent catalog. The documentation lists as gaps, among others: GPUs, monitors via EDID, printers, PCI/RAID/IPMI controllers, network discovery and inventory, deploy, Wake-on-LAN, ESX, and Snap, Flatpak, Nix, or Gentoo inventories. This is not a hidden defect: it is a criterion to decide whether it fits your environment or whether the official agent remains necessary on part of the fleet.
It is also not a monitoring tool. For metrics and alerts, complement the inventory with Prometheus and Node Exporter; for the history of ITSM and inventory on the server, see the history of GLPI. Inventory answers “what exists”; monitoring answers “what is happening now”.
Current version and adoption roadmap
The current release, v0.6.0, was published on 10 July 2026. It replaces the Windows scheduled task with a real service and keeps the configuration next to the executable on upgrades. The previous series also recorded fixes for the GLPI native protocol 11; therefore it is worth following the release and changelog instead of copying old commands from tutorials.
- make a backup and choose five pilot machines;
- generate a local inventory and review identity and categories;
- point it to a test GLPI or to a pilot entity;
- confirm that the assets were updated, not duplicated;
- enable the timer gradually and monitor the journal and GLPI queues;
- document the disabled categories and the CA used, so that the operation is reproducible.
References
- go-glpi-agent — repository and README
- Technical reference: collectors, configuration, and installation
- Release v0.6.0
- Project changelog
- Official GLPI Agent
The go-glpi-agent does not replace an inventory policy; it makes that policy easier to distribute. Once the pilot confirms identity, TLS, and collection coverage, the single binary becomes a practical alternative to keep GLPI fed across Linux, Windows, FreeBSD, and macOS environments.