Zlyhania v systémoch zostavovania v dôsledku zmien v kontrolných súčtoch archívov na GitHub

GitHub zmenil spôsob, akým generuje automaticky generované archívy „.tar.gz“ a „.tgz“ na stránkach vydania, čo viedlo k zmenám v ich kontrolných súčtoch a masívnym zlyhaniam v automatizovaných systémoch zostavovania, ktoré porovnávajú archívy stiahnuté z GitHubu s predchádzajúcimi s cieľom potvrdiť integritu. uložené kontrolné súčty, napríklad umiestnené v metaúdajoch balíka alebo v zostavovacích skriptoch.

Počnúc vydaním 2.38 obsahovala sada nástrojov Git štandardne vstavanú implementáciu gzip, čo umožnilo zjednotiť podporu tejto metódy kompresie naprieč operačnými systémami a zlepšiť výkon pri vytváraní archívov. GitHub zachytil zmenu po aktualizácii verzie git vo svojej infraštruktúre. Problém bol spôsobený skutočnosťou, že komprimované archívy generované vstavanou implementáciou gzip založenou na zlib sú binárne odlišné od archívov vytvorených nástrojom gzip, čo viedlo k rôznym kontrolným súčtom pre archívy vytvorené rôznymi verziami git pri spustení príkaz "git archive".

V súlade s tým sa po aktualizácii git v GitHub začali na stránkach vydania zobrazovať mierne odlišné archívy, ktoré neprešli overením pomocou starých kontrolných súčtov. Problém sa prejavil v rôznych zostavovacích systémoch, systémoch kontinuálnej integrácie a nástrojoch na zostavovanie balíkov zo zdrojového kódu. Pokazená bola napríklad zostava asi 5800 portov FreeBSD, ktorých zdrojové kódy boli stiahnuté z GitHubu.

V reakcii na počiatočné sťažnosti na chyby GitHub spočiatku uviedol skutočnosť, že trvalé kontrolné súčty pre archívy neboli nikdy zaručené. Po tom, čo sa ukázalo, že aktualizácia metadát v rôznych ekosystémoch by si vyžiadala obrovské množstvo práce, aby sa obnovila funkčnosť dotknutých systémov zostavovania, zástupcovia GitHubu zmenili názor, vrátili zmenu a vrátili starú metódu generovania archívov.

Vývojári Git ešte nedospeli k rozhodnutiu a iba diskutujú o možných krokoch. Zvažované možnosti zahŕňajú návrat k používaniu predvoleného nástroja gzip; pridanie príznaku „--stable“ na zachovanie kompatibility so starými archívmi; prepojenie vstavanej implementácie do samostatného archívneho formátu; používanie nástroja gzip pre staré odovzdania a inline implementáciu pre odovzdania počnúc určitým dátumom; zaručuje stabilitu formátu len pre nekomprimované archívy.

Náročnosť rozhodovania sa vysvetľuje skutočnosťou, že návrat k volaniu externého nástroja úplne nevyrieši problém nemennosti kontrolného súčtu, pretože zmena v externom programe gzip môže viesť aj k zmene formátu archívu. V súčasnosti bola na preskúmanie navrhnutá sada opráv, ktorá štandardne vracia staré správanie (volanie externého nástroja gzip) a používa vstavanú implementáciu v prípade absencie nástroja gzip v systéme. Záplaty tiež pridávajú do dokumentácie zmienku, že stabilita výstupu „git archívu“ nie je zaručená a formát sa môže v budúcnosti zmeniť.

Zdroj: opennet.ru

Pridať komentár