go-glpi-agent: inventory for GLPI 10+ without Perl

Mascote LinuxPro fazendo inventário de um rack com scanner ao lado de um cachorro caramelo

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:

  1. the binary discovers local hardware, system, and software data;
  2. assembles the inventory in the project's internal model;
  3. attempts to send it to /front/inventory.php using GLPI's native JSON protocol;
  4. when necessary, it automatically falls back to the legacy OCS/FusionInventory XML flow;
  5. 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.
  • Compatibilidade operacional: o arquivo de configuração e a importação de dumps de identidade tornam a troca menos disruptiva para instalações existentes.

Não confunda “binário único” com “inventário mágico”. O agente ainda precisa de permissões, do endpoint correto, de TLS válido e de uma rotina de conferência no GLPI.

What it collects

A cobertura depende do sistema operacional, porque cada plataforma expõe o hardware de maneira diferente. No Linux, o agente usa fontes como /sys, /proc, dmidecode, lsblk, lvs e os gerenciadores dpkg, rpm and pacman. No Windows, combina WMI, Registro e gopsutil; no FreeBSD, usa kenv, pkg, geom, sysctl and usbconfig; no macOS, usa system_profiler, ioreg, sysctl and sw_vers.

Categoria Exemplos de dados Observação
Identidade e sistema hostname, domínio, distribuição/versão, timezone valores de serial conhecidos como lixo são filtrados; em algumas VMs o UUID pode virar fallback.
Hardware CPU, memória e slots, BIOS, placa-mãe, chassis, discos, sistemas de arquivos, LVM, USB e rede alguns campos, como slots de memória e serial de disco, pedem privilégios administrativos.
Software pacotes dpkg/rpm/pacman no Linux; chaves de desinstalação no Windows; pkg no FreeBSD no Windows, o projeto evita Win32_Product, que é lento e pode disparar reparo de MSI.
Inventário opcional processos em execução desabilitado por padrão; habilite só se fizer sentido para sua política de inventário.

Installation on Ubuntu and Debian

Use um pacote da release v0.6.0. O exemplo abaixo é para amd64; confirme a arquitetura com dpkg --print-architecture antes de baixar.

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

O pacote coloca o binário e a configuração em /opt/go-glpi-agent/ e as unidades em /lib/systemd/system/. Não copie por cima do agent.cfg em uma atualização: o pacote foi desenhado para preservar a configuração do operador.

Configure the destination and test without sending anything

Edite /opt/go-glpi-agent/agent.cfg. O mínimo é o endpoint de inventário do seu GLPI. Use HTTPS em produção e mantenha a validação de certificado ativada.

# /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

Antes do primeiro envio, gere um inventário local. Ele permite abrir o XML, conferir hostname, serial, discos e lista de programas sem criar ou alterar um ativo remoto.

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'

Quando a saída fizer sentido, execute uma vez contra o GLPI com depuração. Depois confira a criação ou atualização do computador na interface do GLPI.

sudo /opt/go-glpi-agent/go-glpi-agent run \
  --conf-file /opt/go-glpi-agent/agent.cfg \
  --debug

Evite no-ssl-check = 1 em produção. Se uma CA privada falhar, instale a cadeia correta ou use ca-cert-file/ca-cert-dir. Desativar a verificação transforma um erro de certificado em risco de interceptação.

Schedule with systemd

O modo recomendado para Linux é uma execução pontual por hora, disparada pelo timer. A unidade usa atraso aleatório de até dez minutos para evitar que todos os hosts chamem o GLPI no mesmo segundo.

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

Existe também go-glpi-agent-daemon.service, para o processo longo que respeita delaytime do arquivo de configuração. Escolha timer ou daemon para a mesma finalidade; ativar os dois pode duplicar inventários e carregar o servidor sem necessidade.

How to maintain asset identity

O maior erro em uma migração é fazer o GLPI enxergar um computador conhecido como uma máquina nova. O projeto adota o formato de device ID do agente Perl e, na primeira execução, pode importar dumps existentes de FusionInventory/GLPI Agent. Preserve também o diretório vardir: nele ficam estado e identificadores persistentes.

Em uma troca controlada, faça um piloto: selecione alguns hosts, compare o ativo antes e depois no GLPI, valide serial/UUID/hostname, e só então habilite o timer no restante. Em máquinas virtuais, atenção extra a serial genérico; o projeto documenta fallback para UUID quando o SMBIOS devolve valores como 0.

Useful settings and their values

Name Valor/exemplo Uso
server https://glpi.exemplo.com/front/inventory.php destino do inventário remoto.
local /var/tmp/inventario grava XML local em vez de enviar.
tag datacenter-sp classifica os ativos no GLPI.
delaytime 3600 intervalo em segundos usado pelo modo daemon.
lazy 1 não envia se o servidor não solicitar.
force 1 força envio; use somente quando souber o efeito operacional.
scan-processes 0 or 1 inclui processos no inventário; avalie privacidade e volume.
no-category printer,software pula categorias separadas por vírgula.
backend-collect-timeout 180 limite por coletor, em segundos.
ca-cert-file /etc/ssl/certs/minha-ca.pem CA privada para TLS.

Other operating systems

  • RHEL, Rocky, Alma, Fedora e openSUSE: a release inclui RPM amd64; instale com o gerenciador de pacotes da distribuição.
  • Arch Linux: há pacote .pkg.tar.zst para instalação com pacman -U.
  • Windows: a release oferece ZIP e MSI. Desde a v0.6.0, o instalador registra o serviço go-glpi-agent, iniciado automaticamente sob LocalSystem; configuração e executável ficam em C:\Program Files\go-glpi-agent, enquanto estado e logs ficam em C:\ProgramData.
  • FreeBSD 14 amd64: use o tarball e o INSTALL.md incluído; há opção de rc.d ou cron.
  • macOS 13+ Apple Silicon: a release inclui .pkg and .dmg. Para Mac Intel, a documentação orienta compilar no próprio host Intel.

Known limits: where not to overpromise

O projeto cobre inventário local, não todo o catálogo do agente Perl. A documentação lista como lacunas, entre outras: GPUs, monitores via EDID, impressoras, controladoras PCI/RAID/IPMI, descoberta e inventário de rede, deploy, Wake-on-LAN, ESX e inventários de Snap, Flatpak, Nix ou Gentoo. Isso não é defeito oculto: é critério para decidir se ele atende seu ambiente ou se o agente oficial continua necessário em parte da frota.

Também não é uma ferramenta de monitoramento. Para métricas e alertas, complemente o inventário com Prometheus and Node Exporter; para a história do ITSM e do inventário no servidor, veja a história do GLPI. Inventário responde “o que existe”; monitoramento responde “o que está acontecendo agora”.

Current version and adoption roadmap

A release atual, v0.6.0, foi publicada em 10 de julho de 2026. Ela troca a tarefa agendada do Windows por um serviço real e mantém a configuração ao lado do executável em upgrades. A série anterior também registrou correções para o protocolo nativo do GLPI 11; por isso vale seguir a release e o changelog em vez de copiar comandos antigos de tutoriais.

  1. faça backup e escolha cinco máquinas-piloto;
  2. gere inventário local e revise identidade e categorias;
  3. aponte para um GLPI de teste ou para uma entidade de piloto;
  4. confirme se os ativos foram atualizados, não duplicados;
  5. habilite o timer gradualmente e acompanhe journal e filas do GLPI;
  6. documente as categorias desativadas e a CA usada, para que a operação seja reproduzível.

References

O go-glpi-agent não substitui uma política de inventário; ele torna essa política mais fácil de distribuir. Quando o piloto confirma identidade, TLS e cobertura de coleta, o binário único vira uma alternativa prática para manter o GLPI alimentado em ambientes Linux, Windows, FreeBSD e macOS.