Un audit del produttore può costare caro, ma ciò che rompe la gestione delle licenze in GLPI raramente è il prezzo della licenza: è l'installazione che il sistema conta sul software sbagliato. Sui parchi GLPI che manteniamo per i clienti, il report di conformità quasi sempre esiste; ciò che manca è fidarsene. Questa guida mostra come modellare le licenze, perché il numero di eccedenza esce sbagliato e come affinare la riconciliazione e gli avvisi affinché un audit non sia una sorpresa.
Il modello di dati che sostiene tutto
Prima di qualsiasi report, capisca come GLPI collega i pezzi. Quattro tabelle native contano:
- glpi_softwares - il software in sé (una riga per nome).
- glpi_softwareversions - le versioni di ogni software.
- glpi_softwarelicenses - le licenze acquistate, con quantità (campo number), tipo, scadenza (expire) e fornitore.
- glpi_items_softwareversions - ogni installazione rilevata, che collega un elemento (computer, VM) a una versione.
La conformità nasce dall'incrocio tra la somma di number in glpi_softwarelicenses e il conteggio di righe in glpi_items_softwareversions, raggruppati per software. Se uno dei due lati punta al glpi_softwares sbagliato, il conto torna bello e falso.
Registri la licenza con il campo giusto
In Gestione > Licenze (o nella scheda Licenze dentro il software), registri ogni acquisto. I passi che standardizziamo:
- La colleghi al software corretto - una licenza appartiene a un glpi_softwares specifico. Ha comprato Office, ma l'inventario ha creato "Microsoft Office" e "Microsoft 365 Apps" come due software? La licenza resta orfana di metà delle installazioni.
- Quantità in number - il totale di postazioni acquistate. Qui sta la prima trappola: number = -1 significa licenza illimitata (freeware, licenza di sito senza tetto). Lasciarlo vuoto o a 0 azzera la base di confronto.
- Tipo di licenza - OEM, Volume, Abbonamento, ecc. (menu a tendina glpi_softwarelicensetypes). Non è un ornamento: definisce la regola di conformità reale.
- Scadenza (expire) - la compili per abbonamento e Software Assurance; la lasci vuota per la perpetua.
- Assegni la licenza alle installazioni - registrarla non basta. Bisogna allocare la licenza agli elementi che la consumano (scheda degli elementi della licenza) affinché GLPI conti il consumo. Molti parchi hanno la licenza registrata e nessuna assegnazione: il report mostra tutto disponibile per qualcosa già in eccedenza.
L'errore di campo che azzera l'eccedenza: nome frammentato
In manutenzione, il motivo numero 1 di "la conformità mostra zero eccedenza, ma so di essere oltre" non è un bug del report: è la frammentazione del nome. L'inventario GLPI crea un glpi_softwares per ogni nome esatto riportato dall'agente. Così "Google Chrome", "Google Chrome (64-bit)" e "Google Chrome" con uno spazio in più diventano tre software distinti, ciascuno con il proprio conteggio di installazioni. Collega la licenza a uno di essi e gli altri due restano "senza licenza registrata" - o, peggio, "conformi", perché ognuno ha poche installazioni. Il conto globale non torna mai.
La correzione non è nel report, è all'ingresso: il Dizionario del software (Amministrazione > Regole > Dizionario del software) normalizza il nome prima di scriverlo in glpi_softwares. Una regola che riscrive "Google Chrome (64-bit)" in "Google Chrome" fonde le installazioni in un unico software, e allora la licenza copre tutto. Il dettaglio che solo chi opera conosce: il dizionario riscrive solo alla prossima entrata di inventario, quindi dopo aver creato le regole bisogna rielaborare l'inventario (o attendere il ciclo successivo dell'agente) perché le vecchie installazioni migrino. Applicare la regola e controllare il report nello stesso minuto inganna: non è ancora cambiato nulla.
La query che mostra l'eccedenza reale
Finché il dizionario non è affinato, la schermata di conformità mescola rumore. Eseguiamo direttamente sul database la query che elenca, per software, installazioni contro licenze - escludendo già le illimitate (number = -1) dalla somma:
-- Software con piu installazioni che licenze (eccedenza di conformita).
-- number = -1 significa licenza illimitata: la escludiamo dalla somma.
SELECT s.name AS software,
COALESCE(lic.licenze, 0) AS licenze,
COALESCE(inst.installazioni, 0) AS installazioni,
COALESCE(inst.installazioni, 0) - COALESCE(lic.licenze, 0) AS eccedenza
FROM glpi_softwares s
LEFT JOIN (
SELECT softwares_id, SUM(number) AS licenze
FROM glpi_softwarelicenses
WHERE is_deleted = 0 AND number > 0
GROUP BY softwares_id
) lic ON lic.softwares_id = s.id
LEFT JOIN (
SELECT sv.softwares_id, COUNT(*) AS installazioni
FROM glpi_items_softwareversions isv
JOIN glpi_softwareversions sv ON sv.id = isv.softwareversions_id
WHERE isv.is_deleted = 0
GROUP BY sv.softwares_id
) inst ON inst.softwares_id = s.id
WHERE s.is_deleted = 0
AND COALESCE(inst.installazioni, 0) > COALESCE(lic.licenze, 0)
ORDER BY eccedenza DESC;
Il risultato è la lista d'acquisto: ogni riga con eccedenza positiva è rischio di multa in un audit. Incroci con il dizionario prima di comprare - metà dell'"eccedenza" è di solito lo stesso software contato con due nomi.
Avvisi di scadenza che scattano davvero
Una licenza di abbonamento scaduta è denaro fermo o servizio interrotto. GLPI avvisa, ma l'avviso ha tre interruttori che devono essere tutti accesi - e l'errore comune è credere che compilare il campo expire basti:
- Sull'entità (Amministrazione > Entità, scheda notifiche): attivare gli allarmi sulle licenze e definire il preavviso (campi interni use_licenses_alert e send_licenses_alert_before_delay).
- Sulla notifica (Configurazione > Notifiche): la notifica di licenza software deve essere attiva, con destinatario e modello definiti.
- Sul cron: l'azione automatica che scansiona le scadenze parte solo se il cron di GLPI parte. In produzione questo significa un cron del sistema operativo, non la modalità interna che dipende dal traffico degli utenti.
La configurazione di cron esterno che lasciamo a ogni cliente:
# Crontab dell'utente PHP (www-data/apache): innesca le azioni automatiche di GLPI,
# incluso l'avviso di licenze in scadenza. Senza questo cron esterno, l'avviso gira solo
# "a rimorchio" del traffico degli utenti - e in una finestra senza accessi, non parte mai.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null
A prescindere dall'avviso nativo, ogni lunedì inviamo un report di scadenze direttamente dal database, per non dipendere solo dalla notifica:
-- Licenze in scadenza nei prossimi 90 giorni, dalla piu urgente alla meno.
SELECT s.name AS software,
sl.name AS licenza,
sl.number,
sl.expire,
DATEDIFF(sl.expire, CURDATE()) AS giorni_alla_scadenza
FROM glpi_softwarelicenses sl
JOIN glpi_softwares s ON s.id = sl.softwares_id
WHERE sl.is_deleted = 0
AND sl.expire IS NOT NULL
AND sl.expire <= DATE_ADD(CURDATE(), INTERVAL 90 DAY)
ORDER BY sl.expire ASC;
Matrice decisionale per tipo di licenza
Il tipo di licenza cambia come la modella in GLPI e dove sta il rischio. La matrice che usiamo in fase di progettazione:
| Tipo di licenza | Come modellarla in GLPI | Campo expire | Trappola comune |
|---|---|---|---|
| OEM (legata all'hardware) | number = 1 per dispositivo; tipo OEM | Vuoto (perpetua) | Non migra tra macchine - cambiare il PC genera non conformità silenziosa |
| Volume (VLK / MAK / KMS) | 1 record, number = quantità contrattata | Secondo il contratto | Contare le attivazioni reali, non il tetto del contratto |
| Abbonamento (SaaS, Microsoft 365) | number = postazioni; riconciliare col report del fornitore | Fine del ciclo | L'inventario non vede il SaaS puro - la registrazione è manuale |
| Perpetua + Software Assurance | number = quantità; expire = fine della SA | Fine della SA | La SA scaduta non taglia l'uso, ma blocca il diritto di aggiornamento |
| Freeware / Trial | Freeware: number = -1; Trial: number + expire | Solo nel trial | Il freeware che diventa a pagamento in una nuova versione passa inosservato |
La riconciliazione è routine, non progetto
La conformità software non è una foto, è un film: il parco cambia ogni settimana. Il ritmo che funziona in manutenzione è trimestrale per la riconciliazione completa (eseguire la query di eccedenza, rivedere il dizionario, controllare le assegnazioni) e mensile per le scadenze. Dia priorità ai produttori che fanno davvero audit - Microsoft, Adobe, Oracle e Autodesk fanno valere i diritti, e il conto di una non conformità che scoprono loro è di ordini di grandezza superiore al costo di mantenere pulita la base. L'obiettivo non è un bel report; è poter rispondere "quante licenze di X ho e quante ne uso?" con un numero di cui si fida.
Vuole il parco software sotto controllo, con la base di licenze riconciliata e gli avvisi che scattano davvero? Scopra la manutenzione GLPI di NexTool.
Revisionato dal team NexTool Solutions.