Falli nei sistemi di build a causa di modifiche alle somme di controllo degli archivi su GitHub

GitHub ha modificato il metodo di generazione degli archivi automaticamente generati «.tar.gz» e «.tgz» nelle pagine delle release, portando a un cambiamento dei loro checksum e a massicci errori nei sistemi automatizzati di building, che per confermare l'integrità confrontano gli archivi scaricati da GitHub con i checksum precedentemente salvati, ad esempio, quelli presenti nei metadata dei pacchetti o negli script di build.

A partire dalla versione 2.38, nella suite di strumenti Git è stata inclusa di default un'implementazione integrata di gzip, che ha permesso di unificare il supporto di questo metodo di compressione in diversi sistemi operativi e migliorare le prestazioni nella creazione di archivi. GitHub ha aggiornato il suo sistema dopo la modifica della versione di git nella sua infrastruttura. Il problema è sorto perché gli archivi compressi generati dall'implementazione integrata di gzip basata su zlib sono diversi in modo binario dagli archivi creati con l'utility gzip, portando a checksum diversi per archivi creati con diverse versioni di git quando si eseguiva il comando «git archive».

Di conseguenza, dopo l'aggiornamento di git in GitHub, venivano restituiti archivi leggermente diversi nelle pagine delle release, che non superavano il controllo con i vecchi checksum. Il problema si è manifestato in vari sistemi di build, sistemi di integrazione continua e strumenti di compilazione di pacchetti da sorgenti. Ad esempio, si è verificato un malfunzionamento nella generazione di circa 5800 port di FreeBSD, i cui sorgenti erano scaricati da GitHub.

In risposta alle prime segnalazioni di errori, i rappresentanti di GitHub hanno inizialmente riferito che i checksum permanenti per gli archivi non sono mai stati garantiti. Dopo che è stato dimostrato che per ripristinare il funzionamento dei sistemi di build influenzati dalla modifica sarebbe stata necessaria una enorme quantità di lavoro per aggiornare i metadata in diverse ecosistemi, i rappresentanti di GitHub hanno cambiato idea, annullato la modifica e ripristinato il vecchio metodo di generazione degli archivi.

Gli sviluppatori di Git non sono ancora giunti a una decisione e stanno solo discutendo le possibili azioni. Sono state considerate opzioni come il ripristino dell'utilizzo dell'utilità gzip di default; l'aggiunta del flag "—stable" per mantenere la compatibilità con i vecchi archivi; il legame di un'implementazione integrata a un formato di archivio separato; l'uso dell'utilità gzip per i vecchi commit e dell'implementazione integrata per i commit a partire da una certa data; garantire la stabilità del formato solo per gli archivi non compressi.

La difficoltà di prendere una decisione è spiegata dal fatto che il ripristino della chiamata a un'utilità esterna non risolve completamente il problema dell'immutabilità dei checksum, poiché anche le modifiche nel programma esterno gzip possono portare a cambiamenti nel formato dell'archivio. Attualmente è stato proposto un insieme di patch per la revisione, che ripristinano il comportamento precedente (chiamata all'utilità esterna gzip) e usano l'implementazione integrata in assenza dell'utilità gzip nel sistema. Le patch aggiungono anche nella documentazione una nota che la stabilità dell'output "git archive" non è garantita e il formato potrebbe cambiare in futuro.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster