abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 15:44 | Nová verze

Byla vydána beta verze Linux Mintu 20.2 s kódovým jménem Uma. Na blogu Linux Mintu jsou hned tři oznámení. První o vydání Linux Mintu s prostředím Cinnamon, druhé o vydání Linux Mintu s prostředím MATE a třetí o vydání Linux Mintu s prostředím Xfce. Stejným způsobem jsou rozděleny také poznámky k vydání (Cinnamon, MATE, Xfce) a přehled novinek s náhledy (Cinnamon, MATE, Xfce). Linux Mint 20.2 bude podporován až do roku 2025.

Ladislav Hagara | Komentářů: 0
dnes 08:00 | Nová verze

Byla vydána verze 1.53.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

Ladislav Hagara | Komentářů: 2
včera 22:33 | Nová verze

Na GOG.com lze do soboty 19. června získat zdarma počítačovou hru Absolute Drift (YouTube).

Ladislav Hagara | Komentářů: 2
včera 21:00 | Bezpečnostní upozornění

Bezpečnostní výzkumníci odhalili zásadní slabinu v šifrovacích algoritmech GEA-1 a GEA-2 používaných mobilními zařízeními. Jejich podezření, že slabina nevznikla náhodou, ale zcela úmyslně, s cílem zjednodušit útok na uživatele, posléze mluvčí autorů algoritmu (ETSI) potvrdil.

JiK | Komentářů: 14
včera 16:22 | Nová verze

Wasmer byl vydán ve verzi 2.0. Jedná se o běhové prostředí pro programy ve WebAssembly. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 0
včera 09:00 | IT novinky

Josef Průša představil novou vylepšenou SLA 3D tiskárnu Original Prusa SL1S SPEED. Její cena je 49 990 Kč. S mycí a vytvrzovací stanicí 64 990 Kč.

Ladislav Hagara | Komentářů: 1
včera 08:00 | Nová verze

Byla vydána nová verze 1.32.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu věnuje Thomas Haller.

Ladislav Hagara | Komentářů: 2
včera 07:00 | Nová verze

Bylo vydáno Eclipse IDE 2021-06 aneb Eclipse 4.20. Představení novinek tohoto vývojového prostředí také na YouTube.

Ladislav Hagara | Komentářů: 0
16.6. 23:11 | IT novinky

Měsíční kampaň Bulánci se vrací na Startovači na podporu vývoje nové verze dnes již dvacetileté počítačové hry Bulánci skončila. Vybráno bylo 7 308 770 Kč. Požadováno bylo 500 000 Kč.

Ladislav Hagara | Komentářů: 16
16.6. 18:33 | Zajímavý článek

Nakladatelství Raspberry Pi vydalo knihu The Computers That Made Britain věnovanou domácím počítačům z osmdesátých let (ZX Spectrum, BBC Micro, Commodore 64, …). Tištěnou verzi lze koupit za 12 liber. Elektronická verze je ke stažení za libovolnou částku, také zdarma (pdf).

Ladislav Hagara | Komentářů: 0
Používáte kalkulačku?
 (9%)
 (30%)
 (61%)
 (28%)
 (12%)
Celkem 225 hlasů
 Komentářů: 25, poslední dnes 07:59
Rozcestník

Dotaz: ako uložiť poznámku do dynamickej knižnice

7.5. 10:53 rastos | skóre: 62 | blog: rastos
ako uložiť poznámku do dynamickej knižnice
Přečteno: 284×
Občas sa potýkam s tým, že nejaký projekt je deploynutý na N serveroch, často nie naraz, často nie z toho istého branch-u a potom s odstupom mesiacov až rokov sa namáhavo pátra po tom, odkiaľ sa nejaké knižnica vzala.

Neexistuje nejaký spôsob ako do .so súboru uložiť nejaké free-form stringy? Napr. "build date: 2021-05-07", "author: jozko mrkvicka", ...? Pozerám, že readelf má prepínač -n | --notes. Nedalo by sa to použiť? A ak áno, tak ako konkrétne?

Řešení dotazu:


Odpovědi

7.5. 13:15 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Myslíte knihovny třetích stran?

Tohle řeší balíčkovací mechanismus, ne?
-- OldFrog
7.5. 16:05 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Nie. Myslím, knižnicu, ktorú som naprogramoval ja sám a neinštaluje sa balíčkovacím systémom.
7.5. 19:27 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Vlastní knihovny bych instaloval také balíčkovacím nástrojem. Existují nástroje, které provedou build rovnou do nativního distribučního balíčku. Ten se třeba úplně nehodí na veřejnou distribuci, ale pro deploy na server určitě vyhovuje.

Jinak nevidím problém do té knihovny ten string prostě vložit? Pro různé ekosystémy na to budou nepochybně i nějaké konvence (záleží v čem je ta knihovna napsaná a jak se překládá). Určitě ale jde při buildu vygenerovat hlavičku (s nějakým DEFINE) a přilinkovat ji. Taky není problém dotaz informace o knihovně zahrnout do API.
-- OldFrog
7.5. 19:28 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
dotaz informace o knihovně -> dotaz na informace o knihovně a buildu
-- OldFrog
8.5. 09:22 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Knižnica je napísaná v C, kompilovaná s gcc a použitá z Javy (JNI). Ten program v jave môže mať na disku viacero inštalácií v rôznych adresároch a bežiacich paralelne a každý z nich má svoju kópiu tej knižnice. Knižnicu si to loadne cez niečo ako dlopen() s absolútnou pathname. Bez nejakého chroot/docker/...

Cez balíčkovací systém sa to celé neinštaluje ... asi z historických dôvodov. Alebo preto, že "veď to nejako funguje aj s ručným kopírovaním hore-dole" :-(
8.5. 18:43 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Pokud se knihovna distribuuje s aplikací a nepoužívá se balíčkovací nástroj, tak to bych tu knihovnu dal do instalačního adresáře celé aplikace a je prakticky vyřešeno - informace o buildu budou součástí celé aplikace. Nicméně možnost vložit verzi do knihovny tu stále zůstává.

Nepředpokládám, že by se .so/.dll knihovna aktualizovala tím způsobem, že by se v instalačním adresáři ručně .so/.dll soubor přepsal. Čekal bych, že projede nějaký unit test a vybuildí se celá aplikace.
-- OldFrog
7.5. 13:53 Peter Golis | skóre: 62 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Ak nie je možné z nejakého prazvláštneho dôvodu pri Agile CI/CD využiť spomínaný balíčkovací systém, tak je predsa možné využiť archív použitých a deploynutých verzií a porovnať kontrolný súčet (hash) binárky aby človek vedel čo je to za build. Ale to už prechádza z Agile na Scrum alebo dokonca na Waterfall.
Řešení 1× (jablko)
8.5. 08:24 kvr
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Čekal bych, že to bude umět objcopy (--add-section, --add-symbol). Ale nevím, jestli umí i so...
8.5. 09:33 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
To vyzerá sľubne:
$ cat foo.c 
int fnc()
{
        return 4;
}
$ gcc -o libfoo.so -g -shared foo.c
$ cat version.txt
author=rastos
$ objcopy --add-section .NOTES=version.txt libfoo.so libfoo.so.1
A keď sa pozriem dovnútra:
$ readelf -n libfoo.so.1 
$ 
$objdump -s -j .NOTES libfoo.so.1 

libfoo.so.1:     file format elf64-x86-64

Contents of section .NOTES:
 0000 61757468 6f723d72 6173746f 730a      author=rastos. 
Cez "readelf -n" to nezobrazí nič, ale cez objdump áno.
8.5. 18:46 OldFrog {Ondra Nemecek} | skóre: 35 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
No vida, to je dobré. Akorát nevýhoda je, že si to pak asi nepřečte aplikace samotná - té by se to mohlo taky hodit.
-- OldFrog
9.5. 10:44 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: ako uložiť poznámku do dynamickej knižnice
Nakoniec som našiel asi ešte lepšie riešenie.

Linker môže dostať parameter "-e entrypoint" a ten umožňuje vyrobiť .so, ktorá je spustiteľná:
$ cat bar.c 
#include <stdio.h>
#include <unistd.h>

const char foo[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";

void lib_main(void)
{
	printf("Build-Time: " __DATE__ " " __TIME__ "\n");
#ifdef BRANCH
	printf("Branch: " BRANCH "\n");
#endif
	_exit(0);
}

$ gcc -fPIC -shared -o libBar.so -e lib_main -DBRANCH=\"experimental\" bar.c
$ ./libBar.so 
Build-Time: May  9 2021 10:38:19
Branch: experimental
Poznámky:
  • viaceré návody na internete hovoria "/lib/ld-linux.so.2" miesto "/lib64/ld-linux-x86-64.so.2" - pretože tie návody pochádzajú z doby 32-bitov. Ak je tam nesprávna cesta, tak to skončí s
     bash: ./libBar.so: Accessing a corrupted shared library
  • aby vzniknutý proces regulérne skončil, tak tam musí byť to volanie _exit() a aby tam mohlo byť, _exit(), tak je potrebné unistd.h
  • Ten printf() funguje s konštatnými stringami, ale nefunguje (Sementation fault) ak by som tam chcel nejaké parametre. Na to, aby to fungovalo, by bola potrebná inicializácia C runtime knižnice. A to asi nie je len tak. Asi na to treba kus assembleru. Ale takto mi to celkom vyhovuje.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.