Errori nei sistemi di build a causa della modifica dei checksum degli archivi in GitHub

GitHub ha modificato il metodo di generazione degli archivi automaticamente creati in formato «.tar.gz» e «.tgz» nelle pagine delle versioni, causando un cambiamento nei loro checksum e massicci malfunzionamenti nei sistemi di build automatizzati, i quali, per confermare l'integrità, confrontano gli archivi scaricati da GitHub con i checksum precedentemente salvati, ad esempio, memorizzati nei metadati dei pacchetti o negli script di build.

A partire dalla versione 2.38, nel toolkit Git è stata inclusa per impostazione predefinita un'implementazione integrata di gzip, che ha permesso di uniformare il supporto per questo metodo di compressione in diversi sistemi operativi e migliorare le prestazioni nella creazione di archivi. GitHub ha adottato il cambiamento dopo aver aggiornato la versione di git nella sua infrastruttura. Il problema è sorto perché gli archivi compressi generati dall'implementazione integrata di gzip basata su zlib differiscono binariamente dagli archivi creati dall'utilità gzip, causando una differenza nei checksum per gli archivi creati da diverse versioni di git durante l'esecuzione del comando «git archive».

Di conseguenza, dopo l'aggiornamento di git su GitHub, negli rilasci sono stati forniti archivi leggermente diversi, che non superano i controlli con le vecchie somme di controllo. Il problema si è manifestato in vari sistemi di build, sistemi di integrazione continua e in strumenti di creazione di pacchetti dai codici sorgente. Ad esempio, si è interrotta la creazione di circa 5800 porte di FreeBSD, i cui codici sorgente venivano caricati da GitHub.

In risposta alle prime segnalazioni di malfunzionamenti, i rappresentanti di GitHub inizialmente affermarono che le somme di controllo permanenti per gli archivi non erano mai state garantite. Dopo che è stato dimostrato che per ripristinare il funzionamento dei sistemi di build influenzati dalla modifica sarebbe stato necessario un enorme lavoro di aggiornamento dei metadati in diverse ecosistemi, i rappresentanti di GitHub cambiarono idea, annullarono la modifica e ripristinarono il vecchio metodo di generazione degli archivi.

Gli sviluppatori di Git non hanno ancora trovato una soluzione e stanno solo discutendo le possibili azioni. Sono stati considerati opzioni come il ripristino dell'utilizzo di gzip come impostazione predefinita; l'aggiunta di un flag "—stable" per garantire la compatibilità con i vecchi archivi; il collegamento dell'implementazione integrata a un formato di archivio specifico; l'uso di gzip per vecchi commit e dell'implementazione integrata per i commit a partire da una certa data; e la garanzia della stabilità del formato solo per archivi non compressi.

La difficoltà nella decisione è spiegata dal fatto che il ripristino della chiamata a un'utilità esterna non risolve completamente il problema dell'immutabilità dei checksum, poiché anche una modifica nel programma esterno gzip potrebbe comportare una modifica del formato dell'archivio. Attualmente è stato proposto un set di patch per la revisione che ripristina il vecchio comportamento predefinito (chiamata all'utilità esterna gzip) e utilizza l'implementazione integrata in assenza dell'utilità gzip nel sistema. Le patch aggiungono anche alla documentazione una nota che la stabilità dell'output di "git archive" non è garantita e che il formato potrebbe essere modificato in futuro.

Fonte: opennet.ru

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