LINUX.ORG.RU
ФорумAdmin

Минимальная компиляция glibc: как правильно?

 , ,


1

2

Хочу собрать glibc в минимальном размере. Дефолтная инсталяция make install занимает 178 мегабайт, хочется ужаться где-то до 2.

В glibc идут всякие штуки, которые мне для моей задачи не нужны абсолютно: sunrpc, hesiod, crypto и т.п.

План собрать маленькую glibc + busybox + dropbear и получить initramfs где-то мегабайт на 4-5 что бы быстро грузилось по PXE.

Меня удивило полное отсутствие туториалов. Обычно накопипастишь с серверфолта из первой половины страницы (где правильные ответы) и что-то работает, а тут полный ноль. Единственное упоминание попыток уменьшить размер установки glibc — https://wiki.netbsd.org/tutorials/how_to_reduce_libc_size/

Это очень круто, но не то.

В glibc при установке образуется куча всякого хлама, который в теории нужен десктопу, но никак не нужен изолированному серверу: iconv, gconv, локали, инклюды и т.п.

Есть какие-то правильные механизмы по сборке и упаковке glibc для минимального размера?

В glibc идут всякие штуки, которые мне для моей задачи не нужны абсолютно: sunrpc, hesiod, crypto и т.п.

Может тогда попробовать что нибудь другое? https://www.musl-libc.org/

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

я хочу что бы софт, который уже собран под glibc, так и запускался.

musl интересно, alpine и всё такое, но кажется, что всё под него перекомпилировать, будет дольше.

Руками то я вычистил libc, осталось 4 мегабайта. Т.е. добиться чего-то приличного можно.

max_lapshin ★★★★★
() автор топика

Какие 178Mb ?

PACKAGE NAME:     glibc-solibs-2.29-x86_64-3
COMPRESSED PACKAGE SIZE:     2.7M
UNCOMPRESSED PACKAGE SIZE:     14M
PACKAGE LOCATION: glibc-solibs-2.29-x86_64-3.txz
И оттуда нужно выкинуть почти весь usr/lib64/gconv - это 7 Мб из 14

Но все равно, glibc очень толстая и busybox собранный с ней тоже толстый.

Есть другие реализации libc ориентированные на минимум места и фичь (типа musl libc, uClib, dietlibc)

У uClinux есть готовый «стартовый» пакет и среда для сборки.

vel ★★★★★
()

Нет правильной инструкции сборки минимального glibc. Делай и проверяй работоспособность сам. Поиск по интернетам выдал старую статью 2001 года https://www.linuxjournal.com/article/5457. Возможно вытащишь что-нибудь полезное для экспериментов.

anonymous
()

Глянул, что у нас в slitaz:

glibc-base-2.28-i486.tazpkg
packed: 1.8 MB
unpacked: 7.8 MB

Хз, дальше наверное только играться со штуками типа LTO.
Ну или действительно переходить на musl.

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

План собрать маленькую glibc + busybox + dropbear и получить initramfs где-то мегабайт на 4-5 что бы быстро грузилось по PXE.

я хочу что бы софт, который уже собран под glibc, так и запускался.

Ты уж определись, чего ты хочешь.

devl547 ★★★★★
()
Ответ на: комментарий от RazrFalcon
$ equery s glibc
 * sys-libs/glibc-2.28-r6
         Total files : 1808
         Total size  : 55.37 MiB

Файлов больше, размер в 2,5 раза меньше. Как так-то?

anonymous
()
$ find toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/ -name libc.so*
toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/libc.so
toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/libc.so.6

$ stat toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/libc.so
  File: toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/usr/lib/arm-linux-gnueabihf/libc.so
  Size: 289             Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d      Inode: 45755958    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/ UNKNOWN)   Gid: ( 1001/ UNKNOWN)
Access: 2019-04-22 11:23:52.197259710 +0300
Modify: 2014-09-11 17:14:20.000000000 +0400
Change: 2019-01-22 16:30:30.158577815 +0300
 Birth: -
anonymous
()

правильно не использовать glibc в embedded

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

вот по ходу всё так =(

Если вдруг решу остаться на glibc, то значит здоровенный скрипт, стирающий всё что можно.

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon
 * sys-libs/glibc-2.28-r6
         Total files : 1910
         Total size  : 60.64 MiB

Похоже благородный дон не прописывает локаль в /etc/locale.gen и собирает все ~600 локалей или сколько их там нынче :-)

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

У меня там только:

en_US ISO-8859-1
en_US.UTF-8 UTF-8
~> du -h /usr/lib64/gconv/
6.4M    /usr/lib64/gconv/
~> du -h /usr/share/i18n/
17M     /usr/share/i18n/

Правда у меня splitdebug включен для glibc, чтобы отладка работала. Видимо из-за этого.

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

Предлагаешь собирать весь мир с USE=«debug» про запас? Спасибо, я не готов жертвовать даже такой мизерной производительностью. Если что-то начнет сегфолтится - тогда и будем разбираться - в том числе и пересобирать

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

есть куча legacy-софта которая включает особые отладочные сообщения, если собрана с определенными опциями

И да, так делают только мудаки, нормальные люди задают это конфигурационной опцией

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

отладочные символы включаются добавлением -ggdb к CFLAGS и splitdebug compressdebug к FEATURES в make.conf, а USE debug это про другое

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

Я в курсе, просто обычно одно без другого бесполезно. По крайней мере USE=«debug» без отладочных символов - ну такой себе будет дебаг...

Pinkbyte ★★★★★
()
2 июня 2019 г.

План собрать маленькую glibc + busybox + dropbear и получить initramfs где-то мегабайт на 4-5 что бы быстро грузилось по PXE.

uClibc. В поставке имеется config чтобы оставить только нужное.

Не забываем что busybox тоже можно/нужно конфигурировать.

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