Я намагаюся налаштувати OpenWrt на своєму пристрої і вийшов з місця. Я завантажував деякі пакети інструментів. Тепер як я можу визначити їх вагу, щоб вирішити, що видалити?
Чи можливо відобразити розмір встановлених пакетів за допомогою OPKG?
Я намагаюся налаштувати OpenWrt на своєму пристрої і вийшов з місця. Я завантажував деякі пакети інструментів. Тепер як я можу визначити їх вагу, щоб вирішити, що видалити?
Чи можливо відобразити розмір встановлених пакетів за допомогою OPKG?
Відповіді:
Не кожне середовище OpenWrt налаштоване однаково, тому моя відповідь - це постріл у темряві ...
Приклад виведення взято з OpenWrt-12.09 на "TP-Link TL-WDR4300".
ssh
у ваш маршрутизатор.
Перевірте свої файлові символи.
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
є мікро SD карта моєї палички UMTS ... просто ігноруйте це.
Багато маршрутизаторів прошиваються подібним чином, як це бачиться тут: Файловий файл з читанням у режимі зчитування робиться псевдозаписаним файловою системою.
Загляньте всередину /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
Цей каталог містить інформацію про додатково встановлені пакети. Файли, що закінчуються, - .list
це списки файлів, встановлених пакетом із подібною назвою (без .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
У пакеті zlib
встановлено 3 файли.
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
Пакет zlib
має 73 кбайт встановлених файлів.
Сирий 1-лайнер склеїти все це разом, і це скоротить вихід:
# 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!
Додано 2014-10-17:
Наступний висновок взято з OpenWrt-12.09 на "TP-Link TL-WR703N" і показує, як додати сортування виводу за розміром пакета.
Погляньте, де і як змінна S
надходить у гру ...
# 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---
Знову: HTH!
Додано 13.01.2018:
Вищеописаний спосіб був протестований на OpenWrt-AA.
Тепер , дивлячись на Lede-17.01 шлях змінився: Заміна /overlay
з /overlay/upper
виправленнями цього.
Статус кво ( opkg-list-user-installed-sorted-by-size
не як 1-лайнер):
#!/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---"
}
Пробіг:
root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8 luci-ssl
9 libustream-mbedtls
13 px5g-mbedtls
338 libmbedtls
368 ---TOTAL---
Відкрите запитання: Коли /overlay
відбулася така зміна структури Росії? LEDE-17 є наступником OpenWrt-CC, і я не маю під рукою систем OpenWrt. Тож якщо вам це потрібно на OpenWrt-BB або -CC, спочатку загляньте всередину /overlay
.
На основі рішення yeti є ще одна можливість, яка може бути швидшою. Замість обчислення розміру du
для файлів у list
файлі ми можемо використовувати оголошений розмір у control
файлі.
Щось на зразок мого маленького opkg_sizes
сценарію
cd /usr/lib/opkg/info
for i in *.control
do
echo `grep Size "$i" | cut -f 2 -d :` "${i%.control}"
done
Якщо ви хочете сортувати вихід, ви можете запустити його sort
:
./opkg_sizes | sort -n
Порівнюючи результати мого сценарію з виявленими розбіжностями yeti . Це тому, що він посилався, /overlay/usr/lib/opkg/info
поки я думав, що /overlay
префікс зайвий. Ну, я не повністю розумію чому, але /usr/lib/opkg/info
дає також системні пакети, в той час як /overlay/usr/lib/opkg/info
дає лише пакунки користувача.
Отже, якщо користувача цікавлять і системні пакети, використовуйте першу версію. Але для досягнення лише пакунків користувача просто замініть перший рядок на:
cd /overlay/usr/lib/opkg/info
Після цього обидва сценарії відносяться до одних і тих же пакетів, але з різною кількістю ... (окрім очевидної різниці між байтами і кілобайтами :-))
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
ls
показує розмір у байтах, du
показує розмір усіх блоків, виділених файлом.
du
підраховується у файловій системі, що блокує деталізацію. І / overlay - це лише частина написання файлів у шарах файлової системи.
Ця відповідь - це вдосконалена версія відповіді Звіка . Оскільки вихідний код істотно відрізняється, я вважаю, що краще додати його як додаткову відповідь, а не редагування оригіналу.
#!/bin/sh
grep -H Installed-Size: /overlay/usr/lib/opkg/info/*.control | \
sed 's,^.*/\([^/]\+\)\.control:Installed-Size: *\(.*\),\2\t\1,'
Вихідний код потрібно занадто багато вилок, що робить його так повільно , як одна секунда. Цей вдосконалений код коротший і використовує лише три процеси, що призводить до високого швидкого виконання 0,02 с (на моєму маршрутизаторі).
Ви можете налаштувати шляхи:
/overlay/usr/lib/opkg/info/*.control
→ встановлені користувачем пакети. Це пакунки, які можна видалити, щоб звільнити місце./rom/usr/lib/opkg/info/*.control
→ системні пакети. Їх неможливо видалити. (Якщо ви дійсно не знаєте, чим займаєтесь.) Оскільки вони зберігаються в розділі, доступному лише для читання, їх видалення не звільнить додаткового місця./usr/lib/opkg/info/*.control
→ всі пакети.Для мене найпростішим способом було використання find
;
find / -size +500k
з виходом нижче;
# 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
Це були "великі" файли в моїй установці LEDE. Мені потрібен був додатковий простір на моєму маршрутизаторі, щоб я міг відформатувати, розділити та встановити деякий простір USB. Відрегулюйте +500k
розмір файлу, який вам більше підходить.