Есть ли простой способ установки двоичных сборок glibc?

13

Снова и снова я вижу такие вопросы:

И вот типичные решения, которые мы обычно выдвигаем:

Это действительно лучшее, что мы можем сделать? Разве не существует двоичных сборок GLIBC, которые мы могли бы просто распаковать в такой каталог, как /opt/myglibc, и установить $LD_LIBRARY_PATHили что-то еще, и запустить любое приложение, которое мы хотим, без проблем?

Приложение, такое как более новые сборки Chrome (28+), для которых требуется GLIBC 2.14?

ПРИМЕЧАНИЕ. Эта тема под названием: Выпущен Google Chrome 29 - установка на RHEL / CentOS 6 и Fedora 19/15 на tecmint.com заставила меня задуматься об этом.

Ссылки

SLM
источник

Ответы:

1

Если бы это было для любой другой библиотеки, но glibc ... Я полагаю, что не может быть быстрых путей, потому что glibc - это место, где вещи "жестко запрограммированы". Glibc подходит для вашей версии ядра, а его загрузчик - это тот экземпляр, с которым на самом деле все правильно (TM) LD_LIBRARY_PATH.

Может быть, правильный путь заключается в:

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

Не уверен, что это работает, хотя.

В любом случае, я думаю, что использование альтернативного glibc требует еще реализации фреймворка, потому что пути поиска иногда связаны и glibc всегда должен соответствовать вашей ОС / ядру, поэтому не может быть общих двоичных файлов, IMO. Мультиархарх Debian показывает, что это не тривиально, но все же можно сделать. Если бы у кого-то были другие средства распознавания библиотек, помимо целевой архитектуры.

Сайт только что дал мне эту другую связанную тему:

Там принятый ответ содержит ссылку на программу rtldi , которая, похоже, решает проблему с glibc. Это с 2004 года, так что он может больше не работать прямо из компоновщика, но, возможно, его стоит изучить. Его источник - GPLv2.

Иегова, Иегова

Мой друг однажды пришел к мысли, что фактическое использование общих библиотек переоценено. И у него есть смысл: общие библиотеки хороши, чтобы не заполнять память вашего компьютера дубликатами, но, учитывая отдельный экземпляр приложения, это всего лишь несколько МБ.

Существует всего несколько приложений, в которых мы могли бы прибегнуть к таким действиям, как предоставление им собственного glibc. Для экономии времени мы будем называть их «непосредственными приложениями», которые сами по себе полезны в смысле выполнения работы. Например, веб-браузеры, почтовые агенты, офисные костюмы и музыкальные проигрыватели позволяют пользователю получить то, что он хочет, и на пользователя приходится всего несколько экземпляров. Для портретирования другой стороны очень важны системные службы, оконные менеджеры и даже целые десктопные среды, но они просто поддерживают и зачастую не достаточно необычны или критичны, так что люди захотят дать им свой собственный способ.

Количество «непосредственных приложений» довольно мало, абсолютно на пользователя и сравнительно с тем, что «основные» ОС и DE порождают в наши дни. Если бы непосредственные приложения, такие как Chrome, Firefox, были скомпилированы статически, дополнительная потребность в памяти для средней системы составила бы несколько 100 МБ. Аргумент, который не слишком далеко заходит во многих современных системах GB, поэтому статическое связывание для непосредственных приложений может быть вариантом.

Существуют также концепции пространства подкачки и твердотельных накопителей, которые предусматривают быструю перестановку / вывод, что также помогает справиться с возросшим требованием к памяти.

Обсуждаемая здесь проблема glibc на самом деле не решается при статическом связывании, но для таких приложений, как веб-браузер, возможен своего рода автономный формат распространения, где единственным интерфейсом является протокол X, некоторый звуковой демон и некоторые методы ядра. Преимущество будет меньше несовместимости версии библиотеки.

Bananguin
источник
2
"мы говорим о нескольких 100 МБ здесь" Э-э, нет. Хотя объем самих библиотек может быть не таким большим (но, вероятно, на порядок или два больше, чем 100 МБ - попробуйте du -h /lib), имейте в виду, что если бы они были скомпилированы статически, то объем ОЗУ требовался бы для каждого и каждое приложение, скомпилированное с ними. Так что, если, например. у вас есть два приложения, использующих один и тот же стек библиотеки, теперь вам потребуется вдвое больше памяти. Три приложения? В три раза больше. Не говоря уже о том, что это в значительной степени сведет на нет преимущества кэширования ...
Златовласка
2
... поскольку, конечно, вы не можете просто кэшировать glibc - вам придется кэшировать копии всех запущенных приложений (== нелепо). Короче говоря, современные операционные системы были бы совершенно невозможны на современном оборудовании, если бы не современные методы, такие как общие объекты. Вам не понадобится чуть больше памяти - вам понадобится в 10 или 100 раз больше памяти.
Златовласка
Мой Debian имеет 235 МБ /lib, из которых 202 МБ являются модулями ядра. Да, /usr/libэто 4 ГБ, но это не дает точных выводов о том, сколько требует отдельная программа. Кэши процессоров составляют всего несколько МБ. С потреблением памяти чем-то вроде недавнего веб-браузера влияние статически связанных двоичных файлов на кеширование также не так велико и уменьшается с количеством одновременно работающих программ; также по причине относительно небольших кешей. Мои оценки кажутся более точными, чем ваши. О да.
Bananguin
Не говоря уже о другой огромной проблеме со статическим связыванием - обновления - это PITA. Если в glibc есть проблема с безопасностью, ничего страшного: обновите glibc, перезапустите свои программы. OTOH, если бы ваши программы были статически связаны, вам нужно было бы загрузить новую версию каждой программы. И вашему дистрибутиву пришлось бы перекомпилировать (или, по крайней мере, заново связать, если бы они сохраняли все файлы .o, маловероятно из-за огромного размера) весь дистрибутив.
Дероберт
1
@derobert: кажется честным. Ясно, что мои требования были гиперболическими - здесь с 1,8 ГБ выделено 521 МБ. Так что это будет увеличение на 30%. Конечно, это еще не точка продажи для стратегии, которая не имеет преимуществ (но «требует только 30% больше оперативной памяти»).
Златовласка