LINUX.ORG.RU

поиск неиспользуемых либ

 , ,


0

4

есть кастомная сборка rootfs (buildroot). хочется ее максимально облегчить. нашел несколько неиспользуемых сошек, которые нельзя отключить в конфигах билдрута. править конфиги я не хочу. решил их выкинуть перед сборкой образов. вопрос в том, как пройтись по всем elf-ам и поискать либы, которые никто не линкует. динамическую загрузку через dlopen в расчет не беру. самописный костыль показал, что все не так просто, у либ куча симлинков, в линковке используется soname и тд. мб есть какое то стандартное решение?

в рантайме чтоль maps посмотреть… такое себе, да и в ci не воткнешь. херня, оно ж только либы демонов покажет…

★★★★★

Последнее исправление: vvviperrr (всего исправлений: 3)

Любопытно. А что не просто?

у либ куча симлинков, soname

так учти в костыле

Финдом пройдись по бинарям – составь список всего что используется. Далее пройдись по сошкам, которые используются бинарями и добавь в список используемого все, что используют они. Финдом же составь список симлинков, оставь только те, что используются. Ну и все – ищи все сошки, если нет в списке используемых – в дев нулл. Понятно, что упрощаю, но выглядит как задача для 20-строчника на баше.

Был бы я прыщавым девственником – не смог бы побороть любопытство и попробовал написать бы. А так – пойду посплю (

подписываюсь на тему – любопытно

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

кстати да, надо все используемое напихать в один большой список + туда же их симлинки и soname, так правда проще. спс!

так учти в костыле

ну вот в моем текущем костыле это не просто оказалось сделать. да и лень. думал мб есть стандартное решение

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

как пройтись по всем elf-ам и поискать либы, которые никто не линкует.

Мой снипет, выведет список слинкованных

sparks ★★★★
()

что-то я сомневаюсь, что в билдруте собираются неиспользуемые либы

может они для хоста собираются, а не для имеджа

облегчить можно за счет удаления ненужных модулей ядра

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

ну к примеру wpa_supplicant тянет пакет libnl. libnl-idiag, libnl-nf никто не использует, но они собираются, и через конфиг libnl не отключаются.

может они для хоста собираются, а не для имеджа

я могу отличить директорию target от host, спасибо.

облегчить можно за счет удаления ненужных модулей ядра

хосспаде… ядро кастом, модули используются только необходимые. у меня весь рутфс в сквоше занимает 30мб. нужно меньше.

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

да уже накосылял. помогло найти 1 ненужный пакет, который пришел зависимостью + неиспользуемые либы на 200кб. в сквоше еще меньше будет. пшик.

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

А что ты будешь делать с библиотеки которые не слинкованы а подгружаются через dlopen, типа nss или pam?

no-dashi-v2 ★★★
()
Ответ на: комментарий от no-dashi-v2

выше писал, что пофиг. я просмотрел бинари, которые используют libdl, и которые это могут сделать. из таких у меня только gstreamer, который грузит свои плагины по необходимости. их я просто исключил из списка всех либ.

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

Финдом пройдись по бинарям – составь список всего что используется. Далее пройдись по сошкам, которые используются бинарями

Программа может dlopen делать, тот же PAM например вроде. Отвалится аутентификация и можно в рут бе пароля войти после чистки такой =)

Надёжа только на пакетный менеджер. apt autopurge или типа того или gentoo с его use флагами + пересборкой мира, но там надо знать что выпиливать.

А итог будет скорее всего околоникакой.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от LINUX-ORG-RU

Тогда ручками прописывать исключения.

// а, нет, можно запислить свою реализацию прослойку dlopen ! :)

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

у меня весь рутфс в сквоше занимает 30мб. нужно меньше

сомневаюсь что наберётся такое количество не используемых либ что бы заметно уменьшить, думаю strip уже используется, а так самый действенный метод - собирать всё самому, это обеспечит полный контроль

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

выше написал, разумеется не набралось. зато нашел пакет, либа которого попадала в staging, хотя никем не используется.

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

А поделись, если имеешь возможность, накостыляным. Спасибо.

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

рутфс в сквоше занимает 30мб. нужно меньше.

Так поставь задачу корректно - уменьшить размер образа, а не «вычистить ненужные либы»

Мы в Slitaz вон систему с иксами утрамбовали в такой размер - и то есть ещё куча способов поджать.

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

Так поставь задачу корректно - уменьшить размер образа, а не «вычистить ненужные либы»

это один из шагов, как уменьшить размер образа. мне не нужны советы в стиле натрави strip, пойдись по модулям ядра и тп.

Мы в Slitaz вон систему с иксами утрамбовали в такой размер - и то есть ещё куча способов поджать.

у меня в системе gstreamer + ffmpeg + bluez, естественно все уже кастрировано, неиспользуемые пакеты выпилены, опции сборки проброшены и тд. даже на musl перешел вместо glibc, что освободило ~1мб. есть вещи, которые нельзя использовать в силу особенности прошивки (например статическую линковку).

и то есть ещё куча способов поджать

слушаю внимательно

скрести по сусекам, точечно отключая опции сборок пакетов, которые не проброшены в config.in мне пока не хочется.

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

ты просто ламеришь. Если ты не знаешь, что и куда, зачем и почему, то ползи на профильный форум или Ирку. К тем, кто этим занимается. Можно не скопом а по каждой программе. И модули в ядре - это фейл.

Чтобы не быть многословным, можешь зайти на crux.nu и посмотреть опции сборки того или иного пакет, depends и т.д. Спросить на Libera (хотя пацаны заняты следующей версией своего дистра). Если на musl - welcome to Alpine. Тоже шарят.

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

точечно отключая опции сборок пакетов,

А без этого вообще никак.

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