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?
źródło
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?
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 .list
są 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 zlib
ma 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 zlib
ma 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 S
wchodzi 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 /overlay
go /overlay/upper
naprawia to.
Status quo ( opkg-list-user-installed-sorted-by-size
nie 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 /overlay
strukturze? 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 /overlay
najpierw do środka .
W oparciu o rozwiązanie Yeti istnieje inna możliwość, która może być szybsza. Zamiast obliczać rozmiar
du
dla plików wlist
pliku, możemy użyć deklarowanego rozmiaru wcontrol
pliku.Coś jak mój mały
opkg_sizes
skryptJeśli chcesz posortować dane wyjściowe, możesz je uruchomić
sort
:EDYTOWAĆ
Porównanie wyników mojego skryptu z ujawnionymi różnicami yeti . To dlatego, że wspomniał,
/overlay/usr/lib/opkg/info
podczas gdy myślałem, że/overlay
prefiks jest niepotrzebny. Cóż, nie do końca rozumiem dlaczego, ale/usr/lib/opkg/info
daje także pakiety systemowe, a/overlay/usr/lib/opkg/info
daje 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:
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 :-))
ls
pokazuje rozmiar w bajtach,du
pokazuje rozmiar wszystkich bloków przydzielonych przez plik.źródło
du
liczy 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.
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.źródło
Dla mnie najłatwiejszym sposobem było użycie
find
;z wydajnością poniżej;
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
+500k
do rozmiaru pliku, który bardziej Ci odpowiada.źródło