Nesreče v sistemih gradnje zaradi spremembe kontrolnih vsot arhivov na GitHubu

GitHub je spremenil metodo oblikovanja samodejno generiranih arhivov '.tar.gz' in '.tgz' na straneh z izdajami, kar je privedlo do spremembe njihovih kontrolnih vsot in množičnih nesreč v avtomatiziranih sistemih gradnje, ki za potrditev celovitosti preverjajo naložene arhive z GitHub-a s prej shranjenimi kontrolnimi vsotami, na primer, objavljenimi v metapodatkih paketov ali v skriptih za gradnjo.

Začetek z različico 2.38 v orodjih Git je bila privzeto vključena vgrajena implementacija gzip, ki je omogočila enotno podporo te metode stiskanja v različnih operacijskih sistemih in povečala učinkovitost ustvarjanja arhivov. GitHub je prevzel spremembo po posodobitvi različice git v svoji infrastrukturi. Težavo je povzročilo to, da stisnjeni arhivi, generirani z vgrajeno implementacijo gzip na osnovi zlib, binarno razlikujejo od arhivov, ustvarjenih z orodjem gzip, kar je privedlo do razlike v kontrolnih vsotah za arhive, ustvarjene z različnimi različicami git pri izvajanju ukaza 'git archive'.

Zato so po posodobitvi git na GitHub-u strani z izdajami začele vračati nekoliko različne arhive, ki ne ustrezajo starim kontrolnim vsotam. Težava se je pojavila v različnih sistemih za gradnjo, sistemih za neprekinjeno integracijo in v orodjih za gradnjo paketov iz izvornih kod. Na primer, gradnja približno 5800 paketov FreeBSD je bila motena, pri čemer so izvorni kod naložili z GitHub-a.

V odgovoru na prve pritožbe zaradi nastalih nesreč so predstavniki GitHub-a sprva trdili, da stalne kontrolne vsote za arhive nikoli niso bile zagotovljene. Ko je bilo pokazano, da bo za obnovitev delovanja sistemov gradnje, na katere je vplivala sprememba, potrebnega ogromno dela za posodobitev metapodatkov v različnih ekosistemih, so predstavniki GitHub-a spremenili svoje mnenje, razveljavili spremembo in vrnili staro metodo generiranja arhivov.

Razvijalci Git še niso dosegli nobenega odločitev in le razpravljajo o možnih dejanjih. Razmatrani so bili taki možnosti, kot so povrnitev na uporabo orodja gzip privzeto; dodajanje zastavice „—stable“ za ohranjanje združljivosti s starimi arhivi; povezovanje vgrajene izvedbe z ločenim formatom arhiva; uporaba orodja gzip za stare commit-e in vgrajene izvedbe za commit-e, ki se začnejo z določenim datumom; zagotavljanje stabilnosti formata le za nesprejete arhive.

Zahtevnost sprejemanja odločitev je pojasnjena s tem, da povrnitev na klic zunanjega orodja ne rešuje popolnoma problema nespremenljivosti kontrolnih vsot, saj sprememba zunanji program gzip prav tako lahko privede do spremembe formata arhiva. Trenutno je za recenzijo predložena zbirka popravkov, ki vrača privzeto staro vedenje (klic zunanjega orodja gzip) in uporablja vgrajeno izvedbo v primeru, da orodja gzip ni v sistemu. Popravki prav tako dodajajo v dokumentacijo omembo, da stabilnost izhoda „git archive“ ni zagotovljena in format se lahko v prihodnosti spremeni.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster