jako myslis tu glibc? nic jinyho by tam snad uz nemelo byt
v clanku je
linux-vdso.so.1 (0x00007ffd1dbe5000) libc.so.6 => /lib64/libc.so.6 (0x00007f8a23d29000) /lib64/ld-linux-x86-64.so.2 (0x00007f8a23f1d000)
to prvni ani nevim co je ;) ale libc.so.6 je dobre na hodne dlouho ne?
23. 5. 2024, 10:13 editováno autorem komentáře
Glibc má verzované i symboly, takže binárka sestavené na systému s novější libc typicky nepoběží na systému se starší libc, protože při linkování se volí nejnovější verze symbolů. Opačným směrem to typicky jde.
Proto se např. python wheels buildí v docker image manylinux, což je nějaký starší systém, a tím je zajištěna kompatibilita s běžnými novějšímy systémy. (Taktéž obsahuje několik verzí pythonu, takže je možné rovnou sestavit wheels pro více verzí.)
Podobné to bude v případě dynamicky linkovaných rust a golang binárek.
Nicméně v případě golangu jsem za celou dobu (cca 6 let) nepotřeboval dynamicky linkovat s nějakou "nenativní" knihovnou - vždy jsem použil čistě golang závislosti. Potom je možné triviálně sestavit statickou binárku, která je dobře přenositelná (konkrétně k běhu potřebuje pouze kernel verze 2.6.32 a vyšší). Viz. Go Wiki: Minimum Requirements.
Sestavení statické binárky si lze vynutit nastavením proměnné prostředí:
$ CGO_ENABLED=0 go build -o ??? .
V rustu lze taky sestavit statickou binárku, ale celá situace je trochu komplikovanější. V rustu je častější mít závislosti na systémových knihovnách. Např. použiju http klienta reqwest a s tím si (by default) zavleču závislost na systémovém openssl. Na debianu je openssl distribuované i ve statické verzi, takže to je ok, ale na archu např. ne. Pak je občas u bindingů na c/c++ knihovny feature flag na kompilaci verze přibalené v rust crate - tím může být relativně jednoduché obejít případy, kdy statická verze knihovny na build systému dostupná není. Nebo např. u balíku reqwest je feature flag na použití rust-only implementace tls. Ale stejný feature flag by pak samozřejmě musely mít i všechny ostatní balíky používající tls.
Sestavit statickou binárku v rustu pak jde takto:
$ RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target x86_64-unknown-linux-gnu
V případě debianu je glibc nastavené na podporu kernelů od verze 3.2. Takže předpokládám, že to by byl požadavek na běhové prostředí výsledné binárky.
S tím "Treba pro in-house programky, ktery se maji sirit po firme, to neni vubec marny." jsme u nás s Windows narazili. Zatímco zdrojové kódy si můžeme stáhnou a spustit v pythonu, node.js apod., tak zkompilovaný .exe spustit nelze. Není podepsaný. Snadnou cestu ven jsme nenašli, končilo to tím, že si každý ten .exe musel zkompilovat a podepsat sám na svém PC. Což tak nějak negovalo původní záměr.
Má s tímhle někdo nějaké zkušenosti, prosím? Jak si zkompilovat python program do .exe a to spustit na jiném PC, kde jsou Windows 10, které nedovolí nic, co nemá platný certifikát? Výjimku udělit nelze. Vlastní certifikát vytvořit lze a na PC je i akceptovaný. Ale jakákoliv snaha zkopírovat ho do jiného PC jako platný selhává.
Takze ste uplne rezignovali na akukolvek bezpenost vo firme? A spustite vsteko vsade a este k tomu skripty?
A pritom codesigning certifikaty nie su extra drahe. Alebo sa da vydat vlastny, ale k tomu treba distribuovat Trusted root certifikat a nie koncovy. navyse binarky nesmu podpisovat ludia, ale to ma robit CI/CD v bezpenosm prostredi.
To už tak bývá. Nechci zacházet do detailů, ale ve chvíli, kdy chcete po někom, aby programoval, tak mu musíte dovolit, aby programoval. Sice jsem si všiml několika projektů o tom, jak být schopen programovat v Pythonu bez toho, že bych měl nainstalovaný Python nebo jakékoliv IDE, ale zatím to moc nefungovalo.
Idea, že mám otevřenou webovou stránku, kde upravuji program a po stisku tlačítka se to přes CD/CI nějak spustí a výsledky dostanu, vypadá na první pohled fajn. Jenže já zatím neumím fungovat bez toho, abych si občas ten interpreter spustil.
Ještě mi tedy vrtá hlavou to, jak to souvisí s firmou. Že má uživatel PC možnost si nainstalovat a spouštět Python, node.js, nějaké IDE nebo rovnou MS VisualStudio, jak přesně tohle znamená "rezignovali na jakoukoliv bezpečnost ve firmě"?