Czy istnieje łatwa metoda instalowania binarnych kompilacji glibc?


13

Raz po raz widzę takie pytania:

Oto typy rozwiązań, które zwykle proponujemy:

Czy to naprawdę najlepsze, co możemy zrobić? Czy nie istnieją binarne kompilacje GLIBC, które możemy po prostu rozpakować do katalogu, takiego jak /opt/myglibci ustawić $LD_LIBRARY_PATHlub cokolwiek i uruchomić dowolną aplikację, bez problemów?

Aplikacja, taka jak nowsze wersje Chrome (28+), które wydają się wymagać GLIBC 2.14?

UWAGA: Wątek zatytułowany: Google Chrome 29 wydany - Zainstaluj na RHEL / CentOS 6 i Fedorze 19/15 na tecmint.com, co ostatecznie skłoniło mnie do myślenia o tym.

Bibliografia

Odpowiedzi:


1

Gdyby to była jakaś inna biblioteka, ale glibc ... Przypuszczam, że nie ma szybkich sposobów, ponieważ glibc jest miejscem, w którym rzeczy są „zakodowane na stałe”. Glibc pasuje do twojej wersji jądra, a jego moduł ładujący jest instancją, która faktycznie robi właściwą rzecz (TM) LD_LIBRARY_PATH.

Może poprawnym sposobem jest:

LD_LIBRARY_PATH="/opt/myglibc/;..." /opt/myglibc/ld-linux.so.2 the_program`

Nie jestem jednak pewien, czy to działa.

W każdym razie myślę, że użycie alternatywnego glibc wymaga jeszcze implementacji frameworka, ponieważ ścieżki wyszukiwania są czasami okablowane, a glibc zawsze musi pasować do twojego systemu operacyjnego / jądra, więc nie może być ogólnych plików binarnych, IMO. Multiarch Debiana pokazuje, że nie jest to banalne, ale wciąż można to zrobić. Jeśli ktoś ma mieć inne sposoby rozpoznawania bibliotek oprócz architektury docelowej.

Witryna właśnie dała mi ten inny powiązany wątek:

Tam zaakceptowana odpowiedź zawiera link do programu o nazwie rtldi , który wydaje się rozwiązać problem glibc. Jest z 2004 roku, więc może już nie działa od linkera, ale może warto go przyjrzeć. Jego źródłem jest GPLv2.

Jehova, Jehova

Mój przyjaciel wpadł kiedyś na pomysł, że faktyczne wykorzystanie bibliotek współdzielonych jest przereklamowane. I ma on rację: biblioteki współdzielone są dobre, aby nie zapełniać pamięci komputera duplikatami, ale biorąc pod uwagę wystąpienie pojedynczej aplikacji, jest to tylko kilka MB.

Istnieje tylko kilka aplikacji, w których moglibyśmy zastosować takie działania, jak zapewnienie im własnego glibc. Oszczędzając nam długiej analizy nazwijmy je „aplikacjami natychmiastowymi”, które same są przydatne w sensie wykonywania pracy. Na przykład przeglądarki internetowe, pocztowe programy użytkownika, kombinezony biurowe i odtwarzacze muzyki pozwalają użytkownikowi uzyskać to, czego chcą, a na użytkownika przypada tylko kilka wystąpień. Aby zilustrować drugą stronę, usługi systemowe, menedżery okien, a nawet całe środowiska pulpitu są bardzo ważne, ale jedynie wsparcie i często niewystarczająco rzadkie lub krytyczne, aby ludzie byli gotowi dać im własne glibc.

Liczba „bezpośrednich aplikacji” jest raczej niewielka, absolutnie na użytkownika i względnie w porównaniu do tego, co „podstawowe” systemy operacyjne i DE pojawiają się obecnie. Gdyby bezpośrednie aplikacje, takie jak Chrome, Firefox zostały skompilowane statycznie, dodatkowe zapotrzebowanie na pamięć dla przeciętnego systemu wyniosłoby kilka 100 MB. Argument, który nie przenosi się zbyt daleko na dzisiejsze wiele systemów GB, więc statyczne połączenie dla natychmiastowych aplikacji może być opcją.

Istnieją również koncepcje przestrzeni wymiany i dysków SSD, które pozwalają na wyjątkowo szybką zamianę / wyjście, co również pomaga obsłużyć zwiększone zapotrzebowanie na pamięć.

Omawiany tutaj problem glibc nie jest tak naprawdę rozwiązany przez statyczne łączenie, ale dla aplikacji takich jak przeglądarka internetowa można sobie wyobrazić niezależny format dystrybucji, w którym jedynym interfejsem jest protokół X, demon dźwięku i niektóre jądra. Zaletą byłoby mniej niezgodności wersji bibliotek.


2
„Mówimy tutaj o kilku 100 MB” Uh, nie. Chociaż większość samych bibliotek może nie być tak duża (ale prawdopodobnie rzędu wielkości lub dwóch więcej niż 100 MB - spróbuj du -h /lib), należy pamiętać, że gdyby były one skompilowane statycznie, taka ilość pamięci RAM byłaby wymagana dla każdego i każda aplikacja z nimi skompilowana. Więc jeśli np. masz dwie aplikacje korzystające z tego samego stosu bibliotek, teraz potrzebujesz dwa razy więcej pamięci. Trzy aplikacje? Trzy razy tyle. Nie wspominając o tym, że w dużej mierze zniweczyłoby to korzyści płynące z buforowania ...
goldilocks

2
... ponieważ oczywiście nie można po prostu buforować glibc - musisz buforować kopie wszystkich uruchomionych aplikacji (== śmieszne). Krótko mówiąc, nowoczesne systemy operacyjne byłyby zupełnie niemożliwe na nowoczesnym sprzęcie, gdyby nie nowoczesne techniki, takie jak wspólne obiekty. Nie potrzebujesz trochę więcej pamięci - potrzebujesz 10 lub 100 razy więcej pamięci.
goldilocks

Mój Debian ma 235 MB /lib, z czego 202 MB to moduły jądra. Tak, /usr/libwynosi 4 GB, ale nie pozwala to na wyciągnięcie wniosków co do tego, ile wymaga dany program. Pamięci podręczne procesorów to tylko kilka MB. Przy zużyciu pamięci przez coś w rodzaju najnowszej przeglądarki internetowej wpływ statycznie połączonych plików binarnych na buforowanie również nie jest tak duży i maleje wraz z ilością programów działających jednocześnie; również ze względu na stosunkowo małe skrzynki. Moje szacunki wydają się bardziej dokładne niż twoje. Tak.
Bananguin

Nie wspominając już o innym ogromnym problemie z łączeniem statycznym - aktualizacje to PITA. Jeśli w glibc występuje problem bezpieczeństwa, nic wielkiego: zaktualizuj glibc, uruchom ponownie programy. OTOH, gdyby Twoje programy były statycznie powiązane, musisz pobrać nową wersję każdego programu. A Twoja dystrybucja musiałaby ponownie skompilować (lub przynajmniej ponownie połączyć, gdyby zachowały wszystkie pliki .o, mało prawdopodobne ze względu na duży rozmiar) całą dystrybucję.
derobert

1
@derobert: Wydaje się sprawiedliwy. Najwyraźniej moje twierdzenia były hiperboliczne - tutaj przy 1,8 GB pamięci, która wypluła 521 MB. Byłby to wzrost o 30%. Oczywiście nadal nie jest to zaletą strategii, która nie ma zalet (ale „wymaga tylko 30% więcej pamięci RAM”).
goldilocks
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.