Próbuję skonfigurować OpenWrt na moim urządzeniu i brakuje mi miejsca. Pobrałem kilka pakietów narzędzi. Jak teraz określić ich wagi, aby zdecydować, co odinstalować?
Czy można wyświetlić rozmiar zainstalowanych pakietów za pomocą OPKG?
Próbuję skonfigurować OpenWrt na moim urządzeniu i brakuje mi miejsca. Pobrałem kilka pakietów narzędzi. Jak teraz określić ich wagi, aby zdecydować, co odinstalować?
Czy można wyświetlić rozmiar zainstalowanych pakietów za pomocą OPKG?
Odpowiedzi:
Nie każde środowisko OpenWrt jest skonfigurowane w ten sam sposób, więc moja odpowiedź to strzał w ciemność ...
Przykładowe dane wyjściowe pochodzą z OpenWrt-12.09 na „TP-Link TL-WDR4300”.
ssh do routera.
Sprawdź swoje zestawy plików.
root@AP9:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 5184 2124 3060 41% /
/dev/root 2048 2048 0 100% /rom
tmpfs 63340 948 62392 1% /tmp
tmpfs 512 0 512 0% /dev
/dev/mtdblock3 5184 2124 3060 41% /overlay
overlayfs:/overlay 5184 2124 3060 41% /
/dev/sda1 31234700 593536 29075728 2% /mnt/sda1
/dev/sda1 jest karta micro SD mojej pamięci UMTS ... po prostu zignoruj to.
Wiele routerów jest flashowanych w podobny sposób, jak pokazano tutaj: System plików root tylko do odczytu jest pseudo zapisywalny przez system plików nakładki.
Zajrzyj do środka /overlay...
root@AP9:~# cd /overlay/usr/lib/opkg/info/
root@AP9:/overlay/usr/lib/opkg/info# ls *.list | tail -3
usb-modeswitch-data.list
usb-modeswitch.list
zlib.list
Ten katalog zawiera informacje o dodatkowo zainstalowanych pakietach. Pliki kończące się na .listsą listami plików zainstalowanych przez pakiet o podobnej nazwie (bez .list):
root@AP9:/overlay/usr/lib/opkg/info# cat zlib.list
/usr/lib/libz.so.1.2.7
/usr/lib/libz.so.1
/usr/lib/libz.so
Pakiet zlibma zainstalowane 3 pliki.
root@AP9:/overlay/usr/lib/opkg/info# du $(cat zlib.list)
71 /usr/lib/libz.so.1.2.7
1 /usr/lib/libz.so.1
1 /usr/lib/libz.so
Pakiet zlibma 73 KB zainstalowanych plików.
Surowy 1-liniowy klej do sklejenia tego wszystkiego razem i jego skrócona wydajność:
# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";while(C|getline>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J);print s"\t"P}print t"\t---TOTAL---"}'
26 blkid
30 block-mount
17 chat
55 comgt
6 kmod-fs-exportfs
(((...some lines skipped...)))
14 portmap
48 swap-utils
223 usb-modeswitch-data
45 usb-modeswitch
73 zlib
4184 ---TOTAL---
HTH!
Dodano 17.10.2014:
Poniższe dane wyjściowe pochodzą z OpenWrt-12.09 na „TP-Link TL-WR703N” i pokazują, jak dodać sortowanie danych wyjściowych według wielkości pakietu.
Zobacz, gdzie i jak zmienna Swchodzi do gry ...
# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";S="sort -n";while(C|getli
ne>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J)
;print s"\t"P|S}close(S);print t"\t---TOTAL---"}'
5 kmod-lib-crc16
5 luci-proto-3g
12 libuuid
13 kmod-usb-serial-wwan
17 chat
24 kmod-usb-acm
24 libusb
26 blkid
30 block-mount
41 kmod-usb-serial
45 usb-modeswitch
48 kmod-usb-serial-option
48 swap-utils
55 comgt
67 kmod-usb-storage
148 libblkid
154 kmod-scsi-core
223 usb-modeswitch-data
382 kmod-fs-ext4
1367 ---TOTAL---
Ponownie: HTH!
Dodano 13.01.2018:
Powyższy sposób został przetestowany na OpenWrt-AA.
Teraz, patrząc na LEDE-17.01, zmieniła się ścieżka: zastąpienie /overlaygo /overlay/uppernaprawia to.
Status quo ( opkg-list-user-installed-sorted-by-sizenie jako 1-liniowy):
#!/usr/bin/awk -f
BEGIN {
D="cd /overlay/upper/usr/lib/opkg/info&&"
C=D"ls *.list"
S="sort -n"
while(C|getline>0) {
P=substr(F=$1,1,length($1)-5)
J=D"du -sk $(cat "F")"
s=0
while(J|getline>0) {
s+=$1
t+=$1
}
close(J)
print s"\t"P|S
}
close(S)
print t"\t---TOTAL---"
}
Testowe uruchomienie:
root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8 luci-ssl
9 libustream-mbedtls
13 px5g-mbedtls
338 libmbedtls
368 ---TOTAL---
Pytanie otwarte: Kiedy nastąpiła ta zmiana w /overlaystrukturze? LEDE-17 jest następcą OpenWrt-CC i nie mam pod ręką żadnych systemów OpenWrt. Więc jeśli potrzebujesz tego na OpenWrt-BB lub -CC, zajrzyj /overlaynajpierw do środka .
W oparciu o rozwiązanie Yeti istnieje inna możliwość, która może być szybsza. Zamiast obliczać rozmiar dudla plików w listpliku, możemy użyć deklarowanego rozmiaru w controlpliku.
Coś jak mój mały opkg_sizesskrypt
cd /usr/lib/opkg/info
for i in *.control
do
echo `grep Size "$i" | cut -f 2 -d :` "${i%.control}"
done
Jeśli chcesz posortować dane wyjściowe, możesz je uruchomić sort:
./opkg_sizes | sort -n
Porównanie wyników mojego skryptu z ujawnionymi różnicami yeti . To dlatego, że wspomniał, /overlay/usr/lib/opkg/infopodczas gdy myślałem, że /overlayprefiks jest niepotrzebny. Cóż, nie do końca rozumiem dlaczego, ale /usr/lib/opkg/infodaje także pakiety systemowe, a /overlay/usr/lib/opkg/infodaje tylko pakiety użytkownika.
Jeśli więc użytkownik jest zainteresowany również pakietami systemowymi, użyj pierwszej wersji. Ale aby uzyskać tylko pakiety użytkownika, po prostu zamień pierwszą linię na:
cd /overlay/usr/lib/opkg/info
Po wykonaniu tych czynności oba skrypty odnoszą się do tych samych pakietów, ale z różnymi liczbami ... (poza oczywistą różnicą między bajtami a kilobajtami :-))
root@ap8:~# ls -l 1412453029-14.07-wdr4300-default-packages
-rw-r--r-- 1 root root 2683 Oct 4 20:03 1412453029-14.07-wdr4300-default-packages
root@ap8:~# du 1412453029-14.07-wdr4300-default-packages
3 1412453029-14.07-wdr4300-default-packages
lspokazuje rozmiar w bajtach, dupokazuje rozmiar wszystkich bloków przydzielonych przez plik.
duliczy się w ziarnistości wielkości bloku systemu plików. I / overlay to tylko zapisowa część warstw systemu plików.
Ta odpowiedź jest ulepszoną wersją odpowiedzi Zviki . Ponieważ kod źródłowy jest zasadniczo inny, uważam, że lepiej jest dodać go jako dodatkową odpowiedź, zamiast edycji oryginalnej.
#!/bin/sh
grep -H Installed-Size: /overlay/usr/lib/opkg/info/*.control | \
sed 's,^.*/\([^/]\+\)\.control:Installed-Size: *\(.*\),\2\t\1,'
Oryginalny kod wymaga zbyt wiele widelce, co czyni go tak wolno, jak jedną sekundę. Ten ulepszony kod jest krótszy i wykorzystuje tylko trzy procesy, co prowadzi do niesamowicie szybkiego czasu pracy wynoszącego 0,02 s (na moim routerze).
Możesz dostosować ścieżki:
/overlay/usr/lib/opkg/info/*.control→ pakiety zainstalowane przez użytkownika. Są to pakiety, które można usunąć, aby zwolnić miejsce./rom/usr/lib/opkg/info/*.control→ pakiety systemowe. Nie można ich odinstalować. (Chyba że naprawdę wiesz, co robisz). Ponieważ są one przechowywane na partycji tylko do odczytu, usunięcie ich nie zwolni dodatkowego miejsca./usr/lib/opkg/info/*.control → wszystkie pakiety.Dla mnie najłatwiejszym sposobem było użycie find;
find / -size +500k
z wydajnością poniżej;
# find / -size +500k
/lib/libc.so
/lib/modules/4.4.92/mac80211.ko
/overlay/upper/usr/lib/libcrypto.so.1.0.0
/overlay/upper/usr/lib/libdns.so.165.0.4
/overlay/upper/usr/sbin/sshd
/rom/lib/libc.so
/rom/lib/modules/4.4.92/mac80211.ko
/usr/lib/libcrypto.so.1.0.0
/usr/lib/libdns.so.165.0.4
/usr/sbin/sshd
Były to „duże” pliki w mojej instalacji LEDE. Potrzebowałem dodatkowej przestrzeni na routerze, aby móc sformatować, podzielić na partycje i zamontować pamięć USB. Dostosuj +500kdo rozmiaru pliku, który bardziej Ci odpowiada.