LINUX.ORG.RU

Как собрать полностью независимый бинарник?


0

2

Добрый день,

Есть сервер RHEL 5.0 и надо поставить на нем rtorrent, в репозитории такой пакет есть, но уж больно дремучая версия, а новые из svn не компилируются изза устаревших библиотек, обновить сервер до 5.4 нет возможности. Я решил собрать статический билд rtorrent у себя на генту и перенести его в RHEL, но конфигурация и последующая компиляция с ключем --enable-static собирают 20МБ файл, который по прежнему зависит от все тех же библиотек, что я делаю не так подскажите, пож)

Спасибо


--enable-static включает статику только для тех библиотек которые собираются в этом же пакете

попробуйте

export LDFLAGS="-static"

./configure аргументы
make

но это потребует чтобы были _все_ нужные библиотеки в статическом виде


другой вариант

statifier (бесплатен, но может не работать) / magicErmine (платная...)

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

Те нужно пересобрать весь world с флагом LDFLAGS="-static"? Я смотрел в каталоге библиотек - статические версии *.а есть в наличии в том числе те, от которых есть зависимость.

Пробовал я magicErmine, он за секунду создает рабочий бинарник и он запускается на другой машине, но к сожалению в нем обнаружился какойто баг - ошибка закачки торрента, если в нем есть несколько фалов или каталоги, с одним фалом работает, а если больше - ни в какую))) Общался сегодня с автором этой чудо-программы, он пишет, что у него работает rtorrent.ermine. Было бы здорово, если бы и у меня заработал, но пока увы)

statifier - непонял как им пользоваться, столько скриптов и никакого внятного хелпа)

Sunny
() автор топика
Ответ на: комментарий от Sunny

>Те нужно пересобрать весь world с флагом LDFLAGS="-static"
нет , только rtorrent , хотя это не поможет, я уже проверила, он все равно нацеплял много динамических библиотек


statifier исходный_бинарник результирующий_статический_бинарник

хотя он хуже чем magicErmine по результатам обычно.


мне кажется вам проще взять и перенести все нужные библиотеки в /usr/local/lib

чтобы не было конфликтов с CentOS переносите только сами файлы библиотек, без симлинков, делаете ldconfig, он создаст симлинки для мажорной нумерации версий, .so он не создает, при компоновке используются только .so

совсем безопасный вариант - перенести куда-нибудь в отдельный каталог
например
/usr/local/rtorrent-libs
(с симлинками на мажорную версию, но без симлинка на .so)
и перед запуском выставлять

export LD_LIBRARY_PATH=/usr/local/rtorrent-libs


Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

впрочем, такой перенос тоже может не работать, если у вас в генте новая Glibc , а в CentOS старая, и при сборке-компоновке библиотек были использованы новые функции Glibc (fallocate() например)

обманом можно запускать через ld-linux.so.2 напрямую, но возможно что и chroot вариант предложенный sdio тут окажется проще

Sylvia ★★★★★
()
Ответ на: комментарий от sdio

Просто перенести бинарники библиотек и rtorrent'a на другую систему, сделать chroot к другому корню и новый rtorrent будет работать на старой системе? заманчиво)

Sunny
() автор топика
Ответ на: комментарий от Sunny

так будет проще, чем устраивать частичный перенос библиотек и обман ld-linux.so.2 с подгрузкой другой версии glibc с нестандартного места...

Sylvia ★★★★★
()

>обновить сервер до 5.4 нет возможности.

Сохраняйте /etc и ставьте centos и не парьте себе и людям моск.

KPSS
()
Ответ на: комментарий от Sylvia

Перенес все библиотеки и bash, и организовал обычное дерево генту, делаю chroot в нужный каталог и вылетаю с сегфолтом) Как называется проект, который создает обычное окружение генту под любой ОС, вы не помните?)

Sunny
() автор топика
Ответ на: комментарий от Sunny

>Как называется проект, который создает обычное окружение генту под любой ОС

stage3?

edigaryev ★★★★★
()

>новые из svn не компилируются изза устаревших библиотек

Ну, можешь попробовать собрать новые в отдельном дереве (типа /usr/local/newsoftware) и поставить туда rTorrent. Там же не то чтобы совсем все библиотеки были дремучие. Или даже libc не подходит?

proud_anon ★★★★★
()

> обновить сервер до 5.4 нет возможности.

Это, кстати, почему?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.