LINUX.ORG.RU

[проект] Переносимый фреймворк из GNU-утилит и библиотек для разработчика

 


0

0

Всем привет!

Некоторое время назад у меня появилась идея собрать набор базовых средств разработки (gcc и основные библиотеки), который можно было бы установить параллельно с теми, которые уже есть в системе. Идея была успешно воплощена в жизнь, в результате появился проект "Суверен", можно почитать об этом тут:
http://sgn.sourceforge.net/readme_rus.html
http://sourceforge.net/projects/sgn

Вкратце: утилиты/библиотеки устанавливаются в директорию /opt/sgn, и зависят _только от библиотек из /opt/sgn. Благодаря этому можно просто скачать прекомпилированный архив с "Сувереном", распаковать его в /opt/sgn, и сразу приступать к работе. Единственное требование к системе - чтобы ABI ядра был совместим с прекомпилированной glibc.

По сути система представляет собой набор скриптов для сборки пакетов (а-ля e-build'ов). Процесс сборки с особым префиксом взят из документации к "Linux from scratch".

Вот список причин, почему это может быть удобно (взято с веб-страницы):

* Библиотеки и утилиты в дистрибутиве, который вы используете,
устарели (нет возможностей, присутствующих в последних версиях; API устарел; есть известные ошибки), и вы хотите установить более новую версию, не поломав при этом существующую инсталляцию Linux;
* В выбранный вами дистрибутив включена новая версия библиотеки/утилиты, в которой есть регрессии по сравнению с предыдущими версиями. Вы хотите работать с одной из предыдущих версий, не нарушая при этом целостность дистрибутива;
* Вам нужна утилита/библиотека, которая не входит в установленный дистрибутив Linux, и при этом конфликтует с некоторыми из установленных пакетов;
* При работе вы используете сразу несколько компьютеров (пару ноутбуков и десктопов, офисную рабочую станцию, дюжину серверов в тестовом кластере и т.п.), и не хотите заниматься сопровождением и синхронизацией установленных на этих компьютерах дистрибутивов;
* Тип используемого дистрибутива Linux устанавливается политикой компании, и вы не хотите тратить время на его настройку и проверку того, что всё работает так, как надо;
* У вас есть сервер, на котором не установлены -devel-пакеты (и, возможно, нет gcc), и вы хотите скомпилировать и запустить программу, не устанавливая при этом никаких дополнительных пакетов.

В состав фреймворка можно включить всё, что угодно, потому что он модульный. Сейчас состав пакетов такой:

atk-1.9.1.sgn
binutils-2.18.sgn
bzip2-1.0.4.sgn
cairo-1.2.6.sgn
cups-1.2.12.sgn
fontconfig-2.5.0.sgn
freetype-2.3.5.sgn
gcc-4.1.2+gm2-cvs_07-12-20_10-57.sgn
gcc-4.2.2.sgn
glib-2.12.13.sgn
glibc-2.7.sgn
gtk+-2.10.14.sgn
jpegsrc.v6b.sgn
libpng-1.2.8.sgn
libxml2-2.6.30.sgn
linux-headers-2.6.23.8.sgn
pango-1.16.4.sgn
pkg-config-0.20.sgn
tiff-3.7.4.sgn
xlib-7.3.sgn
xproto-7.3.sgn
zlib-1.2.3.sgn

Может заинтересует кого-нибудь?


Ответ на: комментарий от ale

Сейчас скомпилированы под x86, но скрипты сборки от архитектуры не зависят, просто у меня везде установлены 32bit-дистрибутивы. В идеале готовая система собирается одной командой, я уже успешно так собирал на Ubuntu 7.04 и RHEL 5.1.

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

К сожалению, статической линковкой в моём случае обойтись нельзя. Мне нужно работать с версией gcc, не совместимой с glibc в хост-системе (glibc жалуется в рантайме), поэтому как минимум нужно пересобирать gcc и glibc, а это, если не рассчитывать "на авось", тянет за собой всё остальное из-за ABI. С такими затруднениями я не раз сталкивался за последние несколько лет, и описанный фреймворк позволяет с этим справиться.

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

>Сейчас скомпилированы под x86, но скрипты сборки от архитектуры не зависят, просто у меня везде установлены 32bit-дистрибутивы. В идеале готовая система собирается одной командой, я уже успешно так собирал на Ubuntu 7.04 и RHEL 5.1.

сори, неверно написал, может ли target-система gcc отличаться от host-системы (собирать под arm из под x86) или же это просто набор базовых библиотек для совместимости.

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

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

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

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

Хм, а программист работает на девелоперской тачке с правами nobody? Он не имеет прав установить или потребовать установить туда нужные библиотеки?

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

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

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

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