Am Mittwoch, 08. Februar 2017 13:05 CET, "Arno Steffens" <epsi(a)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