Am Mittwoch, 08. Februar 2017 13:05 CET, "Arno Steffens" epsi@gmx.de schrieb:
Hallo Flugis,
bekomme mit meinem System ein bisschen Platzprobleme (nur ca 6MB verfügbar). Ich baue mein Linux mit Yocto (core-image-minimal) womit ich bei (komprimert uramdisk.image.gz) bei ca 3MB bin.
Das klingt nach embedded system ... chaut man auf den Platzbedarf: den meisten benötigen libs und Programme
Mir bleibt nichts anderes übrig, als alle ausführbaren Programme durchzugehen und nicht benutzte löschen. Dann muss man hoffen, dass nicht ein binary das andere aufruft oder es in einem besonderen Anwendugsfall nicht doch noch gebraucht wird.
Tricky
Für die libs habe ich folgendes geniales script gefunden:
find / -type f -perm /a+x -exec ldd {} ; | grep so | sed -e '/^[^\t]/ d' | sed -e 's/\t//' | sed -e 's/.*=..//' | sed -e 's/ (0.*)//' | sort | uniq -c | sort -n
Damit kann man alle libs auflisten und wie oft sie verwendet werden. Nicht verwendete libs kann man entfernen. Oder muss man damit rechnen, das es eine lib eine andere verwendet?
Hmm, ganz so trivial ist das nicht - Dein grep-pattern findet u.U. zu viel. Ausserdem musst Du das rekursiv machen, d.h. für jede gefundene Library musst Du auh wieder sehen welche Libs sie lädt. Zyklen sollte es eig. nicht geben, es schadet aber nicht im Script darauf zu testen. Ab jetzt wird's schwierig: erstens kann ein Programm ein anderes aufrufen (das könntest Du gegebenenfall mit 'strings prog | grep /bin' herausfinden), ausserdem gibt's noch Programme die Libraries zur Laufzeit nachladen (mit dlopen), gerne Module oder Plugins genannt.
Bei Debian gibt's dh_shlibdeps mit dem man rausfinden kann welche Pakete benötigt werden um die Software in einem Pakte laufen zu lassen. Das ist ein Perlscipt das im Prinzip genau das mach (alle benötigten Libs finden), dann allerdings noch nachsieht welches Deb-Paket diese Libs liefert.
Gruss RalfD