go-glpi-agent: inventário para GLPI 10+ sem Perl

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

Inventário de ativos só funciona quando o agente consegue rodar em toda a frota, identificar a máquina de forma estável e entregar dados que o GLPI entende. O go-glpi-agent é uma reimplementação em Go do agente de inventário do ecossistema FusionInventory/GLPI: um binário estático que coleta hardware e software localmente e envia o resultado para GLPI 10+ — sem runtime Perl, árvore de módulos ou acesso SSH ao endpoint.

O que é o go-glpi-agent

O projeto não é o agente oficial glpi-agent, nem tenta sobrescrevê-lo. É uma implementação separada, pensada para coexistir com o agente oficial e com o antigo fusioninventory-agent. O ponto de compatibilidade é deliberado: ele lê o formato agent.cfg já usado pelo agente Perl e reaproveita identificadores existentes, reduzindo o risco de uma máquina reaparecer no GLPI como outro ativo depois de uma migração.

O fluxo é direto:

  1. o binário descobre dados locais de hardware, sistema e software;
  2. monta o inventário no modelo interno do projeto;
  3. tenta enviar para /front/inventory.php pelo protocolo JSON nativo do GLPI;
  4. quando necessário, faz fallback automático para o fluxo XML legado OCS/FusionInventory;
  5. o GLPI associa o inventário ao computador identificado pelo agente.

Também há um modo local: go-glpi-agent run --local DIRETÓRIO grava o XML sem enviá-lo. É o melhor primeiro passo para conferir o que será coletado antes de apontar uma frota para produção.

Por que um binário em Go muda a operação

  • Implantação simples: o projeto publica pacotes nativos para Linux, além de arquivos para Windows, FreeBSD e macOS. Para uma equipe de infraestrutura, isso reduz dependências no host.
  • Um código, quatro sistemas: a mesma base cobre Linux amd64, Windows amd64, FreeBSD amd64 e macOS 13+ em Apple Silicon; Mac Intel é caso de compilação no host Intel.
  • Agenda previsível: no Linux, o pacote instala um timer systemd por hora com atraso aleatório. Em Windows, a versão 0.6.0 passou a usar um serviço do Windows em vez da tarefa agendada anterior.
  • 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.

O que ele coleta

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 e pacman. No Windows, combina WMI, Registro e gopsutil; no FreeBSD, usa kenv, pkg, geom, sysctl e usbconfig; no macOS, usa system_profiler, ioreg, sysctl e 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.

Instalação no Ubuntu e 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.

Configurar o destino e testar sem enviar nada

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.

Agendar com 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.

Como manter a identidade do ativo

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.

Configurações úteis e seus valores

Nome 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 ou 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.

Outros sistemas operacionais

  • 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 e .dmg. Para Mac Intel, a documentação orienta compilar no próprio host Intel.

Limites conhecidos: onde não prometer demais

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 e 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”.

Versão atual e roteiro de adoção

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.

Referências

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.