Errori nei sistemi di compilazione dovuti a modifiche nei checksum dell'archivio su GitHub

GitHub ha cambiato il modo in cui genera archivi “.tar.gz” e “.tgz” generati automaticamente sulle pagine di rilascio, il che ha portato a modifiche nei checksum e a massicci errori nei sistemi di compilazione automatizzati che controllano gli archivi scaricati da GitHub rispetto a quelli precedenti per confermarne l'integrità checksum memorizzati, ad esempio, inseriti nei metadati del pacchetto o negli script di build.

A partire dalla versione 2.38, il toolkit Git includeva un'implementazione integrata di gzip per impostazione predefinita, che ha reso possibile unificare il supporto per questo metodo di compressione su tutti i sistemi operativi e migliorare le prestazioni di creazione degli archivi. GitHub ha rilevato la modifica dopo aver aggiornato la versione di git nella sua infrastruttura. Il problema è stato causato dal fatto che gli archivi compressi generati dall'implementazione gzip integrata basata su zlib sono binari diversi dagli archivi creati dall'utilità gzip, il che ha comportato checksum diversi per gli archivi creati da diverse versioni di git durante l'esecuzione del comando comando "archivio git".

Di conseguenza, dopo aver aggiornato git in GitHub, sulle pagine di rilascio hanno iniziato a essere visualizzati archivi leggermente diversi, che non hanno superato la verifica utilizzando i vecchi checksum. Il problema si è manifestato in vari sistemi di compilazione, sistemi di integrazione continua e strumenti per creare pacchetti dal codice sorgente. Ad esempio, l'assemblaggio di circa 5800 port di FreeBSD, i cui codici sorgente sono stati scaricati da GitHub, è stato interrotto.

In risposta alle prime lamentele sui problemi, GitHub ha inizialmente citato il fatto che i checksum permanenti per gli archivi non erano mai stati garantiti. Dopo che è stato dimostrato che sarebbe necessaria un'enorme quantità di lavoro per aggiornare i metadati in vari ecosistemi per ripristinare la funzionalità dei sistemi di build interessati, i rappresentanti di GitHub hanno cambiato idea, annullato il cambiamento e restituito il vecchio metodo di generazione degli archivi.

Gli sviluppatori di Git non hanno ancora preso una decisione e stanno solo discutendo le possibili azioni. Le opzioni considerate includevano il ripristino dell'utilizzo dell'utilità gzip predefinita; aggiunta del flag “--stable” per mantenere la compatibilità con i vecchi archivi; collegare l'implementazione integrata a un formato di archivio separato; utilizzando l'utilità gzip per i vecchi commit e l'implementazione inline per i commit a partire da una certa data; garantendo la stabilità del formato solo per gli archivi non compressi.

La difficoltà di prendere una decisione è spiegata dal fatto che il rollback su una chiamata a un'utilità esterna non risolve completamente il problema dell'immutabilità del checksum, poiché una modifica nel programma gzip esterno può anche portare a una modifica nel formato dell'archivio. Attualmente è stata proposta una serie di patch per la revisione che restituisce il vecchio comportamento predefinito (chiamando un'utilità gzip esterna) e utilizza l'implementazione integrata in assenza di un'utilità gzip nel sistema. Le patch aggiungono anche alla documentazione una menzione che la stabilità dell'output di "archivio git" non è garantita e che il formato potrebbe cambiare in futuro.

Fonte: opennet.ru

Aggiungi un commento