Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: iskren в Jul 04, 2008, 16:08



Титла: проблем с еднакви имена на споделени библиотеки
Публикувано от: iskren в Jul 04, 2008, 16:08
Здравейте!

До сега по принцип ползвах файърфокс инсталиран от репотата на федората, бях си сложил даже 3ката (от development), но много crash-ваше затова си сложих и 2ката (свалена от официалния сайт). Сега обаче реших да си сложа и 3ката от официалния сайт... е да ама има библиотеки които се намират във папката на ff2 и се казват по същия начин като тези, намиращи се във папката на ff3. Сложил съм пътя до 2те в /etc/ld.so.conf.d и съм написал ldconfig, но както се сещате това не оправя нещата. Та въпроса ми е има ли начин да кажа всяка версия да си ползва нейните без да се налага постоянно едит във /etc/ld.so.conf.d и ldconfig. Мисля че ако преименувам някой споделен файл няма да го намери споделената версия (ако сложа примерно номера на подверсията - защото в момента проблема е че новия файърфокс използва споделен файл със същото име, но по нова версия във същност)


Титла: проблем с еднакви имена на споделени библиотеки
Публикувано от: phantomlord в Jul 04, 2008, 18:39
Имах подобен проблем с vmware, когато имаше две библиотеки с различни версии, но от един и същ тип. Реших го така:
Примерен код
LD_PRELOAD=/usr/lib/libdbus-1.so.3 vmware

Надявам се да те ориентира.





Титла: проблем с еднакви имена на споделени библиотеки
Публикувано от: gat3way в Jul 04, 2008, 20:18
Мдам, един шел скрипт дето ти вдига firefox-a и сетва преди това LD_PRELOAD е добра идея. Има един друг (тъп) вариант, който е удобен, но не е за препоръчване:

1) Единият firefox го правиш suid-нат. Не е задължително собственикът на binary-то да е root, дори хич не е препоръчително, просто трябва да е някой съществуващ потребител със съществуваща home директория
2) В /etc/ld.so.preload слагаш пълните пътища до .so файловете, използвани от другият firefox.
3) Спокойно можеш да си стартираш първият firefox, защото suid ELF binary-тата когато се зареждат и изпълняват, игнорират LD_PRELOAD и това в /etc/ld.so.preload.

Така няма да се занимаваш със шел скриптове дето ти стартират други версии на браузъра. Лошото е че се създава излишен хаос и когато забравиш за тази манипулация и си ъпдейтнеш браузъра през пакетния мениджър ще си имаш драми :)

Нооо така пък става :)

Между другото доста old-school рууткитове ползваха /etc/ld.so.preload за да hook-ват glibc функции и да се крият и да правят пакости :)


Титла: проблем с еднакви имена на споделени библиотеки
Публикувано от: iskren в Jul 05, 2008, 11:12
Мерси много за отговорите!
Вчера пробвах със LC_PRELOAD, но не се получи:
Примерен код
$ LD_PRELOAD='/usr/local/firefox3/' ./firefox-bin
ERROR: ld.so: object '/usr/local/firefox3/' from LD_PRELOAD cannot be preloaded: ignored.
./firefox-bin: error while loading shared libraries: libjemalloc.so: cannot open shared object file: No such file or directory

$LD_LIBRARY_PATH='/usr/local/firefox3/' ./firefox-bin #<-- това сработи


Интересното е че като ползвам скрипта firefox (а не директно изпълнимия firefox-bin) той някак си оправя нещата ... но го прегледах и не разбирам как точно го прави :)).

А пък за /etc/ld.so.preload ... там ако сложа един so файл ми излизат през 5 сек съобщения на конзолата че не може да го прелоудне - т.е това по скоро разбрах че опитва да зареди файлове в рамта, които евентуално ще се ползват за да се намали времето за стартиране.

За сега ще ползвам скриптовете (firefox) които преди не ползвах, защото като подам опция -p даваха грешка (после се оказа че за линукс трябва да е -profilemanager) и разреших проблема.