Jestem świadomy ogólnych podstaw korzystania z ldconfig
i LD_LIBRARY_PATH
, ale mam nadzieję na małą pomoc guru w mojej sytuacji.Prawidłowe użycie LD_LIBRARY_PATH lub ldconfig dla pakietu oprogramowania
Mam przenośny pakiet oprogramowania, który znajduje się we własnym katalogu i ma własne wersje wielu bibliotek.
Istnieje wiele plików binarnych i skryptów uruchamianych z tego katalogu.
Niektóre pliki binarne (apache, php, postgres) mogą również mieć oddzielne wersje zainstalowane w systemie.
Ponieważ mogą występować dwie wersje php, nie wystarczy utworzyć /etc/ld.so.conf.d/myapp.conf
, jeśli system nie może określić, której wersji "myapp" należy użyć do pliku ldconfig.
Szukam najlepszych praktyk dotyczących konfiguracji takiego systemu. Osoba, która początkowo ustawiła pakiet oprogramowania, wyeksportowała numer LD_LIBRARY_PATH
, aby wszystkie aplikacje w systemie z niego korzystały.
Próbuję odizolować tylko aplikacje w katalogu pakietów.
Niektóre parametry do pracy z:
/mypack
- zawiera wszystko dla pakietu oprogramowania
/mypack/local/lib
- zawiera wymaganych bibliotek, które mogą nie być kompatybilne z systemem
przykład biblioteka:
/mypack/local/lib/libz.so.1 => /mypack/local/lib/libz.so.1.2.3
/lib/libz.so.1 => /lib/libz.so.1.2.3
mimo że wersje są takie same, ten w/mypack może nie być kompatybilne z dystrybucji i złamie systemu, jeśli jest używany
przykład binarny: php istnieje zarówno w/mypack w domyślnym katalogu php z/mypack powinien wykorzystać bibliotekami z/mypack/local/lib i wersja dystrybucyjna powinna używać/lib
Kilka pytań o ścieżki biblioteki linuksowej: - Czy możliwe jest podanie /etc/ld.so.conf.d/php.conf tak, aby miało wpływ tylko na wersję php w/mypack ? - Czy ścieżka biblioteki może być określona na podstawie położenia pliku wykonywalnego? Oznacza to, że w czasie wykonywania, jeśli ścieżka do pliku wykonywalnego jest pod/mypack, czy może automatycznie korzystać z bibliotek? - A co z użytkownikiem? Niektóre/większość systemu działa na różnych kontach użytkowników. Gdybym był w stanie ustawić inną ścieżkę biblioteki na użytkownika, to by to rozwiązało.
myślę typowe podejście jest używać skryptu otoki. Skrypt wrapper ustawia wartość LD_LIBRARY_PATH, a następnie uruchamia plik wykonywalny. Spójrz na google-chrome na przykład. –
Jeśli to jedyny sposób, w jaki ktoś wymyśli, pójdę z tym. Już teraz uruchamiam Chrome 28 w CentOS, ale ze względu na liczbę różnych plików wykonywalnych starałem się tego uniknąć. – thatthatisis